XML规范指出,非限定名称空间不在命名空间中。规范中的语义是有争议的,但是所有的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
返回单个名称空间等于空
卢克
Pedantry警报:您并不是唯一不喜欢指定XML名称空间的方式,但您的表征是错误的。 XML规范完全没有提及名称空间。 XML命名空间规范指出,非限定名称不会被符合命名空间的软件认为属于任何命名空间 - 它不*表示它们“不在命名空间中”。而且,XML堆栈中的大多数工具都将不合格的名称视为与所有其他名称空间不同的名称空间。 – 2014-08-28 18:26:39