Проверка различных наборов обязательных атрибутов в XML-схеме

Мое требование состоит в том, чтобы проверить xml с помощью двух разных стратегий проверки. В стратегии 1 XML должен иметь экземпляры элемента с определенными обязательными атрибутами. В стратегии 2 XML должен иметь экземпляры одного и того же элемента с разными обязательными атрибутами. Итак, идея состоит в том, что есть два разных набора одного и того же элемента с разным набором обязательных атрибутов для каждого набора. Есть ли способ проверить это, используя только один xsd. Мое единственное решение на данный момент - использовать два разных файла xsd для проверки.

Пример 1:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!--required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- not required -->
<root>

Пример 2:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!-- not required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- required -->
<root>

Может ли быть достигнута проверка с помощью xsd?


person rick    schedule 29.10.2010    source источник
comment
Я думаю, что вы не можете, потому что вы пытаетесь объявить две разные схемы для одного и того же элемента, и это неоднозначно.   -  person    schedule 30.10.2010


Ответы (1)


Рик,

У меня были похожие проблемы, которые нужно было решить в наших приложениях, и нашим лучшим решением было использование модульных схем.

Таким образом, вместо Schema1 и Schema2, которые являются дубликатами друг друга, за исключением той части, которая отличается, у вас есть Schema1 и Schema2, которые включают только разные ограничения, и обе импортируют общую Schema3, которая определяет общие ограничения.

Пример того, как это сделать, приведен здесь.

Он не дает вам один XSD, но уменьшает дублирование, поэтому помогает с удобством сопровождения и помогает избежать вероятности появления ошибок, когда у вас много дублирования между Schema1 и Schema2.

Недостатком является то, что людям становится немного сложнее следовать схемам, потому что определения разделены между разными файлами.

person LarsH    schedule 30.10.2010
comment
Согласен, решение, использующее несколько схем, сложнее передать, и я хочу сделать сервис как можно более простым в использовании. Я думаю, что подход, который я собираюсь использовать, использует элемент '‹xs:choice /›' для гибкости между двумя наборами ограничений. Спасибо за отзыв. - person rick; 01.11.2010