Как сделать запрос элементов 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, который позволяет выполнять быстрые запросы для таких случаев использования, как автозаполнение.

Другие вопросы по тегам