Ваша терминология немного устарела, поскольку такие вещи, как адреса, мобильные номера и т. Д., Не являются подклассами Джона. RDF - это трижды (обозначенные направленные ребра), а адрес Джона - это тройка, которая имеет форму John hasAddress AddressOfJohn
. Говоря в терминах, основанных на графике, похоже, вы спрашиваете, можно ли получить все то, что доступно для определенного направления, начинающегося с Джона. Это проще работать с конкретными данными, так что давайте предположим, что у вас есть эти данные:
@prefix : <http://stackoverflow.com/q/20878795/1281433/> .
:john :hasAddress :addressOfJohn ;
:hasMobileNumber :mobileNumber ;
:hasCompany :company .
:addressOfJohn :hasHouseNumber :houseNumber .
:company :hasAddress :addressOfCompany ;
:hasFunction :function .
SPARQL 1,1 добавлена поддержка Property Paths, которая вроде как языка регулярных выражений для последовательностей свойств, в том числе типичных операторов подобный *
(любое количество повторений) и +
(один или несколько). К сожалению, вы не можете использовать переменные в путях собственности, так что вы не можете просто сделать
:john ?p+ ?object
Однако, как было отмечено в аналогичном вопросе о answers.semanticweb.com SPARQL: property paths without specified predicates, вы можете построить дизъюнкции, который будет соответствовать все имущество. Например, поскольку :
является определенным префиксом и, следовательно, является IRI, шаблон :|!:
будет соответствовать любому объекту (так как все либо :
, либо его нет). Это означает, что (:|!:)+
- это подлинные шаблоны. Таким образом, мы можем написать запрос, как следующий и получить соответствующие результаты:
prefix : <http://stackoverflow.com/q/20878795/1281433/>
select ?object where {
:john (:|!:)+ ?object
}
---------------------
| object |
=====================
| :company |
| :function |
| :addressOfCompany |
| :mobileNumber |
| :addressOfJohn |
| :houseNumber |
---------------------
Очень похожий вопрос на другом сайте (от нескольких лет назад): [SPARQL: пути собственности без указания предикаты] (http://answers.semanticweb.com/questions/15746/sparql-property-paths-without-specified-predicates). –