SPARQL - 从远程端点插入数据

时间:2017-03-05 23:45:44

标签: sparql jena wikidata fuseki federated-queries

如何查询远程端点(如DBPediaWikidata的端点)并在本地图形中插入生成的三元组?到目前为止,我知道有INSERT,ADD,COPY等命令可用于此类任务。 我不明白的是如何在更新本地图表时解决远程终端问题。有人可以提供最低限度示例或主要步骤吗?
我在Windows上使用Apache Jena Fuseki v2,这是我目前的查询:

PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX wd: <http://www.wikidata.org/entity/>

INSERT 
  { GRAPH <???> { ?s ?p ?o } } #don't know what to insert here for "GRAPH"
WHERE
  { GRAPH  <???> #don't know what to insert here for "GRAPH" either
    {                           #a working example query for wikidata:
      ?s wdt:P31 wd:Q5.         #humans
      ?s wdt:P54 wd:Q43310.     #germans
      ?s wdt:P1344 wd:Q79859.   #part of world cup 2014
      ?s ?p ?o.
    }
  }

我查询的本地端点是http://localhost:3030/mylocaldb/update。我已经读过/update是编辑数据库所必需的(我不确定我是否理解正确)。
到目前为止我的方法是否正确?或者更像是在SPARQL之外需要额外的脚本?

1 个答案:

答案 0 :(得分:6)

取自SPARQL 1.1 Update W3C specs

语法是

( WITH  IRIref )?
INSERT  QuadPattern 
( USING ( NAMED )?  IRIref )*
WHERE GroupGraphPattern
  

如果INSERT模板指定了GRAPH块,那么这些将是受影响的图形。否则,操作将应用于默认图形,或者分别应用于WITH子句中指定的图形(如果已指定)。如果不存在USING(NAMED)子句,则WHERE子句中的模式将与Graph Store匹配,否则将与USING(NAMED)子句指定的数据集匹配。与WHERE子句的匹配创建了应用于模板的绑定,以确定要插入的三元组(遵循与DELETE / INSERT相同的规则)。

所以这基本上意味着,如果你想将它存储在默认图形中,你可以省略GRAPH部分的INSERT定义,否则它将是你想要存储它的图形数据

关于WHERE子句,通常您必须在此处使用SERVICE关键字在Wikidata端点(https://query.wikidata.org/bigdata/namespace/wdq/sparql)上应用联合查询:

PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX wd: <http://www.wikidata.org/entity/>

INSERT 
  { ?s ?p ?o }
WHERE
  { SERVICE  <https://query.wikidata.org/bigdata/namespace/wdq/sparql> 
    {                           #a working example query for wikidata:
      ?s wdt:P31 wd:Q5.         #humans
      ?s wdt:P54 wd:Q43310.     #germans
      ?s wdt:P1344 wd:Q79859.   #part of world cup 2014
      ?s ?p ?o.
    }
  }

我用Apache Jena测试了它,它在我的本地数据集中插入了4462个三元组。