我使用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返回Abraham,然后是John和person3,它没有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 asc(?name )
当前输出是person3(null),其次是亚伯拉罕和约翰。 请让我知道你的想法。
答案 0 :(得分:3)
我手边没有AllegroGraph,但AFAIK支持多种订单条件:
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数据的每一行末尾添加.
。)