Stichpunkte von den Vorlesungsfolien
Transcription
Stichpunkte von den Vorlesungsfolien
XML-Namensräume Marc Monecke [email protected] 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 4.1 Namen und Bezeichner für Namensräume . . . . . . . . . . . . . . . . . . . . . . 3 3 5 Benutzung von Namensraum-Bezeichnern 4 6 Sonderfälle 6.1 Vorgegebener Namensraum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Namenloser Namensraum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 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 { int i; n ) 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: <?xml version="1.0"?> <!-- 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: <?xml version="1.0"?> <!-- 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): <?xml version="1.0"?> <!-- 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: <?xml version="1.0"?> <!-- 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