我需要创建一个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中设置吗?
答案 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中有一个内置的假设,即验证命名空间中元素的规则是无上下文的:也就是说,如果一个命名空间导入另一个命名空间,则第二个命名空间中元素的规则将不依赖于元素的出现位置。我建议你不要“正确”使用命名空间。