首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发Stardog规则的SPARQL查询

触发Stardog规则的SPARQL查询
EN

Stack Overflow用户
提问于 2015-03-19 12:48:43
回答 1查看 697关注 0票数 3

我在尝试一条自定义的星狗规则。自定义规则基本上如下所示:

代码语言:javascript
复制
@prefix rule: <tag:stardog:api:rule:> .
[] a rule:SPARQLRule ;
  rule:content """
PREFIX : <http://url/draft#>
IF {
      ?x a :Person; :has_yob ?yob.
      BIND (2014 - ?yob AS ?age)
   }
THEN {
      ?x :has_age ?age
}
""" .

我用以下java代码上传了这个ttl文件:

代码语言:javascript
复制
final Connection conn = ConnectionConfiguration.to("db_name").server("snarl").connect();
conn.begin();
conn.add().io().context(new URIImpl("http://url/rules")).file(ttlFile);
conn.commit();

由于我希望将规则保存在一个单独的图中,所以我已经在http://url/rules图中加载了规则三元组。默认图(在Stardog中表示为tag:stardog:api:context:default )包含本体公理。当我使用以下SPARQL查询时,Stardog规则按预期工作:

代码语言:javascript
复制
PREFIX : <http://url/draft#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?s ?age
FROM <tag:stardog:api:context:default> 
FROM <http://url/rules>
FROM NAMED <http://url/datasource>
WHERE {
  ?s rdf:type :Person .
  ?s :has_age ?age .
}

你可能想知道现在是怎么回事。我想我对名字从句的理解是错误的。当我将FROM <http://url/rules>排除在查询之外时,我希望查询不会有任何结果。然而,我仍然得到与原始查询类似的结果。这怎麽可能?我是这样想这些条文的:

  • FROM <tag:stardog:api:context:default>:使用默认图形中的本体公理
  • FROM <http://url/rules>:在这个特定的查询中使用规则
  • FROM NAMED <http://url/datasource>:需要查询的实际数据

所以我重复我的问题,为什么当我把第二个FROM子句放在SPARQL查询之外时,为什么要得到正确的结果?FYI,我总是使用推理类型SL。

编辑@ answer 1538695答案后的

当我在模式(TBox)中持久化规则时,我仍然必须在查询中添加FROM <tag:stardog:api:context:default>。我只想查询一个命名图,并使用模式进行推理。不需要显式地提到默认的图(模式),这难道不是可能的吗?这就是我当前查询的样子:

代码语言:javascript
复制
PREFIX : <http://url/draft#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?s ?age
FROM <tag:stardog:api:context:default> 
FROM <http://url/datasource>
WHERE {
  ?s rdf:type :Person .
  ?s :has_age ?age .
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-20 02:37:02

首先,对于FROM命名子句存在误解。FROM命名子句指定将用于匹配图子句中的图形模式的命名图。如果您的查询没有Graph子句,则FROM命名将无效。

其次,Stardog认为规则是模式的一部分,数据库的模式是通过reasoning.schema.graphs数据库选项固定的。无论查询使用何种命名子句,所使用的模式公理和规则都是相同的。指定子句将只确定实例将与查询匹配的命名图。

最后,Stardog 2.x中reasoning.schema.graphs的默认值是默认图(在StarDog3.0中,默认值将更改为所有图),因此,除非更改此选项,否则将忽略命名图中的任何公理或规则。但是还有一个query.all.graphs配置选项,它指示Stardog使用所有图的联合作为默认图。因此,拥有reasoning.schema.graphs=default但更改query.all.graphs也间接地改变了模式图。

根据这些信息,如果你仍然没有得到预期的答案,你应该把一个最小的例子放在一起,然后把它发送到Stardog邮件列表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29145032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档