2014-10-14 7 views
0

Мне предоставлен XSD, который должен соответствовать моему XML. XSD не содержит уникальных ограничений ID.Отдельный xs: уникальный элемент

В приведенном ниже примере я добавил уникальное ограничение ID в строке.

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Passengers"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element ref="passenger"/> </xs:choice> </xs:complexType> <xs:unique name="PassengerUniqueSequnceNo"> <xs:selector xpath="./passenger"/> <xs:field xpath="@SequenceNo"/> </xs:unique> </xs:element> <xs:element name="passenger"> <xs:complexType> <xs:sequence> <xs:element name="FullName" type="xs:string"/> </xs:sequence> <xs:attribute name="SequenceNo" type="xs:int"/> </xs:complexType> </xs:element> </xs:schema>

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

Кто-нибудь знает как?

ответ

0

В XSD 1.1 можно использовать хз: (., Но вы все равно придется повторять часть объявления элемента, который не изменяется) переопределение переопределить объявление элемента

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

Или напишите валидатор (используя любую технологию, которая вам нравится, например XSLT), которая просто проверяет ограничение уникальности и запускает ее как отдельный проход после проверки схемы.

+0

Спасибо. Второй вариант кажется хорошим вариантом. –

Смежные вопросы