由于where子句

时间:2019-06-04 12:29:40

标签: sparql dbpedia

我有一个不返回记录的查询,因为where子句中没有缩略图

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>

    SELECT *
    WHERE { 
        dbpedia:Nancy_Mairs dbpedia-owl:abstract ?abstract; dbpedia-owl:thumbnail ?thumbnail .
    }
    LIMIT 1

如果我错过第二个条件,它将返回一条记录

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>

    SELECT *
    WHERE { 
        dbpedia:Nancy_Mairs dbpedia-owl:abstract ?abstract
    }
    LIMIT 1

不是说第一个没有返回任何内容,而是运行第二个,可以一次完成所有操作,如果没有返回空白缩略图吗?

1 个答案:

答案 0 :(得分:3)

要在Stanislav's comment上进行扩展,可以使用OPTIONAL关键字来描述...好...是可选的图形模式。如果对此模式有解决方案,它将与其余解决方案一起返回;否则,将仅返回模式的“强制”部分。

SELECT * WHERE { 
    dbpedia:Nancy_Mairs dbpedia-owl:abstract ?abstract
    OPTIONAL {
        dbpedia:Nancy_Mairs dbpedia-owl:thumbnail ?thumbnail
    }
}

如果您想排除dbpedia:Nancy_Mairs的重复次数,可以使用BIND关键字:

SELECT * WHERE {
    BIND(dbpedia:Nancy_Mairs AS ?topic)

    ?topic dbpedia-owl:abstract ?abstract
    OPTIONAL {
        ?topic dbpedia-owl:thumbnail ?thumbnail
    }
}