Namensraumnamen, was sagt die URI oder URN?
frankx
- xml
0 Gunnar Bittersmann0 frankx0 emu0 Thomas J.S.
Hallo,
bisher kapiert zu glauben habe ich, dass Namenssräume es erlauben, Elemente mit gleichen tag-namen aus unterschiedlichen Zusammenhängen auseinander zu halten.
Also buch:titel von dvd:titel.
Definiert wir es im Rootelement (?) oder Elternelement, zB. mit
<produkt xmlns:buch="urn:unifomer_resource_name">
oder
<produkt xmmlns:dvd="http:exmample.org/schema">
Ich kapier nicht, was der URI (ob als URN oder URL) denn besagt.
Der Verweis auf eine DTD verweist auf die Datei für die Validierungsregeln, der Verweis auf ein XSL-Dokument oder CSS bindet die Quelle für die Darstellung ein.
Was aber sagt der URN beim Namespace? Wo sucht dann der XML-Parser nach was und macht was damit?
Dank und Gruß, frankx
bisher kapiert zu glauben habe ich, dass Namenssräume es erlauben, Elemente mit gleichen tag-namen aus unterschiedlichen Zusammenhängen auseinander zu halten.
frankx,
Soweit richtig.
<produkt xmlns:buch="urn:unifomer_resource_name">
Damit ist das Element "produkt" aber nicht aus dem Namensraum "urn:unifomer_resource_name".
Dazu müsste es so
<produkt xmlns="urn:unifomer_resource_name">
oder so
<buch:produkt xmlns:buch="urn:unifomer_resource_name">
notiert werden.
Ich kapier nicht, was der URI (ob als URN oder URL) denn besagt.
Der macht das Element "produkt" aus dem Namensraum "urn:unifomer_resource_name" im Web eindeutig zu "urn:unifomer_resource_nameprodukt".
(Good practice dürfte es sein, Namensraum-URIs mit "/" oder "#" enden zu lassen.)
Live long and prosper,
Gunnar
Hallo Gunnar,
vielen Dank.
Der macht das Element "produkt" aus dem Namensraum "urn:unifomer_resource_name" im Web eindeutig zu "urn:unifomer_resource_nameprodukt".
Ja, bzw. die namensräume buch der url http://meinserver/buch und dvd der url http://meinserver/dvd.
Aber was bewirkt diese Benenunng. Verweisen die URLs auf ein Verzeichnis, in dem etwas stehen sollte, und wenn ja was. Ja wohl kaum eine index.htm (;-); DTD und XLS und CSS verweisen ja immer auf Dateien, die da auch liegen sollten, wo sie angegeben sind.
Gruß, frankx
Hallo,
um die Frage ohne Spezifikation und Theorie zu beantworten:
Aber was bewirkt diese Benenunng. Verweisen die URLs auf ein Verzeichnis, in dem etwas stehen sollte, und wenn ja was.
»There are two schools of thought about XML namespace names: (1) the name serves purely to distinguish otherwise-identical XML element names, and (2) the names leads to documentation, schema, and other information about the elements.«
(http://www.taguri.org/)
emu
Hallo,
Aber was bewirkt diese Benenunng. Verweisen die URLs auf ein Verzeichnis, in dem etwas stehen sollte, und wenn ja was. Ja wohl kaum eine index.htm (;-); DTD und XLS und CSS verweisen ja immer auf Dateien, die da auch liegen sollten, wo sie angegeben sind.
Ein Namensraum ist nichts anderes als eine Sammlung von Namen die über eine URI eindeutig identifizierbar sind (da URIs (und/oder auch URNs) eindeutig sind) und die in XML-Dokumenten als Name für Elementtypen und Attribute genutzt werden.
Die URI die einen Namensraum definiert ist lediglich eine formale Bezeichnung und muss nicht auf eine real existierende Ressource verweisen. Es ist auch nicht nötig, dass eine existierende Ressource die verwendete Syntax im Dokument beschreibt.
Grüße
Thomas
Moin!
Aber was bewirkt diese Benenunng. […]
Die URI die einen Namensraum definiert ist lediglich eine formale Bezeichnung und muss nicht auf eine real existierende Ressource verweisen. Es ist auch nicht nötig, dass eine existierende Ressource die verwendete Syntax im Dokument beschreibt.
Da fällt mir ein, was frankx evtl. auch interessieren dürfte: Wie kann ich denn ein XML-Dokument mit Namensräumen validieren? Gibt es einen „Trick“, so etwas wie eine DTD (Schema, RelaxNG, …), die die Elemente meines Namensraumes definiert, anzugeben oder ist das in der Tat nur eine rein formale Angelegenheit?
Viele Grüße,
Robert
Hallo,
Da fällt mir ein, was frankx evtl. auch interessieren dürfte: Wie kann ich denn ein XML-Dokument mit Namensräumen validieren? Gibt es einen „Trick“, so etwas wie eine DTD (Schema, RelaxNG, …), die die Elemente meines Namensraumes definiert, anzugeben oder ist das in der Tat nur eine rein formale Angelegenheit?
Sratt langer Rede: http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Grüße
Thomas
Hallo nochmal,
besten Dank für die Hinweise. Unter http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm findet sich, dass "... das Präfix nur ein Stellvertreter (Abkürzung) der Namensraum-URI ist."
Vielleicht liegt mein Verständnisproblem in der Verwendung der Namensräume. DTD könnnen selbige nicht "erkennen", aber mit DOM, SAX und auch XSLT (? in http://www.rpbourret.com/xml/NamespacesFAQ.htm findet sich dazun nix, also vermutlich nicht?), kann ich entsprechend der Namensraumzugehörigkeit dann enstprechend filtern und die Ausgabe beeinflussen? Oder in welcher Anwendung findet sich der wesentliche Nutzen, des auseinanderhaltens der Elemente? Könnte ich mit XSLT dann die Namen der Server server:name rot ausgeben, die der Personen personen:name blau zB., oder mit PHP und DOM oder SAX eine Liste lediglich der Servernamen ausspucken lassen und das anhand der Namespace URI (also entweder "http://irgendwasmitserver" oder "urn:auswasmitserver") filtern?
Dank und Gruß,
Frankx
Hallo,
besten Dank für die Hinweise. Unter http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm findet sich, dass "... das Präfix nur ein Stellvertreter (Abkürzung) der Namensraum-URI ist."
Vielleicht liegt mein Verständnisproblem in der Verwendung der Namensräume.
Gehen wir dann etwas mehr ins Detail:
--------------------------------------------------------------------
Nehmen wir das Beispiel mit dem Titel-Element:
<buch>
<titel>Ratgeber</titel>
<autor>
<titel>Dr.</titel>
<vorname>Peter</vorname>
<nachname>Klug</nachname>
</autor>
</buch>
Für den XML-Parser gibt es keinen Unterschied zwischen den zwei Titel-Elementen, obwohl beide unterschiedliche Bedeutung haben. Die beste Lösung wäre, wenn für jedes Element im Dokument ein eindeutiger Name gefunden werden könnte.
Namensräume in XML dienen dazu, solche Mehrdeutigkeiten in XML-Dokumenten zu
vermeiden und Element- und Attributnamen eindeutig zu benennen.
Wie können wir also unsere Elemente eindeutig benennen? Es wäre möglich, dies in der folgenden Form zu tun:
<buch:buch>
<buch:titel>Ratgeber</buch:titel>
<buch:autor>
<person:titel>Dr.</person:titel>
<person:vorname>Peter</person:vorname>
<person:nachname>Klug</person:nachname>
</buch:autor>
</buch:buch>
Hier haben wir Elementen, die sich auf eine Person beziehen, einen Präfix mit dem Namen »person« und Elementen die sich auf das Buch beziehen, einen Präfix mit dem Namen »buch« zugewiesen. Somit erhalten wir zwei Gruppen von Elementen und wir können sofort sagen, welche Elemente in die eine und welche in die andere Gruppe gehören. Jede diese Gruppen bildet einen Namensraum und das jeweilige Präfix ist das so genannte Namensraum-Präfix.
Damit haben wir zwar das Problem der Mehrdeutigkeit in diesem Beispiel behoben, aber wir haben noch immer nicht die Sicherheit, dass unsere Elemente eindeutig gekennzeichnet sind, denn andere Autoren könnten ebenso diese Präfixe für ihre Elemente benutzen.
Um auch dieses Problem zu lösen, können wir bestimmen, dass für diese Präfixe ein URI als Name genutzt werden soll. Da URIs eindeutig sind, würden wir also das Problem damit umgehen. Und so könnte dann eines unserer Elemente in einem XML-Dokument notiert werden:
http://www.meinedomain.de/person/:titelDr.</http://www.meinedomain.de/
person/:titel>
Aber in XML darf ein XML-Name das Zeichen »/«nicht enthalten, und dieses hätten wir in einer URI, womit unsere Dokumente nicht mehr wohlgeformt wären.
Was wir also benötigen, ist eine Kombination von beidem, einerseits die Möglichkeit der Verwendung von eindeutigen URIs, anderseits die Möglichkeit Präfixe zu verwenden. Und genau diese Kombination bietet das Namensraumkonzept von XML.
Alle Namensräume, die in einem XML-Dokument verwendet werden, müssen im Dokument deklariert werden. Dazu wird dem Namensraum-Präfix der URI des Namensraums zugewiesen. Ein Element oder Attribut aus dem Namensraum wird dann über das Namensraum-Präfix referenziert, das Namensraum-Präfix dient dabei als Abkürzung der URI.
Um Namensräume in einem XML-Dokument nutzen zu können, müssen so genannte
qualifizierte Namen als Element- oder Attributnamen verwendet werden. Ein qualifizierter Namen besteht aus dem Präfix und dem lokalen Teil. Das Präfix stellt den Namensraum-Präfix dar und der lokale Teil ist der ursprüngliche Elementname. Intern ersetzt der XML-Parser den Namensraum-Präfix durch den Namensraum selbst.
--------------------------------------------------------------------
DTD könnnen selbige nicht "erkennen", aber mit DOM, SAX und auch XSLT (? in http://www.rpbourret.com/xml/NamespacesFAQ.htm findet sich dazun nix, also vermutlich nicht?), kann ich entsprechend der Namensraumzugehörigkeit dann enstprechend filtern und die Ausgabe beeinflussen?
Ja, kannst du. DOM, SAX und auch XSL bieten möglichkeiten dafür mit Namensräumen zu arbeiten.
z.B.
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#local_name
und
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#namespace_uri
Oder in welcher Anwendung findet sich der wesentliche Nutzen, des auseinanderhaltens der Elemente?
Dort z.B. wo man fremdes XML in sein eigens integriert (Srichwort z.B. content-syndication) und wo man nicht sicher sein kann, welche Elemente in dem fremden XML vorkommen können.
»»Könnte ich mit XSLT dann die Namen der Server server:name rot ausgeben, die der Personen personen:name blau zB., oder mit PHP und DOM oder SAX eine Liste lediglich der Servernamen ausspucken lassen und das anhand der Namespace URI (also entweder "http://irgendwasmitserver" oder "urn:auswasmitserver") filtern?
Könntest du.
Ein Beispiel mit verschiedenen Namensräumen und XSL findest du z.B. unter http://forum.de.selfhtml.org/archiv/2006/1/t121479/#m781896
Grüße
Thomas
Hallo Thomas und besten Dank,
das scheint mir die Sache schon zu entwirren. Dank auch für weiterführende Links, werd ich studieren.
Dort z.B. wo man fremdes XML in sein eigens integriert (Srichwort z.B. content-syndication) und wo man nicht sicher sein kann, welche Elemente in dem fremden XML vorkommen können.
Was aber logscheirweise heißt, dass ein URN als URI garnicht sinnvoll ist, da ich mit urn:meineaausgeachter-urn nicht zwangsläufig einen einzigartigen Identifikator hätte? Mit "http://www.meinedomain.xy//meinpfad" habe ich aber die Möglichkeit, weil sich jeder an die Konvention hält, da nicht "http://www.deinemdomain.xy" reinzuschreiben. Im Gegenzug kann ich aber auch eigene Abkürzungen für allgemeine Namensräume erfinden, oder ist dass danebengedacht undoder sinnfrei? Also: statt xmlns:xsl="http://www.w3.org/1999/XSL/Transform" auch xmlns:unfug="http://www.w3.org/1999/XSL/Transform" definieren?
Dank und Gruß,
Frankx
frankx,
nicht "http://www.deinemdomain.xy"
sondern bspw. "http://www.deinemdomain.example" oder "http://www."http://www.deinemdomain.example.net". [RFC2606] Ein selbst ausgedachter Domainname könnte wirklich existieren und sich hinter derm URI unangenehmer oder gar verbotener Inhalt befinden.
Im Gegenzug kann ich aber auch eigene Abkürzungen für allgemeine Namensräume erfinden, oder ist dass danebengedacht undoder sinnfrei?
Beides. ;-)
Also: statt xmlns:xsl="http://www.w3.org/1999/XSL/Transform" auch xmlns:unfug="http://www.w3.org/1999/XSL/Transform" definieren?
Ja, wenn du dann <unfug:stylesheet …>, <unfug:template …>, … schreibst.
Genauso kannst du xmlns="http://www.w3.org/1999/XSL/Transform" deklarieren und dann <stylesheet …>, <template …>, … schreiben.
Du kannst auch in deinem XSLT ein andere Kürzel für Namensräume verwenden als in dem Dokument, was damit transformiert wird; nur die URIs müssen gleich sein.
Live long and prosper,
Gunnar
Hallo,
Genauso kannst du xmlns="http://www.w3.org/1999/XSL/Transform" deklarieren und dann <stylesheet …>, <template …>, … schreiben.
Damit hätte er bestimmt Probleme, denn so würden auch alle anderen Elemente, also auch die literalen Ergebniselemente (sofern er für sie keinen Namensraum definiert) in diesem default Namensraum fallen, was sein XSLT gleich ungütig machen würde.
Grüße
Thomas
sofern er für sie keinen Namensraum definiert
Thomas, sagte ich das nicht?
Nein, tat ich nicht; dein Hinweis war natürlich richtig.
Live long and prosper,
Gunnar
PS. BTW, du klempst. ;-) Die Forumsoftware erkennt Zitate des Vorposters an der Zeichenkette "»» ", nicht an "»»".
Hallo,
Dort z.B. wo man fremdes XML in sein eigens integriert (Srichwort z.B. content-syndication) und wo man nicht sicher sein kann, welche Elemente in dem fremden XML vorkommen können.
Was aber logscheirweise heißt, dass ein URN als URI garnicht sinnvoll ist, da ich mit urn:meineaausgeachter-urn nicht zwangsläufig einen einzigartigen Identifikator hätte?
Das könnte zutreffen. Kommt darauf an ob du eine registririerte URN-Namensraum hast oder nicht.
Diese Frage hatten wir sch lange nicht mehr:
http://forum.de.selfhtml.org/archiv/2001/5/t23490/#m122662
Die Situation wird gut in den Punkten 2.1 bis 2.3 im http://www.ietf.org/rfc/rfc3305.txt beschrieben. (oder zum besser Lesen in: http://www.w3.org/TR/uri-clarification/ Punkt 1.1 bis 1.3)
Grüße
Thomas
Mit "http://www.meinedomain.xy//meinpfad" habe ich aber die Möglichkeit, weil sich jeder an die Konvention hält, da nicht "http://www.deinemdomain.xy" reinzuschreiben. Im Gegenzug kann ich aber auch eigene Abkürzungen für allgemeine Namensräume erfinden, oder ist dass danebengedacht undoder sinnfrei? Also: statt xmlns:xsl="http://www.w3.org/1999/XSL/Transform" auch xmlns:unfug="http://www.w3.org/1999/XSL/Transform" definieren?
Dank und Gruß,
Frankx
Moin!
Da fällt mir ein, was frankx evtl. auch interessieren dürfte: Wie kann ich denn ein XML-Dokument mit Namensräumen validieren? Gibt es einen „Trick“, so etwas wie eine DTD (Schema, RelaxNG, …), die die Elemente meines Namensraumes definiert, anzugeben oder ist das in der Tat nur eine rein formale Angelegenheit?
Statt langer Rede: http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Wie ich das sehe, heißt das wohl, dass sich in naher Zukunft jemand (ich?) einmal den verlinkten Artikel sowie die XML-Schema-Definition schnappen könnte, um daraus einen entsprechenden neuen Artikel zu schreiben ;-)
Viele Grüße,
Robert
Hallo,
Statt langer Rede: http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Wie ich das sehe, heißt das wohl, dass sich in naher Zukunft jemand (ich?)
Warum fragst du, wenn du die Antwort bereits kennst? ;)
»»einmal den verlinkten Artikel sowie die XML-Schema-Definition schnappen könnte, um daraus einen entsprechenden neuen Artikel zu schreiben ;-)
Selbstverständlich kannst du das machen, wir haben nichts dagegen, wenn du einen neuen Artikel zum Them schreibst! :-)
Grüße
Thomas
Moin!
Statt langer Rede: http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Wie ich das sehe, heißt das wohl, dass sich in naher Zukunft jemand (ich?)
Warum fragst du, wenn du die Antwort bereits kennst? ;)
Ich kenne aus meiner Sicht nur einen Teil der Antwort.
einmal den verlinkten Artikel sowie die XML-Schema-Definition schnappen könnte, um daraus einen entsprechenden neuen Artikel zu schreiben ;-)
Selbstverständlich kannst du das machen, wir haben nichts dagegen, wenn du einen neuen Artikel zum Them schreibst! :-)
Kein Problem, ein Tipp ist aktuell von mir noch in der redaktionellen Phase, da konnte ich schon einmal „lernen“, wie Selfhtml hinter den Kulissen funktioniert und ich bin gerne bereit, daran Anteil zu haben, aber vor den nächsten Semesterferien wird das wohl nichts :-| Falls also jemand schon vorher in dieser Richtung aktiv werden möchte, lasse ich gerne den Vortritt ;-)
Viele Grüße,
Robert