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

15.2 En détail: die Autoren in der DTD

Autoren sind Menschen, das heißt, sie haben einen Namen, sind geboren und eventuell schon gestorbenFussnoteIn einer Literaturgeschichte ist die Mehrheit der Akteure notgedrungen nicht mehr am Leben., und es gab/gibt wichtige Ereignisse in ihrem Leben. Anders als normale Menschen haben sie literarische Werke veröffentlicht. Diese Basisdaten müssen als Elemente in den konkreten Einträgen und als Elementtypen in der DTD enthalten sein. Darüber hinaus erschien es sinnvoll, die Daten des ersten Eintrags und der letzten Veränderung aufzunehmen sowie jedem Autor, gleich welchen Geschlechts, eine eindeutige Kennung zu geben, die nicht nur dem Nachnamen entspricht (bei den Manns und den Brontës führt das sonst schnell zu Problemen).

Struktur der Autoreneinträge

Folgender Ausschnitt aus der DTD beschreibt die Struktur eines Autoreneintrags:

<!ELEMENT lithist ( author+ ) >
<!ELEMENT author  ( name , vita , work* , url* , event* , comment* ) >

<!ELEMENT name    ( fname , lname , pseudonym? ) >
<!ELEMENT vita    ( born , died? ) >
<!ELEMENT work    ( title , year? ) >
<!ELEMENT url     ( #PCDATA ) >
<!ELEMENT event   ( what , where? , year, month? , day? ) >
<!ELEMENT comment ( #PCDATA | em | br)* >

<!ELEMENT born    ( year , month? , day? , where?  ) >
<!ELEMENT died    ( year , month? , day? , where?, sreason?  ) >
<!ELEMENT where   ( place , country ) >
        
Vorsicht!

Mindestens an einer Stelle enthält dieser DTD-Ausschnitt eine Falle. Wie das Kapitel 13 im Detail erläutert, sollte man bei der Entwicklung einer DTD möglichst restriktiv vorgehen. In diesem Sinne müsste hier work mit einem Plus-Zeichen statt des Sterns versehen sein; damit auf jeden Fall etwas darin steht. Leider lagen zum Zeitpunkt der DTD-Erstellung nur für einige Autoren Werkeinträge vor: eigentlich unangebrachte Großzügigkeit fürs Design. Bei fertig vorliegenden Daten gilt dasselbe für event und möglicherweise auch für comment

Die Top-down-Beschreibung der Struktur von Einträgen ist nicht ganz vollständig; es fehlen Jahr, Monat und Tag sowie einige weitere Daten; sie alle sind schlicht als Parsed Character Data (#PCDATA) definiert, also in sich nicht strukturiert (siehe dazu die vollständigen Listings am Ende dieses Kapitels). Auch für diese so genannten Blätter, die Endelemente oder Terminale, muss es Elementtypdeklarationen geben.

Vieles von dem, was oben steht, ist wahrscheinlich selbsterklärend. Ein paar Anmerkungen sollen hier dennoch folgen. Auf der obersten Ebene besteht ein Autor aus seinem Namen, einer zwingend vorhandenen Lebensbeschreibung (siehe unten), einer optionalen Liste seiner Werke, einem ebenfalls optionalen URL, eventuellen Begebenheiten sowie beliebig vielen Kommentaren. Auch die in dieser Ebene enthaltenen Elemente sind bis auf den URL und den Kommentar strukturiert.

Dass ein Name aus Vor- und Nachnamen bestehen muss, heißt, dass für diejenigen, die über ihr Pseudonym bekannt sind (Novalis, Lautréamont), auch der eigentliche Name vorhanden sein mussFussnoteEine Ausnahme ist vielleicht B. Traven, wenn man voraussetzt, dass seine Herkunft vielleicht doch unsicher ist.. Was den Namen betrifft, war zu überlegen, ob es außer Vor- und Nachnamen weitere geben sollteFussnoteNordamerikaner etwa hätten sicherlich einen middle name eingeführt., aber die Entscheidung ist zu gunsten der einfacheren Lösung gefallen.

Ein Kommentar soll sowohl aus Zeichendaten als auch aus den Elementen em und br bestehen können. In einem solchen Fall muss #PCDATA als erstes in der Reihe vorkommen.

Problem: mangelnde Daten

Zu den Lebensdaten: Das einzige, das man über Autoren, die vor tausend Jahren gelebt haben, weiß, ist manchmal das Geburtsjahr. Nicht einmal der Ort ist in Einzelfällen bekannt. Daher musste vita eine flexible Struktur haben. Nur born ist zwingend enthalten — und dort auch nur das Jahr der Geburt —, alles andere ist optional. died darf verständlicherweise nur einmal vorkommen, event hingegen beliebig oft.

Natürlich wäre es sinnvoll, zu den in work enthaltenen Werken immer das Jahr der Veröffentlichung zu haben, aber wie im Falle des Geburtsorts ist dieses Datum nicht immer verfügbar. Ähnlich chaotisch sieht es bei den Begebenheiten (event) aus: Aufgenommen werden sollen hier nur solche Ereignisse, bei denen außer dem Vorfall mindestens das Jahr bekannt ist. Ort und genauere Datumsangaben sind wiederum optional.

Metadaten: Attribute für einzelne Elemente

Was bislang völlig außer acht geblieben ist, sind die oben genannten Daten der Kennzeichung (ID) eines Autors und der Ersteintrag sowie das Datum der letzten Veränderung. Diese Daten stecken in Attributen, die im letzten DTD-Ausschnitt fehlten. Hier sind ein paar:

<!ATTLIST author   
          id          ID        #REQUIRED
          firstentry  CDATA     #REQUIRED   
          lastmod     CDATA     #REQUIRED >

<!ATTLIST work  
          genre     (novel|novella|story|poem
                     |drama|essay|biogr|sf|crime)   #REQUIRED >

<!ATTLIST lithead
          lang     (de|en)   "de" >

<!ATTLIST introduction  
          lang     (de|en)   "de" >

<!ATTLIST comment  
          lang     (de|en)   "de" >

<!ATTLIST what  
          cat     CDATA      #IMPLIED 
          lang     (de|en)   "de" >
        

Zunächst zum Element author. Die drei Attribute sind die genannten: Kennung (id), Ersteintrag (firstentry) und letzte Änderung (lastmod)FussnoteDenkbar wären weitere Attribute wie lastmodby (zuletzt geändert von) oder contrib für jemanden, der einen Eintrag beigesteuert hat.. Aber auch andere Elemente haben Attribute bekommen. Für jedes Werk muss eingetragen sein (#REQUIRED), zu welchem Genre es gehört. Etwas anders sieht es für das Element comment aus. Es ist dazu gedacht, möglicherweise in mehreren Sprachen vorhanden zu sein, wobei hier Deutsch (de) und Englisch (en) vorgesehen sind und Deutsch als Vorgabewert (Default) angenommen wird. Das sieht konkret so aus:

<comment>Dies ist ein deutscher Kommentar.</comment>
<comment lang="en">This, on the other hand, is in English.</comment>
        

Optional ist das Attribut cat (Kategorie) im Element what. Sein Zweck besteht darin, dort, wo es sinnvoll ist, die Begebenheit zu klassifizieren. Für Ausgaben wie zeige mir alle Nobelpreisträger kann das Attribut zu Rate gezogen werden. IMPLIED bedeutet, dass es nicht vorhanden sein muss und kein Vorgabewert existiert.

Wann Daten in Attributen enthalten sein sollen oder Elemente darstellen, ist schwierig abzuschätzen (siehe dazu Kapitel 14). Eine — und sei es kurze — Abhandlung zu diesem Thema erforderte hier zu viel Platz. Eve Maler beschäftigt sich ein ganzes Buch lang damit [male96] [male96]Developing SGML DTDs - From Text to Model to Markup - From Text to Model to Markup, Eve Maler, Jeanne L. Andaloussi, Upper Saddle River/NJ, 1996, Prentice-Hall. Die oben angeführten Attribute sind deshalb auf unterschiedliche Weise definiert, weil sie nicht dieselbe Funktion erfüllen: Mal muss ein Wert vorhanden sein sein (REQUIRED), mal nicht (IMPLIED), mal kann er einer aus einer vorgegebenen Liste sein (ein fehlendes Attribut erhält den Default). id etwa hat keinen vorgegebenen Wert, weil das keinen Sinn ergäbe — und außerdem ist es verboten, weil der Wert eindeutig sein muss (diese Bedingung kann ein Vorgabewert nicht erfüllen). Hier soll der Name des Autors stehen, unter Umständen gefolgt vom ersten Buchstaben des Vornamens (mannt oder brontec), wobei zu beachten ist, dass in SGML einige Zeichen innerhalb von Attributwerten nicht erlaubt sind, weswegen dort Umlaute wegfallen müssen (das ë in Brontë wird zum e). Da diese Anwendung mit der SGML-Ausgabe von Clarks Jade arbeitet, musste das auch hier sein.

Vorgabewert und Auswahlliste für Attribute

Die beiden anderen Attribute sollen eine wie auch immer geartete Datumsangabe enthalten. Im Gegensatz zu den Angaben in author macht der Eintrag für work Vorgaben darüber, was hier zu stehen hat. Im Beispiel handelt es sich um eine begrenzte Liste von Gattungen und Genres der Literatur, die sicherlich ergänzungsbedürftig istFussnoteWeder Briefroman noch Epos tauchen derzeit hier auf.. Der entscheidende Unterschied zu den drei folgenden Elementen ist, dass ein Einzelwerk keinem Default zugeordnet ist, weil der in diesem Fall nicht sinnvoll ist. Dagegen dürften die ersten Kommentare etc. zunächst auf Deutsch abgefasst sein, was das Eintragen eines Attributs überflüssig macht.

Qual der Wahl: Element oder Attribut

Um das Vorgehen etwas zu verallgemeinern: Die Entscheidung darüber, ob ein Datum besser als Element oder als Attribut Eingang ins Dokument finden soll, ist schwer zu beantworten. Ein Fingerzeig ist, wenn es sich um eine Auswahl aus einer begrenzten Menge von Werten handelt, wie in work das Attribut genre; hier bietet sich das Attribut an. Auch Informationen wie die id dürften nirgends als Element zu finden sein. Schwieriger ist die Entscheidung etwa beim url: könnte er nicht genausogut als Attribut von author dienen? Die Antwort ist ein klares Jein. Solange es immer höchstens einen URL zu einem Autor gibt, kann ein Attribut ausreichend seinFussnoteWie in Kapitel 13 genauer nachzulesen ist, reicht es oft, sich die Frage zu stellen: Ist es Inhalt oder ein Metadatum? Im ersten Fall sollte es ein Element sein, im zweiten ein Attribut.. Will man aber auf mehrere URLs verweisen und damit die Möglichkeiten des Linking in XML nutzen, sollte es auf jeden Fall ein Element url sein (siehe Kapitel 8).

Bei einer solchen Definition (die hier nicht vorkommt) von url handelte es sich um eine beliebig lange Liste von href-Elementen, die in der DTD als leere (durch EMPTY) deklariert nur über ihre Attribute Werte enthalten. Das heißt, dass sie einen Schrägstrich vor dem schließenden > haben müssen.

<ELEMENT url ( href )* >
<ELEMENT href EMPTY >

<ATTLIST href
            

Ein dieser DTD folgender Datensatz kann recht ausführlich sein, weil einige Elemente beliebig oft vorkommen können. Ein kurzes (was die Ausführung der Details angeht: unvollständiges) Beispiel soll genügen:

<!-- Thomas Mann -->

  <author ID="mannt"
          firstentry="1997/07/19"
          lastmod="1998/02/12">
    <name>
      <fname>Thomas</fname>
      <lname>Mann</lname>
    </name>
    <vita>
      <born>
        <year>1875</year>
        <month>6</month>
        <day>6</day>
        <where>
           <place>Lübeck</place>
           <country>de</country></where>
      </born>
      <died><year>1955</year>
           <month>8</month>
           <day>12</day>
        <where><place>Kilchberg b. Zürich</place>
           <country>ch</country></where>
      </died>
    </vita>

    <work genre="novel">
	<title>Buddenbrooks</title>
	<year>1901</year>
    </work>
    <work genre="novel">
	<title>Der Zauberberg</title>
	<year>1924</year>
    </work>
    <work genre="novel">
	<title>Doktor Faustus</title>
	<year>1947</year>
    </work>

    <event>
      <what>Italienaufenthalt mit Bruder Heinrich (bis 1897)</what>
      <year>1895</year>
    </event>
    <event>
      <what cat="marr">Heirat mit Katja Pringsheim</what>
      <year>1905</year>
    </event>
    <event>
      <what cat="nobel">Nobelpreis</what>
      <year>1929</year>
    </event>
    <event>
      <what>geht in die USA</what>
      <year>1939</year>
    </event>

    <comment>Eigentlich unnötig, aber dennoch: ein Erzähler, dessen
Romane vor allem mit gutem Wein und Rauchwaren zu genießen
sind. Besonders die Diskussionen zwischen Naphta und Settembrini im
"Zauberberg" sind geradezu köstlich.</comment>

  </author>

        

Zugegeben, hier fehlen viele Werke und Daten, die Literaturwissenschaftler gern sehen würden, und die Kommentare sind eher als Scherz gedacht, aber das Beispiel zeigt, wie schnell ein solcher Eintrag Dimensionen annehmen kann, die leicht über die 5- oder 10-KByte-Grenze hinausgehen (hier handelt es sich lediglich um gute zwei KByte).

Valid HTML 4.01!Valid CSS!