2014-09-26 4 views
0

Я использую следующий SPARQL запрос из PHP, где $title одинакова для всех пяти запросов троек:Объединение одинаковых предметов в DBpedia SPARQL запроса

SELECT * WHERE { 
    { <http://dbpedia.org/resource/$title> rdfs:label ?pageTitle . } 
    UNION 
    { <http://dbpedia.org/resource/$title> owl:sameAs ?sameAs . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:abstract ?abstract . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:thumbnail ?thumbnail . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:wikiPageID ?wikiID . } 
} 

Есть ли способ, чтобы упростить это так, что $title только указано один раз в запросе? Я думаю, что какой-то анонимный узел может быть задействован? возможно? :-)

+0

Есть ли причина, вы хотите союза здесь, в частности? Похоже, что ваши результаты будут представлять собой таблицу с пятью столбцами (по одной для каждой переменной), но в каждой строке только один из этих столбцов будет иметь значение. Вы предпочли бы решение с двумя столбцами: одно, указывающее свойство, и одно, указывающее значение? –

+0

@JoshuaTaylor Вы правы, в том, что с выходом HTML из http://dbpedia.org/sparql (с помощью веб-браузера) вы получаете то, что описываете, но выход JSON дает мне что-то менее бесполезное: o) Есть ли способ получить результат, как вы описываете, не делая эти вещи объединения (например, ответ от jimkont - который я сейчас хочу попробовать) –

ответ

3
SELECT * WHERE { 
<http://dbpedia.org/resource/$title> ?p ?o . 
FILTER (?p IN (rdfs:label, owl:sameAs, dbpedia-owl:abstract, dbpedia-owl:thumbnail, dbpedia-owl:wikiPageID)) 

Вместо FILTER (?x IN()) вы можете также использовать VALUES (?x) {<...>, <...> } как уже упоминалось в другом ответе

+0

Я принял этот ответ, поскольку он избавляется от этих уродливых 'UNION' –

+0

Спасибо! Я сделал небольшое редактирование, чтобы сделать его еще проще – jimkont

1

Попробуйте переписать запрос следующим образом:

SELECT * WHERE { 
    { ?id rdfs:label ?pageTitle . } 
    UNION 
    { ?id owl:sameAs ?sameAs . } 
    UNION 
    { ?id dbpedia-owl:abstract ?abstract . } 
    UNION 
    { ?id dbpedia-owl:thumbnail ?thumbnail . } 
    UNION 
    { ?id dbpedia-owl:wikiPageID ?wikiID . } 
} values (?id) { (<http://dbpedia.org/resource/$title>) } 

Это очень хороший SPARQL 1.1 особенность.

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