0

我想知道如何在 GraphDB 上执行联合搜索。例如,要在 GraphDB 中插入下面的代码,我应该怎么做?想法是将以下内容添加到我的本地 GraphDB。

#Locations of air accidents in wikidata - https://query.wikidata.org/
SELECT ?label ?coord ?place
WHERE
{
   ?subj wdt:P31 wd:Q744913  .
   ?subj wdt:P625 ?coord .
   ?subj rdfs:label ?label
   filter (lang(?label) = "en")
}
4

2 回答 2

1

发布@UninformedUser 的评论作为更好可读性的答案。

SPARQL 1.1 提供了这里SERVICE描述的特性。您可以使用它直接在 GraphDB 内部对 Wikidata 执行联合查询。

SELECT * WHERE {
    SERVICE <https://query.wikidata.org/sparql> {
        ?subj wdt:P31 wd:Q744913 ;
            wdt:P625 ?coord ;
            rdfs:label ?label
        FILTER (lang(?label) = "en")
    }
}
于 2020-09-01T15:09:51.660 回答
1

要将数据插入本地 GraphDB,请使用以下内容:

INSERT {
        ?subj wdt:P31 wd:Q744913 ;
            wdt:P625 ?coord ;
            rdfs:label ?label
} WHERE {
    SERVICE <https://query.wikidata.org/sparql> {
        ?subj wdt:P31 wd:Q744913 ;
            wdt:P625 ?coord ;
            rdfs:label ?label
        FILTER (lang(?label) = "en")
    }
}

但是,您可能希望解压缩坐标并使用一些更易于理解的本体,例如:

PREFIX wgs: <http://www.w3.org/2003/01/geo/wgs84_pos#> # see http://prefix.cc/wgs.sparql
INSERT {
        ?subj a :AirAccident;
            wgs:lat ?lat; wgs:long ?long; 
            rdfs:label ?label
} WHERE {
    SERVICE <https://query.wikidata.org/sparql> {
      ?subj wdt:P31 wd:Q744913 ;
            p:P625/psv:P625  [wikibase:geoLatitude ?lat; wikibase:geoLongitude ?long];
            rdfs:label ?label
        FILTER (lang(?label) = "en")
    }
}

对于这些p:P625, psv:P625, wikibase:geoLatitude东西,请参阅https://github.com/nichtich/wdq#wikidata-ontology(如果您安装它,请使用wdq help ontology颜色编码)

于 2020-09-18T07:49:57.620 回答