XSD (схема XML): у элемента должен быть еще один дочерний элемент - PullRequest
2 голосов
/ 30 июня 2011

Допустим, у меня есть такой элемент XML, и я пытаюсь написать XSD для этого элемента:

<foo name="bar">
    ...
</foo>

Правила этого элемента:

  • Его имя "foo"
  • У него есть атрибут с именем "bar"
  • Его значением атрибута "bar" является строка
  • Он должен иметь одного или нескольких дочерних элементов

Этот XSD инкапсулирует все правила, кроме последнего:

Как указать последнее правило - у элемента должны быть дети?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Используйте элемент <xs:any>, чтобы разрешить любые элементы в качестве дочернего содержимого.

Пример кода в соответствии с вашими правилами:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="foo">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="1" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="bar" type="xs:string" />
    </xs:complexType>
  </xs:element>
</xs:schema>

Вы можете контролировать разрешенные элементы и проверку дочерних элементов foo, используя атрибуты namespace и processContents с этим элементом <xs:any>.

0 голосов
/ 01 июля 2011

Если вы не знаете имен типов, то вам не повезло.В XSD нет ничего, что гласит: «Должны иметь дочерние элементы».Однако, если вы рады ограничить ваши дочерние элементы в «дочерней оболочке», тогда вам должно подойти что-то вроде этого:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="foo">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" name="children" type="xs:anyType" />
      </xs:sequence>
      <xs:attribute name="bar" type="xs:string" />
    </xs:complexType>
  </xs:element>
</xs:schema>

Конечно, это означает, что вы должны использовать тип xs: anyType.

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