Как добавить условия в запрос - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел бы добавить условие к запросу, чтобы, если результат был пустым, он заполнял его результатом другого запроса.

Например: если у owl: Class нет «skos: definition», я хотел бы заменить его на «rdfs: comment»

Возможно ли это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

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)

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

0 голосов
/ 13 ноября 2018

Я нашел что-то с оператором 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) .
}

Это лучший способ?

...