XSD架构唯一约束不适用于数值?
问题描述:
考虑这个XSD架构,导致下面的图XSD架构唯一约束不适用于数值?
<?xml version="1.0" encoding="UTF-8"?>
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.url.com/validation"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<s:element name="myObjects" type="typeObjects">
<s:unique name="uniqueObjectId">
<s:selector xpath="myObject"/>
<s:field xpath="id"/>
</s:unique>
</s:element>
<s:complexType name="typeObjects">
<s:sequence maxOccurs="unbounded">
<s:element name="myObject">
<s:complexType>
<s:complexContent>
<s:extension base="typeObject"/>
</s:complexContent>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
<s:complexType name="typeObject">
<s:sequence>
<s:element name="id" type="s:int"/>
</s:sequence>
</s:complexType>
</s:schema>
注意唯一约束的 “ID” 元素上设置,类型为S:INT。
下面的实例XML仍然验证,即使有两次相同的<id>1</id>
!
<?xml version="1.0" encoding="utf-8"?>
<myObjects
xmlns:target="http://www.url.ch/validation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="unique.xsd">
<myObject>
<id>1</id>
</myObject>
<myObject>
<id>1</id>
</myObject>
</myObjects>
我可以强制故障条件,如果我改变元素类型S:字符串
我在oXygen XML和ALtova XML Spy中分别尝试了相同的结果验证。
问题是,如果这是一个错误或XSD的唯一约束实现中的已知限制?
答
你的xsd看起来不错,我用氧气证实了它。我得到了预期的错误:
cvc-identity-constraint.4.1: Duplicate unique value [1] declared for identity
constraint "uniqueObjectId" of element "myObjects".
我看到验证工作正常SAXON-EE 9.6.0.7
Non-unique value found for constraint uniqueObjectId: 1
和其他引擎。
尝试检查您的验证方案,缓存和文件名。
没有为你左右逢源从工种,独立?整数或字符串? – KarmaEDV
我没有设置验证方案,除了默认设置。这是一个构建的XSD来展示这一点。我还没有尝试用代码中的SAXON库,这将是我的下一步。 – KarmaEDV
我用Xerces引擎验证没有问题。 –