У меня есть запрос SPARQL, который возвращает наиболее конкретные общие классы двух ресурсов.
Когда я пытаюсь запустить его на https://dbpedia.org/sparql, иногда он ничего не возвращает, а другие раз он возвращает классы, которые я хочу.
Я заметил, что это связано с порядком операторов в запросе.
Это нежелательное поведение, поскольку при выполнении запроса я ожидаю, что он будет иметь одинаковые результаты независимо от порядка ввода URI ресурсов.
Кто-нибудь сталкивался с этой проблемой и нашел для нее решение?
Запросы
Следующий запрос работает правильно, возвращая http://dbpedia.org/ontology/Film и http://dbpedia.org/ontology/Wikidata:Q11424 в результате:
SELECT ?lcs
WHERE
{
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class1 .
?class1 rdfs:subClassOf* ?lcs .
<http://dbpedia.org/resource/Finding_Nemo> a ?class2 .
?class2 rdfs:subClassOf* ?lcs .
FILTER NOT EXISTS {
<http://dbpedia.org/resource/Finding_Nemo> a ?class3 .
?class3 rdfs:subClassOf* ?sublcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class4 .
?class4 rdfs:subClassOf* ?sublcs .
?sublcs rdfs:subClassOf ?lcs
}
FILTER strstarts(str(?lcs), "http://dbpedia.org/ontology")
}
Однако следующий запрос ничего не возвращает:
SELECT ?lcs
WHERE
{
<http://dbpedia.org/resource/Finding_Nemo> a ?class1 .
?class1 rdfs:subClassOf* ?lcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class2 .
?class2 rdfs:subClassOf* ?lcs .
FILTER NOT EXISTS {
<http://dbpedia.org/resource/Finding_Nemo> a ?class3 .
?class3 rdfs:subClassOf* ?sublcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class4 .
?class4 rdfs:subClassOf* ?sublcs .
?sublcs rdfs:subClassOf ?lcs
}
FILTER strstarts(str(?lcs), "http://dbpedia.org/ontology")
}
rdf:type
s в В поисках Немо (~55) больше, чем количествоrdf:type
s в Ice Age ( ~35). Кстати, SQL планы выполнения ваших запросов немного отличаются (отметьте Создать отчет о компиляции SPARQL (вместо выполнения запроса), чтобы увидеть их). - person Stanislav Kralin   schedule 10.01.2018FILTER strstarts(str(?sublcs), "http://dbpedia.org/ontology")
к частиNOT EXISTS
, так как вас интересует только онтология DBpedia. - person UninformedUser   schedule 10.01.2018?lcs a owl:Class .
в первой части запроса. Эти триплеты схем загружаются только для классов DBpedia. - person UninformedUser   schedule 10.01.2018?lcs a owl:Class .
действительно значительно ускоряет процесс, но при этом будет исключенdbo:Wikidata:Q11424
, который описывается только какowl:equivalentClass dbo:Film
, а не какa owl:Class
. - person TallTed   schedule 12.01.2018FILTER strstarts(str(?sublcs), "http://dbpedia.org/ontology")
к частиNOT EXISTS
действительно привело к появлению результатов. - person Diego Santana   schedule 13.01.2018