#sparql #rdf
#sparql #rdf
Вопрос:
У меня есть простые данные, подобные этому:
| s | p | o |
|-------|----|--------|
| repo1 | v1 | high |
| repo2 | v2 | medium |
| repo2 | v1 | high |
Вопрос в том, как выбрать ?level
так, чтобы, если v2
существует, выберите v2
else v1
. Предикат v1
гарантированно существует.
Я пытался
select ?s, ?level where {
?s v2 ?o_v2 .
?s v1 ?o_v1 .
bind(if(bound(?o_v2), ?o_v2, ?o_v1) as ?level)
}
Однако это дает мне темы только для тех, у кого есть оба v1 amp; v2
.
Комментарии:
1.
select ?s ?level { ?s v1 ?o_v1 . optional { ?s v2 ?o_v2 } bind ( coalesce(?o_v2, ?o_v1) as ?level ) }
2. Это сработало. Спасибо, что познакомили меня с функциями «OPTIONAL amp; COALESCE». Я новичок в SPARQL, можете ли вы предложить хорошее руководство для начинающих? Официальный документ хорош, но не подходит для начинающих.