我希望在我的XSD架构定义中嵌入规则,以了解如何使用元素的可选属性。请考虑以下元素定义:
<xs:complexType name="sampleElement">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
<xs:attribute name="optPrimary" type="xs:string" use="optional"/>
<xs:attribute name="optSecondary" type="xs:string" use="optional"/>
</xs:complexType
在此示例中,optPrimary和optSecondary都是可选的。 optPrimary属性可以单独使用,但optSecondary必须与optPrimary一起使用。因此,我希望嵌入在模式中的规则可以在验证XML时强制执行。
我在单独的文件中找到了用于此的Schematron示例,但我还没有找到它如何作为模式的一部分嵌入。
答案 0 :(得分:0)
XSD 1.1支持此功能。这是表达它的一种方式:
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xerces="http://xerces.apache.org">
<xsd:element name="sampleElement">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="description" type="xsd:string" use="optional"/>
<xsd:attribute name="optPrimary" type="xsd:string" use="optional"/>
<xsd:attribute name="optSecondary" type="xsd:string" use="optional"/>
<xsd:assert test="@optPrimary or not(@optSecondary)" xerces:message="Secondary needs primary..."/>
</xsd:complexType>
</xsd:element>
</xsd:schema>