Язык XML-схемы - это супернабор обычных языков, но, очевидно, только в области XML-документов.
Для # 1: с дополнительным условием, что регулярное выражение соответствует правильно сформированному XML-документуи ничего больше, да.
Для # 2: да, это вопрос проверки любых возможностей XSD, которые разрешены на обычном языке.Найти регулярное выражение было бы намного труднее.
Обычный язык имеет довольно простое определение, неофициально:
- Пустое множество / строка
- Литералы (a"singleton language"), например, "x"
- Для обычного языка A, A * также является обычным языком
- Для обычных языков A и B, A | B (union) иAB (сцепленные) являются регулярными.
В принципе, все объединения и чередования в порядке, но рекурсия невозможна, и нет обратных ссылок или «памяти».Ни один тип элемента не может содержать choice
/ all
/ element
элементов, ссылающихся на себя или родительские типы, и вы не можете использовать любую информацию, найденную ранее в процессе анализа.
Ограничение нарекурсия распространяется на элемент any
, что было бы запрещено.По определению он принимает любой элемент, включая элементы с подэлементами.Поскольку вы не знаете глубину вложения этого неизвестного элемента, вам нужен рекурсивный шаблон для сопоставления с ним, и вы не можете сделать это на обычном языке.
Ограничение обратных ссылок означает, что вы можете 't делать такие вещи, как «некоторое число« A », за которым следует такое же количество« B »» (A {n} B {n}).Я не думаю, что это даже возможно в XSD, однако, по крайней мере, я не могу думать, как бы вы это сделали.
Ограничение числовых значений (например, minInclusive) было бы невозможно в регулярном выражении.
Элемент all
был бы проблематичным в том смысле, что ему пришлось бы принимать все возможные упорядочения дочерних элементов, что заставило бы регулярное выражение расширяться экспоненциально (биномиальный коэффициент, (n / k) ^ k <= n!/ k! (nk)! <= (ne / k) ^ k) с количеством дочерних элементов, и соответствие регулярному выражению является суперлинейным на этой длине.Распознавание атрибутов страдает той же проблемой, поскольку порядок атрибутов внутри элемента не ограничен схемой.Конечно, если вы заботитесь только о том, существует ли регулярное выражение, а не о его нахождении, тогда это не имеет значения. </p>