2015-02-12 2 views
0

Я пытаюсь получить доступ к свойству, унаследованному родительского класса в RDF. Я определяю экземпляр моего дочернего класса, используя свойство rdfs subClassOf.Как получить доступ к родительским свойствам дочернего класса в rdf с sparql?

С синтаксисом черепахи:

ex:myClass1 a owl:class; 
      rdfs:range xsd:integer. 

ex:myClass2 rdfs:subClassOf ex:myClass1. 

# defining instance of my class 

ex:instance1 ex:myClass1 1 . 

ex:instance2 ex:myClass2 2 . 

Если я хочу, чтобы получить доступ к свойству ех: недвижимость всех экс: MyClass1 и его ребенка. Могу ли я признать, что например: myClass2 является например: MyClass1 и написать этот запрос SPARQL

SELECT ?instance ?value WHERE{ 
    ?instance ex:myClass1 ?value . 
} 

получить два значения я определил? Или rdfs: subClassOf не определяет дочерний класс как более специфичную версию родительского класса?

+0

Когда вы пишете '? Instance ex: MyClass1? Value', вы используете' ex: myClass1' как свойство. Разве это не класс? Свойства и классы RDF не похожи (некоторые виды) объектно-ориентированного программирования; свойства не * принадлежат * классам, и они не * унаследованы * среди них. Я не уверен, что вы подразумеваете под «ex: instance1 ex: myClass1 1'. Если вы хотите, чтобы ex: instance1 был экземпляром ex: myClass1, вы бы сказали: ex: instance1 rdf: type ex: myClass1'. –

+0

@JoshuaTaylor Итак, если я действительно понимаю, я бы написал «ex: instance1 a ex: myClass1; rdfs: диапазон 1.' вместо 'ex: instance1 ex: myClass1 1 .'? И я не могу объявить 'ex: instance2 a ex: myClass2; rdfs: диапазон 2.', потому что свойство, использующее _rdfs: range_, не принадлежит _ex: myClass2_? –

+0

'rdfs: range' используется для объявления * диапазона * свойства. Например, у вас может быть: ex: Person a owl: Class. ex: hasMother aww: ObjectProperty. ex: hasMother rdfs: диапазон ex: Person'. Человек - это класс. hasMother - свойство, а диапазон hasMother - Person; то есть значения свойства hasMother должны быть экземплярами Person. –

ответ

0

В дополнение к тому, что Джошуа пытался объяснить, вы смешиваете концепции схемы и данных.

Я думаю, что вы должны определить, является (в упрощенном синтаксисе ИСС):

ex:property rdfs:domain ex:myClass1 . 
ex:property rdfs:range xsd:integer . 

ex:myClass2 rdfs:subClassOf ex:myClass1. 

#this may be optional depending on the entailment regime your SPARQL enpoint uses  
ex:myClass1 a owl:class . 

# defining instance of my class 

ex:instance1 ex:property 1 . 
ex:instance2 ex:property 2 . 

, то вы можете запросить

SELECT ?instance ?value WHERE{ 
    ?instance ex:property ?value . 
} 

в зависимости от Воплощения режима вашей SPARQL конечной точки, она выводится через свойство ex: ex: instance1 и ex: instance23 - это, по крайней мере, экземпляры ex: Class1 (если вы хотите сделать один из них ex: Class2, вам нужно будет добавить тройной номер ex:instance a ex:Class2 в ваш магазин)

+0

rdfs: диапазон - это мета-свойство для rdfs: экземпляры класса свойств (и его подклассы). При нормальном использовании это не должно быть свойством ex: Class1, иначе вы выберете, что ex: Class1 является свойством (в соответствии с подходящим режимом вступления в силу) – Max