Rolf B: Namespace Grundlagenfrage

Beitrag lesen

Hallo Pauli,

ein Programm, das eine XML Datei verarbeiten will, muss wissen, was die vorgefundenen Elemente und Attribute bedeuten. Dazu dient der Namespace.

Wenn im XML steht: xmlns:xs="http://www.w3.org/2001/XMLSchema", dann definiert das den Default-Namespace und der XML-Reader weiß, dass Elemente, die das Namespace-Prefix xs tragen, zum XMLSchema 1.0 oder XMLSchema 1.1 gehören.

"XML-Reader" ist der Teil eines Anwendungsprogramms, das die Textdatei in ein XML-Dokument oder einen XML-Stream übersetzt (es gibt verschiedene Typen von Readern).

Das eigentliche Anwendungsprogramm verwendet den Reader, um die vorgefundenen XML Inhalte weiter zu verarbeiten. Dinge wie Namespace-Zuordnungen oder - sofern vorhanden - Schema-Validierung erledigt der Reader.

D.h. wenn Du ein XML-Dokument hast, das das Schema festlegt, dann kannst Du dem XML-Reader sagen: "Lies foo.xml und validiere das mit foo-schema.xml". Der Reader kann nun stumpf annehmen, dass foo-schema.xml ein XMLSchema ist. Das wäre aber dumm; XML gibt's wie Sand am Meer und die Namespace-Angaben sind gerade dafür gemacht, mögliche Mehrdeutigkeiten zu verhindern. Ein XML-Dokument mit Rootnode <schema> kann und darf jeder schreiben, aber den Namespace http://www.w3.org/2001/XMLSchema dafür angeben darf man nur, wenn es auch wirklich ein Schema ist (andernfalls ist das Dokument ungültig).

Angenommen, irgendwer erfindet nächstes Jahr XMLSchema 2.0, eine ganz tolle Innovation. Eine solche Schemadatei müsste einen anderen Namespace bekommen, denn der alte XML-Reader, der nur XMLSchema 1.1 kennt, würde damit nicht klarkommen. Möglicherweise würde man diesen Namespace http://www.w3.org/2020/XMLSchema nennen, und der alte XML-Reader würde dann sagen: Das Element schema in diesem Namespace kann ich nicht verarbeiten.

Woher weiss das Programm das diese Vorgaben umsetzen soll, was da die Grenzen/Vorgaben/... sind?

Die Anwendung der Schema-Inhalte, d.h. das Verstehen des XMLSchema-Dokuments und das Durchführen der Prüfungen, die sich daraus ergeben, kann man meines Erachtens nicht abstrakt definieren. Das ist Programmierarbeit, und das Ergebnis ist der XML-Validator, der Teil des XML-Readers ist. Ein XML-Validator, der das fiktive XMLSchema 2.0 beherrscht, sieht sicherlich anders aus als einer für XMLSchema 1.1. Beim Übergang XMLSchema 1.0 nach 1.1 ist der Namespace gleich geblieben, das W3C behauptet, sie hätten rück- und vorwärtskompatibel gearbeitet.

D.h. du brauchst einen XML-Validator. Sowas gibt es eigenständig oder als Teil eines XML-Readers. Der Validator weiß, wie ein Schema auszsehen hat. Er liest das Schema und kann an Hand dessen die Gültigkeit des eigentlichen XML Dokuments überprüfen.

Das geht auch rekursiv. Es gibt ein XMLSchema, das XMLSchema-Dokumente beschreibt. D.h. der Validator kann auf diesem Weg auch das Schema, das Du ihm gibst, zunächst validieren, bevor er es als Arbeitsgrundlage nimmt.

Zu finden ist das hier: https://www.w3.org/2001/XMLSchema - es ist in diesem Fall tatsächlich so, dass der Namespace eine real existierende URL ist.

Rolf

--
sumpsi - posui - clusi