Mehrfaches Einfügen einer Datei

(Auszug aus "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" von Thomas Schraitle)

Sie dürfen eine Datei in Ihr Dokument mehrmals einfügen, es muss jedoch ein gültiges Dokument ergeben. Ein Problem sind die Attribute id bzw. xml:id in der eingefügten Datei. Enthält eine Datei diese Attribute und wird sie mehrfach eingebunden, führt dies zu doppelten Werten und Ihr Dokument ist nicht mehr gültig.

Eine Möglichkeit dies zu vermeiden ist, im Dokument völlig auf ID-Werte zu verzichten. Dies ist eine radikale Lösung und hat den Nachteil, dass Sie nicht mehr auf den Inhalt dieser Datei verweisen können. Eine andere, sanftere Möglichkeit ist, das Wurzelelement mit dem ID-Wert auszuschließen und nur die Kindelemente einzufügen. Wir gehen dabei von folgender, einzufügender Datei aus:

<section ANKER="irgendeine-id">
    <title>...</title>
    <para>Irgendein Text ... </para>
</section>

Ersetzen Sie den Platzhalter ANKER durch id in DocBook 4 und xml:id in DocBook 5.

Um eine Datei mehrfach einzufügen und das Wurzelelement mit dem ID-Wert auszuschließen, gehen Sie wie folgt vor:

  1. Erstellen Sie eine Referenz in der Verbunddatei:
<xi:include href="Datei.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>

Hierdurch wird die komplette Datei eingefügt. Dadurch ist der ID-Wert irgendeine-id schon bekannt.

  1. Fügen Sie ein section-Element in der Verbunddatei ein und setzen Sie einen neuen ID-Wert.
  2. Ersetzen Sie den Platzhalter im vorigen Schritt durch das zweite include-Element. Diesmal verwenden Sie einen XPointer-Ausdruck, der alle Kindelemente selektiert:

DocBook 4:

<xi:include href="Datei.xml" xmlns:xi="http://www.w3.org/2001/XInclude" xpointer="xpointer(/section/*)"/>

DocBook 5:

<xi:include href="Datei.xml" xmlns:xi="http://www.w3.org/2001/XInclude" xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(/db:section/*)"/>

Der Ausdruck im xpointer-Attribut selektiert alles was sich unterhalb von section befindet, jedoch nicht das Wurzelelement selbst.

Die komplette Datei ist im folgenden Beispiel abgebildet.

Beispiel: Mehrfaches Einfügen über XPointer-Ausdruck

DocBook 4:

<book>
 <chapter>
  <!-- ... -->
  <xi:include href="datei.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </chapter>
 <appendix>
  <!-- ... -->
  <section id="irgendeine-id">
     <xi:include href="datei.xml" xpointer="xpointer(/section/*)" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  </section>
 </appendix>
</book>

DocBook 5:

<book version="5.0" xmlns="http://docbook.org/ns/docbook">
 <chapter>
  <!-- ... -->
  <xi:include href="datei.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </chapter>
 <appendix>
  <!-- ... -->
  <section xml:id="irgendeine-id">
    <xi:include href="datei.xml" xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(/db:section/*)" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  </section>
 </appendix>
</book>

Die obere Vorgehensweise ergibt ein zweites section-Element, dass einen anderen ID-Wert besitzt. Dadurch wird das gesamte Dokument gültig.

Die vorgestellte Methode funktioniert nicht, wenn weitere ID-Werte in der eingefügten Datei enthalten sind. In diesem Fall erscheinen wieder doppelte ID-Werte und Ihr komplettes Dokument wird ungültig. In diesem Fall sollten Sie überprüfen, ob sich Ihr Dokument anders strukturieren lässt, die betroffene Datei in kleinere Einheiten aufzuteilen oder auf ID-Werte und Referenzierung zu verzichten.

  

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

Copyright © 2009 Millin Verlag
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" 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.

Millin Verlag, Siebengebirgsring 36, 53797 Lohmar, info(at)millin.de