Überspringe Navigation

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.

Hypertext ist Literature, not Technology.

Theodor Nelson, http://www.xanadu.net/

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:

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

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.

Downloads

emacs

Generell

Hilfreiches

nxml-mode // Relax NG

Schemata zum Auszeichnen von Dokumenten

general interest

XML

docbook :: XML2PDF

Spezielles zu docbook

Slides

SVG

QuickLinks