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谓词/对象的主题时启用SPARQL ?
问题的第一部分可以通过以下两种方式之一解决:
推理是一种技术,您可以根据现有的三元组定义推断其他三元组的规则.您通常使用预定义的规则集或使用自己的自定义规则.我认为Sesame只支持开箱即用的预定义规则集,所以你可能想看看OWLIM,它是一个可以与Sesame一起使用的备用后端,并且有更多可定制的规则AFAIK.
推理通常可以通过两种方式应用,一种是您只存储规则,每次规则触发时计算附加信息,另一种是预先计算所有附加信息并将其添加到数据库中.您将要使用哪个取决于您打算如何使用您的系统,并涉及性能权衡.我不打算详细说明,因为这确实是另一个问题 - 请参阅前向与后向链接进行一些讨论
或者,如果您的规则相对简单,并且可以预先计算额外信息并将其添加到数据库中,则可以编写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)
我猜你是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)
您可以使用带有表单公理的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并查看:

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