Namensräume
XML Neuling
- xml
Hallo Profis,
versuche mich gerade in xml namespacees einzuarbeiten. Dazu eine Frage:
Könnte man für z.B.
<meinNS:test>abc</meinNS:test>
<deinNS:test>def</deinNS:test>
<unserNS:test>ghi</unserNS:test>
nicht genau so gut
<meinNStest>abc</meinNStest>
<deinNStest>def</deinNStest>
<unserNStest>ghi</unserNStest>
schreiben?
Klar, dann sind's keine namespaces mehr aber der Sinn (die Eindeutigkeit der Tags) ist auch so gegeben, oder? Und die Warscheinlichkeit, dass jemand sein Tag "haus:tuer" nennt, ist für mich genauso groß wie "haustuer".
Verstehe also nicht ganz, warum man namspaces benutzt. Die Eindeutigkeit der Tags kann damit ja nicht verbessert werden (siehe haustuer).
Hallo,
Verstehe also nicht ganz, warum man namspaces benutzt. Die Eindeutigkeit der Tags kann damit ja nicht verbessert werden (siehe haustuer).
Natürlich kannst Du einen Namensraum theoretisch an den Tag-Namen dranhängen. Dann bekommst Du aber (wenns wirklich möglichst eindeutig sein soll) seeeehr lange Tag-Namen. Was Du evtl. nicht willst.
Wenn Du, sagen wir, ein Buch in einer Bücherei hast, welches du in XML abbilden willst, also z.b.
<buch titel="Mustertitel" ausgeliehenBis="31.12.2010" />
und ein Buch in einem Webshop
<buch titel="Mustertitel" preis="47,50" />
so haben beide Tags unterschiedliche Bedeutung. Du willst aber nicht jedesmal <buechereiBuch...> und <webShopBuch...> schreiben, also definierst Du Namensräume, die Du dann einfach in einem Bücherei-XML-Dokument oder in einem webshop-Dokument angibst, und Du kannst weiter "buch" schreiben.
Zusätzlich kannst Du den einen Namensraum in den anderen importieren, musst es aber nicht (so könnte z.b. ein Bücherei-Dokument den Webshop-Namensraum importieren an den Stellen, wo auf den webshop verwiesen werden muss, z.b. weil man wissen will, was das Buch die Bücherei gekostet hat).
Guckst Du z.b. hier.
Namensräume sind also einfach flexibler.
Ein ganz entscheidender Punkt ist aber:
Lesbarkeit!
Mit
<meinNS:test>abc</meinNS:test>
machst Du dem Leser unmissverständlich klar, dass "test" ein Teil von "meinNS" ist.
Du drückst also bereits implizit eine Beziehung aus.
Somit ist "<haustuer>" semantisch auch etwas anderes als "haus:tuer".
Im einen Fall beschreibst Du eine Art von Tür (keine Schrank-, sondern eine HAUStür), im anderen Fall drückst Du aus, dass diese Tür ein Teil eines komplexen ganzen (eines Hauses) ist.
Ob und wie Du nun also Namespaces verwenden willst, hängt nicht zuletzt davon ab, was Du in Deinem Dokument ausdrücken und dem Leser als zusätzliche Informationen mitgeben willst.
Viele Grüße,
Jörg
Hallo. vielen Dank für die ausführliche antwort.
... Dann bekommst Du aber (wenns wirklich möglichst eindeutig sein soll) seeeehr lange Tag-Namen. Was Du evtl. nicht willst.
Sind folgende tags nicht gleich?
abcdef:ghijkl <abcdefghijkl>
Die eindeutigkeit ist beim ersten auch nur gegeben wenn die Namen sehr lang werden.
... Du willst aber nicht jedesmal <buechereiBuch...> und <webShopBuch...> schreiben, also definierst Du Namensräume, die Du dann einfach in einem Bücherei-XML-Dokument oder in einem webshop-Dokument angibst, und Du kannst weiter "buch" schreiben.
Aber dann muss man doch trotzdem immer webShopBuch: davorschreiben, oder?
@@XML Neuling:
nuqneH
Sind folgende tags nicht gleich?
abcdef:ghijkl <abcdefghijkl>
Nein, aber diese können gleich sein: abcdef:ghijkl und mno:ghijkl (wenn den Präfixen 'abcdef' und 'mno' derselbe Namensraum zugewiesen ist).
Qapla'
Nein, aber diese können gleich sein: abcdef:ghijkl und mno:ghijkl (wenn den Präfixen 'abcdef' und 'mno' derselbe Namensraum zugewiesen ist).
Langsam fange ich an zu verstehen (und das am Montag :-)
@@XML Neuling:
nuqneH
Verstehe also nicht ganz, warum man namspaces benutzt.
„Eine Motivation dafür ist Modularität; wenn ein Markup-Vokabular existiert, das gut verstanden wird und für welches nützliche Software vorhanden ist, ist es besser, dieses Markup wieder zu verwenden als es neu zu erfinden.“ [XML-NAMES §1]
Qapla'
... wenn ein Markup-Vokabular existiert, das gut verstanden wird und für welches nützliche Software vorhanden ist, ist es besser, dieses Markup wieder zu verwenden als es neu zu erfinden ...
Ok, aber ob die Software nun was mit abc:def macht oder mit <abcdef> ist für mich einerlei. Und Wenn man ein Vokabular mit abc:def definiert ist es für mich das selbe wie eins mit <abcdef>. ???
@@XML Neuling:
nuqneH
Ok, aber ob die Software nun was mit abc:def macht oder mit <abcdef> ist für mich einerlei.
Dass die Verarbeitung von 'abc:def' schon in die Software implementiert ist, du aber die Verarbeitung von 'abcdef' selbst programmieren müsstest, ist dir auch einerlei?
Qapla'
Dass die Verarbeitung von 'abc:def' schon in die Software implementiert ist, du aber die Verarbeitung von 'abcdef' selbst programmieren müsstest, ist dir auch einerlei?
Und wenn in die Software abcdef und nicht abc:def implementiert ist?
Für mich sind das nur Begrifflichkeiten. Den eigentlichen Sinn von namespaces sehe ich leider immer noch nicht. Wie gesagt: XMLNeuling
Hi,
solange Du allein für alle Bereiche des XML zuständig bist, Du also volle Kontrolle über alle Element-/Attribut-Namen hast, kann man darüber diskutieren, ob Du namespaces brauchst oder nicht.
Aber sobald Du XML-Strukturen einbinden willst/mußt, bei denen Du keine Kontrolle über die Element-/Attribut-Namen hast (weil diese z.B. von anderen Firmen vorgegeben sind), dann brauchst Du für die Eindeutigkeit namespaces - weil Du nicht verhindern kannst, daß die Element-/Attribut-Namen der anderen Firmen sich nicht im Weg stehen)
cu,
Andreas
Moin und vielen Dank für Deine Antwort.
Vielleicht frage ich mal anders. Wie unterscheiden sich die Lösungen in technischer Hinsicht. Was macht der XML Interpreter da anders:
firmaA:tagname
firmaAtagname
Oder ist das nur reine Nomenklatur die dem Menschen zur Anschaulichkeit dient?
Danke schonmal für Deine/Eure Geduld mit mir :-)
firmaA:tagname
firmaAtagname
OK, ich glaub jetzt hab ich's.
Der eigentliche Namensraum ist nicht das firmaA: sondern der URI (der was dort auch sonst drin steht) bei der Definition von firmaA:
@@XML Neuling:
nuqneH
OK, ich glaub jetzt hab ich's.
Der eigentliche Namensraum ist nicht das firmaA: sondern der URI (der was dort auch sonst drin steht) bei der Definition von firmaA:
Qapla'
Danke, Danke!
Und nochmal vielen Dank für Eure Geduld.
Hi!
Ok, aber ob die Software nun was mit abc:def macht oder mit <abcdef> ist für mich einerlei. Und Wenn man ein Vokabular mit abc:def definiert ist es für mich das selbe wie eins mit <abcdef>. ???
Nein, denn dein abc in abcdef ist fest verdrahtet, das Prefix abc in abc:def ist beliebig änderbar. Nicht abc ist der Namensraum, sondern die URL, die da irgendwo bei xmlns:abc=... definiert ist.
Lo!
Nicht abc ist der Namensraum, sondern die URL, die da irgendwo bei xmlns:abc=... definiert ist.
Na und wenn in der URL "allesSch..." drin steht läufts auch denn das was dort drin steht muss nicht existieren. Es muss nur eindeutig sein (in xml, xslt und xsd).
Hi!
Nicht abc ist der Namensraum, sondern die URL, die da irgendwo bei xmlns:abc=... definiert ist.
Na und wenn in der URL "allesSch..." drin steht läufts auch denn das was dort drin steht muss nicht existieren. Es muss nur eindeutig sein (in xml, xslt und xsd).
Ja, der Wert in der URL muss eindeutig sein und das über mehrere Dokumente hinweg. (Namensräume, die nur in einem einzigen Dokument existieren sollen, sind in der Tat nicht besonders sinnvoll und durch eindeutige Elementnamen ersetzbar.) Oftmals ist dieser Namensraum vorgegeben, so dass du da keinen Spielraum hast. Das Präfix hingegen kann in jedem Dokument anders lauten, an die Bedürfnisse angepasst werden.
Lo!
Das hat geholfen. Vielen Dank.
@@XML Neuling:
nuqneH
Nicht abc ist der Namensraum, sondern die URL, die da irgendwo bei xmlns:abc=... definiert ist.
URL ist nicht der richtige Begriff. Mal abgesehen davon, dass es _der_ URL heißen müsste, ist die Referenz auf einen Namensraum kein „Locator“ …
Na und wenn in der URL "allesSch..." drin steht läufts auch denn das was dort drin steht muss nicht existieren.
… eben deshalb; sondern ein „Identifier“, also ein URI.
Qapla'