XSL-FO / DITA
![]() |
![]() |
➪ Wie DocBook, ist auch DITA ein sehr leistungsfähiger Publishing-Standard; geboten werden Standardkonfigurationen für eclipse, tocjs, htmlhelp, javahelp, pdf, web, docbook. Im Unterschied zu DocBook konzentriert DITA sich auf die Erstellung und Auslieferung von "Topics".
Auf dieser Seite:Stark vereinfacht gesagt, setzt DITA auf verteilte Quelldateien (topic, empfohlener Name: ".dita"), die durch map- oder bookmap-Dateien (".ditamap") zusammengeführt werden. Sämtliche hierfür benötigten Dateien sind XML-Dateien, deren Strukturen über DTD bzw. XML-Schema definiert werden.
<map> umfasst im Wesentlichen eine Anzahl von topic-Referenzen, die sich auf bestimmte Topic-Dateien beziehen.
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN"
"../dtd/technicalContent/dtd/map.dtd">
<map title="Titel">
<topicref href="top1/tuwas.dita" type="concept">
<topicref href="top1/tuwasanderes.dita" type="task"/>
</topicref>
<topicref href="top2/lassdas.dita" type="concept">
<topicref href="top2/hatkeinenzweck.dita" type="concept"/>
</topicref>
</map>
Deutlich komplexer ist <bookmap>, eine Struktur, die beispielsweise so aufgebaut werden kann:
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN"
"../dtd/bookmap/dtd/bookmap.dtd">
<bookmap id="XML_XSD_XSL_XQuery">
<booktitle>
<booklibrary>
<ph>Wilfried Grupe</ph>
</booklibrary>
<mainbooktitle>XML-Technologien</mainbooktitle>
<booktitlealt>XML-Grundlagen, Validierung, Auswertung</booktitlealt>
</booktitle>
<bookmeta>
<authorinformation>
<personinfo>
<namedetails>
<personname>
<firstname>Wilfried</firstname>
<lastname>Grupe</lastname>
</personname>
</namedetails>
</personinfo>
<organizationinfo>
<namedetails>
<organizationnamedetails>
<organizationname>Wilfried Grupe</organizationname>
</organizationnamedetails>
</namedetails>
<addressdetails>
<thoroughfare>Klus 6</thoroughfare>
<locality>
<postalcode>37643</postalcode>
<localityname>Negenborn</localityname>
</locality>
<country>Deutschland</country>
</addressdetails>
<contactnumbers>
<contactnumber>Tel: 0151 750 360 61</contactnumber>
</contactnumbers>
<emailaddresses>
<emailaddress>info10@wilfried-grupe.de</emailaddress>
</emailaddresses>
<urls>
<url>www.wilfried-grupe.de</url>
</urls>
</organizationinfo>
</authorinformation>
</bookmeta>
<frontmatter>
<booklists>
<toc/>
<figurelist/>
<tablelist/>
<indexlist/>
</booklists>
<notices href="wg_xml/Anmerkungen.dita"/>
</frontmatter>
<chapter href="wg_xml/Validierung.dita">
<topicref href="wg_xml/DTD.dita"/>
<topicref href="wg_xml/XSD.dita">
<topicref href="wg_xml/XSD2_.dita"/>
<topicref href="wg_xml/XSD3_.dita">
<topicref href="wg_xml/XSD3_1.dita"/>
</topicref>
</topicref>
</chapter>
<chapter href="wg_xml/CSV.dita">
<topicref href="wg_xml/CSV_java.dita"/>
<topicref href="wg_xml/CSV_validate_XSLT.dita"/>
</chapter>
<appendix href="wg_xml/appendix.dita"></appendix>
<backmatter>
<booklists>
<figurelist/>
<indexlist/>
<toc/>
</booklists>
</backmatter>
</bookmap>
<topic>-Elemente definieren den Inhalt über eine Reihe klar definierter Childnodes. Der Aufbau ist beispielsweise:
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN"
"../dtd/technicalContent/dtd/topic.dtd">
<topic id="h0" xml:lang="de-de">
<title>XPath: concat</title>
<shortdesc>Die XPath-Funktion "concat" verkettet
mehrere Informationen zu einem String.</shortdesc>
<prolog>
<metadata>
<keywords>
<keyword>XSL</keyword>
<keyword>XPath</keyword>
<keyword>concat</keyword>
</keywords>
</metadata>
</prolog>
<body>
<section>
<title>XPath: concat</title>
<p>Erwartet werden hierbei mindestens zwei einzelne String-Parameter. </p>
<codeblock>
<xsl:value-of
select="//Ort[1]/Mensch[1]/name"/>
</codeblock>
<p>
<image href="file:///C:/wg/concat.jpg"/>
</p>
</section>
</body>
</topic>
Die Elemente <shortdesc> (Alternative: <abstract> für komplexere Darstellung), <prolog> oder <body> sind optional. Optionale weitere Elemente sind beispielsweise <related-links> mit einem oder mehreren Childnodes <link> und deren Childnode <linktext>.
Ebenfalls ein möglicher Childnode von <section> ist <simpletable>, die eine einfache Tabellenstruktur vorgibt.
<simpletable>
<sthead>
<stentry>Name</stentry>
<stentry>Beschreibung</stentry>
</sthead>
<strow>
<stentry>//element[1] </stentry>
<stentry>Das erste Element mit dem Namen element.</stentry>
</strow>
</simpletable>
Mit <ul> und <li> (ebenfalls Childnodes von <section>) lassen sich Aufzählungen darstellen
<ul>
<li>Daten-Consumer </li>
<li>Datenlieferant </li>
</ul>
... oder, verbunden mit einer Nummerierung
<ul>
<li>Daten-Consumer </li>
<li>Datenlieferant sendet via
<ol>
<li>FTP</li>
<li>Mail</li>
</ol>
</li>
</ul>
HTML vergleichbar, bietet auch DITA eine Reihe von Standardformatierungen an, hier nur eine kleine Auswahl:
<!DOCTYPE task PUBLIC "-//OASIS//DTD DITA Task//EN"
"../../dtd/technicalContent/dtd/task.dtd">
<task id="tuwas" xml:lang="de-de">
<title>To-Do-Liste</title>
<shortdesc>Unglaublich wichtig!!</shortdesc>
<taskbody>
<context>
<p>Es gibt noch was zu tun.</p>
</context>
<steps>
<stepsection>XML konvertieren</stepsection>
<step>
<cmd>Validiere das XML-Input-Dokument gegen ein XML-Schema.</cmd>
</step>
<step>
<cmd>Starte den Konvertierungsprozess mit ANT.</cmd>
</step>
<step>
<cmd>Prüfe das Resultat mit XML-Schema.</cmd>
</step>
<step>
<cmd>Starte eine Detailkontrolle mit Schematron.</cmd>
</step>
<step>
<cmd>Wenn alles ok ist: übernimm das XSL in das Live-System.</cmd>
</step>
</steps>
</taskbody>
</task>
Aufgerufen wird die DITA-Transformation durch ein ANT-Script, das nacheinander die ditamap-Datei, das Zielverzeichnis, das Zielformat sowie das Start-OK abfragt:
C:\DITA-OT1.8.5>ant -f build_demo.xml
Buildfile: C:\DITA-OT1.8.5\build_demo.xml
prompt.init:
prompt:
[echo] Please enter the filename for the DITA map that you
[echo] want to build including the directory path (if any).
[echo] The filename must have the .ditamap extension.
[echo] Note that relative paths that climb (..) are not supported yet.
[echo] To build the sample, press return without entering anything.
[input] The DITA map filename: [C:\DITA-OT1.8.5\samples\hierarchy.ditamap]
mychapter.ditamap
[echo]
[echo] Please enter the name of the output directory or press return
[echo] to accept the default.
[input] The output directory (out): [out]
output20180923
[echo]
[echo] Please enter the type of output to generate.
[echo] Options include: eclipse, tocjs, htmlhelp, javahelp, pdf, or web
[echo] Use lowercase letters.
[echo]
[input] The output type: (eclipse, tocjs, htmlhelp, javahelp, pdf, [web], docbook)
pdf
[echo]
[echo] Ready to build wg_xmlseminar_chapter.ditamap
[echo] for pdf in output20180923
[echo]
[input] Continue? (Y, [y], N, n)
y
Bei Aufruf beispielsweise von htmlhelp startet das ANT-Script, das im ersten Schritt ein temp - Verzeichnis generiert und anschließend eine nicht unbeträchtliche Konvertierungsstrecke in Gang setzt, unter Aufruf folgender XSL-Stylesheets:
bevor zum Schluß eine generierte .chm-Datei kompiliert wird. Der Prozess startet nur unter der Voraussetzung, dass die jeweils betreffenden DTD-Dateien vorhanden und die XML-Dateien valide sind.
Ziemlich komplex und ohne einen leistungsfähigen Editor mühsam nachvollziehbar sind die DITA-DTD- bzw. XML-Schema-Dateien, die intensiv über gegenseitige includes arbeiten.Als Beispiel für zahlreiche weitere XML-Schema-Definitionen, die andere XSDs einbinden, möchte ich hier nur bookmap.xsd betrachten:
DITA-OT1.8.5/schema/bookmap/xsd/bookmap.xsd
Ebenso verteilt auf zahlreiche Einzeldateien sind die zahlreichen XSL-Stylesheets, die sich über include und import gegenseitig einbinden. Als Beispiel für zahlreiche weitere XSL-Dateien sei hier nur dita2html.xsl genannt, das dita2html-base.xsl einbindet; diese bezieht sich ihrerseits auf ein Dutzend weiterer XSL-Stylesheets.
DITA-OT1.8.5/plugins/org.dita.xhtml/xsl/dita2html.xsl
DITA-OT1.8.5/plugins/org.dita.xhtml/xsl/dita2html-base.xsl
wg / 23. September 2018
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de