我想在查询中添加一个条件,以便如果结果为空,则用另一个查询的结果填充该条件。
例如:如果owl:Class没有“ skos:definition”,我想将其替换为“ rdfs:comment”
这可能吗?
谢谢!
答案 0 :(得分:2)
COALESCE
是有帮助的,尤其是当您从skos:prefLabel
,skos: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
)
答案 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) .
}
这是更好的方法吗?