Frage

Das ist etwas, das ich immer ein bisschen schwer zu finden, andere zu erklären: Warum gibt es XML-Namespaces? Wann sollten wir sie verwenden und wann sollten wir nicht? Was sind die häufigsten Gefahren, wenn sie mit Namespaces in XML zu arbeiten?

Auch in welcher Beziehung stehen sie zu XML-Schemas? Sollte XSD-Schema immer mit einem Namespace zugeordnet werden?

War es hilfreich?

Lösung

Sie sind dafür, dass mehrere Markup-Sprachen kombiniert werden, ohne sich um Konflikte von Element kümmern und Attributnamen.

Zum Beispiel schauen jeder wenig XSLT-Code, und dann denken, was passieren würde, wenn Sie nicht Namespaces verwendet haben und versuchten, eine XSLT zu schreiben, wo die Ausgabe „Vorlage“ enthalten hat, „for-each“, etc, Elemente. Syntaxfehler, ist das, was.

Ich werde den Rat und Tücke, andere mit mehr Erfahrung als ich verlassen.

Andere Tipps

Warum XML-Namespaces existieren?

Weil, im Jahr 1997, einige sehr einflussreichen Personen in der W3C wollten sie, und würden für eine Antwort nicht nehmen nicht. Selbst wenn nachgewiesen wurde, ich wage zu sagen, schlüssig, dass es bessere Möglichkeiten, um das „Problem“ sie dachten, sie hätten zu lösen waren, sie ausübten noch ihren Einfluss, ihre Wünsche in eine W3C-Empfehlung geschrieben haben.

Der größte Whopper in der mittlerweile umfangreichen Mythologie XML-Namensraumes umgibt, ist, dass es die technische Wert für sich ist. (Dies ist die nachgeschaltete Wirkung einer Empfehlung einfach bestehenden und damit Mindspace besetzen - „gee, es muss doch ein (gut) Grund sein!“ -. Als irgendwo auf eine vergeßbar Fußnote gegen)

viel Schmerz, kein Gewinn .

Wann sollten wir sie verwenden und wann sollten wir nicht?

Sie sollten sie nie verwenden, wenn Sie es vermeiden kann. Leider hat die unnachgiebige Förderung dieses BAD [*] Geräts von den interessierten Parteien eine Clusterf * ck von Spezifikationen heute gefördert, dass es praktisch unmöglich macht nicht mit XML-Namen an einem bestimmten Punkt oder einem anderes zu kämpfen zu haben. Also, auch wenn Sie XML-Namespaces selbst eschew, werden Sie Namespace-verkrustete crud kommen auf Sie aus allen Richtungen, oder noch schlimmer, Toolsets, die einfach weigern zu arbeiten, wenn Sie sie füttern solche crud finden.

Was die allgemeinen Probleme sind, wenn sie mit Namespaces in XML zu arbeiten?

Ein sehr häufiger Fehler ist bei der Verwendung von XPath-Ausdrücken mit Dokumenten, bei denen ein Namensraum „vorbelegt“ wurde: der Namespace wird in der Ausdrücken explizit sein. Ein weiteres Problem ist, mit ihnen „richtig“, wenn Dokumente Konstruktion: schaffen sie Probleme aus Luft .

Auch, wie stehen sie zu XML-Schema? XSD sollte Schemata immer mit einem Namespace zugeordnet werden?

Es gibt keine notwendige Beziehung, mit der Ausnahme, dass die XSD-Spezifikation zu einer Zeit entwickelt wurde, als nur etwa jeder im Ausschuß den XML-Namespaces Bit in den Zähnen hatten. So arbeitete sie es in so tief wie sie konnten. Es ist möglich, doch XSD-Schemas ohne Namensraum zu verwenden, aber es ist ein steiler bergauf slog wie fast Schemata jedes Toolset unterstützt XSD geht davon aus, dass Sie „wollen“ wird Namespaces verwenden.

[*] BAD = Unterbrochene As Designed

UPDATE: Ein alter Aufsatz über diese nicht-Lösung für ein nicht-Problem .

