Namensraum (XML)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springenZur Suche springen

XML-Namensräume (englisch „XML namespaces“) werden benutzt, um Elemente und Attribute in einemXML-Dokument eindeutig zu identifizieren und um in einem einzelnen Dokument mehrere XML-Sprachen mischen zu können. Ihre Funktionsweise ist mit Vorwahlen bei Telefonnummern zu vergleichen.

Zum Beispiel beschreibt das <p>-Element inXHTML einen Absatz; in einer XML-Sprache für eine Personendatenbank könnte <p> ein Element für eine Person darstellen.Namensräume erlauben, diese Elemente eindeutig zu unterscheiden.

Der Namensraum-Mechanismus für XML-Daten wurde vomW3-Konsortium entwickelt und liegt seit dem 8. Dezember 2009 in der dritten Version sowohl für XML 1.0 als auch für XML 1.1 vor. Die zweite Version wurde am 16. August 2006 veröffentlicht. Die erste Version der Spezifikation datiert auf den 14. Januar 1999, also etwa ein Jahr nachdem die XML-Spezifikation verabschiedet wurde (aus diesem Grund findet man z. B. in der Empfehlung zuMathML 1.0 noch keine Namensraumangabe).

Inhaltsverzeichnis

Struktur von XML-Namensräumen

[Bearbeiten |Quelltext bearbeiten]

Namensräume werden durchURIs dargestellt, meistens also durch normale Webadressen. Dabei ist zu beachten, dass die entsprechende Adressenicht existieren muss. Sie kann beliebig definiert werden. Wichtig ist zudem, dass bei Namensraumangaben auf Groß- und Kleinschreibung, auch im Host-Teil, sowie eine eventuelleURL-Kodierung, z. B.%C3%A4 stattä, geachtet werden muss.

Wenn eineURL als Namensraum verwendet wird, ist es jedoch meistens sinnvoll, unter dieser Adresse zusätzliche Informationen zu der XML-Sprache anzubieten, z. B. eineDokumenttypdefinition (DTD) oder einXML-Schema.

Namensräume verwenden

[Bearbeiten |Quelltext bearbeiten]

Für Namensräume wird das Attributxmlns (fürengl.:XMLNamespace) verwendet:

<htmlxmlns="http://www.w3.org/1999/xhtml">...restlicheHTML-Datei</html>

Das <html> Element sowie alle seine Kindelemente, also Elemente innerhalb von<html>...</html>, gehören hier zum NamensraumW3C XHTML namespace[1]. Namensräume können auch verschachtelt werden:

<htmlxmlns="http://www.w3.org/1999/xhtml">...XHTML-Elemente<mathxmlns="http://www.w3.org/1998/Math/MathML">...MathML-Elemente</math>...XHTML-Elemente</html>

Präfixe

[Bearbeiten |Quelltext bearbeiten]

Zusätzlich zur oben beschriebenen Methode existiert einPräfix-Mechanismus: Elemente können durch eine Zeichenkette, die durch einen Doppelpunkt vom Elementnamen getrennt wird, in einen beliebigen Namensraum gesetzt werden. Das Präfix muss keinerlei Beziehung zum Namensraum haben, jedoch zuerst an den Namensraum „gebunden“ werden:

<htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:m="http://www.w3.org/1998/Math/MathML">...XHTML-Elemente<m:math>...MathML-Elementemitm:-Präfix</m:math>...XHTML-Elemente</html>

In diesem Beispiel wird im <html>-Element mit der Angabexmlns:m="..." das Präfixm an den MathML-Namensraum gebunden. Danach können Elemente durch die Angabe

<m:Elementname>...</m:Elementname>

in den entsprechenden Namensraum gesetzt werden.

Den eigentlichen Elementnamen, also den Teil ohne führendes Präfix und Doppelpunkt, nennt man denlokalen Namen des Elements. Der vollständige oderqualifizierte Name des Elementes (kurzQName) besteht aus Namespace-URI und lokalem Namen, das Präfix kann somit beliebig gewählt werden.

Das Präfix xmlns

[Bearbeiten |Quelltext bearbeiten]

Technisch gesehen ist ein Konstrukt der Artxmlns:m ein Attribut mit einem Namensraumpräfix. Es existiert in dem Fall der Verwendung von Präfixen also ein zusätzlicher Namensraum

xmlns:xmlns="http://www.w3.org/2000/xmlns/"

im Dokument. Dieser wird jedoch nicht explizit angegeben, sondern von XML-verarbeitenden Programmen vorausgesetzt. Wie das folgendexml ist auch dieses Präfix fest mit dem oben angegebenen Namensraum verknüpft.

Das Präfix xml

[Bearbeiten |Quelltext bearbeiten]

XML-Elemente dürfen nicht mit der Zeichenkettexml anfangen. Daraus folgt, dass auch XML-Namensraum-Präfixe nicht mitxml anfangen dürfen. Tatsächlich ist anxml ein Namensraum für Elemente und Attribute gebunden, den das W3-Konsortium für Erweiterungen von XML reserviert.

