0

我目前认为是真的:

  • 三重存储都是关于“链接数据”的;与任何给定应用程序分离的数据,并且可以通过新数据形成的传入链接进行扩充。这个概念推动了 Web。
  • URI 允许链接数据托管在不同的异构环境中。
  • 要使两台机器互操作,它们都必须按照商定的标准工作。
  • W3C 已经定义了这样的标准。具体来说:RDF(用于格式化)和 SPARQL(用于查询)。

问题:

是否可以运行跨越多个异构 RDF 三元组的查询?

例子:

  • 我们有 3 个 RDF Triplestore 在不同的 Triplestore 软件上运行。
  • Triplestore A 包含引用 Triplestore B 和 C 中其他节点的节点。
  • 我们运行这样一个查询,它应该传递来自所有 3 个商店的节点。
4

1 回答 1

3

是的,这很有可能,这就是SPARQL 1.1 Federated Query W3C 推荐的内容。在 SPARQL 查询中,您使用SERVICE关键字来指定要查询的不同 SPARQL 端点。链接推荐的一个例子是

PREFIX foaf:   <http://xmlns.com/foaf/0.1/>
SELECT ?name
FROM <http://example.org/myfoaf.rdf>
WHERE
{
  <http://example.org/myfoaf/I> foaf:knows ?person .
  SERVICE <http://people.example.org/sparql> { 
    ?person foaf:name ?name . } 
}

那里的service关键字说?person foaf:name ?name应该从 检索 三元组<http://people.example.org/sparql>。在您的情况下,您最终可能会得到以下结果:

PREFIX ex: <http://example.org/>
SELECT ?person ?age ?weight ?resume WHERE {
  values ?person { ex:Bill ex:John }
  SERVICE <http://jobs.example.org/sparql>   { ?person ex:resume ?resume } 
  SERVICE <http://age.example.org/sparql>    { ?person ex:age    ?age    } 
  SERVICE <http://weight.example.org/sparql> { ?person ex:weight ?weight } 
}

不过,您必须在某处运行此查询。如果您在本地运行它,那么所有三个三元组都可以指定为services,但如果您直接针对其中一个运行查询,那么您可以只将另外两个指定为services。当然,这一切都取决于拥有一些支持联合查询的 SPARQL 引擎。我希望现在大多数人都这样做,但我只有 Jena 的经验(它确实支持联合查询)。

于 2013-10-31T14:28:18.857 回答