2016-07-14 6 views
1

다음 SPARQL 쿼리는 Virtuoso에서 DISTINCT 절이 사용되는 경우에도 중복을 제공합니다. DBpedia public endpoint에서 검색어를 테스트 할 수 있습니다. 어떤 질문에 문제가 있습니까? SPARQL DISTINCT는 Virtuoso에서 중복을 제공합니다

SPARQL results

결과

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) 

중복 것으로 보인다 행, 예컨대 :

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

나는 결과에 중복이 있음을 표시 확인 할 수 있습니다. 난 절대적으로 중복 문제가 무엇인지 모르겠지만 뭔가 부동 소수점 숫자에 대한 정확하지 않은 평등과 할 수 있을지 궁금해. 대신 의 직접 부동 소수점 숫자를 보내고을 선택하면 (? 끝) 순위로 (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