XMLスキーマから共有定義をインポートしようとすると、共有タイプを適切に参照できますが、共有要素を参照すると検証エラーが発生します。
これは、共有定義(example.xsd)をインポートするスキーマです。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:shared="http://shared.com">
<xs:import namespace="http://shared.com" schemaLocation="shared.xsd"/>
<xs:element name="example">
<xs:complexType>
<xs:sequence>
<xs:element ref="importedElement"/>
<xs:element ref="importedType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedElement">
<xs:complexType>
<xs:sequence>
<xs:element ref="shared:fooElement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedType">
<xs:complexType>
<xs:sequence>
<xs:element name="bar" type="shared:barType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
これらは共有定義(shared.xsd)です:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://shared.com"
targetNamespace="http://shared.com">
<xs:element name="fooElement">
<xs:simpleType>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:element>
<xs:simpleType name="barType">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:schema>
ここで、このXMLインスタンスについて考えてみます。
<?xml version="1.0"?>
<example
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="example.xsd">
<importedElement>
<fooElement>42</fooElement>
</importedElement>
<importedType>
<bar>42</bar>
</importedType>
</example>
検証すると、「importedType」は完全に正常に機能しますが、「importedElement」では次のエラーが発生します。
要素'fooElement'で始まる無効なコンテンツが見つかりました。'{" http://shared.com ":fooElement}'のいずれかが必要です
私の問題は名前空間の問題に関連していると思います(したがって、どういうわけか誤解を招く「fooElementを取得しましたが、fooElementを期待していました」)-ここで何が問題なのかについてのヒントはありますか?