在不同的名称空间前缀下使用xml名称空间是否相同?

在不同的名称空间前缀下使用xml名称空间是否相同?,xml,xsd,xml-namespaces,Xml,Xsd,Xml Namespaces,我正在处理使用XML:lang的XML文件,现在有人向我发送一个包含以下内容的文件: <element xmlns:ns1="xml" ns1:lang="fr" /> 我应该把这个和这个同等对待吗 <element xml:lang="fr" /> <element xml:lang="fr" /> 或者当需要xml:lang时,我应该将该文件视为无效文件吗?如果是第一个,我可以在XSD中捕获xml名称空间的这种“代理”吗?您给出的两个示

我正在处理使用XML:lang的XML文件,现在有人向我发送一个包含以下内容的文件:

<element xmlns:ns1="xml" ns1:lang="fr" /> 

我应该把这个和这个同等对待吗

<element xml:lang="fr" /> 
<element xml:lang="fr" /> 


或者当需要xml:lang时,我应该将该文件视为无效文件吗?如果是第一个,我可以在XSD中捕获xml名称空间的这种“代理”吗?

您给出的两个示例并不相同。名称空间是URI,此类URI可以绑定到前缀,以便为元素和属性定义完全限定的名称。URI不需要指向现有资源,XML处理器也不需要对URI进行任何类型的解析,也不需要创建URI的规范表示(除了一些属性值规范化)。实际上,名称空间实际上只不过是一个区分大小写的字符串,但URI恰好被选为它们的表示形式

换句话说,这个

<element xmlns:ns1="xml" ns1:lang="fr" /> 
xml
前缀,而不是名称空间。此前缀隐式绑定到命名空间
http://www.w3.org/XML/1998/namespace
按照

进一步查看该规范,您还将发现不仅不允许将
xml
前缀绑定到任何其他名称空间(有意义),而且也不允许绑定
http://www.w3.org/XML/1998/namespace
名称空间到任何其他前缀(这没有什么意义,但允许一些XML处理优化和假设)

总之,如果需要
xml:lang
属性,则应将第一个输入视为无效,因为该属性不存在于其中。构建该文件的人无法理解xml名称空间

我更深入地探讨了这些概念。

背景:在W3C XML推荐中定义,不依赖XML名称空间,尽管它使用冒号(
)。在W3C XML名称空间推荐中,
XML
前缀(以及所有以
XML
开头的名称空间前缀)是。
xml
前缀本身被自动定义为绑定到
http://www.w3.org/XML/1998/namespace

因此,
xml:lang=“fr”
是完全正确的,可以在不声明
xml
名称空间前缀的情况下使用。如果确实要声明
xml
名称空间前缀,则它应该是
xmlns:xml=http://www.w3.org/XML/1998/namespace

此外,
xmlns:ns1=“xml”ns1:lang=“fr”
暗示了对名称空间前缀声明的误解,因为这意味着名称空间前缀声明可以通过传递方式分配;它们不能

所以尽管

<element xmlns:ns1="xml" ns1:lang="fr" />

是格式良好的(参见),它不等同于


<element xml:lang="fr" />