XML-Namensräume Marc Monecke monecke@informatik.uni-siegen.de Praktische Informatik Fachbereich Elektrotechnik und Informatik Universität Siegen, D-57068 Siegen 19. Mai 2003 Inhaltsverzeichnis 1 Motivation und Übersicht 2 2 Namensräume in Programmen 2 3 Namenskonflikte in Transportdateien 3 4 Namensräume in XML 3 4.1 Namen und Bezeichner für Namensräume...................... 3 5 Benutzung von Namensraum-Bezeichnern 4 6 Sonderfälle 5 6.1 Vorgegebener Namensraum.............................. 5 6.2 Namenloser Namensraum............................... 6 7 Zusammenfassung 6 1
1 Motivation und Übersicht Namen für Elementtypen und Attribute müssen eindeutig sein Gültigkeitsbereich: Namensraum in XML bisher: 1 Namensraum pro Datei mögliches Problem: Namenskollisionen XML-Dokumente aus verschiedenen Quellen mischen DTD wiederverwenden, die unabhängig voneinander entworfen wurden XML Namespaces W3C-Spezifikation: Namespaces in XML Menge von Namen identifiziert mit URI-Referenz Name besteht aus Namensraum-Präfix : lokalem Namen 2 Namensräume in Programmen Namensraum definiert Menge von Deklarationen innerhalb der Menge müssen Namen eindeutig sein z.b. Menge aller Variablendeklarationen innerhalb Block Sichtbarkeitsbereich gibt an, wo Name gilt Sichtbarkeitsregeln behandeln Namenskollisionen z.b. Deklaration im inneren Block überdeckt Deklaration im äußeren public class X { protected int i; public void set ( int i ) { this.i = i; } public int add ( int n ) { int i; i = this.i + n; } } return i; 2
3 Namenskonflikte in Transportdateien Name name taucht mehrfach auf: <personen> <person> <name>meier</name> <vorname>hans</vorname> <hund name="fred">schäferhund</hund> <auto kennz="si-xy 12"> <hersteller> <name>vw</name> <ort>wolfsburg</ort> </hersteller> </auto> </person> </personen> Namenskonflikte können meist nicht automatisch gelöst werden 4 Namensräume in XML Namensräume explizit benannt Namensraum-Name Namen für Namensräume universell eindeutig im Namensraum: lokaler Name qualifizierter Name ::= Namensraum-Name : lokaler Namen 4.1 Namen und Bezeichner für Namensräume <x xmlns:edi= http://ecommerce.org/schema > <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> </x> Namensraum-Name durch URI (Uniform Resource Identifier) angegeben http://ecommerce.org/schema im öffnenden tag dient nicht zur Lokalisierung einer Ressource, sondern als eindeutiger und dauerhafter Bezeichner aber URI unhandlich, Syntax problematisch statt dessen Platzhalter verwenden Namensraum-Bezeichner: edi 3
wird dem Namensraum-Namen zugeordnet xmlns:edi= http://ecommerce.org/schema Gültigkeit an Element gekoppelt Name gilt innerhalb des Elements x Syntax gewöhnungsbedürftig entspricht eigentlich der Zuweisung des Wertes http://ecommerce.org/schema an das Attribut edi im Namensraum xmlns! 5 Benutzung von Namensraum-Bezeichnern Namensraum-Bezeichner + Name qualifizierter Name: edi:price <x xmlns:edi= http://ecommerce.org/schema > <!-- the price element s namespace is http://ecommerce... --> <edi:price units= Euro >32.18</edi:price> </x> Namensraum-Bezeichner kann im Element vor der Deklaration verwendet werden: <!-- all elements here are explicitly in the w3ns namespace --> <w3ns:html xmlns:w3ns= http://www.w3.org/tr/rec-html40 > <w3ns:head><w3ns:title>frobnostication</w3ns:title></w3ns:head> <w3ns:body> <w3ns:p>moved to <w3ns:a href= http://frob.com >here.</w3ns:a> </w3ns:p> </w3ns:body> </w3ns:html> Namensraum-Bezeichner: w3ns Namensraum-Name: http://www.w3.org/tr/rec-html40 Elementtyp: html Mehrere Namensräume innerhalb eines Elements möglich: <!-- both namespace prefixes are available throughout --> <bk:book xmlns:bk= urn:loc.gov:books xmlns:isbn= urn:isbn:0-395-36341-6 > <bk:title>cheaper by the Dozen</bk:title> <isbn:number>1568491379</isbn:number> </bk:book> 4
Namensraum-Bezeichner bk und isbn definiert in Element book Mehrere Namensraum-Bezeichner für gleichen Namensraum möglich: <x xmlns:edi= http://ecommerce.org/schema xmlns:ecomm= http://ecommerce.org/schema > <!-- the price element s namespace is http://ecommerce... --> <edi:price units= Euro >32.18</edi:price> </x> Namensraum-Bezeichner edi und ecomm sind dem Namensraum http://ecommerce.org/schema zugeordnet Namensraum-Namen müssen buchstäblich identisch sein! 6 Sonderfälle 6.1 Vorgegebener Namensraum Angabe der Namensraum-Bezeichner lästig gewünschten Namensraum einmal angeben (default namespace): <!-- elements are in the HTML namespace, in this case by default --> <html xmlns= http://www.w3.org/tr/rec-html40 > <head><title>frobnostication</title></head> <body><p>moved to <a href= http://frob.com >here</a>.</p></body> </html> Innerhalb Element html wird Namensraum http://www.w3.org/tr/rec-html40 verwendet default namespace gilt für alle enthaltenen Elemente ohne Namensraum-Präfix wenn Präfix vorhanden (isbn), gilt dieser: <!-- unprefixed element types are from "books" --> <book xmlns= urn:loc.gov:books xmlns:isbn= urn:isbn:0-395-36341-6 > <title>cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> </book> vorgegebener Namensraum urn:loc.gov:books für alle Elemente innerhalb book ohne Namensraum-Präfix nur number aus Namensraum urn:isbn:0-395-36341-6 mit Namensraum-Bezeichner isbn 5
6.2 Namenloser Namensraum implizit Namensraum ohne Name vorhanden kein Namensraum-Bezeichner nur nicht-qualifizierte Namen möglich wenn default namespace angegeben ist, gilt dieser für nicht-qualifizierte Namen <A> <B> <C> <D>... </D> <E>... </E> </C> </B> <B xmlns= http://www.xmldemo.org > <C> <D>... </D> <E>... </E> </C> </B> </A> beide Auftreten von C, D, E beziehen sich auf unterschiedliche Typen! Gegenmaßnahme: namenlosen Namensraum mit xmlns= angeben: <A> <B xmlns= http://www... > <C xmlns= > <D>... </D> <E>... </E> </C> </B> </A> C, D, E in beiden Fällen aus namenlosem Namensraum 7 Zusammenfassung Namensräume helfen, Namenskollisionen zu vermeiden qualifizierte Namen es bestehen einige Unterschiede zwischen Namensräumen in XML und Namensräumen in Programmiersprachen Namensraum ist Namensraum-Name (URI) und Namensraum-Bezeichner zugeordnet Namensraum gilt innerhalb Element 6
mehrere Namensräume pro Element, mehrere Namensraum-Bezeichner pro Namensraum möglich Sonderfälle: Vorgegebener Namensraum (default namespace), namenloser Namensraum 7