在SPARQL中,如何选择谓词A提供的谓词B不';不存在?

在SPARQL中,如何选择谓词A提供的谓词B不';不存在?,sparql,rdf,Sparql,Rdf,我有这样的简单数据: | s | p | o | |-------|----|--------| | repo1 | v1 | high | | repo2 | v2 | medium | | repo2 | v1 | high | 问题是如何选择?级别,以便如果v2存在,则选择v2否则v1。谓词v1保证存在 我试过了 select ?s, ?level where { ?s v2 ?o_v2 . ?s v1 ?o_v1 .

我有这样的简单数据:

| s     | p  | o      |
|-------|----|--------|
| repo1 | v1 | high   |
| repo2 | v2 | medium |
| repo2 | v1 | high   |
问题是如何选择
?级别
,以便如果
v2
存在,则选择
v2
否则
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和v2

选择s级{s v1?o_v1。可选的{s v2?o_v2}绑定(合并(?o_v2,o_v1)作为级别)的受试者提供了主题。
它起作用了。感谢您向我介绍“可选和合并”功能。我是SPARQL新手,你能为初学者推荐一个好的指南吗?官方文件很好,但不适合初学者。