Der URI dieses Namensraums isthttp://www.w3.org/XML/1998/namespace[2]. Er muss nicht explizit angegeben werden, sondern wird von den verarbeitenden Programmen selbst eingefügt.

Derzeit existieren folgende Attribute mit Präfixxml (Stand April 2010):

AttributBedeutungBeispiel
xml:langSprachangaben zum Inhalt. DurchISO 3166 undISO 639 definiert. Werte: 2-stelliger Sprachcode optional gefolgt von Bindestrich sowie großgeschriebenem 2-stelligen Ländercode. Ausnahme: nicht-standardisierte Länder- und Sprachcodes.
<pxml:lang="de">InhaltindeutscherSprache,Land:undefiniert</p><pxml:lang="en-US">InhaltinenglischerSprache,Land:VereinigteStaaten</p><pxml:lang="sindarin-MITTELERDE">Inhaltingrauelbisch,Land:Mittelerde</p>
xml:spaceDarf die zwei Wertepreserve unddefault annehmen. Der Wertpreserve bedeutet, dass Leerzeichen und Zeilenumbrüche genau so angezeigt werden, wie sie im Quelltext der Datei stehen (wie beim <pre>-Element in HTML). Der Wertdefault bedeutet, dass aufeinanderfolgende Leerzeichen und Zeilenumbrüche zu einem einzigen Leerzeichen zusammengefasst werden (Voreinstellung).
<divxml:space="default">ASCII-Art:<pxml:space="preserve">¦\_,,,---,,_/,`.-'`'-.;-;;,_¦,4-))-,_..;\(`'-''---(_/--'`-'\_)fL</p></div>
xml:baseBasis-URL, von der aus alle relativen Links in dem Element ausgewertet werden.
<h3>Wikipedia-Links</h3><ulxml:base="http://de.wikipedia.org/wiki/"><li><ahref="XML">XML</a></li><li><ahref="SGML">SGML</a></li></ul>
xml:idDokumentweit eindeutiger Bezeichner für das Element
<pxml:id="Kapitel_1">EinAbsatz</p><p><ahref="#Kapitel_1">LinkzumobigenAbsatz</a></p>

Attribute

[Bearbeiten |Quelltext bearbeiten]

Attribute in XML sind sogenannteassoziierte Knoten. Sie werden nicht wie normale Kindelemente eines Elements behandelt. Bei Namensräumen heißt das, dass Attribute nicht im Namensraum des Elements stehen, in dem sie notiert sind, sondern vorgabemäßig im Null-Namensraum.

Es gibt Fälle, in denen man dies explizit ändern will. Beispielsweise werden Links in SVG von der SpracheXLink übernommen, die ein Set von Attributen bereitstellt, mit denen Links beschrieben werden können. In diesem Fall müssen die einzelnen Attribute mit einem Präfix versehen werden:

<svgxmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink"><axlink:href="grafik2.svg">LinkzuGrafik2</a></svg>

Es gibt für Attribute keine Möglichkeit, sie ohne Präfix in einen bestimmten Namensraum zu setzen.

Beispiel

[Bearbeiten |Quelltext bearbeiten]

Im folgenden Beispiel werden Elemente beziehungsweise Attribute aus den XML-SprachenXHTML (blau),MathML (rot),SVG (grün) und ohne Namensraum (schwarz) gemischt. Insbesondere ist zu beachten, dass das Attributxmlns selbst in keinem Namensraum liegt, sein Wert ist lediglich eingefärbt, um anzuzeigen, welche Elemente von ihm betroffen sind.

<htmlxmlns="http://www.w3.org/1999/xhtml"      xmlns:svg="http://www.w3.org/2000/svg">  <head>    <title>Beispiel-Datei mit mehreren Namensräumen</title>  </head>  <body>    <h1>Eine Mathe-Formel:</h1><mathxmlns="http://www.w3.org/1998/Math/MathML">      <mi>x</mi><mo>=</mo><mn>2</mn>    </math>    <p>Und noch ein kleines Bild dazu:</p><svg:svg>      <svg:rectx="0" y="0" width="10" height="10" />      <svg:text>        <svg:tspan>Eine Formel in der Grafik:</svg:tspan>        <svg:tspan><mathxmlns="http://www.w3.org/1998/Math/MathML">            <mi>y</mi><mo>=</mo><mn>1</mn>          </math>        </svg:tspan>      </svg:text>    </svg:svg>    <p>Eine SVG Grafik kann auch ohne Präfix verwendet werden:</p><svgxmlns="http://www.w3.org/2000/svg">      <circle svg:cx="10" svg:cy="10" svg:r="5" svg:fill="red" />    </svg>  </body></html>

Namensraum-Notation nach James Clark

[Bearbeiten |Quelltext bearbeiten]

Namensraum-Präfixe können frei gewählt werden. In manchen Kontexten, z. B. wenn man nur einen kleinen Ausschnitt eines komplexeren XML-Dokuments sieht, kann diese Beliebigkeit zu Missverständnissen führen.James Clark hat deshalb in seinem ArtikelXML Namespaces[3] eine andere Notation für Elementnamen eingeführt, die sich in der Dokumentation von XML-Daten steigender Beliebtheit erfreut.

