如何向查询添加条件

时间:2018-11-13 08:16:25

标签: sparql

我想在查询中添加一个条件,以便如果结果为空,则用另一个查询的结果填充该条件。

例如:如果owl:Class没有“ skos:definition”,我想将其替换为“ rdfs:comment”

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

COALESCE是有帮助的,尤其是当您从skos:prefLabelskos:altLabel等中获得更多选择时。

OPTIONAL { ?property rdfs:label ?label }
OPTIONAL { ?property skos:definition ?definition .}
# ... other ways to choose ?comment ...
BIND ( COALESCE(?definition, ?label, "Unknown") AS ?comment )

COALESCE允许表达式(不同于BOUND

https://www.w3.org/TR/sparql11-query/#func-coalesce

答案 1 :(得分:1)

我在BIND (IF(BOUND(...) ..., ...) AS ...)语句中发现了一些东西。

SELECT DISTINCT ?type ?property ?comment ?propertyType ?domain
WHERE {
    ?property rens:hasAttributeType ?propertyType .
    ?property rens:hasForDomain ?domain .
    ?property rdf:type ?type .
    ?property rdfs:label ?label .
    OPTIONAL {?property skos:definition ?definition .}
    BIND(IF(BOUND(?definition), ?definition, ?label) AS ?comment) .
}

这是更好的方法吗?