如何表达关于RDF中关系的其他信息(时间,概率)?

时间:2015-10-03 13:35:49

标签: neo4j rdf semantic-web

我知道我可以将任何关系表示为RDF三元组,如:

Barack Obama -> president of -> USA

(我知道这不是RDF,我只是在说明)

但是如何添加有关此关系的其他信息,例如时间维度?我的意思是他处于第二次总统任期,任何时期都只持续了一段时间。那么,在他的总统任期之前和之后呢?

1 个答案:

答案 0 :(得分:13)

有几种方法可以做到这一点。我将举例说明一些比较流行的。

命名图形/四元组

在RDF中,命名图是RDF数据集的子集,它们被分配了特定的标识符(“图形名称”)。在大多数RDF数据库中,这是通过向RDF三元组添加第四个元素,将其从三元组转换为“四元组”(有时它也称为三元组的“上下文”)来实现的。

您可以使用此机制来表达关于某些语句集合的信息。例如(对RDF使用伪N-Quads语法):

:i1 a :TimePeriod .
:i1 :begin "2009-01-20T00:00:00Z"^^xsd:dateTime .
:i1 :end "2017-01-20T00:00:00Z"^^xsd:dateTime .

:barackObama :presidentOf :USA :i1 .

注意最后一个陈述中的第四个元素:它将“Barack Obama是美国总统”的陈述与:i确定的命名图表联系起来。

在您有数据一次表达多个语句的情况下,命名图方法特别有用。当然也可以将它用于关于各个语句的数据(如上例所示),但如果以这种方式使用它可能很快变得麻烦(每个不同的时间段都需要它自己的命名)图形)。

将关系表示为对象

另一种方法是将关系本身建模为一个对象。 “巴拉克奥巴马”和“美国”之间的关系不仅仅是一个人是另一个人的总统,而是那个人在某些日期之间是其他人的总统。在RDF中表达这一点(正如Joshua Taylor在他的评论中所说明的那样):

:barackObama :hasRole :president_44 .
:president_44 a :Presidency ;
         :of :USA ;
         :begin "2009-01-20T00:00:00Z"^^xsd:dateTime ;
         :end "2017-01-20T00:00:00Z"^^xsd:dateTime .

关系本身现在已成为一个对象(“Presidency”类的一个实例,标识符为:president_44)。

与使用命名图形相比,此方法更适合于声明有关各个语句的数据。可能的缺点是在SPARQL中查询关系变得有点复杂。

RDF Reification

不确定这种方法实际上仍然被视为“流行”,但RDF具体化是历史上W3C认可的断言“关于陈述的陈述”的方法。在这种方法中,我们将语句本身转换为一个对象:

 :obamaPresidency a rdf:Statement ;
         rdf:subject :barackObama ;
         rdf:predicate :presidentOf ;
         rdf:object :USA ;
         :trueBetween [
                :begin "2009-01-20T00:00:00Z"^^xsd:dateTime ;
                :end "2017-01-20T00:00:00Z"^^xsd:dateTime .
         ] .

然而,在这种情况下,不使用RDF具体化有几个很好的理由:

  1. 概念上有点奇怪。我们想要表达的知识是关于 relation 的时间方面,但是使用RDF具体化我们正在谈论语句
  2. 我们在上面的例子中表达的是:“关于巴拉克奥巴马担任美国总统的声明在......和......之间有效。”请注意,我们表示巴拉克奥巴马实际上 是美国总统!你当然可以单独断言(通过添加原始三元组和改进的三元组),但这会产生进一步的复制/维护问题。
  3. 在SPARQL查询中使用很痛苦。
  4. 正如约书亚在他的评论中所指出的那样,W3C Note on defining N-ary RDF relations对于这些(和其他)方法的深入探讨是有用的。