0

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を期待していました」)-ここで何が問題なのかについてのヒントはありますか?

4

1 に答える 1

0

名前空間がないかのように参照fooElementしています。インスタンス ドキュメントで正しい名前空間を使用する必要があります。

<?xml version="1.0"?>
<example
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     
  xsi:noNamespaceSchemaLocation="example.xsd" xmlns:shared="http://shared.com">
    <importedElement>
        <shared:fooElement>42</shared:fooElement>
    </importedElement>
    <importedType>
        <bar>42</bar>
    </importedType>
</example>

編集:私は指摘すべきでした:それはタイプ要素の違いです; 後者のみがドキュメントに表示されます (いくつかの例外があります)。そのため、インポートされた型は希望どおりに機能し、要素は機能しません。

于 2010-04-14T17:29:55.070 に答える