Namensräume
Namensräume Allgemeines Deklaration Komponenten aus beliebigen Namensräumen
Sinn und Zweck von Namensräumen Die Verwendung von Namensräumen in XML erlaubt es einer Anwendung, Elemente einer Teilanwendung, einer Organisation oder einer beliebig definierbaren Einheit Inhalte zuzuordnen. Dies ermöglicht es wiederum, gleichnamige Elemente in Abhängigkeit von ihrem Namensraum zu verarbeiten. Es steht demnach ein Mechanismus für die Kollisionsverhinderung und das ungewollte Vermischen von Informationsbestandteilen aus unterschiedlichen Bereichen zur Verfügung.
Sinn und Zweck von Namensräumen Für die Einrichtung eines Namensraums benötigt man nur noch das xmlns-attribut mit folgenden Eigenschaften: Es enthält eine URI-Angabe, die möglichst einzigartig für die Anwendung oder besser noch für alle möglichen Anwendungen sein sollte, die das Instanzdokument verarbeiten. Daher handelt es sich in den meisten Fällen um Internetadressen, wobei allerdings auch einfache Bezeichner möglich wären. Sie bringen jedoch unter Umständen den Nachteil mit sich, mit anderen solchen Bezeichnungen zu kollidieren und daher das Namensraumprinzip zur Unterscheidung und Zuordnung von Elementen und Attributen zu unterlaufen. Alternativ kann ein Präfix angegeben werden, der als Kurzform für den Namensraum steht. Er besteht aus einer meist kurzen Bezeichnung, die jedem Element oder Attribut vorangehen kann.
Beispiel (1) <?xml version="1.0" encoding="iso-8859-1"?> <Umsatzuebersicht xmlns="http://www.ruhrfon.biz" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="71_03.xsd">... <Umsatz> <Tarif> <Name>Abendessen</Name> <Typ>p</Typ> <Jahr>2003</Jahr> <Gueltigkeit Typ="Datum"> <GueVon>03-01-01</GueVon>
Beispiel (2) <?xml version="1.0" encoding="iso-8859-1"?> <Umsatzuebersicht xmlns:rf="http://www.ruhrfon.biz"> <rf:umsatz> <rf:tarif> <rf:name>abendessen</rf:name> <rf:typ>p</rf:typ> <rf:jahr>2003</rf:jahr> <rf:gueltigkeit Typ="Datum">...
Beispiel (3) Im Gegensatz zu einem Standardnamensraum (1) ist für jedes Element genau zu erkennen (2), dass es in einem bestimmten Namensraum liegt. Inhaltlich und im Hinblick auf die Zuordnung zu einem Namensraum sind beide Dokumente identisch. Was allerdings überaus unterschiedlich ist, ist die Verwendung von XPath-Ausdrücken, da diese auf solche Präfixe Rücksicht nehmen. Sie erwarten also den vollen, qualifizierten Namen wie z.b. //rf:typ, um alle Typ-Elemente zu finden. Mit entsprechenden Funktionen wie z.b. local-name() lässt sich dann der Namensraumbestandteil entfernen, um auf den lokalen, unqualifizierten Namen zuzugreifen: //*[localname()='gueltigkeit']. Dies entspricht der Verwendung der Funktion name() im Beispielausdruck //*[name()='rf:gueltigkeit'].
Beispiel (4)
Beispiel (5)
Fragen...
Namensräume Allgemeines Deklaration Komponenten aus beliebigen Namensräumen
Deklaration Wie bei allen anderen Design-Alternativen auch legt man den eigentlichen Namensraum innerhalb des schema- Elements mit dem targetnamespace-attribut fest. Hier befindet sich noch keine Angabe für das Namensraum-Präfix. Diesen legt man zusätzlich über das bereits bekannte xmlns-attribut wie in jedem anderen XML-Dokument fest. Beim einfachen Babuschka-Design ändert sich für die Deklaration von Elementen und Attributen kein einziges Zeichen. Lediglich die Namensraum-Angabe ist neu.
Deklaration Es ist immer zu unterscheiden: Matrjoschka-Design Verwendung von globalen Komponenten
Deklaration: Matrjoschka-Design <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema targetnamespace="http://www.ruhrfon.biz" xmlns:rf="http://www.ruhrfon.biz" xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="unqualified"> <xs:element name="umsatzuebersicht"> <xs:complextype> <xs:sequence> <xs:element name="umsatz" maxoccurs="unbounded"> <xs:complextype> <xs:sequence> <xs:element name="tarif"> <xs:complextype> <xs:sequence>
Deklaration: Allgemein schema-element: elementformdefault legt mit den Werten unqualified/qualified fest, ob Elemente bei einer Namensraumangabe standardmäßig qualifiziert oder unqualifiziert im Instanzdokument auftreten. Diese Einstellung kann über lokale Angaben geändert werden. attributeformdefault legt mit den Werten unqualified/qualified fest, ob Attribute bei einer Namensraumangabe standardmäßig qualifiziert oder unqualifiziert im Instanzdokument auftreten. Diese Einstellung kann über lokale Angaben geändert werden. element-/attribute-element: Im Attribut form legt man mit den Werten unqualified/qualified fest, ob das jeweilige Element oder Attribut bei einer Namensraumangabe qualifiziert oder unqualifiziert im Instanzdokument auftreten muss. Diese Einstellung überschreibt die globalen Angaben.
Deklaration: Globale Komponenten
Deklaration: Globale Komponenten
Übernahme
Fragen...
Namensräume Allgemeines Deklaration Komponenten aus beliebigen Namensräumen
Beliebige Komponenten any lässt dort, wo es in einem Schema-Dokument verwendet wird, Elemente aus anderen Namensräumen zu. anyattribute lässt dort, wo es in einem Schema- Dokument verwendet wird, Attribute aus anderen Namensräumen zu.
Beliebige Komponenten Neben den Attributen id, minoccurs und maxoccurs, die ihre übliche Bedeutung behalten, sind die beiden folgenden Attribute von besonderer Bedeutung: Namespace: Dieses Attribut enthält die Angabe des Namensraums, aus dem beliebige Inhalte übernommen werden können. Für allgemeine Angabe stehen noch verschiedene Platzhalter zur Verfügung: ##local: ein unqualifiziertes Element ##targetnamespace: Zielnamensraum ##any: jeder Namensraum, darunter auch der Zielnamensraum ##other: alle Namensräume außerhalb des Zielnamensraums
Beliebige Komponenten processcontents: Dieses Attribut enthält Angaben, welche Verhaltensweisen vom XML-Validator gefordert werden. Folgende Angaben sind möglich: lax: Der XML-Validator soll versuchen, ein geeignetes Schema zu finden, d.h., er wird versuchen, den Namensraum aufzurufen. Hier sollte die angegeben URI auch zu einer tatsächlich vorhandenen Ressource im Internet oder im lokalen Speicher führen. skip: Die Elemente und Attribute werden keiner Prüfung unterzogen, sondern einfach übergangen. strict: Der XML-Validator wird versuchen, ein geeignetes Schema zu finden, d.h., er wird versuchen, den Namensraum aufzurufen. Hier muss die angegeben URI auch zu einer tatsächlich vorhandenen Ressource im Internet oder im lokalen Speicher führen.
Fragen...