2

据我所知,语义网由三元组的 URI 组成。命名空间简写在日常使用中被广泛用于缩写它们。我认为,命名空间简写将通过简单的连接扩展为 URI,例如著名命名空间dc:title中的著名dc:(定义为http://purl.org/dc/elements/1.1/,请注意最后一个字符是 a /)将扩展为,因此在语义上等于http://purl.org/dc/elements/1.1/title

然后我遇到了一些名称空间定义,它们的末尾缺少合理的分隔字符。来自http://live.dbpedia.org/sparql?nsdecl的一些例子

还有一些来自最常见的 RDF 命名空间列表:

如何将此类命名空间扩展为有效的链接数据 URI?

XML 中的 W3C 推荐名称空间定义:“扩展名称是由名称空间名称本地名称组成的对。” Fredrik Lundh在 effbot.org 上写道:“在元素树中,限定名称以 Clark 表示法存储为通用名称,它将 URI 和本地部分组合成一个字符串,以 '{uri}local' 形式给出。” 这可能适用于广泛的用例,但它不符合链接数据由 URI 组成的想法,URI 不能以{.

我原以为xsd:element应该扩展到链接数据(也不应该),应该吗?这必须如何正确实施?http://www.w3.org/2001/XMLSchemaelement{http://www.w3.org/2001/XMLSchema}element

4

1 回答 1

5

来自RDF/XML 语法规范(修订版) [强调添加]:

为了在 XML 中编码图形,节点和谓词必须用 XML 术语表示——元素名称、属性名称、元素内容和属性值。RDF/XML 使用 XML 中的命名空间 [XML-NS] 中定义的 XML QName 来表示 RDF URI 引用。所有 QName 都有一个命名空间名称,它是一个 URI 引用和一个简短的本地名称。此外,QNames 可以有一个短前缀,也可以使用默认命名空间声明来声明并且没有(但仍然有一个命名空间名称)

由 QName 表示的 RDF URI 引用是通过在 QName 的名称空间名称(URI 引用)部分之后附加 QName 的本地名称部分来确定的。这用于缩短所有谓词和某些节点的 RDF URI 引用。标识主体和客体节点的 RDF URI 引用也可以存储为 XML 属性值。RDF 文字(只能是对象节点)成为 XML 元素文本内容或 XML 属性值。

这是简单的串联。重要的是串联的结果。这意味着我可以使用

@prefix dcterms: <http://purl.org/dc/terms/>
@prefix dctermsx: <http://purl.org/dc/terms/accrual>

dcterms:accrualPolicy      === http://purl.org/dc/terms/accrualPolicy
dctermsx:Policy            === http://purl.org/dc/terms/accrualPolicy
dcterms:accrualPeriodicity === http://purl.org/dc/terms/accrualPeriodicity
dctermsx:Periodicity       === http://purl.org/dc/terms/accrualPeriodicity

有趣的是,RDF/XML 语法规范必须定义 QName 的解释方式。为什么不直接继承 XML QName 规范的含义?答案在您引用的文章中:

XML 命名空间规范没有明确说明应用程序应如何处理(URI,本地部分)对。虽然大多数应用程序将它们视为两个不同的组件,但有些应用程序希望您以不同的方式组合它们。

在 RDF/XML中,应用程序将 (URI,local part) 对视为对 URI 的引用,它是urilocal的串联,如 RDF 语法文档的初始引用中所述。当然,约定是由词汇表定义的 URI 具有公共名称空间,并且使用该名称空间作为 XML 前缀很容易编写术语,因此在实践中您不会看到那种名称空间修饰我在上面用 DCMI 术语展示的。

在 ElementTree中,QName 对应于{uri}local。这就是该应用程序处理 (URI,local part) 对的方式。

由于 RDF/XML 序列化必须是有效的 XML,因此会产生一些复杂情况。并非每个 URI 都可以表示为 QName,因为有些 URI 不能表示为 QName,因为在 QName中,对可以出现在和 中的namespace:localname字符有限制。例如,您不能使用像它这样的漂亮 QName,因为 localname 不能以数字开头。(例如,请参阅Jena-users 邮件列表上的此线程。)namespacenamehttp://127.0.0.1/789234localhost:789234

另一个复杂或混乱的原因是除了 RDF/XML 之外还有 RDF 序列化,其中一些采用了表面上类似于 XML QNames 的前缀/后缀表示法,但放宽了其中一些约束,因此您可能会看到前缀/不是有效的 XML QNames 的后缀组合,但对于这些格式来说没问题。

DBpedia SPARQL 端点上定义的前缀突出了这个问题。从 SPARQL 标准,第4.1.1.1 节前缀名称[强调添加]:

关键字将PREFIX前缀标签与 IRI 相关联。前缀名称是前缀标签和本地部分,用冒号分隔":"通过连接与前缀相关联的 IRI 和本地部分,将前缀名称映射到 IRI。前缀标签或本地部分可能为空。请注意,SPARQL 本地名称允许前导数字,而 XML 本地名称不允许。SPARQL 本地名称还允许通过反斜杠字符转义在 IRI 中使用非字母数字字符(例如ns:id\=123)。SPARQL 本地名称比 CURIE 有更多的语法限制。

在这种情况下,虽然像这样的前缀

amz => http://webservices.amazon.com/AWSECommerceService/2005-10-05

在 RDF/XML 序列化中将毫无用处,因为您需要编写诸如amz:#somethingor之类的非法内容amz:/something,它在 SPARQL 中会很有用(如果可能不方便),您可以在其中编写amz:\#somethingamz:\/something.

于 2013-06-21T12:30:48.390 回答