XSD验证子引用元素的值

时间:2011-09-09 12:44:47

标签: xml validation xsd

我需要创建一个XSD,用于使用特定枚举从不同的命名空间验证特定复杂类型中的值。

在这种特定情况下,XML将如下所示:

            <Format>
                <name>
                    <gco:CharacterString>IMG</gco:CharacterString>
                </name>
                <version>
                    <gco:CharacterString>Version 1.0</gco:CharacterString>
                </version>
            </Format>

要求所有值都验证为从单独的命名空间引用的 gco:CharacterString (这在另一个命名空间中实际上是一个简单的xs:string类型,但我需要引用它)。

我需要 name version 来验证其 gco:CharacterString 子节点中特定值的枚举。在这种情况下,我想验证以下枚举是否存在且对 gco:Characterstring 有效:

名: IMG GEO NIT

版本: 版本1.0 版本2.0 3.0版

将引用添加到引用的 gco:Characterstring 不是一个选项,因为我需要这些枚举特定于版本名称。这可以在XSD中设置吗?

2 个答案:

答案 0 :(得分:1)

不在XML Schema 1.0中。

使用XML Schema 1.1 - 类似于:

<assert test="(name/gco:CharacterString eq 'IMG)
              and (version/gco:CharacterString eq 'Version 1.0')"/>

答案 1 :(得分:0)

在XSD 1.0中无法实现。在XSD中有一个内置的假设,即验证命名空间中元素的规则是无上下文的:也就是说,如果一个命名空间导入另一个命名空间,则第二个命名空间中元素的规则将不依赖于元素的出现位置。我建议你不要“正确”使用命名空间。