Если вы не уверены в точном написании или использовании заглавных букв, вы можете использовать функцию фильтра, чтобы выполнить сопоставление.Например, чтобы сопоставить независимо от заглавных букв, вы можете использовать функцию LCASE()
(или UCASE()
) следующим образом:
SELECT ?item WHERE {
?item rdfs:label ?label
FILTER(LCASE(STR(?label)) = "word2vec")
}
Это преобразует любую найденную метку в нижний регистр, а сравнение сравнивается сстрочная строка.
Существует целый ряд различных функций, которые вы можете использовать для манипуляции со строками. Хороший обзор содержится в рекомендации SPARQL 1.1 W3C .
ПРИМЕЧАНИЕ этот вид запроса значительно дороже (с точки зрения времени выполнения), потому что движок должен будет выполнить последовательное сканирование всех возможных совпадений.Как и @AKSW, упомянутый в комментариях, время ожидания запроса как есть, скорее всего, истечет, когда вы выполните его в общедоступной конечной точке Wikidata.Возможно, это очень поможет, если вы сделаете запрос более конкретным, добавив дополнительные тройные шаблоны.
Обновление Если вы посмотрите на информацию, доступную для wd:Q22673982
(вы можете просмотреть ее на https://www.wikidata.org/wiki/Q22673982), вы увидите, что, среди прочего, этоподкласс "встраивания слова" (wd:Q18395344
).Так, что вы могли бы сделать, например, вместо того, чтобы просто запрашивать каждый ?item
, который имеет rdfs:label
, это запрашивать все элементы, которые являются подклассом wd:Q18395344
и имеют этот ярлык, например:
SELECT DISTINCT ?item WHERE {
?item wdt:P279 wd:Q18395344;
rdfs:label ?label
FILTER(LCASE(STR(?label)) = "word2vec")
}
К сожалению, Wikidata использует довольно загадочные идентификаторы для своих свойств и отношений.Достаточно сказать, что wdt:P279
соответствует отношению «подкласс».Я добавил DISTINCT
, потому что в противном случае вы получите один и тот же ответ 10 или более раз.