【发布时间】:2013-01-30 13:59:11
【问题描述】:
我需要根据属性值对单一类型的节点进行特定的 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 in Unknown location,第 93 行第 74 列:替代元素的测试属性包含无效内容:{@type='Named'}。
我还尝试过在替代测试条件下使用“@type eq 'Named'”以及大量其他合理和不太合理的变化......没有一个通过:/
任何帮助将不胜感激!谢谢!
【问题讨论】:
标签: xsd xsd-validation xsd-1.1