2016-03-03 2 views
-1

У меня есть ссылки на несколько страниц DBpedia нравится:
http://dbpedia.org/resource/Harry_Potter
http://dbpedia.org/resource/Twilight_(series)
http://dbpedia.org/resource/Bible
http://dbpedia.org/resource/MangaКак запросить конкретный ресурс/страницу DBpedia для нескольких объектов?

Я хотел бы получить реферата и Thumbnail объекты для каждого из них.

я могу получить их по отдельности с помощью:

  • Для Аннотация:

    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX res: <http://dbpedia.org/resource/> 
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    SELECT ?label 
    WHERE { <http://dbpedia.org/resource/Harry_Potter> 
          dbo:abstract ?label . FILTER (lang(?label) = \'en\')} 
    
  • Для Thumbnail:

    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX res: <http://dbpedia.org/resource/> 
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    SELECT ?thumbnail 
    WHERE { <http://dbpedia.org/resource/Harry_Potter> 
          dbo:thumbnail ?thumbnail} 
    

Можно ли сочетать выше двух запросов в один. Я очень новичок в SPARQL и не смог получить it для работы.

Кроме того, есть ли лучший способ запроса, чем мой текущий подход?

+1

Вы можете комбинировать тройные узоры в один запрос, конечно. И что вы хотите сказать лучше? – AKSW

+0

Как их объединить? и лучше я имею в виду более оптимизированный способ –

+2

В простейшем случае просто поместите оба тройных шаблона в один и тот же запрос, каждый заканчивается точкой '.' Вот и все. В вашем примере не так много места для оптимизации, поскольку это слишком просто. Если вы хотите написать более компактные запросы SPARQL, вы можете взглянуть на синтаксис TURTLE, который в основном состоит в том, как вы можете писать тройные шаблоны в SPARQL. – AKSW

ответ

3

Конечно, можно объединить их, тривиальный способ сделать это было бы просто сцепить тела двух WHERE с и настроить SELECT соответственно:

SELECT ?label ?thumbnail 
WHERE { 
    <http://dbpedia.org/resource/Harry_Potter> dbo:abstract ?label . 
    FILTER (lang(?label) = 'en') 
    <http://dbpedia.org/resource/Harry_Potter> dbo:thumbnail ?thumbnail . 
} 

Если вы хотите быть более емким, вы можете объединить две тройки с той же теме, используя ;:

SELECT ?label ?thumbnail 
WHERE { 
    <http://dbpedia.org/resource/Harry_Potter> 
     dbo:abstract ?label ; 
     dbo:thumbnail ?thumbnail . 
    FILTER (lang(?label) = 'en') 
} 

И так как вы определили res: префикс, у ou может использовать это, чтобы сократить URI:

SELECT ?label ?thumbnail 
WHERE { 
    res:Harry_Potter 
     dbo:abstract ?label ; 
     dbo:thumbnail ?thumbnail . 
    FILTER (lang(?label) = 'en') 
} 
+0

Спасибо за быстрый ответ. Я пробовал последний фрагмент, но он не подходит для определенных URL-адресов, таких как book-http: //dbpedia.org/resource/Twilight_ (серия). –

+1

['res: Twilight _ \ (series \)' должен работать] (http://stackoverflow.com/a/31385432/41071) для этого, но, похоже, он не находится на конечной точке Virtuoso. Поэтому вам придется использовать полный URL для этого. – svick

+0

Спасибо за ответ, я попытался убежать от персонажей, но все равно это не сработало. Устанавливается URL. –