如何在概念搜索中过滤Wikidata标签?

时间:2019-05-04 09:42:23

标签: sparql semantic-web wikidata wikidata-api

我正在使用以下代码来获取给定概念(例如wikidata labels)的network analysis

SELECT ?item {
    VALUES ?searchTerm { "network analysis" }
    SERVICE wikibase:mwapi {
        bd:serviceParam wikibase:api "EntitySearch".
        bd:serviceParam wikibase:endpoint "www.wikidata.org".
        bd:serviceParam wikibase:limit 3 .
        bd:serviceParam mwapi:search ?searchTerm.
        bd:serviceParam mwapi:language "en".
        ?item wikibase:apiOutputItem mwapi:item.
        ?num wikibase:apiOrdinal true.
    }
    ?item (wdt:P279|wdt:P31) ?type
}
ORDER BY ?searchTerm ?num

这将返回以下wikidata标签。

 wd:Q618079  --> related to electronics
 wd:Q4417999  --> related to graph theory (computer science)
 wd:Q60640547 --> related to scholary article

我想获得仅与计算机科学相关的wikidata labels(即上例中的wd:Q4417999)。

在DBpedia中,我运行以下查询来确定单词是否在computer science中。

sparql.setQuery(" ASK { dbc:Network_analysis skos:broader{1,7} dbc:Computer_science } ")

是否可以在Wikidata中做同样的事情(即检查computer science是否是给定概念的祖先,并且仅返回该Wikidata标签)。

如果有比执行祖先搜索更好的解决方案,请建议我。

很高兴在需要时提供更多详细信息。

1 个答案:

答案 0 :(得分:0)

下面提到的sparql查询解决了我的问题。

SELECT DISTINCT ?item {
VALUES ?searchTerm { "network analysis"}
SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:api "EntitySearch".
    bd:serviceParam wikibase:endpoint "www.wikidata.org".
    bd:serviceParam wikibase:limit 3 .
    bd:serviceParam mwapi:search ?searchTerm.
    bd:serviceParam mwapi:language "en".
    ?item wikibase:apiOutputItem mwapi:item.
    ?num wikibase:apiOrdinal true.
}
?item (wdt:P279|wdt:P31) ?type
filter exists {?type wdt:P279*/wdt:P361* wd:Q21198}
}
ORDER BY ?searchTerm ?num