Проверка схемы XML: CVC-сложный тип.2.4.ля

Я пытаюсь проверить мой 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.

данное сообщение не имеет никакого смысла :(. И это очень трудно (невозможно?) для решения google.

Спасибо за помощь.

2 ответов


ваша схема определяет "бренд" как не находящийся в пространстве имен. Вот что!--0--> средства. Но в вашем XML-документе элемент "бренд" находится в http://cars.example.org/ пространство имен. Поэтому они не совпадают, и вы получаете ошибку проверки.

чтобы объявить элемент "brand" в вашей схеме как находящийся в http://cars.example.org/ пространство имен, добавьте атрибут elementFormDefault="qualified" к элементу схемы.

Я предлагаю, чтобы для полноты вы также добавили attributeFormDefault="unqualified" к элементу схемы, хотя это не ваш проблема в данном случае.


вы не проверили атрибут в cars, который является url-адресом пространства имен, это должно работать:

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