【问题标题】:Sparql - Order by to return empty values lastSparql - 最后返回空值的顺序
【发布时间】:2013-04-29 07:10:49
【问题描述】:

我使用 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,然后是没有 name 属性的 John 和 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。 请让我知道你的想法。

【问题讨论】:

    标签: sparql allegrograph


    【解决方案1】:

    我手头没有 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 数据的每一行末尾添加 .。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2021-05-30
      相关资源
      最近更新 更多