对自定义XSD子类型的限制



我创建了一个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>具有"id"属性的可能性。

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

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

如何在XSD中指定这一点?

根据您的需求,可以通过约束使用XSD 1.0来实现您的场景。

  • maxOccurs确保"两次"约束
  • xsd:key确保"一次为true,一次为false"

以下是相关部件的实物模型:

<?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属性使用布尔值。

最新更新