Register

Es wird ein Sachregister mit den Verweisen auf die entsprechenden Seitenzahlen automatisiert erzeugt.

Es soll in diesem Abschnitt demonstriert werden, wie ein Register mit den Verweisen auf die entsprechenden Seitenzahlen erzeugt wird. Es wird hierbei insbesondere gezeigt, wie Mehrfachnennungen eines Stichworts im Register vermieden und die Wiederholungen gleicher Seitenzahlen unterdrückt werden können (gilt lediglich für die Formatierung mit dem XSL Formatter von Antenna House).

Das Register, das hier produziert wird, geht davon aus, dass die Autoren für ihr Werk ein vollständiges Register erstellen, in dem die Einträge bereits alphabetisch geordnet sind. Die Autoren setzen außerdem Referenzen für die Register-Einträge im Werk-Inhalt. Dieses Register wird in einem XSLT-Prozess so umgeformt, dass es mit dem nachfolgenden Stylesheet-Ausschnitt in einem zweiten Prozess in die Formatierung des Werks integriert werden kann.

Auszug aus der DTD:

<!ELEMENT Register (Eintrag)*>
<!ELEMENT Eintrag (Eintrag-1, (Eintrag-2)*)>
<!ELEMENT Eintrag-1 (#PCDATA)>
<!ELEMENT Eintrag-2 (#PCDATA)>
<!ATTLIST Eintrag-1 Name NMTOKEN #REQUIRED >
<!ATTLIST Eintrag-2 Name NMTOKEN #REQUIRED >
...
<!ELEMENT A (#PCDATA | ... | Stw | ...)*>
...
<!ELEMENT Stw (#PCDATA)>
<!ATTLIST Stw Refname NMTOKEN #REQUIRED>
...

Stylesheet:

<xsl:template name="Sachregister">                                     ❶ 
   <fo:block start-indent="1em" text-indent="-1em" text-align-last="left">
      <xsl:for-each select="//Stw[@Refname='Beispiel' and not(preceding::Stw[@Refname='Beispiel'])]"> ❷
         <fo:block>
            <fo:inline>
               <xsl:for-each select="//Stw[@Refname='Beispiel']">
               <xsl:if test="position()=1">                           ❸ 
               <xsl:text></xsl:text>
                  <fo:page-number-citation ref-id="{generate-id()}"/> ❹
               </xsl:if>
               <xsl:if test="position()!=1">
               <xsl:text></xsl:text>
                  <fo:page-number-citation ref-id="{generate-id()}" 
                   axf:suppress-duplicate-page-number="true"/> ❹
               </xsl:if>
               </xsl:for-each>
            </fo:inline>
         </fo:block>
      </xsl:for-each>
   </fo:block>
</xsl:template>

❶ Es wird zunächst ein benanntes Template erzeugt. Dies geschieht durch Einsatz des Attributs name. Dieses Template kann mit dem Element <xsl:call-template> wieder aufgerufen werden.

❷ Anschließend wird das in das Register einzutragende Stichwort selektiert. Jedes Stichwort, das das Attribut Refname mit dem Wert Beispiel besitzt und keinen entsprechenden Vorgänger hat, wird selektiert. Der Ausschluss der Vorgänger dient zur Unterdrückung von Mehrfachnennungen. Für jedes solches Konstrukt muss im Werkinhalt ein Wert vorliegen.

❸ Hier wird überprüft, ob sich das gefundene Stichwort an erster Position befindet. Falls ja, erfolgt ein Eintrag.

❹ Das Element <fo:page-number-citation> erlaubt die Anzeige derjenigen Seite, in der sich der referenzierte Anker (Stw) befindet. Das Attribut ref-id dient zur Referenzierung der gesuchten ID. Jedes Stw im Werkinhalt bekommt mit der Funktion generate-id() diese ID. Das Attribut axf:suppress-duplicate-page-number sorgt dafür, dass keine doppelte Seitenzahl innerhalb des Registers angezeigt wird. Falls also ein Stichwort mehrmals auf einer Seite vorkommt, wird die entsprechende Seitenzahl nur einmal angezeigt. Diese Funktionalität ist nicht Teil der XSL-FO Recommendation, sondern, wie am Namespace axf zu erkennen ist, eine proprietäre Erweiterung des Antenna House Formatter.

 

 

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSL-FO bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © dpunkt.verlag GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSL-FO in der Praxis" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de