我需要根据属性值对单一类型的节点进行特定的 XSD 验证:XSD 1.1 和 xsd:alternative 应该是我的朋友。
但是使用以下(最简单的)示例:
<xsd:complexType name="BaseType">
<xsd:attribute name="type"
type="xsd:string"
use="required" />
</xsd:complexType>
<xsd:complexType name="NamedType">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:attribute name="path"
type="xsd:string"
use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="TaggedType">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:attribute name="tag"
type="xsd:string"
use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="MyRoot">
<xsd:complexType>
<xsd:choice minOccurs="1">
<xsd:element name="MyType"
type="BaseType">
<xsd:alternative test="@type='Named'"
type="NamedType"/>
<xsd:alternative test="@type='Tagged'"
type="TaggedType"/>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
当我加载 XSD(使用 Qt 4.7.4 中的 QXmlSchema 类,但我认为这是一个 XSD 问题而不是 Qt 问题)时,我收到以下错误:
未知位置中的错误 XSDError,第 93 行第 74 列:替代元素的测试属性包含无效内容:{@type='Named'}。
我也在替代测试条件下尝试了“@type eq 'Named'”以及大量其他明智和不太明智的变化......没有通过:/
任何帮助都感激不尽!谢谢!