SPARQL을 사용하여 관측 순위를 만들고 싶습니다. I가 있다고 가정SPARQL에서 값의 순위를 매기는 방법?
@prefix : <http://example.org#> .
:A :value 60 .
:B :value 23 .
:C :value 89 .
:D :value 34 .
순위되어야한다 : C = 1 (가장 높은) : A = 2 : D = 3 : B 최대 = 4. 지금까지 전 사용하여 해결할 수 있었다 다음 쿼리는 : ?x
에 대한 URI를 같은 길이있는 경우
prefix : <http://example.org#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?x ?v ?ranking {
?x :value ?v .
{ SELECT (GROUP_CONCAT(?x;separator="") as ?ordered) {
{ SELECT ?x {
?x :value ?v .
} ORDER BY DESC(?v)
}
}
}
BIND (str(?x) as ?xName)
BIND (strbefore(?ordered,?xName) as ?before)
BIND ((strlen(?before)/strlen(?xName)) + 1 as ?ranking)
} ORDER BY ?ranking
하지만 쿼리는 작동합니다. 더 나은 해결책은 PHP에서 strpos
또는 Java에서 isIndexOf
과 유사한 기능을 갖는 것입니다. 그러나 알고있는 한, SPARQL 1.1에서는 사용할 수 없습니다. 더 간단한 솔루션이 있습니까?
당신이 만들려는 것이 무엇인지에 정교한 수 있습니까? 또는 작성한 쿼리가 생성 한 것을 보여 주시겠습니까? 내부 선택 쿼리는 이미 결과를 주문하므로 이미 주문할 수 있습니다. 바깥 쪽 질의는 문자열 조작을 많이하고, 그들이 무엇을 생산하는지 보여주는 예제가 많은 도움이 될 것입니다. –
오, 당신이 원하는 것을 보았을 것입니다. 예를 들어, 결과를 원하겠습니다. 'C 89 1; A 60 2; D 34 3; B 23 4 '. –