2015-10-23 3 views
0

У меня есть простая проблема. Когда я запускаю этот запрос на DBpedia SPARQL конечной точки, я получаю список из 5 фильмов URIs:Для Loop в SPARQL

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

select ?film { 
?film rdf:type <http://schema.org/Movie>. 

} 
limit 5 

Я пытаюсь получить доступ ко всем предикатам и объектов каждого фильма в списке. Я пробовал это, но это не сработало.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

select ?film ?p ?o { 
?film rdf:type <http://schema.org/Movie>; 
     ?p ?o. 
} 
group by ?film 
limit 5 

Любое предложение?

ответ

4

SPARQL рекурсивный по своей природе, поэтому нет необходимости в петлях. Это означает, что в отношении вашего второго примера он будет соответствовать всем предикатам и объектам, где фильм является типом фильма. Я считаю, что вы можете думать, что ваш запрос не работает, когда он на самом деле, но ограничение на количество возвращаемых ответов маскирует это.

Я предлагаю для получения одного фильма -

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
select ?s ?o ?o where { 
?s ?p ?o . 
FILTER (?s = ?film) 
{ 
    select ?film { 
    ?film rdf:type <http://schema.org/Movie> . 
    } 
    group by ?film 
    limit 1 
} 
} 
+1

Несколько примечаний: (I) я уверен, что вы хотите "выбрать s р о??", А не «выбрать s о?? о». (ii) Вы можете устранить фильтр (который может быть неэффективен, если механизм запросов наивен), используя ту же переменную. I.e., сделайте подзапрос «{select? S {? S rdf: type ...». (iii) В подзапросе нет необходимости «группировать». (iv) Предел должен быть 5, а не 1 (но ОП должен установить это для любых потребностей ОП, так что это не так важно). –

 Смежные вопросы

  • Нет связанных вопросов^_^