考慮這個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的唯一約束實現中的已知限制?
沒有爲你左右逢源從工種,獨立?整數或字符串? – KarmaEDV
我沒有設置驗證方案,除了默認設置。這是一個構建的XSD來展示這一點。我還沒有嘗試用代碼中的SAXON庫,這將是我的下一步。 – KarmaEDV
我用Xerces引擎驗證沒有問題。 –