温馨提示:本文翻译自stackoverflow.com,查看原文请点击:rdf - What is the point of a namespaced root node in XML and where would such a namespace be defined?
rdf xml

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

发布于 2020-04-20 14:14:00

我目前正在SPARQL研究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)在解析的环境中唯一的rdfXML。我想解析器需要使用规则-但是这些标签永远不会与具有相同名称但出于不同目的定义的标签混淆。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文档。但是拥有命名空间的根节点的意义何在?该命名空间在哪里定义?

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

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

它包括以下内容:

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

maps to

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

我没有意识到命名空间也适用于在其中指定了命名空间的标签。

查看更多

提问者
Zach Smith
被浏览
88
Michael Kay 2020-02-05 18:24

James Clark提供了有关命名空间工作原理的有用总结

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

和(多年后)关于如何正确完成设计的深思熟虑的博客

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

(这些评论也值得一读。其中大多数来自专家,他们的观点值得认真对待。)

关于“意义何在?”这个问题,许多人会争辩说它取得的成就很小,但这在当时是时髦的事情。也许它之所以流行是因为人们认为他们正在以某种面向未来的方式进行构建,而让您的选择面向未知的未来开放是优秀软件设计师的共同特征。

关于“在哪里定义名称空间”的问题,答案是:它取决于名称空间。在许多情况下,如果您转到与名称空间关联的URI,它将指向您一个规范,但是在其他情况下,它将不指向规范,而您只需要搜索它即可。与软件中的所有事物一样,有时人们使用名称空间,却从不为它编写任何文档。