SPARQL 查询检索 Protégé 中 class 的另一个人所拥有的 subclass 的个人?
SPARQL Query that retrieves individuals of a subclass that owned by another individual of a class in Protégé?
我开始根据工作需要使用 Protégé,目前正在学习如何使用 SPARQL Query。
我有一个问题如下:
假设我有一个 ontology 是这样的:
owl:think
Fruit
- Apples
- Bananas
-Owner
现在,我有一个子class“Apples”,我们将其命名为“GreenApple”。也为子class“Bananas”而称“SweetyBanana”。
我有很多个人class“所有者”,但让我们通过数据属性将其中一个“hasName”命名为“Jimmy”。
名字为“Jimmy”的人通过名为“hasFruit”的对象属性建立关系,并将他与“GreenApple”和“SweetyBanana”个人联系起来,如下所示:
{ Individual (which is named "Jimmy" by the hasName property) hasFruit GreenApple }.
{ Individual (which is named "Jimmy" by the hasName property) hasFruit SweetyBanana }.
现在我的问题是,如果我想执行 SPARQL 查询来检索个人“Jimmy”拥有并属于“Apple”子class 的水果。这种查询的正确结构是什么。我尝试了很多,但没有一个是完美的。
我试过了,但没有希望:
?ID :hasName "Jimmy"^^xsd:string .
?ID rdf:subClassOf :Fruit .
?ID rdf:subClassOf ?FruitList .
?FruitList :hasFruit ?JimmyFruit .
也尝试过这个,但也没有希望:
?ID :hasName "Jimmy"^^xsd:string .
?ID rdf:subClassOf :Apples .
?ID rdf:subClassOf ?AppleFruit .
?AppleFruit :hasFruit ?JimmyFruit .
如此简单,我只想让查询显示 Jimmy 拥有的水果,该水果位于 Apples 的子 class 下。我不想看到香蕉个体,也不想看到其他所有者拥有的水果。
记住:
hasName 是一个数据属性。
hasFriut 是一个对象 属性。
Apples 是 class 水果的子 class。
香蕉是 class 水果的子 class。
所有者是 class 。
“吉米”是一种价值。
GreenApple是Apples子class中的一个人。
SweetyBanana是Bananas子class.
中的一个人
你需要这样的东西:
SELECT *
WHERE {
?id :hasName "Jimmy" ;
:hasFruit ?fruit .
?fruit rdf:type/rdfs:subClassOf* :Apples }
现在,:Apples
是否是 :Fruit
的子类并不重要,因为无论如何您只对苹果感兴趣。
为了回应您的评论,我们可以使用 属性 路径:
?fruit rdf:type/rdfs:subClassOf* :Apples
表示 ?fruit
是 :Apples
的实例,或者是 :Apples
.
的(直接或间接)子类的实例
我开始根据工作需要使用 Protégé,目前正在学习如何使用 SPARQL Query。
我有一个问题如下:
假设我有一个 ontology 是这样的:
owl:think
Fruit
- Apples
- Bananas
-Owner
现在,我有一个子class“Apples”,我们将其命名为“GreenApple”。也为子class“Bananas”而称“SweetyBanana”。
我有很多个人class“所有者”,但让我们通过数据属性将其中一个“hasName”命名为“Jimmy”。
名字为“Jimmy”的人通过名为“hasFruit”的对象属性建立关系,并将他与“GreenApple”和“SweetyBanana”个人联系起来,如下所示:
{ Individual (which is named "Jimmy" by the hasName property) hasFruit GreenApple }.
{ Individual (which is named "Jimmy" by the hasName property) hasFruit SweetyBanana }.
现在我的问题是,如果我想执行 SPARQL 查询来检索个人“Jimmy”拥有并属于“Apple”子class 的水果。这种查询的正确结构是什么。我尝试了很多,但没有一个是完美的。
我试过了,但没有希望:
?ID :hasName "Jimmy"^^xsd:string .
?ID rdf:subClassOf :Fruit .
?ID rdf:subClassOf ?FruitList .
?FruitList :hasFruit ?JimmyFruit .
也尝试过这个,但也没有希望:
?ID :hasName "Jimmy"^^xsd:string .
?ID rdf:subClassOf :Apples .
?ID rdf:subClassOf ?AppleFruit .
?AppleFruit :hasFruit ?JimmyFruit .
如此简单,我只想让查询显示 Jimmy 拥有的水果,该水果位于 Apples 的子 class 下。我不想看到香蕉个体,也不想看到其他所有者拥有的水果。
记住: hasName 是一个数据属性。 hasFriut 是一个对象 属性。 Apples 是 class 水果的子 class。 香蕉是 class 水果的子 class。 所有者是 class 。 “吉米”是一种价值。 GreenApple是Apples子class中的一个人。 SweetyBanana是Bananas子class.
中的一个人你需要这样的东西:
SELECT *
WHERE {
?id :hasName "Jimmy" ;
:hasFruit ?fruit .
?fruit rdf:type/rdfs:subClassOf* :Apples }
现在,:Apples
是否是 :Fruit
的子类并不重要,因为无论如何您只对苹果感兴趣。
为了回应您的评论,我们可以使用 属性 路径:
?fruit rdf:type/rdfs:subClassOf* :Apples
表示 ?fruit
是 :Apples
的实例,或者是 :Apples
.