neo4j – 如何表达关于RDF中关系的其他信息(时间,概率)?
我知道我可以将任何关系表示为RDF三元组,如:
巴拉克奥巴马 – >总统 – >美国 (我知道这不是RDF,我只是在说明) 但是,如何添加有关此关系的其他信息,例如时间维度?我的意思是他处于他的第二个总统任期,任何时期都只持续了一段时间.而且,在他的总统任期之前和之后怎么样? 解决方法
有几种选择可以做到这一点.我将举例说明一些比较流行的.
命名图形/四边形 在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 . 注意最后一个陈述中的第四个元素:它将“巴拉克奥巴马是美国总统”的陈述链接到由以下标识的命名图: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具体化 不确定这种方法实际上仍然被视为“流行”,但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具体化有几个很好的理由: >它在概念上有点奇怪.我们想要表达的知识是关于关系的时间方面,但是使用RDF具体化我们正在对该语句说些什么. 正如约书亚在他的评论中所指出的那样,W3C Note on defining N-ary RDF relations很有用,因为它更深入地探讨了这些(和其他)方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |