对自定义 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 属性使用布尔值。
我创建了一个 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 属性使用布尔值。