XML Namespaces < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:26 Di 06.11.2007 | Autor: | Bastiane |
Aufgabe | 1 <?xml version ="1.0 " encoding ="UTF -8"?>
2 <e1 xmlns =" http: //X.de"
3 xmlns:n1 =" http: //Y.de"
4 xmlns:n2 =" http: //Z.de">
5 <n1:e2
6 a1=" hallo "
7 n2:a1 =""
8 xmlns:n3 =" http: //U.de">
9 <e3 xmlns ="">
10 <n3:e4 />
11 <e5 xmlns:n2 =" http: //V.de"/>
12 </e3 >
13 </ n1:e2 >
14 <e6 >
15 <e7 xmlns =" http: //U.de" a1="7">Hallo </e7 >
16 </e6 >
17 </e1 >
Gib für jedes Element und jedes Attribut in dem oben stehenden XML-Dokument den zugehörigen Namespace-URI an. |
Hallo!
Ich weiß nicht so genau, was ich hier machen muss. Ich weiß auch nicht ganz, was nun ein Element ist und was ein Attribut - ist e1 ein Element? Und was wäre hier z. B. ein Attribut? Und was wäre z. B. ein Namespace-URI, das hier angegeben werden müsste? Vielleicht könnte mir jemand das erste als Beispiel machen, damit ich weiß, was ich tun muss?
Viele Grüße
Bastiane
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:16 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> 1 <?xml version ="1.0 " encoding ="UTF -8"?>
> 2 <e1 xmlns =" http: //X.de"
> 3 xmlns:n1 =" http: //Y.de"
> 4 xmlns:n2 =" http: //Z.de">
> 5 <n1:e2
> 6 a1=" hallo "
> 7 n2:a1 =""
> 8 xmlns:n3 =" http: //U.de">
> 9 <e3 xmlns ="">
> 10 <n3:e4 />
> 11 <e5 xmlns:n2 =" http: //V.de"/>
> 12 </e3 >
> 13 </ n1:e2 >
> 14 <e6 >
> 15 <e7 xmlns =" http: //U.de" a1="7">Hallo </e7 >
> 16 </e6 >
> 17 </e1 >
> Gib für jedes Element und jedes Attribut in dem oben
> stehenden XML-Dokument den zugehörigen Namespace-URI an.
> Hallo!
>
> Ich weiß nicht so genau, was ich hier machen muss. Ich weiß
> auch nicht ganz, was nun ein Element ist und was ein
> Attribut - ist e1 ein Element? Und was wäre hier z. B. ein
> Attribut?
Das ist ganz einfach:
1: | <element1 attribut1="wert1" attribut2="wert">
| 2: | <element2 attribut3="bla"/>
| 3: | </element1> |
> Und was wäre z. B. ein Namespace-URI, das hier
> angegeben werden müsste? Vielleicht könnte mir jemand das
> erste als Beispiel machen, damit ich weiß, was ich tun
> muss?
Ein Namespace-URI ist irgendein URI, der ist nicht weiter eingeschränkt.
Die Idee der Namespaces ist eigentlich ganz einfach: Stell dir vor, du hättest ein Element namens "number". Das könnte eine ISBN sein, eine Hausnummer, eine Telefonnummer. Um die zu unterscheiden kann man die Namen der Elemente und Attribute in Gruppen einteilen, die Namespaces. Du hast dann zum Beispiel:
<number>1234</number> (Default Namespace)
<isbn:number>1234567890</isbn:number> (Namespace isbn)
Ein Namespace muss deklariert werden, indem er mit einem URI verknüpft wird. In deinem Dokument werden in den Zeilen 2-4 drei Namespaces deklariert: default, n1 und n2.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 02:11 Di 06.11.2007 | Autor: | Bastiane |
Hallo Rainer!
> > 1 <?xml version ="1.0 " encoding ="UTF -8"?>
> > 2 <e1 xmlns =" http: //X.de"
> > 3 xmlns:n1 =" http: //Y.de"
> > 4 xmlns:n2 =" http: //Z.de">
> > 5 <n1:e2
> > 6 a1=" hallo "
> > 7 n2:a1 =""
> > 8 xmlns:n3 =" http: //U.de">
> > 9 <e3 xmlns ="">
> > 10 <n3:e4 />
> > 11 <e5 xmlns:n2 =" http: //V.de"/>
> > 12 </e3 >
> > 13 </ n1:e2 >
> > 14 <e6 >
> > 15 <e7 xmlns =" http: //U.de" a1="7">Hallo </e7 >
> > 16 </e6 >
> > 17 </e1 >
> > Gib für jedes Element und jedes Attribut in dem oben
> > stehenden XML-Dokument den zugehörigen Namespace-URI an.
> > Hallo!
> >
> > Ich weiß nicht so genau, was ich hier machen muss. Ich weiß
> > auch nicht ganz, was nun ein Element ist und was ein
> > Attribut - ist e1 ein Element? Und was wäre hier z. B. ein
> > Attribut?
>
> Das ist ganz einfach:
> 1: | <element1 attribut1="wert1" attribut2="wert">
| 2: | > <element2 attribut3="bla"/>
| 3: | > </element1> |
Oh - das ist ja in der Tat ganz einfach. *freu*
> > Und was wäre z. B. ein Namespace-URI, das hier
> > angegeben werden müsste? Vielleicht könnte mir jemand das
> > erste als Beispiel machen, damit ich weiß, was ich tun
> > muss?
>
> Ein Namespace-URI ist irgendein URI, der ist nicht weiter
> eingeschränkt.
Ah - ok.
> Die Idee der Namespaces ist eigentlich ganz einfach: Stell
> dir vor, du hättest ein Element namens "number". Das könnte
> eine ISBN sein, eine Hausnummer, eine Telefonnummer. Um die
> zu unterscheiden kann man die Namen der Elemente und
> Attribute in Gruppen einteilen, die Namespaces. Du hast
> dann zum Beispiel:
> <number>1234</number> (Default Namespace)
> <isbn:number>1234567890</isbn:number>
> (Namespace isbn)
> Ein Namespace muss deklariert werden, indem er mit einem
> URI verknüpft wird. In deinem Dokument werden in den Zeilen
> 2-4 drei Namespaces deklariert: default, n1 und n2.
Ok. Hat dann jetzt das Element e1 den Namespace-URI http://X.de? Und xmlns:n1 den URI http://Y.de und xmlns:n2 entsprechend. Oder zählt xmlns auch so als Attribut, dass ich diesem den URI von e1 zuordnen muss? Oder beides? (versteht man meine Frage? )
Und dann wäre doch das nächste Element: n1:e2. Das hätte jetzt wieder den URI http://Y.de?
Und was hat a1? Aus dem Vorlesungsskript lese ich:
Ein Default Namespace gilt für alle Element, die keinen expliziten Namespace-Präfix besitzen.
und außerdem:
Default Namespaces gelten nicht für Attributnamen!
Was mache ich also jetzt mit a1? Es ist doch ein Attribut, und hallo ist kein URI, oder?
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 11:52 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
Namespaces sind dafür gedacht, XML-Dokumente aus mehreren Teilen zusammensetzen zu können, ohne Namenskonflikte auszulösen. Um bei dem Beispiel "number" zu bleiben: eine PLZ kommt nur innerhalb einer Adresse vor, eine ISBN nur innerhalb einer Literaturreferenz. Du kannst also nicht zweimal den Elementnamen number verwenden, ohne eine Konflikt zwischen den beiden Definitionen.
Auftritt Namespaces: Jetzt gibt es "buch:number" und "adresse:number" und der Konflikt ist aufgelöst.
> Ok. Hat dann jetzt das Element e1 den Namespace-URI
> http://X.de? Und xmlns:n1 den URI http://Y.de und xmlns:n2
> entsprechend. Oder zählt xmlns auch so als Attribut, dass
> ich diesem den URI von e1 zuordnen muss? Oder beides?
Zunächst mal ist die URI-Referenz nur ein String. Zwei Namespaces sind gleich, wenn die URIs als Strings übereinstimmen. Die Leute haben sich natürlich was dabei gedacht, aber an dieser Stelle kann man die Bedeutung der URIs ignorieren.
Ein Namespace wird durch spezielle Attribute ("xmlns" oder "xmlns:bla") eines Elements deklariert und gilt für dieses Element und alle Kinder. Nur "xmlns" deklariert den default namespace, "xmlns:bla" deklariert einen Namespace, der durch das Präfix "bla" angesprochen wird.
Daher gehört e1 (ohne Präfix") zum Default Namespace, dem der URI "http://X.de" zugeordnet wurde. Das Attribut "xmlns:n1" ist Teil der Namespace-Deklaration.
> Und dann wäre doch das nächste Element: n1:e2. Das hätte
> jetzt wieder den URI http://Y.de?
> Und was hat a1? Aus dem Vorlesungsskript lese ich:
> Ein Default Namespace gilt für alle Element, die keinen
> expliziten Namespace-Präfix besitzen.
Tritt nicht zu, denn a1 ist kein Element, sondern ein Attribut.
> und außerdem:
> Default Namespaces gelten nicht für Attributnamen!
Aus der namespace Spec.: Default namespace declarations do not apply directly to attribute names; the interpretation of unprefixed attributes is determined by the element on which they appear.
Bleibt also einfach so stehen. Für mehr brauchst du die DTD.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:06 Di 06.11.2007 | Autor: | Bastiane |
Hallo Rainer!
Vielen Dank schonmal. Einiges wird mir jetzt klarer.
> Namespaces sind dafür gedacht, XML-Dokumente aus mehreren
> Teilen zusammensetzen zu können, ohne Namenskonflikte
> auszulösen. Um bei dem Beispiel "number" zu bleiben: eine
> PLZ kommt nur innerhalb einer Adresse vor, eine ISBN nur
> innerhalb einer Literaturreferenz. Du kannst also nicht
> zweimal den Elementnamen number verwenden, ohne eine
> Konflikt zwischen den beiden Definitionen.
>
> Auftritt Namespaces: Jetzt gibt es "buch:number" und
> "adresse:number" und der Konflikt ist aufgelöst.
Das hatte ich schon so weit verstanden. Allerdings war mir nicht klar, dass die Teile mit xmlns nur die Deklarationen sind... Das heißt doch dann für dein Beispiel, dass ich zuerst mit xmlns:buch=... und xmlns:adresse=... die Namespaces deklariere und dann danach mit buch:nummer und adresse:nummer darauf zugreifen kann? Wobei ich nicht ganz verstehe, was der URI denn dann für eine Rolle hat. Ich mache das doch, damit ich quasi zwei Sachen "genauso nennen" kann (bis auf eben den Präfix).
> Ein Namespace wird durch spezielle Attribute ("xmlns" oder
> "xmlns:bla") eines Elements deklariert und gilt für dieses
> Element und alle Kinder. Nur "xmlns" deklariert den default
> namespace, "xmlns:bla" deklariert einen Namespace, der
> durch das Präfix "bla" angesprochen wird.
>
> Daher gehört e1 (ohne Präfix") zum Default Namespace, dem
> der URI "http://X.de" zugeordnet wurde. Das Attribut
> "xmlns:n1" ist Teil der Namespace-Deklaration.
Hier hatte es vorher bei mir ein wenig gehakt... Das heißt, xmlns:n1 und xmlns:n2 sind nur die Deklarationen und ich brauche sie hier gar nicht erwähnen!?
> > Und dann wäre doch das nächste Element: n1:e2. Das hätte
> > jetzt wieder den URI http://Y.de?
>
>
>
> > Und was hat a1? Aus dem Vorlesungsskript lese ich:
> > Ein Default Namespace gilt für alle Element, die
> keinen
> > expliziten Namespace-Präfix besitzen.
>
> Tritt nicht zu, denn a1 ist kein Element, sondern ein
> Attribut.
>
> > und außerdem:
> > Default Namespaces gelten nicht für Attributnamen!
>
> Aus der namespace Spec.:
> Default namespace declarations do not apply directly to
> attribute names; the interpretation of unprefixed
> attributes is determined by the element on which they
> appear.
>
> Bleibt also einfach so stehen. Für mehr brauchst du die
> DTD.
Was heißt "bleibt einfach so stehen"? Heißt das, es hat gar keine URI? Oder muss ich es gar nicht erwähnen? Und was meinst du mit "Für mehr brauchst du die DTD"? Wenn ich mehr über a1 aussagen möchte oder wie?
Ich habe es dann jetzt mal so versucht:
Element/Attribut Namespace-URI
e1 http://X.de
n1:e2 http://Y.de
a1 nichts?
n2:a1 http://Z.de
e3 wird hier ein leere Namespace deklariert? oder was ist das hier?
n3:e4 http://U.de
e5 http://V.de
e6 http://X.de (weil Kind von e1?)
e7 http://U.de
a1 und hier kommt nochmal ein a1 - ist das dann genau wie oben?
Hab' ich es einigermaßen verstanden oder ist da noch sehr viel falsch?
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:37 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> Das heißt doch dann für dein Beispiel, dass ich
> zuerst mit xmlns:buch=... und xmlns:adresse=... die
> Namespaces deklariere und dann danach mit buch:nummer und
> adresse:nummer darauf zugreifen kann?
Genau.
> Wobei ich nicht ganz verstehe, was der URI denn dann für eine Rolle hat.
> Ich mache das doch, damit ich quasi zwei Sachen "genauso nennen" kann (bis auf eben den Präfix).
Der URI ist ein Name für die Namespaces. Wenn die URI-Strings gleich sind, ist es derselbe Namespace, auch wenn du zwei verschiedene Präfixe deklarierst.
Auf dieser Webseite ist das ganz gut erklärt.
> > > Und was hat a1? Aus dem Vorlesungsskript lese ich:
> > > Ein Default Namespace gilt für alle Element, die
> > keinen
> > > expliziten Namespace-Präfix besitzen.
> >
> > Tritt nicht zu, denn a1 ist kein Element, sondern ein
> > Attribut.
> >
> > > und außerdem:
> > > Default Namespaces gelten nicht für Attributnamen!
> >
> > Aus der namespace Spec.:
> > Default namespace declarations do not apply directly to
> > attribute names; the interpretation of unprefixed
> > attributes is determined by the element on which they
> > appear.
> >
> > Bleibt also einfach so stehen. Für mehr brauchst du die
> > DTD.
>
> Was heißt "bleibt einfach so stehen"? Heißt das, es hat gar
> keine URI?
Nein, kein Namespace.
> Oder muss ich es gar nicht erwähnen? Und was
> meinst du mit "Für mehr brauchst du die DTD"? Wenn ich mehr
> über a1 aussagen möchte oder wie?
Das war schlecht formuliert. Die Bedeutung eines Attributs hängt vom Element ab, in dem es auftritt. in dem Beispiel
<n1:e2 a1="hallo">
wird a1 nicht dem Default-Namespace zugeordnet, sondern dem Element e2 in dem Namespace, der mit dem Präfix n1 bezeichnet wird.
Ich habe hier einen Ausschnit aus einer Email-Diskussion zum Thema gefunden.
> Ich habe es dann jetzt mal so versucht:
>
> Element/Attribut Namespace-URI
>
> e1 http://X.de
> n1:e2 http://Y.de
> a1 nichts?
Ja.
> n2:a1 http://Z.de
> e3 wird hier ein leere Namespace
> deklariert? oder was ist das hier?
Ja, ein leerer String ist in der Deklaration des Default Namespace erlaubt und bedeutet, dass es im Gültigkeitsbereich dieser Deklaration keinen Default Namespace gibt (so als ob weiter außen keiner deklariert wäre).
> n3:e4 http://U.de
> e5 http://V.de
Nein, denn e5 hat kein Präfix, es wird also der im Moment gültige Default-Namespace http://X.de verwendet.
> e6 http://X.de (weil Kind von e1?)
Ja.
> e7 http://U.de
> a1 und hier kommt nochmal ein a1 - ist
> das dann genau wie oben?
Ja.
> Hab' ich es einigermaßen verstanden oder ist da noch sehr
> viel falsch?
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:02 Mi 07.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> > > e5 http://V.de
> >
> > Nein, denn e5 hat kein Präfix, es wird also der im Moment
> > gültige Default-Namespace http://X.de verwendet.
>
> Hast du nicht eben geschrieben, dass es im
> Gültigkeitsbereich von e3 quasi keinen Default Namespace
> gibt? Gehört e5 nicht in diesen Gültigkeitsbereich? Wieso
> bekommt es dann http://X.de?
Hast recht. War spät gestern.
>
> > > e6 http://X.de (weil Kind von e1?)
> >
> > Ja.
> >
> > > e7 http://U.de
>
> Ich sehe gerade, dass e7 ja genauso wenig wie e5 einen
> (also keinen) Präfix hat, müsste es dann nicht http://X.de
> bekommen, weil es auch ein Kind von e1 ist?
Nein, denn es hat eine Namespace-Deklaration: die bezieht sich immer auf das Element, in der sie als Attribut auftritt und alle Kinder.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:22 Mi 07.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> Hallo Rainer!
>
> Eine hoffentlich letzte Frage noch:
>
> > > > > e5 http://V.de
> > > >
> > > > Nein, denn e5 hat kein Präfix, es wird also der im Moment
> > > > gültige Default-Namespace http://X.de verwendet.
> > >
> > > Hast du nicht eben geschrieben, dass es im
> > > Gültigkeitsbereich von e3 quasi keinen Default Namespace
> > > gibt? Gehört e5 nicht in diesen Gültigkeitsbereich? Wieso
> > > bekommt es dann http://X.de?
> >
> > Hast recht. War spät gestern.
>
> Das heißt, e5 hat keinen Namespace-URI!?
Ja: der Default-Namespace ist nicht gesetzt, und der deklarierte Namespace mit Namen "http://V.de" wird nicht benutzt.
Viele Grüße
Rainer
|
|
|
|