У меня запущен экземпляр Викибазы. Я могу успешно выполнять федеративные запросы с Викиданными. У меня есть определенные запросы, которые сравнивают такие ярлыки:
PREFIX xwdt: <http://www.wikidata.org/prop/direct/>
PREFIX xwd: <http://www.wikidata.org/entity/>
PREFIX xpq: <http://www.wikidata.org/prop/qualifier/>
PREFIX xps: <http://www.wikidata.org/prop/statement/>
PREFIX xp: <http://www.wikidata.org/prop/>
select ?item ?wditem ?itemLabel ?wid ?wditemlabel
where {
?item wdt:P17 wd:Q39.
?item wdt:P31 wd:Q5.
optional {
?item wdt:P14 ?wid .
}
?item rdfs:label ?itemLabel.
SERVICE <https://query.wikidata.org/sparql> {
?wditem xwdt:P27 xwd:Q258.
?wditem xwdt:P106 xwd:Q937857.
?wditem rdfs:label ?wditemlabel.
filter(LANGMATCHES(LANG(?wditemlabel), "en")).
}
filter(contains(?wditemlabel, ?itemLabel))
}
group by ?item ?itemLabel ?wid ?wditem ?wditemlabel
Вышеприведенное работает и сопоставляет элементы по их меткам:
1) Первоначально у меня было filter(contains(?wditemlabel, ?itemLabel))
внутри предложения SERVICE, и оно не дало никаких результатов. Но, похоже, это сработало, если я использовал статическую строку для одной из переменных (например, filter(contains("test string", ?itemLabel))
). Почему это сработает при сравнении переменной и строки, но не двух переменных?
2) Я ожидал, что запрос будет работать без "группировать по" в конце. Но похоже, что без него происходит какое-то перекрестное соединение/декартово произведение, и каждый совпадающий элемент повторяется общее количество раз (n * n). Какая часть запроса вызывает это?