2012-03-05 4 views
2

У меня есть следующий SPARQL запрос:IF заявление в SPARQL

PREFIX yago: <http://dbpedia.org/class/yago/> 
SELECT distinct count (?Montreal) as ?Montreal count(?Toronto) as ?Toronto 
WHERE 
{ 
{?Montreal rdf:type yago:HospitalsInMontreal} UNION {?Toronto rdf:type yago:HospitalsInToronto}. 
} 

Этот запрос приводит к следующему:

Монреаль = 20 Toronto = 28

Что я хочу: Я хочу отредактируйте запрос и вместо того, чтобы давать 20 и 28, я хочу сравнить результаты, такие как Если количество больниц в Монреале больше, чем количество больниц в Торонто, то:

Монреаль = 1 Торонто = 2

Если число больниц в Торонто больше, чем число больниц в Монреале, то:

Монреаль = 2
Торонто = 1

Я попытался этот запрос, но он не работает:

PREFIX yago: <http://dbpedia.org/class/yago/> 
SELECT distinct count (?Montreal) as ?Montreal count(?Toronto) as ?Toronto 
WHERE 
{ 
{?Montreal rdf:type yago:HospitalsInMontreal} UNION {?Toronto rdf:type yago:HospitalsInToronto}. 
LET(?Montreal := IF(?Montreal > ?Toronto, -1, 1). 
} 

Благодарности

ответ

5

Там нет выражения LET в SPARQL, но вам не нужно один для вышеупомянутого запроса:

PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT distinct if(count(?MontrealC)>count(?TorontoC),1,2) as ?Montreal if(count(?TorontoC)>count(?MontrealC),1,2) as ?Toronto 
WHERE 
{ 
{?MontrealC rdf:type yago:HospitalsInMontreal} UNION {?TorontoC rdf:type yago:HospitalsInToronto}. 
} 
+5

Новый SPARQL 1.1 вводит BIND, которое эквивалентно LET в этом случае. Кроме того, для переносимости ваши проектные выражения нуждаются в круглых скобках вокруг них: (if (count (? MontrealC)> count (? TorontoC), 1,2) как? Montreal) –