次のXML文書とスキーマは、問題が最初に発生しているはるかに大きなスキーマから煮詰めた:スキーマの名前空間を '持っている'と定義されたxml要素に 'null-namespace'が必要なのはなぜですか?
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>
スキーマ:
<?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>
Iスキーマに対してドキュメントを検証すると、<f2b:Bar>
-elementに、<f2b:Bar>
が必要ではないというエラーメッセージが表示されます。文書を有効にするためには、要素を明示的に(!)ヌルネームスペース '<Bar xmlns="">
に入れなければなりません。 null-namespaced要素が必要な理由はわかりません。スキーマはすべての要素の名前空間を定義します。<Foo>
要素の場合、f2b
-namespaceは確かにバリデータによって期待されます。しかし、私が上記のように<Bar>
要素定義の名前空間を明示的に設定しても、バリデータはBar
要素に対してはまだxmlns=""
と予想されます。 私は運がない答えを見つけるためにスキーマとドキュメントのいくつかのバリエーションを試しました - そして、なぜこの特殊なケースでなぜnull-namespaceが期待されるのかわかりません。
どれヒント感謝... ekke
きれいな答えをありがとう - あなたは完全に正しいです。エケ – ekke