Не удается получить фильмы с высокими идентификаторами из LinkedMDB с помощью SPARQL

StackOverflow https://stackoverflow.com//questions/22021040

Вопрос

Я запускаю следующий запрос по адресу Конечная точка LinkedMDB SPARQL и это работает.С его помощью я получаю всю необходимую информацию о режиссере фильма с идентификатором 72, который является Титаник, итак, я получаю информацию о Джеймсе Кэмероне.

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid ?id .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
  FILTER (?id = 72).
}

С фильмами, которые имеют более высокий идентификатор, например, example Звездный путь с идентификатором 44396, если я заменю 72 на 44396, запрос не вернет результатов. Запись однако у него явно есть каталог, идентификатор и имя.Почему измененный запрос не работает?

Это было полезно?

Решение

SPARQL позволяет вам писать 72 как сокращение от буквального "72"^^xsd:integer.Как вы уже видели, вы можете получить пленку с идентификатором "72"^^xsd:integer без каких-либо проблем.Однако другой фильм, который вы ищете, имеет идентификатор "44396"^^xsd:int (обратите внимание , что тип данных равен xsd:int, нет xsd:integer).Я не знаю почему тип данных отличается, но этого достаточно, чтобы помочь нам получить то, что мы хотим:

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid "44396"^^xsd:int .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
}

Результаты SPARQL (один)

director          nombre_director  id_director
----------------------------------------------
db:director/9025  "J.J. Abrams"    9025

Обратите внимание , что вместо filtering, я просто ввожу фактическое желаемое значение в шаблон запроса.Я нахожу, что это немного проще, и если механизм запросов не оптимизирован, он может быть более производительным (поскольку он не создает большой набор результатов, а затем не фильтрует их).Фактически, это могло бы объяснить, почему семантически эквивалентный запрос, использующий переменную и фильтр, не возвращает результатов, если существует ограничение на количество результатов, которые может вернуть запрос.(Но это чистая спекуляция.) В любом случае, следующий запрос не работает, но я думаю, что он должен:

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid ?id .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
  filter ( ?id = "44396"^^xsd:int ) 
}

Результаты SPARQL (отсутствуют)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top