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