2013-04-29 8 views
0

나는 AllegroGraph 및 Sparql 1.1을 사용합니다.Sparql - 공백 값을 반환하여 마지막으로

열에 오름차순 정렬을 수행하고 마지막으로 빈 값을 반환하도록 Sparql 쿼리를 작성해야합니다.

샘플 데이터 : 여기

<http://mydomain.com/person1> <http://mydomain.com/name> "John"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> 
<http://mydomain.com/person1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person> 

<http://mydomain.com/person2> <http://mydomain.com/name> "Abraham"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> 
<http://mydomain.com/person2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person> 

<http://mydomain.com/person3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person> 

나는 SPARQL은 이름 속성이없는 존과 person3 다음에 아브라함을 반환해야합니다.

쿼리 내가 사용

select ?name ?person { 
    ?person <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person>. 
    optional {?person <http://mydomain.com/name> ?name.} 
    } order by asc(?name) 

전류 출력은 아브라함과 존 다음 person3 (NULL)입니다. enter image description here 의견을 보내주십시오.

답변

2

나는 손에 인 AllegroGraph을 가지고 있지 않지만 AFAIK는 여러 주문 조건 지원 : 구속 여부와이 조건이 차이를 찾을 수없는 경우, 두 번째 여부 ?name에 따라

select ?name ?person { 
    ?person <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person> . 
    optional {?person <http://mydomain.com/name> ?name . } 
} order by (!bound(?name)) asc(str(?name)) 

첫 번째 조건의 종류 조건이 사용됩니다. rdf:XMLLiteral을 비교가 지원되는 데이터 유형으로 변환하려면 str()을 사용합니다.

는 (당신은 또한 당신의 ntriples 데이터의 각 행의 끝에 .을 추가 할 수 있습니다.)

+0

예,이 인 AllegroGraph에서 완벽하게 작동합니다! –