SPARQL1.1蕴涵机制和带有FROM子句的查询



我目前正在记录/测试关于SPARQL 1.1隐含机制的信息,该建议反复指出

范围图相当于活动图

但它没有指定活动图指的是什么:它是查询中使用的数据集吗?商店里所有图形的并集?

作为确定这一点的测试,我在Sesame Memory存储中使用RDF Schema和直接类型推理存储(v2.7.14)获得了这张图URIed <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子句中使用这两个图或与模式相关的图的子集而不是默认图,会发生什么(根据建议)?

这意味着推理应该在整个存储中是全局的,还是取决于查询数据集?

或者,该建议是否足够宽松,从而使其成为一个依赖于实现的问题?

谢谢你的灯光,

最大。

EDIT此问题被重定向到SPARQL 1.1隐含机制,并使用FROM子句进行查询(后续)

您的第二个查询只返回book1,因为在Sesame的RDFS推理器中,隐含语句插入到默认图中,而不是插入到隐含前提所在的命名图中。因此,所需的结果根本不存在于您正在查询的图中。

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

Sesame目前并不明确支持W3C隐含机制规范。但是,如果您认为可以进行简单的改进以使其更加兼容,请务必记录功能请求。

(披露:Sesame开发者)

默认图中的具体内容并不是由SPARQL 1.1标准指定的。特别是,参见13.1 RDF数据集示例,其中提到:

RDF数据集的定义不限制命名图和默认图。信息可以以不同的方式重复图形;可以公开图之间的关系。两个有用的安排是:

  • 在默认图形中包含信息,该信息包括有关命名图形的出处信息
  • 以将命名图中的信息也包括在默认图中

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

这一切都与默认图有关。活动图是您将在SPARQL1.1规范中看到的另一个术语:

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

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

相关内容

  • 没有找到相关文章

最新更新