在乌龟或RDF中,我可以在符合条件的所有主题上添加谓词/对象吗?

fst*_*tab 5 rdf semantic-web sparql triplestore turtle-rdf

我正在进行一些实验,在Tomcat中openrdf-workbench webapp中导入以turtle语言表达的三元组,其中包含一个SPARQL端点.

我想知道是否使用乌龟,或者通常在RDF/RDFS中是否可以在所有(隐式)主题上有条件地为另一个谓词/对象的存在添加某个谓词/对象声明.

例如,如果我定义了以下三元组:

foo:a foo:b foo:c
foo:d foo:b foo:c
foo:e foo:b foo:c
foo:f foo:b foo:c
Run Code Online (Sandbox Code Playgroud)

我想自动将以下谓词/主题添加到与predicate = foo:b和object = 匹配的所有主题foo:c:

(implicit subject) foo:g foo:h
Run Code Online (Sandbox Code Playgroud)

为了自动生成以下三元组:

foo:a foo:g foo:h
foo:d foo:g foo:h
foo:e foo:g foo:h
foo:f foo:g foo:h
Run Code Online (Sandbox Code Playgroud)

这可能吗?

或者:有没有办法定义一些三元组,以便foo:a/d/e/f在查询具有foo:g foo:h谓词/对象的主题时启用S​​PARQL ?

Rob*_*obV 8

第1部分 - 创建其他信息

问题的第一部分可以通过以下两种方式之一解决:

  1. 使用推理
  2. 使用SPARQL更新

推论

推理是一种技术,您可以根据现有的三元组定义推断其他三元组的规则.您通常使用预定义的规则集或使用自己的自定义规则.我认为Sesame只支持开箱即用的预定义规则集,所以你可能想看看OWLIM,它是一个可以与Sesame一起使用的备用后端,并且有更多可定制的规则AFAIK.

推理通常可以通过两种方式应用,一种是您只存储规则,每次规则触发时计算附加信息,另一种是预先计算所有附加信息并将其添加到数据库中.您将要使用哪个取决于您打算如何使用您的系统,并涉及性能权衡.我不打算详细说明,因为这确实是另一个问题 - 请参阅前向与后向链接进行一些讨论

SPARQL更新

或者,如果您的规则相对简单,并且可以预先计算额外信息并将其添加到数据库中,则可以编写SPARQL更新来执行此操作,例如:

PREFIX foo: <http://example.org/foo#>
INSERT
{
  ?x foo:g foo:h .
}
WHERE
{
  ?x foo:b foo:c .
}
Run Code Online (Sandbox Code Playgroud)

第2部分 - 查询数据

我猜你是SPARQL的新手,因为根据你的描述,这对我来说听起来微不足道.

如果我想查找具有谓词foo:g和对象的所有主题,foo:h我只需编写以下内容:

PREFIX foo: <http://example.org/foo#>
SELECT ?x
WHERE
{
  ?x foo:g foo:h .
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*lor 6

您可以使用带有表单公理的OWL进行此类推理

p a⊑q b

它说,如果事情有一个作为属性的值p,那么它也有b为属性的值q.作为一个例子,这里有一个本体,有四个个体(a,b,c,d),两个对象属性(p,q)和公理(p c⊑q d).

@prefix :      <http://example.org/add-predicate-object#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://example.org/add-predicate-object> a owl:Ontology .

:p a owl:ObjectProperty .
:q a owl:ObjectProperty .

[ a owl:Restriction ;
  owl:onProperty :p ;
  owl:hasValue   :c ;
  rdfs:subClassOf [ a owl:Restriction ;
                    owl:onProperty :q ;
                    owl:hasValue   :d ] . ] .

:a a owl:Thing, owl:NamedIndividual ; :p :c .
:b a owl:Thing, owl:NamedIndividual ; :p :c .
:c a owl:Thing, owl:NamedIndividual .
:d a owl:Thing, owl:NamedIndividual .
Run Code Online (Sandbox Code Playgroud)

在Protégé中,公理看起来像这样:

在此输入图像描述

您可以启用推理器并查询实例q value d并查看:

在此输入图像描述

或者您可以浏览个人并查看结果:

在此输入图像描述