Как сделать запрос элементов Wikidata, используя его метки?
Как я могу запросить Wikidata, чтобы получить все элементы, которые имеют ярлыки, содержащие слово? Я попробовал это, но не сработало; ничего не получено.
SELECT ?item ?itemLabel WHERE {
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?item rdfs:label ?itemLabel.
}
FILTER(CONTAINS(LCASE(?itemLabel), "keyword"))
}
LIMIT 1000
2 ответа
После вашего вопроса и предоставленных полезных комментариев я получил этот запрос
SELECT ?item ?itemLabel
WHERE {
?item rdfs:label ?itemLabel.
FILTER(CONTAINS(LCASE(?itemLabel), "city"@en)).
} limit 10
За что я получил те результаты
item itemLabel
wd:Q515 city
wd:Q7930989 city
wd:Q15253706 city
wd:Q532039 The Eternal City
wd:Q1969820 The Eternal City
wd:Q3986838 The Eternal City
wd:Q7732543 The Eternal City
wd:Q7737016 The Golden City
wd:Q5119 capital city
wd:Q1555 Guatemala City
Да, вы можете искать по метке, например:
SELECT distinct ?item ?itemLabel ?itemDescription WHERE{
?item ?label "Something"@en.
?article schema:about ?item .
?article schema:inLanguage "en" .
?article schema:isPartOf <https://en.wikipedia.org/>.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
увидеть это на странице запросов.
На сегодняшний день (июнь 2020 г.) лучший способ сделать это - использовать расширения CirrusSearch. Следующее выполняет поиск подстроки во всех английских метках и возвращает 10000 результатов менее чем за 20 секунд. Я считаю, что он также выполняет поиск по псевдонимам и описаниям.
SELECT DISTINCT ?item ?label
WHERE
{
SERVICE wikibase:mwapi
{
bd:serviceParam wikibase:endpoint "www.wikidata.org";
wikibase:api "Generator";
mwapi:generator "search";
mwapi:gsrsearch "inlabel:city"@en;
mwapi:gsrlimit "max".
?item wikibase:apiOutputItem mwapi:title.
}
?item rdfs:label ?label. FILTER( LANG(?label)="en" )
}
Как указано выше, запросы с нечувствительностью к регистру и усечением в службе запросов SPARQL выполняются очень медленно. Я нашел этот проект на github: https://github.com/inventaire/entities-search-engine. Он устанавливает индекс ElasticSearch, который позволяет выполнять быстрые запросы для таких случаев использования, как автозаполнение.