Warum benötigen wir URIs für XML-Namespaces?


23

Ich versuche herauszufinden, warum wir URIs für XML-Namespaces benötigen, und ich kann keinen Zweck dafür finden. Kann mich jemand ein bisschen aufhellen und seinen Gebrauch an einem konkreten Beispiel zeigen?

BEARBEITEN:

Ok also zum Beispiel: Ich habe das von w3schools

<root
xmlns:h="http://www.w3.org/TR/html4/"
 xmlns:f="http://www.w3schools.com/furniture">

 <h:table>
   <h:tr>
     <h:td>Apples</h:td>
     <h:td>Bananas</h:td>
   </h:tr>
 </h:table>

 <f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
 </f:table>

 </root>

Also, was sollte http://www.w3schools.com/furniturehalten?



7
Obligatorischer Kommentar von w3fools .
Yannis

Müssen XML-Namespaces also ein URI-Format haben? Oder kann ich einfach eine beliebige Zeichenfolge wie "My.Namespace.Foo" verwenden?
Mas

Antworten:


20

Ein Namespace ist eine Art zu sagen "Diese Art von Foo" unterscheidet sich von "Diese Art von Foo", obwohl sie gleich geschrieben sind. Oder, wenn Sie es vorziehen, " MEINE Art von Foo" unterscheidet sich von " Alle anderen Arten von Foo".

Die technische Art zu sagen, dass dies "Die URI meines Namespace für Foo" ist, unterscheidet sich von jeder anderen URI für ihren Namespace für Foo. Mit anderen Worten, URIs sind nur Zeichenfolgen, mit denen Sie dies sagen können.

Der Trick besteht dann darin, zu sagen, "Hey, URLs sind gültige URIs", und dann einen URI zu verwenden, der einer von Ihnen kontrollierten URL entspricht. Wenn alle das tun, vermeiden Sie versehentliche Namespace-Kollisionen. Sie hätten auch den Namespace "A" und den Namespace "B" sagen können, aber Sie riskieren, dass auch jemand anderes den gleichen Namespace verwendet, und dann unterscheidet sich Ihre Art von Foo nicht mehr von dessen Foo, was genau das ist, was Sie vermeiden möchten .

Sie können dann den URLs, die als URIs verwendet werden, zusätzliche Konventionen hinzufügen, z. B. dass die URL einer Seite mit Dokumentation, XSDs oder ähnlichem entsprechen muss, dies ist jedoch nicht erforderlich. Es ist einfach praktisch.


Ok, aber was ist der Unterschied zwischen Namespace A und Namespace w3.org/1999/xhtml ? Beide können von Benutzern verwendet werden, ohne dass diese wissen, dass sie dieselben Namespaces verwendet haben.
Patryk

1
@Patryk, aus diesem Grund verwenden Sie eine URL, über die Sie die Kontrolle haben. Die xhtml-Namespace-URL wird von W3C gesteuert, der die XHTML-Spezifikation definiert hat.

2
@Patryk, beachten Sie auch , dass es diejenigen , ist die Definition des Namespace, der die URL holen wird. Dann kann sie jeder nutzen .

1
Also awäre der Namespace absolut gültig? Dumm, aber gültig? Oder muss es eine URI sein?
Rudie

5
Wäre es nicht großartig gewesen, wenn die ersten Leute, die diese Konvention vor Jahren nutzten, auch eine präzise Dokumentation ihrer Schemata unter diesen URLs erstellt hätten, so dass dies zu einer Sache wurde? Microsofts OpenXML-Namespaces schemas.openxmlformats.org/drawingml/2006/chart weisen auf nichts hin.
Prototyp

16

Im Allgemeinen würde jeder eindeutige Bezeichner für einen Namespace dienen. Da es jedoch global einzigartig sein soll , müsste der Standard entweder eine Schiedsstelle beauftragen oder eine andere Ressource verwenden, die gleichzeitig global einzigartig, aber leicht zu finden und zu beweisen ist, dass es Ihre ist.

Oh schau! Wenn Sie eine Domain haben, ist dies offensichtlich nur Ihre Domain und es ist einfach zu beweisen, dass es Ihre ist!

Sie wollten zum Beispiel vermeiden, dass zwei verschiedene Buchhandlungen "Bücher" als Namespace mit völlig unterschiedlichen internen Definitionen verwenden. Während sie es intern verwenden, gibt es kein Problem; Aber sobald einer von ihnen seine Spezifikation veröffentlichen will, bricht die Hölle los.

