我正在尝试一个自定义的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
}
""" .
我上传了这个ttl文件,其中包含以下java代码:
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>
:实际数据需要查询的
因此,我重复我的问题,为什么我在SPARQL查询中省略了第二个FROM子句,却得到了正确的结果?仅供参考,我总是使用推理类型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 .
}
首先,对FROM NAMED子句存在误解。FROM NAMED子句指定将用于匹配graph子句中的图形模式的命名图形。如果您的查询没有GRAPH子句,则FROM NAMED将无效。
其次,Stardog认为规则是模式的一部分,数据库的模式是通过reasoning.schema.graphs
数据库选项固定的。无论查询使用何种FROM或FROM-NAMED子句,所使用的模式公理和规则都是相同的。FROM或FROM NAMED子句将仅确定实例将从中匹配到查询的命名图。
最后,reasoning.schema.graph在Stardog2.x中的默认值是默认图(在Stardog3.0中,默认值更改为所有图),因此命名图中的任何公理或规则都将被忽略,除非您更改此选项。但也有query.all.graphs
配置选项,它指示Stardog使用所有图的并集作为默认图。因此,具有reasoning.schema.graphs=default
但改变query.all.graphs
也会间接地改变模式图。
根据这些信息,如果你仍然没有得到预期的答案,你应该拿出一个最小的例子,并将其发送到Stardog邮件列表。