3 XML • eXtensible Markup Language • abgeleitet von SGML • definierbare logische Struktur: markierte, sortierte Bäume • mächtige Hyperlinkmöglichkeiten (XLink, XPointer) • Transformationssprachen (XSL) • basiert auf Unicode Vorläufige Version 118 c 2003 Peter Thiemann • Anwendungen: WWW, Datenaustausch, E-Commerce • spezialisierte Versionen: XHTML, WAP/WML, VoiceXML, DSML (directory services), UPnP (Universal Plug and Play), SyncML, Astronomical Markup Language, GedML: Genealogical Data in XML, XML/EDI (electronic data interchange), Synchronized Multimedia Integration Language (SMIL), Mathematical Markup Language, Open Trading Protocol (OTP), Weather Observation Markup Format (OMF), BIOpolymer Markup Language (BIOML), Bioinformatic Sequence Markup Language (BSML), Chemical Markup Language (CML), User Interface Markup Language (UIML), . . . Vorläufige Version 119 c 2003 Peter Thiemann Beispiel: Wohlgeformtes XML Dokument <?xml version="1.0"?> <ELTERN> <KIND> Hier kommt der Inhalt. </KIND> <LEER /> </ELTERN> XML Deklaration: <?xml version="1.0"?> Elemente: ELTERN, KIND, LEER Öffnende Tags: <ELTERN>, <KIND> Schließende Tags: </KIND>, </ELTERN> Vorläufige Version 120 c 2003 Peter Thiemann Leeres Element: <LEER /> Wohlgeformt heißt • XML Deklaration vorhanden • sämtliche Elemente haben öffnendes und schließendes Tag (oder <LEER />, falls kein Inhalt) • korrekte Schachtelung! • Wurzelelement vorhanden Vorläufige Version 121 c 2003 Peter Thiemann Beispiel: Gültiges XML Dokument • muß die logische Struktur definieren → DTD (Document Type Definition) <?xml version="1.0"?> <!DOCTYPE ELTERN [ <!ELEMENT ELTERN (KIND*)> <!ELEMENT KIND (MARKE?,NAME+)> <!ELEMENT MARKE EMPTY> <!ELEMENT NAME (NACHNAME+,VORNAME+)*> <!ELEMENT NACHNAME (#PCDATA)> <!ELEMENT VORNAME (#PCDATA)> <!ATTLIST MARKE NUMMER ID #REQUIRED GELISTET CDATA #FIXED "ja" TYP (natürlich|adoptiert) "natürlich"> <!ENTITY STATEMENT "Wohlgeformtes XML"> ]> Vorläufige Version 122 c 2003 Peter Thiemann <ELTERN> &STATEMENT; <KIND> <MARKE NUMMER="1" GELISTET="ja" TYP="natürlich" /> <NAME> <NACHNAME>Flavius</NACHNAME> <VORNAME>Secundus</VORNAME> </NAME> </KIND> </ELTERN> Vorläufige Version 123 c 2003 Peter Thiemann 3.1 Inhalte eines XML Dokuments • Elemente (benannte Baumknoten) • Attribute (Namen/Wert-Paare an Baumknoten) • Referenzen – character reference &lt;, &gt; – entity reference &STATEMENT; – parameter-entity reference %ISOLat2; (nur in DTD) • <!-- Kommentare --> • Verarbeitungsanweisungen (processing instructions) <?name daten ?> werden an Anwendung überreicht <?xml:stylesheet type="text/css2" href="style.css"?> • CDATA (character data) <![CDATA[ uninterpretierte Daten werden wörtlich eingefügt ]]> Vorläufige Version 124 c 2003 Peter Thiemann • Vorspann – <?xml version="1.0" encoding="UTF-8"?> – Spezifikation einer internen DTD <!DOCTYPE Name [ Element-, Attribut-, Entitydeklarationen ]> – Spezifikation einer externen DTD <!DOCTYPE HTML3 PUBLIC "-//IETF//DTD HTML Strict//EN//3.0 " "html-3s.dtd " [ ggf. interne Deklarationen ]> Vorläufige Version 125 c 2003 Peter Thiemann 3.1.1 Elementdeklaration helementdecl i ::= <!ELEMENT hName i hcontentspec i> hcontentspec i ::= EMPTY | ANY | hMixed i | hchildren i • Produktion einer kf. Grammatik • hMixed i: #PCDATA und Elemente vermischt • hchildren i: regulärer Ausdruck über Elementnamen; Operatoren , | ? + * Vorläufige Version 126 c 2003 Peter Thiemann 3.1.2 Attributdeklaration hAttlistDecl i ::= <!ATTLIST hName i hAttDef i∗ > hAttDef i ::= hName i hAttType i hDefaultDecl i hAttType i ::= Vorläufige Version CDATA String ID eindeutiger Schlüssel IDREF, IDREFS Verweis(e) auf Schlüssel ENTITY, ENTITIES Name(n) von Entities NMTOKEN, NMTOKENS ein oder mehrere Wörter (Nmtoken (| Nmtoken )∗ ) Aufzählungstyp 127 c 2003 Peter Thiemann hDefaultDecl i ::= Vorläufige Version #REQUIRED erforderlich | #IMPLIED nicht erforderlich, kein Default | "hAttValue i" Defaultwert | #FIXED "hAttValue i" fester Wert 128 c 2003 Peter Thiemann 3.1.3 Entity Deklaration hGEDecl i ::= <!ENTITY hName i hEntityDef i> hPEDecl i ::= <!ENTITY % hName i hPEDef i> hEntityDef i ::= hEntityValue i | (hExternalID i hNDataDecl i?) hPEDef i ::= hEntityValue i | hExternalID i • hGEDecl i general entity Abkürzungen, Dokumentenbausteine (auch von Dateien hExternalID i) <!ENTITY dd "Dagobert Duck"> • hPEDecl i parameter entity Parameter zur Steuerung der DTD Definition <!ENTITY % ISOLat2 "INCLUDE"> Vorläufige Version 129 c 2003 Peter Thiemann 3.1.4 Media Type • text/xml eingeschränkt auf Zeichensatz mit 1-Byte/Zeichen • application/xml mit voller Unicodeunterstützung Vorläufige Version 130 c 2003 Peter Thiemann 3.2 XML Namespaces “Modulsystem für XML” Vermeidung von Namenskonflikten bei Benutzung von • mehreren Quellen für Elementdeklarationen oder • mehreren Anwendungen mit dem gleichen Dokument Definition: An XML namespace is a collection of names, identified by a URI reference RFC RFC2396, which are used in XML documents as element types and attribute names. • Qualifizierte Namen = hNamespace-Präfix i : hlokaler Teil i • Präfix steht für URI, expandiert zu: hURI i : hlokaler Teil i • Identität: String nach Expansion • die URI ist beliebig, muß nicht funktional sein Vorläufige Version 131 c 2003 Peter Thiemann 3.2.1 Deklaration eines Namespace • für ein Element und sämtliche geschachtelten Elemente • Attribut xmlns definiert Default-Namespace (kein qualifizierter Name nötig) • Attribut xmlns:hNamespace-Präfix i bindet einen Namespace an das hNamespace-Präfix i • können mehrfach auftreten Vorläufige Version 132 c 2003 Peter Thiemann Beispiele <x xmlns:edi=’http://ecommerce.org/schema’> <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> </x> <BOOKS> <bk:BOOK xmlns:bk="urn:BookLovers.org:BookInfo" xmlns:money="urn:Finance:Money"> <bk:TITLE>A Suitable Boy</bk:TITLE> <bk:PRICE money:currency="US Dollar">22.95</bk:PRICE> </bk:BOOK> </BOOKS> Beispiel: Default Namespace <BOOK xmlns="urn:BookLovers.org:BookInfo"> <TITLE>A Suitable Boy</TITLE> <PRICE currency="US Dollar">22.95</PRICE> </BOOK> Vorläufige Version 133 c 2003 Peter Thiemann 3.3 XML Path Language (XPath) Ziel: Spezifikation von Mengen von XML-Elementen • Benutzung in URIs und Attributen • kompakte Syntax (nicht XML) • operiert auf logischer Struktur des Dokuments Dokument ist ein Baum mit folgenden Knotenarten • Wurzel • Element • Attribut • Text • Namespace • Verarbeitungsanweisungen <?name daten ?> • Kommentare Vorläufige Version 134 c 2003 Peter Thiemann XPath definiert für jede Knotenart einen string-value • Wurzel: Konkatenation der string-values der Kinder • Element: Konkatenation der string-values der Kinder • Attribut: Wert des Attributs • Text: Character Data • Namespace: die URI • Verarbeitungsanweisungen: daten • Kommentare: Inhalt Vorläufige Version 135 c 2003 Peter Thiemann Datentypen von XPath • Menge von Baumknoten • Boolean (true, false) • Number (Gleitkomma) • String Darüber werden Ausdrücke gebildet. Auswertung erfolgt in Kontext: • Kontextknoten • Paar von natürlichen Zahlen (Kontextposition, Kontextgröße) • Variablenbindungen • Bibliotheksfunktionen • Namespace-Deklarationen Vorläufige Version 136 c 2003 Peter Thiemann 3.3.1 Ausdrücke hLocationPath i hAbsoluteLocationPath i ::= hRelativeLocationPath i | hAbsoluteLocationPath i ::= | hRelativeLocationPath i Vorläufige Version ::= /hRelativeLocationPath i? hAbbreviatedAbsoluteLocationPath i hStep i | hRelativeLocationPath i/hStep i | hAbbreviatedRelativeLocationPath i 137 c 2003 Peter Thiemann Location hStep i besteht aus • Achse (traversierte Beziehung zwischen Knoten) • Knotentest (Typ und Name) • optionale Prädikate Auswahl: Menge der Knoten, die entlang der Achse erreicht werden, den Knotentest erfüllen und sämtliche Prädikate erfüllen Beispiel child::para[position()=1] hStep i ::= | hAxisSpecifier i ::= | Vorläufige Version hAxisSpecifier i hNodeTest i hPredicate i∗ hAbbreviatedStep i hAxisName i :: hAbbreviatedAxisSpecifier i 138 c 2003 Peter Thiemann hAxisName i ::= • child • descendant • parent • ancestor • following-sibling • preceding-sibling • following • preceding • attribute • namespace • self • descendant-or-self • ancestor-or-self Vorläufige Version 139 c 2003 Peter Thiemann hNodeTest i hNodeTest i ::= | hNameTest i hNodeType i Vorläufige Version ::= hNameTest i hNodeType i() * jeder Knoten | hNCName i:* Element in Namespace | hQName i benanntes Element ::= comment true, falls Kommentarknoten | text falls Textknoten | processing-instruction falls Verarbeitungsanweisung | node immer true 140 c 2003 Peter Thiemann hPredicate i hPredicate i ::= [hExpr i] Für jeden durch Achse und hNodeTest i selektierten Knoten wird Ausdruck hExpr i wird im Kontext ausgewertet. Ergebnis → Boolean. Falls Ergebnis false, wird der Knoten verworfen. Weitere Ausdrücke Boolesche Operationen, arithmetische Operationen, Vergleichsoperationen, Stringoperationen (über Funktionsaufrufe), Operationen auf Knotenmengen Vorläufige Version 141 c 2003 Peter Thiemann Beispiele • child::para selects the para element children of the context node • child::* selects all element children of the context node • child::text() selects all text node children of the context node • child::node() selects all the children of the context node, whatever their node type • attribute::name selects the name attribute of the context node • attribute::* selects all the attributes of the context node Vorläufige Version 142 c 2003 Peter Thiemann • self::para selects the context node if it is a para element, and otherwise selects nothing • child::chapter/descendant::para selects the para element descendants of the chapter element children of the context node • child::*/child::para selects all para grandchildren of the context node • / selects the document root (which is always the parent of the document element) • child::para[position()=1] selects the first para child of the context node • /descendant::figure[position()=42] selects the forty-second figure element in the document Vorläufige Version 143 c 2003 Peter Thiemann 3.3.2 Abkürzungen In Location hStep is child:: ist optional // für /descendant-or-self::node()/ @ für attribute:: . für self::node() .. für parent::node() hAbbreviatedAbsoluteLocationPath i ::= //hRelativeLocationPath i hAbbreviatedRelativeLocationPath i ::= hRelativeLocationPath i//hStep i hAbbreviatedStep i ::= . | .. hAbbreviatedAxisSpecifier i ::= @? Vorläufige Version 144 c 2003 Peter Thiemann 3.4 XML Pointer Language (XPointer) Ziel: Sprache zur Adressierung von Dokumentfragmenten (Ziele von Links) • Erweiterung von XPath • Punkte und Bereiche adressierbar • Stringsuche • Einsatz als Fragmentbezeichner in URIs XPointer-Ausdrücke benutzen Sonderzeichen, die in XML oder in URIs nicht verfügbar sind. → übliche Kodierung &gt; bzw. %20. Vorläufige Version 145 c 2003 Peter Thiemann 3.4.1 XPointer Adressierung hXPointer i ::= hBareName i | hChildSeq i | F ullXP tr hFullXPtr i ::= hXPtrPart i+ hXPtrPart i ::= hScheme i(hExpr i) hScheme i ::= xpointer | . . . hChildSeq i ::= /1(/[0 − 9]∗ )∗ | Vorläufige Version 146 hName i(/[0 − 9]∗ )+ c 2003 Peter Thiemann Beispiele xpointer(id("introduction")) Element mit ID="introduction"; Abkürzung (bare name): introduction Auch introduction/4/7 für das siebte Kind vom vierten Kind vom introduction-Element (child sequence) xpointer(id("introduction")) xpointer(child::*[4]/child::*[7]) Vorläufige Version 147 c 2003 Peter Thiemann Definition Ein Ort ist • ein Baumknoten eines Dokuments (wie XPath) • ein Punkt im Dokument (ein Baumknoten und ein Index) • ein Bereich zwischen zwei Punkten im Dokument Neue hNodeType i hNodeType i ::= point falls Punkt | range falls Bereich | ... Neue Funktionen xpointer(id("chap1")/range-to(id("chap2"))) xpointer(descendant::REVST/range-to(following::REVEND[1])) string-range(//title,"Thomas Pynchon")[17] Abkürzung: // steht für /descendant-or-self::node()/ Vorläufige Version 148 c 2003 Peter Thiemann 3.5 XML Linking Language (XLink) Verallgemeinerung der Hyperlink-Fähigkeiten von HTML (wohlbekannt und erprobt aus anderen Hypertext-Systemen) • Links mit mehr als zwei Teilnehmern • Assoziation von Daten mit einem Link • Externe Link-Datenbanken Eigenschaften von <A HREF=...> in HTML • Ziel des Links gegeben durch URI • Link befindet sich an seinem Ursprung • Link identifiziert sein Ziel • Nur von Ursprung nach Ziel zu verwenden • Art der Verwendung festgelegt. Was ist eigentlich ein Hyperlink? Eine Relation zwischen Teilen von Dokumenten, möglichst in einem Benutzerinterface darstellbar. Vorläufige Version 149 c 2003 Peter Thiemann 3.5.1 Der xlink Namespace <rootElement xmlns:xlink="http://www.w3.org/1999/xlink"> ... </rootElement> enthält globale Attribute (benutzbar mit jedem Element): type, href, role, title, show, actuate, from, to <local:link xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:local="http://uni-freiburg.de/" xlink:type="simple" xlink:href="faculties.xml" xlink:role="facultylist" xlink:title="Liste der Fakultäten" xlink:show="new" xlink:actuate="onRequest"> Liste der Fakultäten </local:link> Vorläufige Version 150 c 2003 Peter Thiemann 3.5.2 Einfache Links vom Typ xlink:type="simple" verbinden eine lokale und eine externe Ressource <!ELEMENT studentlink ANY> <!ATTLIST studentlink xlink:type (simple) #FIXED "simple" xlink:href CDATA #IMPLIED xlink:role NMTOKEN #FIXED "student" xlink:title CDATA #IMPLIED xlink:show (new|replace |embed |undefined) #FIXED "replace" xlink:actuate (onLoad|onRequest |undefined) #FIXED "onRequest" > ... <studentlink xlink:href="/students/mmueller.xml" xlink:title="Wer ist Michael Müller?">Michael</studentlink> organisiert die F^ ete. Vorläufige Version 151 c 2003 Peter Thiemann Globale Attribute eines simple-Link • xlink:href="URI " Zeiger auf externe Ressource • xlink:role="hqualified-name i" (semantisch) zur Gruppierung und Bennennung von Ressourcen in traversal rules • xlink:title="hLesbarer Titel des Links i" (semantisch) Vorläufige Version 152 c 2003 Peter Thiemann • xlink:show (Verhalten) Wert Verhalten new neues Browserfenster replace benutze altes Browserfenster embed einbetten in aktuelles Browserfenster undefined beliebig • xlink:actuate (Verhalten) Vorläufige Version Wert Aktivierung onLoad beim Laden des Links onRequest beim Anklicken undefined beliebig 153 c 2003 Peter Thiemann 3.5.3 Erweiterte Links • verbinden eine beliebige Anzahl von internen oder externen Ressourcen • out-of-line, falls alle Ressourcen extern, sonst inline • out-of-line erlaubt schreibgeschützte Ressourcen • Verbindung zunächst ohne Richtung (→ traversal rules) • Getrennte Spezifikation von – Teilnehmern am Link – Benutzung des Links – Einbettung des Links Vorläufige Version 154 c 2003 Peter Thiemann • Element wird zum erweiterten Link durch Attribut xlink:type="extended" • enthält beliebige Elemente mit – xlink:type="locator" Adresse einer externen Ressource muß xlink:href angeben ggf. xlink:role – xlink:type="arc" traversal rule Quellenrolle spezifiziert durch xlink:from Zielrolle(n) spezifiziert durch xlink:to – xlink:type="title" für menschliche Benutzer – xlink:type="resource" interne Ressource ggf. xlink:role als (direkte) Kinder Vorläufige Version 155 c 2003 Peter Thiemann Beispiel/DTD <!-- courseload = extended-type tooltip = title-type go = arc-type student, course, audit, advisor = locator-type gpa = resource-type --> <!ELEMENT courseload (tooltip*, (student|course|audit|advisor|go*), gpa)> <!ATTLIST courseload xlink:type (extended) #FIXED "extended" xlink:role NMTOKEN #FIXED "courseload" xlink:title CDATA #IMPLIED > Vorläufige Version 156 c 2003 Peter Thiemann Beispiel/Dokument <courseload xlink:title="Course Load for Pat Jones"> <go xlink:from="gpa" xlink:to="course" /> <go xlink:from="student" xlink:to="course" /> <go xlink:from="student" xlink:to="audit" /> <go xlink:from="student" xlink:to="advisor" /> <student xlink:href="..." /> <course xlink:href="..." /> <course xlink:href="..." /> <audit xlink:href="..." /> <advisor xlink:href="..." /> <gpa>3.5</gpa> </courseload> Vorläufige Version 157 c 2003 Peter Thiemann Beispiel/traversal rule <!-- extendedlink = extended-type loc = locator-type --> <extendedlink> <loc xlink:href="..." xlink:role="parent" <loc xlink:href="..." xlink:role="parent" <loc xlink:href="..." xlink:role="child" <loc xlink:href="..." xlink:role="child" <loc xlink:href="..." xlink:role="child" xlink:title="p1" xlink:title="p2" xlink:title="c1" xlink:title="c2" xlink:title="c3" /> /> /> /> /> <!-- go = arc-type --> <go xlink:from="parent" xlink:to="child" /> </extendedlink> Vorläufige Version 158 c 2003 Peter Thiemann Beispiel/typischer Link <!-- go = arc-type --> <!ELEMENT go ANY> <!ATTLIST go xlink:type (arc) xlink:from NMTOKEN xlink:to NMTOKEN xlink:show (new|replace|embed |undefined) xlink:actuate (onLoad|onRequest |undefined) xlink:role NMTOKEN xlink:title CDATA > #FIXED "arc" #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED <go xlink:from="student" xlink:to="advisor" xlink:show="new" xlink:actuate="onRequest" /> Vorläufige Version 159 c 2003 Peter Thiemann