XSD, требующий определенного корневого элемента, существует в документе XML? - PullRequest
2 голосов
/ 06 марта 2019

Я хочу проверить XML-файл и убедиться, что у него есть корневой элемент с именем speak, например:

<speak>
  <!--other node here...-->
</speak>

элемент speak должен существовать в XML и должен появляться только один раз.Я пытаюсь добавить код ниже в моем файле XSD:

<xsd:element name="speak" type="speak" minOccurs="1" maxOccurs="1"/>

Но это не работает.

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Вы можете использовать minOccurs / maxOccurs для элемента sequence, как показано ниже:

 <xs:element name="speak">
     <xs:complexType>
         <xs:sequence minOccurs="1" maxOccurs="1">
             ...
         </xs:sequence>
     </xs:complexType>
 </xs:element>

, но это необязательно, так как это избыточное присвоение значения атрибута по умолчанию.

0 голосов
/ 06 марта 2019

В самой схеме вы не можете наложить ограничение на то, каким должен быть корневой элемент.(Это разработано, хотя не все думают, что это хороший дизайн.) Любое объявление глобального элемента может соответствовать корневому элементу.

Некоторые API для вызова проверки могут позволить вам ограничить корневой элемент.Например, если вы используете средство проверки схемы Saxon и запускаете его из командной строки, вы можете указать -top:speak, чтобы требовать, чтобы элемент верхнего уровня имел имя speak.

0 голосов
/ 06 марта 2019

Ограничения вхождения XSD недопустимы для корневых элементов, поскольку XML-документы уже ограничены и состоят из одного корневого элемента. Поэтому просто укажите одно объявление глобального элемента и сделайте объявление для требуемого корневого элемента в вашем XML. Тогда, в любом случае, оно будет minOccurs="1" maxOccurs="1".

...