Namensräume in XML
Deutsche Übersetzung
18. Juni 2001
Bei diesem Dokument handelt es sich um eine Übersetzung eines W3C-Textes. Dieser Text ist urheberrechtlich geschützt; bitte beachten Sie die nachfolgenden Hinweise des Originaldokuments. Die Rechte an der Übersetzung liegen beim Übersetzer. Die Übersetzung hat keine durch das W3C legitimierte, normative Wirkung. Das einzige maßgebliche Dokument ist das englische Original.
Bitte senden Sie Fehler und Korrekturen zur deutschen Fassung an den Übersetzer.
Kommentare des Übersetzers, die als solche gekennzeichnet sind, unterliegen dem Urheberrecht des Übersetzers. Sie sind nicht Bestandteil des Ursprungsdokuments.
Copyright © 1999 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use, and software licensing rules apply.
XML-Namensräume bieten eine einfache Möglichkeit, um Element- und Attributnamen, die in "Extensible Markup Language"-Dokumenten verwendet werden können, eindeutig zu benennen. Die Element- und Attributnamen werden mit Namensräumen verknüpft, die durch URI-Verweise identifiziert werden.
Dieses Dokument wurde von Mitgliedern des W3C und anderen interessierten Gruppen überprüft und vom Direktor als W3C-Empfehlung gebilligt. Es ist ein stabiles Dokument und darf als Referenzmaterial verwendet werden oder als normative Referenz von anderen Dokumenten zitiert werden. Die Intention des W3C bei der Erstellung dieser Empfehlung ist es, das Interesse an dieser Spezifikation zu wecken und ihre weitläufige Verbreitung zu fördern. Dies erhöht die Funktionalität und die Interoperabilität des Webs.
Die Liste der bekannten Fehler in dieser Spezifikation ist verfügbar unter http://www.w3.org/XML/xml-names-19990114-errata.
Bitte senden Sie Berichte über Fehler in diesem Dokument an [email protected].
1 Beweggründe und Überblick
1.1 Eine Bemerkung zur Notation und zur Verwendung
2 Namensräume deklarieren
3 Qualifizierte Namen
4 Verwendung von qualifizierten Namen
5 Elementen und Attributen Namensräume zuweisen
5.1 Geltungsbereich für Namensräume
5.2 Voreinstellung des Namensraums
5.3 Einzigartigkeit von Attributen
6 Konformität von Dokumenten
A Die interne Struktur von XML-Namensräumen (nicht normativ)
A.1 Die Unzulänglichkeit der traditionellen Namensräume
A.2 XML-Namensraum-Partitionen
A.3 Erweiterte Elementtypen und Attributnamen
A.4 Einzigartige erweiterte Attributnamen
B Anerkennungen (nicht normativ)
C Verweise
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.
Beachten 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. ]
[1] | NSAttName |
::= | PrefixedAttName |
|
| DefaultAttName |
||||
[2] | PrefixedAttName |
::= | 'xmlns:' NCName |
|
[3] | DefaultAttName |
::= | 'xmlns' |
|
[4] | NCName |
::= | (Letter | '_')
(NCNameChar)* |
/* Ein XML-Name ohne den ":" */ |
[5] | NCNameChar |
::= | Letter
| Digit
| '.' | '-' | '_'
| CombiningChar
| Extender |
[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:
[6] | QName |
::= |
(Prefix ':')?
LocalPart |
[7] | Prefix |
::= | NCName |
[8] | LocalPart |
::= | NCName |
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.
In XML-Dokumenten, die konform zu dieser Spezifikation sind, werden Elementtypen als qualifizierte Namen wie folgt gegeben:
[9] | STag |
::= | '<' QName
(S
Attribute)*
S? '>'
|
[10] | ETag |
::= | '</' QName
S? '>' |
[11] | EmptyElemTag |
::= | '<' QName
(S
Attribute)*
S? '/>' |
Ein 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:
[12] | Attribute |
::= | NSAttName
Eq
AttValue |
| QName Eq
AttValue |
Ein 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:
[13] | doctypedecl |
::= | '<!DOCTYPE' S
QName (S
ExternalID)?
S? ('['
(markupdecl
| PEReference
| S)*
']'
S?)? '>' |
[14] | elementdecl |
::= | '<!ELEMENT' S
QName
S
contentspec
S? '>' |
[15] | cp |
::= | (QName
| choice
| seq)
('?' | '*' | '+')? |
[16] | Mixed |
::= | '(' S?
'#PCDATA'
(S?
'|'
S?
QName)*
S?
')*' |
| '(' S? '#PCDATA' S? ')'
|
|||
[17] | AttlistDecl |
::= | '<!ATTLIST' S
QName
AttDef*
S? '>' |
[18] | AttDef |
::= | S
(QName | NSAttName)
S AttType
S DefaultDecl |
Die 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>
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>
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>
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.
In der Computersprache bezieht sich der Begriff Namensraum normalerweise auf eine Zusammenstellung von Namen, z.B. einer Zusammenstellung ohne Duplikate. Werden die Namen in XML-Markup jedoch mit dieser Bedeutung von Namensraum verwendet, wird ein großer Teil ihres Potenzials vernachlässigt. Der vorrangige Nutzen solcher Namen in XML-Dokumenten ist die Indentifikation von logischen Strukturen in Dokumenten durch Software-Module wie Abfrage-Prozessoren, Style Sheet erkennende Render-Engines und Schema erkennende Validatoren. Erwägen Sie das folgende Beispiel:
<section><title>Book-Signing Event</title> <signing> <author title="Mr" name="Vikram Seth" /> <book title="A Suitable Boy" price="$22.95" /></signing> <signing> <author title="Dr" name="Oliver Sacks" /> <book title="The Island of the Color-Blind" price="$12.95" /></signing> </section>
In diesem Beispiel taucht der Name title
dreimal
im Markup auf und der Name alleine
bietet offensichtlich keine ausreichenden Informationen für
eine korrekte Verarbeitung durch ein Software-Modul.
Ein weiterer problematischer Bereich rührt her vom Gebrauch globaler Attribute, wie in diesem Beispiel gezeigt. Ein Ausschnitt aus einem XML-Dokument, welches mit Hilfe von CSS Style Sheets dargestellt werden soll:
<RESERVATION> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME> <SEAT CLASS="Y" HTML:CLASS="reallyImportant">33B</SEAT> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>
In diesem Fall unterscheidet sich das CLASS
-Attribut,
welches die Gebührengrundlage beschreibt und Werte wie "J", "Y"
und "C" annimmt, in allen semantischen Bereichen vom Attribut
HTML:CLASS
, welches verwendet wird, um syntaktische
Vielfalt in HTML zu simulieren, indem das begrenzte
Repertoire an Elementen durch Unterklassen umgangen wird.
XML 1.0 bietet keinen eigenen Weg, globale Attribute zu
deklarieren; Dinge wie das HTML-Attribut CLASS
sind nur durch ihre selbsterklärende Beschreibung und durch
die Interpretation durch HTML-Anwendungen global. Jedoch kann man
beobachten, dass solche Attribute, deren wichtiges unterscheidendes
Merkmal ist, dass ihre Namen einmalig sind, in vielen
unterschiedlichen Anwendungen vorkommen.
Um das Ziel zu unterstützen, dass sowohl qualifizierte als auch nicht qualifizierte Namen ihren beabsichtigten Zweck erfüllen, identifizieren wir die Namen, die in XML-Namensräumen vorkommen, als würden sie zu einem von mehreren auseinander genommenen traditionellen (z.B. set-strukturierten) Namensräumen gehören, welche sich Namensraum-Partitionen nennen. Diese Partitionen sind:
Alle Elementtypen in einem XML-Namensraum gehören zu dieser Partition. Jeder hat einen einzigartigen lokalen Teil; die Kombination aus Namensraumname und dem lokalen Teil identifiziert den Elementtyp eindeutig.
Diese Partition enthält die Namen aller Attribute, die für diesen Namensraum als global definiert sind. Die einzige geforderte Charakteristik des globalen Attributs ist, dass dessen Name einzigartig in der Global Attribute Partition ist. Diese Spezifikation macht keine Vorschriften in Bezug auf die geeignete Verwendung dieser Attribute. Die Kombination des Namensraumnamens mit dem Attributnamen identifiziert das globale Attribut eindeutig.
Jeder Typ in der All Element Types Partition hat einen zugeordneten Namensraum, in dem die Namen der nicht qualifizierten Attribute erscheinen, die für das Element vorgesehen sind. Dies ist ein traditioneller Namensraum, weil das Vorhandensein von mehreren gleichen Attributnamen in einem Element laut XML 1.0 verboten ist. Die Kombination des Attributnamens mit dem Typ und dem Namensraumnamen des Elements identifiziert jedes nicht qualifizierte Attribut.
In XML-Dokumenten, die konform zu dieser Spezifikation sind, sind die Namen aller qualifizierten Attribute der Global Attribute Partition zugewiesen und die Namen aller nicht qualifizierten Attribute sind der passenden Per-Element-Type Partion zugewiesen.
Um einfacher Regeln spezifizieren und Vergleiche machen zu können, definieren wir eine ein XML-Syntax ausgedrückte erweiterte Form für jeden Elementtyp und jeden Attributnamen in einem XML-Dokument.
[Definition: Ein
erweiterter Elementtyp wird als ein leeres XML-Element
des Typs ExpEType
ausgedrückt. Es hat ein erforderliches
type
-Attribut, das den LocalPart
des Typs angibt, und ein optionales ns
-Attribut, das, sofern das
Element qualifiziert ist, seinen
Namensraumnamen angibt.]
[Definition: Ein
erweiterter Attributname wird als ein leeres XML-Element
des Typs ExpAName
ausgedrückt. Es hat ein
erforderliches name
-Attribut, das den Namen angibt.
Sofern das Attribut global ist, hat es ein erforderliches
ns
-Attribut, das den
Namensraumnamen angibt; ansonsten
hat es ein erforderliches
Attribut elttype
, das den Typ des angehängten
Elements angibt und ein optionales Attribut elns
,
das den Namensraumnamen des angehängten Elements
angibt, sofern bekannt.]
Geringfügige Abweichungen der obigen Beispiele werden die Arbeitsweise der erweiterten Elementtypen und Attributnamen veranschaulichen. Den beiden folgenden Ausschnitten folgt jeweils eine Tabelle, welche die Erweiterung der Namen zeigt:
<!-- 1 --> <section xmlns='urn:com:books-r-us'> <!-- 2 --> <title>Book-Signing Event</title> <!-- 3 --> <signing> <!-- 4 --> <author title="Mr" name="Vikram Seth" /> <!-- 5 --> <book title="A Suitable Boy" price="$22.95" /> </signing> </section>
Die Namen würden wie folgt erweitert:
Line | Name | Expanded |
1 | section | <ExpEType type="section" ns="urn:com:books-r-us" /> |
2 | title | <ExpEType type="title" ns="urn:com:books-r-us" /> |
3 | signing | <ExpEType type="signing" ns="urn:com:books-r-us" /> |
4 | author | <ExpEType type="author" ns="urn:com:books-r-us" /> |
4 | title | <ExpAName name='title' eltype="author" elns="urn:com:books-r-us" /> |
4 | name | <ExpAName name='name' eltype="author" elns="urn:com:books-r-us" /> |
5 | book | <ExpEType type="book" ns="urn:com:books-r-us" /> |
5 | title | <ExpAName name='title' eltype="book" elns="urn:com:books-r-us" /> |
5 | price | <ExpAName name='price' eltype="book" elns="urn:com:books-r-us" /> |
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40"> <!-- 2 --> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME> <!-- 3 --> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT> <!-- 4 --> <HTML:A HREF='/cgi-bin/ResStatus'>Check Status</HTML:A> <!-- 5 --> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>
1 | RESERVATION | <ExpEType type="RESERVATION" /> |
2 | NAME | <ExpEType type="NAME" /> |
2 | HTML:CLASS | <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" /> |
3 | SEAT | <ExpEType type="SEAT" /> |
3 | CLASS | <ExpAName name="CLASS" eltype="SEAT" /> |
3 | HTML:CLASS | <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HTML:A | <ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HREF | <ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" /> |
5 | DEPARTURE | <ExpEType type="DEPARTURE" /> |
Die Zwänge, ausgedrückt in 5.3 Einzigartigkeit von Attributen oben, könnten einfach so implementiert werden, dass kein Element zwei Attribute haben darf, deren erweiterte Namen äquivalent sind, z.B. die gleichen Attributwert-Paare haben.
Diese Arbeit spiegelt die Beiträge vieler Personen wieder, insbesondere der Mitglieder der World Wide Web Consortium XML Working Group und der Special Interest Group sowie der Mitarbeiter der W3C Metadata Activity. Die Mitwirkung von Charles Frankston von Microsoft war besonders wertvoll.
Stichwort | Art des Vorkommens |
---|---|
Attribut | Formale Produktion(en) |
Attributnamen für Namensraum-Deklarationen | Formale Produktion(en) |
Elementtypen | Formale Produktion(en) |
Erweiterter Attributname | Definition |
Erweiterter Elementtyp | Definition |
Identisch | Definition |
Lokaler Teil | Definition |
Namensraum | Definition |
Namensraum-Deklaration | Definition |
Namensraum-Präfix | Definition |
Namensraumname | Definition |
Qualifizierte Namen in Deklarationen | Formale Produktion(en) |
Qualifizierter Name | Definition |
Qualifizierter Name | Formale Produktion(en) |
Voreingestellter Namensraum | Definition |