Пропуск переменных в Sparql меняет результаты - PullRequest
0 голосов
/ 28 декабря 2018

Я запрашиваю некоторые данные из конечной точки Sparql публичных отчетов о голосованиях Совета Европейского Союза.

В настоящее время я хочу получить номера сессии и акта длязаписанные голоса, которые я могу получить с помощью этого запроса:

PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?act ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 

}
LIMIT 10

Обратите внимание, что LIMIT 10 существует только для ускорения выполнения во время тестирования запроса.Вот результаты: enter image description here

Однако я должен включить ?act в список выбора, в противном случае результаты неверны:

enter image description here

Почему это так?

1 Ответ

0 голосов
/ 28 декабря 2018

Результат не является «неправильным», оба они являются правильными ответами: они дают вам подмножество из 10 решений всех результатов, соответствующих запросу.

Причина, по которой вы получаете разные решения в результате, заключается в том, что конечная точка SPARQL по-разному оптимизирует выполнение запроса, когда вы пропускаете ?act из условия SELECT.Вероятно, он переключается на другой внутренний индекс и возвращает решения в другом порядке.Если бы вы пропустили ограничение, вы бы увидели, что оба результата одинаковы, просто в другом порядке.

Вы можете исправить это, установив конкретный порядок в запросе с предложением ORDER BY.Например:

PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?act ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 

}
ORDER BY ?act
LIMIT 10

и

PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 
} 
ORDER BY ?act
LIMIT 10

вернут один и тот же результат (конечно, без столбца).

...