XML Namespaces - ich nix blicken

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

XML Namespaces - ich nix blicken

Beitrag 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:
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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?
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten