Извлечение наиболее специфических классов экземпляров

Можно ли получить определение ресурса (из DBpedia) с помощью запроса SPARQL? Я хочу иметь что-то вроде TBox и ABox, которые показаны в (Концептуальных) методах кластеризации для семантической паутины: проблемы и приложения (слайды 10–11). Например, для ресурса DBpedia Стивена Кинга я хотел бы иметь:

Stephen_King: человек ⊓ писатель ⊓ мужчина ⊓ … (наиболее конкретные занятия)

1 ответ

Решение

Вы можете использовать запрос, подобный следующему, чтобы запросить классы, экземпляром которых является Стивен Кинг, у которых нет подклассов, экземпляром которых является также Стивен Кинг. Похоже, это хорошо согласуется с идеей "самых специфических классов". Однако, поскольку (насколько я знаю) нет никакого связующего, связанного с конечной точкой DBpedia SPARQL, могут быть отношения подкласса, которые могут быть выведены, но которые явно не определены. присутствует в данных.

select distinct ?type where { 
   dbr:Stephen_King a ?type .
  filter not exists { 
    ?subtype ^a  dbr:Stephen_King ;
             rdfs:subClassOf ?type .
  }
}

Результаты SPARQL

На самом деле, так как каждый класс является rdfs:subClassOf само по себе, вы можете добавить еще одну строку в этот запрос, чтобы исключить случай, когда ?subtype а также ?type подобные:

select distinct ?type where { 
   dbr:Stephen_King a ?type .
  filter not exists { 
    ?subtype ^a  dbr:Stephen_King ;
             rdfs:subClassOf ?type .
    filter ( ?subtype != ?type )
  }
}

Результаты SPARQL

Если вам действительно нужна строка результата, подобная показанной на этих слайдах, вы можете использовать values привязать переменную к dbr:Stephen_Kingи затем использовать группировку и конкатенацию строк, чтобы получить что-то более красивое (вроде):

select
  (concat( ?person, " =\n", group_concat(?type; separator=" AND\n")) as ?sentence)
where { 
  values ?person {  dbr:Stephen_King }
  ?type ^a ?person .
  filter not exists { 
    ?subtype ^a ?person ;
             rdfs:subClassOf ?type .
    filter ( ?subtype != ?type )
  }
}
group by ?person

Результаты SPARQL

http://dbpedia.org/resource/Stephen_King =
http://dbpedia.org/class/yago/AuthorsOfBooksAboutWritingFiction AND
http://dbpedia.org/ontology/Writer AND
http://schema.org/Person AND
http://xmlns.com/foaf/0.1/Person AND
http://dbpedia.org/class/yago/AmericanSchoolteachers AND
http://dbpedia.org/class/yago/LivingPeople AND
http://dbpedia.org/class/yago/PeopleFromBangor,Maine AND
http://dbpedia.org/class/yago/PeopleFromPortland,Maine AND
http://dbpedia.org/class/yago/PeopleFromSarasota,Florida AND
http://dbpedia.org/class/yago/PeopleSelf-identifyingAsAlcoholics AND
http://umbel.org/umbel/rc/Artist AND
http://umbel.org/umbel/rc/Writer AND
http://dbpedia.org/class/yago/20th-centuryNovelists AND
http://dbpedia.org/class/yago/21st-centuryNovelists AND
http://dbpedia.org/class/yago/AmericanHorrorWriters AND
http://dbpedia.org/class/yago/AmericanNovelists AND
http://dbpedia.org/class/yago/AmericanShortStoryWriters AND
http://dbpedia.org/class/yago/CthulhuMythosWriters AND
http://dbpedia.org/class/yago/HorrorWriters AND
http://dbpedia.org/class/yago/WritersFromMaine AND
http://dbpedia.org/class/yago/PeopleFromDurham,Maine AND
http://dbpedia.org/class/yago/PeopleFromLisbon,Maine AND
http://dbpedia.org/class/yago/PostmodernWriters
Другие вопросы по тегам