XMLidP2000

Sitemap

Sitemap

1 Einführung
1.1 Warum mehr weniger ist
1.2 Warum mehr mehr ist
1.3 Wohin die Reise geht
2 Was sind Dokumente?
2.1 Eine kurze Geschichte der Textverarbeitung
2.2 Bestandteile eines Dokumentes
2.3 Die neue, alte Idee: Strukturorientiert schreiben
2.4 Die Entwicklung des Hypertextes
2.5 Textformate im Web
2.6 Das SGML-Konzept: Generic Markup
2.7 Dokumente versus Daten
3 XML im Web
3.1 XML bei der Verwaltung von Websites
3.2 Clientseitige XML-Interpretation
3.2.1 XML mit CSS
3.2.2 XML mit XSL(T)
3.3 XML auf dem Server
3.4 Linking-Möglichkeiten von XML
3.5 XML als Datenaustauschformat
4 XML Quick Start
4.1 Dokumenttyp-Definition (DTD) und Instanzen
4.2 Verarbeitung der Dokumente
4.2.1 Beispiel: Verarbeitung mit Cost/TCL
4.2.2 Beispiel: Verarbeitung mit XSLT
4.2.3 Beispiel: XML/XSLT im Internet Explorer
4.2.4 Fazit
5 XML-DTDs: Die verständliche Beschreibung
5.1 Ein Wort zur Notation
5.2 Dokumente
5.3 Elemente
5.4 Zeichen, Namen und Zeichendaten
5.5 Kommentare
5.6 Processing Instructions
5.7 Wo bleibt Multimedia?
5.8 Dokumenttyp-Definition (DTD)
5.8.1 Elementtyp-Deklaration
5.8.2 Attributlisten-Deklaration
5.8.3 Möglichkeiten, die DTD zu gestalten und zu gliedern
5.8.4 Notation-Deklaration
6 Namensräume in XML
7 XPath: Adressierung von XML-Dokumentteilen
7.1 Zu Grunde liegendes Datenmodell
7.2 Zugriff auf den Datenbaum
7.3 Hilfe von Operatoren
7.4 Kernfunktionen für den Datenzugriff
8 XML: Linking
8.1 Notwendige Begriffe
8.2 XLink: einfache und erweiterte Links
8.2.1 Einfache Verweise
8.2.2 Erweiterte Links
8.2.3 XLink in der Praxis
8.3 XPointer: Verweise in Dokumente hinein
8.3.1 XPath-Erweiterungen in XPointer
9 Überblick über Stylesheet-Sprachen
9.1 Cascading Style Sheets
9.1.1 Wertzuweisungen
9.1.2 Formatierungsmodell
9.1.3 CSS und XML
9.1.4 Ein Beispiel: XML im Mozilla
9.2 Document Style Semantics and Specification Language
9.2.1 Flow Objects
9.2.2 Verarbeitungs-Modus
9.2.3 DSSSL praktisch
9.2.4 Langer Marsch von DSSSL nach HTML
9.3 Extensible Stylesheet Language (XSLT und XSL)
9.3.1 Verhältnis von XSLT zu XSL
9.3.2 Formatierung mit XSL
10 XSL-Transformationen
10.1 Grundsätzliches über Templates
10.2 Ergänzungen zum Datenmodell von XPath
10.3 Struktur von XSLT-Stylesheets
10.4 Den Ergebnisbaum erzeugen
10.4.1 Diverse Basiselemente
10.4.2 Formatierte Nummerierung
10.4.3 Schleifen und bedingte Verarbeitung
10.4.4 Sortieren
10.4.5 Variable und Parameter
10.4.6 Zusätzliche Funktionen
10.4.7 XSLT-Erweiterungen
10.4.8 message, output
11 XSLT in Web-Anwendungen
11.1 XSLT im Internet Explorer
11.2 Linklisten erzeugen
11.3 Details einer Literaturgeschichte
11.3.1 Sortierte Überblicksseiten
11.3.2 Kalender: einzelne Tage ausgeben
12 XML-Editoren
12.1 Übersicht
12.1.1 Emacs + PSGML (mit XML-Unterstützung)
12.1.2 XML Notepad
12.1.3 XML Spy
12.1.4 XMetal
12.1.5 Epic
12.1.6 MarkupKit (für MS Word)
12.1.7 WordPerfect Office2000
12.2 Emacs und PSGML (mit XML-Unterstützung)
12.3 XML-Notepad
12.4 XML Spy
12.5 XMetal
12.6 Epic
12.7 MarkupKit (für MS Word)
12.8 WordPerfect Office2000
12.9 Fazit
13 Entwicklung einer DTD
13.1 Auswahl einer Mehrzweck-DTD
13.2 Entwurf einer DTD
13.2.1 Dokumentanalyse
13.2.2 Tipps und Tricks
13.3 Instanzen ohne DTD
14 Herstellung dieses Buches
14.1 Zielsetzung und Randbedingungen
14.2 Definition der DTD
14.2.1 Schritt 1: Die Grobstruktur
14.2.2 Schritt 2: Elemente auf Zeichenebene
14.2.3 Schritt 3: Die Details
14.3 Formatieren des Manuskriptes
14.3.1 Konvertierung in HTML
14.3.2 Aufbereitung für den Ausdruck
14.4 Erfahrungen mit der zweiten Auflage
15 Anwendungsbeispiel Literatur
15.1 Vorüberlegungen
15.2 En détail: die Autoren in der DTD
15.3 Wie die Daten ins Web gelangen
15.3.1 Inhaltsverzeichnis generieren
15.3.2 Ausgabe der Autorendaten
15.4 Vollständige Listings
15.4.1 DTD für die Literaturgeschichte
15.4.2 DSSSL-Listing: Inhaltsverzeichnis
15.4.3 DSSSL-Listing: Ausgabe eines einzelnen Autors
15.4.4 Perl-Code für Ausgabe einzelner Autoren
16 Verteilte Softwareverwaltung mit XML
16.1 Aufgabenbeschreibung
16.2 XML als Datenbasis
16.3 Bilden von DTD-Hierarchien
16.4 Zusammentragen von verteilten XML-Fragmenten
16.5 Fazit
16.6 Stylesheet zur Transformation in HTML
17 E-Commerce mit XML
17.1 B2B-E-Commerce
17.1.1 Die Rolle von XML
17.1.2 Technische Aspekte
17.2 BMEcat
17.3 Electronic Business XML (ebXML)
17.3.1 Arbeitsgruppen
17.3.2 Zeitplan des Projekts
17.4 XML und EDIFACT
18 XML und Apache
18.1 XML-Transformation per CGI
18.1.1 Konfiguration des Servers
18.1.2 CGI-Skript: xmlhandler.cgi
18.1.3 Beispiel: von HTML nach HTML mit DSSSL oder XSLT
18.2 Cocoon
18.2.1 Extensible Server Pages (XSP)
18.2.2 Beispiel: Formatierung in PDF mit XSL
18.2.3 Beispiel: Simuliertes XLink mit Dynamic HTML/JavaScript
18.2.4 Installation
19 XHTML: Neues HTML 4 — erweiterbar
19.1 Status quo: HTML neu definiert
19.2 Modulare Zukunft
20 Transformation von XML in WML und HTML
20.1 Erzeugen der WML-Dateien
20.2 Erzeugen der HTML-Dateien
21 Ausblick
21.1 XML Schema
21.2 Programmierung mit XML-Daten
21.3 XML und Java
21.4 Resource Description Framework
21.5 Die Zukunft
A Extensible Markup Language (XML) 1.0
A.1 Einleitung
A.1.1 Herkunft und Ziele
A.1.2 Terminologie
A.2 Dokumente
A.2.1 Wohlgeformte XML-Dokumente
A.2.2 Zeichen
A.2.3 Allgemeine syntaktische Konstrukte
A.2.4 Zeichendaten und Markup
A.2.5 Kommentare
A.2.6 Processing Instructions
A.2.7 CDATA-Abschnitte
A.2.8 Prolog und Dokumenttyp-Deklaration
A.2.9 Standalone-Dokumentdeklaration
A.2.10 Behandlung von Leerraum
A.2.11 Behandlung des Zeilenendes
A.2.12 Identifikation der Sprache
A.3 Logische Strukturen
A.3.1 Start-Tags, End-Tags und Leeres-Element-Tags
A.3.2 Elementtyp-Deklarationen
A.3.3 Attributlisten-Deklaration
A.3.4 Bedingte Abschnitte
A.4 Physikalische Strukturen
A.4.1 Zeichen- und Entity-Referenzen
A.4.2 Entity-Deklarationen
A.4.3 Analysierte Entities
A.4.4 Behandlung von Entities und Referenzen durch einen XML-Prozessor
A.4.5 Konstruktion des Ersetzungstextes von internen Entities
A.4.6 Vordefinierte Entities
A.4.7 Notation-Deklarationen
A.4.8 Dokument-Entity
A.5 Konformität
A.5.1 Validierende und nicht-validierende Prozessoren
A.5.2 Benutzen von XML-Prozessoren
A.6 Notation
A.7 Anhang A: Referenzen
A.7.1 Normative Referenzen
A.7.2 Weitere Referenzen
A.8 Anhang B: Zeichenklassen
A.9 Anhang C: XML und SGML (nicht normativ)
A.10 Anhang D: Expansion von Entity- und Zeichenreferenzen (nicht normativ)
A.11 Anhang E: Deterministische Inhaltsmodelle (nicht normativ)
A.12 Anhang F: Automatische Erkennung von Zeichenkodierungen (nicht normativ)
A.13 Anhang G: XML-Arbeitsgruppe des W3C (nicht normativ)
B Verknüpfen von Style Sheets mit XML-Dokumenten Version 1.0
B.1 Die xml-stylesheet-Processing-Instruction
B.2 Anhang A: Referenzen
B.3 Anhang B: Begründung
C Verhältnis von XML zu SGML und HTML
C.1 XML und SGML
C.2 XML und HTML
D Übersichten
D.1 Cascading Style Sheets
D.1.1 CSS-Eigenschaften und -Werte
D.1.2 CSS-Muster
D.2 DSSSL: Flow Objects
D.3 Syntax der XSLT-Elemente
D.4 DTD-Fragment für XSLT-Stylesheets (nicht normativ)
D.5 Relevante Spezifikationen und Organisationen
D.5.1 International Organization for Standardization
D.5.2 World Wide Web Consortium
D.5.3 Organization for the Advancement of Structured Information Standards
D.5.4 Internet Society und Internet Engineering Task Force
D.5.5 ISO-639-Sprachcodes
D.5.6 ISO-3166-Ländercodes
D.5.7 Zeichensatz ISO-Latin-1
D.5.8 Sonderzeichen
D.6 XML-1.0-Regeln

