dbpedia sparql запрос на место смерти кого-то

#sparql #dbpedia

#sparql #dbpedia

Вопрос:

Я пытаюсь получить место смерти для уникального языка. Мой запрос такой, но у меня есть ошибки…

 SELECT ?place ?placeLabel
     WHERE {
         <https://dbpedia.org/page/Alfonso_XII> rdfs:label ?person
         ?place dbo:deathPlace ?person; 
          rdfs:label ?placeLabel.

        FILTER (LANG(?placeLabel) = "en")    
    }
 

Комментарии:

1. Какие ошибки? Не могли бы вы опубликовать это в этом вопросе?

Ответ №1:

У вас есть несколько проблем с этим запросом.

  1. Вы используете URL ресурса, а не URI
  2. Место смерти связывает человека с местом, а не наоборот.
  3. Правильный префикс URI для места смерти dbp:
  4. Места действительно должны быть ресурсами, но в DBpedia это сильное предположение
  5. Поскольку вы не запрашиваете уровень person, похоже, он вам не нужен в запросе
 SELECT ?place ?placeLabel
     WHERE {
          dbr:Alfonso_XII dbp:deathPlace ?place .
OPTIONAL  {?place rdfs:label ?placeLabel .
                    FILTER (LANG(?placeLabel) = "en") }
    }
 

Комментарии:

1. Извините, я привел это в качестве примера, потому что мне действительно нужно было найти кого-то раньше, но я не хотел ставить все для того, чтобы сделать это легко. В моем случае я хотел поместить переменную python с именем, например, my_query, и закончить с uri после «‘ . Например, » «‘ %(uri). В этом случае < dbpedia.org/page/Alfonso_XII > на самом деле <%s>.

2. @dev2win это не имеет значения, вы можете просто использовать запрос из Ivo с интерполяцией строк в Python. Тем не менее, URL по-прежнему неверен, это так http://dbpedia.org/resource/Alfonso_XII . Это всегда http как протокол (нет https ) и всегда /resource/ для DBpedia (нет /page/ )

3. @Ivo: в общем, следует предпочесть dbo: префикс в пользу dbp , потому что это пространство имен свойств на основе сопоставления. К сожалению, в текущем примере таких данных нет, но это также приводит к тому, что dbp: связанные факты не являются строго типизированными, здесь место — это просто простая строка, которая является нечетной, поскольку это затрудняет получение дополнительных данных, например, о месте смерти человека. Я бы просто получил оба и использовал coalesce с предпочтением для dbo: свойства на основе