2

我使用 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。 在此处输入图像描述 请让我知道你的想法。

4

1 回答 1

5

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

于 2013-04-29T08:46:28.780 回答