Проверка схемы XML: cvc-complex-type.2.4.a - PullRequest
10 голосов
/ 20 сентября 2011

Я пытаюсь проверить свой документ 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 ]

12 голосов
/ 20 сентября 2011

Ваша схема определяет бренд как отсутствующий в пространстве имен. Вот что означает '{"":brand}'. Но в вашем XML-документе элемент "brand" находится в пространстве имен http://cars.example.org/. Таким образом, они не совпадают, и вы получаете ошибку проверки.

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

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

0 голосов
/ 20 сентября 2011

Вы не проверили атрибут в автомобилях, который является 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...