2017-07-12 50 views
0

考慮這個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> 

still passes validation

注意唯一約束的 「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:字符串

這將驗證實例XML了,因爲預期: fails validation as expected

我在oXygen XML和ALtova XML Spy中分別嘗試了相同的結果驗證。

問題是,如果這是一個錯誤或XSD的唯一約束實現中的已知限制?

回答

0

你的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 

和其他引擎。

嘗試檢查您的驗證方案,緩存和文件名。

+0

沒有爲你左右逢源從工種,獨立?整數或字符串? – KarmaEDV

+0

我沒有設置驗證方案,除了默認設置。這是一個構建的XSD來展示這一點。我還沒有嘗試用代碼中的SAXON庫,這將是我的下一步。 – KarmaEDV

+0

我用Xerces引擎驗證沒有問題。 –

0

我想我發現問題所在。在oXygen中使用驗證引擎Xerces時,如果元素的類型爲int,則驗證通過。當使用撒克遜引擎解析它時,無論哪種方式!

爲此敢肯定這是在Xerces的的錯誤..

enter image description here