XSD是否为一个XML元素名称,但在同一父元素中具有不同的属性?

问题描述:

这里是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?

XSD具有Element Declarations Consistent约束,要求内容模型中的相同命名元素具有一致的内容模型。 list元素违反了此限制,因为lists内容模型中有两个不同的内容模型。

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

  1. 重命名list元件中的一个。
  2. 删除两个不一致的list内容模型之间的兄弟关系。
  3. 使用list元素的最一般声明。如果使用XSD 1.0,则放弃对属性的附加约束;如果使用XSD 1.1,请使用xs:assert指定属性的添加约束。
+0

感谢您的帮助! –