2017-07-14 20 views
1

我正在使用維基數據獲取元素列表。在某些時候,我需要更新列表,同時添加到維基數據中。 我有最新實體的ID,所以我只想選擇數字較高的實體。這是我爲了得到我想要的東西而找到的唯一途徑:還有其他方法嗎?SPARQL - 禁用字母順序比較實體的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並比較它的代數值而不是它的字符嗎?或者你看到另一種達到目標的方式嗎?

提前致謝!

回答

3

好了,最明顯的辦法是改變您的篩選條件:

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!

但是,我不知道這是最好的方式。我會做一些研究。


不幸的是,維基數據:

類似,維基數據:

+0

你可以使用聲明的來源信息,即它創建時 - 我猜'prov:generatedAtTime'可能存在 – AKSW

+0

@AKSW,我希望,但它似乎只使用[pr:P813](https ://www.wikidata.org/wiki/Property:P813)對於一些檢索到的語句,[this](https://phabricator.wikimedia.org/T136799)任務的優先級最低...請發佈答案,如果你知道在SPARQL中獲得維基數據的這種「增量更新」的好方法! –

+0

非常感謝,解決了它! :) 現在看來很簡單,我看到它,但我不知道這個VALUES部分。 –