我开始根据工作需要使用 Protégé,目前正在学习如何使用 SPARQL Query。
我心里有个问题如下:
假设我有一个这样的本体:
owl:think
Fruit
- Apples
- Bananas
-Owner
现在,我有一个子类“Apples”的个体,我们将其命名为“GreenApple”。也为子类“香蕉”并称为“SweetyBanana”。
我有很多个人属于“所有者”类,但让我们通过数据属性“hasName”将其中一个命名为“Jimmy”。
hasName 为“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 查询来检索个人“吉米”拥有并属于“苹果”子类的水果。这种查询的正确结构是什么。我尝试了很多,但没有完美运行。
我试过这个但没有希望:
?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 的子类。我不想看到香蕉人,也不想看到其他所有者拥有的水果。
记住:hasName 是一个数据属性。hasFriut 是一个对象属性。苹果是水果类的子类。香蕉是水果类的子类。所有者是一类。“吉米”是一个价值。GreenApple 是 Apples 子类中的一个个体。SweetyBanana 是 Bananas 子类中的一个个体。