Я хочу создать документ XSD, который бы проверил какой-то XML для меня. Скажем, например, что документы XML предназначены для описания книг:
<?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 проходить проверку?
Спасибо!