2010-04-09 2 views
0

Я ищу для создания документа XSD, который бы подтвердил некоторые XML для меня. Допустим, например, что XML-документы предназначены для описания книг:Вопрос о проверке XML с использованием XSD

<?xml version="1.0" encoding="UTF-8"?> 
<book> 
    <comment>Bob's very first book</comment> 
    <name>Bob's book</name> 
    <author>Bob</author> 
    <year>2009</year> 
    <publisher> 
     <name>Dan's book publishing enterprise</name> 
     <address>123 Fake St.</address> 
    </publisher> 
</book> 

Давайте также сказать, что я только действительно забочусь о три элемента - имя, автор и год. Они являются обязательными и должны быть проверены против схемы. Я не контролирую XML-файлы, которые получаю, поэтому порядок элементов не должен иметь значения, и любые дополнительные элементы должны пропускаться через проверку XSD без проверки.

Следуя этим требованиям, я попытался построить схему XSD, которая могла бы выполнить такую ​​проверку, но я не могу понять ее правильно. Ограничение, которое элементы могут быть определены в любом порядке, исключает индикатор sequence. Осталось all или индикаторы choice. all был бы очевидным выбором, но он не позволяет мне использовать элемент any.

Я также играл с идеей использования этого:

<include schemaLocation="year.xsd"/> 
<include schemaLocation="name.xsd"/> 
<include schemaLocation="author.xsd"/> 
.... 
    <sequence> 
     <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 
    </sequence> 

Хотя, если в файле XML, название года и автор будет подтверждено, это не проверяет обязательных элементов - я не могу определить, что год, автор и имя книги должны пройти проверку.

Может ли кто-нибудь дать мне понять, как построить документ XSD, который будет проверять количество неупорядоченных обязательных элементов и по-прежнему разрешит неопределенным элементам в XML-файле пройти проверку?

Спасибо!

ответ

1

Я уверен, что вы не можете сделать это с помощью XML-схемы. Предложения:

  • Подготовить документ для проверки с помощью XSLT.
  • Использование Schematron.
+0

Казалось бы, вы правы ... – Sevas