【发布时间】:2014-08-28 14:50:26
【问题描述】:
XML 规范说不合格的命名空间不在命名空间中。规范中的语义值得商榷,但所有 XML 工具集都被设计为以这种方式工作。见:
XML Namespaces and Unprefixed Attributes
这是一个我的潜意识讨厌的概念,原因是我的有意识的大脑难以表达。
如果不合格的属性不在任何命名空间中,那么验证如何仍然有效?这是一个矛盾。
当范围内有两个同名的属性时会发生什么。一个来自默认命名空间,一个属于当前元素。
<document xmlns="default.ns" xmlns:hr="humanresources.ns">
<hr:user id="abc" />
</document>
如果 id 在 default.ns 和 humanresources.ns 中定义但具有不同的数据类型,例如 xs:token 和 xs:integer 将解析到哪个命名空间 id 进行验证,如果有的话?
假设验证器会在歧义上出错并强制其他属性被限定,那么我是否必须编写一个辅助 GetLocalAttribute 方法来处理这一切?
喜欢:
-
ids= 选择元素上 localname 等于id的所有属性 -
b= 从ids中选择单个,其中命名空间等于元素命名空间 - 如果
b!= null { 返回b} - 否则从
ids返回单个,其中命名空间等于 null
卢克
【问题讨论】:
-
Pedantry 警告:不喜欢 XML 命名空间的指定方式的不止您一个人,但您的描述是错误的。 XML 规范完全没有提到命名空间。 XML 命名空间规范说,不合格的名称不会被命名空间兼容的软件识别为属于任何命名空间——它确实不说它们“不在命名空间中”。 XML 堆栈中的大多数工具都将非限定名称视为位于与所有其他名称不同的名称空间中。
标签: xml xsd xsd-validation