XML 中的命名空间根节点有什么意义?这样的命名空间将在哪里定义?

What is the point of a namespaced root node in XML and where would such a namespace be defined?

我目前正在研究 SPARQL ontology 中的定义,它在 XML 中 - 我对此很模糊。

我熟悉namespacing的概念。即像这样的 XML 节点:

<rdf:Description rdf:about="...">
    <rdf:type rdf:resource="..."/>
    <rdf:type rdf:resource="..."/>
    <rdfs:domain rdf:resource="..."/>
    <rdfs:range rdf:resource="..."/>
</rdf:Description>

正在引用 rdfrdfs 命名空间,它们在 XML 文档根节点中定义:

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

然后我了解到,这向任何 XML 解析应用程序表明该节点随后是有效的:

<Description about="...">
    <type resource="..."/>
    <type resource="..."/>
    <domain resource="..."/>
    <range resource="..."/>
</Description>

带有标签(Descriptiontypedomainrange)以及标签属性(aboutresource) 在解析 rdf XML 的上下文中是唯一的。我猜解析器需要规则 - 但这些标签永远不会与同名但为不同目的定义的标签混淆。即 xmlns="http://finanacial-instruments.com/xmlns",其中在不同上下文中使用了相同名称的标签(如果这没有意义,请告诉我)。

问题

在我正在查看的这个特定的 XML 文档中,根节点本身是命名空间的:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns="http://meta.icos-cp.eu/ontologies/cpmeta/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

即根节点是 <rdf:RDF ...>。从我的角度来看,这并不重要,因为我已经知道它是一个 RDF 文档。但是拥有命名空间根节点有什么意义,该命名空间在哪里定义?

============== 编辑

看看下面的答案,这个 link: http://www.jclark.com/xml/xmlns.htm 帮助了我。

包括以下内容:

<cars:part xmlns:cars="http://www.cars.com/xml"/>

maps to

<{http://www.cars.com/xml}part/>

没想到命名空间也适用于指定命名空间的标签。

James Clark 在

提供了关于命名空间如何工作的有用总结

http://www.jclark.com/xml/xmlns.htm

和(多年后)一篇关于设计是否正确的深思熟虑的博客

https://blog.jclark.com/2010/01/xml-namespaces.html

(评论也值得一读,大部分都是专家意见,值得认真对待。)

关于"what is the point?"这个问题,很多人会说它收效甚微,但这在当时是很时髦的。也许它流行的原因是人们认为他们正在构建某种面向未来的东西,并且为未知的未来保持开放的选择是优秀软件设计师的共同特征。

关于"where is the namespace defined"的问题,答案是:取决于命名空间。在许多情况下,如果您转到与名称空间关联的 URI,它会指向一个规范,但在其他情况下它不会,您只需要搜索它即可。与软件中的所有事物一样,有时人们会使用命名空间,但从来没有抽出时间为它编写任何文档。