Проверка различных наборов обязательных атрибутов в схеме XML
-
27-09-2019 - |
Вопрос
Мое требование состоит в том, чтобы подтвердить 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.
Недостатком является то, что схемы становятся немного сложнее, чтобы люди могли следовать, потому что определения разделены между разными файлами.