Как исправить ошибку проверки XSD? - PullRequest
2 голосов
/ 15 января 2009

У меня есть форма XML с элементом 0, которая правильно сформирована, но недействительна. Когда я пытаюсь проверить его XMLSpy, я получаю следующую ошибку: Ничто не разрешено внутри пустого элемента «скрытый». Ниже моя схема:

<xs:element name="hidden">
    <xs:complexType>
        <xs:attribute name="datatype" type="xs:string" use="optional"/>
        <xs:attribute name="alias" type="xs:string" use="optional"/>
        <xs:attribute name="source" type="xs:string" use="optional"/>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="lookup" type="xs:string" use="optional"/>
    </xs:complexType>
</xs:element>

Что мне нужно добавить в схему выше, чтобы исправить эту ошибку? Спасибо мл

Ответы [ 2 ]

2 голосов
/ 15 января 2009

Ваш "скрытый" элемент определен как пустой, так как в схеме нет ничего явно разрешающего дочерние элементы. Я предполагаю, что вы хотите что-то вроде

<hidden *[attributes]*>
   <some_other_element/>
</hidden>

Но согласно http://www.w3schools.com/Schema/schema_complex_empty.asp вы неявно определили «скрытый» как пустой. Вам необходимо определить, какие элементы могут появляться внутри «скрытых». Есть много способов сделать это, и я предлагаю начать с чтения http://www.w3schools.com/Schema/schema_complex.asp.

1 голос
/ 15 января 2009

Как заметил Уэлбог, вы определили сложный пустой элемент. Предполагая, что вам нужен только текст внутри скрытого тега, вы можете написать схему по этим строкам:

<xs:element name="hidden">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="datatype" type="xs:string" use="optional"/>
        <xs:attribute name="alias"    type="xs:string" use="optional"/>
        <xs:attribute name="source"   type="xs:string" use="optional"/>
        <xs:attribute name="name"     type="xs:string" use="required"/>
        <xs:attribute name="lookup"   type="xs:string" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

Таким образом, вы можете получить фрагмент XML, подобный этому:

<hidden datatype="foo" name="bar">0</hidden>

То, что здесь происходит, это то, что я определил «скрытый» как расширение из xs:integer (кстати, вы можете сделать так, чтобы оно расширяло любой тип, который вы хотите), что означает «скрытый» "элементы похожи на элемент целых чисел, но с дополнительными ограничениями или, в данном случае, с дополнительными атрибутами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...