Запрос DBPedia-France (fr.dpbedia.org/sparql), дающий результат, отличный от вызова другого - PullRequest
0 голосов
/ 05 февраля 2019

Я звоню на http://fr.dbpedia.org/sparql следующий запрос SPARQL:

prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct ?lcs  where {

   {
     ?lcs ^(rdf:type/rdfs:subClassOf*)   <http://fr.dbpedia.org/resource/Honoré_Daumier> , 
                                         <http://fr.dbpedia.org/resource/Auguste_Rodin>;
        a owl:Class .
        filter not exists {
           ?llcs ^(rdf:type/rdfs:subClassOf*)  <http://fr.dbpedia.org/resource/Honoré_Daumier> , 
                                               <http://fr.dbpedia.org/resource/Auguste_Rodin>;
           a owl:Class ;
           rdfs:subClassOf+ ?lcs .
        }
   }
 }

При некоторых вызовах у меня http://dbpedia.org/ontology/Person в результате, при других вызовах я получаюhttp://dbpedia.org/ontology/Person и http://dbpedia.org/ontology/Agent, а также с другими предыдущими ответами плюс http://www.w3.org/2002/07/owl#Thing

без каких-либо сведений о том, что ответ не завершен.Как я могу использовать результат, если он немного рандомизирован

1 Ответ

0 голосов
/ 06 февраля 2019

Основная причина того, что ваш запрос не работает должным образом, состоит в том, что данные: i) разбиты на отдельные графики и ii) не все графики были добавлены к графику по умолчанию.

Чтобы сделать его коротким,данные экземпляра содержатся внутри графика http://fr.dbpedia.org, тогда как тройки схемы будут доступны только через график http://dbpedia.org.Иногда, если граф не задан, объединение некоторых графов используется в качестве графа по умолчанию, который будет набором данных во время запроса.К сожалению, это не относится к конечной точке французской DBpedia, будет использоваться только граф данных экземпляра.

Вы можете проверить это с помощью

DESCRIBE <http://dbpedia.org/ontology/Person>

, которая пуста, если не используется ни один графявно или граф http://fr.dbpedia.org, но непустой для графа http://dbpedia.org.

Для определения графа по умолчанию используется ключевое слово FROM.Поэтому для вашего запроса это должно быть

prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct ?lcs  
from <http://fr.dbpedia.org> 
from <http://dbpedia.org> 
where {
     ?lcs ^(rdf:type/rdfs:subClassOf*)   <http://fr.dbpedia.org/resource/Honoré_Daumier> , 
                                         <http://fr.dbpedia.org/resource/Auguste_Rodin>;
        a owl:Class .
        filter not exists {
           ?llcs ^(rdf:type/rdfs:subClassOf*)  <http://fr.dbpedia.org/resource/Honoré_Daumier> , 
                                               <http://fr.dbpedia.org/resource/Auguste_Rodin>;
           a owl:Class ;
           rdfs:subClassOf+ ?lcs .
        }

 }

Обратите внимание, хотя это, похоже, возвращает правильный результат, вы также должны рассмотреть комментарий от @TallTed относительно возможных различий между главами языков (например, английский против французской Википедии какsource), выпуски дампов (2016 или 2018 или даже DBpedia Live), а также версии Virtuoso, используемые в качестве бэкэнда.

...