8.3 XPointer: Verweise in Dokumente hinein

Vorab eine Warnung. Wie die erweiterten Links sind auch die in diesem Abschnitt behandelten XPointer noch nicht verabschiedet. Das mag aber der Fall sein, wenn Sie dies lesen, denn gelegentlich geht die Entwicklung beim W3C recht schnell voran. Zum Zeitpunkt der Fertigstellung dieses Buches waren beide Entwürfe (XLink und XPointer), zwar schon im sogenannten Last-Call-Status, aber in beiden Fällen scheint es intern noch Diskussionen zu geben.

Sind erweiterte Links aus HTML-Sicht schon eine deutliche Verbesserung, so bieten die XPointer Möglichkeiten, auf Dokumentteile zuzugreifen, die noch weit darüber hinausgehen. Dazu bedienen sich die XPointer der am Anfang dieses Kapitels erwähnten Möglichkeit, einem URI nach dem Fragmentbezeichner ('#') etwas folgen zu lassen: An ihn schließt sich ein XPointer an. Anders ausgedrückt: In XML müssen die dem Fragmentbezeichner folgenden Zeichen immer einen XPointer darstellen. Vorkehrungen dafür, dass auf etwas verwiesen werden kann, sind in den XML-Dokumenten nicht notwendigerweise zu treffen (kein <A NAME="ABD"> mehr).

