If statement Sparql exists函数不使用bind if

If statement Sparql exists函数不使用bind if,if-statement,sparql,bind,exists,virtuoso,If Statement,Sparql,Bind,Exists,Virtuoso,我的演奏家是Virtuoso-t-h: 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

我的演奏家是Virtuoso-t-h:

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
编辑1

@AKSW answer中的示例也不适用于:

编辑2 关于dbpedia的示例:

我注意到,从2016年6月3日起,您通过7.2.4.2.3217-pthreads版本遇到了此问题。以下是最近的7.2.x和8.0版本通过实例链接所发生的情况:

-运行7.2.x 2017版 -运行2018版8.0,但没有 已加载完整的DBpedia数据集。 也就是说,我可以通过我们的LOD云缓存实例。因此,我建议:

升级到我上面示例中使用的2017版本之一 我们再次访问我们的群集版本,它运行在我用来重现您的问题的LOD云实例后面。
正如@Kingsley所说,这似乎是一个数据类型问题,请参阅:

根据您的示例,应该是一个bug。你应该在大师邮件列表上报告。这里没有人可以做任何其他事情。次要注释:使用SPARQL 1.1值并小心前缀。自适应查询:前缀dbo:前缀dbp:选择*WHERE{VALUES?标签{France@fr布雷sil@fr阿美rique@fr}?uri a dbo:Place;rdfs:label?label可选{?uri dbp:populationEstimate?popEstimate}存在绑定{?uri dbp:populationEstimate?popEstimate}AS?existsPopEstim BIND如果?existsPopEstim,ok,no AS?usedExPop}LIMIT 100也可以在公共DBpedia端点上复制:选择*其中{uri a dbo:SoccerPlayer可选{uri dbo:deathDate?date}BIND存在{uri dbo:deathDate?date}AS?existsProp BIND如果?existsProp,ok,no AS?usedExProp}它总是返回no,第一行除外:http://dbpedia.org/resource/Fritz_Walter 好的,谢谢你的回答。我添加了您的最后一个示例,它很好地表明问题是真实的,并且站在Virtuoso@Niii,在DBpedia上运行良好:尝试绑定绑定?pop AS?exists1Pop。BIND IF?exists1Pop、ok、no AS?usedEx1Pop等。当前添加的FROM子句揭示了问题,即注释FROM子句是一种临时解决方法。正如@AKSW用另一个示例演示的那样,即使在当前DBPedia端点上也会出现此问题。@Niii Kingsley已经说过可以重新创建此问题。解决方法是删除FROM子句,即不使用默认图。有或没有FROM子句,有或没有默认图,结果对我来说都是一样的。是的,这最终是源于实现SPARQL的基础SQL核心的问题。证明:当从DB.DBA.SYS_用户中选择TOP 1 1时,选择大小写,其中U_NAME=,0,然后选择“确定”,否则选择“否”;返回ok,而SELECT COALESCESELECT TOP 1 1从DB.DBA.SYS_USERS中选择,其中U_NAME=,0返回0。
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 
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