2012-03-05 11 views
2

J'ai la requête SPARQL suivante:instruction IF dans 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}. 
} 

Ce résultats de la requête dans:

Montréal = 20 Toronto = 28

Ce que je veux est: Je veux éditer la requête et au lieu de donner 20 et 28, je veux comparer les résultats tels que Si le nombre d'hôpitaux de Montréal est supérieur au nombre d'hôpitaux de Toronto alors:

Montréal = 1 Toronto = 2

Si le nombre d'hôpitaux de Toronto est plus grand que le nombre d'hôpitaux à Montréal alors:

Montréal = 2
Toronto = 1

J'ai essayé cette requête mais il ne fonctionne pas:

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). 
} 

Merci

Répondre

5

Il n'y a pas d'expression LET dans SPARQL, mais vous ne avez pas besoin pour la requête ci-dessus:

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

Le nouveau SPARQL 1.1 introduit BIND qui est équivalent à louer dans ce cas. De plus, pour être portable, vos expressions de projet ont besoin de parenthèses autour d'elles: (if (count (? MontrealC)> count (? TorontoC), 1,2) que? Montreal) –