Es ist fast die gleiche wie zu fragen: „Warum verwenden wir Pakete für Java / C #?“:

  • Wiederverwertbarkeit . Sie können eine Reihe von Tags wiederverwenden können / Attribute, die Sie über verschiedene Arten von XML-Dokumenten definieren
  • Modularität : Wenn Sie etwas "Aspekt", um Ihre XML hinzuzufügen; einen Namespace zu Ihrem XML-Dokument hinzuzufügen, ist einfacher als Sie Ihre ganze XML-Schema-Definition zu ändern.
  • Vermeiden Sie poluting den „main“ Namespace . Sie zwingen, Ihren Parser nicht mit einem großen Schema-Definition zu arbeiten, verwenden Sie einfach den Namespace Sie benötigen

Der größte pitfall IMHO ist Mensch-Interaktion zu interpretieren Dokumente z.B. zu entwickeln Code ein XML-Dokument zu verarbeiten. Es ist zu einfach auf dem wörtlichen Ausdruck des Dokuments zu konzentrieren, anstatt das infoset Ergebnisses das Dokuments Parsen.

z. die folgenden Knoten

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

sind alle semantisch identisch -. Doch ganz anders als das naive Auge

Das erste Beispiel ergibt ein sehr häufiger Fehler XPaths Entwicklung - die Tatsache, dass fehlende „a“ in einem Namensraum ist - also // a Erträge keine Spiele. (Oder noch schlimmer Knoten in einem anderen Namespace passend!)

Das dritte Beispiel öffnet ich einen weiteren Fehler zu verstehen -, dass der Präfix Text semantisch bedeutsam ist. Wenn Dokumente mit XPath parsen kann ich jede Präfix erkläre ich so lange für den Abgleich wie wie es ist uri diejenigen des Dokuments übereinstimmt.

Denken Sie an sie als Nachnamen für Elementtypen. Wenn Sie zwei Freunde haben, beide Bob genannt, und Sie sprechen über eine von ihnen, könnte jemand fragen, welche Bob Sie sprechen. Nur zu sagen "Bob" ist nicht sehr hilfreich, so dass Sie "Bob Smith" sagen oder "Bob Jones".

Es ist das gleiche mit Elementtypen. Manchmal ist ein kurzer Name ist nicht genug, weil verschiedene Personen den gleichen Namen auswählen können. So Sie umfassen eine URI als „Nachnamen“, aus zwischen den verschiedenen Bobs dort zu unterscheiden.

XML ist eine super-Sprache, was bedeutet, dass sie die Grundlage für eine XML-basierte Sprache ist (macht Sinn, nicht wahr?). Denken Sie an XML als Stift, der jeden Satz schreiben kann, in jeder Sprache. Es hängt alles von dem Schriftsteller und vorzugsweise die Sprache sollte den Leser bekannt sein.

Ein XML Namespace ist im Grunde der Name der Sprache, ähnlich wie "Englisch" oder "עברית". Ich helfe der Empfänger des XML-Dokuments, es zu analysieren und extrahieren die Informationen innerhalb.

Lassen Sie uns sagen, dass ich eine Möbelfabrik und Sie haben ein Möbelgeschäft. Ihre Speicheranwendung und meine Versorgungs Anwendung ist völlig unabhängig, aber wenn sie durch XML-Nachrichten kommunizieren, die Nachrichten sollten von beiden Seiten

verständlich und leicht analysiert werden

Daher müssen beide Systeme das Schema wissen, was die Sprachsyntax definiert und vereinbart Einschränkungen. Denken Sie an das Schema als Wörterbuch und Grammatiklehrbuch. Das Schema ist das Dokument, das beide Systeme sollen wissen, dass wer auch immer den Parsing-Code in jedem System schreibt müssen wissen, und das schließt die Erklärung des Namespace.

Jeder Namespace als URI-Namen, die in den meisten Fällen sind die Lage des Schemas Dokuments, das es definiert.

Natürlich nicht jedes XML-Dokument muss einen Namensraum, vor allem, wenn es keine Informationen zu einem entfernten System zu vermitteln, verwendet. Zum Beispiel, wenn Sie Objekte in XML serialisiert in Ihrer Datenbank persistierenden.

Wir verwenden Namespaces, weil die Menschen die gleichen Worte benutzen xeep wollen verschiedene Dinge in ihrem eigenen privaten idaho bedeuten. Normalerweise können Sie aus dem Kontext bestimmen, was eine Person bedeutet. In einer Personaldatenbank, sind die XML-Personalakten. In einer Fahrzeug-Registrierungsdatenbank ist die XML-Fahrzeug Registry-Einträge.

