2017-09-06 44 views
1

目標: 我有一個名爲Schema1.xsd的現有標準XSD。 我想擴展Schema2.xsd的complexType(「TVDSection」)中的Schema1.xsd的complexType(「tElementWithIDAndName」)。唯一粒子歸因錯誤

當我嘗試驗證Schema2.xsd在Altova的XMLSpy的/氧XML編輯器,我收到以下錯誤:

錯誤: [的Xerces] COS-nonambig: 「http://www.mySchema.com/Generic/1」:部件1和WC [##其他:「http://www.mybasic.com/1」,「」](或其替代組中的元素)違反「唯一粒子歸因」。在對這個模式進行驗證期間,將爲這兩個粒子創建模糊性。

Schema1.xsd:

  <?xml version="1.0" encoding="UTF-8"?> 
      <xs:schema xmlns="http://www.mybasic.com/1" 
         xmlns:xs="http://www.w3.org/2001/XMLSchema" 
         xmlns:xml="http://www.w3.org/XML/1998/namespace" 
         targetNamespace="http://www.mybasic.com/1" 
         elementFormDefault="qualified" 
         version="0.1"> 

       <xs:complexType name="tElementWithIDAndName"> 
        <xs:sequence> 
          <xs:element name="additionalName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
          <xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/> 
        </xs:sequence> 
        <xs:attribute name="id" type="xs:ID" use="required"/> 
        <xs:attribute name="name" type="xs:string" use="required"/> 
       </xs:complexType> 
      </xs:schema>  

Schema2.xsd:

  <?xml version="1.0" encoding="UTF-8"?> 
      <xs:schema xmlns="http://www.mySchema.com/Generic/1" 
         xmlns:xs="http://www.w3.org/2001/XMLSchema" 
         xmlns:myBasic="http://www.mybasic.com/1" 
         targetNamespace="http://www.mySchema.com/Generic/1" 
         elementFormDefault="qualified" version="0.1"> 

       <xs:import namespace="http://www.mybasic.com/1" schemaLocation="schema.xsd"/> 

       <xs:element name="Element1" type="TVDSection"/> 
       <xs:complexType name="TVDSection"> 
        <xs:complexContent> 
         <xs:extension base="myBasic:tElementWithIDAndName"> 
          <xs:sequence> 
           <xs:element name="element1" type="xs:string" minOccurs="0" maxOccurs="unbounded"> 
           </xs:element> 
          </xs:sequence> 
         </xs:extension> 
        </xs:complexContent> 
       </xs:complexType> 
      </xs:schema> 

我不知道在哪裏/如何違反了唯一粒子屬性。 請幫我解決上述問題。

回答

3

您的內容模型可以解釋爲「任意數量的名爲p:additionalName的元素,後跟任意數量的元素,只要它們不在命名空間'p'中,後面跟隨任意數量的名爲q:element1,」的元素。現在,如果遇到aq:element1元素,驗證器不知道是否將其放入第二組(任何數量的元素不在名稱空間'p'中)或第三組(任何名爲q:element1的元素) 。因此含糊不清。

在XSD 1.1中,規範已更改,因此在這種情況下,如果有特定的粒子和匹配的通配符粒子,則始終優先選擇特定的粒子。所以一個解決方案就是轉移到XSD 1.1。如果您希望繼續使用XSD 1.0,則需要更改xs:any通配符,以便對允許的元素的名稱空間施加更多限制。

+0

不幸的是,我無法更改schema1.xsd,因爲它是來自另一個團隊的項目的標準xsd。另外我現有的工具不支持XSD 1.1。 有任何想法來解決這個問題。 – VinayCH

+0

爲什麼要擴展schema1.xsd中的複雜類型?它已經允許通配符內容在additionalName元素之後,爲什麼你需要改變它呢? –

+0

至於「我現有的工具不支持XSD 1.1」,答案當然是切換到正在積極開發產品並遵守最新標準的工具供應商。 –