SPARQL 1.1蕴含制度和使用FROM子句查询

时间:2015-02-09 17:31:35

标签: sparql inference triplestore named-graphs

我目前正在记录/测试SPARQL 1.1蕴涵制度,该建议反复声明

  

范围图表是等效于活动图表的图表

但它没有指定引用的活动图是什么:它是查询中使用的数据集吗?商店中所有图表的联合?

作为确定这一点的测试,我在带有RDF Schema和直接类型推理存储(v2.7.14)的Sesame Memory存储中获得了此图{URI} <http://www.example.org/>

@prefix ex:<http://www.example.org/> .
ex:book1 rdf:type ex:Publication .
ex:book2 rdf:type ex:Article .
ex:Article rdfs:subClassOf ex:Publication .
ex:publishes rdfs:range ex:Publication .
ex:MITPress ex:publishes ex:book3 .

我一直在尝试以下查询(这意味着使用默认图形,因此推理引擎)

SELECT ?s WHERE { ?s a ex:Publication . }

正如所料,它返回了我所有三个实例

<http://www.example.org/book1>
<http://www.example.org/book2>
<http://www.example.org/book3>
查询时

SELECT ?s FROM ex: WHERE { ?s a ex:Publication . } 

仅返回

<http://www.example.org/book1>

在上述情况下,两种结果都不一样吗?

如果数据和架构在商店中的两个图表之间分开(例如<urn:rdfs-schema><urn:data>,或者甚至分散在更多图表中),那么应该发生什么(根据建议)并且查询使用两者FROM子句中的图形(或模式相关图形的子集)而不是默认图形?

在整个商店中推理是全局的还是依赖于查询数据集?

或许推荐可能足够宽松,使其成为依赖于实现的问题?

感谢您的灯光,

最大

编辑此问题正被重定向到SPARQL 1.1 entailment regimes and query with FROM clause (follow-up)

2 个答案:

答案 0 :(得分:4)

你的第二个查询只返回book1,因为在芝麻的RDFS推理器中,所包含的语句被插入到默认图中,而不是在命名图中,其中的前提是蕴涵来了。因此,所查询的图中根本不存在所包含的结果。

这种设计选择的原因至少部分是历史性的,因为Sesame RDFS推理引擎早于W3C蕴涵制度的概念。当时的基本原理是,在对几个命名图进行推理的情况下(例如,一个前提来自图A,另一个来自B),插入默认图(而不是A,B或两者)是最简单的,最少的混淆。

芝麻目前没有明确支持W3C蕴涵制度规范。但是,如果您认为可以通过各种方式log a feature request进行简单的改进,以使其更兼容。

(披露:芝麻开发商)

答案 1 :(得分:1)

SPARQL 1.1标准未指定默认图表中的确切内容。特别是,请参阅13.1 Examples of RDF Datasets,其中提及:

  

RDF数据集的定义不限制关系   命名和默认图。信息可以重复不同   图;图表之间的关系可以暴露出来。两个有用   安排是:

     
      
  • 在默认图表中包含有关指定图表的出处信息的信息
  •   
  • 也可以在默认图表中包含指定图表中的信息。
  •   

但是,通过使用FROM子句指定哪个图形应该是默认图形,或者使用多个FROM子句指定应合并哪些图形作为默认图形。

所有关于默认图的内容。 活动图是您在SPARQL 1.1规范中看到的另一个术语:

  

用于匹配基本图形模式的图形是   活动图。在前面的部分中,已显示所有查询   针对单个图执行,RDF数据集的默认图   作为活动图。 GRAPH关键字用于激活   绘制数据集中所有命名图形之一的部分图形   查询。

因此,您可以使用来自(可能多次)来控制默认图表,从而控制初始活动图表,然后在查询中使用图表{...} 更改活动图表。