Störende Attribute

(Auszug aus "XML Schema" von Eric van der Vlist)

Bisher haben wir gesehen, daß W3C XML Schema globale Attribute und Elemente gleich behandelt und bei beiden Typen erfordert, daß sie ausdrücklich namensraumqualifiziert sind, wenn sie global sein sollen. Auch wenn dieser Ansatz sinnvoll ist – es gibt wenig Grund, Elemente und Attribute unterschiedlich zu behandeln –, unterscheidet er sich doch von dem Ansatz, dem die Empfehlung Namensräume in XML gefolgt ist. Globale Attribute stellen sich als ein ziemlich ungewöhnlicher, aber nützlicher Fall heraus.

Um dieses Phänomen zu verstehen, müssen wir die Empfehlung Namensräume in XML genau untersuchen. Diese unterscheidet qualifizierte und unqualifizierte Attribute und erläutert, daß nur Attribute, die auf Elemente aus einem anderen Namensraum angewendet werden, qualifiziert sein müssen (solche Attribute werden auch global genannt), und daß unqualifizierte Attribute als zum gleichen Vokabular wie ihr Elternelement gehörig betrachtet werden, ohne zu ihrem Namensraum gehören zu müssen. In diesem Fall erben sie die Mitgliedschaft im Namensraum ihres Elternelements, ohne es zeigen zu müssen. Dies ist eng damit verbunden, daß Default-Namensräume nicht für Attribute gelten (dies ist nicht notwendig, da Attribute als Mitglieder des elterlichen Namensraums angesehen werden, ohne Default-Namensräume zu benötigen). In der Praxis werden die meisten XML-Vokabulare unqualifizierte Attribute verwenden, etwa wie:

<book id="b3810518883" xmlns="http://dyomedea.com/ns/library"/>

oder:

<lib:book id="b3810518883" xmlns:lib="http://dyomedea.com/ns/library"/>

Sehr wenige würden qualifizierte Attribute wie im folgenden Beispiel nutzen:

<lib:book lib:id="b3810518883" xmlns:lib="http://dyomedea.com/ns/library"/>

Ebenfalls sehr wenige würden auch dies oder das Äquivalent verwenden, wenn wir einen Default-Namensraum für das Element verwenden, der nicht für das Attribut gilt:

<book lib:id="b3810518883" xmlns="http://dyomedea.com/ns/library" xmlns:lib="http://dyomedea.com/ns/library"/>

Da W3C XML Schema unglücklicherweise erfordert, daß alle globalen Attribute qualifiziert sind, bedeutet dies, daß globale Attribute für diese unqualifizierten Attribute, die meistens in XML-Vokabularen verwendet werden, nicht genutzt werden können und daß unser unqualifiziertes Attribut id nicht als global deklariert werden kann. In der Praxis bedeutet das, daß wir meistens einfach lokale Attribute innerhalb der Definitionen von Elementen oder komplexen Typen definieren werden. Wenn wir unqualifizierte Attribute definieren wollen, die in anderen Elementen wiederverwendet werden können, werden wir sie entweder in einem besonderen Schema ohne Ziel-Namensraum definieren, das dann importiert wird (hier besteht jedoch Kollisionsgefahr, wenn wir mehrere Schemas für verschiedene Ziel-Namensräume mischen, die diese Strategie verfolgen), oder wir werden diese Attribute innerhalb von Attributgruppen »verstecken«, etwa wie folgt:

<xs:attributeGroup name="id">
  <xs:attribute name="id" form="unqualified" type="xs:ID"/>
</xs:attributeGroup>

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML Schema bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML Schema" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de