Элемент проверки XSD имеет хотя бы один из указанных атрибутов - PullRequest
0 голосов
/ 27 марта 2020

Использование проверки схемы XSD 1.0. Я хочу убедиться, что для элемента задан хотя бы один атрибут.

Например, простой элемент, подобный этому:

<foo a="1" b="2" c="3" />

Я хочу убедиться, что указан хотя бы атрибут b или c. Но обратите внимание, что оба они также могут быть указаны - они не являются взаимоисключающими.

Я попытался использовать ключ в следующих строках:

    <xs:key name="AttributeSpecified">
        <xs:selector xpath="." />
        <xs:field xpath="@b|@c" />
    </xs:key>

, но он не работает, когда оба атрибута указаны (поскольку возвращается несколько результатов).

Можно ли это сделать?

1 Ответ

0 голосов
/ 31 марта 2020

Это невозможно в XSD 1.0. Это может быть возможным в XSD 1.1.

Я фанат XML схемы, но я бы не выбрал ее для этого типа проверки. Возможно, вы сможете заставить его работать с использованием XSD1.1, но если ваши требования станут просто немного более сложными, вы можете столкнуться с некоторыми ужасно выглядящими ограничениями. С другой стороны, выражение XPath может элегантно express любое ограничение, о котором вы только можете подумать, и вам не нужно было бы сгибать язык, чтобы он работал.

...