| Teile: | Teil: XML Teil: PHP Quellenverzeichnis |
| Pfad: | > Teil: XML > Strukturelle Grundlagen |
| Benachbarte Abschnitte: | Ein erstes Beispiel XML-Dokumentenaufbau Wohlgeformte Dokumente Syntaktische Konstrukte Logische Struktur Namensräume Document Type Definitions |
Das Konzept der Namensräume ist das Ergebnis der Bestrebungen folgender Problemfälle lösen zu können, die mit XML an sich nicht, oder nur sehr mühselig, zu begegnen wären:
Wiederverwendung bestehender (fremder) XML-Strukturen in eigenen Dokumenten.
Wunsch nach breiteren Standards.
Verringerung des Designaufwandes.
Nutzung bereits gesammelter Designerfahrung.
Zusammenführung verschiedener XML-kodierter Inhalte (heterogeneous content syndication).
Im Grunde löst das Konzept vor Allem ein Problem: Durch die Verwendung von Generic Identifier können gleichlautende, unterschiedlich definierte Markups entstehen. Dies führt zu Schwierigkeiten beim Kombinieren von Dokumenten, da nicht eindeutig ist, zu welcher Definition das jeweilige Element gehört. Die Verwendung von Namensräume (Namespaces) überwindet diese Hürde.
Die Zuordnung zu einem Namensraum wird innerhalb des Element-Start-Tags als Attribut angegeben und gilt für dieses Element als auch für seine Kinder, die diese nicht überschreiben.
Namespace-Deklarationen haben folgende Form:
xmls:namensraumbezeichner="URI"
Der Universal Resource Identifier (URI) dient der eindeutigen Identifizierung des Namens und muss weltweit eindeutig sein. Realisierbar ist dies über eine URL oder aber auch eine Emailadresse. Empfehlenswert sind jedoch URL's da tendenziell die Möglichkeit gewährt werden sollte, an der angegebenen Stelle weitere Informationen verfügbar zu machen.
Es können mehrere Namespaces parallel angewendet werden. Über den Namensraumbezeichner können sie selektiv eingesetzt werden. Wird bei der Deklaration kein solcher Namensraumbezeichner angegeben, gilt dieser Namensraum als Default-Namespace und kommt immer zur Anwendung. Der Default-Namespace wirkt sich allerdings nicht auf Attribute aus, für sie gilt weiterhin die dem Dokument zugehörige Typdefinition.
<bspw xmlns:meinNS="namespace@example.com"
xmlns="http://www.example2.com">
<meinNS:kind1>Kind 1 in Namespace meinNS</kind1>
<kind2>Kind 2 im Default-Namespace</kind2>
</bspw>
Dass auch die Namensräume das Problem nicht vollständig beseitigen können zeigt folgende Fragenstellung: Was passiert, wenn Dokument mit gleichen Namespace-Bezeichnern (und vielleicht sogar gleichen Tag-Namen) gemischt werden?
Namensräume - sowohl durch explizite Präfixangabe als auch durch überschreiben des Vorgabenamensraumes - wirken sich ausschließlich auf Elemente und deren direkte oder transitive Kindelemente aus!
Namensräume für Attribute werden ausnahmslos durch explizite Präfixangabe festgelegt!
<?xml version="1.0" encoding="UTF-8"?>
<Wurzelelement>
<ElementA xmlns:NS1="http://www.example.com/NS1"
xmlns:NS2="http://www.example.com/NS2">
<ns2:ElementB att1="...">
<ElementD att1="..."
xmlns="http://www.example.com/NS3">
<ElementC att2="ABC" NS2:att2="XYZ"/>
</ElementD>
</ns2:ElementB>
</ElementA>
</Wurzelelement>






