Wir betrachten Anwendungen der Extensible Markup Language (XML), in denen ein einzelnes XML-Dokument Elemente und Attribute (hier "Markup-Vokabular" genannt) enthalten kann, die für verschiedene Software-Module definiert sind und von verschiedenen Software-Modulen verwendet werden. Eine Motivation dafür ist Modularität; wenn ein Markup-Vokabular existiert, das gut verstanden wird und für welches nützliche Software vorhanden ist, ist es besser, dieses Markup wieder zu verwenden als es neu zu erfinden.
In Dokumenten, die unterschiedliches Markup-Vokabular enthalten, können Probleme mit der Erkennung und Kollisionen auftreten. Software-Module müssen die Tags und Attribute erkennen, für deren Verarbeitung sie geschaffen wurden, auch im Fall einer Kollision, wenn Markup, das für eine andere Software geschrieben wurde, die gleichen Elementtypen und Attributnamen verwendet.
Diese Überlegungen erfordern, dass Dokumentkonstrukte, deren Geltungsbereich über den des beinhaltenden Dokuments hinausgeht, einzigartige Namen haben sollten. Diese Spezifikation beschreibt einen Mechanismus, XML-Namensräume, der diese Anforderungen erfüllt.
[Definition: Ein XML-Namensraum ist eine Zusammenstellung von Namen, identifiziert durch einen URI-Verweis [RFC2396], die in XML-Dokumenten als Elementtypen und Attributnamen verwendet werden.] XML-Namensräume unterscheiden sich von den "Namensräumen", die normalerweise im Computerbereich verwendet werden, in dem Maße, dass die XML-Version eine interne Struktur hat und im mathematischen Sinne keine Zusammensetzung ist. Dieses Thema wird in A Die interne Struktur von XML-Namensräumen besprochen.
[Definition: URI-Verweise, die Namensräume identifizieren, werden als identisch angesehen, wenn sie Zeichen für Zeichen genau gleich sind.] Beachten Sie, dass URI-Verweise, die in diesem Sinne nicht identisch sind, trotzdem die gleiche Funktionalität besitzen können. Zum Beispiel seien URI-Verweise genannt, die sich nur in der Groß- und Kleinschreibung unterscheiden, oder externe Entities, die unterschiedliche effektive Base-URIs haben.
Namen aus XML-Namensräumen können als qualifizierte Namen erscheinen, die einen einzelnen Doppelpunkt enthalten, der den Namen in ein Namensraum-Präfix und einen lokalen Teil aufteilt. Das Präfix, das Platzhalter für einen URI-Verweis ist, wählt einen Namensraum aus. Die Kombination aus dem allumfassend verwalteten URI-Namensraum und dem eigenen Namensraum des Dokuments erzeugt einen Identifier, der einzigartig ist. Mechanismen für die Präfixbereiche und Voreinstellungen werden gegeben.
URI-Verweise können Zeichen enthalten, die nicht in Namensraumnamen erlaubt sind, also nicht direkt als Namensraum-Präfixe benutzt werden können. Deshalb fungiert das Namensraum-Präfix als Proxy für einen URI-Verweis. Eine Attribut-basierte Syntax, wie unten beschrieben, wird verwendet, um die Verbindung zwischen dem Namensraum-Präfix und dem URI-Verweis zu deklarieren; Software, die dieser Spezifikation gerecht wird, muss diese Deklarationen und Präfixe erkennen und verarbeiten.
1.1 Eine Bemerkung zur Notation und zur VerwendungBeachten Sie, dass viele Nicht-Terminale in den Produktionen dieser Spezifikation nicht hier, sondern in der XML-Spezifikation [XML] definiert sind. Wenn hier definierte Nicht-Terminale den gleichen Namen haben wie Nicht-Terminale, die in der XML-Spezifikation definiert sind, unterliegen die hiesigen Produktionen in allen Fällen einer Untermenge der Strings, denen die entsprechenden Produktionen dort unterliegen würden.
In den Produktionen dieses Dokuments ist NSC
ein Namensraumzwang, also eine der Regeln, die von Dokumenten befolgt werden müssen, die konform zu dieser Spezifikation sind.
Beachten Sie, dass alle Internet-Domain-Namen, die in diesen Beispielen verwendet werden, mit Ausnahme von w3.org
zufällig ausgewählt sind und nicht so verstanden werden sollen, als würden sie Inhalte importieren.
[Definition: Ein Namensraum wird deklariert, indem reservierte Attribute verwendet werden. Ein Attributname muss entweder xmlns sein oder es muss ein Präfix xmlns: verwendet werden. Diese Attribute müssen, wie jedes andere XML-Attribut, direkt oder durch eine Voreinstellung zur Verfügung gestellt werden. ]
Attributnamen für Namensraum-Deklarationen[Definition: Der Wert des Attributs, ein URI-Verweis, ist der Namensraumname, der den Namensraum identifiziert.] Der Namensraumname sollte, um seinen Zweck zu erfüllen, einzigartig und dauerhaft sein. Es ist nicht notwendig, dass er direkt für den Empfang eines Schemas (sofern eines existiert) verwendet werden kann. Uniform Resource Names [RFC2141] sind ein Beispiel für eine Syntax, die mit diesen Zielen entwickelt wurde. Es soll jedoch erwähnt werden, dass auch normale URLs so verwendet werden können, dass sie diesen gleichen Vorstellungen entsprechen.
[Definition: Entspricht der Attributname dem PrefixedAttName, gibt der NCName das Namensraum-Präfix an, das verwendet wird, um die Element- und Attributnamen mit dem Namensraumnamen zu verbinden, der im Attributwert des mit der Deklaration verbundenen Elements angegeben ist.] In solchen Deklarationen sollte der Namensraumname nicht leer sein.
[Definition: Entspricht der Attributname dem DefaultAttName, dann ist der Namensraumname im Attributwert der Name des voreingestellten Namensraums im Geltungsbereich des mit der Deklaration verbundenen Elements.] In solch einer voreingestellten Deklaration kann der Attributwert leer sein. Mehr zu voreingestellten Namensräumen und dem Überschreiben von Deklarationen wird in 5 Elementen und Attributen Namensräume zuweisen besprochen.
Das Beispiel einer Namensraum-Deklaration, die das Präfix edi mit dem Namensraumnamen http://ecommerce.org/schema
verbindet:
<x xmlns:edi='http://ecommerce.org/schema'> <!-- Das "edi"-Präfix wird für das Element "x" und Inhalt an http://ecommerce.org/schema gebunden. --> </x>
Namensraumzwang: Führendes "XML"
Präfixe, die mit den drei Buchstaben x
, m
, l
beginnen, in jeglicher Kombination von Groß- und Kleinschreibung, sind für die Verwendung von XML oder XML-verwandten Spezifikationen reserviert.
[Definition: In XML-Dokumenten, die konform zu dieser Spezifikation sind, können einige Namen (Konstrukte, die dem Nicht-Terminal Name entsprechen) als qualifizierte Namen vergeben werden, die wie folgt definiert sind:
Qualifizierter Name]
Das "Prefix" stellt den Part des Namensraum-Präfixes des qualifizierten Namens zur Verfügung und muss mit einem Namensraum-URI-Verweis durch eine Namensraum-Deklaration verbunden werden. [Definition: Der "LocalPart" stellt den lokalen Teil des qualifizierten Namens zur Verfügung.]
Beachten Sie, dass das Präfix nur als Platzhalter für den Namensraumnamen steht. Anwendungen sollten den Namensraumnamen verwenden, nicht das Präfix, wenn sie Namen erstellen, deren Geltungsbereich über den des beinhaltenden Dokuments hinausgeht.
4 Verwendung von qualifizierten NamenIn XML-Dokumenten, die konform zu dieser Spezifikation sind, werden Elementtypen als qualifizierte Namen wie folgt gegeben:
ElementtypenEin Beispiel eines qualifizierten Namens, der als Elementtyp dient:
<x xmlns:edi='http://ecommerce.org/schema'> <!-- Der Namensraum des Elements 'preis' ist http://ecommerce.org/schema --> <edi:preis einheit='Euro'>32.18</edi:preis> </x>
Attribute sind entweder Namensraum-Deklarationen oder ihre Namen werden als qualifizierte Namen angegeben:
AttributEin Beispiel eines qualifizierten Namens, der als Attributname dient:
<x xmlns:edi='http://ecommerce.org/schema'> <!-- Der Namensraum des Attributs 'taxClass' ist http://ecommerce.org/schema --> <lineItem edi:taxClass="exempt">Babynahrung</lineItem> </x>
Namensraumzwang: Deklariertes Präfix
Das Namensraum-Präfix muss, es sei denn, es ist xml
oder xmlns
, in einem Namensraum-Deklarations-Attribut deklariert worden sein, entweder im Start-Tag des Elements, in dem das Präfix benutzt wird, oder in einem Elternelement (z.B. in einem Element, in dessen Inhalt das vorangestellte Markup (Präfix) auftaucht). Das Präfix xml
ist laut Definition an den Namensraumnamen http://www.w3.org/XML/1998/namespace
gebunden. Das Präfix xmlns
wird nur für Namensraumeinbindungen verwendet und ist selbst nicht an irgendeinen Namensraum gebunden.
Dieser Zwang kann in der Praxis zu Schwierigkeiten führen, wenn die Namensraum-Deklaration nicht direkt im XML-Dokument-Entity angegeben wird, sondern über einen voreingestellten Wert in einem externen Entity. Diese Deklarationen können eventuell nicht von Software verarbeitet werden, die auf nicht validierenden XML-Prozessoren aufbaut. Viele XML-Anwendungen, vermutlich auch Namensraum-sensitive, versäumen es, validierende Prozessoren zu fordern. Um eine korrekte Zusammenarbeit mit solchen Anwendungen zu gewährleisten, müssen Namensraum-Deklarationen entweder direkt oder über voreingestellte Attribute im internen Subset der DTD angegeben werden.
Elementnamen und Attributtypen werden auch als qualifizierte Namen angegeben, wenn sie in Deklarationen innerhalb der DTD auftauchen:
Qualifizierte Namen in Deklarationen 5 Elementen und Attributen Namensräume zuweisen 5.1 Geltungsbereich für NamensräumeDie Namensraum-Deklaration gilt für das Element, in dem sie angegeben ist, und für alle Elemente im Inhalt dieses Elements, es sei denn, sie wird durch eine andere Namensraum-Deklaration mit dem gleichen NSAttName-Teil überschrieben:
<?xml version="1.0"?> <!-- alle Elemente hier sind explizit im HTML-Namensraum --> <html:html xmlns:html='http://www.w3.org/TR/REC-html40'> <html:head><html:title>Frobnostication</html:title></html:head> <html:body><html:p>Moved to <html:a href='http://frob.com'>here.</html:a></html:p></html:body> </html:html>
Mehrere Namensraum-Präfixe können als Attribute eines einzelnen Elements deklariert werden, wie in diesem Beispiel beschrieben:
<?xml version="1.0"?> <!-- beide Namensraum-Präfixe sind durchgängig verfügbar --> <bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <bk:title>Cheaper by the Dozen</bk:title> <isbn:number>1568491379</isbn:number> </bk:book>5.2 Voreinstellung des Namensraums
Ein voreingestellter Namensraum soll für das Element gelten, in dem er deklariert ist (sofern das Element kein Namensraum-Präfix hat), und für alle Elemente ohne Präfix im Inhalt des Elements. Wenn der URI-Verweis in der voreingestellten Namensraum-Deklaration leer ist, sollten Elemente ohne Präfix im Geltungsbereich der Deklaration so angesehen werden, als wären sie in keinem Namensraum. Beachten Sie, dass voreingestellte Namensräume nicht direkt für Attribute gelten.
<?xml version="1.0"?> <!-- Elemente sind im HTML-Namensraum, in diesem Fall voreingestellt --> <html xmlns='http://www.w3.org/TR/REC-html40'> <head><title>Frobnostication</title></head> <body><p>Moved to <a href='http://frob.com'>here</a>.</p></body> </html>
<?xml version="1.0"?> <!-- Elementtypen ohne Präfix gehören zu "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> </book>
Ein umfassenderes Beipiel für Namensraumgeltungsbereiche:
<?xml version="1.0"?> <!-- anfangs ist der voreingestellte Namensraum "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- HTML wird zum voreingestellten Namensraum für einige Kommentare --> <p xmlns='urn:w3-org-ns:HTML'> This is a <i>funny</i> book! </p> </notes> </book>
Der voreingestellte Namensraum kann auf einen leeren String gesetzt werden. Das hat innerhalb des Geltungsbereichs der Deklaration den gleichen Effekt, als wäre kein voreingestellter Namensraum gegeben.
<?xml version='1.0'?> <Beers> <!-- der voreingestellte Namensraum ist der von HTML --> <table xmlns='http://www.w3.org/TR/REC-html40'> <th><td>Name</td><td>Origin</td><td>Description</td></th> <tr> <!-- kein voreingestellter Namensraum in Tabellenzellen --> <td><brandName xmlns="">Huntsman</brandName></td> <td><origin xmlns="">Bath, UK</origin></td> <td> <details xmlns=""><class>Bitter</class><hop>Fuggles</hop> <pro>Wonderful hop, light alcohol, good summer beer</pro> <con>Fragile; excessive variance pub to pub</con> </details> </td> </tr> </table> </Beers>5.3 Einzigartigkeit von Attributen
In XML-Dokumenten, die konform zu dieser Spezifikation sind, sollte kein Tag zwei Attribute enthalten, die
identische Namen haben, oder
qualifizierte Namen mit dem gleichen lokalen Namensteil und mit Präfixen, die mit identischen Namensraumnamen verbunden sind.
Zum Beispiel ist jedes Einzelne der Start-Tags bad
nicht erlaubt:
<!-- http://www.w3.org ist an n1 und n2 gebunden --> <x xmlns:n1="http://www.w3.org" xmlns:n2="http://www.w3.org" > <bad a="1" a="2" /> <bad n1:a="1" n2:a="2" /> </x>
Jedoch ist jedes der folgenden Start-Tags good
erlaubt. Das zweite Start-Tag ist zulässig, weil der voreingestellte Namensraum nicht für Attribute gilt:
<!-- http://www.w3.org ist an n1 gebunden und voreingestellt --> <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" b="2" /> <good a="1" n1:a="2" /> </x>6 Konformität von Dokumenten
In XML-Dokumenten, die konform zu dieser Spezifikation sind, müssen Elementtypen und Attributnamen der Bauanleitung für QName entsprechen und die Namensraumzwänge erfüllen.
Ein XML-Dokument ist konform zu dieser Spezifikation, wenn alle anderen Tokens im Dokument, die aus Gründen der XML-Konformität der XML-Bauanleitung für Name entsprechen müssen, auch der in dieser Spezifikation gegebenen Bauanleitung für NCName entsprechen.
Konformität bedeutet für ein Dokument, dass
alle Elementtypen und Attributnamen entweder keinen oder einen Doppelpunkt enthalten,
Entity-Namen, PI-Ziele oder Notations-Namen keinen Doppelpunkt enthalten.
Streng genommen sind Attributwerte, die als ID, IDREF(S), ENTITY(IES) und NOTATION deklariert sind, ebenfalls Namen und sollten keine Doppelpunkte enthalten. Jedoch ist der deklarierte Typ eines Attributwerts nur Prozessoren bekannt, welche die Markup-Deklarationen lesen. Ein Beispiel sind validierende Prozessoren. Deshalb ist nicht sicher, ob der Inhalt des Attributwerts auf Konformität zu dieser Spezifikation überprüft worden ist, auch wenn der Gebrauch von validierenden Prozessoren spezifiziert ist.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.3