XML Namensräume
Giovanni
- xml
Hallo, ich hab mir dies hier durchgelesen:
http://selfhtml.teamone.de/xml/regeln/namensraeume.htm
Es werden die Namensräume von XML erklärt. Dabei wird ein Präfix erstellt, der Bezug auf eine URI nimmt. Wieso? Und Wieso kann die URI einfach irendwie heißen? Ich versteh das nicht ganz?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<buch xmlns="http://www.IrgendeineDummeAdresseAberWieso.de"> <-
<kapitel nummer="1">
...
Danke für Eure Hilfe
Gruß
Giovanni
Hallo Giovanni,
Es werden die Namensräume von XML erklärt. Dabei wird ein Präfix erstellt,
der Bezug auf eine URI nimmt. Wieso? Und Wieso kann die URI einfach irendwie
heißen? Ich versteh das nicht ganz?
Das Ziel dabei ist es, einen eindeutigen und persistenten Namen für dieses
Namensraum zu erstellen. Persistenz bedeutet soviel, daß sich der Name
nicht ändert. Die Anforderungen an einen Namen ist also, daß er kein zweites
Mal auftaucht und sich in der Zukunft nicht ändert. Anstatt nun ein neues
Konzept zu erstellen, wird einfach ein gegebenes und schon verstandenes
Namenskonzept genommen, das der URI, da diese die Anforderungen erfüllt.
Zum Beispiel: Angenommen bei SELFHTML wird zu irgendwelchen Zwecken die
XML-Sprache SelfML 1.0 entwickelt. Man könnte nun als Namen einfach
"SelfML" nehmen, ja. Aber was ist, wenn nun das Projekt SELFLINUX zu
eigenen Zwecken auch eine XML-Sprache entwickelt und diese auch "SelfML"
nennt? Dann könnte es bei einer eventuellen Vermischung der beiden Sprachen
zu technischen Problemen kommen.
Erste einfache Lösung: Man berücksichtigt, daß unser SelfML ein Produkt
von SELFHTML ist und benennt den Namen um in SELFHTML:SelfML. Wenn man
ihn als urn:selfhtml:selfml schreibt, kommt übrigens ein URN, ein
Uniform Resource Name heraus. URNs sind eine Teilmenge von URIs, den
Uniform Resource Identifiers.
Aber was passiert nun, wenn das französische SELFHTML zu seinen Zwecken
ein anderes SelfML entwickelt, wenn Patrick und Serge plötzlich Lust
darauf haben? Und wenn sie dieses genauso benennen? Sehr unwahrscheinlich,
aber der technische Standard soll ja alles mögliche abdecken.
Man besinnt sich darauf, was ein Projekt eindeutig identifizieren kann
und weltweit eindeutig ist. Und so etwas eindeutiges gibt es schon, es sind
Domainnamen in den uns bekannten URLs. SELFHTML Deutsch und SELFHTML
Französisch könnten als Namen nun diese beiden wählen und es gäbe keine
Konflikte:
http://selfhtml.teamone.de/namespace/SelfML
http://www.selfhtml.com.fr/namespace/SelfML
Nebenbei: Man muß ja nicht unbedingt eine HTTP-URL nehmen. Es gibt ja
auch noch andere URL-Schemata. Zum Beispiel tel://-URLs. Auch wenn das
wenig sinnvoll erscheint. ;-)
Ist das schon ideal oder könnte es noch etwas besseres geben? Ja. SELFHTML
könnte ja nicht immer unter selfhtml.teamone.de residieren, sondern die
Domain wechseln. Das heißt die zweite Anforderung, die Persistenz eines
Namens ist nicht mehr gegeben (In unserem Beispiel den sehr, sehr, sehr
unwahrscheinlichen Fall, wenn sich jemand dann selfhtml.teamone.de
reserverieren würde und auch eine Sprache namens SelfML entwickelt und
ihr auch obigen Namen reserviert). Schon wieder ein Konflikt.
Über Persistenz von URIs und URLs wurde schon häufiger nachgedacht, ein
Gedanke ist es, daß URIs praktisch ewig gleich bleiben. Ein Resultat
davon ist das Projekt PURL: http://www.purl.org/ Dort kann man unter
purl.org auch wieder Namen reservieren und diese auf die tatsächliche
gerade existierende Seite weiterleiten. Und man kann auch einfach Namen
reservieren, die man nur für einen Namensraum benutzt.
Und hier gilt wieder wie bei Domains das Prinzip »First come, first serve«,
das heißt, wer am ersten reserviert, kriegt den Namen. Damit wird wieder
für Eindeutigkeit gesorgt. Wenn SELFHTML also flink ist, könnte es sowas
wie http://purl.org/selfhtml/namensraeume/selfml/1.0 reservieren. Es
kann jedoch auch sein, daß Patrick und Serge vom französischen SELFHTML
schneller sind. Was aber nicht wirklich ein Problem sein, könnte, wir
könnten uns ja absprechen. ;-)
Klingt kompliziert? Es sind aber alles Überlegungen, die man machen muß,
wenn man nach einem eindeutigen und zukunftsfähigen Namen für seinen
Namensraum sucht. Und ich finde URLs sind hier eine recht praktikable
Lösung, PURL-URLs auch, wenn nicht gerade purl.org irgendwann den Dienst
aufgibt.
Tim
Hey, vielen vielen Dank für eure so ausführlichen Antworten. Ich fand beide Antworten sehr gut und hab es 100% verstanden! Danke!
Ihr soltet Lehrer oder Informatik Professoren werden!
Hallo,
Es werden die Namensräume von XML erklärt. Dabei wird ein Präfix erstellt, der Bezug auf eine URI nimmt. Wieso?
Ein Namensraum ist nichts anderes als eine Sammlung von Namen die über eine URI eindeutig identifizierbar sind und die in XML-Dokumenten als Name für Elementtypen und Attribute genutzt werden.
buch:buch
buch:titelRatgeber</buch:titel>
buch:autor
person:titelDr.</person:titel>
person:vornamePeter</person:vorname>
person:nachnameKlug</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 sogenannte Namensraum-Präfix.
Wir habe 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 eine URI als Name genutzt werden soll.
Da URIs eindeutig sind, würden wir also das Problem beheben.
Und so könnte dann eine unsere Elemente in einem XML-Dokument notiert werden:
http://www.meinedomain.de/person/:titelDr.</http://www.meinedomain.de/person/:titel>
In XML darf aber ein XML-Name nicht das Zeichen / 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 beiden, einerseits die Möglichkeit der Verwendung von eindeutigen URIs, anderseits die Möglichkeit Präfixe zu verwenden. Und genau diese Kombination bietet der Namensraumkonzept von XML.
Ein Element oder Attribut aus dem Namensraum wird dann über das Namensraum-Präfix referenziert und das Namensraum-Präfix dient dabei als Abkürzung der URI. Intern ersetzt der XML-Parser den Namensraum-Präfix durch den Namensraum selbst.
Und Wieso kann die URI einfach irendwie heißen? Ich versteh das nicht ganz?
Weil ein URI nun mal irgendwie heissen kann.
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.
Klarer?
Grüße
Thomas