Ein paar spezielle Begriffe müssen wir den Definitionen vom Anfang des Kapitels hinzufügen, damit klar ist, welche wir wie verwenden.

Originalbezeichnung deutsche Übersetzung Erklärung
axis Achse Folge von Daten, die XPointer nutzt (Beispiel: alle Kindelemente)
location Ort Vergleichbar dem Knoten in XPath, kann hier aber auch ein Punkt oder Bereich sein
location set Ortsmenge Geordnete Liste aus dem, was ein XPointer-Ausdruck ergibt; vergleichbar der Knotenmenge in XPath, hier aber ergänzt um Punkt und Bereich
predicate Prädikat Boolscher Ausdruck; von XPointer dazu genutzt Teil-Ressourcen im Verhältnis zu anderen auszuwählen
point Punkt Ort im Dokument
range Bereich Auswahl aus dem gesamten Inhalt zwischen zwei Punkten
Ein XPointer auf einen Bereich

Abbildung 28: Ein XPointer auf einen Bereich

Zu den Achsen ist zu sagen, dass sie sich auf die aus Kapitel 7 bekannten beziehen. Hier folgt eine Kurzübersicht.

Hinweis
Achse bezieht sich auf
child Kinder des Kontextknotens
descendant Nachfahren des Kontextknotens
parent Direkter Vorfahr des Kontextknotens, so vorhanden
ancestor Vorfahren des Kontextknotens
following-sibling Alle Geschwister des Kontextknotens nach ihm
preceding-sibling Alle Geschwisterknoten des Kontextknotens vor ihm
following Alle Knoten im Dokument nach dem gegenwärtigen in der Dokumentreihenfolge
preceding Alle Knoten im Dokument vor dem gegenwärtigen in der Dokumentreihenfolge
attribute Attribute des Kontextknotens
namespace Die Namensraumknoten des Kontextknotens
self Nur der Kontextknoten
descendant-or-self Der Kontextknoten selbst und seine Nachfahren
ancestor-or-self Der Kontextknoten selbst und seine Vorfahren

