SPARQL - 禁用字母顺序比较实体' ID

时间:2017-07-14 15:43:51

标签: compare sparql wikidata

我使用维基数据来获取元素列表。在某些时候,我需要用同时添加到维基数据的内容更新列表。 我有最新实体的ID,所以我想只选择那些数字较大的实体。这是我找到的唯一方法,以获得我想要的东西:还有另一种方式吗?

维基数据上有21个顶级模特。让我们说我想选择那些在Claudia Schiffer(Q76717)之后加入的人。 这就是我设法做的事情(你可以尝试here):

    SELECT ?item ?itemLabel
    WHERE {
      ?item wdt:P106 wd:Q865851 .
      FILTER (str(?item)>'http://www.wikidata.org/entity/Q76717')
      SERVICE wikibase:label {bd:serviceParam wikibase:language "[AUTO_LANGUAGE],fr"}
    }
    GROUP BY ?item ?itemLabel

问题在于,我没有得到20个结果,而是只有1.我理解为什么(按字母顺序比较),但我无法想出一个能够进行真正比较的解决方案。

是否有办法提取实体ID并比较其代数值而不是其字符?或者你是否看到了达到目标的另一种方式?

提前致谢!

1 个答案:

答案 0 :(得分:3)

嗯,最明显的方法是改变你的FILTER条件:

SELECT ?item ?itemLabel
WHERE {
  VALUES (?id) {(76717)}
  ?item wdt:P106 wd:Q865851 .
  FILTER (xsd:integer(STRAFTER(STR(?item), "http://www.wikidata.org/entity/Q")) > ?id)
  SERVICE wikibase:label {bd:serviceParam wikibase:language "[AUTO_LANGUAGE],fr"}
}
# GROUP BY ?item ?itemLabel

Try it!

但是,我不确定这是最好的方法。我会做一些研究。

不幸的是,维基达:

类似地,维基达: