2016-09-23 136 views
1

這裏是XML:XSD是否爲一個XML元素名稱,但在同一父元素中具有不同的屬性?

<lists> 
    <list refname="list_refname"/> 
    <list refname="list_refname_template_1" use_for="template_1"/> 
    <list refname="list_refname_template_2" use_for="template_2"/> 
    <list refname="list_refname_template_3" use_for="template_3"/> 
</lists> 

而且XSD:

<xsd:element name="lists"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="list" minOccurs="1" maxOccurs="1"> 
       <xsd:complexType> 
        <xsd:attribute name="refname" type="xsd:string" use="required"/> 
       </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="list" minOccurs="0" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:attribute name="refname" type="xsd:string" use="required"/> 
        <xsd:attribute name="use_for" type="xsd:string" use="required"/> 
       </xsd:complexType> 
      </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

的理念是:只與屬性refname必須

  • 列表元素只出現一次
  • 列表元素屬性refnameuse_for might出現任何 次或無

在XSD中可以嗎?

如果是,如何重新編寫我的非工作XSD?

回答

0

XSD具有Element Declarations Consistent約束,要求內容模型中的相同命名元素具有一致的內容模型。 list元素違反了此限制,因爲lists內容模型中有兩個不同的內容模型。

分辨率可以採取下列形式之一:

  1. 重命名list元件中的一個。
  2. 刪除兩個不一致的list內容模型之間的兄弟關係。
  3. 使用list元素的最一般聲明。如果使用XSD 1.0,則放棄對屬性的附加約束;如果使用XSD 1.1,請使用xs:assert指定屬性的添加約束。
+0

感謝您的幫助! –

相關問題