1

私はゆっくりと、しかし確実に、stackoverflow コミュニティからの多くの助けを借りて、いくつかの XML をまとめています。

正常に動作し、多くのタイプ定義を含む XML のスキーマがあります。そのため、スキーマを分割して型定義を別のスキーマに配置し、それらを他のスキーマで使用できるようにしました。あなたがフォローする場合; これは私がやったことです...

ここに私のXMLがあります

<?xml version="1.0" encoding="UTF-8"?>

<ns:Root
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns="urn:TestNamespace"  
    xsi:schemaLocation="urn:TestNamespace Test1.xsd"
    >
    <ns:element1 id="001">
        <ns:element2 id="001.1" order="1">
            <ns:element3 id="001.1.1" />
        </ns:element2>
        <ns:element2 id="001.2" order="2">
            <ns:element3 id="001.1.2" />
        </ns:element2>        
    </ns:element1>
    <ns:element1 id="002">
        <ns:element2 id="002.1" order="3">
        <ns:element3 id="002.1.1" />
        </ns:element2>
        <ns:element2 id="002.2" order="4">
            <ns:element3 id="002.1.2" />
        </ns:element2> 
    </ns:element1>    
</ns:Root>

これは私のXSDです

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:TestNamespace"
            xmlns:ns="urn:TestNamespace"
            elementFormDefault="qualified">

    <xsd:include schemaLocation="TestTypes1.xsd"/>
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="ns:element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:unique name="uniqueElement2OrderInElement1">
            <xsd:selector xpath="./ns:element1" />
            <xsd:field xpath="ns:element2/@order" />
        </xsd:unique>        
    </xsd:element>
</xsd:schema>

そして、これが型の新しいスキーマです。ここで定義された要素は、それらが機能した上記のスキーマから直接コピーされます。

<?xml version="1.0"?>

<xsd:schema version="1.0"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:TestNamespace"
           xmlns:ns="urn:TestNamespace"           
           elementFormDefault="unqualified">
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="ns:element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="ns:element3Type" />
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" />
        <xsd:attribute name="order" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="element3Type">
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
</xsd:schema>

ここで XML を検証しようとすると、次のエラーが発生します。

cvc-complex-type.2.4.a: 要素「ns:element2」で始まる無効なコンテンツが見つかりました。「{element2}」のいずれかが必要です。[9] cvc-complex-type.2.4.a: 要素「ns:element2」で始まる無効なコンテンツが見つかりました。「{element2}」のいずれかが必要です。[17]

9行目と17行目は、各「element1」の最初の「element2」の開始に関連しています。私が言うように、これは私がそれらを分割する前に機能していたので、今は何かを失ったか、あるものから別のものへの翻訳に失敗したに違いないと思います. 「element2」が 1 つ必要であると不平を言っているようで、「element2」の 2 番目のインスタンスの 1 つを削除しても同じエラーが発生します。要素の属性は、無制限の数の出現を許可するという点で正しいようです。

私はエラーを読み間違えていると思います。

いつものように、どんな助けや指導も大歓迎です。期待して感謝

4

1 に答える 1

2

メインの xsd で修飾されており、xml で修飾されているため、型スキーマにelementFormDefault="unqualified"elementFormDefault="qualified"ではなくを配置する必要があると思います。

于 2013-03-28T15:22:39.597 に答える