繁体   English   中英

Sparql - 排序依次返回空值

[英]Sparql - Order by to return empty values last

我使用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返回亚伯拉罕,然后是John和没有name属性的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),其次是Abraham和John。 在此输入图像描述 请让我知道你的想法。

我手头没有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数据的结束。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM