当前位置: 首页 > 知识库问答 >
问题:

在海龟或RDF中,我可以在所有符合条件的主题上添加谓语/宾语吗?

张通
2023-03-14

我正在做一些实验,在Tomcat中的openrdf workbench webapp中导入用turtle语言编写的三元组,它包含了一个SPARQLendpoint。

我想知道如果有了海龟,或者,一般来说,在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

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

(implicit subject) foo:g foo:h

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

foo:a foo:g foo:h
foo:d foo:g foo:h
foo:e foo:g foo:h
foo:f foo:g foo:h

这可能吗?

或者:有没有办法定义一些三元组,以便SPARQL在查询具有谓语/对象的主题时能够找到foo: a/d/e/f

共有2个答案

万修然
2023-03-14

您可以使用OWL和以下形式的公理进行这种类型的推理

p值a⊑ q值b

也就是说,如果某个东西的a作为属性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 .

在Protégé中,公理如下:

您可以启用推理器并查询q值d的实例,请参见:

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

陈寒
2023-03-14

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

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

推断是一种技术,通过这种技术,您可以定义基于现有三元组推断额外三元组的规则。您通常要么使用预定义的规则集,要么使用自己的自定义规则。我认为芝麻只支持开箱即用的预定义规则集,所以你可能想看看OWLIM,它是一个可以与芝麻一起使用的替代后端,并且有更多可定制的规则AFAIK。

推断通常有两种应用方式,一种是只存储规则,每次触发规则时计算附加信息,另一种是预计算所有附加信息并将其添加到数据库中。您想要使用哪一个取决于您打算如何使用您的系统,并且需要进行性能权衡。我不打算详细讨论,因为这实际上是一个完全不同的问题——请参阅正向链接与反向链接的讨论

或者,如果您的规则相对简单,并且您可以预先计算额外的信息并将其添加到数据库中,那么您可以编写SPARQL更新来实现这一点,例如。

PREFIX foo: <http://example.org/foo#>
INSERT
{
  ?x foo:g foo:h .
}
WHERE
{
  ?x foo:b foo:c .
}

我猜您对SPARQL是相当陌生的,因为从您描述的内容来看,这对我来说似乎微不足道。

如果我想找到所有具有谓语foo: g和对象foo: h的主语,我会简单地写以下内容:

PREFIX foo: <http://example.org/foo#>
SELECT ?x
WHERE
{
  ?x foo:g foo:h .
}
 类似资料:
  • 我需要提取句子中单词的关系。我最感兴趣的是确定主语、谓语和宾语。例如,对于下面的句子: 我想有: 斯坦福NLP能做到吗?我尝试了他们的注释器,但它似乎没有像我预期的那样工作?也许还有其他软件可以产生这个结果?

  • 我试图向“AuthDate”为“06/05/20”且“Time”为“1P -2P”的列添加一个数值。 我运行了以下查询: *main=表名调用=列名 但是我得到错误代码1175你正在使用安全更新模式 有人知道我为什么会出错吗?

  • 问题内容: 你可以添加新的语句(例如,,)Python的语法? 说,允许 要么, 如果您 应该的话 ,不要太多,但如果可能的话,就可以了(只需修改python解释器代码即可) 问题答案: 您可能会发现这很有用-Python内部:在Python上添加新语句,引用如下: 本文旨在更好地了解Python前端的工作方式。仅仅阅读文档和源代码可能会有点无聊,因此我在这里采用动手实践的方法:我将向Python

  • 问题内容: 你可以添加新的语句(例如)Python的语法? 说,允许 要么, 如果你应该的话,并没有那么多,但是,如果可能的话,就不那么多了(只需修改python解释器代码) 问题答案: 本文旨在更好地了解Python前端的工作方式。仅阅读文档和源代码可能会有点无聊,因此我在这里采用动手方法:我将向untilPython 添加一条语句。 本文的所有编码都是针对Python Mercurial存储库

  • 我想知道是否有可能把代码的这个语句变成一个三元if语句。 我试过这样格式化它--但不认为它很管用。

  • 下图是Microsoft SQL Server 2008 R2系统视图的一部分。从图中我们可以看到和。因此,为了将它们结合在一起,我会写一些类似的东西: 但是上面的代码给出了一个语法错误。我想那是因为陈述。谁能帮我解释一下吗? 添加错误消息: Msg 102,15级,状态1,第6行“=”附近的语法不正确。