XML模式验证:cvc-complex-type.2.4.a

时间:2011-09-20 09:57:41

标签: xml schema

我正在尝试根据我的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.

这条消息没有任何意义:(。谷歌解决方案很难(不可能?)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:12)

您的架构将“品牌”定义为没有命名空间。这就是'{"":brand}'的含义。但是在您的XML文档中,“brand”元素位于http://cars.example.org/命名空间中。因此它们不匹配,您得到验证错误。

要将架构中的“brand”元素声明为位于http://cars.example.org/命名空间中,请将属性elementFormDefault="qualified"添加到架构元素。

我建议为了完整性,您还要将attributeFormDefault="unqualified"添加到架构元素中,尽管在这种情况下这不是您的问题。

答案 1 :(得分:0)

你还没有验证汽车中的属性,这是命名空间的网址,这应该有效:

<?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>
相关问题