查询异构的三重商店

时间:2013-10-31 14:13:32

标签: nosql rdf sparql triplestore linked-data

我目前认为是真的:

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

问题:

是否可以运行跨多个异构RDF三重存储的查询?

示例:

  • 我们在不同的Triplestore软件上运行了3个RDF triplestores。
  • Triplestore A包含引用三元组B和C中其他节点的节点。
  • 我们运行这样一个应该从所有3个商店传递节点的查询。

1 个答案:

答案 0 :(得分: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 } 
}

但是,您必须在某处运行此查询。如果你在本地运行它,那么所有三个三重存储都可以指定为service s,但是如果你直接针对其中一个运行查询,那么你可以将其他两个作为service s 。当然,这将取决于拥有一些支持联合查询的SPARQL引擎。我希望大多数人都这么做,但是我只有Jena的经验(它确实支持联合查询)。