【问题标题】:What is the point of a namespaced root node in XML and where would such a namespace be defined?XML 中命名空间根节点的意义何在?在哪里定义这样的命名空间?
【发布时间】:2020-05-21 03:46:06
【问题描述】:

我目前正在研究一个 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>

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

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#">

即根节点是&lt;rdf:RDF ...&gt;。从我的角度来看,这并不重要,因为我已经知道它是一个 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】:

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

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

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

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

    (cmets也值得一读。大部分来自专家,他们的意见值得认真对待。)

    对于“有什么意义?”这个问题,很多人会说它收效甚微,但这在当时是很时髦的做法。也许它流行的原因是人们认为他们正在构建某种面向未来的东西,并且为未知的未来保持开放是优秀软件设计师的共同特征。

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

    【讨论】:

    • 谢谢 - 我没有意识到命名空间适用于定义它的标签。这个答案是我的问题
    • *答案。不是“答案”。
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2020-02-19
    • 2012-09-25
    • 2011-11-12
    • 2011-02-10
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多