【问题标题】:SPARQL, get the next value in a result set based on a total order functionSPARQL,根据全序函数获取结果集中的下一个值
【发布时间】:2017-05-21 20:43:10
【问题描述】:

考虑一个 SPARQL 查询 q1 与单个头变量 ?y,即具有结果集 res(q1)q1(?y) :- some pattern

问题:

给定res(q1) 中的具体值vi,我想根据特定的总顺序函数(例如< 用于整数值)确定res(q1) 中的下一个值vi+1

示例:

考虑对DBpedia SPARQL endpoint 提出以下查询。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

select ?y where {

 ?x <http://dbpedia.org/ontology/wikiPageID> ?y

}
order by ?y
LIMIT 10

这将导致

现在给定值vi = 10,然后是vi+1 = 12,从结果中可以看出。

在我看来,这样做的唯一方法是使用外部编程 sn-p;获取有序 SPARQL 查询结果列表(使用ORDER BY),转到vi,然后检索应该是vi+1 的下一个值。

问题:

是否有任何解决方法可以在 SPARQL 中表达这一点而无需编码(如果 vi 是查询中的固定值,则没问题)?

【问题讨论】:

  • 如果结果集是9, 10, 10, 11怎么办?
  • 实际上,在我的情况下,情况并非如此。我选择不同的值。

标签: sparql rdf


【解决方案1】:

如果可以假设您先验地知道vi,则可以使用过滤器和限制来仅检索vi+1

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

select ?y where {

 ?x <http://dbpedia.org/ontology/wikiPageID> ?y
 filter(?y > 10)

}
order by ?y
LIMIT 1

上面的查询产生一个单一的值,12

【讨论】:

  • 这太容易了,我没有想到。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多