XPointer beschreiben einen Ort oder Bereich innerhalb einer XML-Instanz. Um dies zu tun, bedienen sie sich der Struktur der einzelnen Dokumente. Nach dem Fragementbezeichner in einem einfachen Link wie <mylink xlink:type="simple" xlink:href=mydoc.xml#...> könnten folgende Ausdrücke stehen:

Beispiel
xpointer(id('a1001'))
id('a1001')

xpointer(buch/kapitel/abschnitt[position() = last() and @class='wichtig'])

Das sind die einfachsten Xpointer-Beispiele: Die ersten beiden verweisen beide auf das Element mit der — per definitionem immer eindeutigen — id a1001. Das dritte zielt auf den jeweils letzten Abschnitt von Kapiteln in einem Buch, die ein Attribut class mit dem Wert wichtig haben. Schon hier ist zu sehen, dass die Verweismöglichkeiten von XPointer sich nicht nur auf Elemente mit Attributen vom Typ ID beziehen, sondern auf beliebige Elemente (und Elementteile) sowie Attribute.

Xpointer bauen auf der XML Path Language auf, die Kapitel 7 darstellt. XPath, so die Kurzform, ist eine Sprache, die außer in den XPointern unter anderem in XSLT (siehe Kapitel 10) zum Einsatz kommt. XPointer sind so angelegt, dass sie außer Element(teilen) auch Punkte (point) und Bereichen (range) ansprechen können. Darüber hinaus ist es möglich, über den Vergleich von Zeichenketten Textstellen zu finden und innerhalb von Fragmentbezeichnern Ausdrücke, wie sie XPath vorsieht, zu verwenden.

In der Backus-Naur-Form ist zu erkennen, dass es drei Arten gibt, wie sich XPointer ausdrücken lassen: entweder ein Name, eine Kindfolge oder ein Fragment.

