如何使用sparql访问rdf中子类的父属性?

时间:2015-02-12 16:18:51

标签: inheritance rdf sparql semantic-web rdfs

我试图访问RDF中父类继承的属性。我使用rdfs属性 subClassOf 定义了我的子类的实例。

使用乌龟语法:

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 .

如果我想访问所有 ex:myClass1 及其孩子的 ex:property 属性。我是否可以承认 ex:myClass2 ex:myClass1 并编写此SPARQL查询

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

获取我定义的两个值?或者 rdfs:subClassOf 没有将子类定义为父类的更具体的版本?

1 个答案:

答案 0 :(得分:0)

为了补充约书亚试图解释的内容,你正在混合模式和数据概念。

我认为您应该定义的是(在简化的RDFS语法中):

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添加到商店