Hi Thomas,
Man macht es oft nur im Wurzelelement, weil: "Die Namensraum-Deklaration gilt für das Element, in dem sie angegeben ist, und für alle Elemente im Inhalt dieses Elements[...]". Damit erschlägt man mehrere Fliegen auf einmal.
Das klingt logisch.
Du verwechselst hier Namensräume mit Validerung von XML-Dokumenten.
Das glaube ich gern.
Also es ist eine Sache die Namensraumdeklarion zu machen.
Die andere ist das Verweisen auf eine Schema-Deklaration:
"In einem Instanzdokument [das wäre also die XML-Datei in der dein BlubberElement steht] bietet das Attribut schemaLocation Hinweise des Autors an einen Schema-Prozessor hinsichtlich der Lokation des Schema-Dokuments. Der Autor garantiert, dass diese Schema-Dokumente für eine Gültigkeitsprüfung des Dokumentinhalts auf Basis von Namensräumen relevant sind."
Meine Frage dazu wäre, wenn ich dort blubber.xsd angebe, dann habe ich keine Angabe dabei, woe die liegt, damit dagegen validiert werden kann. Im Zielsystem validiere ich damit indem ich dem Validierungstool sage, woe die XSD liegt. Warum also der Eintrag? Damit ich behaupten kann, ich hätte eine? :)
Das »xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"« braucht man, damit man dann entweder ein »xsi:schemaLocation« oder ein »xsi:noNamespaceSchemaLocation« Arttribut verwenden kann.
Okay, das brauche ich also nur, wenn ich die NamespaceShemaLocation- Angabe mache, lasse ich die weg, kann ich auch das weglassen, richtig?
"Ein Schema muss keinen Namensraum haben, und deshalb gibt es ein noNamespaceSchemaLocation-Attribut, das verwendet wird, um einen Hinweis auf die Lokation von Schema-Dokumenten ohne Ziel-Namensraum zu geben."
Verstehe ich richtig, dass es inkonsequent ist erst das Attribut xmlns:xsd="http://www.w3.org/2001/XMLSchema" anzugeben und dann noNameSpace zu sagen?
Grundsatzfrage: Wofür brauche ich einen Namensraum? Woran erkenne ich, dass ich einen verwende (am blubber:<elementname>? So wie bei den FOP-Zeug, wo immer fo: davor steht, jetzt mal in Kinderdeutsch?)
Das ist also das Eine. Das andere ist wozu man Schemas verwendet. Betrachtest du sie als "DTD" wird das auch schon klar. Sie dienen dazu, dass ein XML, das das Schema verwendet (also ein Instantzdokument) auf die Einhaltung der Regel, die im Schema definiert sind, überprüft werden kann.
Naja, ich will die XML's schon validieren, aber wie gesagt, alle Zielsysteme kennen die XSD und übergeben diese als Atrribut. Wozu dann der Eintrag im Header des Dokuments.
Wo ich dich gerade an der Strippe habe. Aufgefallen ist das Ganze, weil ich von verschiedenen Produzenten, verschiedene XML's bekomme, welche alle den gleichen Inhalt haben, bis auf die Headerdeklaration, das steht entweder nichts, oder nur die Hälfte oder alles und so wie ich es jetzt verstanden habe auch noch grundfalsch ;)
Mein Validator: Java:Sax meckert an, wenn nichts drin steht mit folgender Meldung: Datei ist nicht valid. cvc-elt.1: Die Deklaration von Element 'blubber' kann nicht gefunden werden.
Ja, das ist halt doof, ich habe es versucht im abzugewöhnen mit den diversen Tipps aus google, allerdings verstehe ich soviel davon wie ne Kuh auf der Weide und kann wahrscheinlich die Tipps gar nicht richtig verwerten.
Mhm, hast du das noch ne Anregung für mich?
ciao
romy