This is the mail archive of the docbook-apps@lists.oasis-open.org mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Bordernotes


Hi list,
Last week I asked whether anybody had done something like notes at the
border of the text, but got not replies. Maybe I didn't express myself
clearly enough? Anyway, here it is.
I have attached an example PDF and the corresponding XML and XSLT.  
I use a format of 
<xsl:param name="page.width">240mm</xsl:param>
<xsl:param name="page.height">190mm</xsl:param> 
<xsl:param name="page.margin.outer">4cm</xsl:param>
<xsl:param name="page.margin.inner">2cm</xsl:param>
for my texts, so that I have a lot of space to use and currently the
values for the bordernotes are hardcoded.

This might not work with all texts. I encountered "nulls" from FOP when
I had very long paragraphs and a lot of footnotes. It seems that at a
certain point FOP is no more able to calculate the wrapping of the text.

Stephan
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!--!DOCTYPE book SYSTEM "file:///C:/x/saxon/dtd/docbookx.dtd">
<?xml-stylesheet type="text/xsl" href="C:/x/docbookxsl/old/html/docbook.xsl" ?-->

<!DOCTYPE book SYSTEM "file:///C:/x/docbookxsl/docbook-xsl-1.54.1/docbookx.dtd">
<?xml-stylesheet type="text/xsl" href="file:///C:/x/docbookxsl/docbook-xsl-1.57.0/html/docbook.xsl" ?>

<book lang="en">
   <title>Micropayment</title>


   
<chapter id="chap_Print">
   <title>Print On Demand</title>

   <section id="sec_PrintDefin">
      <title>Definition</title>
      
				<para>
            <note role="border"><para>Definition SAX </para></note>
				<emphasis>SAX</emphasis> (= <quote>Simple API for XML</quote>) war die erste allgemein verfügbare XML-API für Java.
				Bis heute stellt SAX quasi das Fundament für alle weiteren Entwicklungen in Bezug auf Java-XML-APIs dar.
				Besonderes Merkmal von SAX ist dabei sein <quote>stream</quote> - basierter Ansatz: Genau wie eine normale Textdatei
				in Java mittels eines Input - Streams eingelesen wird, so wird auch eine XML - Datei dem SAX - Parser, der die SAX - API
				konkret implementiert, zugeführt. Demzufolge wird das XML - Dokument <quote>Stück für Stück</quote> eingelesen. Werden bestimmte
				XML - Elemente erkannt, werden Ereignisse ausgelöst. Vom Entwickler zu implementierende Ereignis - Handler reagieren dann entsprechend
				auf diese Ereignisse. Auf diese Weise kann die gesamte Struktur und die Daten eines XML - Dokumentes ausgewertet werden.
				</para>
				
				<para>
            <note role="border"><para>Sequentieller Zugriff</para></note>
				Nachteilig bei diesem Ansatz ist dabei die Tatsache, dass eine 
            Navigation innerhalb des Dokumentes nicht möglich ist. Die Datei
				wird ja einfach von Anfang bis Ende eingelesen. Ist eine Stelle 
            im Dokument <quote>überlesen</quote> worden, so kann auf sie nicht
				mehr im selben Durchgang ohne weiteres zugegriffen werden, wenn sie 
            noch einmal gebraucht werden sollte. Es sei denn, die vom
				Entwickler implementierten Ereignis - Handler würden gleichzeitig 
            Struktur und Daten des Dokumentes im Speicher abbilden, und so
				während des Abarbeitens des Dokumentes quasi eine Arbeitsspeicher - 
            Kopie anlegen, auf die dann auch noch nachträglich zugegriffen
				werden kann. Dies ist jedoch relativ aufwendig.
				</para>
				
				<para>
				<note role="border"><para>Vorteile SAX </para></note>
            Trotz dieses recht schwerwiegenden Nachteils ist SAX bis heute noch in 
            Gebrauch. Dafür gibt es vor allem einen Grund:
				Geschwindigkeit. SAX - Parser sind im allgemeinen sehr schnell. 
            Deswegen ist SAX für die Problemstellungen zu präferieren,
				wo Navigation innerhalb des XML - Dokumentes weniger wichtig ist, 
            als vielmehr eine hohe Geschwindigkeit.				
				</para>
				
				<para>
            <note role="border"><para>Vorteile DOM </para></note>
				<emphasis>DOM</emphasis> (= <quote>Document Object Model</quote>) verfolgt 
            einen gänzlich anderen Ansatz. Nach erfolgtem Einlesen
				eines XML - Dokumentes steht dieses als DOM - Baum im Speicher zur 
            Verfügung. Innerhalb des DOM - Baumes kann dann beliebig
				navigiert und sowohl auf Daten als auch die Struktur Einfluss genommen 
            werden.
				</para>
				
				<para>
            <note role="border"><para>Geschwindigkeit DOM vs. SAX </para></note>
				Nachteilig hierbei ist die geringere Geschwindigkeit: Da erst ein 
            kompletter Lesedurchgang erfolgen und dabei ein DOM - Baum
				im Speicher erzeugt werden muss, kann DOM in Bezug auf die Geschwindigkeit 
            nicht mit SAX konkurrieren. Auch ist DOM durch
				durch die Abbildung des Dokumentes im Speicher natürlich auch speicherintensiver.
				</para>
            
            

   </section>
   
</chapter>



</book>

Attachment: StyleTest.pdf
Description: Adobe PDF document

<?xml version="1.0" encoding="iso-8859-1"?>

<!--
  The layout of the header of the pages. For standard pages, this
  is a table with a single row and 3 columns.

-->




<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0"
                xmlns:fo="http://www.w3.org/1999/XSL/Format";
                exclude-result-prefixes="#default"
>


  
 

<xsl:template match="note[@role='border']"  mode="border">
<fo:block border="0pt dotted gray"
  background-color="#fbfafa"
  font-style="italic"
  font-size="9pt"
  >
 <xsl:apply-templates/>
 </fo:block>
</xsl:template>


<xsl:template match="note[@role='border']">
  <!-- Don't do anything here. Otherwise the footnote would be 
  displayed twice !-->
</xsl:template>



<xsl:template match="section/para">

<fo:table  table-layout="fixed" width="20cm"
   border="0pt solid gray"
   text-align="left"   
 >
<fo:table-column column-number="1" column-width="proportional-column-width(7)"/>
<fo:table-column column-number="2" column-width="proportional-column-width(3)"/>   
<fo:table-body>

 <fo:table-row>
<fo:table-cell border="0pt solid red">
  <!-- Need to explicitly set the formating, 
  content in tables is left oriented by default.-->
  <fo:block xsl:use-attribute-sets="normal.para.spacing" 
  text-align="justify">
    <xsl:call-template name="anchor"/>
    <xsl:apply-templates/>
  </fo:block>
</fo:table-cell>

<fo:table-cell padding="8mm">
  <xsl:apply-templates select="note[@role='border']" mode="border"/>
</fo:table-cell>


</fo:table-row>
</fo:table-body>
</fo:table>

    
</xsl:template>  
</xsl:stylesheet>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]