Die Notwendigkeit von Namensräumen
(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)
Manche Dokumente kombinieren Markup aus mehreren XML-Anwendungen. Zum Beispiel könnte ein XHTML-Dokument sowohl SVG-Bilder als auch MathML-Gleichungen enthalten. Ein XSLT-Stylesheet wird sowohl XSLT-Anweisungen als auch Elemente aus dem Vokabular des Ergebnisbaums enthalten. Und XLinks bilden immer eine Symbiose mit den Elementen des Dokuments, in dem sie auftauchen, da XLink selbst keine Elemente, sondern nur Attribute definiert.
Manchmal verwenden diese Anwendungen den gleichen Namen, um auf unterschiedliche Dinge zu verweisen. So setzt beispielsweise in SVG ein Element set den Wert eines Attributs für eine bestimmte Zeitdauer, während ein Element set in MathML eine Menge im mathematischen Sinn repräsentiert, wie etwa die Menge aller positiven geraden Zahlen. Es ist ganz entscheidend zu wissen, wann Sie mit einem MathML-set und wann Sie mit einem SVG-set arbeiten. Sonst werden die Validierung, das Rendern, das Indizieren und viele andere Aufgaben durcheinander geraten und fehlschlagen.
Das folgende Beispiel zeigt eine einfache Liste mit Gemälden und enthält jeweils den Titel des Gemäldes, das Entstehungsdatum, den Namen des Künstlers, der es gemalt hat, sowie eine Beschreibung des Bildes:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<catalog>
<painting>
<title>Memory of the Garden at Etten</title>
<artist>Vincent Van Gogh</artist>
<date>November 1888</date>
<description>Zwei Frauen schauen nach links. Eine dritte arbeitet in ihrem Garten.</description>
</painting>
<painting>
<title>The Swing</title>
<artist>Pierre-Auguste Renoir</artist>
<date>1876</date>
<description>Ein junges Mädchen auf einer Schaukel. Zwei Männer und ein kleines Kind schauen zu.</description>
</painting>
<!-- Viele weitere Gemälde... -->
</catalog>
Code-Beispiel: Eine Liste mit Gemälden
Stellen Sie sich nun vor, das obige Beispiel soll als Webseite dienen, und Sie wollen diese für Suchmaschinen verfügbar machen. Eine Möglichkeit besteht darin, das Resource Description Framework (RDF) zu benutzen, um Metadaten in die Seite einzubetten. Dadurch wird die Seite für jede Suchmaschine oder andere Such-Agenten, die vorbeikommen könnten, beschrieben. Wird das Metadatenvokabular des Dublin Core verwendet, ein Standardvokabular für Informationen im Stil von Bibliothekskatalogen, das in XML oder andere Syntaxen kodiert werden kann, sieht eine RDF-Beschreibung dieser Seite etwa so aus:
<RDF>
<Description about="http://www.cafeconleche.org/examples/impressionists.xml">
<title>Impressionistische Gemälde</title>
<creator>Elliotte Rusty Harold</creator>
<description>Eine Liste berühmter impressionistischer Gemälde, geordnet nach Maler und Erstellungsdatum</description>
<date>2000-08-22</date>
</Description>
</RDF>
Wir haben hier die Elemente Description und RDF aus RDF und die Elemente title, creator, description und date aus dem Dublin Core genommen. Bei diesen Namen haben wir keine andere Wahl; sie wurden durch ihre eigenen Spezifikationen so festgelegt. Wollen Sie, dass Software, die RDF und den Dublin versteht, auch Ihre Dokumente versteht, dann müssen Sie diese Namen verwenden. Das folgende Beispiel kombiniert diese Beschreibung mit der eigentlichen Liste der Gemälde.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<catalog>
<RDF>
<Description about="http://cafeconleche.org/examples/impressionists.xml">
<title>Impressionistische Gemälde</title>
<creator>Elliotte Rusty Harold</creator>
<description>Eine Liste berühmter impressionistischer Gemälde, geordnet nach Maler und Erstellungsdatum</description>
<date>2000-08-22</date>
</Description>
</RDF>
<painting>
<title>Memory of the Garden at Etten</title>
<artist>Vincent Van Gogh</artist>
<date>November 1888</date>
<description>Zwei Frauen schauen nach links. Eine dritte arbeitet in ihrem Garten.</description>
</painting>
<painting>
<title>The Swing</title>
<artist>Pierre-Auguste Renoir</artist>
<date>1876</date>
<description>Ein junges Mädchen auf einer Schaukel. Zwei Männer und ein kleines Kind schauen zu.</description>
</painting>
<!-- Viele weitere Gemälde... -->
</catalog>
Code-Beispiel: Eine Liste mit Gemälden einschließlich der Kataloginformationen über die Liste
Jetzt haben wir ein Problem. Einige Elemente wurden in verschiedenen Teilen des Dokuments mit unterschiedlichen Bedeutungen versehen. Das Element title wird sowohl für den Titel der Seite als auch für den Titel eines Gemäldes verwendet. Das Element date dient als Angabe für das Erstellungsdatum der Seite sowie für die Entstehungsdaten der Gemälde. Ein description-Element beschreibt Seiten, während ein anderes Gemälde beschreibt.
Das bringt alle möglichen Probleme mit sich. Eine Validierung ist schwierig, weil die Katalog- und Dublin Core-Elemente mit denselben Namen unterschiedliche Inhaltsspezifizierungen besitzen. Webbrowser möchten vielleicht die Seitenbeschreibung verbergen, während die Gemäldebeschreibung angezeigt werden soll, allerdings können nicht alle Stylesheet-Sprachen zwischen diesen beiden Beschreibungen unterscheiden. Verarbeitungsprogramme verstehen möglicherweise das Datumsformat, das im date-Element des Dublin Core verwendet wird, nicht jedoch das freiere Format im date-Element des Gemäldes.
Wir könnten die Elementnamen aus unserem Vokabular verändern und painting_title anstelle von title benutzen, date_painted anstelle von date usw. Das ist jedoch unbequem, falls Sie bereits viele Dokumente mit der alten Version des Vokabulars ausgezeichnet haben. Und in manchen Fällen ist es gar nicht möglich, insbesondere wenn die Namenskonflikte nicht zwischen Ihrem eigenen und einem Standardvokabular aufgetreten sind, sondern zwischen Standardvokabularen. Zum Beispiel lässt sich zwischen RDF und Dublin Core wegen der Elemente Description und description ein Konflikt quasi nicht vermeiden.
In anderen Fällen treten zwar vielleicht keine Namenskonflikte auf, es kann aber durchaus immer noch wichtig sein, dass die Software schnell und eindeutig feststellen kann, von welcher XML-Anwendung ein bestimmes Element oder Attribut stammt. Zum Beispiel muss ein XSLT-Prozessor zwischen XSLT-Anweisungen und reinen Ergebnisbaumelementen unterscheiden können.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de