Neo4j 如何在RDF中表达有关关系的附加信息(时间、概率)?
我知道我可以将任何关系表示为RDF三元组,如下所示:Neo4j 如何在RDF中表达有关关系的附加信息(时间、概率)?,neo4j,rdf,semantic-web,Neo4j,Rdf,Semantic Web,我知道我可以将任何关系表示为RDF三元组,如下所示: 巴拉克•奥巴马->美国总统->美国 (我知道这不是RDF,我只是举例说明) 但是我如何添加关于这种关系的附加信息,例如时间维度?我的意思是,他正处于第二个总统任期,任何时期都只会持续一段时间。那么,在他担任总统期间之后和之前呢?有几种选择。我将举例说明一些比较流行的方法 命名图/四边形 在RDF中,命名图是RDF数据集的子集,该数据集被分配了一个特定的标识符(“图名”)。在大多数RDF数据库中,这是通过向RDF三元组添加第四个元素来实现的,将
巴拉克•奥巴马->美国总统->美国
(我知道这不是RDF,我只是举例说明)
但是我如何添加关于这种关系的附加信息,例如时间维度?我的意思是,他正处于第二个总统任期,任何时期都只会持续一段时间。那么,在他担任总统期间之后和之前呢?有几种选择。我将举例说明一些比较流行的方法 命名图/四边形 在RDF中,命名图是RDF数据集的子集,该数据集被分配了一个特定的标识符(“图名”)。在大多数RDF数据库中,这是通过向RDF三元组添加第四个元素来实现的,将其从三元组转换为“四元组”(有时也称为三元组的“上下文”) 您可以使用此机制来表示有关特定语句集合的信息。例如(对RDF使用伪N-Quads语法): 请注意最后一个语句中的第四个元素:它将“巴拉克·奥巴马是美国总统”的语句链接到由
:i
标识的命名图
命名图方法在有数据同时表示多个语句的情况下特别有用。当然,也可以将其用于有关单个语句的数据(如上面的示例所示),但如果以这种方式使用,可能会很快变得很麻烦(每个不同的时间段都需要自己的命名图)
将关系表示为对象
另一种方法是将关系本身建模为对象。“巴拉克·奥巴马”和“美国”之间的关系不仅仅是一方是另一方的总统,而是一方在特定日期之间是另一方的总统。为了用RDF表达这一点(约书亚·泰勒在他的评论中也说明了这一点):
关系本身现在已成为一个对象(“Presidence”类的实例,标识符为:president_44
)
与使用命名图相比,这种方法更适合于断言有关单个语句的数据。一个可能的缺点是,在SPARQL中查询关系变得有点复杂
RDF物化
不确定这种方法是否仍然算是“流行的”,但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物化:
正如Joshua在他的评论中所指出的那样,随着对这些(和其他)方法进行更深入的研究,这一点非常有用 这对于堆栈溢出来说可能太宽了。你有很多选择。您可以将数据存储在数据集中,并使用命名图捕获某些内容。或者你可以把它变成一种n元关系:
:奥巴马:hasRole[:type:President;:country:USA;:begin…;:end…]
。谢谢@JoshuaTaylor你能给我指一本参考书或一本书吗?我真的没有谷歌做得更好,所以你可以看看经典。对于数据集,当谈到RDF时,请看一看.Neophyte,但我的第一反应是president is text book类对象。事实上,您似乎可以在多年后验证日期值。@说实话,xtian不确定您得到的是什么。哎呀。在我上班的路上使用火车上的StackApp——我想对OP进行评论。基本上我是在建议,正如你回答的“另一种方法是将关系本身建模为对象”。即使你对RDF定义一无所知,这个问题具有类对象的典型例子的特点。顺便说一句,谷歌对这些方法都不满意,所以他们开始对@berezovskiy感兴趣。愚蠢的方法——RDF的全部目的就是要有一个可互操作的标准。但是很有趣。
: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 .
: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 .
] .