1

如何查询远程端点(如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 之外的额外脚本?

4

1 回答 1

6

取自SPARQL 1.1 Update W3C 规范

语法是

( 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子句,通常您必须在此处使用关键字在 Wikidata 端点 ( https://query.wikidata.org/bigdata/namespace/wdq/sparqlSERVICE )上应用联合查询:

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 个三元组。

于 2017-03-06T07:03:20.417 回答