2013-03-26 104 views
15

まだ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です。

は今、私は私のXMLを検証しようとすると、私はこのエラーを取得:

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

私が思うこれはルート要素に名前空間の問題を行うことですが、私は本当にわかりません。

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

答えて

14

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

あなたschemaLocation属性はxsi:schemaLocationであるべきであり、あなたは右のネームスペースを使用するためにそれを修正する必要があります。 (名前空間はurn:Test.NamespaceはOKだろうけれども、ではありませんTest.Namespace有効なURI、ことになっているので)

あなたはおそらく、スキーマのtargetNamespacehttp://myNameSpace.comへの文書のxmlnsを変更する必要があります。一度それを行うと、スキーマが見つかります。ポイントは、スキーマのターゲット名前空間、ドキュメントの名前空間、およびスキーマの場所を指定する名前空間の3つすべてが同じでなければならないということです。

上記のすべての人に

+3

提案したとおりに以下の内容を修正しました。 「Three」ネームスペースの明確化が必要でした。 – Nerdio

1

あなたは上記の同意行うと

Test,NamespaceTest.Namespace対コンマでドット)ルート要素の名前空間と一致していませんあなたのXMLスキーマのtargetNamespaceは、あなたのelement2を持っていることを考慮しなければなりませんあなたのXSDにはないというアトリビュートがあります。ルート要素に

+0

ありがとう、2つの明白な間違いを見つけてください。私はこれらを修正しました。 'コード' <ルート のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" のxmlns = "Test.Namespace" のschemaLocation = "http://myNameSpace.com Test1.xsd"> <エレメント1のid = "001"> <エレメント2のid = "001.1"> <要素3のid = "001.1"/> 'コード' (申し訳ありませんが、私はコードを正しく挿入されているようには見えません)。 問題がまだ残っています... – Nerdio

17

おかげで、これは修正されました(あなたの<element2>には、スキーマをitemを期待文書で<element3>が含まれているとして、それはまだ検証していないでしょうが)。他の人の利益のために、最も重要なエラーはIanによって提案されたように3つの名前空間を整列させることでした。

完全性については

は、ここにタイプミスが

<?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およびXSDここ

XMLがあると、ここでのスキーマ

です
<?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> 

皆様にもおかげさまで、今後これが他の誰かに役立つことを願っています。

+4

私はあなたの答えにいくつかの改善を提案するかもしれません:あなたは私の答えを受け入れる必要はありません、私は思った一日待ってから、技術的にすべての修正が含まれているので、私は無効なURNのNID部分(NIDのための無効な文字である '.'を削除する)を修正し、また必須のNSS部分を追加します。さらに別の': 'で区切ります。 schemaLocationは単なるヒントに過ぎず、XSD対応のバリデーターはセキュリティ上の理由からではなくても、それを無視することができます。なぜXMLが無効であるのかという理由であってはなりません。 –

関連する問題