質問

インポートしようとは、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を期待していた」) - ここで間違っているものを上の任意のヒントを。

役に立ちましたか?

解決

それは名前空間なしにあったかのようにあなたが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>

編集の私は尖ったアウトを持っている必要があります間のの種類要素の違いです。後者のみインポートしたタイプは、あなたが望んでいたとして働き、そしてあなたの要素がない理由だと、(一部例外あり)文書に表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top