проверка схемы xsd - PullRequest
       4

проверка схемы xsd

0 голосов
/ 11 февраля 2009

У меня проблема со схемой xsd. У меня определена следующая схема:

<xs:element name="nodes" type="nodesRootType" />

<xs:complexType name="nodesRootType">
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="node" type="nodeType" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="nodeType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="node" type="nodeType" />
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>

и я тестирую его на следующем xml:

<label name="Label_6" >
    <label name="Label_7" />
</label>
<label name="Label_8" />

Я получаю ошибку:

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

Что я здесь скучаю. Любая помощь высоко ценится.

Лучший, Юзеф

1 Ответ

3 голосов
/ 11 февраля 2009

Один проверяемый XML-документ не может иметь несколько корней. У него должен быть один корень. Ваш XML:

<label name="Label_6">
    <label name="Label_7"/>
</label>
<label name="Label_8"/>

имеет два корня, потому что есть два элемента "label" на корневом уровне. Кроме того, ваша схема не определяет элемент с именем "label", поэтому я запутался. Возможно, вам нужна схема, которая будет проверять что-то вроде следующего XML:

<labels>
    <label name="Label_6">
        <label name="Label_7"/>
    </label>
    <label name="Label_8"/>
</labels>

где у вас есть один корень "labels". Обратите внимание, что у вас есть элементы с одинаковыми именами "label" на разных уровнях иерархии. Это не verboten (см., Например, xhtml, где вы можете иметь div внутри div внутри ...), но это может сбить с толку. Для примера XML, показанного выше, попробуйте схему что-то вроде:

<xs:element name="labels">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="label" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:complexType name="labelType">
  <xs:sequence>
    <xs:element ref="label" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>

<xs:element name="label" type="labelType"/>
...