XML命名空间是如何工作的


How does XML Namespaces work?

我想知道XML名称空间是如何工作的。我读到它们应该是独一无二的等等,但没有任何资源说明它们到底是如何工作的。

我的意思是我有像这样的XML节点

<name xml:lang="en" type="abc">A name</name>

为了用php(SimpleXML)提取xml:lang,我需要使用以下代码:

$obj->attributes('http://www.w3.org/XML/1998/namespace');

此链接如何定义/告知SimpleXML提取xml:*属性?我只在那里看到网页,而不是定义这个名称空间的单个定义。

正如XML名称空间的工作原理一样,URL永远不会被解析。但是我解析的文档不包含这个链接(名称空间定义)。

此外,在上面的问题中,还定义了名称空间。他们在哪里定义这个名称空间正是human:*

"这个链接是如何定义/告诉SimpleXML提取xml:*属性的?我只在那里看到网页,而不是定义这个命名空间的单个定义。"

xml:是XML规范中预定义的一个特殊前缀。它是命名空间名称http://www.w3.org/XML/1998/namespace绑定到的前缀,这就是"链接"连接到前缀xml的方式。请参阅:W3C:"xml:"命名空间。

"此外,在上面的问题中,有定义的命名空间。他们在哪里定义这个命名空间正是human:*?"

前缀human没有在该XML中的任何位置声明。不过,我认为这是错误的,因为XML在当前形式中的格式不好。前缀声明应该是xmlns:human,而不是human:body元素处的xmlns:html

<human:body xmlns:human="http://www.example.com/human/">
    <human:height>182 cm</human:height>
    <human:weight>83 kg</human:weight>
</human:body>