Значение URL-адреса фильтрации

#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, как <> Спасибо