单独的xs:与元素唯一

时间:2014-10-14 20:56:21

标签: xml xsd unique unique-constraint

我得到了一个我的XML需要符合的XSD。 XSD不包含唯一ID约束。

在下面的示例中,我添加了一个唯一的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定义的更改。

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:0)

在XSD 1.1中,您可以使用xs:override来覆盖元素声明(但您仍然必须重复未更改的元素声明部分。)

否则,编写一个XSLT转换,在使用模式进行验证之前将约束添加到模式。

或者编写一个验证程序(使用您喜欢的任何技术,例如XSLT),只检查唯一性约束,并在进行模式验证后将其作为单独的传递运行。