xml namespaces < Sonstiges < Hochschule < Informatik < Vorhilfe
|
|
Status: |
(Frage) beantwortet | Datum: | 17:01 Di 26.02.2008 | Autor: | Bastiane |
Hallo nochmal!
Ich hab' da gerade noch eine Frage, und zwar: Was ist ein Namespace-Attribut? Was ein Attribut ist, weiß ich ja mittlerweile, so eine Art weitere Eigenschaft eines Elements. Und wenn ich dann als weitere Eigenschaft ein Namespace dahin schreibe, ist das dann ein Namespace-Attribut? Und das andere ist die Namespace-Deklaration und was anderes gibt's nicht, oder wie ist das gedacht?
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:06 Di 26.02.2008 | Autor: | rainerS |
Hallo Bastiane!
> Ich hab' da gerade noch eine Frage, und zwar: Was ist ein
> Namespace-Attribut? Was ein Attribut ist, weiß ich ja
> mittlerweile, so eine Art weitere Eigenschaft eines
> Elements. Und wenn ich dann als weitere Eigenschaft ein
> Namespace dahin schreibe, ist das dann ein
> Namespace-Attribut? Und das andere ist die
> Namespace-Deklaration und was anderes gibt's nicht, oder
> wie ist das gedacht?
Ich nehme an, es sind die Attribute mit Namen "xmlns" oder "xmlns:blabla" gemeint. Der Standard nennt das "Namespace declaration attribute". Es handelt sich also um die Namespace-Deklaration für das aktuelle Element und seine Kinder.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:05 Di 26.02.2008 | Autor: | piet.t |
Hallo Bastiane,
>
> Ich beschäftige mich gerade mal wieder mit xml und den
> "Namespaces". Kann mir jemand mal ganz simpel sagen, was
> das überhaupt ist?
wenn jeder die Struktur seiner xml-Dokumente für sich alleine festelgen könnte, dann könnte man gut auf Namensräume verzichten, allerdings kann es in der Praxis leicht vorkommen, dass man z.B. xml-Schemata oder DTDs aus verschiedenen Quellen in einem xml-Dokument verheiraten will oder muss. Und da manche Begriffe als Elementnamen äusserst beliebt sind kommt es dabei auch leicht zu doppeldeutigen Elementnamen.
Beispiel: Du erstellst ein xml-Schema für mathematische Formeln und führst dabei ein Element "wurzel" ein. Unabhängig davon erstelle auch ich ein Schema mit einem Element "wurzel", verstehe darunter aber z.b. das Root-Element meines xml-files.
Wenn ich nun in meinem File Elemente aus deinem Schema unterbringen will, dann muss ja irgendwie unterschieden werden können, was ich nun meine, wenn ich "wurzel" schreibe - und genau dazu dienen Namensräume. Wenn ich mein "wurzel"-Wlement meine, dann schreibe ich z.B. "piet:wurzel", bei deinem "bastiane:wurzel" und schon sind alle Doppeldeutigkeiten aufgehoben.
> Warum wird da eine URL angegeben? Was für eine URL ist
> das/muss das sein? (Alle, URLs in den Beispielen geben mir
> nur eine Fehlermeldung, wenn ich sie eingebe...) Und was
> steht dann in der URL?
Namensräume machen nur dann Sinn, wenn sichergestellt ist, dass ich im ganzen Internet niemals auf zwei Namensräume mit gleichem Namen treffen kann (dann bräuchte man ja wieder Meta-Namensräume, um die Namensräume zu unterscheiden....). Daher wählt man als eindeutigen Bezeichner für einen Namensraum etwas, das wie eine URL aussieht - Dann kann man zumindest davon ausgehen, dass kein wildfremder den gleichen Domain-Namen verwendet. Hinterlegt ist unter dieser URL eigentlich gar nichts, wie gesagt dient sie nur als der weltweit eindeutige Bezeichner.
Jetzt haben wir aber zwei Arten der Benennung von Namensräumen gesehen: "bastiane" wie in "bastiane:wurzel" und irgendwelche URLs. Was stimmt denn nun? Die eigentliche Bezeichnung für den Namensraum ist die URL (z.B. https://matheraum.de/Bastiane), aber weil man die nicht in jedem Element komplett hinschreiben will führt man eine passende Abkürzung ein, indem man angibt:
xmlns:bastiane="https://matheraum.de/Bastiane"
was bedeutet: wenn ein Element das Präfix "bastiane" hat, dann gehört es zum Namensraum https://matheraum.de/Bastiane.
Das ist dann die Namespace-Deklaration. die kann in einem beliebigen Element stehen und gilt für das Element selbst und alle Kindelemente (ausser es ist in denen wieder etwas anderes angegeben). Nachdem das ganze als Attribut notiert wird ist mit "Namespace-Attribut" wohl ziemlich das gleiche gemeint, aber da bin ich mir nicht ganz sicher.
So, das war schon mal viel Text, vielleicht hilfts ein bisschen....
Gruß
piet
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:42 Di 26.02.2008 | Autor: | Bastiane |
Hallo piet.t!
Vielen Dank schon mal für deine Antwort, und auch an Rainer danke für die andere Antwort.
> > Ich beschäftige mich gerade mal wieder mit xml und den
> > "Namespaces". Kann mir jemand mal ganz simpel sagen, was
> > das überhaupt ist?
> wenn jeder die Struktur seiner xml-Dokumente für sich
> alleine festelgen könnte, dann könnte man gut auf
> Namensräume verzichten, allerdings kann es in der Praxis
> leicht vorkommen, dass man z.B. xml-Schemata oder DTDs aus
> verschiedenen Quellen in einem xml-Dokument verheiraten
> will oder muss. Und da manche Begriffe als Elementnamen
> äusserst beliebt sind kommt es dabei auch leicht zu
> doppeldeutigen Elementnamen.
> Beispiel: Du erstellst ein xml-Schema für mathematische
> Formeln und führst dabei ein Element "wurzel" ein.
> Unabhängig davon erstelle auch ich ein Schema mit einem
> Element "wurzel", verstehe darunter aber z.b. das
> Root-Element meines xml-files.
> Wenn ich nun in meinem File Elemente aus deinem Schema
> unterbringen will, dann muss ja irgendwie unterschieden
> werden können, was ich nun meine, wenn ich "wurzel"
> schreibe - und genau dazu dienen Namensräume. Wenn ich mein
> "wurzel"-Wlement meine, dann schreibe ich z.B.
> "piet:wurzel", bei deinem "bastiane:wurzel" und schon sind
> alle Doppeldeutigkeiten aufgehoben.
Danke für diese schöne Erklärung. So etwas ähnliches hatte ich mir schon gedacht, aber ich hätte es nicht in Worte fassen können. Dein Beispiel trägt sehr zum Verständnis bei.
> > Warum wird da eine URL angegeben? Was für eine URL ist
> > das/muss das sein? (Alle, URLs in den Beispielen geben mir
> > nur eine Fehlermeldung, wenn ich sie eingebe...) Und was
> > steht dann in der URL?
> Namensräume machen nur dann Sinn, wenn sichergestellt ist,
> dass ich im ganzen Internet niemals auf zwei Namensräume
> mit gleichem Namen treffen kann (dann bräuchte man ja
> wieder Meta-Namensräume, um die Namensräume zu
> unterscheiden....). Daher wählt man als eindeutigen
> Bezeichner für einen Namensraum etwas, das wie eine URL
> aussieht - Dann kann man zumindest davon ausgehen, dass
> kein wildfremder den gleichen Domain-Namen verwendet.
> Hinterlegt ist unter dieser URL eigentlich gar nichts, wie
> gesagt dient sie nur als der weltweit eindeutige
> Bezeichner.
Ich bin mir nicht ganz sicher, ob ich das jetzt verstehe. Also der "namespace" ist nur eine Bezeichnung? Das heißt, mit der angegebenen URL lege ich quasi nur fest, dass diese namespace jetzt reserviert ist oder wie? Ich glaub', ich versteh das doch noch nicht, vielleicht könntest du da noch etwas zu erzählen?
> Jetzt haben wir aber zwei Arten der Benennung von
> Namensräumen gesehen: "bastiane" wie in "bastiane:wurzel"
> und irgendwelche URLs. Was stimmt denn nun? Die eigentliche
> Bezeichnung für den Namensraum ist die URL (z.B.
> https://matheraum.de/Bastiane), aber weil man die nicht
> in jedem Element komplett hinschreiben will führt man eine
> passende Abkürzung ein, indem man angibt:
> xmlns:bastiane="https://matheraum.de/Bastiane"
> was bedeutet: wenn ein Element das Präfix "bastiane" hat,
> dann gehört es zum Namensraum
> https://matheraum.de/Bastiane.
Ja, das hatte ich mittlerweile auch verstanden. Nur kann ich mir bisher nicht merken, wo denn jetzt das "bastiane" steht, bei der Deklaration steht es ja erst als zweites, weil davon xmlns stehen muss, und wenn ich es dann "anwende", steht es als erstes, weil als zweites dann "wurzel" steht (nennt sich das dann Elementname?). Vielleicht merke ich mir jetzt dieses Beispiel, denn damit ist es klar.
> Das ist dann die Namespace-Deklaration. die kann in einem
> beliebigen Element stehen und gilt für das Element selbst
> und alle Kindelemente (ausser es ist in denen wieder etwas
> anderes angegeben). Nachdem das ganze als Attribut notiert
> wird ist mit "Namespace-Attribut" wohl ziemlich das gleiche
> gemeint, aber da bin ich mir nicht ganz sicher.
Ja, das stand auch in unseren Unterlagen. Und ich glaube, für andere Attribute gilt es auch nicht - aber auf die Feinheiten kommt es mir im Moment nicht an. Ich muss erst mal verstehen, worum es überhaupt geht...
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:54 Di 26.02.2008 | Autor: | rainerS |
Hallo Bastiane!
> Ich bin mir nicht ganz sicher, ob ich das jetzt verstehe.
> Also der "namespace" ist nur eine Bezeichnung? Das heißt,
> mit der angegebenen URL lege ich quasi nur fest, dass diese
> namespace jetzt reserviert ist oder wie? Ich
> glaub', ich versteh das doch noch nicht, vielleicht
> könntest du da noch etwas zu erzählen?
Der Namespace hat einen Namen, das ist das Ding, was bei der Deklaration hinter dem "xmlns:" steht und bei der Anwendung vor dem Doppelpunkt. Der Namen dient nur dazu, das Ding anzusprechen, so ähnlich wie eine Variable in einem Programm. Die URL dient dazu, festzustellen, ob zwei Namespaces gleich sind. Die Regel ist ganz einfach: zwei Namespaces sind identisch, wenn die zugehörigen URLs in der Namespace-Deklaration die gleichen Strings sind. Das ist das einzige Kriterium, das für die XML-Verarbeitung wichtig ist: der XML-Prozessor muss erkennen können, welcher Namespace wozu gehört, damit er die Elemente richtig zuordnen kann. Die URL selber hat keine Bedeutung für die XML-Verarbeitung.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 09:12 Mi 27.02.2008 | Autor: | Bastiane |
Hallo rainerS!
> Der Namespace hat einen Namen, das ist das Ding, was bei
> der Deklaration hinter dem "xmlns:" steht und bei der
> Anwendung vor dem Doppelpunkt. Der Namen dient nur dazu,
> das Ding anzusprechen, so ähnlich wie eine Variable in
> einem Programm. Die URL dient dazu, festzustellen, ob zwei
> Namespaces gleich sind. Die Regel ist ganz einfach: zwei
> Namespaces sind identisch, wenn die zugehörigen URLs in der
> Namespace-Deklaration die gleichen Strings sind. Das ist
> das einzige Kriterium, das für die XML-Verarbeitung wichtig
> ist: der XML-Prozessor muss erkennen können, welcher
> Namespace wozu gehört, damit er die Elemente richtig
> zuordnen kann. Die URL selber hat keine Bedeutung für die
> XML-Verarbeitung.
Das heißt, statt einer URL könnte ich da auch "Apfel" und "Birne" hinschreiben? Und wenn dann zwei Elemente zu Apfel gehören sind sie gleich?
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:27 Mi 27.02.2008 | Autor: | rainerS |
Hallo Bastiane!
> Hallo rainerS!
>
> > Der Namespace hat einen Namen, das ist das Ding, was bei
> > der Deklaration hinter dem "xmlns:" steht und bei der
> > Anwendung vor dem Doppelpunkt. Der Namen dient nur dazu,
> > das Ding anzusprechen, so ähnlich wie eine Variable in
> > einem Programm. Die URL dient dazu, festzustellen, ob zwei
> > Namespaces gleich sind. Die Regel ist ganz einfach: zwei
> > Namespaces sind identisch, wenn die zugehörigen URLs in der
> > Namespace-Deklaration die gleichen Strings sind. Das ist
> > das einzige Kriterium, das für die XML-Verarbeitung wichtig
> > ist: der XML-Prozessor muss erkennen können, welcher
> > Namespace wozu gehört, damit er die Elemente richtig
> > zuordnen kann. Die URL selber hat keine Bedeutung für die
> > XML-Verarbeitung.
>
> Das heißt, statt einer URL könnte ich da auch "Apfel" und
> "Birne" hinschreiben?
Nein, du musst schon eine URL (genauer: URI) schreiben, das schreibt der Standard vor.
> Und wenn dann zwei Elemente zu Apfel
> gehören sind sie gleich?
Unpräzise formuliert, aber ich glaube, du meinst das Richtige. Du musst unterscheiden zwischen
a) dem Namen des Namespaces: die URI
b) das Namespace-Präfix: das ist das "xxx" im Elementnamen "xxx:element".
c) den lokalen Namen, das ist das "element" im Elementnamen "xxx:element"
Die Namespace-Deklaration stellt eine Beziehung zwischen a) und b) her.
Die Interpretation von "xxx:element" geht so:
Zunächst wird nachgeschaut, welcher Namespace zum Präfix "xxx" gehört, anhand der aktuell gültigen Namespace-Deklarationen, das ergibt eine URI (einen String)
Dann wird die Bedeutung des lokalen Namens "element" in dem durch diesen Namen (diese URI) eindeutig bestimmten Namespace nachgeschaut.
Das bedeutet: wenn du "xxx:element" und "yyy:element" hast, und sowohl "xxx" als auch "yyy" als Namespace mit dem Namen "http://bastiane.de/Apfel" deklariert wurden, dann bezeichnen "xxx:element" und "yyy:element" das Gleiche.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:47 Do 28.02.2008 | Autor: | Bastiane |
Hallo rainerS!
> > Und wenn dann zwei Elemente zu Apfel
> > gehören sind sie gleich?
>
> Unpräzise formuliert, aber ich glaube, du meinst das
> Richtige. Du musst unterscheiden zwischen
> a) dem Namen des Namespaces: die URI
> b) das Namespace-Präfix: das ist das "xxx" im Elementnamen
> "xxx:element".
> c) den lokalen Namen, das ist das "element" im
> Elementnamen "xxx:element"
Ja, ich dachte mir schon, dass das nicht korrekt formuliert ist, aber ich konnte mich nicht anders ausdrücken.
> Die Namespace-Deklaration stellt eine Beziehung zwischen a)
> und b) her.
>
> Die Interpretation von "xxx:element" geht so:
> Zunächst wird nachgeschaut, welcher Namespace zum Präfix
> "xxx" gehört, anhand der aktuell gültigen
> Namespace-Deklarationen, das ergibt eine URI (einen
> String)
> Dann wird die Bedeutung des lokalen Namens "element" in
> dem durch diesen Namen (diese URI) eindeutig bestimmten
> Namespace nachgeschaut.
>
> Das bedeutet: wenn du "xxx:element" und "yyy:element" hast,
> und sowohl "xxx" als auch "yyy" als Namespace mit dem Namen
> "http://bastiane.de/Apfel" deklariert wurden, dann
> bezeichnen "xxx:element" und "yyy:element" das Gleiche.
Danke für die schöne Erklärung. Werde es mir sicher noch mehrmals durchlesen, bis ich es wirklich weiß, weil ich es immer sehr schnell wieder vergesse... Aber ich denke, ich habe es jetzt verstanden.
Viele Grüße
Bastiane
|
|
|
|