我的代码库相对较大,包含两种类型的XML:
<tag ref="var_ref" />
或
<tag>value</tag>
但是,我希望以下内容无法验证,因为它在我们的情况下是不明确的。
<tag ref="var_ref">value</tag>
我看到v1.1中可能存在替代方案,但有没有人对XSD 1.0进行破解?
答案 0 :(得分:1)
1.0最简单的方法是为这两种不同的验证行为提供不同的名称。 (有些权威人士会说,这不是一个黑客,只是简单的设计。为什么给两个结构明显不同的东西赋予相同的名称?把事情称之为:当它们不同时,称它们为不同的东西。许多事情都比较简单,包括XML和XML处理。)
如果您的目标命名空间绑定到前缀tns
,您可以写:
<xsd:element name="tns:TAG" abstract="true"/>
<xsd:element name="tag" type="xsd:string"
substitutionGroup="tns:TAG"/>
<xsd:element name="tagref"
substitutionGroup="tns:TAG">
<xsd:sequence/>
<xsd:attribute name="ref" type="xsd:IDREF"/>
<!--* or adjust the type to suit ... *-->
</xsd:element>
然后使用对tns:tag
的引用替换现有内容模型中对tns:TAG
的所有引用。