如何查询远程端点(如DBPedia或Wikidata的端点)并在本地图形中插入生成的三元组?到目前为止,我知道有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之外需要额外的脚本?
答案 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个三元组。