29

私はまだXMLスキーマなどに少し慣れておらず、XML、スキーマ、およびスタイルシート(XSLT)の開発に取り組んでいます。私はかなりの進歩を遂げましたが、スキーマが機能しなくなったことに気づいたので、より単純でわかりにくい例に戻しました。

これが私のXMLです:

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="Test.Namespace"  
      schemaLocation="http://myNameSpace.com Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
             <element3 id="001.1" />
        </element2>
    </element1>
</Root>

私はここにあるスキーマを書きました:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

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

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

スキーマは、私の実際のXMLの構造を表しています。

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

cvc-elt.1: Cannot find the declaration of element 'Root'. [7]

これは、ルート要素の名前空間の問題に関係していると思いますが、実際にはわかりません。

誰かが私が間違っていることを提案できますか?

4

3 に答える 3

28

上記の皆さんに感謝しますが、これは修正されました。他の人の利益のために、最も重大なエラーは、Ianによって提案されたように3つの名前空間を整列させることでした。

完全を期すために、ここに修正されたXMLとXSDがあります

これが、タイプミスが修正されたXMLです(遅刻によって混乱が生じた場合は申し訳ありません)

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

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="urn:Test.Namespace"  
      xsi:schemaLocation="urn:Test.Namespace Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
            <element3 id="001.1" />
        </element2>
    </element1>
</Root>

そして、これがスキーマです

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:Test.Namespace"
            xmlns="urn:Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
       
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
       
    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

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

皆さん、ありがとうございました。これが将来誰かに役立つことを願っています。

于 2013-03-27T10:14:21.833 に答える
26

cvc-elt.1:要素「ルート」の宣言が見つかりません。[7]

ルートschemaLocation要素の属性はであるxsi:schemaLocation必要があり、正しい名前空間を使用するように修正する必要があります。

おそらくtargetNamespace、スキーマとxmlnsドキュメントのをに変更する必要がありますhttp://myNameSpace.com(名前空間は有効なURIであると想定されているため、そうでTest.Namespaceはありませんが、問題ありませんurn:Test.Namespace)。これを行うと、スキーマが見つかるはずです。重要なのは、スキーマのターゲット名前空間、ドキュメントの名前空間、およびスキーマの場所を指定する名前空間の3つすべてが同じである必要があるということです。

(ただし、スキーマが予期するドキュメントにが<element2>含まれているため、検証されません)<element3>item

于 2013-03-27T09:11:55.440 に答える
1

XMLスキーマのがルートtargetNamespace要素の名前空間と一致しません(ドットインとコンマイン)Test.NamespaceTest,Namespace

上記に同意したら、XSDにないelement2属性の順序があることを考慮する必要があります。

于 2013-03-27T01:08:57.013 に答える