SPARQL中的IF语句

Nas*_*ser 2 sparql

我有以下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}.
}
Run Code Online (Sandbox Code Playgroud)

此查询结果为:

蒙特利尔= 20多伦多= 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 ).
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Wil*_*nly 5

SPARQL中没有LET表达式,但上述查询不需要一个:

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}.
}
Run Code Online (Sandbox Code Playgroud)

  • 新的SPARQL 1.1引入了BIND,在这种情况下相当于LET.另外,为了便携,您的项目表达式需要围绕它们的括号:(if(count(?MontrealC)> count(?TorontoC),1,2)as?Montreal) (5认同)