Namensräume


 ... [ Präsentation ] ... [ << Datentypen ] ... [ Fazit >> ] ...  




Übersicht: Namensräume

  Konzept der Namensräume
  Namensräume in einem W3C Schema
  Namensräume in Relax NG
  Bewertung



Konzept der Namensräume

  • Waren in der ersten Version von XML noch nicht enthalten
  • Namensräume haben zwei Ziele
    1. Eindeutigkeit von Elementen aus verschiedenen Ressourcen zu gewährleisten
    2. 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






 ... [ Präsentation ] ... [ << Datentypen ] ... [ Fazit >> ] ... [ nach oben ] ...