|
Übersicht: Namensräume
Konzept der Namensräume
- Waren in der ersten Version von XML noch nicht enthalten
- Namensräume haben zwei Ziele
- Eindeutigkeit von Elementen aus verschiedenen Ressourcen zu gewährleisten
- Förderung der Erweiterbarkeit
01) <?xml version="1.0"?>
02) <library
03) xmlns="http://eric.van-der-vlist.com/ns/library"
04) xmlns:hr="http://eric.van-der-vlist.com/ns/person">
05) <book id="b0836217462" available="true">
06) <isbn>0836217462</isbn>
07) <author id="CMS">
08) <name xmlns="http://eric.van-der-vlist.com/ns/person">C M Schulz</name>
09) <hr:born>1922-11-26</hr:born>
10) <hr:dead>2000-02-12</hr:dead>
11) </author>
12) </book>
13) </library>
|
- Default-Namensraum wird über des xmlns-Attribut festgelegt
- Angabe eines vollqualifizierten Namens -> unübersichtlich
- Verwendung von Präfixen
|
|
Namensräume in einem W3C Schema
01) <xs:schema targetNamespace="http://example.org/ns/books/"
02) xmlns:xs="http://www.w3.org/2001/XMLSchema"
03) xmlns:bk="http://example.org/ns/books/"
04) elementFormDefault="qualified"
05) attributeFormDefault="unqualified">
06) <bk:book id="0836217462"">
07) <xs:element name="title">
08) ...
09) </xs:element>
10) </book>
11) </xs:schema>
|
- Nur kleine Unterschiede zu einem Instanz Dokument
- targetNamespace bestimmt den eigenen Namensraum
- elementFormDefault und attributeFormDefault steuern, ob Elemente/Attribute qualifiziert werden müssen
|
|
Einbinden unbekannter Elemente
- Bisher können Elemente aus fremden Namensräume nur explizit angegeben werden
- Keine "offenen" Schemata möglich
- xs:any- bzw. xs:anyAttribute-Element
01) <xs:element name="book">
02) <xs:complexType>
03) <xs:sequence">
04) <xs:element name="isbn" type="xs:string"/>
05) <xs:element name="furtherInformations">
06) <xs:complexType>
07) <xs:sequence>
08) <xs:any namespace="http://purl.org/dc/elements/1.1/"
09) processContents="skip"/>
10) </xs:sequence>
11) </xs:complexType>
12) </xs:element>
13) </xs:sequence>
14) </xs:complexType>
15) </xs:element>
|
- Angabe einer Leerzeichen getrennten Liste von Namensräumen
- Beliebige Elemente aus dem http://purl.org/dc/elements/1.1/ Namensraum zugelassen
- Folgende XML Instanz ist somit gültig bzgl. des Schemas
01) <book xmlns:dc="http://purl.org/dc/elements/1.1/">
02) <isbn>2346175840</isbn>
03) <furtherInformations>
04) <dc:publisher>
05) <dc:name>Andrews Mc Meel Publishing</dc:name>
06) </dc:publisher>
07) ...
08) </furtherInformations>
09) </book>
|
- Weiter Einschränkungen über das namespace-Attribut
- ##any: Wohlgeformtes XML aus einem beliebigem Namensraum (Standardfall)
- ##local: Wohlgeformtes XML, das nicht qualifiziert ist, also keinem Namensraum angehört
- ##other: Wohlgeformtes XML, das nicht aus dem Ziel-Namensraum des gerade definierten Typs stammt
- Attribut processContents legt den Umgang mit fremdem Inhalt fest
- skip: fremder Inhalt wird durch den XML-Prozessor nicht weiter betrachtet
- lax: XML-Prozessor versucht die Elemente zu validieren; wenn keine Schema Informationen vorhanden wird keine Fehler gemeldet
- strict: XML-Prozessor muss assoziiertes Schema erreichen und die Elemente validieren (Standardfall)
01) <element name="book">
02) <complexType>
03) <sequence>
04) <any namespace="http://www.w3.org/1999/xhtml"
05) processContents="skip"
06) minOccurs="1" maxOccurs="unbounded"/>
07) </sequence>
08) <anyAttribute namespace="http://www.w3.org/1999/xhtml"
09) processContents="lax"/>
10) </complexType>
11) </element>
|
- Attribute nutzen das entsprechende anyAttribute-Element
- Werte für namespace- und processContents-Attribut sind identisch
- Beschränkung der Anzahl von Attributen ist nicht möglich
|
|
Namensräume in Relax NG
01) <element xmlns="http://relaxng.org/ns/structure/1.0" name="library"
02) ns="http://eric.van-der-vlist.com/ns/library"
03) xmlns:hr="http://eric.van-der-vlist.com/ns/person">
04) <element name="book">
05) <attribute name="id"/>
06) <element name="title" ns="http://eric.van-der-vlist.com/ns/library1">
07) <text/>
08) </element>
09) <element name="hr:author">
10) <attribute name="id"/>
11) <element name="hr:name"><text/>
12) </element>
13) </element>
14) </element>
|
- Default-Namensraum wird über das ns-Attribut festgelegt
- Vollqualifizierter Name sowie Präfixe sind ebenfalls möglich
|
|
Einbinden unbekannter Elemente
01) <define name="anything">
02) <zeroOrMore>
03) <choice>
04) <element>
05) <anyName/>
06) <ref name="anything"/>
07) </element>
08) <attribute>
09) <anyName/>
10) </attribute>
11) <text/>
12) </choice>
13) </zeroOrMore>
14) </define>
|
- Definieren eines Musters, das beliebige Elemente akzeptiert
- <anyName/>-Muster
- Rekursives Modell
- Nächster Schritt grenzt das Muster entsprechend einer Vorgabe ein
01) <define name="foreign-elements">
02) <zeroOrMore>
03) <element>
04) <anyName>
05) <except>
06) <nsName ns=""/>
07) <nsName ns="http://eric.van-der-vlist.com/ns/library"/>
08) </except>
09) </anyName>
10) <ref name="anything"/>
11) </element>
12) </zeroOrMore>
13) </define>
|
- <except>-Pattern schließt die angegeben Namensräume aus
- <nsName ns=""/> erlaubt nur qualifizierte Elemente, Sicherung der Eindeutigkeit
- Attribute werden auf die gleiche Weise integriert
- Nur ein Ersetzen von element durch attribute erforderlich
- Durch Kombination mit <interleave> sind fremde Inhalt an jeder Stelle möglich
01) <element name="book">
02) <interleave>
03) <group>
04) <attribute name="id"/>
05) <ref name="title-element"/>
06) <zeroOrMore>
07) <ref name="author-element"/>
08) </zeroOrMore>
09) </group>
10) <ref name="foreign-elements"/>
11) <ref name="foreign-attributes"/>
12) </interleave>
13) </element>
|
|
|
Bewertung
- Beide Schema Sprachen unterstützen XML Namensräume im vollen Umfang
- Relax NG setzt seine Linie der Einfachheit und Allgemeingültigkeit konsequent fort
- Nur zwingend vorgeschriebene Konzepte werden umgesetzt
- Kein processContents bzw. elementFormDefault-Attribut vorhanden
- Ausschlußlisten können in einem W3C Schema nicht umgesetzt werden
- Nur alle Listen oder explizite Aufzählung möglich
|
|
|