XPointerFragID
[1] XPointerFragID ::= Name '|' ChildSeq '|' GeneralFragmentPart+
[2] ChildSeq ::= '/1' ('/' [0-9*)* | Name ('/' [0-9]*)*
[3] GeneralFragmentPart ::= 'xpointer' '(' XPointerExpr ')' | Scheme '(' SchemeSpecificExpr ')'
[4] Scheme ::= QName - 'xpointer'
[5] SchemeSpecificExpr ::= StringWithBalancedParantheses
[6] StringWithBalancedParantheses ::= [^()]* ('(' StringWithBalancedParantheses ')' [^()]*)*
[7] XPointerExpr ::= Expr | RangeExpr

Die vollständige Form eines XPointer-Ausdrucks [3] beginnt mit der Zeichenkette xpointer oder einem anderen Scheme (den zweiten Fall deckt der Entwurf nicht ab, sieht ihn vor allem für die Zukunft vor). Dem xpointer folgt in Klammern ein Ausdruck (XPointerExpr), der entweder [7] denen aus XPath entspricht (Expr) oder eine XPointer-Erweiterung ist (RangeExpr).

Aus Gründen der Abwärtskompatibilität sieht der Entwurf die Möglichkeit vor, XPointer wie in HTML anzugeben: mydoc.xml#a1001. In diesem Fall steht der Fragmentbezeichner implizit für eine ID und schreibt sich als XPointer eigentlich #id('a1001'). Außerdem ermöglicht XPointer es, auf Elemente durch Aufschreiben ihres Ortes zuzugreifen: Dafür steht die Kindfolge (ChildSeq). Auf diese Weise lassen sich Elemente — nicht Attribute oder andere Knoten — über Schrägstriche und Ziffern ansprechen. /1 etwa steht für das unter dem Wurzelknoten angesiedelte (Dokumenttyp-)Element.

Generell gilt für XPointer, dass sie, wenn sie in XML-Dokumenten vorkommen, das Kleinerzeichen und das &-Zeichen nur in maskierter Form beinhalten dürfen (&lt; und &amp;).

Auf die Regel [6] oben bezogen, existiert eine Gültigkeitsbeschränkung: Klammern und das Caret, die hier eine Bedeutung haben, müssen, maskiert werden, wenn man ihnen diese Bedeutung nehmen und sie als normale Zeichen verwenden will. Beiden muss in solchen Fällen ein Caret vorangestellt sein (^(, ^) und ^^). Auch für Regel [7] existiert eine Gültigkeitsbeschränkung. Expr muss immer eine Knotenmenge zurückgeben.

Wie das Pluszeichen im Diagramm [1] oben zum Ausdruck bringt, kann ein XPointer-Fragmentbezeichner mehrere GeneralFragmentPart- Bestandteile haben. Und da die Spezifikation derzeit nur ein Schema vorsieht, das der XPointerExpr vorangehen kann (xpointer), heißt das, es kann mehrere mit xpointer beginnende Ausdrücke in einem Fragmentbezeichner geben. Wenn mehrere vorhanden sind, wie im folgenden Beispiel, werden sie von links nach rechts abgearbeitet.

<!-- DTD -->
<!element kapitel (...)>

<!attlist kapitel
   id  ID #REQUIRED>

<!-- XPointer -->
xpointer(id('kapitel11'))xpointer(//*[@id="kapitel11"])

Dieser dem Entwurf entnommene Fragmentbezeichner sorgt dafür, dass die XPointer-Implementierung zunächst nach einem Element sucht, dessen id den Wert kapitel11 hat. Findet sie ein solches Element, ist die Suche beendet. Da es sein kann, dass keine DTD vorliegt, findet die Software das Element nicht — möglicherweise ist, anders als in obigem Beispiel selbst ein Attribut id nicht einmal als ID deklariert. In diesem Fall kommt das zweite GeneralFragmentPart zum Einsatz, und die Software sucht nun nur noch nach einem Attribut id eines Elements (//* steht für alle Elemente an beliebiger Stelle des Dokuments), das den Wert kapitel11 hat.

Für die XPointer sind mehrere Fehlerklassen definiert, die jeweils charakterisieren, wo der Fehler entstanden ist; allerdings ist derzeit noch keine Fehlerbehandlung vorgesehen.

Die letzte Fehlerart deutet an, dass es Unterschiede zwischen XPath und XPointer geben könne. Dem ist richtig: XPointer beinhaltet ein paar Erweiterungen gegenüber Xpath.

Herunter 8.3.1 XPath-Erweiterungen in XPointer

Valid HTML 4.01!Valid CSS!