Wenn Sie zur Verwendung Ihrer Domain ermutigt werden, kann stattdessen jeder (also jeder, der eine Domain besitzt) seinen eigenen privaten Namespace mit der Gewissheit definieren, dass niemand den exakt gleichen Bezeichner verwendet.

Als Bonus können Sie die Definition Ihres Namespaces optional in der URI speichern und selbstdokumentieren.

Scheint mir eine großartige Idee zu sein.


Danke für die Antwort, aber ich würde etwas Konkreteres brauchen, um das zu verstehen. Ich habe einen Beispielcode hinzugefügt, auf den Sie sich stützen können.
Patryk

1
@patryk - nichts, es ist keine Adresse - es ist nur ein eindeutiges Token, mit dem Sie sicher sind, dass niemand anderes, mit dem Sie XML-Dateien mischen könnten, über eine Adresse verfügt. Es wird lediglich darauf hingewiesen, dass die Namen <table> usw. in XML-Dateien, die den Namen www.w3.org an oberster Stelle haben, nicht mit einer anderen Bedeutung verwendet werden
Martin Beckett,

Ok , aber wenn wikipedia sagt etwas , dass die Benutzer zum Beispiel verwenden können w3.org/1999/xhtml als Namespace dann würde eine Menge Leute den gleichen Namensraum. Habe ich recht ?
Patryk

@Patryk, nur wenn Sie es für die gleiche Verwendung verwenden möchten. Wenn Sie einen neuen Namespace definieren möchten, sollten Sie eine eigene Domain verwenden
Javier,

@Javier Was meinst du mit "der gleichen Verwendung"?
Patryk

1

DOM Level 2 wurde Ende 2000 veröffentlicht. Es führte die Funktion "getElementById" sowie ein Ereignismodell und die Unterstützung für XML-Namespaces und CSS ein.

Welche xmlIns gibt an?
Als Attributknoten mit dem Namen "xmlns" oder "xmlns: xxx", genau wie die Namespaces im XML-Quelldokument geschrieben werden. Dies ist das von DOM vorgestellte Modell.

Welche URI enthält?
Ein XML-Namespace wird mit dem reservierten XML-Pseudoattribut xmlns oder xmlns: prefix deklariert, dessen Wert ein gültiger Namespace-Name sein muss.

Die folgende Deklaration ordnet beispielsweise das Präfix "xhtml:" dem XHTML-Namespace zu:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

WIE ich nach dem Lesen des Artikels auf Wikipedia entdeckt habe. URI enthält die XML-formatierten Spezifikationen des Namespaces und bietet eine Methode zur Vermeidung von Elementnamenskonflikten.

Möglicherweise wissen Sie, dass XML-Dokumente XML Schemafür die Element- / Tabellen- / Klassenstruktur von Elementen des XML-Dokuments verwendet werden.

Was sollte http://www.w3schools.com/furniture beinhalten ?

Die Antwort finden Sie auf Ihrer Seite, auf der Sie Informationen zum XML-Namespace erhalten haben. Überprüfen Sie den Namespaces in Real UseAbschnitt in diesem W3Schools- Artikel .

Überprüfen Sie den folgenden Link des Stapelüberlaufs, der zeigt, was dieser URI enthält:

Wie erstelle und verwende ich einen XML-Namespace?


-1

URI = global eindeutiger Name oder Bezeichner des Namespace

Erwägen Sie den Aufbau einer Datenbank oder eines Dokuments zum Finanzmanagement der Logistik der Ölindustrie. Dazu müssten für jedes Fach spezifische Vokabeln (dh kontrollierte Begriffe) verwendet werden: Datenbank, Dokument, Management, Finanzen, Logistik, Öl und Industrie.

Wenn sich keiner der Begriffe in diesen sieben Vokabularen überschneidet, wird nur ein URI benötigt. Für jeden Begriff, der sich mit anderen Begriffen in diesen Vokabeln überschneidet, benötigen Sie jedoch ein zusätzliches fachspezifisches Vokabular, das in einem URI oder einer IRI angegeben ist. Ein Weg, um dies zu umgehen, besteht darin, eine verschmolzene Taxonomie mit allgemeineren Begriffen und engeren fachspezifischen Begriffen zu schaffen.

Dies könnte dann zu einem Thesaurus erweitert werden, der auch die Jargon-Synonyme eines Begriffs anzeigt und die Angabe eines bevorzugten Begriffs unter diesen Jargon-Synonymen ermöglicht.


2
Dieser Beitrag ist ziemlich schwer zu lesen (Textwand). Hätten Sie etwas dagegen bearbeiten sie in eine bessere Form ing?
Mücke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.