2013-06-03 58 views
1

我有一个代码库是结合两种类型的XML的比较大的:如何在XSD V1.0与同名但不同类型的不同元素

<tag ref="var_ref" /> 

<tag>value</tag> 

但是,我希望以下内容无法验证,因为它在我们的情况下是不明确的。

<tag ref="var_ref">value</tag> 

我在v1.1中看到替代方案是可行的,但是有没有人对XSD 1.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

+0

最大的原因是我们有一大堆的xml文件没有经过验证。我们想用我们的新模式来验证它们。 同意“两件事”在结构上有所不同,但用途不是。它们被类似地解释 - 在第一种情况下,它是一个可变参考;在另一个,直接字符串值。 – JBird

相关问题