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

问题描述 投票:1回答:1

[我目前正在研究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)以及在解析about XML的上下文中唯一的标签属性(resourcerdf)。我想解析器需要使用规则-但是这些标签永远不会与具有相同名称但出于不同目的定义的标签混淆。即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/>

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

xml rdf
1个回答
2
投票

[James Clark提供了有关命名空间工作原理的有用摘要

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

和(几年后,一个关于设计是否正确完成的深思熟虑的博客,]

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.