RDF 散列与斜线词汇表(以及其他)
RDF hash vs slash vocabularies (and the rest)
我无法理解命名空间及其散列或斜杠性质的概念。我理解他们两个,但我遇到了另一种表示法,没有散列或斜线。特别是在我正在阅读的一本书(Mannings:Linked Data)中,有几个示例使用保存在 Turtle 格式文件中的小模式。这些示例使用此前缀:
@prefix wish: <http://purl.org/net/WishListSchema> .
这导致(翻译成 JSON-LD):
"http://purl.org/net/WishListSchemwish_list_item":
如果我在前缀中加一个hash/slash,看起来更合理:
"wish:wish_list_item":
可能是我对vocabulary/schema的区别理解不正确,我不知道。
没有的符号是否常见井号或斜线?问题出在哪里?
没有斜杠或散列的符号并不常见。我还没有看到使用该约定的词汇表。在 W3C 推荐中,他们只提供斜杠的食谱,并且有 URI:http://www.w3.org/2001/sw/BestPractices/VM/http-examples/2006-01-18/#naming
实际上,如果您使用示例中列出的那个,它可能会被视为斜杠符号,但您词汇表中的每个术语都将以 "WishListSchema_" 开头。
从可取消引用的角度来看,如果您使用 purl,该示例也会导致问题,因为您必须为词汇表的每个概念创建不同的 purl。相反,如果您使用 http://purl.org/net/WishListSchemwish# 之类的东西,您可以将 URL 重定向到您的服务器并使用适当的食谱来发布词汇表。
这并不常见,也不是一个好主意。 IRI 变得更难阅读。
同样适用于 @base
指令,它的作用类似于前缀 - 不同之处在于,如果使用的 IRI 没有斜杠,那么最后一个 qname 也会被删除:
@base <http://test.org/path#> .\n <a1> <b1> <c1> .
解析为具有 IRI 的个体“http://test.org/a1”
可能会造成严重的混淆,我认为这不是教程的最佳创意。
可能出现没有结束字符的前缀的一种情况是数据最初存储在 XML 中。 RDF/XML 传统上支持将前缀视为 XML 命名空间 直接 ,因此 rdf:
将被声明为 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
,并带有哈希字符。
但是,没有什么可以阻止在 RDF/XML 中声明其他命名空间。过于简单的工具可能会产生这样的前缀:
@prefix xml: <http://www.w3.org/XML/1998/namespace>
现在,类似于 XML,RDF 中的命名空间只是相关资源的抽象分组,但与 XML 不同的是,它没有在 RDF 数据本身的任何地方声明。它只是在人类检查前缀时出现,但它本身并不存在。
当您真正希望 URI 具有意义时,命名空间就成为了一种东西——当资源是一组相关资源的一部分(例如 ontology)并且 URI 应该是可解引用的。散列或斜杠约定只是配置网络服务器的最简单方法,因此这是可能的。如果有人将他们的网络服务器配置为将任何以 http://purl.org/net/WishListSchema
开头的 URI 视为引用该名称空间,那么也不会有问题。
正如我旁注的那样,我认为这种从 XML 命名空间的直接转换从来都不是幸运的。 XML 命名空间也没有义务被取消引用,但它们在任何上下文中都不会被视为前缀,因此如果 http://www.w3.org/XML/1998/namespace#lang
描述某些东西的可能性很小(这里它确实如此),那么 http://www.w3.org/XML/1998/namespacelang
永远没有意义。在我看来,一个更合理的算法是检查名称空间是否以 #
或 /
结尾(这在 XML 中很少见,但 xmlns:
是一个有趣的例外),如果没有,则附加 #
。寻找那个时你肯定不会得到 404s。
我无法理解命名空间及其散列或斜杠性质的概念。我理解他们两个,但我遇到了另一种表示法,没有散列或斜线。特别是在我正在阅读的一本书(Mannings:Linked Data)中,有几个示例使用保存在 Turtle 格式文件中的小模式。这些示例使用此前缀:
@prefix wish: <http://purl.org/net/WishListSchema> .
这导致(翻译成 JSON-LD):
"http://purl.org/net/WishListSchemwish_list_item":
如果我在前缀中加一个hash/slash,看起来更合理:
"wish:wish_list_item":
可能是我对vocabulary/schema的区别理解不正确,我不知道。
没有的符号是否常见井号或斜线?问题出在哪里?
没有斜杠或散列的符号并不常见。我还没有看到使用该约定的词汇表。在 W3C 推荐中,他们只提供斜杠的食谱,并且有 URI:http://www.w3.org/2001/sw/BestPractices/VM/http-examples/2006-01-18/#naming
实际上,如果您使用示例中列出的那个,它可能会被视为斜杠符号,但您词汇表中的每个术语都将以 "WishListSchema_" 开头。
从可取消引用的角度来看,如果您使用 purl,该示例也会导致问题,因为您必须为词汇表的每个概念创建不同的 purl。相反,如果您使用 http://purl.org/net/WishListSchemwish# 之类的东西,您可以将 URL 重定向到您的服务器并使用适当的食谱来发布词汇表。
这并不常见,也不是一个好主意。 IRI 变得更难阅读。
同样适用于 @base
指令,它的作用类似于前缀 - 不同之处在于,如果使用的 IRI 没有斜杠,那么最后一个 qname 也会被删除:
@base <http://test.org/path#> .\n <a1> <b1> <c1> .
解析为具有 IRI 的个体“http://test.org/a1”
可能会造成严重的混淆,我认为这不是教程的最佳创意。
可能出现没有结束字符的前缀的一种情况是数据最初存储在 XML 中。 RDF/XML 传统上支持将前缀视为 XML 命名空间 直接 ,因此 rdf:
将被声明为 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
,并带有哈希字符。
但是,没有什么可以阻止在 RDF/XML 中声明其他命名空间。过于简单的工具可能会产生这样的前缀:
@prefix xml: <http://www.w3.org/XML/1998/namespace>
现在,类似于 XML,RDF 中的命名空间只是相关资源的抽象分组,但与 XML 不同的是,它没有在 RDF 数据本身的任何地方声明。它只是在人类检查前缀时出现,但它本身并不存在。
当您真正希望 URI 具有意义时,命名空间就成为了一种东西——当资源是一组相关资源的一部分(例如 ontology)并且 URI 应该是可解引用的。散列或斜杠约定只是配置网络服务器的最简单方法,因此这是可能的。如果有人将他们的网络服务器配置为将任何以 http://purl.org/net/WishListSchema
开头的 URI 视为引用该名称空间,那么也不会有问题。
正如我旁注的那样,我认为这种从 XML 命名空间的直接转换从来都不是幸运的。 XML 命名空间也没有义务被取消引用,但它们在任何上下文中都不会被视为前缀,因此如果 http://www.w3.org/XML/1998/namespace#lang
描述某些东西的可能性很小(这里它确实如此),那么 http://www.w3.org/XML/1998/namespacelang
永远没有意义。在我看来,一个更合理的算法是检查名称空间是否以 #
或 /
结尾(这在 XML 中很少见,但 xmlns:
是一个有趣的例外),如果没有,则附加 #
。寻找那个时你肯定不会得到 404s。