Seite 1 von 1

XML Namespaces - ich nix blicken

Verfasst: 25.10.2006 09:44
von ZeHa
Servus,

wollte mal nachfragen, ob hier jemand in der Lage ist, mir mit 2 - 3 Sätzen (okay dürfen auch 4 oder 5 sein) zu erklären, was genau hinter den XML Namespaces steckt.

Das Problem ist, ich hab mir mehrere Erklärungstexte durchgelesen, aber eine Frage ist weiterhin offen geblieben bisher. Warum werden XML-Namespaces immer als URL angegeben? Ist das nur eine Art "Notiz", so daß einer hinterher weiß, auf welchen Namespace man sich hier festgelegt hat, oder gibt es mehrere Standard-Namespaces, die alle per URL angegeben werden und anhand dieser identifiziert werden, ODER wird im Fall einer Schema-Validierung bzw. XSL-Transformation dann tatsächlich ONLINE eine Adresse aufgerufen, aus der irgendwelche Definitionen gezogen werden?

Weil dann wäre ja jede der oben genannten Operationen nur DANN möglich, wenn eine Internet-Verbindung besteht. Aber irgendwie wird darüber nirgends Auskunft gegeben, und es bleibt mir nach wie vor ein Rätsel.

Ich hoffe, hier weiß einer mehr drüber bescheid als ich :mrgreen:

Verfasst: 25.10.2006 10:17
von Tafkadasom2k5
Heyho!
XML-Namespaces sind dazu da, um falsche Schemata-Zuordnungen zu verhindern. Wenn du eine XML-Datei hast

Code: Alles auswählen

<?xml version="1.0"?>
<Test xmlns:xsi="Testschema" xsi:noNamespaceSchemaLocation="Schema.xsd"></test>
Und jetzt genau dazu ein Schema, was du "Schema.xsd" genannt hast, darauf passt, ist ja alles schön und gut.

Nehmen wir aber an, dass du "Schema.xsd" als Standard-Namen für alle deine Schemata verwendest (oder, dass dein Programm solche Schemata bauen kann, und du "Schema.xsd" als Standardnamen vorbelegst). Jetzt kommt es dazu, dass dein Programm die test-XML von oben aufruft, du aber ausversehens deine alte Schema.xsd überschrieben hast.

Jetzt kann es dazu kommen, dass dein Programm (durch die neue Schema.xsd) sieht "Jo, die Datei test.xml ist korrekt", weil gerade das neu geschriebene Schema darauf passt. Das kann widerum zu bösen abstürzen führen, wenn du dichdarauf verlässt, und dann versuchst "Tafkadasom2k5 ist ein Idiot" in eine Integer-Variable zu übergeben.

Um dem vorzubeugen, schreibst du in dein Schema seinen "Namespace", den du benennen kannst wie du möchtest.

Da die meisten Beispiele vom WC3-Konsorzium erstellt wurden, steht dann oftmals da "http://www.w3.org/2001/XMLSchema-instance" oder Ähnliches. Aber die Homepage hat da nichts mit zu tun, sie ist lediglich der Identifizierer- man kann also auch "Programm-4-Schema" dort hineinschreiben.

Ich hoffe, ich konnte ein bisschen Licht in den Wald hier bringen- mich hat das alles auch ein paar Tage gekostet.... ;)

Gr33tz
Tafkadasom2k5

Verfasst: 25.10.2006 10:31
von ZeHa
Um dem vorzubeugen, schreibst du in dein Schema seinen "Namespace", den du benennen kannst wie du möchtest.


Aaahhhh...... bedeutet das also in etwa folgendes:

in Schema1 steht als Namespace "fuckin_great_namespace"
in Schema2 steht als Namespace "not_so_great_namespace"

Nun steht im eigentlichen XML-Dokument "fuckin_great_namespace", und somit ist die Zuordnung gegeben, sodaß die Validierung weiß, daß das XML-Dokument auch mit dem richtigen Schema validiert wird bzw. wenn im Schema1 irgendwann ein anderer Namespace steht, die Validierung fehlschlägt und der Validator sofort sagt "moment mal, Du weißt hoffentlich daß die Namespaces gar nicht mehr zusammenpassen?"

Hab ich das so richtig verstanden?

Verfasst: 25.10.2006 12:32
von Tafkadasom2k5
Jo. Also kann es nicht passieren, dass du (in deinem Beispiel) Schema1 und Schema2 "verwechselst" oder "verwechseln lässt", wegen falscher Dateinamen oder Pfade.

Gr33tz
Tafkadasom2k5