我目前正在记录/测试关于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部分的数据集中所有命名图之一查询
因此,您可以使用中的(可能多次)来控制默认图,从而控制初始活动图,然后在查询中使用图{…}来更改活动图。