Как получить список свойств для определенного класса? Рассмотрим класс dbpedia-owl:Person
. Все экземпляры класса Person
имеют некоторые свойства с префиксом dbpprop:
. Как я могу получить все свойства dbpprop:
, которые мы можем найти для всего экземпляра класса Person
?
Получить все свойства для класса DBpedia
Ответ 1
Тот, который работает:
select distinct ?property where {
?property <http://www.w3.org/2000/01/rdf-schema#domain>
<http://dbpedia.org/ontology/Person> . }
В этом запросе вы запрашиваете все свойства с dbpedia:Person
как rdfs:domain
. Этот запрос требует определения схемы для работы, а некоторые наборы данных на самом деле не полностью соответствуют схемам. Для этих наборов данных вы можете попробовать другой запрос
select distinct ?property where {
?instance a <http://dbpedia.org/ontology/Person> .
?instance ?property ?obj . }
В этом запросе рассматривается каждый экземпляр человека, связывающий каждое свойство, которое выходит из него. Это намного сложнее первого, и в публичном экземпляре dbpedia вы получите тайм-аут. Таким образом, вам лучше с первым, если вы хотите использовать публичную конечную точку.
Ответ 2
Чтобы получить все транзитивные свойства, вы можете задать этот запрос
select distinct ?property where{
{
?property rdfs:domain ?class .
dbpedia-owl:Person rdfs:subClassOf+ ?class.
} UNION {
?property rdfs:domain dbpedia-owl:Person.
}}
"+" в "rdfs: subClassOf" - это выражение пути свойства [1], которое также извлекает все верхние классы Person. Эти свойства также действительны для Person.
Также обратите внимание, что пространство имен dbprop не рекомендуется, поскольку данные являются необработанными и не нормализуются к типу данных.
[1] http://www.w3.org/TR/2010/WD-sparql11-property-paths-20100126/
Раскрытие информации: Я разработчик DBpedia