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. und schließenden Tabs, z.B. . Jedes geöffnete Tab muss auch wieder geschlossen werden.

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:

  • &amp; für das & ( Et-Zeichen )

  • &gt; für das <( Größer-als-Zeichen )

  • &lt; für das >( Kleiner-als-Zeichen )

  • &quot; für das “( Ersatzzeichen für Anführungszeichen )

  • &apos; 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 so aussehen:

<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

  1. XML-Dok. wird vom Parser eingelesen, und als Baum interpretiert

  2. XSLT-Dok. wird vom Parser eingelesen, und als Baum interpretiert

  3. Beide Bäume werden vom XSLT-Prozessor eingelesen

  4. 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

  1. Welcher Unterschied wird zwischen Wohlgeformtheit und Gültigkeit bei XML-Dokumenten gemacht?

  2. 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>
  1. 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.

  2. 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)