Причина, по которой ваша XML-схема является недетерминированной, заключается в том, что при применении ее к XML-документу она не может решить, какое из определений для прибывающих дат и отъездов вы имеете в виду.Вы думаете, что первая директива <choice>
дает вам выбор между одним набором определений для этих элементов, за которым следует элемент prestee, или другим определением без элемента prestee.К сожалению, XML-схема не выполняет какой-либо предварительный просмотр.
При синтаксическом анализе события XML представляются валидатору одно за другим.Таким образом, дата прибытия дается вашей схеме, и теперь он должен знать, является ли элемент действительным или нет, но ... он не может выяснить, какое из этих определений даты прибытия применимо.Если бы он мог отложить это решение до более позднего времени, когда он проанализировал последующие элементы, он мог бы, например, как он мог бы решить, что элемент недействителен, пропуская определенные дочерние элементы.Но, учитывая, что они разделены, это невозможно в этом смысле.
W3C XML-схема плоха в двух вещах: неупорядоченный контент и ограничения между узлами.Как предположил Кевин, XML Schema 1.1 может иметь ответ на этот вопрос.Я не работал с этим.Другими вариантами проверки являются RelaxNG, который является более гибким и мощным, чем XML-схема, или Schematron, который допускает именно такую проверку, которая должна идти глубже, чем структура и простые проверки типов.