对自定义 XSD 子类型的限制

Restriction on a custom XSD sub-type

我创建了一个 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 确保 "twice" 约束
  • xsd:key 确保 "once true and once 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 属性使用布尔值。