Ein einfaches Beispiel könnte demnach so aussehen:

<{http://www.w3.org/1999/xhtml}html><{http://www.w3.org/2000/svg}svg></{http://www.w3.org/2000/svg}svg></{http://www.w3.org/1999/xhtml}html>

Elemente im Fließtext werden dann z. B. als{http://www.w3.org/1999/xhtml}html notiert.

Der URI eines Namensraums wird dabei bei jedem Element in geschweiften Klammern davor gesetzt. Dadurch wird das Element mit seinem Namensraum eindeutig charakterisiert. Dies ist der große Vorteil dieser auf den ersten Blick etwas umständlich erscheinenden Methode.

Zu beachten ist, dass diese Notationkein gültiges XML darstellt. Sie dient ausschließlich zur Veranschaulichung und Dokumentation von Namensräumen.

Schwierigkeiten mit XML-Namensräumen

[Bearbeiten |Quelltext bearbeiten]

Doppelpunkte in Elementnamen

[Bearbeiten |Quelltext bearbeiten]

XML-verarbeitende Programme werden in zwei Gruppen eingeteilt:

  • Programme, die Namensräume beachten und verarbeiten
  • Programme, die Namensräume nicht beachten

Der wichtigste Unterschied ist der Umgang mit Doppelpunkten in Elementnamen. Wird das Dokument von einem Namensraum-sensiblen Programm verarbeitet, müssen alle Doppelpunkte als Trenner von Präfixen und Elementnamen interpretiert werden – anderenfalls erzeugt das Programm einen Fehler. Programme, die nicht nach Namensräumen unterscheiden, führen diese Überprüfung nicht durch.

In XML selbst ist es erlaubt, Elemente zu definieren, die den Doppelpunkt bereits im Elementnamen tragen. Dies wird jedoch ausdrücklich nicht empfohlen. Dateien, die Namensräume verwenden, sind dadurch jedoch wohlgeformte XML-Dokumente.

URLs als Namensräume

[Bearbeiten |Quelltext bearbeiten]

Es ist eine regelmäßige Frage in entsprechenden Foren, was man denn nun unter der URL hinterlegen soll, die als Namensraum-Definition verwendet wird. Die einfache Antwort ist, dass dort nichts existieren muss. URLs, und allgemeiner URIs, werden als Definition verwendet, weil sie gewisse Hinweise liefern können, von wem die "Sprache" entwickelt wurde, und weil die entsprechenden Personen oder Organisationen eine gewisse zumindest symbolische Kontrolle über einen bestimmten URL-Bereich (z. B. http://www.w3.org/… für das W3-Konsortium) besitzen.

Dokumenttyp-Definitionen und Namensräume

[Bearbeiten |Quelltext bearbeiten]

XML-Sprachen werden heute noch häufig mit sogenannten Dokumenttyp-Definitionen definiert. Diese DTDs, die noch aus derSGML-Zeit stammen, waren nie dazu bestimmt, Namensräume zu beachten (DTDs wurden in den 1980ern entwickelt). Es ist sehr umständlich und zum Teil unmöglich, z. B. bei beliebigen Präfixen oder inXSLT, eine allgemein gültige DTD für eine XML-Sprache oder ein Dokument aufzustellen.

Ein Versuch, dies für XHTML, MathML und SVG in einer Datei dennoch zu tun, findet man beim W3-Konsortium.[4] Dort wird mittels im Nachhinein definierbarer Entitäten die Möglichkeit geschaffen, Präfixe für jedes Dokument neu zu bestimmen.

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. W3C XHTML namespace (englisch)
  2. W3C XML namespace (englisch)
  3. XML Namespaces nach James Clark (englisch)
  4. An XHTML + MathML + SVG Profile (englisch)

Weblinks

[Bearbeiten |Quelltext bearbeiten]
VD
Standards desWorld Wide Web Consortiums (W3C)
Empfehlungen

ActivityPub |ARIA |Canonical XML |CDF |CSS |DOM |Geolocation API |HTML |HTML5 |InkML |ITS |JSON-LD |MathML |OWL |P3P |PLS |PNG |RDF |RDF-Schema |RIF |SCXML |SISR |SKOS |SMIL |SOAP |SRGS |SSML |SVG |SPARQL |Timed Text |Turtle |VoiceXML |WSDL |XForms |XHTML |XHTML+RDFa |XInclude |XLink |XML |XML Base |XML-Encryption |XML Events |XML Information Set |XML Namespace |XML Schema |XML Signature |XPath |XPointer |XProc |XQuery |XSL |XSL-FO |XSLT(Elemente)

Arbeitsentwürfe
und Kandidaten

CCXML |CURIE |SMIL Timesheets |sXBL |WICD |XFrames |XBL | XHTML+MathML+SVG |XMLHttpRequest

Anmerkungen

XAdES |XFDL |XHTML+SMIL |XUP

Richtlinien

Web Content Accessibility Guidelines |Multimodal Interaction Activity |Markup Validation Service

Initiativen

Web Accessibility Initiative

Abgerufen von „https://de.wikipedia.org/w/index.php?title=Namensraum_(XML)&oldid=249446529
Kategorie: