2014-01-02 2 views
2

Когда у меня есть, например, граф человека, например. У Джона и Джона есть рабочий адрес. Адресные телефонные номера телефонов и т. Д.sparql полное дерево от предмета

Возможно ли получить все, что связано с john и подклассами john, не зная, что это такое?

Так что я могу получить, например, следующие

John < address < house_number 
    < mobile_number 
    < company < address 
       < function < office number < etc... 

And retrieve this via: 
    "John" rdfs:everything ?everything ... as deep as the tree goes. 

Или мне нужно знать, граф?

+0

Очень похожий вопрос на другом сайте (от нескольких лет назад): [SPARQL: пути собственности без указания предикаты] (http://answers.semanticweb.com/questions/15746/sparql-property-paths-without-specified-predicates). –

ответ

3

Ваша терминология немного устарела, поскольку такие вещи, как адреса, мобильные номера и т. Д., Не являются подклассами Джона. 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  | 
--------------------- 
Смежные вопросы