Das folgende XML-Dokument und das Schema wurde von einem viel größeren Schema, in dem kocht das Problem zuerst aufgetreten:Warum wird der 'NULL-Namespace' für ein XML-Element erwartet, für das im Namespace ein Namespace definiert wurde?
Das Dokument xml:
<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd">
<f2b:Bar>text</f2b:Bar>
</f2b:Foo>
Das Schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar">
<xs:complexType name="T_Foo">
<xs:sequence>
<xs:element name="Bar" xmlns="f2b"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Foo" type="f2b:T_Foo"/>
</xs:schema>
Als ich validiere das Dokument gegen das Schema, bekomme ich eine Fehlermeldung auf dem <f2b:Bar>
-Element, dass <f2b:Bar>
nicht erwartet wird. Um das Dokument gültig zu machen, muss ich das <Bar>
-Element explizit (!) In den 'Null-Namespace' setzen: <Bar xmlns="">
. Ich sehe nicht, warum ein Null-Namespaced-Element erwartet werden sollte. Das Schema definiert einen Namensraum für alle Elemente und für das <Foo>
-Element wird der f2b
-Name-Bereich tatsächlich vom Validator erwartet. Aber selbst wenn ich den Namespace in der <Bar>
-Element-Definition explizit wie oben gesetzt habe, erwartet der Validator immer noch xmlns=""
für das Bar
-Element. Ich habe verschiedene Varianten des Schemas und des Dokuments ausprobiert, um eine Antwort ohne Glück zu finden - und ich kann einfach nicht erraten, warum in diesem speziellen Fall der Null-Namespace erwartet wird.
Jeder Hinweis geschätzt ... ekke
Danke für die klare Antwort - Sie haben vollkommen Recht. ekke – ekke