Sowohl einen Tag hält namens „location“, aber der Tag bedeutet verschiedene Dinge für jeden und enthält verschiedene Felder aus.

Nun, das ist cool: aber was ist, wenn Sie wollen oder müssen XML speichern sowohl in der gleichen Datenbank? Oder noch interessanter ist, was passiert, wenn beide Datenbanken wollen XML Stücke speichern aus einer anderen, gemeinsamen Datenbank (zB: eine Konten-Datenbank).

XML-Name ordnet jeden XML-Tag ein URI, so dass der Variablenname selbst eine URL vor ihm hat, das ist Teil der Tag-Namen (natürlich verwenden tatsächliche XML-Dokumente eine Kurz dies tun). Durch die sorgfältige Auswahl der URI, um sein leicht zuversichtlich, dass die Tag-Namen werden nicht kollidieren - es ist, als ob die beiden Standorte-Tags ganz anders benannt wurden, so gibt es keine Verwirrung. Als Bonus können die beiden ganz anderen Standort-Tags Sachen aus der Kontendatenbank umfassen, und ausdrücklich erklären, dass sie über die gleiche Sache sprechen.

Die Sache, die all dies nützlich macht, ist XPATH.

Mit dem oben, können Sie beginnen, XPath-Ausdrücke zu schreiben, sagen Dinge wie: Finden Sie mir irgendwelche accounts:account overdue Abschnitte überall in diesem xml. Oder:. Findet mich alle accounts:warning message Artikel überall in diesem Stück von XML, wo die Warnmeldung ist ein Kind-Knoten (jedoch tief) entweder aus einem personnel:payment Knoten oder einen Knoten vehicle:status

Die XPath-Ausdruck verwendet, irgendwo in einem XSLT-Dokument werden könnte, deren Aufgabe es ist, die XML in XHTML oder XPDF zu konvertieren, für die Anzeige.

Was ist der Lohn? Warum tun Sie es? Da Sie die XML Logfile suchen, ziehen alle Konten überfälligen Nachrichten, wo immer sie erscheinen, ohne sie zu verwirren mit „Nachricht“ Tags von anderen Systemen erzeugt , konvertieren ‚em xHTML, und zeigt sie in fett rot über einen CSS-Tag. alle ohne einen Fetzen prozeduralen Code schreiben

Zum Beispiel: XML-Namespaces von Beispiel

In meinen Worten: Wenn Sie einige XML-Format für externe Unternehmen (zum Beispiel) verwenden müssen, und Sie müssen einige Informationen in XML-Dokument zur Verfügung stellen, die denselben Namen hat, müssen Sie einen Namespace. Beispiel:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

und Sie einige Daten in diesem Dokument zusammenführen möchten, die einen gleichen Namen hat, aber ein anderer Sinn (so Wert), sollten Sie einen Namespace verwenden:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

Ofcourse - Sie können einen Namen des Attributs ändern. Zum Beispiel auf „my_unique_color“. Bud in einem anderen Dokument, kann es wieder mit dem gleichen Namen zuzuschreiben sein. Also, wenn Sie einen eindeutigen Namespace (unsere Web-Domain zum Beispiel) haben, können Sie immer die gleichen Namen der Elemente und / oder Attribute withoud problemlos.

Von der W3 Empfehlung ...

  

XML-Namespaces bietet eine einfache Methode für die Qualifizierung von Element- und Attributnamen verwendeten in Extensible Markup Language Dokumenten, die von ihnen mit Namespaces identifiziert durch URI-Verweis zugeordnet wird.

Namespaces werden verwendet, um Namen eindeutig zu machen, die Sie innerhalb des Dokuments verwenden. Es gibt Ihnen auch die Möglichkeit, einen kurzen Namen zu einem Namensraum zu binden, die an ein entferntes Element oder Attribut beziehen können dann verwendet. Der Namensraum selbst bezieht sich auf die Stelle, die die Elemente definiert und Attribute, die Sie im Dokument verwendet werden. Es gibt viel mehr zu wissen, aber das ist das Herz davon. Es gibt viel mehr Informationen hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top