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

StackOverflow https://stackoverflow.com/questions/4054681

Вопрос

Мое требование состоит в том, чтобы подтвердить 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 быть достигнута?

Это было полезно?

Решение

Рик,

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top