, :
@prefix : <http://stackoverflow.com/q/21531063/1281433/> .
:a a :resource;
:p "a in english"@en, "a in russian"@ru .
:b a :resource ;
:p "b in english"@en .
:
--------------------------------
| resource | label |
================================
| :b | "b in english"@en |
| :a | "a in russian"@ru |
--------------------------------
.
, ,
, SPARQL 1.1, values. , values . , , ). , , .
prefix : <http://stackoverflow.com/q/21531063/1281433/>
select ?resource ?label where {
{
select ?resource (min(?rank) as ?langRank) where {
values (?lang ?rank) { ("ru" 1) ("en" 2) }
?resource :p ?label .
filter(langMatches(lang(?label),?lang))
}
group by ?resource
}
values (?lang ?langRank) { ("ru" 1) ("en" 2) }
?resource a :resource ; :p ?label .
filter(langMatches(lang(?label),?lang))
}
,
, coalesce ( , ) . , - , , .
prefix : <http://stackoverflow.com/q/21531063/1281433/>
select ?resource ?label where {
?resource a :resource .
optional {
?resource :p ?rulabel .
filter( langMatches(lang(?rulabel),"ru") )
}
optional {
?resource :p ?enlabel .
filter( langMatches(lang(?enlabel),"en") )
}
bind( coalesce( ?rulabel, ?enlabel ) as ?label )
}