Sparql — упорядочить, чтобы вернуть пустые значения последними

Я использую AllegroGraph и Sparql 1.1.

Мне нужно выполнить сортировку по возрастанию в столбце и сделать запрос 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, чтобы вернуть Авраама, за которым следуют Джон и человек3, у которого нет атрибута имени.

Я использую запрос:

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 (ноль), за которым следуют Авраам и Джон. введите здесь описание изображенияПожалуйста, дайте мне знать, что вы думаете.


person John Jai    schedule 29.04.2013    source источник


Ответы (1)


У меня нет под рукой AllegroGraph, но, насколько мне известно, он поддерживает несколько условий заказа:

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))

Первое условие сортируется на основе того, связано ли ?name или нет, и если это условие не находит разницы, используется второе условие. Обратите внимание на использование str() для преобразования rdf:XMLLiteral в тип данных, для которого поддерживается сравнение.

(Вы также можете добавить . в конце каждой строки в ваших данных ntriples.)

person laalto    schedule 29.04.2013