3

我正在使用pellet进行sparql 查询,并且根据查询中三元组的顺序得到不同的结果,对吗?

例如,给定以下 N-Triples 数据输入:

<http://example.com/thing1> <http://example.com/hasDefinition> <http://example.com/def_thing1> .
<http://example.com/thing1> <http://www.w3.org/2000/01/rdf-schema#label> "Thing 1" .
<http://example.com/def_thing1> <http://www.w3.org/2000/01/rdf-schema#comment> "thing 1 it's awesome".

<http://example.com/thing2> <http://example.com/hasDefinition> <http://example.com/def_thing2> .
<http://example.com/thing2> <http://www.w3.org/2000/01/rdf-schema#label> "Thing 2" .
<http://example.com/def_thing2> <http://www.w3.org/2000/01/rdf-schema#comment> "thing 1 it's cool".

<http://example.com/thing3> <http://example.com/hasDefinition> <http://example.com/def_thing3> .
<http://example.com/thing3> <http://www.w3.org/2000/01/rdf-schema#label> "Thing 3" .
<http://example.com/def_thing3> <http://www.w3.org/2000/01/rdf-schema#comment> "thing 3 it's fine".

<http://example.com/thing4> <http://example.com/hasDefinition> <http://example.com/def_thing4> .
<http://example.com/thing4> <http://www.w3.org/2000/01/rdf-schema#label> "Thing 4" .
<http://example.com/def_thing4> <http://www.w3.org/2000/01/rdf-schema#comment> "thing 4 it's exactly what i need".

以下查询:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX example: <http://example.com/>

SELECT * WHERE {
    ?thing ?rel "Thing 4".
    ?thing example:hasDefinition ?def.
    ?def rdfs:comment ?definition.
}

回报:

Query Results (1 answers): 
thing  | rel   | def        | definition                        
================================================================
thing4 | label | def_thing4 | "thing 4 it's exactly what i need"

但下面的查询(只是前一个的改变):

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX example: <http://example.com/>

SELECT * WHERE {
    ?thing example:hasDefinition ?def.
    ?def rdfs:comment ?definition.
    ?thing ?rel "Thing 4".
}

我得到以下答案:

Query Results (5 answers): 
thing  | def        | definition                         | rel                
==============================================================================
thing4 | def_thing4 | "thing 4 it's exactly what i need" | _TOP_DATA_PROPERTY_
thing4 | def_thing4 | "thing 4 it's exactly what i need" | label              
thing1 | def_thing1 | "thing 1 it's awesome"             | _TOP_DATA_PROPERTY_
thing2 | def_thing2 | "thing 1 it's cool"                | _TOP_DATA_PROPERTY_
thing3 | def_thing3 | "thing 3 it's fine"                | _TOP_DATA_PROPERTY_

我没想到这种行为,我不知道它是否正确,我是那个提出错误查询的人。谁能给我解释一下?

4

3 回答 3

4

您绝对应该使用这两个查询获得相同的结果,像这样更改三重模式的顺序应该没有区别。这可能是查询引擎中的错误。

于 2012-08-06T19:41:06.970 回答
3

正如 Jan 所建议的那样,考虑到数据和查询,纯 SPARQL 引擎不应该给出不同的结果。

但是,您使用的是 Pellet(尽管您没有说是哪个版本),它具有带有嵌入式推理器的 SPARQL 引擎。这意味着如果 SPARQL 引擎可以通过推理器派生额外结果,则它可以合法地返回其他结果(请参阅规范中的扩展 SPARQL 基本图形模式匹配)。

一个版本的查询会导致推理器启动,而另一个版本却没有,这有点奇怪,您可能应该向 Pellet 开发人员询问这一点。

于 2012-08-06T21:54:45.967 回答
1

三重模式的顺序不应改变结果。

您的查询的不寻常之处?rel在于在属性位置中的使用。

_TOP_DATA_PROPERTY_Pellet 引擎可能会在内部抑制某些事情 - 但如果?thing ?rel "Thing 4".是最后一个模式,则数据不会再次通过 Pellet,只是来自数据库。

于 2012-08-07T08:59:31.253 回答