对自定义XSD子类型的限制
我创建了一个XSD子类型,如下所示:对自定义XSD子类型的限制,xsd,attributes,Xsd,Attributes,我创建了一个XSD子类型,如下所示: <xs:comlpexType name=”sub_aspect”> <xs:comlpexContent> <xs:extension base=”aspect”> <xs:attribute name=”id” type=”xs:boolean” /> </xs:extension> </xs:complexConte
<xs:comlpexType name=”sub_aspect”>
<xs:comlpexContent>
<xs:extension base=”aspect”>
<xs:attribute name=”id” type=”xs:boolean” />
</xs:extension>
</xs:complexContent>
</xs:complexType>
此子类型增加了
具有“id”属性的可能性
现在,我想在标记中使用它两次,但它必须是一次true和一次onefalse(顺序并不重要):
...
一些内容
...
...
一些内容
...
这将如何在XSD中指定?根据您的需求,可以通过约束使用XSD 1.0实现您的场景
- maxOccurs确保了“两次”约束
- xsd:key确保“一次正确,一次错误”
<?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 1.0实现您的场景
- maxOccurs确保了“两次”约束
- xsd:key确保“一次正确,一次错误”
<?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-1.1
。您必须使用XSD-1.1
。谢谢你的回答!为什么我应该避免对if属性使用布尔值?还有一件事。我需要它是一个子类型,因为我并不总是需要“id”属性,所以整个问题只针对sub_aspect子管道。我是否应该将上面的xsd:key结构集成到子类型扩展中?如何做到这一点?@user5040728 1)许多作者倾向于给出id
的含义。如果将id
视为唯一标识符,则具有两个可能值的域的类型是相当不寻常的。2) 类型/子类型不重要:约束仅在元素下工作,因此只要您为包含方面的元素定义它们,就应该可以了。谢谢您的回答!为什么我应该避免对if属性使用布尔值?还有一件事。我需要它是一个子类型,因为我并不总是需要“id”属性,所以整个问题只针对sub_aspect子管道。我是否应该将上面的xsd:key结构集成到子类型扩展中?如何做到这一点?@user5040728 1)许多作者倾向于给出id
的含义。如果将id
视为唯一标识符,则具有两个可能值的域的类型是相当不寻常的。2) 类型/子类型不重要:约束仅在元素下工作,因此只要为包含方面的元素定义它们,就可以了。