3

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

范围图与活动图等效

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

作为确定这一点的测试,我<http://www.example.org/>在 Sesame Memory 存储中使用 RDF Schema 和直接类型推理存储(v2.7.14)将此图 URIed

@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>and <urn:data>,甚至分散在更多图上)并且查询使用两个图(或与模式相关的图的子集) FROM 子句而不是默认图?

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

或者,该建议是否足够松散以使其成为依赖于实现的问题?

谢谢你的灯,

最大限度。

编辑这个问题被重定向到SPARQL 1.1 蕴含机制并使用 FROM 子句进行查询(后续)

4

2 回答 2

4

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

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

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

(披露:芝麻开发商)

于 2015-02-09T23:09:31.523 回答
1

SPARQL 1.1 标准未指定默认图中的确切内容。特别是,请参阅13.1 RDF 数据集示例,其中提到:

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

  • 在默认图中包含有关命名图的出处信息的信息
  • 将命名图中的信息也包含在默认图中。

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

这都是关于default graph的。活动图是您将在 SPARQL 1.1 规范中看到的另一个术语:

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

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

于 2015-02-09T18:10:24.680 回答