Как получить валюту стоимости фильма в Wikidata SPARQL?

Я знаю, как получить стоимость указанных фильмов:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?item (GROUP_CONCAT( ?_cost; SEPARATOR = "~~~") AS ?budget) 
WHERE {
VALUES ?selectedMovies { wd:Q24515019 wd:Q20762698 }
?item wdt:P31/wdt:P279* wd:Q11424 filter (?item = ?selectedMovies).
OPTIONAL {
?item wdt:P2130 ?_cost.
}
}
GROUP BY ?item

Но когда я пытаюсь получить валюту за стоимость, я ничего не получаю:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?item (GROUP_CONCAT( ?_cost; SEPARATOR = "~~~") AS ?budget) 
(GROUP_CONCAT( ?_currency; SEPARATOR = "~~~") AS ?_currency)
WHERE {
VALUES ?selectedMovies { wd:Q24515019 wd:Q20762698 }
?item wdt:P31/wdt:P279* wd:Q11424 filter (?item = ?selectedMovies).
OPTIONAL {
?item wdt:P2130 ?_cost.
?_cost wdt:P2237 ?_currency.
}
}
GROUP BY ?item

Проверил, на странице этих фильмов валюта стоимости присутствует.

Итак, как я могу получить валюту?


person Andriy Stolyar    schedule 15.12.2017    source источник


Ответы (1)


Ну, это немного сложнее, так как вы запрашиваете свойства единиц:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?item (GROUP_CONCAT( DISTINCT ?cost_with_unit; SEPARATOR = "~~~") AS ?budget) 
WHERE {
VALUES ?selectedMovies { wd:Q24515019 wd:Q20762698 }
?item wdt:P31/wdt:P279* wd:Q11424 filter (?item = ?selectedMovies).
OPTIONAL {
?item wdt:P2130 ?_cost.
# get the node to the cost statement
?item          p:P2130                   ?stmnode.
# then its value node
?stmnode       psv:P2130                   ?valuenode.
# then its unit, i.e. currency as entity
?valuenode     wikibase:quantityUnit       ?unit.
# then finally, its label 
?unit rdfs:label ?unitLabel.
FILTER(LANGMATCHES(LANG(?unitLabel), 'en'))
# put everything together
BIND(CONCAT(str(?_cost), " ", str(?unitLabel)) as ?cost_with_unit)
}
}
GROUP BY ?item

Обновлять

Чтобы получить код ISO 4217 устройства, замените

# then finally, its label 
?unit rdfs:label ?unitLabel.
FILTER(LANGMATCHES(LANG(?unitLabel), 'en'))

с

# then finally, the ISO 4217 code of the unit, e.g. USD 
?unit wdt:P498 ?unitLabel .
person UninformedUser    schedule 15.12.2017
comment
эй, большое спасибо, действительно полезно. Сложно ли изменить этот запрос, чтобы получить код ISO 4217 (например, доллар США)? Я пытался, но все равно не повезло - person Andriy Stolyar; 21.12.2017
comment
Конечно, все, что содержится в Викиданных, можно восстановить. Смотрите мой обновленный ответ. - person UninformedUser; 22.12.2017
comment
Вы самый лучший человек! Кажется, я пробовал это вчера, но это не сработало. Теперь все так, как я хочу! - person Andriy Stolyar; 22.12.2017