2016-07-14 10 views
1

次のSPARQLクエリは、DISTINCT句を使用していても、Virtuosoで重複しています。クエリはDBpedia public endpointでテストできます。クエリの問題はどれですか?SPARQL DISTINCTがVirtuosoで重複を返す

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX dbpedia:<http://dbpedia.org/resource/> 
PREFIX dbpedia-owl:<http://dbpedia.org/ontology/> 
PREFIX dbpprop: <http://dbpedia.org/property/> 
PREFIX vrank:<http://purl.org/voc/vrank#> 
SELECT DISTINCT ?person1 ?person1_id ?person2 ?person2_id ?person2_rank 
FROM <http://dbpedia.org> 
FROM <http://people.aifb.kit.edu/ath/#DBpedia_PageRank> 
WHERE { 
    ?person1 rdf:type dbpedia-owl:Person. 
    ?person2 rdf:type dbpedia-owl:Person. 
    ?person1 ?link ?person2. 
    ?person1 dbpedia-owl:wikiPageID ?person1_id. 
    ?person2 dbpedia-owl:wikiPageID ?person2_id. 
    ?person2 vrank:hasRank/vrank:rankValue ?person2_rank. 
    FILTER (?person1_id != ?person2_id). 
    FILTER (?person1_id = 308) 
} ORDER BY DESC(?person2_rank) ASC(?person2_id) 

SPARQL results

結果は、私は結果に重複があることが表示されていることを確認することができます重複して表示される行、例えば:

http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Democritus 8211 27.281 
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Democritus 8211 27.281 
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Heraclitus 13792 26.6914 
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Heraclitus 13792 26.6914 
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Parmenides 23575 19.6082 
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Parmenides 23575 19.6082 

答えて

4

が含まれます。私は重複の問題が何であるか絶対に確信していませんが、浮動小数点数の不正確な等価性と何か関係があるのだろうかと思います。代わりにの、もし直接浮動小数点数をINGのを選択し、あなたが(最後にランクとして(STR(...を)注意してください)?)で自分の字句形式を選択します。

SELECT DISTINCT 
    ?person1 ?person1_id 
    ?person2 ?person2_id 
    (str(?person2_rank) as ?rank) 

私は重複のどれも得ていない。これは、Virtuosoの人々にバグとして報告する価値があるかもしれません。浮動小数点値をランクにしたい場合は、xsd:floatを関数として使用して浮動小数点値に戻すことができます。を次のように選択します。 、私はまだ別の結果を期待して取得します。

SELECT DISTINCT 
    ?person1 ?person1_id 
    ?person2 ?person2_id 
    (xsd:float(str(?person2_rank)) as ?rank) 

SPARQL results

+0

クエリのフォーマットが壊れているように、少なくとも私はそれらの部分でのみ見ることができます見えます。 – AKSW

+0

@AKSWそれは壊れていません。私は 'select distinct ... {'部分のみを投稿しました。これは、すべて私が変更したためです。そういうわけで、私は、「あなたはその字句形式を選択しました。 –

+0

ああ、私はそれを得ました。 – AKSW

関連する問題