Мой виртуоз (virtuoso-t -h
):
Virtuoso Open Source Edition (Column Store) (multi threaded)
Version 7.2.4.2.3217-pthreads as of Jun 3 2016
Compiled for Linux (x86_64-pc-linux-gnu)
Функция Sparql exists
работает нормально, но не в сочетании с (bind if(...))
.
Запрос:
PREFIX dbo: <http://dbpedia.org/property/>
SELECT ?uri ?popEstimate ?existsPopEstim ?usedExPop
WHERE {
?uri a <http://dbpedia.org/ontology/Place>.
{?uri rdfs:label "France"@fr}
UNION {?uri rdfs:label "Brésil"@fr}
UNION {?uri rdfs:label "Amérique"@fr}
OPTIONAL {?uri dbo:populationEstimate ?popEstimate .}
BIND (exists{?uri dbo:populationEstimate ?popEstimate} AS ?existsPopEstim )
BIND (IF(?existsPopEstim , "ok", "no") AS ?usedExPop)
}
LIMIT 100
Результат:
uri | popEstimate | existsPopEstim | usedExPop
-------------------------------------+-------------+----------------+----------
http://dbpedia.org/resource/France | | 0 | ok
http://dbpedia.org/resource/Brazil | 201032714 | 1 | ok
http://dbpedia.org/resource/Americas | | 0 | ok
Изменить 1
Пример из ответа @AKSW, который также не работает на https://dbpedia.org/sparql:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT *
WHERE {
?uri a dbo:SoccerPlayer
OPTIONAL {?uri dbo:deathDate ?date}
BIND (exists{?uri dbo:deathDate ?date} AS ?existsProp )
BIND (IF(?existsProp , "ok", "no") AS ?usedExProp) }
LIMIT 1000
VALUES
и будьте осторожны с префиксами. Адаптированный запрос:PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX dbp: <http://dbpedia.org/property/> SELECT * WHERE { VALUES ?label {"France"@fr "Brésil"@fr "Amérique"@fr} ?uri a dbo:Place ; rdfs:label ?label OPTIONAL {?uri dbp:populationEstimate ?popEstimate} BIND (exists{?uri dbp:populationEstimate ?popEstimate} AS ?existsPopEstim ) BIND (IF(?existsPopEstim , "ok", "no") AS ?usedExPop) } LIMIT 100
- person UninformedUser   schedule 07.11.2017SELECT * WHERE { ?uri a dbo:SoccerPlayer OPTIONAL {?uri dbo:deathDate ?date} BIND (exists{?uri dbo:deathDate ?date} AS ?existsProp ) BIND (IF(?existsProp , "ok", "no") AS ?usedExProp) }
Он всегда возвращает "нет", за исключением первой строки:http://dbpedia.org/resource/Fritz_Walter 2002-06-17 1 ok
- person UninformedUser   schedule 07.11.2017bound
отлично работает в DBpedia: попробуйтеBIND (bound(?pop) AS ?exists1Pop) . BIND (IF(?exists1Pop , "ok", "no") AS ?usedEx1Pop)
и т. Д. - person Stanislav Kralin   schedule 09.11.2017