web-dev-qa-db-ja.com

XMLスキーマの検証:cvc-complex-type.2.4.a

XMLスキーマに対してXMLドキュメントを検証しようとしています。

これは私のスキーマです:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://cars.example.org/">
  <element name="cars">
    <complexType>
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element name="brand" type="string"/>
      </sequence>
    </complexType>
  </element>
</schema>

これは私のXMLドキュメントです:

<?xml version="1.0" encoding="UTF-8"?>
<cars xmlns="http://cars.example.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://cars.example.org/ cars.xsd">
  <brand>x</brand>
</cars>

(Eclipseを介して)ドキュメントを検証しているときに、4行目に次のメッセージが表示されます。

cvc-complex-type.2.4.a: Invalid content was found starting with element 'brand'. One of '{"":brand}' is expected.

このメッセージは意味がありません:(。そしてグーグルソリューションは非常に難しい(不可能ですか?)。

ご協力ありがとうございました。

11
woky

スキーマは、「ブランド」を名前空間がないものとして定義しています。それが'{"":brand}'の意味です。ただし、XMLドキュメントでは、「brand」要素はhttp://cars.example.org/名前空間にあります。したがって、それらは一致せず、検証エラーが発生します。

スキーマの「brand」要素をhttp://cars.example.org/名前空間にあると宣言するには、属性elementFormDefault="qualified"をスキーマ要素に追加します。

完全を期すために、スキーマ要素にattributeFormDefault="unqualified"も追加することをお勧めしますが、この場合は問題ではありません。

14
Alohci

名前空間のURLであるcars内の属性を検証していません。これは機能するはずです。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
  targetNamespace="http://cars.example.org/">
  <element name="cars">
    <complexType>
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element name="brand" type="string"/>
      </sequence>
       <attribute name="schemaLocation" type="anyURI"/>
    </complexType>
  </element>
</schema>
0
Mansuro