对自定义XSD子类型的限制

时间:2015-12-04 13:51:15

标签: xsd attributes

我创建了一个像这样的XSD子类型:

<xs:comlpexType  name=”sub_aspect”>
    <xs:comlpexContent>
       <xs:extension  base=”aspect”>
          <xs:attribute  name=”id”  type=”xs:boolean” />
       </xs:extension>
    </xs:complexContent>
  </xs:complexType>

此子类型增加了<aspect>拥有&#34; id&#34;属性。

现在,我想在标签内使用它两次,但它必须是 true 一次 false(顺序不重要):

<parent>
  <aspect id=false>
   ...
   some content
   ...
  </aspect>

  <aspect id=true>
   ...
   some content
   ...
  </aspect>
</parent>

如何在XSD中指定?

1 个答案:

答案 0 :(得分:0)

根据您的要求,可以通过约束使用XSD 1.0实现您的方案。

  • maxOccurs 确保&#34;两次&#34;约束
  • xsd:key 确保&#34;一次为真,一次为假&#34;

以下是相关部分的模型:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="parent">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="aspect" maxOccurs="2">
                    <xsd:complexType>
                        <xsd:attribute name="id" type="xsd:boolean" use="required"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:key name="PK">
            <xsd:selector xpath="aspect"/>
            <xsd:field xpath="@id"/>
        </xsd:key>
    </xsd:element>
</xsd:schema>

一条不相关的建议:尽量避免使用 id 属性的布尔值。