1
Dokumente und Daten...Das Akronym XML ist derzeit in aller Munde...
Es hat Einzug in fast jede Produktankündigung jüngerer Zeit gefunden, und keine neuere IT-Entwicklung, die nicht XML enabled wäre.
Es scheint, daß sich anhand XML dieselbe übersteigerte (und nicht notwendigerweise immer mit wahrheitsgemäßen Versprechungen arbeitende) Marketing-Euphorie (engl. hype) vollzieht, die bereits für das Schlagwort Objektorientierung zu beobachten war.
Die fachlichen Einschätzungen des Themas XML reichen von ASCII des 21 Jahrhunderts (H. S. Thomson) bis hin zur (berechtigten) kritischen Hinterfragung des Neuheitswertes, insbesondere im Vergleich zu bekannten Lösungen wie troff, LaTeX oder das Rich Text Format (RTF).
Zur Illustration der Bandbreite der Bedeutungs- und Anwendungszuschreibungen die XML zuteil werden sind nachfolgend einige willkürlich ausgewählte Pressezitate versammelt:
Schon die Spannweite dieser Definitionen läßt die Bedeutung des Themas „XML“ erahnen. Hervorzuheben ist, daß sich offensichtlich nicht nur technisch-fokussierte Blätter des dreibuchstabigen Akronyms annehmen.
Allgemein scheint XML vorzugsweise im Kontext World Wide Web (manchmal auch schlicht zum „Internet“ verallgemeinert) Beachtung zu finden.
Das erste Kapitel dieser Vorlesung bietet einen Einstieg in die XML-Welt anhand der zugrundeliegenden technischen Basiskonzepte.
Hierzu wird zunächst die Historie strukturierter Auszeichnungssprachen (engl. markup language) beleuchtet, und die Vorläufer der Markup-Sprache XML vorgestellt.
Desweiteren werden die grundlegenden syntaktischen Konstrukte des XML Standards anhand verschiedener Beispiele eingeführt. Die notwendige Begriffsbildung erfolgt auf Basis des XML Information Set.
Ein weiteres Teilkapitel motiviert die Notwendigkeit der XML-Namensräume zur Unterscheidung verschiedener XML-Vokabulare und als Voraussetzung der XML-basierten Inhaltssyndikatisierung.
Daran schließt sich die Betrachtung der Grammatik eines XML-Dokuments an. Hierzu wird der klassischen Mechanismus der Document Type Definitions (DTD) eingeführt. Schwerpunkt liegt jedoch auf der Diskussion der XML Schema Description Language (XSD), durch welche die strukturellen und inhaltlichen Ausdrucksmöglichkeiten der DTDs entscheidend erweitert werden.
Zum Abschluß des Kapitels wird mit der XML Hyper Text Markup Language (XHTML) die vermutlich bekannteste Auszeichnungssprache, welche zur Grundlage des World Wide Webs wurde, unter dem Blickwinkel XML besprochen.
Im Grunde besitzt die Geschichte der eXtensible Markup Language zwei Anfänge. Einerseits stellt XML die evolutionäre Fortentwicklung existierender generischer Auszeichungssprachen dar; andererseits sind die Hintergründe der Sprache XML so eng mit dem Aufkommen des World Wide Webs (WWW) verwoben, daß die Geschichte auch hier ihren Anfang nehmen könnte...
Der chronologischen Ordnung folgend sei zunächst die Entwicklung aus der Idee des Hypertext aufgerissen.
Die ersten Ideen zum Konzept des Hypertexts, als Plan zur Überwindung der Beschränkungen und Unzulänglichkeiten des klassischen textbasierten Publikationsmediums Papier, datieren zurück bis in die 1950er Jahre. Sie postulieren neben der nichtsequentiellen Organisation des Mediums auch zentrale Begriffe wie Knoten, Link, Anker und Netz. Ziel dieser Überlegungen war es, den auszudrückenden Inhalt von editorieller- und Präsentationsinformation wie Seitenzahlen, Fußnoten, Paginierung usw. zu trennen. Durch die nichtlineare Organisation soll es dem Leser freigestellt werden, auf welchen Pfaden er sich durch das Dokument bewegt.
Zur Realisierung dieser Bemühungen wird das Dokument mit weiteren Informationen angereichert, die jedoch für den Leser unsichtbar bleiben. Dieser Gedanke reicht zurück bis in die Anfänge des Buchdrucks. Dort sind formatierungsorientierte Auszeichnungssymbole, etwa für Fettdruck oder Unterstreichung, seit jeher bekannt. Vor dem Aufkommen der what you see is what you get Textverarbeitungssysteme waren diese bildlichen Symbole die einzige Möglichkeit zur Kommunikation präsentationsorientierter Information an den Schriftsetzer und Drucker.
Jedem Schüler ist bereits ein weiteres Beispiel einer editoriellen Auszeichnungssprache bekannt: Die graphischen Korrekturzeichen der Deutschlehrer. Auch sie liefern Informationen über den Inhalt, die nicht Bestandteil des Dokuments sind.
Voraussetzung für die angestrebte Flexibilisierung der Struktur eines Textes ist eine -- wie auch immer geartete -- technische Unterstützung. Seit den 60er Jahren wurden hierfür die aufkommenden elektronischen Rechenanlagen herangezogen. Eine der ersten Aktivitäten hierzu ist das von Ted Nelson initiierte (inzwischen legendäre) Xanadu-Projekt.
Zunächst erforderte die maschinelle Verarbeitung die Überarbeitung des Auszeichnungssymbolvorrates. Dies wurde notwendig, da eingesetzte Technik keine Unterstützung der alt-hergebrachten graphischen Auszeichungssymbole bot.
In einem ersten Entwicklungsschritt wurden daher die vormalig bildhaften Zeichen durch textuelle Pendants ersetzt und verallgemeinert. Beispielsweise: Überschrift zur inhaltlichen Kennzeichnung einer entsprechenden Textzeile.
Mit diesem Schritt erfolgte auch der Übergang zur formatierungsunabhängigen Auszeichnung, die bewußt auf die Beschreibung des späteren visuellen Aussehens der Information zugunsten einer neutralen deskriptiven Beschreibung der Semantik verzichtete.
In den 60er und 70er Jahren werden verschiedene Weiterentwicklungen der generischen Auszeichnungssprachen betrieben; u.a. bei der IBM durch das Team um Goldfarb, Mosher und Loire. Sie stellen 1969 unter dem Namen Generalized Markup Language einen Sprachvorschlag zusammen, der in der Folgezeit durch IBM kommerziell vermarktet wird.
Aus den GML-Aktivitäten bei IBM entwickelt sich die internationale Standardisierungsbewegung der Standard GML (SGML).
Durch sie wird eine Sprache festgelegt, welche die Definition eigener Sprachen erlaubt; daher auch der Begriff Metasprache. SGML bietet somit keinen feststehenden problemspezifischen Sprachumfang an, sondern eine Menge verschiedenster struktureller Konstrukte zur Formulierung von Dokumentgrammatiken.
In der Praxis wird der Einsatz einer mit Hilfe von SGML definierten Sprache oftmals plakativ zum Einsatz von SGML verkürzt, obwohl diese Begrifflichkeit lediglich den Erstellungsprozeß der Grammatik bezeichnet.
Mittels SGML definiert Tim Berners-Lee Mitte der 80er Jahre eine eigene Sprache zur vereinfachten Formulierung von Dokumenten, die er HyperText Markup Language (HTML) nennt. Hauptbeweggrund seiner Aktivitäten ist der Versuch den Dokumentenaustausch am Europäischen Kernforschungszentrum CERN rechnergestützt zu vereinfachen.
Die Eingangs erwähnten zentralen Hypertextkonzepte finden sich bereits in seinem ersten Sprachvorschlag wieder. Zur technischen Realisierung der Verknüpfung zwischen den Dokumenten mittels Ankern und Links definiert er den Uniform Resource Locator (URL), eine global eindeutige Adresse für beliebige Inhalte.
Seine Aktivitäten in Genf bilden die Keimzelle des Web.
In der Folgezeit, insbesondere im Zuge der Kommerzialisierung des Word Wide Web, entstehen verschiedene Revisionen der ursprünglichen HTML. Einige der Erweiterungen werden durch die beiden großen Web Browser Hersteller Microsoft und Netscape proprietär vorgenommen, um ihre Position am Markt zu stärken.
In der Konsequenz entstehen während des oft apostrophierten browser war teilweise inkompatible HTML-Dialekte. (Man denke nur an die Tags: marquee (nur Microsoft Internet Explorer) oder layer (nur Netscape Navigator))
Darüberhinaus entwickelt sich HTML zunehmend von einer Präsentations-orientierten Auszeichnungssprache zu einer semantischen. Dies bedeutet: während HTML in der ersten Grundform zunächst überwiegend Elemente bot, durch die die Präsentation der Inhalte am Bildschirm festgelegt wurde (Beispiele: b für Fettdruck, u für Unterstreichungen oder i für Kursivschreibung), wurden später zunehmend semantische Elemente eingeführt. Durch sie wird die Bedeutung der ausgezeichneten Information ausgedrückt (Beispiele hierfür: acronym zur Kennzeichnung von Abkürzungen, address für Adressen oder strong zur besonderen Betonung einer Textpassage).
So wünschenswert die sukzessive Umgestaltung der HTML an die veränderten Bedürfnisse war, so aussichtslos waren die Bemühungen dennoch. Während bei den Präsentations-orientierten Elementen zunehmend Vollständigkeit hinsichtlich der Anwenderwünsche erzielt werden konnte, offenbaren sich die bisher erfolgten semantischen Erweiterungen als permanent inadäquat.
Letztlich war der Versuch, durch Standardisierung, semantische Erweiterungen in HTML einzubringen in doppelter Hinsicht zum Scheitern verurteilt:
1. birgt der Ansatz die Gefahr, die Elementmenge in unbekannte Größen zu erweitern
2. muß die Semantik jedes Tags definiert, abgestimmt und verabschiedet werden.
Aus diesen Gründen wurde seitens des W3C nach einer tragfähigeren Lösung gesucht. Unter Rückgriff auf die HTML-Wurzeln (als Anwendung der Metasprache SGML) wurde das Projekt SGML for the Web initiiert.
Der letztendlich verabschiedete Vorschlag zur eXtensible Markup Language (XML) bildet konzeptionell eine Untermenge der Sprachmöglichkeiten von SGML. Konsequenterweise ist jedes XML-Dokument auch ein gültiges SGML-Dokument.
Die Abweichung zu SGML wird besonders aus den Entwicklungszielen für XML deutlich:
XML stellt jedoch keine echte semantische Auszeichnungssprache dar, da durch die Metasprache lediglich eine Möglichkeit zur Formulierung eigener Syntax gegeben ist. Die Bedeutung der Elemente bleibt jedoch unberücksichtigt, und kann mittels XML nicht ausgedrückt werden.
Tabelle 1: Einige chronologische Eckdaten | ||||||||||||||||||||||||||||||||||||||||||||||||
|
![]()
Zum Abschluß dieser Einführung seinen die zehn Punkte zusammengestellt und kommentiert, die durch das World Wide Web Consortium als plakative Kurzcharakterisierung von XML veröffentlicht wurden:
Web-Referenzen 1: Vertiefende Informationen | |
•Artikel in der Online-Ausgabe des Economist über Ted Nelson -- The Babbage of the web •COT1800 Public Networks, Lecture 8, Standard Generalised Markup Language •Brief History of Document Markup •XML, Element Types, DTDs, and All That •Clark, J.: Comparison of SGML and XML |
![]()
![]()
Die Rolle des World Wide Web Consortiums:
Das World Wide Web Consortium (W3C) stellt keine Normierungsorganisation im klassischen Sinne staatlicher Standardisierung wie die ISO, mit ihren nationalen Organisationen wie dem DIN, die UN, die ITU (früher CCITT) oder die IEC dar. Dies äußert sich schon darin, daß es keine normativen Dokumente verabschiedet, sondern lediglich Einsatzempfehlungen recommendations (im Sinne des IETF RFC 2119) gibt. Konkret bedeutet dies: Das W3C ist de jure nicht in der Lage auf rechtlichem Wege einklagbare Normen zu setzen. Vielmehr spricht es Empfehlungen aus, von denen unter bestimmten Umständen durchaus abgewichen werden kann. Jedoch empfiehlt RFC 2119 zunächst die Auswirkungen zu untersuchen und die endgültige Entscheidung gründlich abzuwägen.
Organisatorisch ist das W3C seit seiner Gründung 1994 ein Projekt des Massachusetts Institute of Technology (Labaratory for Computer Science) in Zusammenarbeit mit CERN, der Kejo Universität in Japan und dem European Research Consortium for Informatics and Mathematics (ERCIM). Unterstützt wird das Projekt durch DARPA und die Europäische Kommission.
Das W3C versteht sich als offenes herstellerunabhängiges Gremium. Zugang zu den Ergebnissen erhält jeder Interessierte kostenfrei über die W3C-Web-Site.
Die Mitwirkung an neuen Standards ist auf die Mitglieder des W3C beschränkt. Dieser Status ist juristischen Personen vorbehalten, steht aber generell jeder Institution oder jedem Unternehmen offen. Durch die Mitgliedschaft wird ein Sitz im Advisory Committee, dem offiziellen Bindeglied zwischen Mitgliedern und W3C-Team, erworben. Darüberhinaus kann jedes W3C-Mitglied an den laufenden Standardisierungsaktivitäten teilnehmen.
Das W3C veröffentlicht sechs verschiedene Typen von Dokumenten, wobei jedoch nur fünf formal zum Standardisierungsprozeß zu zählen sind.
Web-Referenzen 3: Weiterführende Links | |
•Informationen über das W3C •Liste der W3C-Mitglieder •Deutsches W3C-Büro •W3C Process Document; es definiert die verschiedenen W3C-Standardisierungsstatus |
![]()
Definition 1: XML-Sprache | |
Eine Anwendung der Extensible Markup Language.
Ein Vokabular, das aus Symbolen und der ihnen zugewiesenen Bedeutung (Semantik) gebildet wird, ergänzt um Regeln
(grammatikalische Struktur und Gültigkeitsregeln für den Inhalt (z.B. Datentypen))
zur Kombination der Vokabularelemente. Anwendungen einer so neu geschaffenen XML-Sprache L werden als XML-Dokumente, auch: L-Dokumente, bezeichnet. |
![]()
Die XML-Sprachfamilie:
Die Graphik stellt den Zusammenhang einiger Basistechniken der XML sowie verschiedene bekannte XML-Sprachen dar.
Die strukturelle Basis der Extensible Markup Language bilden heute der XML Information Set, welcher die zentralen Begriffe der XML Strukturprimitive definiert, gemeinsam mit dem Codierungsstandard (ISO/IEC 10646) des Unicode Konsortiums zur plattformunabhängigen Darstellung beliebiger Zeichensätze.
XML selbst wurde ursprünglich als eine Untermenge der ISO-Norm der Standard Generalized Markup Language (SGML) definiert. Daher „erbt“ XML auch den dort definierten Grammatikmechanismus, die sog. Document Type Definitions (DTD), welche eine zusätzliche Text-basierte Sprache zur Festlegung des Vokabulars einer XML-Sprache liefern.
Aufbauend auf dem grundlegenden XML-Standard des W3C führt die Graphik die XML Namespaces ein, welche zur Unterscheidung von gleichen Bezeichnernamen in verschiedenen Verarbeitungskontexten dienen.
Diese Erweiterung der XML gestattet es Anwendern ihre Element- und Attributnamen vollkommen frei festlegen zu können, ohne zukünftig, etwa bei der Syndikatisierung verschiedener Dokumente mit Namenskonflikten konfrontiert zu werden.
Durch die XML HyperText Markup Language (XHTML) wird der große und wichtige Bereich der präsentationsorientierten Auszeichnungssprachen vertreten. XHTML v1.0 stellte die Reformulierung der bekannten Web-Sprache HTML v4.01 ein, die als SGML-Sprache nicht mehr durch das W3C weiterentwickelt wird.
Am Rande sei noch auf die (auf der Abbildung nicht dargestellte) ISO-Norm DSSSL (sprich: Dißl) -- die Document Style Semantics and Specification Language -- hingewiesen. Sie erlaubt die Formulierung von Transformationsregeln, die beliebige SGML-Dokumente in ein präsentationsfähiges Format überführen. Hierzu ist ein generischer Prozessor notwendig, der als Eingabe das umzuformende SGML-Dokument und die Transformationsregeln akzeptiert.
Bekannte DSSSL-Implementierungen: James Clarks Jade, oder Seng.
Die mit DSSSL gesammelten Erfahrungen flossen in die Entwicklung der XML-Stylesheet und Transformationssprachen XSL-Formatting Objects und XSLT ein.
Ein zentraler Bestandteil des Hypertext-Gedankens ist die nichtlineare Navigierbarkeit. In Web-Dokumenten, die mit der Sprache HTML erstellt wurden, findet sich dies durch die bekannten Hyperlinks verwirklicht. Der darstellende Browser sorgt dafür, daß durch Mausklick auf den meistens farblich und durch Unterstreichung hervorgehobenen Link die hinterlegte Aktion ausgeführt wird; üblicherweise wird ein neues HTML-Dokument geladen.
Auch XML verfügt über einen solchen -- jedoch durch Verallgemeinerung ungleich mächtigeren -- Verknüpfungsmechanismus. Er beschränkt sich jedoch nicht nur auf visuelle Hyperlinks, sondern steht durch den W3C-Standard XLink für alle XML-Sprachen zur Verfügung. Dadurch erweitert sich das aus HTML bekannte System u.a. um mehrgliedrige Verweise, die auf eine Menge von Dokumenten verweisen sowie verschiedene Verhaltensmuster bei der Traversierung eines Links.
Während Hyperlinks zur direkten Referenzierung einzelner Elemente eines XML-Dokuments verwendet werden, lagert die Lokatorsprache XPath dies in eine eigene Sprache aus. Sie stellt den Kern einer Anfragesprache, zur Extraktion verschiedenster Informationen (Knotenmengen, Positionsangaben, Werte, etc.) aus einem XML-Dokument, dar.
Aufgrund des dadurch eröffneten Anwendungsgebietes finden sich Teile von XPath in der Transformationssprache XSLT wieder. Hier dienen sie zum Auffinden der zu transformierenden Dokumentstrukturen.
XSLT erlaubt die Generierung beliebiger Unicode-Ströme aus XML-Strukturen. Häufigstes Einsatzgebiet in der Praxis ist aber die Verwendung zur Umformung von XML-Dokumenten. Hierzu wird nicht die volle Mächtigkeit der Ausgabe beliebiger Texte genutzt, sondern es werden „lediglich“ XML-Dokumente erzeugt.
Für das Anwendungsgebiet freier Dokumentstrukturen, wie z.B. RTF, Postscript oder LaTeX werden durch das W3C die Formatting Objects entwickelt. Konzeptionell baut dieser Standard auf XSLT auf, und reichert dieses um notwendige Primitive zur Erzeugung der erwähnten Formate an.
Ausgehend von mit XPath beschaffenen Lokalisierungsmöglichkeiten innerhalb eines XML-Dokuments oder einer Menge von XML-Dokumenten ist es konzeptionell nur ein kleiner Schritt eine Anfragesprache zu definieren. Dies wird durch XQuery vollzogen. Dieser Sprachstandard definiert eine SQL-artige algebraische Anfragesprache. Für beide Sprachen existiert eine textuelle nicht-XML-konforme kompakte Syntax, die ihre Einbettung in existierende XML-Vokabulare gestattet.
Zur Unterscheidung zwischen XML-codierten Sprachen und anderen Ansätzen hinterlegt die Graphik der Abbildung 2 alle im folgenden behandelten Standards zu denen eine XML-Sprache existiert farblich.
Auch das Resource Description Framework (RDF) baut auf den durch die Namensräum-Spezifikation etablierten Grundlagen auf. RDF definiert eine XML-Sprache, die ausgehend von klassischer Prädikatenlogik die Formulierung und maschinelle Auswertung von Aussagen über Web Ressourcen (etwa Text- oder Bilddaten) gestattet.
Die Erschließung neuer Anwendungsfelder läßt die Unzulänglichkeiten der Dokument-Typ-Definition als Möglichkeit zur Formulierung von XML-Vokabularen offenkundig werden, unterstützt der DTD-Mechanismus doch weder ein hinreichend entwickeltes Typsystem noch gestattet er die angemessene Formulierung von Strukturen wie sie in XML-Dokumenten benötigt werden.
Aus diesem Grunde entwickelt die XML-Sprache XML Schema die Primitive der DTD in einem eigenständigen XML-Vokabular fort, welches neben erweiterten Strukturierungsmöglichkeiten auch ein umfangreiches Typsystem zur Verfügung stellt.
Als eine Anwendung der Schemasprache stellt die Abbildung die beiden Sprachen WSDL und SOAP vor, die im Umfeld der Web Services große Bedeutung erlangt haben.
Diese XML-Sprachen dienen der Beschreibung von Aufrufschnittstellen und -charakteristika von Funktionalitäten, die über Internetprotokolle zur Verfügung gestellt werden. Die Darstellung des eigentlichen Aufrufs, des Namens der aufzurufenden Funktion sowie der benötigten Übergabeparameter, kann ebenfalls XML-codiert erfolgen. Den bekanntesten Ansatz hierzu bildet das SOAP-Protokoll welches einen betriebsystem- und programmiersprachenunabhängigen Nachrichtenmechanismus definiert.
Die grundlegende XML-Syntax ist in der namensgebenden W3C-Recommendation der Extensible Markup Language definiert. Die Semantik der Metasprache wird hingegen durch den W3C-Standard des XML Information Set festgelegt.
Diese Spezifikationen beinhalten die grundlegenden Definitionen hinsichtlich Terminologie und Beziehung der verschiedenen möglichen Elemente eines XML-Dokuments. Im vorliegenden Teilkapitel werden beide Sprachaspekte grundlegend eingeführt und ein erstes Verständnis der XML vermittelt. Dabei wird in Form von Ausblicken auf nachfolgende Abschnitte der Bogen zu Grammatikdefinitionssprachen und weiterführenden Konzepten wie Namensräumen gespannt.
Zum leichteren Verständnis sind die aus der offiziellen Spezifikationen entnommenen formalen
Grammatikdefinitionen der EBNF-Notation durch
vereinfachte graphische Strukturdarstellungen ergänzt.
Definition 2: XML Dokument | |
Ein XML-Dokument ist ein Datenstrom (der nicht zwingend als Datei vorliegen muß), welcher den Strukturierungsprinzipien der eXtensible Markup Language genügt. |
![]()
Definition 3: XML Information Set | |
Die Spezifikation des XML Information Sets definiert die Semantik der Metasprache XML, d.h. ihre zentralen Begriffe. Gleichzeitig setzt es diese Begriffe in Beziehung und definiert so syntaxunabhängig die Struktur eines XML-Dokumentes. |
![]()
Ausgehend von der Allgemeinheit der Aussage aus Definition 1 folgt, daß der Infoset neben seinem theoretischen Wert als Semantikdefinition zur XML auch zur Formulierung der Datenstrukturen, welche innerhalb eines XML-Prozessors vorliegen müssen, um beliebige XML-Dokumente verarbeiten zu können, herangezogen werden kann.
Daher läßt sich ein XML-Prozessor definieren als:
Definition 4: XML-Prozessor | |
Ein XML-Prozessor ist eine maschinelle Komponente (typischerweise: Software), die zum Lesen, Speichern und Verarbeiten eines XML-Dokuments eingesetzt wird. Er erlaubt Zugriff auf den Inhalt und die Struktur des XML-Dokuments. |
![]()
Die XML-Spezifikation faßt den XML-Prozessorbegriff etwas enger und beschränkt ihn lediglich auf Software-Module, die XML-Dokumente lesend verarbeiten. Konzeptionell spricht jedoch nichts gegen eine Umsetzung in Hardware, beispielsweise im Kontext eingebetter Systeme etc.
(In XML-Spezifikation nachschlagen)
Ferner nimmt die XML-Spezifikation an, ein Prozessor operiere nicht eigenständig, sondern im integrierten Zusammenspiel mit einer Applikation.
Beispiel 1: Ein erstes XML-Dokument | |
Download des Beispiels |
![]()
Das Beispiel zeigt ein erstes einfaches XML-Dokument, welches bereits die häufigst verwendeten Sprachelemente der XML versammelt.
Jedem XML-Dokument entspricht genau ein Information Set, der alle Informationselemente des Dokuments in Form einer Baumstruktur beinhaltet. Die nachfolgende Abbildung zeigt den Information Set des Beispiels in der Notation eines UML-Klassendiagramms. Dabei sind die einzelnen Knoten des Information Sets als Objekte (Klassensymbole mit unterstrichenem Klassennamen) und die Eigenschaften der Knoten als Attributwerte dargestellt.
Jedes Information Set besteht genau aus einem Document Information Item. Dieses stellt den äußeren Rahmen des XML-Dokuments dar. Es beinhaltet dokumentbezogene Informationen, wie die verwendete XML-Version und das gewählte Codierungsschema innerhalb des Unicode-Systems.
Das Document Information Item enthält daher u.a. die Informationen des XML-Dokumentprologs in der erste Zeile jedes Dokuments. Das durch die öffnende Winkelklammer und ein Fragezeichen eingeleitete Konstrukt ist in der ersten Zeile des Beispiels 1 dargestellt. Innerhalb des Prologs findet sich die Zeichenkette xml, sowie die Bezeichner version und encoding. Beiden ist ein durch doppelte Hochkommata umschlossener Wert nachgestellt, 1.0 für version, bzw. ISO-8859-15 für encoding.
Beendet wird der Prolog wiederum durch ein Fragezeichen und die schließende Winkelklammer. Wird auf die Angabe des optionalen Prologs im Dokument verzichtet, so sind die daraus ableitbaren Angaben im Document Information Item nicht gesetzt.
Als weitere Eigenschaften verfügt jedes Document Information Item über eine geordnete Liste von Kindknoten. Darin ist genau ein Element Information Item enthalten, welches den Startknoten des XML-Dokuments verkörpert. Wegen seiner hervorgehobenen Bedeutung als Wurzel des Dokumentbaumes wird dieser Knoten auch als Document Element bezeichnet.
Zusätzlich kann die Liste Elemente vom Typ Processing Instruction Information Item enthalten. Sie dienen der Darstellung von Verarbeitungsanweisungen, die durch den XML-Prozessor interpretiert werden.
Im Kopfbereich vor Document Element plazierte XML-Kommentare werden durch Comment Information Items innerhalb der children-Liste dargestellt.
Verfügt das XML-Dokument über eine Dokumenttypdeklaration, so findet sich auch ein Document Type Declaration Information Item in der Liste.
Deklarierte Notationen werden in einer ungeordneten Menge als Notation Information Item dargestellt.
Zusammengefaßt enthält das Document Information Item folgende Informationen:
Element Information Item, welches in der Rolle des Document Items fungiert. Ferner je ein Element des Typs Processing Instruction Information Item für jede Processing Instruction die außerhalb des Wurzelements definiert ist und jeweils ein Comment Information Item zu jedem definierten Kommentar.Element Information Item, das auf den Wurzelknoten des Dokuments verweist.Wie auch im Beispieldokument, bildet die erste Zeile den sog. Prolog eines jeden XML-Dokuments
(In XML-Spezifikation nachschlagen)
. Die Angabe der Version ist zwingend und derzeit auf die Konstante 1.0 fixiert. Die aktuelle XML-Spezifikation sieht als gültige Belegung der Versionsangabe ausschließlich die Zeichenkette 1.0 vor. Zukünftigen Weiterentwicklungen ist es jedoch freigestellt auch andere Revisionskennungen zu vergeben.encoding leitet das zweite Namen-Wert-Paar ein. Die Deklaration ist innerhalb des Prologs optional, und kann daher auch unterbleiben. Die Zeichenkette der Encodingdeklaration benennt das Codierungsschema, welches für das so gekennzeichnete Dokument verwendet wurde. Es definiert den Satz der innerhalb des Dokumentes zugelassenen Zeichen fest.
Gemäß Produktion 22 der XML-Syntaxdefinition ist der gesamte Prolog optional.
Die Encoding-Deklaration hat folgendes Aussehen (In XML-Spezifikation nachschlagen) :
[80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* [3] S ::= (#x20 | #x9 | #xD | #xA)+ [25] Eq ::= S? '=' S?
Die Festlegung der Produktion 80, sowie die der Produktion 23, stellt heraus, daß sich die Encodingdeklaration nicht auf die Prologzeile selbst auswirkt. Hier sind die beiden Zeichenketten xml und encoding in der Codierung UTF-8 oder UTF-16 Vorschrift.
Als Belegungen des Encoding Namens (EncName) sind beliebige Zeichensätze zugelassen. Der XML-Standard empfiehlt jedoch lediglich auf die durch die Internet Assigned Numbers Authority verwalteten zurückzugreifen (Dokument: Official Names for Character Sets)
(In XML-Spezifikation nachschlagen)
.
Die häufigsten praktisch eingesetzten Deklarationen sind die der ISO-8859 (extended ASCII)-Familie, sowie die der Unicode- und ISO-10646-Standards.
Die verschiedenen Abschnitte der ISO-8859 Familie werden als ISO-8851-n ausgedrückt, wobei n die Nummer des Abschnittes des zugehörigen ISO-Dokuments referenziert. Ferner können die durch JIS X-0208-1997 normierten asiatischen Zeichensätze als ISO-2022-JP, Shift_JIS und EUC-JP dargestellt werden.
Unicode stellt einen Industriestandard (entwickelt u.a. durch Apple, HP, IBM, Microsoft und SUN) zur Darstellung verschiedenster Alphabete und graphischer Zeichen dar. Sein zunächst durch 16-Bit codierter Zeichenvorrat bot Raum für 65536 unterschiedliche Symbole.
Die seit 1991 laufenden Unicodebemühungen münden in die ISO-Norm zur Erweiterung des klassischen ASCII-Codes (ISO 646) als ISO-10646 Universal Multiple-Octet Coded Character Set (UCS). Seit 1996 sind beide Standards synchronisiert und werden abgestimmt vorangetrieben.
UCS definiert zwei aufeinander aufbauende Codierungen: UCS-2 (16 Bit Umfang) und UCS-4 (32 Bit). Der bisherige Unicode-Standard ist voll kompatibel zu UCS-2 und durch diesen darstellbar.
Tabelle 2: Verschiedene Codierungen des Zeichens "A" | ||||||||||||||||||||||||||||||||||||||||
|
![]()
Die Zeilenumbrüche wurden in allen Fällen durch die Kombination von Wagenrücklauf und Zeilenvorschub ausgedrückt.
Die Tabelle stellt einige Codierungen zur Darstellung des Zeichens A zusammen.
Auffallend ist der große Platzbedarf der UCS-2 und -4 Codierungen. Insbesondere bei den „klassischen“ ASCII-Symbolen werden hier (u.U. sehr viele) führende Nullbits erzeugt, die in der Konsequenz zu einer deutlichen Vergrößerung der Beispieldatei führen.
Daher wurde mit dem UCS Transformation Format (UTF) eine kompaktere Darstellung zum jeweiligen UCS-Set eingeführt. UTF-8 verwendet standardmäßig die ersten acht Bit zur Darstellung der bekannten ASCII-Zeichen
Anmerkung: Inzwischen existiert auch eine „UTF-32“ genannte 32-Bit Ausprägung, diese ist jedoch identisch zu UCS-4, mit Ausnahme daß durch UTF-32 „nur“ 221-Zeichen dargestellt werden können.
Die Dateigröße ist daher für das betrachtete Beispiel in dieser Darstellungsweise unverändert zu der des UCS-4-Encodings.
Der Größenunterschied zwischen der UTF-7 codierten Datei und der Latin-1 encodierten erklärt sich aus der Darstellung des Umlautes sowie des +-Zeichens, die beide nicht nicht im klassischen 7-Bit ASCII-Code enthalten ist. So wird Ü im Wort Übungsbetrieb des Beispieldokumentes durch die die Bytefolge 2B 41 4E 77 2D dargestellt, während alle übrigen Zeichen durch ein einzelnes Byte ausgedrückt werden können.
UTF-8 ist in der Lage sämtliche Standard-ASCII-Zeichen durch jeweils genau ein Byte auszudrücken, wiederum für den Umlaut muß auf die 16-Bit-Darstellung des UCS-2 zurückgegriffen werden. Daher erhöht sich hier die Dateigröße um ein Byte.
Erwartungsgemäß beträgt der Umfang des UCS-2 codierten Dokuments exakt das Doppelte des 8-Bit Äquivalents der Latin-1-Darstellung.
Dasselbe gilt für die UTF-16-Variante, die für das vorliegende Beispiel unterschiedslos zu UCS-4 verläuft, da keinerlei Zeichen aus UCS-4 im Dokument auftreten.
Die nachfolgende Tabelle stellt beispielhaft die Anwendung der UTF-8-Codierung zusammen:
Tabelle 3: UTF-8 Codierung | ||||||||||||||
|
![]()
Diese Mimik zeigt den Nachteil des UTF-n-Encodings deutlich: Die Darstellung nicht n-Bit darstellbarer Zeichen benötigt u.U. mehr Bitstellen als im Standard UCS-Code.
So wird beispielsweise das Zeichen mit der größtmöglichen Position (7FFFFFFF) in UTF durch sechs Byte encodiert, während UCS dieselbe Information mit den verfügbaren 32-Bit ausdrücken kann. Andererseits „verschwendet“ die UCS-Darstellung für die niederwertigen Zeichen Bitstellen durch die führenden Nullen.
In der Praxis gilt es daher für das zu wählende Encoding einen möglichst guten Kompromiß zu finden: Im allgemeinen stellt das UTF-8-Encoding einen solchen dar, soweit überwiegend ASCII-Zeichen, und nur vereinzelt Sonderzeichen (hierzu zählen auch die deutschen Umlaute) eingesetzt werden.
Bei überwiegender Verwendung nicht in acht-Bit ASCII darstellbarer Zeichen (z.B. arabischer, chinesischer, etc.) erhöht die dann aufwendigere UTF-8-Codierung die Datenmenge.
So umfaßt die UTF-16-Darstellung des unten abgebildeten Beispieldokuments, welche in diesem Anwendungsfall identisch zu UCS-2 ist, 966 Bytes, während UTF-8 1299 Byte benötigt.
Achtung: Bereits durch die Unterstützung der beiden ISO-Zeichendarstellungen UTF-8 und UTF-16 ist die Konformität zum XML-Standard erfüllt! XML-Prozessorimplementierungen wird nicht abverlangt darüberhinausgehend weitere Darstellungen umzusetzen. (In XML-Spezifikation nachschlagen)
Wie bereits eingangs angemerkt, erklärt die XML-Spezifikation die Encodingdeklaration sowie den gesamten Prolog-Ausdruck als optionales Element
(In XML-Spezifikation nachschlagen)
.
Als Konsequenz geht dabei (auch) die Angabe des gewählten Encodings verloren.
Daher fordert der Anhang F der XML-Spezifikation Autodetection of Character Encodings bei einem von UTF-8 oder -16 abweichendem Codierungsschema die zwingende Angabe der XML-Deklaration (<?xml ...)
(In XML-Spezifikation nachschlagen)
.
Hintergrund dieser Maßnahme ist der Versuch anhand der damit bekannten fünf Zeichen das zugrundeliegende Encoding zu ermitteln.
Diese fünf Zeichen können als stabil angenommen werden, da Produktion 23 und 80 diese explizit von einem von UTF-8 oder -16 abweichenden Encoding ausnehmen.
Für Dokumente im deutschen Sprachraum, d.h. XML-Ströme die häuptsächlich aus den um die deutschen Umlaute ergänzten Standard-ASCII-Zeichen bestehen, hat es sich in der Vergangenheit eingebürgert den Zeichensatz latin-1 (ISO-8859-1) zu verwenden, um die Mehrbytedarstellung der Umlaute und weiterer Sonderzeichen in der UTF-Codierung zu umgehen.
Jedoch enthält der latin-1-Zeichensatz nicht das unter Unicode-Zeichennummer 20AC abgelegte Eurosymbol (_) welches zur Abkürzung des Währungsbegriffes der europäischen Gemeinschaftswährung verwendet wird.
Dieses Symbol wurde in die unter Nummer 15 veröffentlichte aktualisierte Fassung der Zeichensatzfamilie 8859 aufgenommen. Daher sollte bei der Erstellung von XML-Dokumenten generell darauf geachtet werden entweder ISO-8859-15 als Codierung zu wählen oder auf die ohnehin ungleich flexiblere UTF-Codierung zurückzugreifen.
Die Darstellung der Abbildung 6 faßt die syntaktischen Elemente abgekürzt zusammen:
Web-Referenzen 4: Weiterführende Links | |
•Payer, M.: UNICODE, ISO/IEC 10646, UCS, UTF •Kuhn, M.: UTF-8 and Unicode FAQ •SC Unipad ein kostenfreier Unicode Editor |
![]()
Jedes XML-Dokument enthält mindestens ein Element, das Document Element.
Seine, wie auch die Grenzen aller anderen Elemente, werden durch die Start- und Ende-Marke (engl. Tag) markiert. Für den Sonderfall eines leeren Elements bildet die Start- auch zugleich die Ende-Marke. Als eine Konsequenz können diese Elemente keine weiteren Kindknoten besitzen.
Die XML-Spezifikation legt den Aufbau des Start-Tags wie folgt fest (In XML-Spezifikation nachschlagen) :
[40] STag ::= '<' Name (S Attribute)* S? '>' [41] Attribute ::= Name Eq AttValue
Mittels der Tag-Namen werden die Typen eines Dokumentes definiert. Sie werden später, in Verbindung mit einem Grammatikmechanismus wie DTD oder XML-Schema, zur Gültigkeitsprüfung herangezogen.
Der Aufbau der Elementnamen ist ähnlich zu den aus den Programmiersprachen bekannten Regeln. Am Beginn muß ein Buchstabe, ein Unterstrich oder der Doppelpunkt stehen. Darauf können nahezu beliebige Zeichen folgen, die über ihre Unicoderepräsentation genau definiert sind.
Leerzeichen und sog. white spaces (vgl. Produktion 3 der XML-Spezifikation) wie Tabulatoren und Zeilenvorschübe sind nicht zugelassen. Desweiteren darf ein Elementname weder Auszeichnungssymbole, wie die öffnenden und schließenden Winkelklammern, enthalten, noch mit der Zeichenkette XML beginnen. Die Zeichenfolge XML ist -- in allen Schreibweisen -- für die Standardisierung reserviert und wird ausschließlich in W3C-Dokumenten verwendet.
Durch den Namespace Standard (siehe Abschnitt 1.3) wird dem Doppelpunkt, als Trennsymbol zwischen Namensraumkürzel und Elementnamen, eine besondere semantische Bedeutung zugeschrieben. Daher sollte -- obwohl er spezifikationsgemäß ein erlaubtes Zeichen darstellt -- von seiner Verwendung in Elementnamen abgesehen werden.
Oftmals wird -- insbesondere in der Praxis -- die existierende und notwendige Unterscheidung zwischen Tag und Element nicht getroffen.
Die Tags oder Marken drücken beschreibende Information über ein Element aus. Der durch den Tag ausgedrückte Elementname liefert somit lediglich deskriptive Information über die Natur des Elements. Hierzu können Worte einer natürlichen Sprache verwendet werden, jedoch auch beliebige andere identifizierende Zeichenketten. Üblicherweise sind jedoch sprechende Tags anzutreffen.
Über den Tag-Namen hinaus kann ein Startelement auch noch Attribute enthalten (Vgl. Produktion 41). Diese sind jedoch nicht vom Typ Element und werden daher im Abschnitt Attribute Information Item betrachtet.
Der Aufbau eines Elementnamens wird durch die Produktionen 4ff definiert (In XML-Spezifikation nachschlagen) :
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)*
Im Beispiel sind Vorlesung, Titel und Hochschule („normale“) Elemente, während ein leeres Element darstellt.
Die Abbildung zeigt, daß auf der semantischen Ebene des Information Sets die syntaktische Unterscheidung zwischen Elementknoten mit Kindelementen und leeren Elementen des XML-Dokuments keine Berücksichtigung findet.
Eine Sonderstellung unter den Elementen eines Dokuments nimmt der ausgezeichnete Wurzelknoten ein, er wird auch durch das Document Information Item referenziert. Unterhalb dieses Knotens spannt sich der Dokumentbaum auf. Hierfür enthält jedes Element Information Item eine geordnete Menge (children) weiterer Elementknoten.
Die durch den Elementnamen verwirklichte Typisierung spiegelt sich im Information Set durch das Attribut local name wieder.
Darüberhinaus enthält jedes Element Information Item durch die Eigenschaft namespace name die Identifikation des Namensraumes, in dem dieses Element plaziert ist.
Das Namensraumkürzel, welches zur Identifikation eines Elements herangezogen wird, findet sich in der Eigenschaft prefix.
Der local name entspricht dem -- um Namensraumkürzel und trennenden Doppelpunkt gekürzten -- wiedergegebenen Elementnamen des XML-Dokuments.
Zusätzlich wird jeder Namensraum, der syntaktisch an die Attributdefinition angelehnt ist, in ein Element der ungeordneten Menge namespace attributes abgebildet, welche (nochmals) die Namensräume eines Elements beinhaltet.
Beispiel 2: Element mit deklariertem Namensraum | |
|
![]()
Das Beispiel zeigt das leere Element aElement innerhalb des Elements aParent. Durch das Elternelement wird der Namensraum example.com deklariert und dem Kürzel myNS zugewiesen.
Gemäß den Prinzipien der Namensräume steht der auf dem Elternknoten deklarierte Namensraum auch in allen Kindknoten zur Verfügung. Daher enthält die Eigenschaft in-scope namespaces des Elements aElement auch die Namensräume der übergeordneten Elemente.
Das resultierende Element Information Item des Knotens aElement ergibt sich daher als (der Ausschnitt enthält nur die für das Beispiel relevanten Elemente):
local name = aElement namespace URI = example.com prefix = myNS
Nähere Ausführungen zur Bedeutung von Namensräumen und ihrer Verwendung finden sich im Abschnitt Namensräume.
Verweise auf die im Dokumentbaum nachfolgenden Knoten eines Elements werden in einer geordneten Liste children gesammelt. Ihre Inhalte sind sind vom Typ Element Information Item,
Unexpanded Entity Reference Information Item, Character Information Item und Comment Information Item.
Anhand der beiden Informationstypen Element Information Item und Character Information Item zeigen sich bereits die beiden Strukturierungsformen eines XML-Dokuments. Einerseits die durch die starke Verwendung von Elementen- und Attributen gekennzeichnete strukturierte Darstellung, andererseits die durch „eingestreuten“ Freitext entstehende charakteristische semistrukturierte Variante.
In beiden Fällen werden die textartigen Inhalte durch Character Information Items repräsentiert.
Das Beispiel zeigt die verschiedenen Auftretensformen exemplarisch. Der Inhalt der Elemente title und organization ist rein Zeichenketten-artig; jedoch mischt vorlesung strukturierten Inhalt (in Form der genannten Elemente) und unstrukturierte Information -- repräsentiert durch den Text 2002/03.
Die XML-Spezifikation prägt für Zeichenketten-artige Inhalte, die optional durch eingestreute Elemente angereichert werden, den Begriff mixed Content.
children enthält jedoch keine Verweise auf die Attribute eines Elements. Diese sind durch die separate ungeordnete Menge attributes repräsentiert. Die Diskussion der als Attribute Information Item bezeichneten Mengenelemente findet sich im folgenden.
Die in der Abbildung dargestellte Beziehung parent verbindet jedes Element mit seinem übergeordneten. Als Ziele dieser Referenz sind ausschließlich Ausprägungen von Document Information Item oder Element Information Item zugelassen.
Diese Festlegung untermauert nochmals die strikte Baumstruktur eines XML-Dokuments. Andernfalls müßte parent als Menge definiert werden.
Das betrachtete Beispiel enthält, neben den Elementen, auch ein XML-Attribut.
Syntaktisch werden Attribute innerhalb eines Start-Tags plaziert und durch Namen-Wert-Paare ausgedrückt
(In XML-Spezifikation nachschlagen)
.
Der Information Set enthält folgende Eigenschaften zu jedem Attribut:
ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, NOTATION, CDATA, und ENUMERATION.IDREF(S), ENTITY, ENTITIES oder NOTATION typisiert), so enthält diese Eigenschaft eine Verweisliste auf alle Auftreten des Attributwertes.Im Vergleich zum Element Information Item erlaubt das Attribut keine weitere Unterstrukturierung (im XML-Sinne); insbesondere fehlen mengenwertige Eigenschaften zur Aufnahme der dann notwendigen Verweise. Stattdessen wird der gesamte Inhalt durch die Eigenschaft normalized value dargestellt.
Daher dürfen innerhalb von Attributen keine (Meta-)Symbole wie die öffnende Winkelklammer auftreten, die als Starttags (miß-)interpretiert werden könnten
(In XML-Spezifikation nachschlagen)
.
Auch die Form des Auftretens von Attributen innerhalb des definierenden Elements unterscheidet sich von der der Subelemente innerhalb eines Elements. Während Kindelemente durch die geordnete Liste children dargestellt werden, können Attribute (formalisiert in der ungeordneten Menge attributes) in beliebiger Reihenfolge angegeben werden, ohne die Dokumentsemantik zu verändern. Mehr noch, die Listenkonstruktion erlaubt das unterscheidbare mehrfache Auftreten desselben Elements. Diese Mimik ist für allgemeine Mengen, und damit für Attribute, nicht möglich.
Element vs. Attribut
Der Vergleich der Eigenschaften von Element und Attribut zeigt bereits, daß sich nicht weiter strukturierte Elemente auch durch Attribute darstellen ließen. Dies wirft innerhalb der Betrachtung der Syntax eines XML-Dokuments bereits die Frage nach der Organisation, und damit dem Entwurf, eines solchen auf.
Die bestehende XML-Spezifikation bleibt jedoch eine Anwendungs- oder Einsatzempfehlung zu dieser Fragestellung schuldig.
Aufgrund der inhärenten Einschränkungen der Attributprimitive bietet sich ihr Einsatz nur in einigen Sonderfällen an. Beispielsweise zur Darstellung deskriptiver Information über das enthaltende Element, die nicht Bestandteil der im XML-Dokument dargestellten Information ist. Hierbei kann es sich um Informationen höherer Ordnung, sog. Metainformation handeln.
Generell bieten sich Elemente immer dann an, wenn eine weitere Unterstrukturierung des Inhaltes gewünscht oder vielleicht zukünftig notwendig ist. Die Darstellungsform als Attribut würde in diesem Fall eine strukturelle Umorganisation des XML-Vokabulars erfordern, da die Spezifikation keine Unterstrukturierungsmöglichkeit für Attribute vorsieht.
Darüberhinaus gestatten Attribute keine Wiederverwendung in verschiedenen Bedeutungskontexten, da sie syntaktisch an das umgebende Element gebunden sind. Diese Einschränkung wird zwar durch die Einführung des Standards XML Schema weitgehend gemildert, jedoch nicht die zuvor genannte Mächtigkeitseinschränkung. Zusätzlich stellen Attribute die einzige Möglichkeit zur Typisierung des Inhaltes dar solange DTDs verwendet werden. Dieser Punkt
dürfte jedoch durch den wachsenden Praxiseinsatz der XML Schemata immer mehr an Bedeutung verlieren.
Die Darstellung der Abbildung 7 faßt die syntaktischen Elemente abgekürzt zusammen:
Die Betrachtung der Attribut- und Elementknotentypen im Information Set zeigt bereits die zwei grundlegenden Arten der Informationsdarstellung eines XML-Dokumentbaumes.
Die Eigenschaft normalized value des Attribute Information Items kapselt den im XML-Dokument angegebenen Inhalt direkt im Informationsknoten. Der Datentyp der Eigenschaft ist für alle Dokumenttypen fixiert angebbar, da keine weitere Unterstukturierung von Attributen erfolgen kann.
Entgegensetzt hierzu verläuft die Argumentationslinie für Elemente. Ihr Inhaltsmodell kann eine freie Mischung aus Zeichenketten-Daten und weiteren Elementen aufweisen. Die Länge der Zeichenketten ist hierbei nicht näher festgelegt. Daher können diese im minimalen Falle nur aus einem einzelnen Zeichen bestehen.
(In XML-Spezifikation nachschlagen)
.
Innerhalb des Information Sets eines Dokuments werden alle Zeichen im Rumpf eines Elements als Ausprägungen des Character Information Items dargestellt.
Jedes Character Information Item stellt das im Dokument gegebene Zeichen gemäß ISO 10646-Codierung in der Eigenschaft character code dar. Die Werte können hierbei jedoch nur in den durch die Spezifikation vorgegebenen Grenzen variieren
(In XML-Spezifikation nachschlagen)
. Darüberhinaus genügt bereits die Unterstützung der UTF-8 und -16-Darstellung zur Erfüllung der Spezifikationsanforderungen an konforme Prozessoren.
Handelt es sich bei dem betrachteten Zeichen um einen white-space (Leerzeichen, Tabulator, Zeilenvorschub, Wagenrücklauf), der in der DTD als „erhaltenswert“ spezifiziert wurde, so ist die Boole'sche Eigenschaft element content whitespace auf true gesetzt; andernfalls konstant auf false. Häufig werden white-spaces zur besseren visuellen Strukturierung des XML-Dokumentes eingesetzt. So enthält das Beispieldokument jeweils nach der schließenden Marke einen Zeilenvorschub. Unter Datengesichtspunkten handelt es sich hierbei jedoch um keine verwertbare Information. Die Angabe der Berücksichtigung bzw. Vernachlässigung im XML-Dokument existierender white-spaces kann in der DTD gesetzt werden. Ist keine solche Deklaration gesetzt oder existiert keine explizite Grammatik, so hat die Eigenschaft element content whitespace keinen Inhaltswert.
Der als parent-Eigenschaft realisierte Verweis auf das beherbergende Elternelement bildet den Abschluß der Eigenschaften des Character Information Items.
Im betrachteten Beispiel sind unterhalb der Elemente organization und title Character Information Element-Ausprägungen plaziert. Die Darstellung zeigt diese als Objekte (Unterhalb des organization-Knotens wurde aus Übersichtlichkeitsgründen auf die Darstellung verzichtet).
Eine Sonderrolle kommt den Zeichen zu, die auch als Metasymbole der Auszeichnungssprache dienen. Sie dürfen daher nicht in XML-Dokumenten auftreten.
Bei diesen Zeichen handelt es sich um die beiden Winkelklammern, die einfachen und doppelten Anführungszeichen sowie das Kaufmanns-Und. Um eine Fehlinterpretation zu vermeiden existieren hierfür vordefinierte Textersetzungsmuster.
Jeder spezifikationskonforme XML-Prozessor berücksichtigt diese Symbole und gibt sie in der korrekten Darstellung an die Applikation weiter; damit sind diese Fluchtsymbole (engl. escape characters) aus Applikationssicht vollkommen transparent.
Tabelle 4: Vordefinierte Textersetzungsmuster | ||||||||||||
|
![]()
![]()
Zur Dokumentation steht innerhalb jedes XML-Dokuments die von SGML ererbte Kommentierungssyntax zur Verfügung.
Die Spezifikation erlaubt die Anbringung von Kommentaren an zwei Stellen im XML-Dokument:
Nicht erlaubt sind demnach Kommentare in Tags, d.h. innerhalb geöffneter Winkelklammern.
Dergleichen gilt für Kommentare selbst, was geschachtelte Kommentare verbietet.
Ferner können Kommentare desselben Stils auch in DTDs und im internal Subset verwendet werden.
Produktion 15 der XML-Spezifikation legt die Struktur wie folgt fest:
[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
Als Konsequenz sind innerhalb von Kommentaren alle Zeichen, auch Metasprachensymbole, zugelassen. Somit ist das beliebige „auskommentieren“ von Dokumentteilen möglich.
Als zentrale Einschränkung dürfen (aus SGML-Kompatibilitätsgründen) keine zwei aufeinanderfolgenden Trennstriche (hyphen-minus, ISO 10646 #x2D) innerhalb eines Kommentars auftreten, da diese fehlerhafterweise als Beginn des Kommentarendes interpretiert würden.
Der gesamte Inhalt eines Kommentars wird als uninterpretierte Zeichenkette in der Eigenschaft content des Comment Information Items abgelegt.
Zusätzlich verweist jeder Kommentar über die bekannte parent-Eigenschaft auf seinen Elternknoten. Wie bereits durch die beiden Einsatzformen angedeutet, kann es sich hierbei ausschließlich um ein Document Information Item oder ein Element Information Item handeln.
Beispiel 3: Verschiedene Kommentarstrukturen | |
|
![]()
Das Beispiel zeigt verschiedene Einsätze von Kommentaren. Zunächst eine einzeilige Anmerkung, die nur verschiedene Zeichen versammelt. Im Anschluß einen mehrzeiligen Kommentar, der auch XML-Strukturen beinhaltet. Ein prozessierender Zugriff auf den Kommentarinhalt ist jedoch nicht vorgesehen, und wird durch gängige Parser und APIs zumeist nicht unterstützt.
Im Gegensatz zu den prinzipiell in beliebigem Freitext formulierbaren Kommentaren, die üblicherweise zur Kommunikation mit einem menschlichen Leser des XML-Dokuments dienen, zielt die Processing Instruction und das zugehörige Element des Information Sets auf Kommentare, welche einen maschinellen Verarbeiter des XML-Dokuments, den XML-Prozessor, betreffen.
Im Grunde genommen läuft die Anreicherung eines XML-Dokuments mit Verarbeitungsinformation der Idee einer deskriptiven Auszeichnungssprache entgegen ...
Jedoch wurde für die XML beschlossen, nicht zuletzt aus Kompatibilitätsgründen zu SGML, dieses Sprachmerkmal beizubehalten. Eine mögliche weitere Erklärung könnte das syntaktische Aussehen der XML-Deklaration innerhalb des des Dokumentprologs sein. Ihre in Produktion 23ff festgelegte Struktur stellt eine Anwendung der Processing Instruction dar, auch wenn dies innerhalb der Spezifikation nicht explizit formuliert wird.
Die Syntax einer Processing Instruction lautet:
[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
Eine Processing Instruction wird demnach immer durch eine öffnende Winkelklammer und ein folgendes Fragezeichen eingeleitet. Daran schließt sich die Benennung der Applikation an, für die diese Instruktion eingefügt wurde. Optional können weitere Zeichen -- ausgenommen der Kombination aus Fragezeichen und schließender Winkelklammer -- folgen.
Das adressierte System kann beliebig identifiziert werden, jedoch ist die Zeichenkette XML in allen Variationen ausgeschlossen.
Unbedachterweise verbietet die Spezifikation jedoch nicht die Bildung von Namen, die XML als Präfix nutzen ... Jedoch sollte von der Nutzung solcher Konstruktionen abgesehen werden, da sie zur Verwirrung der (menschlichen) Leser beitragen.
Wie Kommentare auch können Processing Instructions an beliebiger Stelle innerhalb des XML-Dokuments auftreten: Vor Beginn des Wurzelelements sowie im Rumpf jedes Elements. Nicht gestattet ist ihre Angabe in Elementnamen und Attributen.
Ergänzend sei angemerkt, daß die Angabe von Processing Instructions auch innerhalb der Document Type Definition erfolgen kann. (siehe Document Type Definition Information Item).
Beispiel 4: Verschiedene Processing Instructions | |
Download des Beispiels |
![]()
Übung 1: Processing Instructions | |
Begründen Sie mit Hilfe der XML-Spezifikation warum Processing Instructions nicht innerhalb von Elementen und Attributen zugelassen sind. Hinweis: Es gibt mehr als eine Begründung! |
![]()
Das Processing Instruction Information Item enthält die angesprochene Zielapplikation als Namen innerhalb der Eigenschaft target.
Der weitere Inhalt der Deklaration wird uninterpretiert als Zeichenkette in die Eigenschaft content übernommen.
Neben einem Verweis auf die Basis-URI der Processing Instruction wird durch parent das Elternelement -- entweder ein Knoten des Typs Document Information Item oder Element Information Item -- referenziert.
Zur Formalisierung der Identifikation der Zielapplikation empfiehlt die XML-Spezifikation die Verwendung des Sprachmittels Notation.
Notationen können nicht in XML-Dokumenten auftreten, sondern sind DTDs vorbehalten.
Dennoch sollen sie hier wegen ihrer Berücksichtigung im Information Set und der Verbindung zu den Processing Instructions kurz eingeführt werden.
Durch Notations können Dateninhalten externe Quellen (etwa: URLs oder Applikationen) zugeordnet werden. Der Grundgedanke liegt in der Erweiterung der Ausdrucksmächtigkeit eines XML-Dokuments. Parser berücksichtigen solch typisierte Inhalte jedoch nicht. Die Behandlung muß (proprietär) in der datenverarbeitenden Applikation erfolgen.
Die Syntax der Notation lautet:
[82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>' [83] PublicID ::= 'PUBLIC' S PubidLiteral [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
Die einfachst denkbare Anwendung von Notations zielt auf Informationen, deren Inhalte nicht durch den XML-Prozessor auf syntaktische Korrektheit geprüft werden. Dies sog. unparsed entities werden aus einem eineindeutigen Namen und einer freien Zeichenkette gebildet.
Die Zeichenkette bezeichnet primär die als URI (gemäß RFC 2396 und 2732) codierte Identifikation des verarbeitenden Systems. Im Falle standardisierter Inhalte kann auf einen public identifier zurückgegriffen werden. Üblich ist die Verwendung von system identifiern, die auf eine bekannte URI oder ein installiertes Anwendungsprogramm verweisen.
Beispiel 5: NOTATIONS | |
Download des Beispiels |
![]()
Hinweis: Die Deklarationen in DTD-Syntax -- erkennbar am einleitenden Ausrufezeichen (!) -- sind kein XML! Sie müssen daher nicht den syntaktischen Konventionen der Extensible Markup Language genügen!
Im Beispiel wird nach der DOCTYPE-Deklaration DTD-Syntax verwendet, um das Inhaltsmodell des nachfolgenden XML-Dokuments festzulegen. Die genaue Bedeutung der DTD-Konstrukte wird im Abschnitt 1.4 behandelt.
Das Beispiel beinhaltet drei Notationselemente: isoDate, gif und hex. isoDate referenziert die internationale Norm 8601 als PDF-Dokument.
Die durch hex definierte NOTATION wird im XML-Dokument verwendet.
Diese Anwendung offenbart auch einen weiteren Aspekt dieses Konstrukts; die Nachbildung von Datentyp-ähnlichen Strukturen, die jedoch durch den Anwendungsprogrammierer umgesetzt werden müssen.
Im Vergleich der beiden SYSTEM-Referenzen zeigt sich die Allgemeinheit des URI-Mechanismus als Schwäche. Da anhand der URI nicht ermittelbar ist, ob es sich bei der identifizierten Lokation um ein Dokument, ein System oder ein ausführbares Programm handelt, läßt sich keine verbindliche Semantik zur Behandlung von NOTATION-Elementen angeben.
Die mit gif benannte Notation definiert einen Public-Identifier, der nicht auf eine URI verweist, sondern eine weltweit eindeutige Benennung darstellt. Die Abbildung auf eine Systemlokation zur Behandlung der Notation kann durch die zusätzliche Angabe eines System-Identifiers erfolgen. Liegt eine solche nicht vor, muß der XML-Prozessor für die Abbildung Sorge tragen.
Ein weiteres Beispiel für die Verwendung des NOTATION-Konstrukts findet sich im Zusammenspiel mit ungeprüften Entitäten.
Jedes NOTATION-Element wird im Information Set durch ein Notation Information Item repräsentiert. Es enthält neben dem Namen (Eigenschaft name) die beiden möglichen Identifierinhalte in den Eigenschaften system identifier bzw. public identifier. Beide Eigenschaften sind Zeichenketten-artig; lediglich die URI-spezifische Inhaltsnormalisierung wird (wie in der XML-Spezifikation beschrieben) durchgeführt.
Dokumente, zu denen eine -- in der Sprache DTD formulierte -- explizite Grammatik existiert, verfügen über eine DOCTYPE-Deklaration, welche den durch URI identifizierten Ablageort der DTD enthält.
Die Charakteristika dieser Information sind im Document Type Declaration Information Item zusammengefaßt. Es enthält alle Informationen, die im XML-Dokument über die DTD vorliegen. Daher bietet es keinen Zugriff auf die durch die DTD festgelegte Grammatik!
Im Einzelnen bietet der Information Set Knotentyp:
Das Beispiel zeigt zwei DOCTYPE-Deklarationen. Zunächst eine SYSTEM-Deklaration, welche die Datei abc.dtd im aktuellen Dateisystemkatalog über eine URI referenziert.
Die zweite Deklaration zeigt die HTML v4.01-Standarddeklaration. Für sie existiert der dargestellte PUBLIC-Identifer. Zusätzlich wurde ein SYSTEM-Identifier (er folgt direkt ohne Schlüsselwort auf den PUBLIC-Identifer) angegeben, der, per URI, auf das DTD-Dokument beim W3C verweist.
Beispiel 6: Verschiedene DOCTYPE-Deklarationen | |
|
![]()
Im Abschnitt über das Character Information Item wurden bereits die Vordefinierten Textersetzungsmuster eingeführt, um die als Metasymbole dienenden Zeichen auch im Informationsbereich von XML-Dokumenten verwenden zu können.
Das für die fünf vordefinierten Symbole gewählte Verfahren steht auch dem Anwender zur Definition eigener Ersetzungsmuster offen. Die Definition kann ausschließlich in der Document Type Definition, oder dem DTD-Abschnitt eines Dokuments, erfolgen.
Diese Muster werden als Entitäten (engl. entities) bezeichnet.
Die Syntax ist wie folgt festgelegt (In XML-Spezifikation nachschlagen)
[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'" [76] NDataDecl ::= S 'NDATA' S Name
Aus der Syntax ergeben sich zwei Klassen von Entitäten: Die durch eine URI und evtl. öffentlichen Namen identifizierten externen Entitäten, und die internen Entitäten, deren Inhaltsdefinition direkt rechts neben dem Schlüsselwort ENTITY gegen ist.
Die Verwendung von Entitäten kann an jeder Stelle des Informationsbereichs eines XML-Dokuments gestattet werden. Daher können Element- und Attributnamen keine Entitätsreferenzen enthalten.
Der Einsatz erfolgt, wie für die vordefinierten entities gezeigt, durch namentliche Referenzierung mit einem vorgestellten Kaufmanns-Und und einem abschließenden Semikolon.
Referenzierungssyntax: & entityName ;
Beispiel 7: Einige Entitätsdefinitionen | |
Download des Beispiels |
![]()
Das Beispiel zeigt die drei möglichen Ausprägungen der Entitätsdefinitionen. entA deklariert eine interne Entität, deren Auftreten durch die Zeichenfolge abc ersetzt wird.
Durch entB und entC werden externe Quellen angesprochen. Die verwendete Syntax ist dabei zu der bei NOTATIONs eingeführten identisch. Während entB ausschließlich eine lokal bekannte Referenz darstellt, bedient sich entC des PUBLIC-Identifiers um darüberhinaus auch eine öffentlich bekannte Quelle anzusprechen.
Im Dokument werden alle drei Entitäten über den selben Syntaxmechanismus eingebunden.
Innerhalb des Information Sets werden nicht-expandierte Entitäten durch das Element Unexpanded Entity Reference Information Item repräsentiert (für alle expandierten ist ihre Herkunft vollkommen transparent und für die Applikation nicht von Interesse).
Es definiert folgende Eigenschaften:
http://www.jeckle.de/vorlesung/xml/script.html bzw. file://symbols)-//FHA//Symbol//DE)Mit der XML-Syntaxproduktion 76 wird als zusätzlicher Entitätstyp die explizit nicht zu prüfende Entität (engl. unparsed entity) eingeführt. Sie kann beispielsweise dazu verwendet werden, um Binärdaten wie Bilder, Videos, o.ä. aus einem XML-Dokument zu referenzieren.
Beispiel 8: Eine ungeprüfte Entität | |
Download des Beispiels |
![]()
Das Beispiel definiert zunächst die NOTATION für das Graphikformat GIF über dessen PUBLIC-Identifier. Diese wird innerhalb der Entität entA zur Definition der ungeprüften Inhaltsreferenz auf die Datei xyz.gif herangezogen.
Seitens des Information Sets stellt das Unparsed Entity Information Item eine Abwandlung der im vorhergehenden betrachteten Entitätsreferenz dar.
Im Einzelnen definiert der Information Set die Eigenschaften:
xyz.gif)-//Compuserve Information Services//NOTATION Graphics Interchange Format//EN)Die Darstellung der Abbildung 8 faßt die syntaktischen Elemente abgekürzt zusammen:
Jedem im XML-Dokument definierten Namensraum ist ein Namespace Deklaration Information Item zugeordnet. Es enthält die notwendigen syntaktischen Details zur Identifikation des Namensraumes:
Beispiel 9: Beispiel eines Dokuments mit Namensräumen | |
|
![]()
Für das Beispiel lauten die Namensräume wie folgt:
| |||||||||||||||
Eine ausführliche Betrachtung zur Verwendung von Namensräumen findet sich im entsprechenden Abschnitt.
Die Graphik der Abbildung 9 stellt alle diskutierten Elemente des Information Sets in der Übersicht mit ihren Beziehungen dar. Zur Veranschaulichung wurde eine einfache Graphenstruktur gewählt, die alle Informationseinheiten als Knoten (darstellt als Ellipsen) und alle zugelassenen Beziehungen als gerichtete Kanten zwischen diesen enthält. Zusätzlich ist an die Kanten die Art der Beziehung angetragen.
Den Ausgangspunkt der baumartigen Struktur eines XML-Dokuments bildet die im Zentrum abgebildete Primitive Document Information Item, die alle weiteren Inhalte eines Dokuments über die children-Kante als Kindknoten enthält. Ferner fällt in dieser Darstellung besonders auf, daß lediglich Element Information Items über weitere Kindknoten verfügen und so die charakteristische XML-Struktur herausbilden. Alle übrigen Primitive dienen überwiegend als Blattknoten des Baumes.
Die Graphik der Abbildung 10 setzt die durch den Infoset-Standard definierte Semantik und die darauf aufsetzenden Syntaxen in Beziehung. Der XML-Basisstandard definiert hierbei nur eine von mehreren möglichen Syntaxen zur Darstellung von Infoset-Ausprägungen. Ebenso denkbar wäre der Einsatz anderer Darstellungen gleicher Mächtigkeit wie beispielsweise der S-Expression aus LISP oder objektorientierte Umsetzungen.
![]()
Auf Basis der Definitionen des Information Sets läßt sich ein beliebiges XML-Dokument, welches den Strukturierungsprinzipien des Infosets folgt, als wohlgeformt (well-formed) charakterisieren.
Definition 5: Wohlgeformtes XML-Dokument | |
Ein textartiges Objekt, dessen Inhalt folgenden Anforderungen genügt:
siehe XML-Spezifikation |
![]()
Der Textstrom des Beispiels 10 zeigt ein nicht-wohlgeformtes XML-Dokument, welches gegen eine Reihe der in Definition 5 verstößt:
Beispiel 10: Ein nicht wohl-geformtes XML-Dokument | |
Download des Beispiels |
![]()
So findet sich in Zeile 3 ein nicht in die erforderlichen Anführungszeichen eingeschlossener Attributwert.
Der textuelle Elementinhalte des in Zeile 4 geöffneten Elements elementB enthält ein öffnendes Winkelklammersybol, welches um Fehler während des Einlesevorganges zu vermeiden durch die alternative Zeichensequenz < hätte ersetzt werden müssen. Darüberhinaus fehlt das korrekte schließende Tag zum Öffnenden.
Innerhalb des Elements elementC der Zeile 6 wird zweifach ein identisch benanntes Attribut definiert.
Im öffnenden Tag des in Zeile 7 definierten Elements elementD findet sich eine -- dort nicht zugelassene -- Processing Instruction.
Überdies überlappen sich die Elementgrenzen der Elemente elementC und elementD und zusätzlich wird der in Zeile 10 plazierte Kommentar nicht durch die erforderlichen genau zwei Bindestriche eingegrenzt.
Die XML-Namensräume wurden schon verschiedentlich erwähnt. Sie
bilden die wichtigste, und offensichtlichste Weiterentwicklung der
XML-Urspezifikation seit ihrer Veröffentlichung.
Trotz ihrer engen Beziehung zum XML-Kernstandard bildet die Recommendation
Namespaces in XML eine eigenständige Spezifikation. Aufgrund der engen syntaktischen Beziehung zum XML-Standard und der großen praktischen Bedeutung, sowie des Einflusses auf die weitere Entwicklung verschiedenster Sekundärstandards und XML-Sprachen, werden die Namensräume explizit in der Neuauflage des XML-Standards berücksichtigt. Einen Beleg hierfür bildet die Anmerkung zu Abschnitt 2.3 Common Syntactic Constructs. Dort wird von der -- laut Syntaxproduktion 5 erlaubten -- Verwendung des Doppelpunktes in Elementnamen abgeraten. Dies geschieht, um Mehrdeutigkeiten, oder schlichtweg der Verwirrung des Anwenders, vorzubeugen, da es sich beim Doppelpunkt um ein Symbol besonderer Bedeutung innerhalb der Namensraumdeklarationen handelt.
Warum Namensräume?
Die breite Entwicklung immer neuer XML-Sprachen führt zwangsläufig zu Mehrfachentwicklungen für ähnliche oder identische Problemstellungen. Technisch betrachtet äußerst sich dies -- bei natürlichsprachlicher Benennung der Elemente -- durch die Verwendung identischer Bezeichner in verschiedenen XML-Sprachen. Hierbei bilden die verschiedenen Sprachen Anwendungskontexte, innerhalb derer die Bezeichner, durch Einbezug der Anwendungssemantik, eindeutig sind; andernfalls kann unterstellt werden, daß bereits durch die Sprachentwicklung andere Benennungskonventionen gewählt worden wären.
In der Konsequenz der Verfügbarkeit verschiedenster XML-Sprachen für beliebige Anwendungsbereiche entsteht der (berechtigte) Wunsch existierende Sprachfragmente in eigene Sprachen zu integrieren, um so zeitraubenden und vielfach fehleranfälligen Mehrfachentwicklungen vorzubeugen. Jedoch tritt bei diesem Integrationsszenario die u. U. kontextabhängige Elementeindeutigkeit zu Tage.
Das Beispiel zeigt zwei Dokumente identischen Informationsumfanges, die lediglich strukturell differieren.
Beispiel 11: Ein Rechnungsdokument | |
|
![]()
Beispiel 12: Eine alternative Rechnungsstruktur | |
|
![]()
Die beiden Bäume mit Information Set-Ausprägungen zeigen die Struktur der Beispieldokumente. Dabei sind Knoten die den selben Inhalt repräsentieren mit identischen Farben unterlegt, unabhängig davon um welchen Knotentyp es sich handelt. Die Character Information Item Knoten wurden aus Übersichtlichkeitsgründen weggelassen und durch Punkte angedeutet, sie sind jedoch für die vorliegende Betrachtung nicht von Interesse.
Einige der Elemente und Attribute werden in beiden Dokumenten mit gleichen Inhalten verwendet; z.B. Name, Ort oder PLZ. Dies äußert sich in identischen Teilbäumen unterhalb der Information Set-Knoten welche diese XML-Elemente repräsentieren. Hieraus läßt sich ableiten, daß die beiden vorgestellten Sprachen an den genannten Stellen keine strukturelle Differenz aufweisen.
Dagegen unterscheiden sich die Kindknoten der Elemente Rechnung und Kunde hinsichtlich ihrer Struktureigenschaften. So folgt im ersten Beispieldokument auf das Rechnung-Element direkt der Kunde, während im zweiten XML-Dokument zunächst ein Element mit dem Namen Rechnungsanschrift erwartet wird.
Dergleichen gilt für die Kindelemente des Kunden. Im zweiten Beispieldokument wird die diesem Element untergeordnete Kundennummer durch ein Attribut (kundenNr) dargestellt. Dagegen codiert das erste Beispiel diese Information direkt in den Elementinhalt.
Solange die beiden Dokumente in unterschiedlichen Anwendungswelten (Unternehmen o. ä.) verwendet werden, ist der gewählte Ansatz nicht problematisch. Bedenklich wird er jedoch in mindestens zweierlei Hinsicht:
Zunächst bei der „Mischung“ der beiden Dokumente. Dieser Wunsch tritt bei praktischen Problemstellungen häufig auf, wenn es um die Übernahme von XML-codierten Daten in ein anderes XML-Dokument geht. In der Konsequenz folgt das entstehende Zieldokument nicht mehr den Strukturierungsregeln eines der Ausgangsdokumente; mithin entsteht eine neue Dokumentstruktur, deren Regeln nicht explizit dokumentiert sind.
Eine weitaus größere Herausforderung stellt die Zusammenfassung und Veröffentlichung von XML-Strukturen in sog. Schemabibliotheken oder Datenbanken dar. Hier werden zwar die Dokumente nicht vereinigt, jedoch offenbart sich die gleiche Anwendungsdomäne (z.B. Rechnungsverwaltung, Stücklisten, Produktstrukturen) als problematisch, da sie die XML-Strukturen in direkte Konkurrenz treten läßt. In Zeiten immer stärker werdenden ökonomischen Flexibilisierungsdruckes erweist sich dies als äußerst kontraproduktiv, im Hinblick auf eine angestrebte Standardisierung. Die offene Konkurrenz verschiedener Dialekte innerhalb einer Domäne verzögert damit oft die Entscheidung zum Einsatz eines Sprachformates.
Einen anderen interessanten Anwendungsfall stellt der ausdrückliche Wunsch nach der Einbettung fremder Sprachelemente dar. Diese Form der Wiederverwendung knüpft an das durch öffentlich verfügbare XML-Formate eröffnete Anwendungsfeld an. Da nicht in jedem Fall ein alle Anforderungen erfüllendes existierendes XML-Format ermittelt werden kann, jedoch verschiedene vorhandene Formatteile des gewünschten Umfanges abdecken, entsteht der Wunsch nach einer selektiven Weiterverwendung. Ein bekanntes Beispiel bilden Freitexte in beliebigen XML-Sprachen, welche auf Teile des (X)HTML-Sprachumfanges zurückgreifen. Gleichzeitig ist damit die Semantik der Elemente durch den zugehörigen W3C-Standard festgelegt. XHTML selbst stellt ein interessantes Anwendungsbeispiel für die gemeinsame Verwendung verschiedener XML-Sprachen in einem Dokument dar. So können Web-Seiten neben den bekannten Textstrukturen (XHTML) auch mathematische Symbole und Formeln (in der XML-Sprache MathML) und Vektorgraphiken (in der XML-Sprache SVG) enthalten.
Als Nebeneffekt der Wiederverwendung existierender XML-Sprachen verringern sich mögliche Fehlerquellen, was in der Konsequenz zur Erhöhung der Qualität der entstehenden Sprachen führt.
Zusammenfassend lassen sich die (Hinter-)Gründe der Namensraumeinführung wie folgt darstellen:
Definition 6: Namensräume | |
XML-Namensräume stellen eine XML-basierte Syntax zur Verfügung um Element- und Attributnamen eines
Vokabulars eindeutig zu identifizieren und so Bedeutungsüberschneidungen durch gleichbenannte Elemente- oder
Attribute in zu unterscheidenden Vokabularen auszuschließen.
XML-Namensräume bilden damit die notwendige Voraussetzung zur freien dezentralen Entwicklung eigener Vokabulare
ohne die Möglichkeit einer späteren Syndikatisierung zu verlieren.
|
![]()
Konzept der Namensräume:
Die Recommendation Namespaces in XML definiert die Syntax und Semantik der Namensräume. Ihr Konzept wurde rund ein Jahr nach Verabschiedung der ersten XML-Version eingeführt. Daher wurde der Kompatibilität mit bereits existierenden XML-Dokumenten große Priorität eingeräumt.
Grundidee der Namensräume ist es, die Element- und Attributnamen dergestalt zu erweitern, daß (auch nach Vereinigung beliebiger Dokumente wieder) eineindeutige Bezeichner entstehen. Dies könnte durch anwenderdefinierte Erweiterungen geschehen, sie trügen jedoch wiederum die Gefahr in sich, daß sie unbeabsichtigt mehrfach benutzt würden.
Daher scheidet der unkoordinierte Einsatz solcher Namenserweiterungen aus. Jegliche Koordination bedingt jedoch inhärent eine zentrale Vergabestelle zur Registrierung der vergebenen Namen, die über die Eindeutigkeit wacht und Mehrfachnutzungen unterbindet.
Die Einführung einer solchen Stelle hätte jedoch einen unüberschaubaren Verwaltungsaufwand bedeutet, den das W3C nicht zu leisten im Stande wäre. Man nehme nur als Vergleich das Vergabeverfahren von Einträgen des Internet Domain Name Systems (DNS), welches bereits dezentral durch die einzelnen nationalen Domain-Registrars gehandhabt wird. Der dort anzutreffende Aufwand hätte sich für XML-Namensräume potenziert, legt man pro Domainadresse mehrere Namensräume zugrunde.
Ziel des W3C war es, durch die Namensräume einen gleichermaßen mächtigen als auch leicht zu handhabenden und zu administrierenden Identifikationsmechanismus zu etablieren. Offenkundig wird diesem Anspruch nur ein (überwiegend) dezentraler, aber dennoch die Eineindeutigkeit garantierender, Ansatz gerecht.
Diesen Anforderungen genügt das aus IETF RFC 2396 bekannte Namensschema der Uniform Resource Identification (URI) (später aktualisiert in IETF RFC 2732). Es kombiniert zentrale und dezentrale Elemente in der Handhabung, und ermöglicht so -- trotz Existenz und Pflege einer zentralen Registratur -- größtmögliche Flexibilität in der Anwendung. Der bekannteste Einsatz von URI-Namen ist der im World-Wide-Web allgegenwärtige Uniform Ressource Locator (URL) (IETF RFC 1738); einer Untermenge der URI.
Die zentrale Komponente findet sich im Domainnamen verwirklicht. Er ist entweder durch die IP-Adresse (konkret: IPv4-Adresse; im Falle des RFC 2732: der IPv6-Adresse) oder deren literaler Repräsentation gegeben. Unterhalb der Domainebene kann durch deren Verwalter eine beliebige Strukturierung vorgenommen werden. Die verschiedenen Ebenen werden dabei durch ISO-10646/ASCII #x2F „/“ voneinander abgetrennt.
Wie auch bereits bei URLs notwendig, ist das Schema (URI scheme) (z.B. http) zwingend mitanzugeben.
Trotz der Möglichkeit XML-Namensräume durch URLs zu identifizieren handelt es sich dabei nicht die Bezeichnung einer Internetquelle. Die verwendete Zeichenkette dient ausschließlich Benennung der im Namensraum versammelten XML Element Information Items und Attribute Information Items.
Die Auflösung des Namensraumbezeichners durch einen XML-Prozessor ist nicht vorgesehen.
Nachfolgend ist die in definierte Syntax einer URI wiedergegeben. Sie wurde behutsam an die in der XML-Spezifikation verwendete BNF-Notation (In XML-Spezifikation nachschlagen) angepaßt, ohne jedoch die Produktionen in ihrer Struktur zu verändern.
[URI1] URI-reference ::= (absoluteURI | relativeURI)? ("#" fragment)? [URI2] absoluteURI ::= scheme ":" ( hier_part | opaque_part ) [URI3] relativeURI ::= ( net_path | abs_path | rel_path ) [ "?" query ] [URI4] hier_part ::= ( net_path | abs_path ) ("?" query)? [URI5] opaque_part ::= uric_no_slash uric? [URI6] uric_no_slash ::= unreserved | escaped | ";" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," [URI7] net_path ::= "//" authority abs_path? [URI8] abs_path ::= "/" path_segments [URI9] rel_path ::= rel_segment abs_path? [URI10] rel_segment ::= (unreserved | escaped | ";" | "@" | "&" | "=" | "+" | "$" | "," )+ [URI11] scheme ::= alpha (alpha | digit | "+" | "-" | "." )* [URI12] authority ::= server | reg_name [URI13] reg_name ::= ( unreserved | escaped | "$" | "," | ";" | ":" | "@" | "&" | "=" | "+" )+ [URI14] server ::= ((userinfo "@")? hostport)? [URI15] userinfo ::= ( unreserved | escaped | ";" | ":" | "&" | "=" | "+" | "$" | "," )* [URI16] hostport ::= host (":" port)? [URI17] host ::= hostname | IPv4address [URI18] hostname ::= ( domainlabel "." )* toplabel (".")? [URI19] domainlabel ::= alphanum | alphanum *( alphanum | "-" ) alphanum [URI20] toplabel ::= alpha | alpha (alphanum | "-" )* alphanum [URI21] IPv4address ::= digit+ "." digit+ "." digit+ "." digit+ [URI22] port ::= digit* [URI23] path ::= (abs_path | opaque_part)? [URI24] path_segments ::= segment ("/" segment)* [URI25] segment ::= pchar* (";" param)* [URI26] param ::= pchar* [URI27] pchar ::= unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | "," [URI28] query ::= uric* [URI29] fragment ::= uric* [URI30] uric ::= reserved | unreserved | escaped [URI31] reserved ::= ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," [URI32] unreserved ::= alphanum | mark [URI33] escaped ::= "%" hex hex [URI34] hex ::= digit | "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" [URI35] digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" [URI36] uric_no_slash ::= unreserved | escaped | ";" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Die Produktionen alphanum, lowalpha sowie upalpha zur Konstruktion der alphanumerischen Namen
wurden aus Übersichtlichkeitsgründen weggelassen.
Neben einigen anderen gängigen URI-Varianten stellt das nachfolgende Beispiel einige der möglichen syntaktisch korrekten URIs zusammen, die für die späteren Betrachtungen von Interesse sind.
Beispiel 13: Gültige URIs | |
|
![]()
Vielfach wird in der Praxis die Abgrenzung der im Internet gebräuchlichen Adressierungs- und Identifikationsmechanismen nicht trennscharf vollzogen.
Darüberhinaus trat im Laufe der Entwicklung eine merkliche Bedeutungsverschiebung insbesondere zwischen der Uniform Resource Identifikation und den als WWW-Adressen genutzten Uniform Resource Locators ein.
Gegenwärtig wird die Begriffsabgrenzung wie in Abbildung 12 schematisch dargestellt vollzogen:
http://www.jeckle.de/vorlesung/xml/script.htmlhttp://www.wi.fh-furtwangen.de/mailto:mario@jeckle.deftp://example.org/aDirectory/aFilenews:comp.infosystems.wwwtel:+1-816-555-1212ldap://ldap.example.org/c=GB?objectClass?oneurn:oasis:SAML:1.0urn eine Zeichenkette welche eine Weiterklassifikation der Ressource gestattet. Hierdurch wird eine weitere Partitionierung des URN-Raumes erzielt. Diese namespace ID genannten Zeichenketten unterliegen einem globalen Registrierungszwang um ihre Eindeutigkeit zu gewährleisten. Diese Unterstrukturierungen sind in der Abbildung als ns1 bis ns3 benannt.urn:oasis:names:specification:docbook:dtd:xml:4.1.2urn:oid:1.3.6.1.2.1.27![]()
![]()
Verwendung von Namensräumen:
Am naheliegendsten wäre nach der Zielsetzung der Verwendung von URIs zur eindeutigen Benennung von XML-Element- und Attributnamen, die URI direkt vor dem XML-Bezeichner zu plazieren, evtl. separiert durch ein Trennsymbol wie den Doppelpunkt „:“.
Hieraus entstünden dann, auf jeden Fall eindeutige, Element- und Attributnamen wie beispielsweise für das erste Beispieldokument dieses Kapitels (die URI http://www.example.com/sales werde zur Identifizierung verwendet):
(1)<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
(2) <http://www.example.com/sales:Rechnung>
(3) <http://www.example.com/sales:Kunde>
(4) <http://www.example.com/sales:KundenNr>4711</http://www.example.com/sales:KundenNr>
(5) <http://www.example.com/sales:Name>Max Mustermann</http://www.example.com/sales:Name>
(6) <http://www.example.com/sales:Anschrift>
(7) <http://www.example.com/sales:Straße>Musterplatz 1</http://www.example.com/sales:Straße>
(8) <http://www.example.com/sales:PLZ>12345</http://www.example.com/sales:PLZ>
(9) <http://www.example.com/sales:Ort>Musterstadt</http://www.example.com/sales:Ort>
(10) </http://www.example.com/sales:Anschrift>
(11) </http://www.example.com/sales:Kunde>
(12) <http://www.example.com/sales:Rechnungsposten>
(13) ...
(14) </http://www.example.com/sales:Rechnungsposten>
(15)</http://www.example.com/sales:Rechnung>
Bei entsprechender Nachbearbeitung des zweiten Beispieldokumentes mit einem anderen URI-identifizierten Namensraum, entstehen eindeutige Element- und Attributnamen, die nicht mehr kollidieren.
Jedoch verstößt diese Lösung gegen die in Produktion 5 der XML-Spezifikation formulierte syntaktische Einschränkung. Sie erlaubt das in URIs elementare Pfadtrennersymbol („/“) (aus den URI-Produktionen 8, 24 und 31) nicht in XML-Namen (#x2F findet sich nicht in den in Produktion 85 aufgeführten Unicode-Blöcken).
Die Integration der Namensräume auf diesem Weg hätte daher eine Modifikation der XML-Spezifikation nach sich gezogen. Diese erweiternde Aufweichung der zugelassenen Namen für Elemente und Attribute hätte jedoch mit der Kompatibilität zu SGML gebrochen, und somit eine der Grundforderungen der XML-Entwicklung verletzt.
Darüberhinaus ist die Spezifikation vollständiger URIs für Menschen „unhandlich“ und reduziert die Lesbarkeit der entstehenden XML-Dokumente.
Als Ausweg und pragmatischer Kompromiß zwischen eineindeutigen Namenspräfixen und Lesbarkeit wurde daher ein zweistufiges Verfahren eingeführt. Es erlaubt die Zuordnung von URIs zu Präfixen. Dieser Vorgang wird als „Bindung“ bezeichnet.
Diese Präfixes können Attributen oder Elementen vorangestellt werden, um sie in bestimmte Namensräume zu übernehmen.
Für die Präfixe gelten dieselben Bildungsgesetze wie für die Element- und Attributnamen. Im Einzelnen legt die Namespace Recommendation fest: (im XML-Namespace-Dokument nachschlagen)
[NS7] Präfix ::= NCName [NS4] NCName ::= (Letter | '_') (NCNameChar)* [NS5] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender
Anmerkung: Die rechten Seiten der Produktionen beziehen sich entweder auf die dargestellten Definitionen des Namespace-Standards oder auf Syntaxregeln der XML-Recommendation.
Die Bindung einer URI an ein -- gemäß Produktion NS7 frei wählbares -- Präfix geschieht durch das reservierte Attribut xmlns.
Die Syntax hierfür wird mit
[NS2] PräfixedAttName ::= 'xmlns:' NCName
angegeben.
Nach der Bindung der URI an das Präfix kann dieses jedem Element oder Attribut vorangestellt werden, um es in den Namensraum zu übernehmen.
Hierdurch verändert sich die Produktion Name aus der XML-Spezifikation zum qualifizierten Namen, der durch die Voranstellung des Präfixes entsteht. Der rechts vom trennenden Doppelpunkt folgende Elementname stellt den lokalen Namen (innerhalb des Namensraumes dar). Dieser lokale Name darf keinen Doppelpunkt mehr enthalten; insofern schränkt Produktion NS8 in Verbindung mit NS4 die Festlegung der Produktion 5 der XML-Spezifikation ein.
[NS6] QName ::= (Präfix ':')? LocalPart [NS8] LocalPart ::= NCName
Während der Verarbeitung eines XML-Dokuments, das Namensräume nutzt, ersetzt ein XML-Prozessor jedes Auftreten eines deklarierten Präfixes transparent durch die gebundene URI.
Prozessoren, welche die Namensraum-Spezifikation unterstützen, werden als namespace aware bezeichnet. Alle anderen Prozessoren treffen die durch NS6 eingeführte Unterscheidung zwischen Präfix und LocalPart eines qualifizierten Namens nicht und betrachten die Kombination aus Präfix und Element- bzw. Attributnamen als Bezeichner. Die Präfix-URI-Bindung durch das xmlns:...-Attribut wird hierbei als gewöhnliches XML-Attribut betrachtet und führt daher zu keinen Validierungsfehlern. (Die Einschränkung der Produktion 5, ein Name dürfe nicht mit der Zeichenfolge (('X'|'x') ('M'|'m') ('L'|'l')) beginnen, stellt in der XML-Spezifikation lediglich einen Hinweis dar.)
Semantisch bildet die durch xmlns eingeleitete Deklaration ein Pseudoattribut, da es für die maschinelle Verarbeitung vorbehalten und mit festelegter Bedeutung ausgestattet ist, welche durch den XML-Dokumentautor nicht verändert werden kann.
Zusätzlich werden Namensraumdeklarationen durch Programmiersprachenschnittstellen nicht den gewöhnlichen Attributen gleichgestellt betrachtet, sondern nehmen, wie auch im Information Set, dort eine Sonderstellung ein.
Anmerkung: Auf Webseiten und in Mailinglisten finden sich manchmal Formulierungen der Struktur {namespaceName}elementName (z.B. {http://www.w3.org/2001/XMLSchema}element oder {http://www.w3.org/1999/XSL/Transform}template).
Hierbei handelt es sich um eine zwar geläufige, aber nicht spezifikationskonforme Schreibweise!
Sie dient lediglich dazu, das prinzipiell beliebig wählbare Präfix einzusparen und den gewählten Namensraum hervorzuheben.
Strukturen dieses Stils sind jedoch keine gültigen XML-Dokumente!
Angewendet auf das betrachtete Beispiel läßt sich die URI http://www.example.com/sales an das Präfix myNS1 binden. Diese Bindung steht im definierenden Element (local name: rechnung) und allen untergeordneten zur Verfügung.
Beispiel 14: Dokument mit W3C-konformen Namensräumen | |
Download des Beispiels |
![]()
Hinweis: Für das Attribut xmlns kann keine Namensraumdeklaration angegeben werden; es ist spezifikationsgemäß an keinen Namensraum gebunden.
Die Deklaration des Namensraumes mit der Präfixbindung kann auf beliebige hierarchisch höhergeordnete Elemente ausgelagert werden. In der Praxis hat es sich aus Übersichtlichkeitsgründen durchgesetzt, alle in einem XML-Dokument benutzten Namensräume mit ihren Präfixen zu Beginn des Dokuments im Wurzelelement zu definieren.
Das nachfolgende Beispiel zeigt dies anhand eines XHTML-Dokuments, das neben Elementen der Hypertextsprache auch mathematische Formeln und Vektorgraphiken enthält.
Beispiel 15: Ein XHTML-Dokument mit MathML- und SVG-Inhalten | |
Download des Beispiels |
![]()
Definition 7: Namensraumidentifikation | |
Jeder XML-Namensraum wird durch eine gültige URI identifziert. Diese URI dient ausschließlich
der Benennung, daher muß sie nicht auf eine gültige Ressource verweisen.
|
![]()
Überschreiben des Vorgabe-Namensraums:
Aus den Beispielen ist leicht ersichtlich, daß die explizite Angabe des definierten Präfixes für jedes Element eines Namensraumes platzraubend und für die Zuordnung aller Elemente eines Teilbaumes zum selben Namensraum redundant und -- wegen des zusätzlichen Spezifikationsaufwandes -- unpraktikabel ist. Die mehrmalige explizite redundante (identische) Angabe des identifizierenden Präfixes bildet zusätzlich noch eine potentielle Fehlerquelle hinsichtlich Übertragungsfehlern und reiner Tippfehler bei manuell erstellten XML-Dokumenten.
Eine einfache Kompaktifizierungsvariante greift auf die aus den Programmiersprachen geläufigen Regeln für Namensräume zurück. Dort beinhaltet ein explizit geöffneter Block alle enthaltenen Elemente bis zum Blockendesymbol und faßt sie so zu einem Gültigkeitsbereich zusammen.
Dieses Prinzip läßt sich leicht auch auf XML-Dokumente, die immer eine streng hierarchische Baumstruktur aufweisen, anwenden.
Hierzu wird das xmlns-Attribut leicht modifiziert eingesetzt. Wird es ohne nachfolgendes Präfix und unter Weglassung des separierenden Doppelpunktes verwendet, so definiert es einen Vorgabenamensraum (default namespace). Dieser umfaßt neben dem Element, welches das Attribut beinhaltet, auch alle Kindelemente. Eine Ausnahme hiervon bilden untergeordnete Elemente, die explizit durch Präfix oder Redefinition des Vorgabenamensraumes einem anderen Namespace zugeordnet werden.
Das nachfolgende Beispiel zeigt dies für das bereits mit Namenräumen versehene Rechnungsdokument
Die syntaktische Definitionsform der Namensraumüberschreibung als XML-(Pseudo-)Attribut stellt hierbei sicher, daß für ein Element keine mehrmalige Überschreibung des Vorgabenamensraumes vorgenommen werden kann, da in diesem Falle das Attribut xmlns mehrfach im selben Elementkontext auftreten müßte, was der XML-Basisspezifikation widerspräche.
Beispiel 16: Rechnungsdokument mit überschriebenem Vorgabenamensraum | |
Download des Beispiels |
![]()
Durch die Definition des Vorgabenamensraumes für das Element rechnung und all dessen Kindelemente wird derselbe Effekt erreicht wie durch die Präfixangabe im vorangegangenen Beispiel.
Diese Schreibweise stellt lediglich eine Abkürzung der expliziten Qualifizierung jedes einzelnen XML-Namens dar. Insbesondere führt die mehrmalige Redefinition des Vorgabenamensraumes nicht zu kaskadierten Namensräumen. Jeder Namensraum ist von allen umgebenden unabhängig definiert.
So kann das Dokument des XHTML-Beispiels auch dahingehend verändert werden, daß die Namensräume erst an der Stelle im Dokument deklariert werden, an der sie auch benötigt werden.
Beispiel 17: Ein XHTML-Dokument mit MathML- und SVG-Inhalten, unter Verwendung überschriebener Vorgabenamensräume | |
Download des Beispiels |
![]()
Die Namensraumpräfixe können durch den Anwender frei vergeben werden. Sie dienen lediglich der abkürzenden Schreibweise und sind für die Namensraumauflösung unerheblich.
Daher werden zwei Elemente oder Attribute als gleich betrachtet, wenn sie lexikalisch in Namen und Namensraumidentifier übereinstimmen. Hierbei ist es unerheblich, ob der Namensraum explizit durch Präfixangabe oder durch Überschreiben des Vorgabenamensraumes definiert wurde.
Die Elemente der XML-Dokumente aus den Beispielen 18 und 19 befinden sich alle ausnahmslos im Namensraum http://www.example.com.
Beispiel 18: Namensraumpräfixe 1 | |
Download des Beispiels |
![]()
Beispiel 19: Namensraumpräfixe 2 | |
Download des Beispiels |
![]()
Die Abbildung zeigt das Beispieldokument in der Darstellung des W3C-Browsers Amaya.
Im Beispieldokument wird der Vorgabenamensraum dreimal, entsprechend der verschiedenen verwendeten XML-Sprachen, neu gesetzt. So wird auf html und alle direkt untergeordneten Elemente der URI-identifizierte Namensraum http://www.w3.org/1999/xhtml angewendet. head, title und body sowie dessen Kindelemente finden sich demnach, da sie keinen eigenen Namensraum definieren, ebenfalls im so definierten Vorgabenamensraum.mrow als hierarchisch tieferstehendes Element redefiniert den Namensraum zu http://www.w3.org/TR/REC-MathML. Daher werden das Element mrow sowie all dessen Kindelemente (im Beispiel: ellipse) auch diesem zugeordnet.
Die Attribute width, height, cx , ... verfügen über kein explizites Namensraumpräfix und sind daher dem leeren Namensraum zugeordnet.
Auf den MathML-Namensraum folgend wird der Vorgabenamensraum zu http://www.w3.org/2000/svg redefiniert. Auch hier gelten dieselben Regeln, d.h. der überschriebene Vorgabenamensraum erstreckt sich auf alle Kindelemente.
Mit dem schließenden Tag svg endet auch dessen Namensraum. Alle folgenden Elemente befinden sich wieder im umgebenden Namensraum, der zu Beginn des Dokuments mit http://www.w3.org/1999/xhtml festgelegt wurde.
Die nachfolgende Graphik stellt die Namensräume nochmals farblich hervorgehoben dar.
Ein weiteres Beispiel findet sich in der Namespace-Recommendation.
Der XML-Namensraumstandard des W3C sieht die beiden im Vorhergehenden diskutierten Varianten exklusiv zueinander vor. D.h. für ein Element, welchem bereits durch Präfixangabe eine Namensraumzuordnung gegeben wurde, kann nicht zusätzlich der Vorgabenamensraum überschrieben werden. Deklarationen der Form <xyz:abc xmlns="..." ...> sind widersprüchlich; und daher illegal. (in der XML-Namespace Recommendation nachschlagen)
Das abschließende Beispiel 20 zeigt die Verwendung zweier Vokabulare (SVG und MathML), die beide ein mit set benanntes Element definieren.
Durch die Deklaration der jeweiligen Namensräume unterscheiden sich die qualifizierten Namen, die dem (gleichnamigen) Elementnamen die Namensraum-URI voranstellen.
Beispiel 20: Namensräume im realen Einsatz | |
Download des Beispiels |
![]()
Präzedenz des explizit zugeordneten Namensraumes:
Eine explizit durch Präfixzuordnung vorgenommene Namensraumfestlegung besitzt Präzedenz gegenüber dem evtl. überschriebenen Vorgabenamensraum.
Findet daher für ein Element sowohl die Überschreibung des Vorgabenamensraumes, als auch gleichzeitig die Namensraumfestlegung durch explizite Präfixzuordnung statt, so wird das Element demjenigen Namensraum zugeordnet, der durch die URI identifiziert wird, an den das Präfix gebunden ist.
Dies gilt insbesondere auch dann, wenn ein und dasselbe Element sowohl über ein Präfix, als auch eine Überschreibung des Vorgabenamensraumes verfügen.
Das XML-Dokument aus 21 illustriert dies beispielhaft. So wird ElementA -- durch Überschreibung des Vorgabenamensraumes -- dem Namensraum urn:namspaces:Namespace1 zugeordnet und diese Festlegung auch an das Kindelement ElementB weitergegeben.
Das Kindelement ElementC hingegen überschreibt die Vorgabe des Elternelements durch explizite Präfixangabe und ist daher dem durch urn:namespace:Namespace2 identifizierten Namensraum zugeordnet.
Für ElementD findet sich sowohl eine Namensraumdefinition, welche durch Überschreiben des Vorgabenamensraumes zu urn:namespace:Namespace3 stattfindet, als auch eine Präfix-gebundene Definition an den Namensraum urn:namespace:Namespace2. Gemäß der Präzedenz der expliziten Festlegung durch Präfix wird ElementD jedoch ausschließlich dem Namensraum zugeordnet, an den das angegebene Präfix ns1 gebunden ist. Im Beispiel ist dies die URI urn:namespace:Namespace2.
Beispiel 21: Präzedenzregel | |
Download des Beispiels |
![]()
Aufheben der Namensraumzuweisung:
Durch Überschreibung des Vorgabenamensraumes mit der Zeichenkette leeren Inhalts -- formal der Zuweisung der leeren URI als Namensraumidentifikator -- kann eine bestehende Namensraumdefinition aufgehoben werden. Als Resultat entsteht eine Situation identisch zu einem Dokument ohne festgelegte Namensräume, d.h. die Elemente finden sich im leeren Namensraum.
Beispiel 22: Aufheben von Namensraumdeklarationen | |
|
![]()
Das Beispiel 22
zeigt die notwendigen Deklarationen zur Aufhebung der
Vorgabenamensraumdefinition.
So wird zwar für das Element
table und alle seine Kindelemente der
Vorgabenamensraum auf http://www.w3.org/TR/REC-html40
gesetzt, dies jedoch für die Kindelemente Vorname,
Nachname, Straße, PLZ und
Ort durch die Festlegung xmlns=""
explizit für das jeweilige Element aufgehoben.
Die Aufhebung von definierten Namensräumen kann ausschließlich durch die Überschreibung des Vorgabenamensraum erfolgen. Eine Bindung der leeren URI an ein Präfix zur späteren Verwendung ist nicht zugelassen.
Namensräume für Attribute:
Abweichend von der Mimik für Elemente, dort wirkt sich ein überschriebener Vorgabenamensraum
auch immer auf die Kindelemente aus, wird eine Namensraumdeklaration auf Elementebene nicht auf
Attribute propagiert.
Diese Festlegung der Spezifikation mag insbesondere unter Kenntnis der Baumstruktur der Infosets, welche
Attribute und Elemente gleichermaßen als Kindknoten der beherbergenden Elementinformationseinheit darstellt,
verwundern. Eine mögliche Begründung dieser Asymmetrie mag in der besonderen Rolle der Attribute zur
Informationsdarstellung liegen. So wird teilweise damit argumentiert, daß Attribute üblicherweise unabhängig
vom aktuell umgebenden Element sein sollten und daher nur zur Darstellung von Daten herangezogen werden
sollten, die nicht über einen direkten Bezug zum sie umgebenden Element verfügen.
In der Konsequenz müssen Attribute immer explizit mit einem Namensraumpräfix versehen werden, um sie einem
Namensraum zuzuordnen.
Beispiel 23 zeigt die Anwendung der Namensräume auf
Attribute. So befinden sich weder das Attribute att1 des Elements ElementB, noch dasjenige
von ElementD in einem Namensraum. Das mit dem Wert XYZ versehene Attribut
att2 des Elements ElementC wird hingegen -- aufgrund des explizit angegebenen Präfixes --
dem Namensraum http://www.example.com/NS2 zugeordnet.
Ferner illustriert ElementC die Rolle der Namensräume als Bestandteil des identifzierenden
Namens von Elementen und Attributen. Aufgrund der Interpretation des Namensraumes als Benennungsbestandteil
darf das att2 benannte Attribut mehrfach auftreten, da die Zuhilfenahme des Namensraumes
die eindeutige Identifikation gestattet.
Beispiel 23: Namensräume für Attribute | |
|
![]()
Definition 8: Namensraumvererbung | |
Namensräume, die durch Überschreiben des Vorgabenamensraumes zugewiesen werden wirken sich ausschließlich auf Elemente und deren direkte oder transitive Kindelemente aus, sofern diese den Namensraum nicht wieder verändern. Namensräume, die durch explizite Präfixangabe zugewiesen werden, wirken sich ausschließlich auf dasjenige Element aus vor dessen Name das Präfix plaziert ist. Namensräume für Attribute werden ausnahmslos durch explizite Präfixangabe festgelegt und gelten ausschließlich für das Attribut selbst. |
![]()
Ausgehend von der Vererbungsregel für Namensräume, sowie der Präzedenz expliziter Präfixangaben lassen sich daher folgende Auswertungsregeln definieren:
Ein Element befindet sich in demjenigem Namensraum ...
Ein Attribut befindet sich in demjenigem Namensraum, der durch explizite Präfixangabe festelegt wurde.
Internationale URIs und Namensraumidentifikatoren:
Die Berücksichtigung von Zeichen, die in XML v1.1 zugelassenen, deren Nutzung in den klassischen URIs nach RFC 2396 bzw.
RFC 2732 jedoch
untersagt ist, führt zur Einführung des neuen Begriffes des
Internationalized Resource Identifiers (IRI). Diese
Neuschöpfung stellt im Kern eine URI-Fassung dar innerhalb der
Leerzeichen sowie diverse Sonderzeichen zulassen sind. Diese
internationalisierten Identifikatoren werden durch einen im
Spezifikationsentwurf festgelegten Algorithmus in syntaktisch
korrekte URIs umgewandelt.
Beispiel 24 zeigt gültige IRIs und jeweils dahinter in
Klammern angegeben die daraus resultierende URI-Darstellung.
Beispiel 24: | |
|
![]()
Kompatibilität zu älteren Dokumenten:
Elemente, für die weder ein expliziter Namensraum durch Präfix definiert ist, noch ein Namensraum von einem Elternelement übernommen werden kann, sind einem leeren Namensraum zugeordnet; konzeptionell entspricht dies einem NULL-Präfix.
Somit befinden sich alle Elemente, die keinem Namensraum angehören, automatisch in einem gemeinsamen Namensraum, der an keine URI gebunden ist.
Zusammenfassend gelten somit folgende Prinzipien:
Web-Referenzen 7: Weiterführende Links | |
•XML-Namespace Recommendation •Namespace Recommendation in deutscher Übersetzung •Namespace Tutorial @ Zvon.org •Tim Bray: Namespaces by Example •Hintergrundartikel: Namespaces in XML Adopted by W3C •(Tutorial) Simon St. Laurent: Namespaces in XML •Roland Bourret: XML Namespaces FAQ |
![]()
Die Dokument-Typ-Definition (DTD) stellt eine an die EBNF angelehnte reguläre Sprache zur Formulierung von XML-Grammatiken zur Verfügung.
Ursprünglich wurde diese textuelle Notation zur Spezifikation von XML-Strukturen mit SGML eingeführt. Zur Verwendung in XML wurde der Sprachumfang lediglich reduziert, und um einige -- im neuen Anwendungskontext nicht benötigte -- Konstrukte bereinigt.
Inzwischen haben die sehr stark Dokumenten-orientierten DTDs gegenüber den XML-Schemasprachen an Bedeutung verloren. Mittelfristig ist, wegen der deutlich gesteigerten Ausdrucksmächtigkeit, mit dem vollständigen Übergang zu Schemasprachen zu rechnen.
Nachfolgend sollen jedoch die Grundzüge des DTD-Mechanismus vorgestellt werden, um seiner historischen Bedeutung gerecht zu werden. Ebenso soll hierdurch ein Grundverständnis für die existierenden Sprachdefinitionen geweckt werden.
Dokumenttypdeklaration:
Prinzipiell stellt die DTD eine eigenständige, vom XML-Dokument losgelöste, Informationseinheit dar. Ihre Rolle entspricht der der Klasse in der objektorientierten Programmierung, welche schablonenartig die Struktur und die inhaltlichen Charakteristika beliebig vieler konkreter Ausprägungen festlegt. In dieser Analogie agiert das XML-Dokument wie ein Objekt einer spezifischen Klasse.
Daher ergibt sie die folgende Definition als Erweiterung der Wohlgeformtheit fast intuitiv:
Definition 9: Gültiges XML-Dokument | |
Ein XML-Dokument heißt gültig (valid), wenn es über eine Dokument-Typ-Definition verfügt, und konform zu dieser aufgebaut ist. (In XML-Spezifikation nachschlagen) |
![]()
Implizit folgt hieraus, daß die Wohlgeformtheit eine schwächere Stufe der Gültigkeit, und damit Voraussetzung hierfür, darstellt.
Entsprechend der Unterscheidung in well-formed und valid ergeben sich zwei Klassen von XML-Prozessoren: nicht-validierende und validierende. Beide Typen prüfen die Wohlgeformtheit des eingehenden Textstromes. Zusätzlich testet ein validierender Prozessor die Konformität des XML-Dokuments zu seiner DTD.
(In XML-Spezifikation nachschlagen)
Die am Markt verfügbaren XML-Editierwerkzeuge beinhalten zumeist einen validierenden Parser, der die Konformitätsprüfung zu einer gegebenen DTD erlaubt. Ferner bieten viele Hersteller, oder Open-Source-Initiativen, eigenständige Parser-Module zur Validierung von XML-Dokumenten an.
Üblicherweise liegt die DTD in Form einer separaten (Text-)Datei vor, welche durch das XML-Dokument referenziert wird. Zu diesem Zwecke kann im Prolog des XML-Dokuments durch das Schlüsselwort DOCTYPE die physische Lokation der DTD angegeben werden.
(In XML-Spezifikation nachschlagen)
Die Syntax einer DOCTYPE-Deklaration lautet
(In XML-Spezifikation nachschlagen)
:
[28] doctypedecl ::= '<!DOCTYPE' S Name (SExternalID)? S? ('[' (markupdecl | DeclSep)* ']' S?)? '>' [28a] DeclSep ::= PEReference | S [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment
Die von SGML übernommene Syntax erinnert äußerlich leicht an die im XML-Dokument verwendete, weist jedoch mehr Ähnlichkeit zum Aussehen der Kommentare in XML auf.
So wird auch die DOCTYPE-Deklaration durch eine öffnende Winkelklammer und ein Ausrufezeichen eingeleitet. Daran schließt sich -- im Falle einer externen DTD -- die SYSTEM- oder PUBLIC-Deklaration an. XML-Dokument-interne Grammatikdefinitionen werden in eckigen Klammern innerhalb der DOCTYPE-Deklaration eingefügt.
Anwendungsbeispiele finden sich im Abschnitt zum Document Type Definition Information Item des Information Sets.
Alternativ zur externen Ablage der DTD kann diese auch ganz oder teilweise in das XML-Dokument eingebettet werden. Dieser Anteil der DTD innerhalb des XML-Dokuments wird als internal subset bezeichnet. Konsequenterweise wird der extern des Dokuments abgelegte DTD-Anteil daher mit dem Begriff external subset belegt.
Beispiele zur Definition interner Subsets finden sich in den Betrachtungen der XML-Information Set Items zu Notationen und Entitäten.
Anmerkung: Existieren in einem internen und externen Subset Festlegungen zum selben (identisch benannten) Informationselement, so überschreibt die des internal Subsets die extern getroffenen Definitionen.
Wie Produktion 29 bereits andeutet, erlaubt der DTD-Mechanismus die Strukturdefinition verschiedener Elemente aus dem XML-Information Set. Die wesentlichen hierbei sind: Elemente und Attribute. Ferner können durch die DTD Entitäten, Notation und Processing Instructions definiert werden.
Web-Referenzen 8: Weiterführende Links | |
•JAXP: SUNs Standard-Parsing-API für Java •XML Instance -- Ein validierender Dokumenteditor •XML Authority -- Ein DTD-Editor •XML Spy -- Dokument- und DTD-Editor |
![]()
Definition von Elementen:
Der offensichtlichste Anteil der Struktur eines XML-Dokuments wird durch seine Elemente gebildet. Ein einzelnes Element stellt auch (siehe Definition im Information Set) den minimalsten Umfang eines gültigen XML-Dokuments dar.
(In XML-Spezifikation nachschlagen)
Die Syntax zur Definition eines Elements lautet (In XML-Spezifikation nachschlagen) :
[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'
Jedes Element wird durch die SGML-Syntax der öffnenden Winkelklammer, gefolgt von einem Ausrufezeichen, eingeleitet. Daran schließt sich der Elementname an.
In runden Klammern wird dann das Inhaltsmodell, d.h. die erlaubten Kindelemente, spezifiziert. Sind keine Kindelemente erlaubt, d.h. es handelt sich um ein leeres Element, so ist stattdessen das Schlüsselwort EMPTY anzugeben.
Eine Besonderheit bildet das durch ANY ausgedrückte Inhaltsmodell. Es erlaubt das beliebige Auftreten von Elementen aus der DTD. Ebenso ist textueller Inhalt (#PCDATA) zugelassen.
Zulässige Kindelemente sind neben allen namentlich definierten Elementen der DTD auch Freitexte (#PCDATA für parsed character data, die keine Auszeichnungssymbole enthalten dürfen). Sollen im Elementinhalt Zeichen verwendet werden, die auch als Metasprachensymbole dienen -- wie < oder & --, so müssen diese durch die vordefinierten Textersetzungsmuster ausgedrückt werden.
Über freie Texte und explizite Kindelemente hinaus bietet der DTD-Mechanismus keinerlei Unterstützung zur näheren Definition der Inhalte eines Elements an. Diese, gerade bei Daten-orientierten XML-Dokumenten schmerzhafte, Einschränkung hat mit zur Definition der XML-Schemasprachen geführt, die sich u.a. die Überwindung dieser Einschränkung zum Ziel setzen.
Die Kindelemente werden durch namentliche Aufzählung in der Reihenfolge ihres im Dokument erwarteten Auftretens benannt. Zur Gruppierung können Elemente durch Klammerung zusammengefaßt werden.
Zur Steuerung der Auftrittshäufigkeit von Elementen und Elementgruppen existieren drei Operatoren.
? deklariert ein Element oder eine Elementgruppe als optional.+ erlaubt die Wiederholung desselben Elements; mindestens ein Element muß jedoch im XML-Dokument auftreten.* erlaubt die beliebige Wiederholung desselben Elements, wobei auch das erste auftreten optional ist.Als Kombination aus explizit benannten Elementen und beliebigen Markup-freien Texten ergibt sich das gemischte Inhaltsmodell.
Aus historischen Gründen folgt dieses Inhaltsmodell immer derselben Struktur (siehe Produktion 51): Auf das Schlüsselwort #PCDATA folgen die zugelassenen Elemente in exklusiver ODER-Beziehung.
Hinter der zunächst etwas kryptisch anmutenden Formulierung verbirgt sich ein kleiner Kunstgriff, um diese zunächst widersprüchlich anmutende Dualität zwischen markupfreiem (#PCDATA) und explizit ausgezeichnetem Inhalt aufzuheben. Das für diesen Anwendungsfall in der XML-Spezifikation vorgegebene mixed content Model erlaubt eine Mischung aus frei formulierter Information und Markupinhalten. Hierzu werden #PCDATA und das gewünschte Element zunächst exklusiv zueinander deklariert (symbolisiert durch den trennenden senkrechten Strich |); im Anschluß wird - durch den Stern -- die beliebig häufig hintereinandergereihte Wiederholung dieser Auswahlentscheidung vereinbart.
(In XML-Spezifikation nachschlagen)
Definition 10: Gemischtes Inhaltsmodell | |
Kann ein Element sowohl über Zeichenketten-artigen als auch Element-wertigen Inhalt verfügen, so wird sein Inhaltsmodell
als gemisches Inhaltsmodell (mixed content model) bezeichnet. Innerhalb eines solchen Elements dürfen Unicodezeichen und die zugelassenen Elemente in wahlfreier Kombination auftreten. |
![]()
Nachfolgend wird eine einfache Projektverwaltung, zur Organisation von Mitarbeitern und ihrer Zuordnung zu Projekten, als durchgängiges Beispiel verwendet.
Beispiel 25: Einige Elementdefinitionen | |
Download des Beispiels |
![]()
Das Beispiel zeigt einige verschiedene Elementdefinitionen.
So kann ein Element des Typs ProjektVerwaltung mehrere, jedoch mindestens ein Personen-Element sowie auch mehrere Projekt-Elemente enthalten.
Innerhalb von Personen-Elementen können mehrere, wiederum jedoch mindestens ein Vornamen und genau ein Nachname auftreten. Das Auftreten des mit Qualifikationsprofil benannten Kindelements ist optional.
Über ein leeres Inhaltsmodell (Schlüsselwort EMPTY) verfügt das Element Projekt. Ihm dürfen keine Kindelemente im XML-Dokument folgen.
Die drei Elemente Ueberschrift, Vorname und Nachname erlauben jeweils das Auftreten markupfreien Textes in ihrem Elementinhalt.
Für Qualifikationsprofil ist das mixed content model verwirklicht. Es erlaubt in XML-Dokument das Auftreten des Elements Qualifikation oder Leistungsstufe an jeder beliebigen Stelle innerhalb eines (markupfreien) Freitextes.
Beispiel 26: Beispieldokument zur gegebenen DTD | |
Download des Beispiels |
![]()
Das Beispiel zeigt ein gültiges XML-Dokument zu den bisherigen Elementdefinitionen.
Es zeigt die Nutzung des mehrfachen Auftretens des Elements Vorname innerhalb der Person, sowie die Anwendung des mixed content models -- einschließlich Einsatz des Textersetzungsmusters des Und-Symbols -- für das Qualifikationsprofil.
Definition von Attributen:
Die Syntax der Attributdefinition ist wie folgt festgelegt:
[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl [54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= 'CDATA' [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' [57] EnumeratedType ::= NotationType | Enumeration [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
Auch die Syntax der Attributdefinition in der DTD ist SGML entlehnt; daher auch hier die öffnende Winkelklammer und das Ausrufezeichen als einleitendes Symbol. Darauf folgt der Name des Elements, an die die Attributliste gebunden wird. Leicht wird ersichtlich, daß Attribute nicht wie Elemente vollkommen frei definiert werden können, sondern immer im Kontext des nutzenden Elements stehen. In der Folge ist es daher unmöglich, dieselbe Attributdefinition mehreren Elementen zuzuordnen.
An den Namen des Attribut-beinhaltenden Elements schließen sich die eigentlichen Deklarationen an. Im einfachsten Fall bestehen sie lediglich aus dem eindeutigen Attributnamen, einem Datentyp (gemäß der Produktionen 55 und 56) sowie der Angabe, ob es sich um ein optionales (#IMPLIED) oder zwingend anzugebendes (#REQUIRED) Attribut handelt.
Das Angebot der zur Verfügung stehenden Datentypen spiegelt die präsentationsorientierte Vergangenheit der Vorgängersprache SGML wieder. So fehlen Programmiersprachen-orientierte Primitivtypen vollständig. Das mit CDATA -- für character data -- benannte Äquivalent zum Elementinhaltstyp #PCDATA erlaubt lediglich die Beschränkung der Attributwerte auf Zeichenketten-artige Inhalte.
In Erweiterung der IMPLIED-Angabe können Attribute als mit Vorgabewerten belegt und zusätzlich als konstant (#FIXED) deklariert werden. Ihre vorgegebenen Werte werden, auch bei fehlender Angabe im XML-Dokument, durch einen validierenden XML-Parser an die verarbeitende Applikation weitergegeben. Darüberhinaus prüft der Parser für Konstanten, ob der angegebene Attributwert mit der Vorgabe übereinstimmt.
Eine besondere Bedeutung kommt den Typen ID, IDREF und IDREFS zu. Durch sie ist ein rudimentärer Refenzierungsmechanismus, für den die Gültigkeit der Referenzen durch einen validierenden XML-Prozessor geprüft werden kann, verwirklicht. Alle Attributwerte des Typs ID bilden einen Dokument-weiten Namensraum (der jedoch außer Verwendung desselben Begriffs nicht mit den XML-Namespaces in Verbindung steht!). Auf diese Schlüssel kann durch Attribute des Typs IDREF und IDREFS verwiesen werden. IDREF realisiert hierbei eindeutige Verweise, während IDREFS die Angabe einer Liste von Verweiszielen erlaubt. Im einheitlichen Namensraum aller definierten ID-Attribute liegt eine der Hauptschwächen des angebotenen Referenzierungsmechanismus. So ist eine typisierende Einschränkung der erlaubten Referenzziele nicht vorgesehen. Da IDREF(S)-Attribute alle Werte annehmen können, die dokumentweit in ID-Attributen auftreten, kann potentiell auf jede definierte ID verwiesen werden, unabhängig davon ob dieser Verweis semantisch sinnvoll ist. Darüberhinaus können -- insbesondere in großen Dokumenten -- durch die fehlende Partitionierung des ID-Namensraumes Konflikte (und damit invalide Dokumente) durch mehrfachauftretende IDs auftreten. Auch die Teilung von Dokumenten in ID-konfliktfreie Einheiten stellt hierbei keine Lösung dar, da der Referenzierungsmechanismus nicht dokumentübergreifend angelegt ist und daher nicht auf Elemente anderer XML-Quellen zugreifen kann.
Als Lösung dieser angerissenen Problemstellungen bieten sich neben den (deutlich mächtigeren) Referenzierungsmechanismen der XML-Schemasprachen auch dokumentübergreifende Verweise -- wie u.a. in der im Kapitel 2.1 diskutierten W3C-Sprache XLink verwirklicht -- an.
Eine einfache Variante anwenderdefinierter Datentypen werden durch Aufzählungstypen angeboten. Sie werden durch Benennung der Alternativen gebildet. Syntaktisch werden diese, durch Oder-Verknüpfungen voneinander abgetrennt, in runden Klammern dem Attributnamen nachgestellt.
Das nachfolgende DTD-Beispiel erweitert die betrachteten Elementdeklarationen um Attributdefinitionen.
Beispiel 27: Vollständige Beispiel-DTD | |
Download des Beispiels |
![]()
Das Beispiel zeigt verschiedene Attributdeklarationen. Zunächst date als ein simples optionales Zeichenkettenattribut vom Typ CDATA.budget und version stellen die beiden möglichen Erweiterungen, einerseits durch Angabe eines Vorgabewertes (in Anführungszeichen dem Datentyp nachgestellt), andererseits durch zusätzliche Erklärung des Vorgabewertes als konstant (#FIXED-Angabe), dar.
Die Möglichkeit eines anwenderdefinierten Aufzählungstyps ist in Gehaltsgruppe genutzt. Die Alternative 1a ist darüberhinaus als Vorgabewert definiert.
Zwischen den einzelnen Projekten und verwalteten Personen können über die Attribute PersID bzw. ID und mitarbeitInProjekt bzw. Projektleiter und Mitarbeiter Referenzierungsbeziehungen aufgebaut werden. Auch hier zeigen sich zwei Einschränkungen der ID/IDREF-Semantik deutlich: So können für Personen und Projekte nicht Identifikationsschlüssel aus demselben Namensraum vergeben werden, da diese bei Doppelbelegung kollidieren. Bei automatisch generierten Attributwerten ist daher applikationsseitig sicherzustellen, daß jeder Wert nur höchstens einmal im Dokument auftritt. Da eine spätere Vereinigung von Dokumenten nicht auszuschließen ist, verschärft sich diese Forderung zu über Zeit und Raum eindeutigen Attributbelegungen.
Zusätzlich wird deutlich, daß innerhalb des Projekt-Elements nicht sicherzustellen ist, daß die Attribute Projektleiter und Mitarbeiter ausschließlich auf Attribute innerhalb des Personen-Elements verweisen. So wäre die Zuordnung einer innerhalb von Projekt vergebenen ID zum Attribut Projektleiter desselben Elements korrekt und würde durch einen validierenden Parser akzeptiert.
Definition von Entitäten und Notationen:
Die Document-Type-Definition bietet die Möglichkeit, eigene Textersetzungsmuster (sog. Entitäten) durch den Anwender zu definieren. Dieses Sprachmerkmal hat jedoch -- wegen verschiedenster Probleme -- keinen Eingang in den XML-Schemamechanismus gefunden. Daher sei es hier nur der Vollständigkeit halber einführend erwähnt.
Hinzuweisen ist jedoch bereits jetzt auf die daher abzusehende Problematik beim Übergang von existierenden DTDs zu gleichmächtigen Schemadefinitionen, da ein äquivalentes Sprachmittel dort nicht mehr zur Verfügung stehen wird. Daher sollte bei neu zu erstellenden XML-Grammatiken ganz auf die Definition eigener Entitäten verzichtet werden.
Die XML-Spezifikation definiert selbst fünf Entitäten: die bekannten Textersetzungsmuster der Metasprachensymbole. Daher ist die Referenzierungssyntax (einleitendes &-Symbol gefolgt vom Namen der Entität und abschließendem Semikolon) bereits geläufig.
Zur Definition einer Entität stehen die im Abschnitt Unexpanded Entity Reference Information Item vorgestellten Strukturen zur Verfügung.
Dort finden sich auch Beispiele eigener Definitionen.
Die in enger Verbindung mit den Entitäten stehenden Notationen zur Realisierung von Ersetzungsmustern, die keine XML-codierten Inhalte (z.B. Binärdaten) beinhalten, sind beispielhaft sowie in Syntax und Semantik im Abschnitt unparsed Entities vorgestellt.
Neben den Document Type Definitions ist in jüngerer Zeit ein alternativer Ansatz in den Blickpunkt des Interesses gerückt: die XML-Schemasprachen.
Sie setzen die Emanzipation der Metasprache XML von ihrer Vorgängersprache SGML fort. Bereits in engem zeitlichem Bezug zur Veröffentlichung der XML-Recommendation wurde mit XML Data ein erster Ansatz vorgestellt. In der Zwischenzeit fanden verschiedene konkurrierende Vorschläge ein breites Interesse. Übereinstimmende Zielsetzung aller verschiedenen vorgeschlagenen Schemasprachen ist die Schaffung eines Sprachdefinitionsmechanismus, der die Dokumenten-orientierten Strukturen und Inhaltsmodelle der DTD überwindet.
An die Spitze der Bemühungen setzte sich eine Arbeitsgruppe des W3C zur Definition einer XML-Schemasprache, unter Berücksichtigung der bekanntesten und verbreitetsten Vorschläge. Durch sie wurde im Mai 2001 der XML Schema-Standard des W3C veröffentlicht.
Der Begriff Schema ist der im Datenbankumfeld gebräuchlichen Terminologie entlehnt. Dort bezeichnet er Informations- oder Datenmodelle als Konstruktionsvorlage oder Dokumentation eines Datenbankdesigns. Hierzu muß ein Schema nicht unbedingt in einer graphischen Datenmodellierungssprache vorliegen, sondern kann beispielsweise auch die Tabellenstruktur einer relationalen Datenbank bezeichnen.
Zur Notwendigkeit einer Schemasprache:
Zum Zeitpunkt der Konzeption der Metasprache SGML war das Anwendungsfeld klar umrissen und im wesentlichen auf die Digitalisierung vormals papiergestützter Dokumentation festgelegt. Daraus erklärt sich auch die Mächtigkeit der Document Type Definition, der angebotenen Grammatiksprache zur Darstellung der Dokumentstrukturen.
Insbesondere war weder die Daten-orientierte Verwendung von SGML, noch die rund 30 Jahre später einsetzende Weiterentwicklung (eigentlich: Reduktion) zur eXtensible Markup Language abzusehen.
Die inzwischen eingesetzte breite Anwendung von XML-Sprachen zur Darstellung beliebiger Inhalte läßt jedoch die Beschränkungen und Unzulänglichkeiten des DTD-Mechanismus für diesen Anwendungen offenkundig werden.
Nachfolgend sind einige der durch Nutzung des DTD-Mechanismus zur Beschreibung Daten-intensiver Strukturen induzierten Einschränkungen zusammengestellt:
child elements, PCDATA, mixed content sowie das leere Inhaltsmodell EMPTY.CDATA, implizit für ID
(In XML-Spezifikation nachschlagen)
, IDREF, IDREFS
(In XML-Spezifikation nachschlagen)
, ENTITY, ENTITIES
(In XML-Spezifikation nachschlagen)
bzw. NMTOKEN und NMTOKENS
(In XML-Spezifikation nachschlagen)
durch die Beschränkung der zulässigen Inhalte auf Satzformen der Produktion 5 bzw. Produktion 7 der XML-Recommendation) angeboten.ATTLIST-Konstrukt).ID-IDREF(S)-Verknüpfungen sind ausschließlich Dokument-lokal möglich und gestatten keine Differenzierung hinsichtlich der Semantik des eindeutig identifizierten oder referenzierten Elements.Technische Ansätze:
Prinzipiell lassen sich die in der Vergangenheit vorgeschlagenen Ansätze zur Definition einer Schemasprache in vier Kategorien unterscheiden:
Die naheliegendste Option dürfte die Erweiterung des bestehenden DTD-Sprachumfanges bilden. Durch geeignete Modifikationen und Ergänzungen ließen sich alle, mit Ausnahme der letzten, identifizierten Unzulänglichkeiten beheben.
Konzeptionell lassen sich zwei Erweiterungsvarianten aufzeigen. Zunächst die Möglichkeit, die XML-DTDs um Elemente der ursprünglichen SGML-DTD zu erweitern. In der Konsequenz nähert sich XML, positiv formuliert, wieder der Ausdrucksmächtigkeit der Ursprache SGML an. Negativ formuliert, kann jedoch XML auf diesem Wege niemals Inhaltsstrukturen ausdrücken, die nicht durch SGML ausdrückbar sind, da die Mächtigkeit des SGML-DTD-Mechanismus eine natürliche Obergrenze der Erweiterbarkeit darstellt. Zusätzlich ist anzumerken, daß ein solcher Ansatz der ursprünglichen Intention der XML-Entwicklung -- ein leichter einsetzbares SGML zu schaffen -- entgegenläuft.
Eine der bekannten Ideen zur Erweiterung des DTD-Mechanismus stellt Datatypes for DTDs (DT4DTD) dar.
Alternativ zur Erweiterung hin zur SGML-Mächtigkeit ließe sich der bestehende XML-DTD-Mechanismus um neue zusätzliche Konstrukte anreichern, die nicht Bestandteil der SGML-DTD-Syntax sind. Dieser Ansatz böte den Vorteil, den Vorgängerstandard nicht berücksichtigen zu müssen und beliebige Erweiterungen in Syntax und Semantik einbringen zu können. Allerdings würde damit eine zentrale Forderung der XML-Entwicklung, die sich bereits im Abstract der XML-Recommendation findet, nicht berücksichtigt: die Untermengenbeziehung zu SGML. Durch eine Erweiterung, welche über die SGML-Mächtigkeit hinausreicht, würden legale (well formed und sogar valid) XML-Dokumente entstehen, die keine gültigen SGML-Dokumentinstanzen wären.
Die nachfolgende Graphik veranschaulicht die beiden Erweiterungsoptionen und die Argumente der geführten Diskussion.
Die im zweiten Punkt angedeutete Umsetzung ist durch eine programmiersprachliche Verarbeitung der XML-Dokumente motiviert. Aus Sicht dieser Anwendungsfacette ist ein Schemamechanismus idealerweise so ausgelegt, daß er die transparente Umsetzung in Applikationsdatenstrukturen ermöglicht. Dahinter steht der Wunsch, den impedance mismatch, mithin den zu leistenden Abbildungsaufwand zwischen XML-Konstrukten und Datenstrukturen, möglichst gering zu halten.
Beispielsweise greift der -- durch den Einsatz im e-Commerce-System der Firma CommerceOne bekannt gewordene -- Vorschlag Schema for Object-Oriented XML (SOX) zur Definition der notwendigen Semantik der angebotenen Schemaprimitiven auf die bekannte plattformunabhängige Programmiersprache Java zurück.
Die aktuelle Version der Schemasprache SOX, die zur Definition der XML-Sprache xCBL eingesetzt wird, findet sich unter xCBL.org.
Der dritte technische Ansatz weist auf eine alternative Interpretation der XML-Grammatikstruktur hin. So spiegelt ein Schema auch immer Wissen über Struktur und Inhalt eines betrachteten Problembereichs wieder.
Der bekannteste Vorschlag -- die Document Content Description (DCD) -- nutzt zur Definition der Wissensstrukturen eines XML-Dokuments das Resource Description Framework (RDF) des World Wide Web Consortiums.
Der Ansatz hat sich durch Referenzimplementierungen durchaus als tragfähig und, wegen der RDF-basiertheit, als allgemein verwendbar erwiesen. Jedoch liegt hierin auch die offensichtlichste Limitierung. RDF als Metasprache der Schemasprache legt bereits eine gewisse Strukturierung aller Schemata zugrunde, da jedes gültige DCD-Schema definitionsgemäß ein RDF-Dokument darstellt. Ebenso ist die Semantik der eingesetzten RDF-Elemente bereits durch diese Spezifikation vorgegeben. Beide Punkte zusammengenommen offenbaren eine ausgeprägte Abhängigkeit von den weiteren RDF-Aktivitäten des World Wide Web Consortiums, die bisher nicht auf die Interdependenz von Schemasprache und Wissensbeschreibungsformat ausgerichtet ist.
Positiv fällt an DCD die Verwendung von XML zur Beschreibung von XML-Sprachen auf, womit auch die letzte der erhobenen Anforderungen zu erfüllen wäre.
Die Verknüpfung von RDF mit DCD als Schemasprache birgt allerdings ein potentielles Problem hinsichtlich der Validierbarkeit der entstehenden Strukturen. Durch den Rückgriff von DCD auf RDF entsteht bei der Angabe eines Schemas für RDF ein transitiver Zirkelschluß. In der Konsequenz wird zur Validierung eines XML-Dokuments, welches einer mittels DCD-formulierten Grammatik folgt, neben dem eigentlichen DCD-Schema des Dokuments auch das DCD-Metaschema und dessen Semantik-liefernde RDF-Beschreibung benötigt.
Diese Beschränkung mildert die vierte Familie von XML-Schemasprachen ab. Sie umfaßt die meisten Vorschläge, die alle als eigenständige XML-Sprachen ausgelegt sind; daher definieren sie ein eigenständiges XML-Vokabular zur Darstellung der benötigten XML-Strukturen, sowie die zugehörige Semantik.
In der Folge sind sie für die Meta-Schemaebene selbstbeschreibend. Das bedeutet das Schema eines Schemas kann durch sich selbst validiert werden. Da dieser Validierungsschritt statisch nur einmal erfolgen muß, kann er durch Schemawerkzeuge vorweggenommen werden.
In dieser Kategorie sind die meisten der bisher vorgeschlagenen Schemadialekte einzuordnen.
Die größte Bedeutung haben kontextfreie reguläre Sprachen zur Spezifikation von XML-Sprachstrukturen erlangt.
Eine Sprache dieses Typs entwickelt auch die W3C-Arbeitsgruppe zur Definition eines XML-Schemasprachstandards. Insbesondere berücksichtigt diese Aktivität explizit die Vorgängersprachen XML Data, DCD, SOX sowie Document Definition Markup Language. Die erwähnten konkurrierenden Vorschläge unterscheiden sich semantisch lediglich in Nuancen, bieten dem Anwender jedoch teilweise (optisch) stark unterschiedliche Konstrukte zur Syntaxspezifikation an.
Einen strukturell unterschiedlichen Ansatz verfolgt die durch Rick Jelliffe vorgeschlagene Sprache Schematron. Sie interpretiert ein Schema als Sammlung von Regeln, denen ein gegebenes Dokument genügen muß, um als gültig akzeptiert zu werden. Dies erlaubt die Formulierung mächtiger konktextsensitiver Einschränkungen, die während des Validierungsvorganges geprüft werden.
Die Umsetzung dieser Schemasprache setzt auf den XML-Standards XPath und XSLT auf.
W3Cs XML-Schema:
Jenseits aller existierenden verschiedenen Sprachvorschläge kommt dem W3C-Standard der XML Schema Description Language (XSD) die größte praktische Bedeutung zu.
Tim Berners-Lee verkündete in der Eröffnungsrede der WWW-Konferenz in Hong Kong am 2. Mai 2001 die Verabschiedung als Recommendation. Gleichzeitig deutete er bereits weitere Schema-Aktivitäten des World Wide Web Consortiums an.
XML-Schema bildet zusammen mit XML v1.0 2nd edition und den Namensräumen die Basis aller weiteren W3C-XML-Sprachstandards.
Aus formalen Gründen ist nicht mit dem Ersatz der DTD durch Schema zu rechnen. Jedoch werden mittelfristig neu entwickelte XML-Sprachen keine Grammatiken mehr in der Syntax der DTD entwickeln, sondern direkt Schemata definieren.
XSD bildet eine vollständig in XML-Syntax formulierte kontextfreie reguläre Grammatik zur Formulierung beliebiger XML-Strukturen ab. Hierbei handelt es sich um die bekannten Grundprimitive Element und Attribut, andere -- wie Entitäten oder Notationen -- können hingegen nicht durch Schemata ausgedrückt werden. Somit erfolgt durch XSD implizit eine Weiterentwicklung von XML, dahingehend, daß ursprünglich von SGML übernommene -- jedoch inzwischen als unpraktikabel oder potentiell fehlerträchtig angesehene -- Sprachbestandteile nicht mehr durch den Grammatikmechanismus unterstützt werden.
Gleichzeitig wurde, neben zahlreichen anderen Neuerungen, die Kommentarsyntax für Schemata neu definiert.
Inhaltlich gliedert sich der XSD-Sprachvorschlag in zwei große Teilbereiche: Part 1: Structures zur Definition von Inhaltsmodellen für Elemente, Attributstrukturen und wiederverwendbaren Strukturen und Part 2: Datatypes zur Festlegung diverser inhaltlicher Charakteristika wie Datentypen und konsistenzgarantierende Einschränkungen.
In beiden Teilen werden XML-Namensräume explizit berücksichtigt. Konzeptionell rekonstruiert XSD-Part1 zunächst die bekannte Mächtigkeit der DTD um so die evolutionäre Weiterentwicklung bestehender XML-Sprachen zu ermöglichen.
Der zweite Teil der XSD-Spezifikation definiert ein eigenständiges Typsystem, das neben der naheliegenden Verwendung im ersten Teil der Schemasprache XSD auch in anderen W3C-Arbeitsgruppen Verwendung findet. Inhaltlich baut auch Part2 auf den in der DTD definierten Typen auf und erlaubt zunächst direkt ihre Angabe in Schemata. Darauf aufbauend wird eine Fülle verschiedenster Typen angeboten, die an die verschiedenen verfügbaren Typsysteme aus den Programmiersprachen, Datenbanken und internationalen Standards angelehnt sind.
Alle durch XSD definierten Elemente, d.h. alle Primitive zur Definition eines eigenen Schemas, befinden sich im Namensraum http://www.w3.org/2001/XMLSchema, der üblicherweise an das Präfix xsd gebunden wird. Elemente und Attribute aus XML-Schema, die in Instanzdokumenten verwendet werden könne sind im Namensraum http://www.w3.org/2001/XMLSchema-instance (übliches Präfix xsi) organisiert.
Wegen des Umfanges der offiziellen Schemadokumente wird zusätzlich durch das W3C ein Part 0: Primer herausgegeben. Er stellt die beiden XSD-Teile in der Zusammenschau an Beispielen dar.
Nachfolgend werden die Bestandteile der Schemasprache XSD an einigen Beispielen eingeführt, die Struktur der Darstellung orientiert sich dabei an der bereits für die Vorstellung der DTD genutzten Gliederung. Im Verlauf wird das dort verwendete Beispiel zu einem XSD-konformen Schema weiterentwickelt.
Schemareferenz:
Jedes XML-Schema bildet als XML-Dokument eine eigenständige Speichereinheit, üblicherweise eine Datei. Mithin ist die Einbettung in das Instanzdokument, also die Bildung eines internal subset, nicht möglich.
Die Verbindung zwischen Schema und beschriebenem Dokument wird durch das in der XSD-Spezifikation vordefinierte Attribut schemaLocation bzw. noNamespaceSchemaLocation definiert. Eines dieser Attribute muß zwingend im Wurzelelement des XML-Dokuments angegeben werden.
Legt das Schema keinen Namensraum für die enthaltenen Deklarationen fest, d.h. alle darin deklarierten Elemente befinden sich im Vorgabenamensraum, so findet sich die Schemareferenz in noNamespaceSchemaLocation; andernfalls in schemaLocation.
Das nachfolgende Beispiel zeigt die Deklaration:
Beispiel 28: Definition einer Schemareferenz | |
|
![]()
Im Beispiel wird zunächst der XML-Schema-Instanzen-Namensraum an das Präfix xsi gebunden. Dies ermöglicht die Einbindung von Elementen und Attributen aus der Schemaspezifikation in das eigene Dokument.
Als erste Nutzung eines solchen Elements aus XSD wird das Attribut schemaLocation im Wurzelelement mit der URI des Schemas als Wert belegt. Die Deklaration des XSI-Namensraumes ist daher zwingend. Die angegebene URI kann zur Ermittlung des Schemas für Validierungszwecke durch einen XML-Prozessor genutzt werden.
Durch die Einführung von XSD als weiterer Grammatiksprache verliert der Begriff der Gültigkeit an Qualität. So sind Dokumente denkbar, die zwar hinsichtlich einer gegebenen DTD als valid eingestuft werden, jedoch ein zugehöriges Schema verletzen.
Daher findet sich in der XSD-Spezifikation der Begriff der schema validness in Erweiterung der bisherigen (DTD-bezogenen) validness.
Definition 11: Gültigkeit hinsichtlich eines Schemas | |
Ein XML-Dokument heißt gültig hinsichtlich eines Schemas (schema valid), wenn es über ein Schema verfügt, und konform zu diesem aufgebaut ist. |
![]()
Der hier gegebene Gültigkeitsbegriff stützt sich explizit nicht auf der bisherigen validness ab, da er die Konformität hinsichtlich einer eventuell existierenden DTD außer Acht läßt.
So etabliert XML-Schema einen vom DTD-gebundenen Gültigkeitsbegriff losgelösten Validierungsmechanismus.
Aufgrund der Realisierung der Schemasprache als XML-Sprache ist jedes Schema auch ein XML-Dokument. Daher eröffnet sich die Möglichkeit, das Schema selbst durch ein Schema zu beschreiben. Dieses Schema für Schema -- auch Metaschema genannte -- XML-Dokument erlaubt die Validierung (im Sinne der schema validness) jedes Schemas. Damit erfüllt sich eine der Anforderungen an den Schemamechanismus: die Validierbarkeit der erstellten Schemata selbst, was für DTDs nicht gegeben war. In der praktischen Anwendung zeigt sich dies in der Möglichkeit, erstellte Schemata mit denselben Werkzeugen zu analysieren, verarbeiten und zu prüfen, die auch für Instanzdokumente verwendet werden.
Da das Metaschema selbst wiederum ein XML-Dokument ist, folgt, daß hierfür auch ein Schema angegeben werden kann. Die XML-Standardisierung hat hier -- nicht zuletzt um eine unendliche Reihung zur Validierung notwendiger Schemata zu vermeiden -- den Ansatz gewählt, das Schema für Schema durch sich selbst zu beschreiben.
Um den schrittweisen Übergang zu XSD zu befördern, hat die XSD-Arbeitsgruppe eine DTD für XSD herausgegeben. Mittels dieser können neu erstellte Schemata auch mit „klassischen“ Werkzeugen auf (DTD-)Gültigkeitkeit geprüft werden.
Die Abbildung stellt die getroffenen Aussagen und Validierungsbeziehungen nochmals graphisch zusammen.
Die Schema-Definition:
Wuzelknoten jedes XSD-Dokuments ist das Element Information Item schema. Alle Definitionen eines Schemas sind direkte Kindknoten dieses Elements oder dessen Kindknoten.
Durch die Attribute des schema-Elements werden verschiedene Eigenschaften festgelegt, die für alle im Schema definierten Elemente und Attribute gelten.
Zunächst wird durch eine Reihe von Attributen das Verhalten des Schemas in Bezug auf Namensräume festgelegt. Als Besonderheit eines XML-Schemas fällt hier die ständige Berücksichtung von mindestens zwei Namensräumen ins Auge. Während ein Schema mit Elementen des Schemanamensraumes aufgebaut wird, trifft es zeitgleich Aussagen über einen zweiten Namensraum -- den Namensraum des Vokabulars für das das Schema erstellt wird. Dieser Namensraum wird Zielnamensraum (target namespace) genannt.
Daher findet sich im Attribut
targetNamespace die URI des Zielnamensraumes. In
diesen Namensraum werden automatisch alle durch das Schema
deklarierten Elemente und Attribute übernommen. Als Konsequenz
müssen diese in jedem Schema-gültigen XML-Dokument im
entsprechenden Namensraum auftreten. Hierbei wird nicht zwischen
expliziter Namensraumdeklaration durch ein gebundenes Präfix und
impliziter Deklaration durch Überschreiben des Vorgabenamensraumes
unterschieden.
Durch Angabe der Attribute
elementFormDefault und
attributeFormDefault kann der durch
targetNamespace implizierte Namensraumzwang für das
XML-Instanzdokument gelockert werden. Wird der Wert der beiden
Attribute auf unqualified gesetzt, so können die
Attribute auch außerhalb des Zielnamensraumes auftreten. Dies
entspricht auch dem Vorgabeverhalten.
Definition von Elementen:
Als Obermenge der Ausdrucksmächtigkeit der DTD unterstützt auch XSD die Inhaltsmodelle
Generell wird jedes Element durch das XSD-Element element ausgedrückt.
Für unstrukturierten Inhalt bot die DTD lediglich Zeichenketten-artige Inhalte des Typs #PCDATA
.
XML-Schema Part 2 definiert insgesamt 44 Primitivtypen. Darunter finden sich die aus der DTD bekannten Element- und Attributtypen, sowie eine Fülle Neuer.
Im Kern zerfallen die XSD-Typen in drei Typklassen:
string besteht zwar aus einzelnen Zeichen) bzw. falls erkennbar, dem nicht explizit unterstützten Zugriff auf die Komponenten (date bietet keine Zugriffsmöglichkeit auf die Komponenten Tag, Monat und Jahr), verweisen.Durch Erweiterungs- und Aggregationsmechanismen ergibt sich das in der nachfolgenden Abbildung dargestellte Typsystem.
Die Tabelle stellt die angebotenen Typen mit einigen Beispielen dar:
Tabelle 5: Typen in XSD-Schema Part 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
![]()
Die einfachste Form zur Definition eines Elements mit unstrukturiertem typisierten Inhalt lautet:
<xsd:element
name="elementName"
type="typeName"/> In dieser Darstellung entspricht die Definition -- von der Typisierung abgesehen -- der Mächtigkeit der ELEMENT-Deklaration einer DTD mit PCDATA-artigem Inhalt.
XSD definiert ferner folgende Charakteristika für Elemente, die durch Attribute der Elementdeklaration ausgedrückt werden:
true gesetzt, darf ein solches Element nicht in einem XML-Dokument auftreten. Es kann ausschließlich zur Strukturierung des Schemaentwurfs eingesetzt werden und als Basis von Spezialisierungen dienen.falseextension, restriction und substitution oder der Einzelwert #all.restriction gesetzt, so dürfen keine (einschränkend) abgeleiteten Typen Ausprägungen des Originaltyps in Instanzdokumenten ersetzen. Dasselbe gilt für extension oder als Substitutionsgruppen deklarierte Typen (substitution-Belegung).#all versammelt alle möglichen Varianten und verbietet generell die Ersetzung eines Elements durch andere.block identisch, nur daß durch dieses Attribut die Vererbungsmechanismen bereits auf Schemaebene verboten werden, während block ihre Nutzung im Instanzdokument einschränkt.qualified (Namensraumpräfix muß angegeben werden) und unqualified.1 belegt.unbounded zur Kennzeichnung beliebig vieler Auftreten.1 belegt.true oder false, was auch als Vorgabe bei Fehlen dieses Attributs angenommen wird.Nachfolgend sind einige Elementdeklarationen für unstrukturierten Inhalt versammelt
Beispiel 29: | |
|
![]()
Die Deklaration geburtsdatum definiert ein XML-Element des Typs date zur Darstellung eines Datums. Weitere Festlegungen sind nicht getroffen, daher wird das Element mit minOccurs und maxOccurs 1 belegt, wodurch es als zwingend anzugebend (mandatory) und skalar (d.h. nicht mengenwertig) ausgewiesen wird.pi legt die gleichnamige mathematische Konstante fest. Als Datentyp wurde double, eine Gleitkommazahl mit doppelter Genauigkeit gewählt. Als konstante Belegung wird durch das fixed Attribut der entsprechende Zahlenwert festgelegt. Daher muß eine Vorgabebelegung durch das Attribut default nicht erfolgen; gemäß Schema-Spezifikation darf sie sogar nicht erfolgen, fixed und default schließen sich gegenseitig aus. Um eine weitere Spezialisierung des Elements durch Vererbung oder Aggregation zu verhindern wird der Wert von block auf #all gesetzt, wodurch die Teilnahme an allen Typbildungsmechanismen unterbunden wird.
Die Definition für vorname nutzt als Datentyp den token, der automatisch mehrfache, führende und abschließende Leerzeichen sowie sonstige Formatierungssymbole entfernt. Ferner kann dieses Element beliebig häufig auftreten -- maxOccurs ist daher auf unbounded gesetzt. Die Fixierung der minimalen Auftrittshäufigkeit auf 1 (minOccurs) entspricht der Vorgabebelegung.
Für das Element artikelNummer ist als Typ NCName ausgewählt, was beliebigen Zeichenketten -- die keinen Doppelpunkt enthalten -- entspricht. Darüberhinaus ist das Attribut form mit dem Wert qualified versehen. Dies führt dazu, daß das Namensraumkürzel für dieses Element zwingend im Instanzdokument anzugeben ist.
Zur Umsetzung des freien Inhaltsmodells, das beliebige Inhalte aus den definierten Elementen und freien Texten zuläßt, wird ebenfalls auf das Typsystem zurückgegriffen.
Wird das type Attribut nicht belegt, so wird gemäß Vorgabe der Typ anyType angenommen. Elemente dieses Typs können beliebige wohlgeformte Inhalte beherbergen.
Die beiden nachfolgenden Angaben sind daher äquivalent.
<element
name="elementName"
type="xsd:anyType/>
<element name="elementName"/>
XSD prägt den bereits im Kontext der DTD genutzten Typbegriff strenger. Dies zeigt sich deutlich in der Existenz des XSD-Elements complexType. Es führt die Möglichkeit einer expliziten, d.h. von der Verwendung losgelösten Typbildung, ein. Syntaktisch kann die complexType-Definition sowohl innerhalb einer Elementdefinition, als auch separat erfolgen.
Den einfachsten Anwendungsfall bildet die eingebettete leere complexType-Definition zur Darstellung des leeren Inhaltsmodells.
Die Syntax hierfür lautet (der XSD-Namensraum sei an das Präfix xsd gebunden):
<xsd:element
name="elementName">
<xsd:complexType/>
</xsd:element>
Ein XML-Schema-validierender Parser verhält sich in diesem Falle identisch zu einem (DTD-)validierenden Parser für das Inhaltsmodell EMPTY. Daher werden für die obige Festlegung ausschließlich die beiden Darstellungsformen zur Angabe eines leeren Elements (<elementName/> bzw. <elementName></elementName>) akzeptiert.
Die Befüllung des complexType-Elements leitet direkt zum wichtigsten Inhaltsmodell über, dem explizit angegebener Kindelemente.
Während die DTD das sequentielle Auftreten der Kindelemente in der angegebenen Reihenfolge nur implizit zu Grunde legt, stellt XML-Schema diesen Sachverhalt durch ein eigenes Sprachkonstrukt klar dar. Hierfür werden alle Kindelemente in ein weiteres Element sequence eingebettet.
Das Auswahlinhaltsmodell (auch: Selektionsmodell) -- in der DTD durch Oder-Verknüpfung der einzelnen Elemente einer Elementgruppe ausgedrückt (...|...|...) -- wird entsprechend durch das XSD-Element choice ausgedrückt.
Eine besondere Variante des Selektionsmodells stellt die all-Gruppe dar. Sie kürzt das häufig genutzte Inhaltsmodell (...|...|...)* ab. Es erlaubt die Angabe der Kindelemente in beliebiger Reihenfolge.
In Entsprechung zur Klammerdarstellung in der DTD muß zwingend einer der drei Reihenfolgetypen sequence, choice oder all als Element spezifiziert werden.
Analog der Klammer-Schachtelung in der DTD, können auch die verschiedenen Modellgruppen ineinander kombiniert werden.
Am Beispiel der Elementdefinitionen der Projektverwaltung:
Beispiel 30: Einige Elementdefinitionen | |
Download des Beispiels |
![]()
Das Schema enthält alle Elementdefinitionen für die Projektverwaltung. Innerhalb jedes element-Elements sind die entsprechenden Kindelemente in sequence-Strukturen eingebettet. Analog dem entsprechenden DTD-Mechanismus müssen sie daher in der Reihenfolge ihres Auftretens im Schema auch im Instanzdokument wiedergegeben werden.
Von besonderem Interesse ist die Definition des Qualifikationsprofils. Es handelt sich dabei um ein mixed content model, ausgedrückt durch das Boole'sche Attribut mixed (in Spezifikation nachschlagen). Die dargestellte Definition läßt an dieser Stelle einen weiteren Vorteil der Schemasprache gegenüber der Dokument-Typ-Definition offensichtlich werden. Während gemischte Inhalte aus Auszeichnungssymbolen und freiem Text durch DTD-validierende Parser nur rudimentär geprüft werden konnten, ermöglicht XSD die vollständige inhaltliche Validierung gemischter Inhalte. Die lediglich partielle Strukturvalidierung der DTD lag in deren syntaktischer Konstruktion zur Darstellung gemischter Inhalte begründet. Diese erlaubt zwar die Spezifikation von innerhalb unstrukturierter Textpassagen (möglicherweise) auftretenden Elementen, nicht jedoch die Überwachung der Auftrittshäufigkeit oder Reihenfolge. So wäre gemäß der Beispiel-DTD auch die Hintereinanderreihung von Qualifikationen ohne zugehörige Leistungsstufe zulässig. Insgesamt kann durch DTD-basierte Validierung das Auftreten von Elementen in gemischten Inhaltsmodellen nicht geprüft werden. Durch den Einsatz von XML-Schema ergibt sich auch für mixed content models die Möglichkeit zur strikten Validierung. Dies bedeutet konkret die Prüfbarkeit der Anzahl und Auftretensreihenfolge der angegebenen Kindelemente (in Spezifikation nachschlagen).
Darüberhinaus enthält das Beispiel neben lokalen Elementdeklarationen, die sich vollständig im Elternelement finden (wie Vorname, Nachname und Qualifikation), auch globale Elementdeklarationen, die zunächst deklariert und in einem zweiten Schritt durch Referenzierung als Kindelemente verwendet werden (wie Person und Projekt innerhalb Projektverwaltung, oder Qualifikationsprofil innerhalb des Elements Person). Hierdurch können vollständige Elemente an verschiedenen Stellen im Schema referenziert und so verwendet werden. Die Definition ist der lokalen ebenbürtig und wird im Instanzdokument identisch behandelt. Zusammenfassend läßt sich festhalten: Mit dem Referenzierungsmechanismus für Elemente kann eine einfache Form der Wiederverwendung umgesetzt werden.
Den Zeichenketten-artigen Elementtypen wurde durchgehend der XSD-Typ string zugewiesen.
Durch die Referenzierungsmöglichkeit existiert eine erste Möglichkeit zur Wiederverwendung bereits im Schema definierter Elemente. Jedoch werden Elemente hierbei zwingend in ihrer vollständigen Definition, d.h. Name, Typ und Inhaltsmodell, eingebunden. Im Grunde genommen ist diese Art der Wiederverwendung bereits mit den Mitteln der DTD möglich. Allerdings, wie im eben betrachteten Beispiel, auch dergestalt, daß nur die vollständige Definition übernommen werden kann.
XML-Schema bietet zusätzlich die Möglichkeit, strukturierte Typen, die ausschließlich durch ihr Inhaltsmodell definiert werden, festzulegen. In der Konsequenz verändert sich der durch die DTD formulierte Typbegriff hin zu einer eher an den Programmiersprachen orientierten Sichtweise, da die Benennung des Typs von der Namensgebung der typisierten Instanz separiert wird.
Syntaktisch erfolgt die Typbildung durch die Benennung des complexType-Elements durch ein Attribut name. Um die mehrfache Verwendung eines solchen Typen zu ermöglichen, muß seine Definition zwingend auf einer Baumstufe erfolgen, die für alle nutzenden Elemente erreichbar ist. Üblicherweise werden daher diese Definitionen auf der ersten Stufe, direkt unterhalb des Wurzelknotens, plaziert.
Zur Unterscheidung dieser benannten komplexen Typen werden die bisher genutzten -- namenlosen Typen -- als anonyme komplexe Typen bezeichnet.
Das nachfolgende Beispiel zeigt die Definition eines benannten komplexen Typen am Beispiel des Elements Person:
Beispiel 31: Nutzung benannter komplexer Typen | |
Download des Beispiels |
![]()
Das Schema zeigt die Definition des komplexen Typen PersonType. Dieser Typ wird zur Festlegung des Inhaltsmodells des Elements Person verwendet.
Definition eigener Datentypen durch Vererbung:
Zur Unterstützung von Wiederverwendung und Erhöhung der Strukturierung des Entwurfs definiert XSD ein Vererbungskonstrukt zur Bildung neuer komplexer Typen auf der Basis bereits bestehender.
Zwei verschiedene Ableitungssemantiken werden angeboten:
Das nachfolgende Beispiel zeigt die Anwendung der einschränkenden Ableitung.
Hierbei erbt der benannte komplexe Typ childType von parentType. Innerhalb des -- aus syntaktischen Gründen notwendigen -- Elements complexContent findet sich die Definition der Vererbung im Element restriction, das base-Attribut verweist auf den benannten Elterntypen.
Der Inhalt des restriction-Elements gleicht der Inhaltsmodelldefinition des komplexen Typen: Auch hier werden Elemente und ihre Auftrittsstruktur (im betrachteten Beispiel sequence) angegeben. Die Elementdefinition des Elements elementA in childType schränkt die gleichnamige Elementdefinition innerhalb des Elterntypen ein. Nachvollziehbar wird diese Einschränkungsbeziehung zwischen short und int bei Betrachtung der Datentyphierarchie und der Typdefinition der verwendeten Primitivtypen. So bildet short per definitionem eine eingeschränkte Untermenge von int an. (Die entsprechende XSD-Definition findet sich im Schema für Schema).
Die beiden Elementdefinitionen usage1 und usage2 zeigen die Verwendung der anwenderdefinierten Typen.
Beispiel 32: Einschränkende Typableitung | |
Download des Beispiels |
![]()
Durch das strukturierte Inhaltsmodell ergeben sich über die reine Typisierung hinausgehende Möglichkeiten zur Einschränkung der Inhalte. Die nachfolgende Tabelle stellt einige Varianten zusammen.
Tabelle 6: Beispiele für zulässige Restriktionen | |||||||||||||||
|
![]()
Die direkte Umkehrung der einschränkenden Spezialisierung bildet die erweiternde Spezialisierung. Sie greift nicht verändernd auf die Elemente des Supertyps zu, sondern definiert zusätzliche neue.
Untenstehendes XSD-Schema zeigt dies am Beispiel des Supertyps parentElement, der durch das abgeleitete Kindelement childElement erweitert wird. Hierzu definiert childElement ein zusätzliches elementB.
Beispiel 33: Erweiternde Typableitung | |
Download des Beispiels |
![]()
Zusätzlich sieht XML Schema die Möglichkeit vor, komplexe Typen von simplen abzuleiten. Dies mag auf den ersten Blick ungewöhnlich erscheinen,
eröffnet es doch scheinbar einen Weg, unstrukturierte Typen in strukturierte zu überführen.
Bei näherer Betrachtung offenbart sich jedoch, daß hier lediglich der Ableitungsbegriff überladen wurde, um einen einfachen Weg zur Verknüpfung der beiden Inhaltsmodelle strukturierter „XML-artiger“ Inhalt -- wie er durch complexTypes repräsentiert wird -- auf der einen, und unstrukturierter Inhalt -- wie er durch die einfachen Datentypen repräsentiert wird -- auf der anderen Seite, zu erhalten.
Beispiel 34: Ableitung eines komplexen Typen von einem Simplen | |
Download des Beispiels |
![]()
Durch die im Beispiel dargestellte Syntax wird es ermöglicht unstrukturiert-getypten Elementen Attribute zuzuordnen, obwohl diese eigentlich Bestandteil der Definition komplex-getyper Elemente sind.
So wird im Beispiel dem Element Vorname sowohl der simple Typ string, als auch durch den Ableitungsmechanismus das Attribut rufname -- im Rahmen eines complexType, zugeordnet.
Die Typisierung des Elements erfolgt hierbei nicht durch das
type-Attribut innerhalb der Elementdeklaration,
sondern innerhalb der simpleContent-Festlegung.
Neben der anwenderdefinierten Bildung komplexer Typen steht es dem XSD-Modellierer auch offen, eigene (primitive) Datentypen festzulegen oder eigene Typen von bestehenden abzuleiten.
Hierfür definiert XML-Schema Part1 das Element simpleType. Für einfache Typen ist jedoch nur die einschränkende Vererbung (restriction) zugelassen. Dies liegt in der praktischen Beherrschbarkeit des Typsystems begründet. Durch die strikte Restriktionssemantik ergibt sich die Möglichkeit kontravarianter Substitution, wie sie bei objektorientierten Typsystemen und Vererbungsstrukturen anzutreffen ist. Dies bedeutet, daß an jeder Stelle, an der eine Ausprägung eines Supertyps erwartet wird, auch -- unter Erhalt der Typrestriktion -- eine Ausprägung eines Subtypen auftreten darf. Beispielhaft: Wird an einer Stelle des Instanzdokumentes durch das Schema das Auftreten einer Ausprägung von integer verlangt, so kann der Anwender auch Ausprägungen der Subtypen int, short oder byte angeben ohne die Gültigkeit des XML-Dokuments zu beeinträchtigen.
Vereinigungstypen werden aus einer nichtleeren Menge von Ausgangstypen gebildet.
Das Beispiel zeigt die Definition eines Typen termin, der den vorgegebenen Primitivtypen date und eine Liste NamenDerWochentage (deren Definition nicht dargestellt ist) vereinigt. Insbesondere zeigt der Ausschnitt die Möglichkeit der Vereinigungsbildung auch über aggregierte Typen.
(1)<xs:simpleType name="termin">
(2) <xs:union memberTypes="xs:date NamenDerWochentage"/>
(3)</xs:simpleType>
Das XSD-Beispiel zeigt, als Fragment der XML-Schemaspezifikation, die Definition des vorgegebenen Typs short, einer einschränkenden Spezialisierung des Typs int.
Am Beispiel gut nachvollziehbar sind die beiden Schritte zur Bildung eines eigenen Typen:
Im Beispiel wird der kleinste und größte gültige Wert (minInclusive bzw. maxInclusive) des neuen Typen short gegenüber dem Basistypen beschränkt.
Beispiel 35: Einschränkende Spezialisierung eines simplen Typen | |
|
![]()
Die Bildung aggregierter Typen folgt demselben Muster. Jedoch tritt an die Stelle der Ableitung die Spezifikation des Aggregationstyps (im Beispiel Liste) und Angabe des Inhaltstyps (im Beispiel string).
Beispiel 36: Bildung eines Aggregationstypen | |
|
![]()
Nachfolgend sind die verschiedenen Beschränkungsmöglichkeiten zusammengefaßt:
length(1)<xs:simpleType name="Postleitzahl">
(2) <xs:restriction base="xs:string">
(3) <xs:length value="5"/>
(4) </xs:restriction>
(5)</xs:simpleType>
Beschränkung der Elementanzahl einer Liste:
(1)<xs:simpleType name="VornamenList">
(2) <xs:list itemType="xs:token"/>
(3)</xs:simpleType>
(4)<xs:simpleType name="VornamenRestrictedList">
(5) <xs:restriction base="VornamenList">
(6) <xs:length value="5"/>
(7) </xs:restriction>
(8)</xs:simpleType>
minLengthVornamenRestrictedList muß mindestens einen Eintrag enthalten):
(1)<xs:simpleType name="VornamenList">
(2) <xs:list itemType="xs:token"/>
(3)</xs:simpleType>
(4)<xs:simpleType name="VornamenRestrictedList">
(5) <xs:restriction base="VornamenList">
(6) <xs:minLength value="1"/>
(7) </xs:restriction>
(8)</xs:simpleType>
Beispiel (der spezialisierte atomare Typ Titel muß aus mindestens fünf Zeichen bestehen):
(1)<xs:simpleType name="Titel">
(2) <xs:restriction base="xs:string">
(3) <xs:minLength value="5"/>
(4) </xs:restriction>
(5)</xs:simpleType>
maxLengthVornamenRestrictedList muß mindestens einen, jedoch höchstens drei, Einträge enthalten):
(1)<xs:simpleType name="VornamenList">
(2) <xs:list itemType="xs:token"/>
(3)</xs:simpleType>
(4)<xs:simpleType name="VornamenRestrictedList">
(5) <xs:restriction base="VornamenList">
(6) <xs:minLength value="1"/>
(7) <xs:maxLength value="3"/>
(8) </xs:restriction>
(9)</xs:simpleType>
Beispiel (der spezialisierte atomare Typ Titel muß aus mindestens fünf, darf jedoch aus höchstens 80 Zeichen bestehen):
(1)<xs:simpleType name="Titel">
(2) <xs:restriction base="xs:string">
(3) <xs:minLength value="5"/>
(4) <xs:maxLength value="80"/>
(5) </xs:restriction>
(6)</xs:simpleType>
patternS eine Zeichenkette aus einer beliebigen Anzahl von Zeichen (d.h. sie kann auch leer sein!), dann gilt: Tabelle 7: Übersicht der Quantifier | ||||||||||||||||
|
![]()
Tabelle 8: Übersicht der Escape-Symbole | ||||||||||||||||||||||||||||||||||||
|
![]()
Tabelle 9: Buchstaben | ||||||||||||||
|
![]()
Tabelle 10: Markierungssymbole | ||||||||||
|
![]()
Tabelle 11: Zahlen | ||||||||||
|
![]()
Tabelle 12: Interpunktionszeichen | ||||||||||||||||||
|
![]()
Tabelle 13: Separatoren | ||||||||||
|
![]()
Tabelle 14: Symbole | ||||||||||||
|
![]()
Tabelle 15: Sonstige Zeichen | ||||||||||||
|
![]()
pattern-Elements direkt angegeben werden. Die Zeichenkettenfamilien werden durch ihre symbolische Darstellung, eingeleitet durch \p und durch geschweifte Klammern umschlossen, dargestellt.\P das Komplement zu jeder der aufgeführten Zeichenkettenfamilien definiert.^ angeboten, welches eine Aufzählung von Zeichen von der Verwendung ausschließt. Darüberhinaus können auf der Basis simpler Mengendifferenzoperationen eigene Zeichenklassen komfortabel definiert werden.Tabelle 16: Zeichensequenzen | ||||||||||||||||||||||||
|
![]()
(1)<xs:simpleType name="gerAutoNummer">
(2) <xs:restriction base="xs:string">
(3) <xs:pattern value="\p{Lu}{1,3}-\p{Lu}{1,2} \p{Nd}{1,4}"/>
(4) </xs:restriction>
(5)</xs:simpleType>
Weitere Informationen: Anhang F -- Reguläre Ausdrücke -- der XML-Spezifikationenumeration(1)<xs:simpleType name="ampelfarben">
(2) <xs:restriction base="xs:string">
(3) <xs:enumeration value="rot"/>
(4) <xs:enumeration value="gelb"/>
(5) <xs:enumeration value="grün"/>
(6) </xs:restriction>
(7)</xs:simpleType>
whitespacemaxInclusivevalue-Attribut angegebenen zugelassen. (1)<xs:simpleType name="uHu">
(2) <xs:restriction base="xs:decimal">
(3) <xs:maxInclusive value="100"/>
(4) </xs:restriction>
(5)</xs:simpleType>
Anmerkung: In vielen Fällen kann eine maxInclusive-Festlegung ohne Informationsverlust in eine äquivalente maxExclusive-Definition überführt werden. maxExclusive(1)<xs:simpleType name="uHu">
(2) <xs:restriction base="xs:decimal">
(3) <xs:maxExclusive value="100"/>
(4) </xs:restriction>
(5)</xs:simpleType>
Als Belegungen des Typs uHu sind alle Zahlen kleiner als 100 zugelassen. Durch die Verwendung des XSD-Typen decimal als Basistyp kann auch keine verlustfreie Überführung in eine maxInclusive-Festlegung überführt werden, da hierfür die größte zugelassene Zahl fixiert werden müßte, was jedoch die Typdefinition von decimal explizit offen läßt. minInclusive(1)<xs:simpleType name="uFz">
(2) <xs:restriction base="xs:decimal">
(3) <xs:minInclusive value="25"/>
(4) </xs:restriction>
(5)</xs:simpleType>
minExclusive(1)<xs:simpleType name="uFz">
(2) <xs:restriction base="xs:decimal">
(3) <xs:minExclusive value="25"/>
(4) </xs:restriction>
(5)</xs:simpleType>
totalDigits(1)<xs:simpleType name="myNumber">
(2) <xs:restriction base="xs:decimal">
(3) <xs:totalDigits value="7"/>
(4) </xs:restriction>
(5)</xs:simpleType>
fractionDigits(1)<xs:simpleType name="myNumber">
(2) <xs:restriction base="decimal">
(3) <xs:totalDigits value="9"/>
(4) <xs:fractionDigits value="2"/>
(5) </xs:restriction>
(6)</xs:simpleType>
![]()
Definition von Attributen:
Die Attributdeklaration erfolgt durch das XSD-Element attribute. Die Mächtigkeit entspricht auch hier, wie bereits für die Elemente verwirklicht, einer Obermenge der DTD. So können neben optionalen, zwingenden und konstanten Attributen auch Aufzählungsattribute und Mengen realisiert werden. Hierbei wurde auf die Orthogonalität zum durch simpleType geschaffenen Typmechanismus geachtet.
Die Charakteristika (ausgedrückt in Attributen des XSD-Elements attribute) einer Attributdeklaration umfassen:
NCName) gemäß Namensraumproduktion 7.simpleType.qualified, andernfalls unqualified).optional, required oder prohibited.optional angenommen und das Attribut damit nicht zwingend im XML-Dokument erwartet. Den Gegensatz hierzu bildet required, wodurch das Attribut als zwingend anzugeben definiert wird. prohibited verbietet die Nutzung des Attributes im XML-Dokument.Anmerkung: Einen Anwendungsfall der Belegung prohibited für use bilden Attribute, die innerhalb des Schemas bereits definiert sind, jedoch noch nicht zur allgemeinen Nutzung freigegeben wurden.
Beispiel 37: Einige Attributdefinitionen | |
Download des Beispiels |
![]()
Das Beispiel zeigt einige Varianten der Attributdeklaration. So definieren myAtt1 mit myAtt4 globale Attribute, die innerhalb verschiedener Elemente verwendet werden können. Hierdurch wird die bereits für Elemente verwirklichte Mimik der einmaligen Deklaration und anschließenden beliebigen Verwendung auch auf Attribute ausgedehnt. Die Nutzung der so deklarierten Attribute geschieht durch das ref-Attribut innerhalb des Attribute-Elements des beherbergenden Elements.myAtt1 definiert ein typenloses Attribut, dem vorgabegemäß der allgemeinste Typ anyType zugeordnet wird. Die Angabe dieses Attributes ist optional (use="optional"), was der Vorgabe entspricht.
Der XSD-Standardtyp decimal findet zur Definition des Attributs myAtt2 Verwendung. Die zwingend anzugebenden (use="required") Inhalte dieses Attributs werden durch einen XML-Schema-Parser auf Typkonformität geprüft.myAtt3 veranschaulicht die Bildung eines anonymen (inneren) atomaren Typen zur Definition eines Attributs. Der durch Restriktion gebildete neue Datentyp steht ausschließlich innerhalb des Attributs myAtt3 zur Verfügung. Die Syntax der Datentypspezialisierung entspricht der im vorhergehenden Abschnitt diskutierten. Zudem ist die Verwendung des Attributes innerhalb eines XML-Dokumentes untersagt; ausgedrückt durch die Belegung use="prohibited"
Analog der Typisierung eines Elementinhaltes durch einen anwenderdefinierten Typen gestaltet sich das Vorgehen für Attribute. Veranschaulicht wird dies durch die Definition von myAtt4. Sie greift auf den eigen-definierten Typen myType1 zurück.
Dem Attribut myAtt5 ist zusätzlich zur Benennung, die innerhalb des verwendenden Elementes eindeutig sein sollte, ein Dokument-weiter Schlüssel (id) zugeordnet.
Innerhalb des Elements foo werden die fünf zuvor definierten Attribute verwendet. Trotz der Reihenfolge der Definitionen im complexType-Element verfügen die Attribute im XML-Instanzdokument -- auch bei der Verwendung von XML-Schema -- über keinerlei Reihenfolge (vgl. XML-Spezifikation).
Zusätzlich enthält die Elementdefintion für foo mit myAtt6 ein „lokales“ Attribut. Diese Definitionsvariante entspricht am ehesten der der Document Type Definition, da sie eine Wiederverwendung außerhalb des definierenden Elements ausschließt.
Beispiel 38: Vollständiges XML-Schema der Projektverwaltung | |
Download des Beispiels |
![]()
Abschließend eine gültige (sowohl valid als auch schema valid) Dokumentinstanz der Projektverwaltungsstruktur.
Beispiel 39: Gültiges Projektverwaltungsdokument | |
Download des Beispiels |
![]()
Werkzeuge:
Zwar existiert -- wie für alle XML-Dokumente -- die Möglichkeit, Dokument Typ Definitionen und XML-Schemata „per Hand“ mit einem Texteditor zu erstellen, jedoch ist dieses Vorgehen, insbesondere für umfangreiche XML-Vokabulare, zeitaufwendig und fehlerträchtig. Zusätzlich läßt die rein textuelle Formulierung die entstehenden Schemadokumente schnell unübersichtlich werden.
Inzwischen existieren einige gute DTD- und Schemaeditoren, die zumeist neben visueller Syntaxhervorhebung auch die kontextsensitive Editierung erlauben und so eine wesentliche Erleichterung der Schemaerzeugung bilden. Gleichzeitig bieten die meisten verfügbaren Werkzeuge dieser Klasse auch Möglichkeiten zur Validierung des erzeugten Schemas an.
Ergänzend wird vielfach auch eine graphische Repräsentation der DTD- oder XSD-Struktur angeboten.
Die Abbildungen zeigen Ansichten der Werkzeuge XML Authority bzw. XML Spy
Web-Referenzen 9: Weiterführende Links und Werkzeuge | |
•XML Schema Part 0: Primer •XML Schema Part 1: Structures •XML Schema Part 2: Datatypes •XML Schema @ Cover-Pages •Parsing the Atom -- Diskussion über die Vor- und Nachteile inhärent komplexer atomarer Typen •Schema-Informationen @ jeckle.de •XML-Authority (DTD- und XSD-Editor) •XML Spy (DTD- und XSD-Editor) |
![]()
Die Verbindung zwischen der generischen Metasprache XML und dem World Wide Web datiert zurück bis vor die Entstehung der XML ...
Wie bereits im Eingangskapitel erwähnt, bildet die Hypertext Markup Language HTML die eigentliche Initialzündung des World Wide Web. Technisch ist sie als Anwendung der normierten generischen Metasprache SGML realisiert und kann heute als vermutlich bekannteste und verbreitetste Auszeichnungssprache überhaupt gelten.
Die Graphik faßt noch einmal die Beziehung von HTML und SGML zusammen, und schlägt eine Brücke in die XML-Welt.
Ursprünglich setzte Tim Berners-Lee das Ur-HTML 1989 als SGML-Anwendung durch Definition einer geeigneten (SGML-)Document Type Definition um (vgl. IETF RFC 1866). Zwar ähnelt die für HTML definierte Syntax der später für XML-Dokumente eingeführten, jedoch läßt sich an einigen Stellen (deutlich) die Abkunft von SGML ablesen. Dies wird insbesondere bei Syntaxkonstrukten offenkundig, die zwar in SGML erlaubt, jedoch in der später gebildeten Untermenge XML illegal sind. Die fehlenden schließenden Tags (beim img- oder br-Element) oder die gelockerte Attributsyntax (beim compact-Attribut des ul-Elements) können hierfür als bekannte Beispiele dienen.
Diese SGML-Sprachmittel werden entweder durch den Anwender vorgegeben (wie SHORTTAG = YES für das img-Element) oder sind inhärent zur Kompaktifizierung der Instanzstrukturen (wie die Attributminimierung) vorgegeben. Sie stellen einen Gutteil der Unübersichtlichkeit und Komplexität der Sprache SGML dar, da durch sie prinzipiell unterschiedliche Darstellungen identischer Bedeutung erlaubt werden. Als Resultat des sich (theoretisch) ergebenden Umsetzungsaufwandes realisieren HTML-Browser bis heute nicht die volle Mächtigkeit von SGML, die notwendig wäre um HTML korrekt zu interpretieren, sondern nur einen herstellerabhängigen Ausschnitt. Daher kommt es immer wieder zu sichtbaren Inkompatibilitäten der HTML-Interpretation verschiedener Web-Browser.
Zusätzlich haben die verschiedenen Hersteller im Laufe der Zeit den ursprünglichen HTML-Standard um eigene proprietäre Elemente erweitert. Naturgemäß werden diese neuen Elemente nur durch den Browser des jeweiligen Herstellers interpretiert; alle anderen Browser ignorieren die ihnen unbekannten Tags spezifikationsgemäß und zeigen stattdessen nur den Elementinhalt an.
Die nachfolgenden Graphiken zeigen dies an einem einfachen Beispiel:
Beispiel 40: Ein (höchst) inkompatibles HTML-Dokument | |
Download des Beispiels |
![]()
Das dargestellte HTML-Dokument nutzt das in der HTML-Spezifikation ab der Version 3.2 vorgesehene rules-Attribut. Die Abbildungen zeigen jedoch, daß es nur durch den Internet Explorer ausgewertet und dargestellt wird.
Die Tabellendefinition nutzt in der wiedergegebenen Form die Freiheiten des HTML-Standards aus, und verzichtet weitestgehend auf schließende Tags. Beide Browser geben trotzdem die Struktur korrekt wieder.
Bei den drei abschließenden Elementen handelt es sich um herstellerspezifische Erweiterungen durch Netscape (blink) bzw. Microsoft (color-Attribut und marquee-Element).
Einerseits zur (Wieder-)Vereinheitlichung der inzwischen offen konkurrierenden HTML-Dialekte, andererseits zur leichteren technischen Umsetzbarkeit der HTML-Grammatik initiierte das World Wide Web Konsortium 1998 die XHTML-Aktivität, welche sich die Umsetzung von HTML als XML-Anwendung zum Ziel setzte.
Mit der Verabschiedung des HTML-Nachfolgers XHTML v1.0 im Januar 2000 wurde für die bis dato prominenteste Web-Sprache die Abkehr von SGML vollzogen. Im Kern stellt die neue Sprache die Reformulierung der letzten SGML-basierten HTML-Variante 4.01 in XML dar. Wie bereits die Ur-Sprache verwendet auch XHTML (zunächst) den Grammatikmechanismus der Document Type Definition und ist „äußerlich“ (d.h. bei Betrachtung der Instanzdokumente) nicht von der Vorgängersprache zu unterscheiden. Genaugenommen sind die angebotenen Minimierungsmöglichkeiten für SGML optional und müssen nicht zwingend genutzt werden. Daher ist weiterhin jedes gültige XHTML v1.0-Dokument ebenfalls konform zur HTML v4.01-Definition.
Nachfolgend sind die Änderungen an HTML zusammengetragen, welche zum XHTML-Standard führten:
<ul compact> als Kurzschreibweise von <ul compact="compact"> ist nicht mehr zugelassen.html) verfügen.<! folgen.Wird ein HTML-Dokument entsprechend modifiziert, so erhält man ein wohlgeformtes XML-Dokument. Wird zusätzlich die DOCTYPE-Deklaration angegeben, und so die XHTML-DTD referenziert, so kann zusätzlich die Gültigkeit sichergestellt werden.
Die aktuell verfügbaren Browser können überwiegend bereits XHTML v1.0-konforme Dokumente darstellen.
Im Detail bedeutet dies, daß neben der Einhaltung der durch die DTD definierten Strukturen auch die Nutzung des XHTML-Namensraumes für das gesamte Dokument erfolgen muß. Konsequenterweise muß jedes XHTML-Dokument ferner die entsprechende XHTML-DTD referenzieren. Zur korrekten Behandlung bereits existierender Dokument-Instanzen, die noch Elemente früherer HTML-Versionen beinhalten, welche nicht mehr durch den Standard unterstützt werden, sind insgesamt drei HTML-DTDs durch den Standard definiert. Neben den DTDs zur Darstellung Frame-basierter (frameset-DTD) bzw. „normaler“ (strict-DTD) Dokumente ermöglicht die transitional Dokument Typ Definition den leichteren Übergang zu XHTML.
Zur automatisierten Anpassung existierender HTML-Dokumente auf den neuen Sprachstandard hat das W3C das kostenfreie Werkzeug Tidy veröffentlicht.
Der nachfolgende XHTML-Code wurde mit diesem Werkzeug automatisch aus dem vorangegangenen Beispiel erzeugt. (Aufruf: tidy -asxml incompatibleHTML.html > validXHTML.html)
Beispiel 41: Ein einfaches XHTML-Dokument | |
|
![]()
XHTML v1.1 dekomponiert das ehemals durch genau eine DTD dargestellte HTML-Vokabular in einzelne problemspezifische Module. Zusätzlich wird die Sprache um die Ruby-Anmerkungen erweitert. Hierbei handelt es sich um einen simplen Annotationsmechanismus für beliebige Anmerkungen im Text, wie er im südasiatischen Sprachraum breite Verwendung findet.
Breite Aufmerksamkeit dürften die in XHTML v1.1 verwirklichten Modularisierungsaktivitäten wecken. Sie haben es sich sich zum Ziel gesetzt, die Sprache in verschiedene eigenständige Module aufzuteilen, um so die Wiederverwendung einzelner Teilbereiche (wie z.B. Tabellen, Graphiken, Listen) in anderen XML-Sprachen zu ermöglichen. Gleichzeitig können ausgewählte Module für bestimmte Endgeräte umgesetzt werden, beispielsweise für ressourcenbeschränkte mobile Endgeräte.
Im Detail definiert der Standard 22 Einzelmodule mit ihren spezifischen Aufgaben. Das Zentrum der Dekomposition bilden die vier Kernmodule Struktur, Text, Hypertext und Listen. Sie müssen zwingend durch eine Implementierung umgesetzt werden, um als konform zu XHTML v1.1 anerkannt zu werden.
Nachfolgend sind die Module und ihre Aufgabe sowie typische Elemente daraus zusammengefaßt:
class (Core-Modul), onclick (Events-Modul), style (Style-Modul)
html, head, body, ...abbr, p, strong, ...aul, li, dl, ...b, small, tt, ...ins, delbdoform, input, option, ...form, input, button, ...table, td, th, ...table, td, thead, ...imgcoords oder usemap für die Elemente a, area, ...ismap für die Elemente img und inputobjectframeset, frame, noframestarget-Attribut für die Elemente a, link, base, ...iframeonblur, onload, onsubmit, ... für die Elemente a, body, form, ...metanoscript, scriptstylelinkbasename-Attribut für die Elemente a, applet, form...basefont, center, font, ...Das Schema-Fragment zeigt die Nutzung beliebiger Elemente aus dem XHTML-Namensraum im QualifikationsprofilType.
Beispiel 42: Nutzung von XHTML in anderen XML-Sprachen | |
|
![]()
Eine gültige Dokumentinstanz kann innerhalb des Elements Qualifikationsprofil jedes Element aus dem XHTML-Namensraum beinhalten:
Beispiel 43: Nutzung des XHTML-Namensraumes in einem eigenen Dokument | |
Download des Beispiels |
![]()
Parallel zur Modularisierung und den laufenden Erweiterungsaktivitäten zu XHTML wurde inzwischen auch an der Neufassung der Strukturbeschreibung gearbeitet. Da der Sprachumfang der SGML-basierten Sprache HTML mit der Reformulierung in XML (XHTML v1.0) nicht verändert wurde (auch XHTML v1.1 läßt diesen unangetastet) bestand auch keinerlei Notwendigkeit zur Überarbeitung der DTD-basierten Vokabularbeschreibung.
Mit dem abzusehenden Übergang zur nächsten Version des XHTML-Vokabulars, welche erstmals seit 1999 neue Elemente in die Sprache einführen wird, vollzieht sich auch die Umstellung auf XML Schema.
Bereits für XHTML v1.0 liegt Formulierung als XML Schema in einer nicht normativen W3C Note vor.
XHTML markiert die erste „echte“ Weiterentwicklung der XHTML-Sprachfamilie seit ihrer Löslösung von SGML und der daran anschließenden Fundierung auf XML.
Das gegenwärtig erst im Status eines Working Draft zugängliche Vokabular definiert einige neue Elemente und entfernt einige bekannte Konstrukte. Daher stellt es keine abwärtskompatible Weiterentwicklung der existierenden XHTML-Sprachfamilie dar, sondern entwirft vielmehr eine neue Hypertextsprache.
Nachfolgend werten einige Erweiterungen und Modifikationen gegenüber dem vertrauten XHTML an Beispielen diskutiert.
XHTML v2 wird keine explizite Angabe des Zeilenumbruchs durch den Anwender mehr unterstützen, sondern dies vollständig der Darstellungskomponente überlassen. Konkret wird das br-Element als veraltet gekennzeichnet und stattdessen zukünftig durch das neu eingeführte Element line ersetzt werden welches sich in ähnlicher Weise nutzen läßt.
Beispiel 44 zeigt ein XHTML-Fragment welches korrekt im Sinne der Festlegungen der ersten XHTML-Generation formuliert ist. Beispiel 45 stellt diesem die XHTML v2 konforme Darstellung gegenüber.
Beispiel 44: Ein gültiges XHTML v1.x-Dokumentfragment | |
Download des Beispiels |
![]()
Beispiel 45: ... XHTML v2-konforme Formulierung | |
Download des Beispiels |
![]()
Die Beispiele 46 und 47 illustrieren die wohl augenscheinlichste Neuerung des XHTML v2 Sprachvorschlages. Das bisher zur Referenzierung von Bilddaten vorhergesehene Element img wird zugunsten des bereits existierenden Elements object für veraltet erklärt.
Hintergrund dieser Entscheidung ist der Versuch der Aufhebung der Asymmetrie in der Adressierung von referenzierten Bilddaten und sonstigen externen Daten eines nicht näher definierten Formats wie beispielsweise Applets.
Innerhalb des object-Elements übernimmt das Attribut data die Rolle der bisher durch src ausgedrückten Lokalisationsreferenz. Neu hinzu kommt die die Typisierung des referenzierten Objekts mittels MIME-Type, welcher im type-Attribut angegeben wird.
Zusätzlich zeigt das Beispiel 47 die Nutzung der standby-Angabe welche zur Aufnahme von Text dient der während des Objektladevorganges (d.h. der Dereferenzierung der durch data identifizierten Ressource) dem Anwender präsentiert werden kann.
Beispiel 46: Referenzierung einer externen Bilddatei in XHTML v2 | |
Download des Beispiels |
![]()
Beispiel 47: ... und in XHTML v2 | |
Download des Beispiels |
![]()
Folgenschwerste Modifikation der bestehenden XHTML-Struktur dürfte die Entfernung der Überschriftenelemente h1 mit h6 sein. Diese Elemente welche bisher die hierarchische Position einer Überschrift absolut durch die Wahl des Elementtyps ausdrückten werden zukünftig durch zugunsten eines allgemeinen Hierarchieelements h nicht mehr unterstützt. Ein Grund dieser Entscheidung mag in der praktischen Verwendung der bisher angebotenen Überschriftselemente liegen. So wurden diese häufig zur Erreichung eines gewissen visuellen Verhaltens herangezogen, welches sich aus dem im Elementnamen ablesbaren Verhältnis der Elemente zueinander ablesen lies. So wird typischerweise ein Überschriftselement der Ebene zwei (h2) in einer kleineren oder schwächeren optischen Darstellung umgesetzt als eines der Ebene eins (h1).
In XHTML v2 ergibt sich die visuelle Präsentation ausschließlich aus dem Verhältnis der h-Elemente zu der sie umgebenden section. Daher entspricht die Formulierung des Beispiels 48 der aus 49 semantisch.
Beispiel 48: Überschriftsebenen in XHTML v1 | |
Download des Beispiels |
![]()
Beispiel 49: Äquivalente Formulierung in XHTML v2 | |
Download des Beispiels |
![]()
Die unauffälligste und gleichermaßen wirkungsmächtigste Neuerung ergibt sich aus der Inklusion des href-Attributes in die Zusammenstellung der allgemeine verwendbaren Attribute der Common Attribute Collection.
Diese „Aufwertung“ des genannten Attributs eröffnet die Möglichkeit beliebige XHTML-Elemente als Quellen von Hyperlinkverknüpfungen heranzuziehen wie es 50 zeigt.
Beispiel 50: Erweiterte Hyperlinks in XHTML v2 | |
Download des Beispiels |
![]()
Obwohl das Beispiel auf den ersten Blick einen interessanten Mächtigkeitsgewinn erkennbar werden läßt, birgt es jedoch verschiedene Problemstellungen.
So ist das Interaktionsverhalten von Hyperlinks jenseits des bekannten a vollständig undefiniert und ihre überlappende Definition (wie durch die Einbettung des Elements line in das bereits mit einem Hyperlink versehene Element p illustriert) wirft die Frage nach der Behandlung durch das Anzeigegerät auf.
Auch führt dieser neu einzuführende Mechanismus notwendigerweise mit der aus verschiedenen Browsern bekannten Darstellungsweise von Hyperlinks durch blau gefärbten und unterstrichenen Text. So müßte das Beispieldokument vollständig gefärbt und unterstrichen dargestellt werden, was sich zweifellos als der Lesbarkeit nicht zuträglich erweisen würde.
Überdies entwickelt XHTML durch die diskutierte Vorgehensweise einen allgemein verwendbaren Referenzierungsmechanismus neu, der bereits durch den Standard XLink verfügbar ist. Vielmehr noch ergeben sich auf der zulässigen Kombination beider Verfahren weitere Problemstellungen.
Vor dem Hintergrund dieser Kritikpunkte ist nicht damit zu rechnen, daß die bestehende Form der erweiterten Hyperlinks in den letztendlich verabschliedeten Standard eingang finden wird.
Ähnlich der Übertragung von klassischem HTML über HTTP zur Anzeige in Web-Browsern kann auch reines XML „direkt“ per HTTP transportiert werden. Naturgemäß ist hierfür jedoch, anders als für (X)HTML, keine visuelle Repräsentation durch das empfangende Endgerät festgelegt.
Einige Hersteller bieten für natives XML strukturierte baumartige Darstellungen an. Der bekannteste Vertreter dieser Klasse dürfte Microsofts Internet Explorer sein, der ab Version 5.0 auch XML-Eingangsdaten unterstützt. Seine Browseransicht für das Beispieldokument ist im nachfolgenden Bildschirmabzug wiedergegeben.
Über Zuordnung von Präsentationsinformation durch XML Stylesheets (siehe Kapitel 2.4) kann XML direkt an einen Web-Client gesendet werden. Zur Anzeige der Informationen wird im Browser ein Stylesheet herangezogen. Genau dieses Prinzip ist auch durch den Internet Explorer verwirklicht; dort wird auf jedem XML-Dokument, welches keine eigene Stylesheetquelle identifiziert, eine Vorgabetransformation durchgeführt, welche die abgebildete Baumstruktur erzeugt.
Andere Browser unterstützen dieses Verhalten nicht und präsentieren daher für XML-Dokumente ohne assoziiertes Stylesheet lediglich einen leeren Bildschirm.
![]()
2
XML-Standards und -Anwendungen der zweiten Generation ...Das nachfolgende Kapitel beleuchtet aufbauend auf den Grundlagen des ersten Abschnittes einige der sog. XML Standards der zweiten Generation.
Sie bilden zugleich als erste Anwendungen der eXtensible Markup Language auch Sprachen im engeren Sinne, da sie neben der Syntax auch Semantikdefinition, zumeist in Form eines Ausführungsmodells, umfassen.
Die Abbildung stellt die verschiedenen Generationen der XML-Standards in der Übersicht dar. Den Anfang -- augenzwinkernd als Web-Prähistorie bezeichnet -- bildet die bekannte Hypertextsprache HTML. Die erste Standardgeneration läßt sich an der Verabschiedung der XML-Recommendation im Februar 1998 festmachen. In der Folge wurden erste XML-Sprachen, wie XHTML, entwickelt. Wesentlich komplettiert wird diese erste Entwicklungsstufe durch die XML-Namensräume. Auf der Basis des Urstandards und dieser ersten Erweiterung, die selbst als XML-Sprache realisiert ist, entstanden die ersten weiter verbreiteten XML-Sprachen für produktive Zwecke. Beispielsweise die erweiterten Hyperlinks der Spezifikation XLink, aber auch die Stylesheetsprache XSL zur Erzeugung verschiedener Präsentationssichten auf Basis von XML-Dokumenten, sowie die Transformationssprache XSLT ! zur Umwandlung von XML-Dokumenten in verschiedene Ausgabeformate.
Mit der Integration der Namensräume in die XML-Spezifikation (XML 2nd edition) vollzieht sich bereits andeutungsweise der Übergang zur neuen konzeptionellen Basis der Metasprache XML. Am deutlichsten wird dieser Evolutionsschritt durch die Verabschiedung des XML-Schemastandards im Mai 2001 markiert. Er löst den bisherigen -- von SGML übernommenen -- Grammatikmechanismus der Document Type Definition ab, und legt die XML als selbstbeschreibende Metasprache an. Gemeinsam mit XML v1.0 2nd edition bildet diese W3C-Recommendation die neue technische Basis der weiteren Standardisierungsbemühungen. Die Graphik verwendet hierfür den teilweise anzutreffenden Begriff einer XML v2.0, der jedoch in dieser Form nicht durch das W3C geprägt wurde. Aufbauend auf diesem Fundament werden einige der bereits bestehenden XML-Co-Standards überarbeitet und auf die neuen Randbedingungen, wie XML-Schema, abgestimmt.
Hyperlinking, als Möglichkeit der nichtlinearen wahlfreien Navigation in Dokumenten und zwischen beliebigen Ressourcen, ist in Zeiten des WWW allgegenwärtig. Zumeist werden die bekannten Sprungstellen im (X)HTML-Dokument farblich und zusätzlich durch Unterstreichung hervorgehoben dargestellt; ein simpler Mausklick verzweigt zur referenzierten Adresse oder aktiviert die hinterlegte Reaktion.
Bei genauerer Betrachtung läßt sich noch ein zweiter Verweismechanismus in (X)HTML identifizieren: die Referenzierung Dokument-externer Graphikdateien. Die (X)HTML-Datei enthält lediglich einen Verweis auf die URI der Graphik; die automatische Auflösung der Referenz, das Laden der Datei und die Integration in das (X)HTML-Dokument an der Stelle des img-Elements übernimmt der HTML-Agent (Browser oder sonstiges Anzeigegerät) ohne Interaktion durch den Anwender. Dieser Vorgang der automatisierten einbettenden Referenzierung wird Transklusion genannt. Der Begriff geht auf Ted Nelson und sein Xanadu-Projekt zurück. Der Terminus verbindet die beiden Worte Transfer und Inklusion um auf die beliebige physische Lokation der referenzierten Ressource und ihre transparente Einbindung in das Zieldokument gleichermaßen hinzuweisen.
Konzeptionell bilden beide Verweisarten unidirektional navigierbare (d.h. vom Quelldokument zur referenzierten Zielressource traversierbare) Verknüpfungen, die syntaktisch in das Quelldokument eingebunden werden. Das Verweisziel bleibt von der Bildung des Links unberührt.
So flexibel und naheliegend dieser Ansatz auf den ersten Blick scheinen mag, dennoch birgt er im praktischen Einsatz durchaus ernstzunehmende Unwägbarkeiten. Die bekannteste Ausprägung dürfte der HTTP-Fehler 404 -- Not Found -- sein. Er signalisiert der anfragenden Instanz, daß die angeforderte URI nicht gefunden werden konnte (spezifikationsgemäß möglich, wenn auch seltener genutzt, ist für diesen Fall auch Fehlercode 403 -- Forbidden -- zugelassen (siehe HTTP v1.0 Spezifikation IETF RFC 1945)).
Die Fehlersituation entsteht zumeist durch Referenzierung einer zwischenzeitlich gelöschten oder umgezogenen URI. Zwar läßt die HTTP v1.1 Spezifikation mit dem Fehlercode 410 -- Gone -- Rückschlüsse auf die frühere Gültigkeit der URI zu, jedoch schlägt auch in diesem Falle der Referenzierungsversuch fehl (siehe HTTP v1.1 Spezifikation IETF RFC 2068).
Die Grundidee des in (X)HTML verwirklichten Linkingmechanismus läßt keine Möglichkeit zur Vermeidung diese Situation zu, da die referenzierte (d.h. unabhängige) Instanz keinerlei Information über den gesetzten Verweis innerhalb des abhängigen Dokuments erhält.
Gemeinsames Kennzeichen der beiden Verweisarten ist die direkte explizite Einbettung der Links in das Quelldokument. Hierdurch werden Pflege des Dokumentinhaltes und der Verweise an derselben organisatorischen Stelle konzentriert, Änderungen an den gesetzten Verweisen ziehen in jedem Falle Änderungen am verweisenden Dokument nach sich.
Als Folge können Dokumente nicht durch Externe auf dem Wege der Annotation durch Verweise ergänzt werden. Technisch erfordert dieses Vorgehen neben der verknüpften Quell- und Zielressource eine dritte Instanz zur unabhängigen Speicherung der Verweise.
Eine konkrete Umsetzung der freien Annotation beliebiger WWW-Seiten durch Dritte bot der, mittlerweile eingestellte, Dienst Third Voice.
Die klassischen HTML-Hyperlinks sind als Bestandteil der XML-Sprache XHTML durch Strukturen ihrer Grammatikdefinition in Form von Elementen und Attributen realisiert. Sie siedeln sich damit im Anwendungsbereich der XML an, und stehen daher nicht sprachunabhängig für alle XML-Sprachen zur Verfügung.
Durch die XML-Grundauffassung einer Welt vernetzter unabhängiger Dokumente ergibt sich die natürliche Notwendigkeit zur Schaffung eines Verweismechanismus, der für beliebige XML-Sprachen gleichermaßen universell eingesetzt werden kann. Dieser Anforderung soll die XML Linking Language (XLink) genügen.
Der Sprachstandard XLink behebt dieses Manko und schlägt für beliebige XML-Sprachen ein Vokabular mit zugehöriger Semantikdefinition zur Realisierung beliebiger Verweisstrukturen vor. Konzeptionell bildet XLink eine Obermenge des klassischen href-Elements.
Definition 12: XML Linking Language | |
Die XML Linking Language (XLink) definiert ein XML-basiertes Vokabular zur Darstellung
allgemeiner Verweise in einem XML-Dokument. |
![]()
Erste Umsetzungen der Standardvorschlages existieren, neben einigen Spezialwerkzeugen, in den Web-Browsern Netscape (ab Version sechs) und dem Open-Source Projekt Mozilla.
Die XML Linking Spezifikation definiert in einem eigenen Namensraum eine Reihe von Attributen mit zulässigen Wertbelegungen, die für die Verwendung in eigenen XML-Sprachen zur Verfügung stehen.
Durch die Beschränkung auf Attributdefinitionen wird dem Anwender ein zusätzlicher Freiheitsgrad gegenüber der bisherigen (X)HTML-Verweismimik eröffnet. Während in Hypertextdokumenten Links ausschließlich durch Spezifikation des Attributs href im Ankerelement a definiert werden konnten, können die XLink-Attribute in beliebigen Elementen verwendet werden.
Im Einzelnen definiert die XLink-Spezifikation folgende Attribute und Wertbelegungen:
Tabelle 17: XLink-Attribute | |||||||||||||||||||||||||||||||||
|
![]()
Je nach ihrer Belegung definierten die XLink-Attribute drei verschiedene Linktypen, die relativ zu einem Bezugsdokument benannt werden.
Verweist das href-Attribtut eines XLinks lediglich auf eine Ressource innerhalb des Bezugsdokuments, dann handelt es sich um einen Local Link. Wird auf eine anderes Dokument verwiesen, so spricht man von einem Outbound Link. Umgekehrt, d.h. im Falle eins externen Verweises auf das Bezugsdokument, so wird dieser als Inbound Link bezeichnet. Inbound und Outbound Links entsprechen sich daher, jeweils mit geändertem Bezugspunkt.
Abbildung 27 stellt die Typen in der Übersicht zusammen.
Als besondere Form existiert mit dem Linktyp des External Links ein Verweistyp, der sich nicht in obiges Schema fügt. In seinem Falle wird der gesamte XLink in einer externen Ressource gehalten, die selbst nicht notwendigerweise in XML-Dokument sein muß.
Dieses externe Linkverzeichnis wird Link Base genannt, es ist typischerweise durch eine Datenbank umgesetzt.
Beispiel 51 zeigt die Definitionen der einfachsten Form eines XLinks, den sog. simple Link. Benannt ist diese Darstellung nach dem Wert des type-Attributs.
Im Beispiel wird durch das Element myElementA ein Verweis definiert, dessen Verhalten den (X)HTML-Hyperlinks entspricht. Zunächst ist zur Identifikation der XLink-Attribute der durch die Spezifikation vorgegebene Namensraum http://www.w3.org/1999/xlink festzulegen; daher wird dieser an das Präfix xlink gebunden.
Die Definition als Vorgabenamensraum ist für diesen Anwendungsfall nicht möglich, da sich Namensräume vorgabegemäß nur auf Elemente auswirken.
Das Verweisziel wird in Form des href-Attributs (im XLink-Namensraum) angegeben.
Beispiel 51: Ein simple XLink | |
|
![]()
Der transklutorischen (d.h. die referenzierte Ressource einbettenden und automatisch aktivierten) Graphik-Referenz des img-Elements aus (X)HTML entspricht folgendes Konstrukt:
Beispiel 52: Ein transklutorischer Link | |
|
![]()
Durch die zusätzlichen angebbaren Attribute läßt sich die Semantik eines Links spezifizieren. Dies stellt eine erste Erweiterung der Mächtigkeit gegenüber den bisher im Vergleich zu (X)HTML diskutierten Verweisen dar.
So erlaubt das title-Attribut die genauere Charakterisierung eines Links durch beliebigen anwenderdefinierten Freitext.
Am Beispiel der Projektverwaltung: Das nachfolgende Codefragment realisiert die Beziehung zwischen Projekt und seinen Mitarbeitern, die in einer anderen Datei abgespeichert sind, durch einen XLink.
Beispiel 53: Nutzung des title-Attributs | |
|
![]()
Definition 13: Simpler XLink | |
Ein simpler XLink ist eine unidirektionale Verbindung zwischen zwei Ressourcen, wobei eine
Ressource als Quelle und die andere als Ziel des Links interpretiert wird. |
![]()
Während die simplen XLinks größtenteils in Analogie oder behutsamer Erweiterung zum entsprechenden (X)HTML-Konzept aufgebaut sind, führen die extended links bisher nicht realisierbare Möglichkeiten ein.
Wiederum am Beispiel der Projektverwaltung: Zwar läßt das vorhergehende Codefragment die Referenzierung der Projektmitarbeiter zu, jedoch kann innerhalb des Projekt-Elements kein weiterer XLink als Verweis auf die Projektleiter gesetzt werden, da sonst mehrfach dasselbe Attribut auftreten würde.
Das zugrundeliegende Problem, nämlich der Wunsch durch einen Link mehrere Ressourcen gebündelt referenzieren zu können, tritt in praktischen Anwendungen häufig auf. Beispielsweise beim Verweis auf mehrere Versionen eines Dokuments, alternativen Downloadservern oder Bildern verschiedener Auflösung.
Zu Realisierung erlaubt XLink die Bündelung von verschiedenen Verweisen zu einem einzigen erweiterten XLink. Nachfolgend ein Codeausschnitt, der dies für die Projektverwaltung zeigt.
Definition 14: Extended XLink | |
Ein erweiterter XLink kann gleichzeitig auf mehr als eine Ressource verweisen. |
![]()
Beispiel 54: Ein Verweis auf mehrere Ressourcen | |
|
![]()
Das Beispiel definiert einen dreigliedrigen extended link. Zur Realisierung ist zunächst das type-Attribut des die Einzellinks umschließenden Elements auf extended zu setzen. Im Rumpf dieses Elements folgen die als locator typisierten Verweise auf die verschiedenen Ressourcen. Die von den simple-Links bekannten XLink-Attribute href zur URI-basierten Referenzierung der Ressource, title zur natürlichsprachlichen Beschreibung des Verweises, sowie role zur Referenzierung einer beschreibenden Resource, können mit gleicher Semantik weiterverwendet werden. Zusätzlich nutzt das Beispiel die Möglichkeit der eindeutigen Identifikation der Verweisteile innerhalb des extended Links durch das label-Attribut.
Generell trifft das Konstrukt des erweiterten Links keine Vorgabe über mögliche Navigationsrichtungen zwischen allen im Rumpf des Linkelements aufgeführten Ressourcen.
Die Graphik stellt die referenzierten externen Ressourcen Meier, Huber und Müller als Rechteckte die durch den als Dreieck dargestellten erweiterten Link verbunden sind dar.
Es kann jedoch der Wunsch bestehen Beziehungen zwischen den durch einen erweiterten XLink verbundenen Ressourcen zu definieren. Hierfür gibt der Standard das arc-Attribut vor.
Zusätzlich zu diesem Attribut kann die Traversierungsrichtung des Links durch die Attribute from und to festgelegt werden. Die Graphik stellt diese Beziehungen als unterbrochene gerichtete Kanten dar.
Implizit kann daher die Existenz dieses Attribut-Tripels für simple XLinks angenommen werden.
Für das vorhergehende Beispiel ist die Navigationsdefinition dergestalt gewählt, daß eine Beziehung zwischen der Ressource Müller und Huber besteht. Diese Beziehung wird durch das Element befreundet_mit definiert. Zusätzlich etabliert das Element Bruder_von durch das arc-Attribut eine Beziehung zwischen Müller und Meier.
Beispiel 55: Eingeschränkte Navigation innerhalb eines extended XLinks | |
|
![]()
Das Beispiel verwendet zur Referenzierung der einzelnen Ressourcen das XLink-Attribut label.
Abschließend bleibt anzumerken, daß die arc-Typisierung lediglich die positive Definition explizit erlaubter Traversierungspfade erlaubt. Eine Einschränkung der Vorgabepfade ist nicht möglich.
Neben den bisher diskutierten Verweisen, bei denen es sich ausschließlich um Outbound Links handelte, läßt XLink auch die Auslagerung der Referenzierungen in eine sog. Link Database (kurz: Linkbase) zu. Ein solcher Datenspeicher enthält eine Menge von Zwei-Tupeln , welche Quelle und Ziel eines Verweises wiedergeben. Eine geeignete Applikation muß zur Realisierung der Verzeigerung immer eine Anfrage an diese Datenbank absetzen, und das Quell-Dokument unter Umständen geeignet aufbereiten, um dem Anwender die Möglichkeit zur Interaktion zu geben.
Das Schema der Abbildung stellt die beiden Verweismechanismen in der Zusammenschau dar. Im oberen Bereich ist ein inline link angedeutet, der im Quelldokument die zur Lokalisierung und Anzeige der referenzierten Ressource notwendigen Daten enthält. Im unteren Bereich ist das Konzept einer externen Linkdatenbank, die vor Anzeige des durch sie annotierten Quelldokuments zu konsultieren ist.
Für das Anwendungsszenario der externen Linkdatenbank stellt sich die Frage nach dem Aussehen der in der Datenbank abgespeicherten Zwei-Tupel. Während die Notation des Verweisziels durch die URI (IETF RFC 2396) vorgegeben ist, eröffnet sich die Frage nach der Lokalisierung des Verweises selbst innerhalb des Quelldokuments.
Unter Rückgriff auf (X)HTML ließen sich zwar durch die explizite Definition von Textankern (a-Element mit name-Attribut) beliebige Stellen als Aufsetzpunkt von extern verwalteten Verweisen definieren, jedoch würde dies erhebliche Modifikationen am Quelldokument nach sich ziehen, die bei Dokumentänderungen ihrerseits wiederum Wartungsarbeiten erfordern würden.
Idealerweise sollte das Quelldokument durch die Definition extern abgelegter Verweise nicht berührt werden. Im Falle eines freien Annotationsdienstes, der durch Dritte genutzt werden kann, stellt dies sogar eine Grundforderung dar.
Dieser Anwendungsfall bildet -- neben anderen -- ein Anwendungsszenario, welches eine Möglichkeit zur flexiblen Lokalisierung von Dokumentteilen erfordert. Hierfür wurde durch das W3C die im nachfolgenden Abschnitt vorgestellte XML Path Language verabschiedet.
Um die Möglichkeiten der klassischen Hypertextverknüpfungen aus HTML auch für XML vollständig nachzubilden fehlt XLink in der Grundform die Unterstützung relativer Verweise.
Diese aus (X)HTML bekannte Kurzschreibweise dient zur Adressierung eines Teils einer durch URI identifizierten Ressource. In Hypertextdokumenten werden solche Verweise häufig zur direkten Navigation zu Teilkapitel oder Zwischenüberschriften verwendet.
Zur Realisierung müssen die Sprungziele im Dokument durch den Autor festgelegt werden. (X)HTML bietet hierfür das id-Attribut an. In Verbindung mit dem Anker-Element erlaubt es die freie Definition von Sprungzielen innerhalb beliebiger XHTML-Dokumente.
Syntaktisch kann dabei der durch das #-Symbol vom Ankernamen separierte Identifikator einer URI nachgestellt werden um auf ein Sprungziel innerhalb der durch die URI bezeichneten Ressource zu verweisen. Abkürzend kann -- durch Weglassung der URI -- auf Anker des aktuellen Dokuments verwiesen werden.
Das XHTML-Dokument des Beispiels 56 zeigt die beiden Nutzungsvarianten relativer Verweise.
Die mit Zueignung, Vorspiel und Prolog benannten Anker adressieren die im Beispieldokument plazierten Ressourcen gleichen Namens (a-Elemente mit gesetztem id-Attribut).
Die übrigen Verweise (etwa Teil1.html#Nacht) nehmen Bezug auf benannte Ressourcen anderer Quellen (etwa innerhalb des Dokuments Teil1.html). Diese Quellen müssen zur Gewährleistung der Auflösbarkeit die notwendigen Anker-Elemente definieren.
Beispiel 56: Hypertext-Dokument mit HTML-konformen Verweisen | |
Download des Beispiels |
![]()
Während innerhalb des (X)HTML-Dokuments relative Verweise durch die URI des umgebenden Dokumentes ergänzt werden können ist dies für XML-Dokumente im allgemeinen Falle nicht anzunehmen. Aus diesem Grunde definiert der W3C-Standard XML Base einen einfachen Mechanismus zur Nachbildung der in (X)HTML verwirklichten Mimik.
Zur Realisierung relativer Verweise definiert XML Base ein aus genau einem Attribut bestehendes XML-Vokabular. Dieses Attribut -- xml:base -- dient zur Aufnahme des URI-Anteils. Alle referenzierenden Informationselemente, beispielsweise href, die innerhalb des mit diesem Attribut versehenen Element oder innerhalb seiner Kindelemente auftreten werden relativ zur im xml:base-Attribut angegebenen URI interpretiert. Intuitiv wird diese dynamisch vor dem Fragmentidentifikator plaziert und mit ihm zu einer neuen URI konkateniert.
Dieser Vorgang kann auch über mehrere Stufen des XML-Dokumentbaumes vollzogen werden. Hierzu werden die Inhalte aller xml:base-Attribute die sich in hierarchisch übergeordneten Elementen des referenzierenden Knotens befinden zusammengefügt.
Das Beispiel der Abbildung 57 formuliert den XHTML-Code des vorangegangenen Beispiels XML Base-konform um.
Daher wird zunächst der URI-Anteil der für alle Verweise gleichermaßen gilt auf einem hierarchisch höherstehenden gemeinsamen Element als Belegung des Attributs xml:base definiert. Im Beispiel wird daher die Basis-URI http://www.example.com/ im entsprechenden Attribut des Wurzelelements html plaziert.
Die Dokumentinternen Verweise (sie folgen auf den Text Inhaltsverzeichnis) ändern sich daher nicht. In diesem Falle expliziert xml:base lediglich die im XHTML durch seine physische Lokation implizit gegebene Information.
Für die Verweise des Dokumentes Akt1.html im Pfad Teil1 hingegen tritt eine Veränderung des durch href formulierten Verweises ein. Denn auch in diesem Falle kann der gemeinsame Anteil wieder in das XML-Basis-Attribut ausgelagert werden. In der Konsequenz ergibt sich die vollständige URI des Verweises Nacht wieder als http://www.example.com/Teil1/Akt1.html#Nacht, die durch Hierarchie-konforme Hintereinanderreichung der xml:base-Inhalte entsteht.
Für die Verweise in das Dokument Akt1.html im Pfad Teil2 gilt dasselbe. Auch hier wird die zu dereferenzierende URI durch Konkatenation der XML-Basis-Attribute gebildet.
Durch die Organisation dieses xml:base-Attributs auf derselben Hierarchieebene wie das zuvor diskutierte ergibt sich auch in diesem Anwendungsfalle die korrekte URI als http://www.example.com/Teil2/Akt1.html.
Beispiel 57: Hypertext-Dokument mit XML-Base-konformen Verweisen | |
Download des Beispiels |
![]()
![]()
Zur Extraktion beliebiger Teile eines wohl-geformten
XML-Dokuments verabschiedete das W3C 1999 die Sprache
XPath. Sie bildet eine pfadorientierte
Lokatorsprache, die das Auffinden von Dokumentteilen
(einzelnen Elementen, Attributen, etc.) durch Pfadausdrücke, die
sich an der Struktur des XML-Dokuments orientieren,
gestattet.
Die Grenze zwischen Lokatorsprache und
„echter“ Anfragesprache wie SQL sind fließend.
Zwei Unterscheidungsmerkmale sollen jedoch hervorgehoben werden:
XPath wird im üblichen Anwendungsfall nicht interaktiv oder in
eine Programmiersprache als Wirtssprache eingebettet verwendet,
sondern wurde (zunächst) nur für die Nutzung in Kombination mit
der Transformationssprache XSLT und den erweiterten
Verweisen der Sprache XPointer konzipiert. Zum zweiten
fehlt XPath die üblicherweise mit dem reinen Anfrageteil verwobene
Manipulationssprache zur Änderung bereits bestehender Daten; XPath
ist allein für den lesenden Zugriff auf XML-Dokumente
ausgelegt.
Hinweis: XPath unterscheidet XML-üblich zwischen Groß- und Kleinschreibung. Daher sind Element- und Attributnamen unbedingt in der im Dokument gewählten Schreibweise anzugeben.
Lokalisierungspfade:
Lokalisierungspfade dienen der abstrakten Beschreibung einer Menge von Informationsknoten innerhalb eines Dokuments.
Die einfachste Form eines Lokalisierungspfades beschreibt der Wurzellokalisierungpfad (root location path), ausgedrückt durch „/“. Er liefert für jedes XML-Dokument den Wurzelknoten. Dieser ist nicht identisch mit dem Wurzelelement eines XML-Dokuments! Der (unbenannte) Wurzelknoten entspricht dem Document Information Item des Information Sets, während das erste benannte Element des Dokuments durch ein Element Information Item dargestellt wird.
Die Navigation zu den einzelnen Elementknoten, oder Knotenmengen, wird durch einen Pfadausdruck realisiert. Die explizite Variante erlaubt die Angabe aller zu traversierenden Knoten bis hin zu den zu extrahierenden. Hierzu werden die Knoten, von der Wurzel absteigend durch „/“-Symbole separiert, notiert. Wegen der Korrespondenz der voneinander abgetrennten Knotennamen und den Baumstufen, werden diese auch als Lokalisierungsschritte bezeichnet. Als weitere sprachliche Analoge spiegelt der XPath-Ausdruck, von links nach rechts gelesen, auch die Schritte -- ausgehend vom Wurzelelement des Dokuments -- zur Lokalisierung der gesuchten Knotenmenge wieder.
Das Beispiel zeigt eine solche Definition am Beispiel der Projektverwaltung.
Anmerkung: Das Resultat ist in XML-Notation dargestellt, obwohl genaugenommen eine Knotenmenge des Information Sets als Resultat zurückgeliefert wird. Die gewählte XML-Darstellung ist hierbei nur eine der möglichen Varianten zur Ergebnispräsentation.
![]()
Die Einzelknoten werden entsprechend ihrer Auftrittsreihenfolge im Quelldokument (sog. document order) zurückgegeben.
Die expliziten Pfadausdrücke lassen sich in beliebiger Länge fortsetzen, jedoch zeigen sie fundamentale Schwächen in Puncto Flexibilität. Wie im Beispiel der XHTML-Verwendung innerhalb eines eigenen XML-Dokuments gesehen, kann Information desselben Typs (d.h. umschlossen durch denselben Tag) verschiedene Elternknoten besitzen. So im Beispiel, dort ist die Qualifikation auf derselben Baumstufe sowohl unterhalb des Elternelements em als auch u anzutreffen.
Als Lösung erlaubt XPath die Nutzung von Platzhaltern statt der expliziten Elementnamen innerhalb eines Lokalisierungsschrittes. In der Folge entstehen freie Lokalisierungsschritte, die alle Kindknoten einer im direkt vorhergehenden Lokalisierungsschritt selektierten Knotenmenge adressieren.
Der nachfolgende XPath-Ausdruck zeigt dies am Beispiel des Qualifikationsprofils.
![]()
Der Pfadausdruck liefert die beiden Kindelemente Qualifikation -- unabhängig von der Benennung des Elternknotens -- die direkt unterhalb des Knotens Qualifikationsprofil angeordnet sind.
Allerdings enthält die Ausgabe nicht alle Knoten des Typs Qualifikation. Der gegebene Pfadausdruck gestattet lediglich das Überspringen einer Hierarchieebene. Daher wird der hierarchisch tieferstehende Qualifikations-Knoten mit Inhalt Entwickler nicht lokalisiert. Die (zunächst naheliegende) Lösung den Pfadausdruck zu /ProjektVerwaltung/Person/Qualifikationsprofil/*/*/Qualifikation zu erweitern liefert nicht das gewünschte Resultat aller Qualifikations-Knoten, sondern ausschließlich den zuvor nicht lokalisierbaren, da der modifizierte Ausdruck nun zwingend zwei freie Lokalisierungsschritte vorsieht.
Zur Variierung der Tiefe der freien Schritte sieht XPath die Schreibweise „//“ vor. Sie erlaubt die Lokalisierung der Kindknoten auf einer beliebigen Hierarchiestufe.
Definition 15: Lokalisierungsschritt | |
Ein Lokalisierungsschritt setzt sich aus dem Namen der Achse gefolgt von zwei Doppelpunkten und einem Knotentest, optional ergänzt um ein auszuwertendes Prädikat, zusammen. Wird keine Achse spezifiziert, so gilt vorgabegemäß die Achse child.Ein Knotentest ist syntaktisch ein QName, der genau dann erfüllt ist, wenn der Knotenname mit dem Namen des Knotentests übereinstimmt.Das Prädikat filtert die Ergebnismenge hinsichtlich verschiedener Charakteristika wie Existenz von Kindknoten oder Attributen, Position in der Ergebnismenge, etc. |
![]()
Das Beispiel zeigt die korrekte XPath-Formulierung zur Lokation aller Qualifikations-Knoten:
![]()
Durch die abkürzende Schreibweise „//“ entsteht ein Muster zur Selektion aller nachfolgenden Knoten. In Verallgemeinerung dieses Konzepts bietet XPath sog. Achsen an, um relativ zum aktuellen Knoten beliebige Teilbäume zu lokalisieren.
Die Abbildung zeigt die verschiedenen durch Achsen zugänglichen Knotenmengen relativ zum rot hervorgehobenen aktuellen Knoten.
Download der XML-Datei mit dem Beispiel der Graphik
Tabelle 18: XPath-Achsen und ihre Bedeutung | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
![]()
Anmerkung:
Die Achsen ancestor, descendant, following, preceding und self partitionieren ein Dokument (unter Auslassung der Attribut- und Namensraumknoten): sie überschneiden sich nicht und enthalten alle Elementknoten des Dokuments.
Filterung durch Prädikate:
Ein -- durch eckige Klammern abgegrenztes -- Prädikat kann innerhalb jedes Lokalisierungsschrittes eines XPath-Ausdrucks angegeben werden. Fehlt es, wird die bisher ermittelte Knotenmenge nicht modifiziert.
Das Prädikat kann selbst ein gültiger XPath-Ausdruck sein.
Das prinzipielle Vorgehen kann folgendermaßen beschrieben werden:
Beginnend von links nach rechts für jeden Lokalisierungsschritt: (1) Ermittlung der zur Anfrage passenden Knotenmenge
(2) Reduzierung der Ergebnismenge um diejenigen Knoten, für die das Prädikat false liefert.
Befinden sich rechts vom aktuell bearbeiteten Lokalisierungsschritt weitere Ausdrücke, so wird die Resultatmenge als Eingabe eines weiteren Schritts (1) übergeben.
Beispiel 61: Selektion unter Anwendung eines Prädikats | |
|
![]()
Der Ausdruck selektiert an beliebiger Stelle des Dokuments („//“) alle Knoten des Typs Person. Die Knotenmenge wird um diejenigen Personen vermindert, zu denen kein Qualifikationsprofil angelegt ist. D.h. Es werden nur diejenigen Knoten selektiert, die über einen Kindknoten des Typs Qualifikationsprofil verfügen. Von dieser Knotenmenge (des Typs Person!) werden anschließend im zweiten Lokalisierungsschritt die Kindknoten des Typs Nachname selektiert.
Mithin liefert der XPath-Ausdruck alle Nachnamen von Personen, zu denen ein Qualifikationsprofil abgelegt ist.
Anmerkung: Das Beispiel nutzt im Prädikat die abkürzende Schreibweise zur Angabe der Vorgabeachse child. Die ausführliche Schreibweise -- mit unveränderter Semantik -- des XPath-Ausdruckes lautet daher: //Person[child::Qualifikationsprofil]/Nachname
Durch die zusätzliche Definition eines Prädikats für den zweiten Lokalisierungsschritt kann eine weitere Filterung der Ergebnismenge realisiert werden. Zusätzlich können innerhalb eines Prädikats neben XPath-Ausdrücken auch einige vordefinierte Funktionen verwendet werden.
Das Beispiel zeigt die Selektion der Vornamen als Kind eines Personen-Knotens (Test der Elternschaft durch erstes Prädikat), wenn dieser mit „O“ beginnt (Test durch starts-with-Funktion innerhalb des zweiten Prädikats). Die Struktur der Eingabedatei zwingt zusätzlich zur Anwendung der following-Achse, da Knoten des Typs Nachname in der Dokumentreihenfolge nach Knoten des Types Vornamen auftreten.
![]()
Die durch die XPath-Spezifikation vordefinierten Funktionen lauten in der Übersicht:
Tabelle 19: XPath-Funktionen für Knotenmengen (node-sets) | ||||||||||||||||
|
![]()
Tabelle 20: XPath-Funktionen für Zeichenketten | ||||||||||||||||||||||
|
![]()
Tabelle 21: Boole'sche XPath-Funktionen | ||||||||||||
|
![]()
Tabelle 22: Zahlenorientierte XPath-Funktionen | ||||||||||||
|
![]()
Für mathematische Berechnungen auf zahlenartigen Knoten stehen folgende Operatoren zur Verfügung.
Tabelle 23: Mathematische Operatoren | ||||||||||||
|
![]()
Ein umfangreiches Beispiel: Für das nachfolgende Beispiel wird das Projektverwaltungsdokument erweitert zu:
Beispiel 63: Erweiterte Projektverwaltung | |
Download des Beispiels |
![]()
Der XPath-Ausdruck der Abbildung 31 lokalisiert den Attributknoten des Inhalts Prj02.
![]()
Die bei der Diskussion des Referenzierungsmechanismus für DTDs geäußerte Kritik gilt prinzipiell auch für die Verwendung von XML-Schema fort. Zwar steht mit XLink ein deutlich flexiblerer Verknüpfungsmechanismus zur Verfügung, jedoch verbleibt das Problem der Gültigkeit von Referenzen. Sie bleibt auch bei der Verwendung von XML-Schema, durch die unverändert von den DTDs übernommene Semantik der Datentypen ID und IDREF, IDREFS, auf das aktuelle Dokument beschränkt. Zusätzlich ist eine Einschränkung, etwa auf den aktuellen Namensraum, nicht möglich. Daher müssen alle Belegungen aller ID-typisierten Attribute zwingend dokumentweit eindeutig sein.
Über die Möglichkeiten der Datentypen hinausgehend bietet XML-Schema das Element unique zur Definition eindeutiger Wertbelegungen an. Hierbei wird auf die Lokatorsprache XPath zurückgegriffen um die abzuprüfenden Knoten innerhalb des Dokuments zu bezeichnen.
Die Syntax verwendet XPath-Ausdrücke eingeschränkter Mächtigkeit sowohl zur Festlegung des der Knotenmenge, auf die sich die Einschränkung bezieht (selector), als auch zur Angabe der eingeschränkten Knoten (field) selbst.
(1)<xsd:unique name="aName">
(2) <xsd:selector xpath="aValidXPath"/>
(3) <xsd:field xpath="aFieldStatement"/>
(4) ...
(5)</xsd:unique>
Die Mächtigkeit der XPath-Ausdrücke ist dahingehend eingeschränkt, daß für das selector-Element ausschließlich Ausdrücke erlaubt sind, die Kindelemente des Knotens liefern, in dessen Kontext die durch unique formulierte Einschränkung angegeben wird. Als Konsequenz ist die Nutzung der verfügbaren XPath-Achsen auf diejenigen beschränkt, die Element-Knotenmengen zurückliefern.
Die Lokationsausdrücke in den -- möglicherweise mehrfach auftretenden -- field-Elementen werden relativ zum Pfad des selector-Knotens interpretiert. Hintereinandergesetzt muß der Pfad eines selector-Elements, gefolgt von einem Pfad eines field-Elements, einen gültigen Lokationsausdruck ergeben, der genau einen Knoten oder genau ein Attribut in der Ergebnismenge liefert. Sind mehrere field-Elemente zu einem selector-Element gegeben, so werden diese als durch logisches und verknüpft interpretiert. Mithin entspricht diese Semantik einem concatenated primary key aus den relationalen Datenbanken.
Das Beispiel zeigt die Nutzung des unique-Konstrukts zur Angabe der Eindeutigkeitsbedingung für das Attribut PersID des Elements Person.
Zunächst selektiert der Pfad /Person alle Knoten des gleichnamigen Typs; durch das field-Element wird die Eindeutigkeitsbedingung auf alle Attribut-Kindnoten des Typs PersID der Knoten in der selektierten Knotenmenge angewendet.
Die Semantik ist damit zur bisherigen ID-Typisierung identisch.
Beispiel 64: Unique-Einschränkung | |
Download des Beispiels |
![]()
Das nächste Beispiel zeigt die Verwendung mehrerer field-Elemente zur Realisierung zusammengesetzter Schlüssel.
Hierzu wird die Kombination aus dem Inhalt des Nachnamen- und des Vornamen-Elements zusammen als eindeutig deklariert.
Überdies zeigt das Beispiel die Anwendung des Schlüsselmechanismus auf Elemente ohne Änderung der Basissyntax, abgesehen von der geänderten XPath-Achse.
Beispiel 65: Zusammengesetzter Schlüssel innerhalb eines unique-Elements | |
|