Вопрос относительно проверки XML с использованием XSD - PullRequest
0 голосов
/ 09 апреля 2010

Я хочу создать документ 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 проходить проверку?

Спасибо!

1 Ответ

1 голос
/ 09 апреля 2010

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

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