SPARQL查询触发Stardog规则

时间:2015-03-19 12:48:43

标签: java sparql triples stardog

我正在尝试自定义Stardog规则。自定义规则基本上如下所示:

@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文件:

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规则按预期工作:

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和FROM NAMED子句有错误的理解。当我将FROM <http://url/rules>从查询中删除时,我预计查询不会产生任何结果。然而,我仍然得到与原始查询一样的结果。这怎么可能?这就是我对这些条款的看法:

  • FROM <tag:stardog:api:context:default>:使用来自的本体公理 默认图表
  • FROM <http://url/rules>:使用此中的规则 特别查询
  • FROM NAMED <http://url/datasource>:实际数据 需要查询

所以我重复一下我的问题,为什么当我将第二个FROM子句从SPARQL查询中删除时,我得到了正确的结果?仅供参考,我总是使用推理类型SL。

@ user1538695回答后

编辑

当我在架构(TBox)中保留规则时,我仍然需要在查询中添加FROM <tag:stardog:api:context:default>。我只想查询一个命名图并使用模式进行推理。如果不明确提到默认图(架构),这不可能吗?这是我当前的查询:

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 .
}

1 个答案:

答案 0 :(得分:2)

首先,对FROM NAMED条款存在误解。 FROM NAMED子句指定将用于匹配GRAPH子句中的图形模式的命名图形。如果您的查询没有GRAPH子句,则FROM NAMED将不起作用。

其次,Stardog认为规则是模式的一部分,数据库的模式是通过reasoning.schema.graphs数据库选项修复的。无论您的查询使用什么FROM或FROM NAMED子句,使用的模式公理和规则都是相同的。 FROM或FROM NAMED子句仅确定实例将与查询匹配的命名图。

最后,Stardog 2.x中reasoning.schema.graphs的默认值是默认图形(在Stardog 3.0中,默认值更改为所有图形),因此除非您更改此名称,否则将忽略命名图形中的任何公理或规则选项。但是还有query.all.graphs配置选项,它指示Stardog使用所有图形的并集作为默认图形。因此,reasoning.schema.graphs=default但更改query.all.graphs也会间接更改架构图。

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