【问题标题】:Rdf duplicate triplesRdf 重复三元组
【发布时间】:2015-02-28 23:41:08
【问题描述】:

我有一个关于 RDF 和重复三元组​​的问题。从浏览互联网看来,重复的三元组似乎在某种程度上是“坏的”或违反了某些规则。

但从表面上看,重复的三元组在我看来是有意义的。

假设我想表达一个事实: Susy(主语)提及(谓语) Bob(宾语)。

假设我还想将Susy mentions Bob 表示五次。不会有 5 个三元组的 Susy mentions Bob 允许我代表这个吗?

稍后的查询想要知道 Susy 提到 Bob 多少次,可以只要求这个重复的三元组的 COUNT。

所以我的问题是:Susy mentions Bob five time.如果是这样,那么表示 Susy 提到 Bob 五次这一事实的首选方式是什么。

【问题讨论】:

标签: rdf


【解决方案1】:

理论上,RDF 图是三元组的集合,这意味着每个三元组只能出现一次。当然,你可以有一个文档,比如在 Turtle 中,其中包含三元组或四元组的重复项,但在加载到内存/存储之后,这些三元组应该被视为一个。毕竟任何文档都只是文本。

也就是说,我已经看到三家商店的不同行为。例如 AllegroGraph 默认加载和处理重复的三元组。有一个手动选项可以修剪重复项。

不,查询不会告诉您有重复的问题,因为 SPARQL 聚合适用于节点而不是整个三元组。


关于您的示例,有多种方法。

TL/DR你需要一种方法来添加关于语句的语句。各种方式见this slideshare,下面我简要介绍了其中的一些。

完整答案

最简单的方法是引入某种人工中间图节点,可以称为提及或其他。例如

:Susan :mentions [
  rdf:type :Mention ;
  :mentionsWhom :Bob ;
  :times 5 
]

问题在于,如果您碰巧将这种结构引入现有数据,这会破坏现有语义。


一种简单且得到广泛支持的方法是使用named graphs,这样您就有四边形而不是三边形。下面的示例增强了海龟语法,使其变为 TriG。请注意,名称图只是另一种资源。使用任何 SPARQL 处理器也可以轻松查询命名图。

# :susanMentionsBob is the named graph
:susanMentionsBob {
   :Susan :mentions :Bob
}

# we can say more about that graph
:susanMentionsBob :times 5

另一种传统的解决方案是使用 reification 的形式。通过具体化,您可以创建一个 rdf:Statement 对象,您可以在其中添加其他数据。缺点是你需要重复原来的三元组s/p/o

:Susan :mentions :Bob . # actual triple intact
_:reifiedStatement
   rdf:type rdf:Statement ;
   rdf:subject :Susan ;
   rdf:predicate :mentions ;
   rdf:subject :Bob ;
   :times 5 . # extra statement about the mention

最近引入了更简洁的具体化方法。您可以改用Singleton Property。您引入了一个额外的谓词,它替换了 :mentions 用于单一用法,然后向该属性添加了额外的语句:

:Susan :mentions#1 :Bob .
:mentions#1 rdf:singletonPropertyOf :mentions .
:mentions#1 :times 5 .

请注意,您可以为 :mentions#1 属性使用任何名称以避免冲突。请查看上面链接的 sildeshare 以获取更多示例和 SPARQL 用法


最后但并非最不重要的一种非标准方式,仅受 BigData AFAIK 支持,是Reification Done Right, or RDR。使用 RDR,您可以编写

<<:Susan :mentions :Bob>> :times 5

通过添加双尖括号,您可以添加关于语句的语句。这也适用于 BigData 的 SPARQL 处理器。

【讨论】:

  • 非常非常有帮助。谢谢。
  • 非常好的答案,谢谢。对具体化声明的小修正;应该是rdf:object :Bob ;。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
相关资源
最近更新 更多