2016-12-29 19 views
1

Я пытаюсь получить некоторые данные о фильмах из DBpedia. Это мой запрос:Разный порядок результатов в DBpedia через запрос SNORQL и SERVICE

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX : <http://dbpedia.org/resource/> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
PREFIX dbpedia: <http://dbpedia.org/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX onto: <http://dbpedia.org/ontology/> 
PREFIX dcterms: <http://purl.org/dc/terms/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 

SELECT * 
{{SELECT * 

WHERE { 
SERVICE<http://dbpedia.org/sparql>{ 
?movie dcterms:subject <http://dbpedia.org/resource/Category:American_films> ; 
     a onto:Film ; 
     rdfs:label ?title ; 
     dbpedia2:gross ?revenue . 

?movie onto:starring ?actorUri . 
?actorUri rdfs:label ?actor . 

OPTIONAL { 
    ?movie onto:imdbId ?imdbId . 
} 
BIND(xsd:integer(?revenue) as ?intRevenue) . 
FILTER ((datatype(?revenue) = 'http://dbpedia.org/datatype/usDollar') && (LANGMATCHES(LANG(?title), 'en')) && (LANGMATCHES(LANG(?actor), 'en'))) . 
} 
} 
}} 
ORDER BY DESC (?intRevenue) 
LIMIT 40000 
OFFSET 0 

Выполнение этого запроса на http://dbpedia.org/snorql/ (без ключевого слова SERVICE) возвращает правильный результат. Тем не менее, делать это из третьего триплестора не дает того же порядка (например: Хоббит и Властелин Колец отсутствуют).

Что мне нужно изменить в запросе, чтобы получить идентичные результаты?

+1

DBpedia имеет ограничение по умолчанию 10000 и ваш Одер не распространяется на запрос SERVICE, таким образом, вы можете на самом деле получить разные результаты. – AKSW

+0

Есть ли способ преодолеть это ограничение? – kurious

+0

Я так не думаю. Любой удаленный запрос, и это то, что в основном выполняется при использовании службы SERVICE рядом с удаленной конечной точкой, будет иметь максимальный набор результатов, возвращаемый удаленной конечной точкой. Таким образом, задача этого механизма объединения будет выполняться, но я не знаю о какой-либо реализации. Какой API или тройной магазин вы используете? – AKSW

ответ

1

Лучший способ преодолеть это ограничение состоит в том, чтобы иметь your own DBpedia mirror, на котором вы можете установить свои собственные лимиты (в том числе нет) и которые затем можете использовать в качестве основного или удаленного хранилища данных и/или механизма запросов.

(ObDisclaimer: OpenLink Software обеспечивает public DBpedia SPARQL endpoint, производит Virtuoso и DBpedia Mirror AMI, и использует меня.)