5.2. Tutorial XML¶
XML ist eine Auszeichnungssprache (Extensible Markup Language) und dient der strukturierten Darstellung von Daten. Wie HTML verwendet XML auch Tags zur Auszeichnung von Elementen. Im Gegensatz zu HTML, beschreiben Tags nicht wie der Inhalt dargestellt werden soll, sondern wie der Inhalt beschrieben werden kann. XML dient dazu, Struktur, Inhalt und Darstellung eines Dokuments stark zu trennen.
Tags sind durch spitze Klammern gekennzeichnet. Unterschieden wird zwischen öffnenden Tabs, z.B.
Da XML wesentlich allgemeiner ist als HTML, ist es möglich weitere Markup Sprachen zu definieren. So lässt sich mit XML, die Markup Sprache HTML definieren.
Ein XML-Dokument kann so aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<buch>
<titel>Der Traum</titel>
<autor/>
</buch>
5.2.1. Aufbau eines XML-Dokuments¶
Ein XML-Dokument enthält Deklarationen, Elemente, Attribute, Kommentare, Zeichenreferenzen und Verarbeitungsanweisungen. Im Folgenden werden die wichtigsten dargestellt.
Deklaration Leitet ein XML-Dokument ein:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
xml kennzeichnet das Dokument als XML
version=”1.0” Versionsnr. des verwendeten XML-Standards
encoding=”utf8” Festlegung der Zeichenkodierung
standalone=”yes” gibt es eine externe Auszeichnungsdeklaration?
5.2.1.1. XML-Elemente¶
Die wichtigsten Einheiten, in die sich ein Dokument gliedern lässt, werden Elemente genannt. Das Wurzelelement umschließt alle weiteren Elemente, wodurch sich hierarchisch eine Baumstruktur ergibt. Die Bedeutung der Elemente werden in den Tags beschrieben. (Siehe Vonhoegen(2011), Seite 49.)
XML-Attribute
Alle Elemente können mit beliebigen Attributen versehen werden, die bestimmte Eigenschaften eines Elements festhalten sollen. Attribute werden nur im Starttag des Elements platziert. Der Attributname darf im selben Element nur einmal vorkommen.
<haus nr="22" nr="23">
ist nicht zulässig
Mehrere Attribute und ihre Werte eines Elements werden durch Leerzeichen getrennt.
<person vorname="Jane K" nachname="Austen">
Auch leere Elemente wie <leer\>
können Attribute enthalten:
<leer name="leeres Element"\>
Während Elemente andere Elemente enthalten können, dürfen Attribute nicht verschachtelt werden.
5.2.1.2. XML-Kommentare¶
Grundsätzlich lassen sich Kommentare im gesamten Dokument einfügen, außer innerhalb von Deklarationen und Tags. Auch darf kein Kommentar vor der XML-Deklaration stehen. Ein Kommentar beginnt mit <!--
und endet mit -->
.
Zeichenreferenzen
XML bietet bestimmte XML spezifische Zeichen an. Um die Zeichen zwischen Tags dennoch benutzen zu können, ohne dass diese vom XML Prozessor als Markupzeichen interpretiert werden, müssen diese mit bestimmten Zeichenreferenzen ersetzt werden. Hierfür stellt XML fünf Entitäten bereit:
&
für das & ( Et-Zeichen )>
für das <( Größer-als-Zeichen )<
für das >( Kleiner-als-Zeichen )"
für das “( Ersatzzeichen für Anführungszeichen )'
für das ‘ ( Ersatzzeichen für Apostroph )
In DTD-Dokumenten können auch eigene Entitäten deklariert werden. (Entitäten sind spezielle Zeichenfolgen, die von einer Anwendung, die das XML-Dokument bearbeitet, durch einen bestimmten Text ersetzt werden. Entitätsnamen beginnen stets mit dem Symbol ‘&’’ und enden mit ‘;’)
5.2.2. Anforderungen an ein XML-Dokument¶
XML-Dokumente müssen wohlgeformt sein, d.h. folgende Regeln müssen erfüllt sein:
Es gibt nur ein Wurzelelement (Tag welche alle weiteren Tags umschließt)
<buch>
<titel> Der Traum </titel>
<autor> Thomas Mann </autor>
</buch>
Jedes Element muss einen Start- und einen Endtag besitzen
<buch> Informationen zum Buch
<autor> Thomas Mann </autor>
<titel> </titel>
<abstract/>
</buch>
Falsch:
<buch> Informationen zum Buch
<autor> Thomas Mann
</buch>
Elemente dürfen geschachtelt sein, sich aber nicht überlappen Falsch
<beispiel><autor>Thomas Mann <\beispiel><\autor>
Richtig
<beispiel><autor>Thomas Mann <\autor><\beispiel>
Attributwerte müssen in Anführungszeichen stehen
<beispiel attributwert="500"><\beispiel>
Namensgebung: Elementnamen beginnen mit
[A-Za-z\:\_]
, “xml” darf nicht im Namensanfang stehen, Namen sind casesensitive:<beispiel>ungleich <\Beispiel>
5.2.3. Namensräume¶
Aufgrund der freien Namenswahl in XML von Element- und Attributnamen, kann es zu Überschneidungen von Namen mit unterschiedlichen Bedeutungen kommen. Im Hinblick darauf, dass XML-Dokumente von unterschiedlichen Programmen ausgewertet und bearbeitet werden können, führen Mehrdeutigkeiten schnell zu unerwünschten Ergebnissen. Als Beispiel dient der einfache Elementname <title>
. Dieser kann in verschiedenen Kontexten unterschiedliches meinen. Zwar ist es möglich den Namen zu spezifizieren, wie Buchtitel, Ehrentitel usw., doch könnte dies zu “künstlerischen Bezeichnungen” (Siehe Meuss(2002), Seite 66.) führen oder auch nicht immer so angewandt werden. Namensräume sollen die Eindeutigkeit von Namen gewährleisten, indem die einzelnen Namen als Teile eines bestimmten Gegenstandsbereich behandelt werden. XML-Namensräume werden in der Regel über eine URL identifiziert, um Eindeutigkeit zu gewährleisten - die URL muss nicht auf eine vorhandene Web-Ressource verweisen. Die Deklaration des Namensraums geschieht in der Form eines Elementsattributes. Der Namensraum bezieht sich auf das Element und all seine Kindelemente. Soll der Namensraum für das ganze XML-Dokument gelten, ist der Namensraum in dem Wurzelelement zu definieren.
Beispielsweise kann die Namensraumdefinition im Element
<buch xlns:ttl=http://titel.com/buch>... <\buch>
xlns ist der reservierte Attributname für Namensräume
ttl das selbst gewählte Präfix als Abkürzung für den Namensraum
http://titel.com/buch der eigentliche Namensraum Das Prefix wird dann dem betroffenen Element oder Attribut zur Eindeutigkeit vorangestellt
<ttl:titel>.. <\ttl:titel>
5.2.4. 4 DTD¶
Eine XML-Dokumenttyp-Definition(DTD) definiert die Regeln für ein XML-Dokument. Sie definiert welche Elemente (und Attribute) es gibt, und wie diese im Dokument angeordnet werden müssen. Ein XML-Dokument wird gültig genannt, wenn es alle Regeln seiner DTD befolgt.
Dokumenttyp-Deklaration
Die DTD wird durch eine Dokumenttyp-Deklaration in das XML-Dokument eingebunden. Sie teilt dem Prozessor mit, wo die DTD zu finden ist. Ist die DTD extern, erfolgt die Einbindung über:
<!DOCTYPE wurzelelement SYSTEM "Document-Name.dtd">
Intern lässt sich die DTD im XML-Dokument selbst definieren als:
<!DOCTYPE wurzelelement [
<!ELEMENT buch(autor, titel)>
<!ELEMENT autor>
.. ]>
Elementdeklaration
Elemente werden über eine <!ELEMENT..>
Deklaration eingeführt. In der Deklaration folgt der Name des Elements, wie er auch in der XML Datei vorkommen soll. Dahinter folgt in einem Klammerpaar ein Inhaltsmodell.
Beispiel
<!ELEMENT bild (titel, url, abstract, person+)>
<!ELEMENT titel(#PCDATA)>
[...]
Inhaltstyp | Beispiel | Bedeutung |
---|---|---|
EMPTY | <!ELEMENT Name EMPTY> | ein Element ohne Inhalt, aber evtl. mit Attributen |
ANY | <!ELEMENT Name ANY> | beliebiger Inhalt, solange wohl geformtes XML |
#PCDATA | <!ELEMENT Name #PCDATA> | Das Element enthält nur Zeichendatan |
Gemischter Inhalt | <!ELEMENT Name (#PCDATA | CHILDNAME)> | Das Element enthält nur Zeichendaten oder eine Kombination von Zeichendaten und Unterelementen |
Elementinhalt | <!ELEMENT Name (Child1, Child2)> | Ein Element enthält nur Unterelemente |
Tabelle 1: Inhaltstype für Elemente |
Die Anzahl der (Unter)Elemente können durch Indikatoren +,*, ? bestimmt werden. z.B. kann das Childelement einmal, keinmal oder mehrmals vorkommen.
Attributlistendeklaration
Diese Deklaration führt alle Attribute, die in einem gegebenen Element verwendet werden können. Sie wird durch <!ATTLIST> eingeleitet. Nach Angabe des Elements und Attributs, können noch Typ wie auch Standardwert beschrieben werden. Tabelle 2, 3 geben einen Überblick über mögliche Auszeichnungsmöglichkeiten. (Siehe Vonhoegen(2011), Seite 90- 91) z.B.
Attributtyp | Beschreibung |
---|---|
CDATA | Einfache Zeichendaten ohne Markupzeichen |
ENTITY | Name einer in der DTD nicht deklariertennicht geparsten Entität |
Entities | Durch Leerzeichen getrennte Liste von Entitä-ten |
ID | Eindeutiger XML-Name, der als Identifizierereines Elements verwendet werden kann |
IDREF | Verweis auf den ID-Identifizierer eines Ele-ments |
IDREFS | Liste von Verweisen auf ID Identifizierern |
NMTokens | Liste von mehreren XML Namen |
NOTATION | Verweis auf eine Notation z.B. Name für einnicht XML-Format wie Grafikdatei |
Tabelle 2: Attributtypen in DTD
Vorgabedeklaration | Beschreibung |
---|---|
#IMPLIED | Keine Vorgabe |
#REQUIRED | Kein Vorgabewert, aber Wert erforderlich |
#FIXED Wert | Weist dem Attribut einen Standardwert zu |
Tabelle 3: Werte für die Vorgabedeklaration
Ein DTD-Dokument hat immer als .dtd gespeichert.
beispiel.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT mediensammlung ( buch | film | musik )+>
<!ENTITY %katalogdaten "((kuenstler+|autor+|regie+),titel,untertitel?,jahr)">
<!ELEMENT kuenstler (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT regie (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT untertitel (#PCDATA)>
<!ELEMENT jahr (#PCDATA)>
<!ELEMENT film %katalogdaten;>
<!ELEMENT musik %katalogdaten;>
Das eigentliche XML-Dokument bindet die externe DTD beispiel.dtd ein:
<?xml version="1.0 " encoding="UTF-8" standalone="no" ?>
<!DOCTYPE mediensammlung SYSTEM "example3.dtd">
<mediensammlung>
<buch>
<autor>Paul Auster</autor>
<titel>Die New York-Trilogie</titel>
<jahr>1989</jahr>
</buch>
<film>
<regie>Richard Kelly</regie>
<titel>Donnie Darko</titel>
<jahr>2001</jahr>
</film>
</mediensammlung>
5.2.5. XML-Schema¶
DTD ermöglicht die Wohlgeformtheit eines Dokuments zu prüfen, prüft jedoch nicht den Inhalt der verwendeten Tags. Eine andere Möglichkeit Standards für XML- Dokumente einzurichten ist XML-Schema. Hierbei können die geforderten Inhalte von Tags und Attribute genauer angegeben werden, auch ohne auf eine seperate Syntax zugreifen zu müssen.
Schema-Definition
Die Schema-Definition befindet sich als Wurzelelement xs:schema in einer .xsd Datei. Die meisten Parser unterstützen ein Schema auch als Alternative zu DTD.
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>
Ein XML-Schema wird in einem XML-Dokument über folgende Zeile eingebunden:
<wurzelelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SCHEMA.xsd">
Elementdefinition
Jedes Element wird in einer xs:element -Deklaration angegeben. Unterschieden werden einfache und verschachtelte Elemente. Erstere, die nur einfachen Inhalt ohne weitere verschachtelte Elemente und Attribute besitzen, benötigen im Schema das Attribut type, das den zulässigen Typ des Inhalts angibt. Die Syntax einer einfachen Elementdeklaration ist:
<xs:element name="xxx" type="yyy"/>
Häufige Datentypen sind:
xs:string
xs:integer
xs:decimal
xs:boolean
xs:date
xs:time
…
Beispielsweise geben “xs:string” den Typ für beliebigen Text und “xs:integer” den Typ für ganze Zahlen an . Auch Attribute werden zu der Klasse der einfachen Elemente gezählt und genauso deklariert:
<xs:attribute name="xxx" type="yyy"/>
Es ist möglich weitere Eigenschaften wie z.B. Defaultwerte und Erforderlichkeit in der Deklaration zum Attribut hinzuzufügen. Einfache Elemente können keine Attribute haben, da sie sonst als verschachtelte Elemente gelten.
Einfache Elemente und Attribute können in ihren Werten auch eingeschränkt werden. Im folgenden Beispiel wird für das Element “Alter” eine Mindest- und eine Höchstgrenze festgelegt. Weitere Beschränkungsmöglichkeiten bildet Tabelle 4
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Beschränkung | Beschreibung |
---|---|
enumeration | Definiert eine Liste akzeptierter Werte |
fractionDigits | Definiert die maximale Anzahl erlaubter Dezimalstellen (=> 0) |
length | Definiert die erlaubte Anzahl von Zeichen oder Listenelemente ( => 0) |
maxExclusive | Definiert eine obere Grenze nummerischer Werte (der Wert muss unter der Grenze liegen) |
maxInclusive | Definiert eine obere Grenze nummerischer Werte (der Wert muss kleiner oder gleich der Grenze sein) |
maxLength | Definiert die maximal erlaubte Anzahl von Zeichen oder Listenelemente |
minExclusive | Definiert eine untere Grenze für nummerische Werte (der Wert muss über der Grenze liegen) |
minInclusive | Definiert eine untere Grenze für nummerische Werte (der Wert muss größer oder gleich der Grenze sein) |
minLength | Definiert die minimal erlaubte Anzahl von Zeichen oder Listenelemente (>=0) |
pattern | Legt eine exakte Folge von Zeichen fest |
totalDigits | Legt fest, wie viele Zahlen erlaubt sind (>0) |
whiteSpace | Legt fest, wie Leerzeichen zu händeln sind |
Tabelle 4: Beschränkungen für Datentypen
Verschachtelte Elemente besitzen ein xs:complexType-Block. In diesem werden alle Elemente und Attribute als einfache Elemente aufgelistet. Besitzt das Oberelement selbst ein Attribut, kann die Deklaration gesplittet erfolgen. Zunächst wird das Oberelement wie ein einfaches Element deklariert und mit einer folgenden selbst definierten Typangabe auf seine ihm untergeordneten Elemente verwiesen:
<xs:element name="autor" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="vorname" type="xs:string"/>
<xs:element name="nachname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
5.2.5.1. Indikatoren¶
Indikatoren ermöglichen festzulegen wie Elemente verwendet werden dürfen. Zur Auswahl stehen 7 Indikatoren:
Order indicators (geben die Reihenfolge der Elemente vor)
All Alle Elemente im complexType-Block tauchen nur einmal auf
Choice Nur eines der Elemente taucht im Block auf
Sequence Die Elemente müssen in der Reihenfolge wie sie definiert wurden, auftauchen z.B.
<xs:element name="buch">
<xs:complexType>
<xs:choice>
<xs:element name="titel" type="String"/>
<xs:element name="autor" type="String"/>
</xs:choice>
</xs:complexType>
</xs:element>
Occurrence indicators (geben die Anzahl der Elemente an)
maxOccurs legt fest wie oft ein Element maximal vorkommen kann
minOccurs legt fest wie oft ein Element mindestens vorkommen muss z.B.
<xs:element name="buch">
<xs:complexType>
<xs:sequence>
<xs:element name="titel" type="xs:string"/>
<xs:element name="autor" type="xs:string" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Group indicators (ermöglichen es Elemente zu gruppieren, und später auf eine Gruppe zu referenzieren- es erfordert innerhalb der Gruppe einen Order-Indikator)
Group name name der Gruppierung
attributeGroup name z.B.
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="vorname" type="xs:string"/>
<xs:element name="nachname" type="xs:string"/>
<xs:element name="geburtstag" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="land" type="xs:string"/>
</xs:sequence>
</xs:complexType>
5.2.6. XSL und XSLT¶
XSL (Extensible Stylesheet Language) ist ein weiterer zur Verfügung gestellter Standard und besteht aus zwei Komponenten:
XSL-FO zur Formatierung von XML Daten
XSLT (XSL Transformation) zur Transformation von XML Daten in andere textbasierte Dateien
Die Hauptanwendung von XSL ist XSLT. Denn XSLT ermöglicht es, XML Daten in HTML umzuwandeln. Dadurch können Daten strukturiert in XML gespeichert und in HTML präsentiert werden.
Transformation mit XSLT
XML-Elemente sollen in eine andere XML gerechte Sprache transformiert werden. Hierfür sollen Elemente und Attribute in Auszeichnungskonstrukte einer anderen Sprache umgewandelt werden. Aus eigenen XML-Elementen wie z.B. autor soll der HTML code […] werden. Um auf XML-Elemente zugreifen zu können, wird die eigene XSLT-Sprache XPath verwendet. Die Umwandlungsregeln werden in einer XSLT-Datei in XML festgelegt. Die XSL-Datei wird dann im eigentlichen XML-Dokument eingebunden.
Wichtige Merkmale von XSLT
Baumstrukturen als Modelle von XML-Dokumenten
XSLT Stylesheets definieren die Umwandlung der Eingabebaumstruktur in eine Ausgabebaumstruktur
Zugriff auf Teile des Eingabebaums mithilfe von Xpath
Vorlage (Templates) definiert den Ausgabebaum
Prinzip der Transformation
XML-Dok. wird vom Parser eingelesen, und als Baum interpretiert
XSLT-Dok. wird vom Parser eingelesen, und als Baum interpretiert
Beide Bäume werden vom XSLT-Prozessor eingelesen
Der neue (Ausgabe-)Baum erhält gewünschte serielle Form
Eine Transformation besteht aus einer Reihe von einzelnen Transformationsregeln, die als “Templates” (“Schablonen”) bezeichnet werden. Ein Template besitzt ein auf XPath basierendes Pattern (“Muster”) das beschreibt, für welche Knoten es gilt, und einen Inhalt, der bestimmt, wie das Template seinen Teil des Zielbaums erzeugt.
Die Subsprache XPath
Die Sprache XPath lokalisiert Elemente in XML-Dokumenten. Ihre abgekürzte Syntax ähnelt Ausdrücken, die benutzt werden, um in hierarchischen Filesystemen Pfade zu Dateien und Verzeichnissen zu spezifizieren. Der XPath Ausdruck /stadt/hotels//name zeigt auf alle name- Elemente, die als Nachfolger von hotels-Elementen im Wurzelelement mit Label stadt auftreten. In dieser Syntax steht . für die augenblickliche Position in XML-Baum und .. für das jeweilige Elternelement. Bei der ausführlichen Syntax wird für jeden Schritt, explizit die Richtung angegeben, in der der Baum durchwandert werden soll. Der obige XPath Ausdruck wird dann als /child::stadt/child::hotels/descendant::name dargestellt. In beiden syntaktischen Formen kann an jeden Schritt eine Folge von Prädikaten angehängt werden, die die Auswahl einschränken. Der obige Ausdruck lässt sich beispielsweise auf stadt-Elemente beschränken, die auch flughafen-Unterlemente haben:
/stadt[.//Flughafen]/hotels//name bzw. /child::stadt[descendant::Flughafen]/child::hotels/descendant::name
Ein XPath-Ausdruck besteht aus einer Folge von Lokalisierungsschritten, die durch / verknüpft sind. Lokalisierungsschritte, die ohne / eingeleitet werden sind absolute, andernfalls relative Ausdrücke. Ein Lokalisierungsschritt besteht aus der Angabe der Achse, dem Symbol ::, einem Knotentest (Labelname, text() oder node()) und einer optimalen Folge von Prädikaten (ein in []- Klammern auftauchender XPath-Ausdruck). (Siehe Meuss(2001), Seite 28.)
In XPath verwendete Achsen: child, descendant-or-self, ancestor-or-self, preceding, preceding-sibling, following, following-sibling, attribute, namespace.
In XPath-Ausdrücken können eine begrenzte Zahl an Funktionen verwendet werden. Dazu zählen arithmetische Funktionen (Addition, Multiplikation, Vergleiche), Boole’sche Funktionen (and, or, nor), Stringfunktionen (concat) sowie Funktionen, die auf Knotenmengen arbeiten (count, position). Der XPath-Ausdruck
/descendant::chapter[count(descendant::section)>7]
selektiert chapter-Elemente, die mehr als sieben section-Elemente enthalten.
5.2.7. Aufbau einer XSLT Datei¶
Ein XSL-Stylesheet beginnt immer mit einer XML-Deklaration und seiner Stylesheetdefinition als Wurzelelement:
<xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
Ein XSLT-Programm ist eine freie Abfolge von Template-Regeln, die jeweils in das Element xsl:template eingepackt sind. Ein Template besteht aus einem Suchmuster und einer oder mehreren Anweisungen im Template selbst. Ein Template kann wie folgt aussehen:
<xsl:template match="//book[@price]">
<html>
<body>
<h2>
<xsl:value-of select="title"/>
</h2>
<xsl:apply-templates select="chapter/title"/>
</body>
</html>
</xsl:template>
Das xsl:template-Element enthält im match-Attribut einen XPath-Ausdruck, der die Elemente beschreibt, deren Transformation in dieser Regel beschrieben werden. Im obigen Fall also ein book-Element, das ein price-Attribut hat. Der Regelrumpf beschreibt wie der gesamte Inhalt des xsl:template-Elements des bisher erzeugten Ausgabedokuments ergänzt werden soll. Dies kann statisch, durch direkte Angabe der hinzuzufügenden Elemente, oder dynamisch, durch weitere XSLT-Anweisungen, geschehen. Im obigen Beispiel werden die html-Elemente zunächst statisch erzeugt. (Eine HTML Datei besteht aus einem HTML- Kopf (head) und einem -Körper (body). Wie in XML gibt es öffnende und schließende Tags. Das Wurzelelement ist . Im
Abschnitt wird der eigentliche Inhalt zur Webanzeige definiert. Typische Elemente sind<h1>
für Überschriften, <p1>
für Paragraphen usw.) Die Unterelemente h2 und body werden aber dynamisch erzeugt. Der XSLT-Befehl xsl:value-of ergänzt das Zieldokument um die Knoten, die durch den XPath-Ausdruck beschrieben werden, der im select-Attribut des xsl:value-of-Befehls angegeben ist. Bei xsl:apply-templates handelt es sich um Anweisungen, die die Template Regeln dann auch ausführt. Durch den Befehl xsl:apply-templates werden rekursiv alle Elemente, die vom gerade behandelten Element über im select-Attribut angegebenen Pfad erreichbar sind, nach weiteren Regeln gesucht, welche ebenfalls ausgeführt werden. Nach Beendigung, werden alle erzeugten Teildokumente an dieser Stelle eingefügt, also direkt nach dem h2-Element. (Siehe Meuss(2002), Seite 34.)
Von XML zu HTML
Im Folgenden wird ein XML-Dokument in eine HTML Datei umgewandelt. Das XML-Dokument sieht wie folgt aus:
<TEI>
<teiHeader>
<fileDesc>
<title>[DRAFT!] (2009-): Wittgenstein TS 213: Ts-213.xml</title>
<author>Ludwig Wittgenstein</author>
<editor><persName>Alois Pichler</persName>
<orgName ref="http://wab.aksis.uib.no/">Wittgenstein Archives at the University of Bergen (WAB)</orgName>
</editor>
</fileDesc>
</teiHeader>
<text>
<ab n="Ts-213,44r">
<satz n="Ts-213,44r_[1]"> das ist der Satz AAA nnn </satz>
<satz n="Ts-213,44r_[2]"> das ist der Satz BBB nnn <pb facs="Ts-213,45r"/> Don't forget me <lb/>this week-<lb/>end </satz>
</ab>
<ab n="Ts-213,45r">
<satz n="Ts-213,45r_[1]"> das ist der Satz XAAA nnn
</satz>
<satz n="Ts-213,45r_[2]"> das ist der <notation>a+b</notation> Satz XBBB nnn Don't forget me <lb/>this weekend </satz>
</ab>
</text>
</TEI>
Das XSL-Stylesheet in der Datei mywitt.xsl definiert die eigentliche Umwandlung:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="ab">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="satz">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="notation">
<code>
<xsl:apply-templates/>
</code>
</xsl:template>
<xsl:template match="alternative">
<SPAN style="background-color:#FFFF00;">
<xsl:apply-templates/>
</SPAN>
</xsl:template>
<xsl:template match="lb[@rend='hyphen']">
<xsl:value-of select="."/><xsl:text>-</xsl:text>
<br/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="lb">
<br/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Damit das XML-Dokument das Stylesheet anwenden kann, muss es in der XML Datei eingebunden sein. Die Einbindung erfolgt im XML-Header über die Anweisung:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TEI SYSTEM "file:/mounts/Users/cisintern/max/workspace/wittgenstein/texte/DTD/CISWAB.dtd">
<?xml-stylesheet type="text/xsl" href="mywitt.xsl"?>
<TEI>
<teiHeader>
<fileDesc>
<title>[DRAFT!] (2009-): Wittgenstein TS 213: Ts-213.
xml</title>
<author>Ludwig Wittgenstein</author>
<editor><persName>Alois Pichler</persName>
<orgName ref="http://wab.aksis.uib.no/">Wittgenstein
Archives at the University of Bergen (WAB)</
orgName>
</editor>
</fileDesc>
</teiHeader>
<text>
<ab n="Ts-213,44r">
<satz n="Ts-213,44r_[1]"> das ist der Satz AAA nnn </
satz>
<satz n="Ts-213,44r_[2]"> das ist der Satz BBB nnn <
pb facs="Ts-213,45r"/> Don't forget me <lb/>
this week-<lb/>end </satz>
</ab>
<ab n="Ts-213,45r">
<satz n="Ts-213,45r_[1]"> das ist der Satz XAAA nnn
</satz>
<satz n="Ts-213,45r_[2]"> das ist der <notation>a+b</
notation> Satz XBBB nnn Don't forget me <lb/>
this weekend </satz>
</ab>
</text>
</TEI>
5.2.8. Übungen¶
Welcher Unterschied wird zwischen Wohlgeformtheit und Gültigkeit bei XML-Dokumenten gemacht?
Wie sieht die DTD CISWAB.dtd zu folgendem XML-Dokument aus:
<TEI>
<teiHeader>
<fileDesc>
<title>[DRAFT!] (2009-): Wittgenstein TS 213: Ts-213.xml</title>
<author>Ludwig Wittgenstein</author>
<editor><persName>Alois Pichler</persName>
<orgName ref="http://wab.aksis.uib.no/">Wittgenstein Archives at the University of Bergen (WAB)</orgName>
</editor>
</fileDesc>
</teiHeader>
<text>
<ab n="Ts-213,44r">
<satz n="Ts-213,44r_[1]"> das ist der Satz AAA nnn </satz>
<satz n="Ts-213,44r_[2]"> das ist der Satz BBB nnn <pb facs="Ts-213,45r"/> Don't forget me <lb/>this week-<lb/>end </satz>
</ab>
<ab n="Ts-213,45r">
<satz n="Ts-213,45r_[1]"> das ist der Satz XAAA nnn
</satz>
<satz n="Ts-213,45r_[2]"> das ist der <notation>a+b</notation> Satz XBBB nnn Don't forget me <lb/>this weekend </satz>
</ab>
</text>
</TEI>
Ein Vorteil von XML-Schema ist, gültigen Inhalt von XML-Elementen genauer zu definieren. Oftmals haben sichere Passwörter eine mindest- wie auch höchst-Zahl von Stellenangaben. Schreibe die passende Schemadefinition des XML-Elementes
, dessen Inhalt mindestens 5 und höchstens 10 Zahlen erwartet. Mittels XSLT lassen sich XML-Dokumente automatisch transformieren. Hierfür wird u.a. die Schleifenfunktion xsl:for-each bereitgestellt, die automatisch jedes Element von select durchsucht. Zu dem erweiterten Einführungsbeispiel (folgend) soll jetzt ein Stylesheet den XML-Inhalt in HTML als Tabelle darstellen.
<?xml version="1.0" encoding="UTF-8"?>
<buecher>
<buch>
<titel>Der Traum</titel>
<autor />
</buch>
<buch>
<titel>Stolz und Vorurteil</titel>
<autor> Jane Austen </autor>
</buch>
</buecher>
Autor und Titel sollen dabei in einer Tabelle aufgelistet werden wie folgt
der Titel | der Autor |
---|---|
Der Traum | |
Stolz und Vorteil | Jane Austen |
Vervollständige folgendes Stylesheet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/_______________">
<html>
<body>
<table border="1">
<tr>
<th>___________</th>
<th>__________</th>
</tr>
<xsl:for-each select="buch">
<tr>
<td><xsl:value-of select="________"/></td>
<td><xsl:value-of select="______"/></td>
</tr>
</xsl:for-each>
__________
___________
</html>
</xsl:template>
</xsl:stylesheet>
5.2.9. Literaturverzeichnis¶
Helmut Vonhoegen, Einstieg in XML, Bonn 2011, Galileo Computing Holger Meuss (2002) XML-Anfragesprachen http://www.cis.uni-muenchen.de/kurse/max/korpunix/scripten/Meuss-Skriptum.pdf (Abgerufen 11.05.2014)