2013-12-10 39 views
2

我定義波紋管的的ComplexType基部的粒子的有效的限制:推導-OK-限制:該類型的顆粒不是

<xs:element name="abstractForm" type="abstractFormType" abstract="true"/> 
<xs:complexType name="abstractFormType" abstract="true"> 
    <xs:sequence> 
     <xs:any minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="id-form" type="xs:NCName"/> 
    <xs:attribute name="select"/> 
    <xs:anyAttribute/> 
</xs:complexType> 

但在那之後在代碼,我每次添加一個的ComplexType我有這樣的錯誤:derivation-ok-restriction : The particle of the type is not a valid restriction of the particle of the base.

例:

<xs:element name="abstractNewForm" type="abstractNewFormType" abstract="true" 
     substitutionGroup="abstractForm"/> 
<xs:complexType name="abstractNewFormType" abstract="true"> 
    <xs:complexContent> 
     <xs:restriction base="abstractFormType"> 
      <xs:sequence> 
       <xs:sequence> 
        <xs:element name="customize" minOccurs="0" type="abstractCustomizeType"/> 
       </xs:sequence> 
       <xs:sequence> 
        <xs:element name="positions" minOccurs="0" type="abstractPositionsType"/> 
       </xs:sequence> 
      </xs:sequence> 
      <xs:attribute name="id-form" type="xs:NCName" use="required"/> 
      <xs:attribute name="select"/> 
      <xs:anyAttribute/> 
      </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

有人有想法? :)

回答

1

撒克遜接受這個作爲一個有效的限制,但有一個警告:

Warning: on line 20 of test.xsd: 
    There is no global element declaration named {customize}, so the strict wildcard in the 
    base type can never be satisfied 
Warning: on line 23 of test.xsd: 
    There is no global element declaration named {positions}, so the strict wildcard in the 
    base type can never be satisfied 

記住的xs:任何默認的processContents =「嚴格」,這意味着可以在這裏出現的唯一元素是元素在模式中具有全局聲明。由於「自定義」和「職位」沒有全局聲明,他們不滿足這個條件。我將不得不做一些研究來弄清爲什麼撒克遜人把這看作是警告而不是錯誤。無論您使用哪種架構處理器,它都採取了不同的解釋。請注意,Saxon測試包含XSD 1.1方法,即使XSD 1.1未啓用,因爲XSD 1.0規範中存在一些缺陷:但某些處理器選擇嚴格符合要求並實施缺陷和所有缺陷。

我建議在全局元素聲明中進行「自定義」和「定位」。