XML editieren und publizieren
Dieser Abschnitt von gungfu.de befindet sich zur Zeit noch im Aufbau.
Letzte Aktualisierung: (09.05.2004)
Evtl. aktueller geht's in der Abteilung für
"Publizieren mit XML" meines Blogs.
Theodor Nelson, http://www.xanadu.net/Hypertext ist Literature, not Technology.
Was soll erreicht werden?
Ich möchte ein Publishing-System zum Publizieren mit XML zusammenstellen. Dieses System soll leicht zu bedienen sein und qualitativ hochwertige Ausgaben produzieren (wie z.B. LaTeX das macht).
Als Ausgabemedien schweben mir Web, Print und Präsentationen vor.
Das hier vorgestellte System soll ein vollwertiger Ersatz für Produkte sein, die auf einzelnen der genannten Gebiete (oder auf allen) Lösungen produzieren können. Das Bewegen von einem Gebiet zum anderen (bzw. die Wahl eines anderen Ausgabemediums) soll dabei jedoch vollständig automatisiert vonstatten gehen können.
Ein interessanter Nebeneffekt des hier beschriebenen Systems ist, dass es kostenfrei ist. D.h. die verwendeten Produkte sind kostenlos im Netz zu haben.
Warum XML?
Man könnte doch auch LaTeX, oder einfach Applikationen aus einem Office-Paket benutzen.
Das stimmt - könnte man. Aber man müsste dann für jedes Ausgabemedium ein neues
Dokument erstellen:
- LaTeX enthält bereits im Quelltext Angaben zum Aussehen des jeweiligen Textelements. Für verschiedene Ausgabemedien müsste man das jeweils abändern. Für LaTex existiert aber eine relativ angenehme Erweiterung für Slides, also Präsentationen
- Office-Produkte - abgesehen davon, dass sie unhandlich sind - erzeugen meist schlechteste
HTML-Ausgabe. Ich möchte da nicht nacharbeiten müssen.
Und was (X)HTML angeht habe ich hohe Ansprüche.
Auch hier müsste für jedes Ausgabemedium ein neues Dokumt erstellt werden, bzw. ein ursprüngliches Textdokumt exportiert werden.
Vorteile von XML
single source Prinzip
Mit XML gibt es solche 'Umwandlungsprobleme' in weit geringerem Umfang. In der XML-Welt existiert der
Gedanke des Write once - publish everywhere.
auch Single source Prinzip
. D.h. ein Text wird einmal
geschrieben und kann dann auf verschiedenen Ausgabemedien publiziert werden.
Views
Neben dem Darstellen derselben Information auf verschiedenen Medien bietet XML die leicht zu realisierende Möglichkeit, aus einem Dokument verschiedene Informationen 'herauszuziehen', um diese getrennt darzustellen. Man nennt dies verschiedene Ansichten oder Views desselben Dokuments.
Man kann sich das so vorstellen, als würde man über ein Bild eine Schablone legen, die bestimmte Teile des Bildes weiterhin sichtbar lässt, andere Teile jedoch verdeckt. Jede View ist eine solche Schablone.
Voraussetzung hierfür ist ein gutes Auszeichnen/'Markuppen' des Dokumentinhalts. Das Stichwort
hier ist semantic markup
. Man
sollte sich das so vorstellen, dass man einen Text (ohne jegliche Formatierung) schreibt und dann
verschiedene Textstücke, die einen Inhaltsblock darstellen, zusammenfasst. Jeder Autor wird das
schlußendlich jedoch anders machen.
declarative markup - semantic markup
Wenn man einfach schreibt Eier Mehl Zucker
, dann wird daraus nicht klar, in welchem Zusammenhang
diese drei Wörter stehen.
Wenn man diese Wörter aber als Liste auszeichnet, dann wird das deutlicher:
<ul>
<li>Eier</li>
<li>Mehl</li>
<li>Zucker</li>
</ul>
(ul
steht für 'unordered list', li
für 'list item')
Im Falle eines XML-Dialekts (eigentlich '-Anwendung') für Rezepte könnte man auch schreiben:
<rezept>
<name>Eierkuchen</name>
<zutaten>
<zutat>Eier</zutat>
<zutat>Mehl</zutat>
<zutat>Zucker</zutat>
</zutaten>
</rezept>
Im Webbereich (HTML) zeichnet man wichtige Textpassagen mit <em>
aus ('em' steht
für 'emphasized', also 'betont'):
<em>Das ist wichtig!</em>
Im Gegensatz zu dieser semantischen (oder auch 'logischen') Auszeichnung ist auf vielen - eigentlich 99% -
Internetseiten noch presentational markup
anzutreffen, also 'Darstellungsauszeichnung'. Dort zeichnet man
nicht die Bedeutung aus, sondern, wie das Textstück dargestellt werden soll. Also zum
Beispiel italic: <i>Das ist auch wichtig, wird aber bloß
als 'kursiv darzustellend' ausgezeichnet.</i>
.
Wenn man jetzt ganz viele Rezepte hat, dann ist es durch die semantische Auszeichnung ganz einfach
möglich eine Liste aller Rezeptnamen zu erstellen. Man geht durch jedes <rezept>
und
hängt dessen <name>
an die Liste.
Diese Liste wäre dann ein View auf die Rezepte, die bloß die Rezeptnamen enthält.
Im Publishing-System wird man solche Views brauchen, um z.B. die Inhaltsangabe eines Aufsatzes erstellen zu
können. Dazu später mehr.
Wie funktioniert dieses Schreibe es einmal, publiziere es überall
?
Man verfasst einen Text und zeichnet ihn mit einer durch XML definierten Sprache aus, z.B. DocBook - oder, wie ich es vorhabe - mit XHTML.
Durch das Stylen des XML mit sog. Stylesheets gelangt man dann zu Ausgaben für
verschiedene Medien. Die Ausgabe für das Internet ist durch Verwendung von XHTML bereits abgedeckt.
Mehr zum Einsatz von Stylesheets gibts später...
Wie oben bereits beschrieben existiert als weitere Möglichkeit die Verwendung
verschiedener Views, die Möglichkeit also aus demselben XML-Dokument verschiedene Daten
herauszuziehen.
Z.B. wird so die Inhaltsangabe des gedruckten Textes erzeugt. Wohl gemerkt ohne die Inhaltsangabe
selbst von Hand erstellen zu müssen. Das geschieht automatisch.
kein proprietäres Format
XML ist nicht gebunden an irgendeinen Editor bzw. Wordprocessor. Es ist kein Binärformat,
d.h. es kann unter Zuhilfenahme eines einfachen Texteditors vom Menschen gelesen werden.
Dadurch kann man leicht zwischen verschiedenen Editoren wechseln, ohne das Format portieren
zu müssen.
Außerdem ist man besser für die Zukunft gewapnet: Ich bin mir nicht sicher, ob man in zwanzig Jahren noch
ein Word95-Dokument lesen können wird. Mit XML bin ich mir ziemlich sicher. Schließlich ist es im Prinzip
nichts anderes als eine TXT-Datei.
Diese Zukunftssicherheit hängt hauptsächlich damit zusammen, dass XML ein Standard ist, der weitläufig anerkannt und verwendet wird. Dadurch, dass die Sprache so weite Verbreitung gefunden hat, wird eine Rückwärtskompatibilität wohl immer gewährleistet sein.
Wiederverwendbarkeit
Mit copy & paste kann man eigentlich jedes Dokument oder Teile davon wiederverwenden. Nur: man dupliziert dabei die Information. Man macht sie redundant und die Gefahr einer Inkonsistenz wird groß, d.h. es ist nicht mehr leicht zu gewährleisten, dass der duplizierte Datenbestand in allen Ausgaben denselben Inhalt hat. Man denke an Adressinformationen auf'm Laptop, auf'm PC und auf'm Handy. Oft ändert man an einer Stelle was, ohne es auf den anderen Geräten auch zu aktuallisieren. Schon ist der Datenbestand inkonsistent.
Mit XInclude bietet XML die Möglichkeit eines dynamischen Einbindens von anderen Quellen (oder Teile davon) in ein XML-Dokument. Dabei bleibt die Quelle an sich unangetastet. Die Informationen aus der Quelle werden dabei nicht in das einbindende Dokument kopiert: Wenn die Quelle verändert wird, werden sich die Änderungen beim nächsten Verarbeiten des einbindenden Dokuments zeigen (Die Inklusion findet nach dem Parsen und vor dem weiteren Verarbeiten statt.).
Die Suche nach einem passenden Editor
Mein bisheriger HTML-Editor phase5 erwies sich mit der Zeit immer mehr als für das Arbeiten mit XML ungeeignet. Daher begab ich mich auf die Suche nach einem anderen, besseren Editor.
Meine kurzen Versuche XEmacs zu verwenden, scheiterten. Speziell die Verwendung des psgml-modes war nicht transparent (ich fand keine Installationsanleitung im Netz). Daher bin ich auf GNU Emacs gewechselt. Dafür gibt's eine ganz tolle Installationsanleitung. Es gibt außerdem noch eine TEI-Emacs Version, die gleich die TEI-DTDs, Schemas und XSLT-Stylesheets für TEI, den PSGML-Mode und den nXML-Mode von James Clark installiert.
Man kann mit Emacs zwar bestimmt ganz tolle Sachen machen, aber mir ist die Lernkurve zu steil.
Mit der 'normalen' Installation bin ich zugegebenermaßen auch nicht zurecht gekommen (ich habe dir Konfigurationsdatei nicht gefunden :-() Deshalb habe ich den TEI-emacs installiert...
Ich möchte hier nicht unerwähnt lassen, dass es im OpenOffice-Paket einen (WYSIWYG) XML-Editor gibt.
Exkurs: Konfigurationsdatei .emacs
Ok, ok, ich habe sie gefunden. Bzw. habe ich herausgefunden, dass man sie erst selbst erzeugen muss... ;-)
Vorteile von emacs/nXML
- Kontext-sensitives Editieren (Autovervollständigung)
- Anstelle von DTDs werden Relax NG-Schemas verwendet. Diese können entweder explizit mit der editierten Datei verbunden werden, oder sie werden automatisch ausgewählt.
- Für DocBook, XHTML, XSLT, RDF/XML und Relax NG selbst werden die Relax NG-Schemas bereits mitgeliefert.
- Validitätsfehler werden in realtime angezeigt, d.h. während man Text eingibt.
- Umfassendes Syntaxhighlighting und automatisches Einrücken entsprechend der Hierarchie.
Erste Anpassungen
In der online-Hilfe für emacs unter Windows gibt es eine Sektion zum Anpassen an Windows. Folgt man den Ausführungen dort, verhält sich emacs etwas mehr wie eine Standardwindowsanwendung.
Was zu tun ist
Erstmal muss die Umgebungsvariable HOME gesetzt werden. In dem dort angegebene Verzeichnis erzeugt man die Datei .emacs.
Es kann für Updates der emacs-Installation nützlich sein, wenn man für eigene Veränderungen ein eigenes Verzeichnis erstellt, das als Schwesterverzeichnis der eigentlichen emacs-Installation realisiert werden kann:
---- tei-emacs | |- emacs_addons | |- bin |- site-lisp
In das site-lisp-Verzeichnis von emacs_addons kann man dann eigene Erweiterungen stecken. Erweiterungen wie z.B CUA für das Windowsverhalten von CTR+v, c, x und z in emacs.
In .emacs fügt man dann entsprechend eine Liste von load-paths ein:
(setq load-path
(nconc load-path (list "C:/Programme/emacs_addons/site-lisp")))
erste Schritte
Der Artikel First steps with PSGML and TEI beschreibt - ähm - die ersten Schritte mit emacs im PSGML-mode.
hervorgehobene Links
Downloads
- TEI-emacs - eine Komplettinstallation für Windows und Unix.
- Der CUA-mode passt emacs an das Verhalten von CTRL+v, CTRL+c, CTRL+x und CTRL+z in Windows an.
emacs
Generell
- GNU emacs - die Hauptseite des Projekts
- SGML for Windows NT - eine ausführliche Anleitung zur Installation einer Publishingumgebung mit emacs unter Windows
Hilfreiches
- A Tutorial Introduction to GNU Emacs ist eine kurze und gute Einführung zu wichtigen Konzepten und Funktionen des Editors.
- Auf GNU Emacs quick reference card gibt es eine Liste
der am häufigsten verwendeten Tastaturkürzel für emacs.
Ausdrucken und über die Tastatur hängen! ;-) - emacswiki - ein - ähm - emacswiki.
nxml-mode // Relax NG
- nXML-Mode beschreibt den emacs-Mode.
- RELAX NG Tutorial ist ein Tutorial vom Entwickler von Relax NG, James Clark.
- RELAX NG's Compact Syntax ist eine kurze Einführung in die alternative, kompaktere Syntax von Relax NG.
- Relax NG - das Buch von Eric van der Vlist, das im O'Reilly-Verlag erschienen ist als kostenfreie Onlineversion.
Schemata zum Auszeichnen von Dokumenten
- DocBook, oder evtl. besser geeignet: Simplified DocBook - unter 'online summary' gibt's eine Liste der Elemente
- XHTML
- Oder, man erstellt ein eigenes Schema. Im Zusammenspiel mit nXML bietet sich natürlich Relax NG an.
general interest
XML
- XML :: Links - eine kurze Link- und Textsammlung auf gungfu.de
docbook :: XML2PDF
- DocBook XSL: The Complete Guide -- hilft sicherlich weiter
- DocBook -- das Buch von Norman Walsh als online-Ausgabe
- What is XSL? -- kurzer Überblick. Auch der Vergleich zwischen XSL und CSS.
- The Design of the DocBook XSL Stylesheets
- Comparison of XSL-FO Render software -- Fop, PassiveTex, XEP oder XSL Formatter?
- FOP -- Formatting Objects Processor des apache-Projekts
Spezielles zu docbook
- Customizing DocBook XSL -- welche Parameter kann man wie ändern...
- Bibliographies mit docbook/XSL
- Bibliographies mit docbook/XSL - 2
- Docbook Title Pages
- DocBook2OperashowCustomizationLayer -- XSL-Stylesheet zum Transformieren von docbook nach OperaShow
- Mathe in docbook
- Editoren für MathML
Slides
- Präsentationen erstellen mit DocBook
- DHTML-enabled
DocBook-Slides -- Slides, die auf Tastendruck reagieren.
Ist wohl - The Slides Document Type
SVG
- Sodipodi -- kostenloser kleiner Editor
- WebDraw -- von Jasc - kostet
- XStudio 6.0 -- von EvolGrafix - kostet
- SVG-Cafe -- Forum