我正在做一些实验,在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
?
您可以使用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
的实例,请参见:
或者,您可以浏览到个人并查看结果:
问题的第一部分可以通过以下两种方式之一解决:
推断是一种技术,通过这种技术,您可以定义基于现有三元组推断额外三元组的规则。您通常要么使用预定义的规则集,要么使用自己的自定义规则。我认为芝麻只支持开箱即用的预定义规则集,所以你可能想看看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行“=”附近的语法不正确。