Namensräume

(Auszug aus "Schematron - Effiziente Business Rules für XML-Dokumente", Kapitel 5)

Namensräume dienen in XML dazu, Elemente und gegebenenfalls auch Attribute eindeutig zu kennzeichnen. So können Überschneidungen bei der Namensgebung vermieden werden. Gibt es mehrere Elemente, die den gleichen Namen, aber eine andere Bedeutung im Kontext haben, können diese anhand des zugewiesenen Namensraumes unterschieden werden. Das Präfix eines Elements (z. B. xsl: von <xsl:value-of>) dient als Kürzel für den zugewiesenen Namensraum-URI, der gewöhnlich im Wurzelelement angegeben wird. Das Präfix wird auch in XPath-Ausdrücken benötigt, um auf die Elemente aus dem richtigen Namensraum zugreifen zu können.

Das <ns>-Element ist für unser Beispiel notwendig, da in der Instanz arche.xml der Namensraum "http://www.schematron.info/arche" verwendet wurde. Werden in einem Schematron-Schema Elemente mittels XPath adressiert, die diesem Namensraum angehören, muss ein <ns>-Element hinzugefügt werden, um ein Präfix für diesen Namensraum zu definieren.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>   (1)
  <Pattern>
    <rule context="arc:tier[@fleischfresser='ja']">   (2)
      <report test="parent::*/arc:tier[@fleischfresser='nein']">Es gibt Fleischfresser und Pflanzenfresser in einer Unterkunft. Die Tiere sind keine Nahrungsquelle!</report>   (2)
    </rule>
  </pattern>
</schema>

(1) Das Element <ns> weist dem im Attribut uri angegebenen Namensraum ein Präfix zu.

(2) Bei Verwendung des <ns>-Elements kann nun bei den verwendeten XPath-Ausdrücken das Präfix verwendet werden. Ohne <ns>-Element ist kein Präfix definiert.

 

Anmerkung für XPath-/XML-Profis:
Das <ns>-Element kann theoretisch immer weggelassen werden. Allerdings führt dies bei einer Adressierung außerhalb des NULL-Namensraums zum umständlichen Umgehen der Verwendung von Präfixen. Dies kann beispielsweise mit einer Abfrage nach dem lokalen Namen mit der Funktion local-name() geschehen. Der Ausdruck *[local-name()='tier'] passt auf alle <tier>-Elemente, unabhängig vom Namensraum des Elementes.
Zu beachten ist, dass es im Unterschied zu XSLT bei Schematron keine Möglichkeit gibt, einen Default-Namensraum zu definieren. Das bedeutet, dass alle Elemente, die in der Instanz einem Namensraum angehören, bei der Adressierung ein Präfix erhalten. Dieses Präfix muss per <ns>-Element für den entsprechenden Namensraum definiert sein. Treten in der Instanz mehrere Namensräume auf, muss das Schematron-Schema für jeden Namensraum ein entsprechendes <ns>-Element enthalten.

   

<< zurück vor >>

 

 

 

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

Copyright © dpunkt.verlag GmbH 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken. Ansonsten unterliegt dieses Kapitel aus dem Buch "Schematron - Effiziente Business Rules für XML-Dokumente" 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.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de