我得到了一个我的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定义的更改。
任何人都知道怎么做?
答案 0 :(得分:0)
在XSD 1.1中,您可以使用xs:override来覆盖元素声明(但您仍然必须重复未更改的元素声明部分。)
否则,编写一个XSLT转换,在使用模式进行验证之前将约束添加到模式。
或者编写一个验证程序(使用您喜欢的任何技术,例如XSLT),只检查唯一性约束,并在进行模式验证后将其作为单独的传递运行。