2013-06-07 2 views
0

Я пытаюсь найти способ написать схему XML 1.0, которая позволяет избежать создания недопустимых перестановок чисел. У меня есть 5 элементов: A, B, C, D и E. Для XML нужно иметь ровно один раз. B и C могут встречаться от 0 до бесконечности в XML. D и E могут встречаться от 1 до бесконечности в XML. A-E может происходить в любом порядке.Проверка XML для любого порядка элементов с определенными диапазонами счетчиков

Важно не записывать каждую возможную последовательность, потому что, если мне нужно добавить элемент позже, схема будет экспоненциально расти. Есть ли способ сделать это?

ответ

0

Похоже, это невозможно.

У меня есть книга здесь: XML Schema: The W3C's Object-Oriented Descriptions for XML, который, вероятно, лучшая книга о схемах XML я когда-либо читал (хотя и довольно сложный и не совершенный).

Вот что я вижу в этой книге (стр 236.):

Ситуация, описывающей неупорядоченных группы дополнительных элементов, которые имеют такое же число максимальных вхождений может быть описано с использованием xs:choice или замещение групп, но другое содержимое модели (такие как группы неупорядоченных элементов с произвольным и различным максимальным количеством вхождений) не могут быть описаны с помощью XML-схемы W3C.

В соответствии с этим, похоже, что ваш элемент A (который должен произойти ровно один раз) портит все!

Я считаю, что причина этого ограничения заключается в следующем:

Вы хотите, чтобы избежать экспоненциальных перестановок, верно? Но если таким моделям контента было разрешено описать простым способом, то для проверки XML на них потребовался бы экспоненциальный алгоритм!

Я думаю, W3C просто хотел избежать таких проблем, заставив разработчиков схем избежать произвольных моделей контента.

+0

Да, ваши первые и последние комментарии были в основном моими мыслями. Слишком плохо (вроде)! Спасибо, что посмотрели. – Jefftopia