#sparql #wikidata
#sparql #викиданные
Вопрос:
То, что я пытаюсь сделать, это выбрать определенный объект для определенного условия. Если условием является url, то как я могу выполнить правильный запрос, чтобы получить единственный результат, соответствующий v1 = «https://www.getmagicbullet.com /» . Прокомментированные предложения — это то, что я пробовал разными способами, но только для того, чтобы потерпеть неудачу. Как я могу настроить запрос, чтобы получить правильный ответ? Спасибо за вашу помощь.
SELECT DISTINCT ?iLabel ?p ?v1
WHERE {
?i wdt:P31 wd:Q212920.
?i wdt:P856 ?v1.
# FILTER (?v1Label = "https://www.getmagicbullet.com/")
# { ?v1 rdfs:label "https://www.getmagicbullet.com/"@en }
# UNION { ?v1 skos:altLabel "https://www.getmagicbullet.com/"@en }
SERVICE wikibase:label { bd:serviceParam wikibase:language "ko,en,[AUTO_LANGUAGE]". }
}
LIMIT 1000
Комментарии:
1. привязки
?v1
являются URI, поэтому вы должны использовать URI в выражении фильтра:FILTER (?v1 = <https://www.getmagicbullet.com/>)
— это то, о чем вы спрашиваете? И согласно вашемуUNION
шаблону, у этих внешних URI нет меток, содержащихся в наборе данных Wikidata. Так что это не работает.2. если вы хотите выполнить сравнение строк в URI, как вы уже должны знать из предыдущих вопросов, используйте строковые функции в фильтре, например,
FILTER(str(?v1) = "https://www.getmagicbullet.com/")
— очевидно, это может быть намного медленнее, чемFILTER (?v1 = <https://www.getmagicbullet.com/>)
что фактически эквивалентно использованию URI непосредственно в тройном шаблоне, т. Е.?i wdt:P856 <https://www.getmagicbullet.com/>
где тройное хранилище может использоватьpos
индекс3. О, я понимаю. Отлично. Я не знал, что URL всегда использует blacket, как <> Спасибо