通过SPARQL 1.1获取实例涉及OWL限制类

时间:2017-06-14 18:13:40

标签: sparql rdf owl

我正在创建两个类BookPerson,以及一个对象属性hasAuthor

  • Person包含子类ManWomen
  • Book包含子类Hard_bounded_bookSoft_bounded_book

我正在使用OWL限制创建Book的另一个子类Book_With_Atleast_One_Male_Author,如下所示:

:Book_With_Atleast_One_Male_Author rdfs:subClassOf [
  rdf:type owl:Class ;
  owl:intersectionOf (
                      :Book 
                      [ a owl:Restriction ;
                        owl:onProperty bf:hasAuthor ;
                        owl:someValuesFrom :Male ]
                      )
] .

现在我创建了BookPerson以及关系的一些实例:

:Hard_bounded_book1 rdf:type :Hard_bounded_book .
:Hard_bounded_book2 rdf:type :Hard_bounded_book .
:Soft_bounded_book1 rdf:type :Soft_bounded_book .
:Soft_bounded_book2 rdf:type :Soft_bounded_book .
:Male1 rdf:type :Male .
:Male2 rdf:type :Male .
:Female1 rdf:type :Female .
:Female2 rdf:type :Female .
:Hard_bounded_book1 :hasAuthor :Male1
:Hard_bounded_book1 :hasAuthor :Male2
:Hard_bounded_book1 :hasAuthor :Female1
:Hard_bounded_book1 :hasAuthor :Female2
:Soft_bounded_book1 :hasAuthor :Male1
:Soft_bounded_book2 :hasAuthor :Female1

当我编写SPARQL查询以获取类Book_With_Atleast_One_Male_Author的实例时,我什么都得不到。 如果您对所发生的事情有任何疑问,请告诉我?

感谢。

1 个答案:

答案 0 :(得分:1)

当然你不会得到!您将:Book_With_Atleast_One_Male_Author定义为subClassOfBook之间交叉点的restriction

subClassOf语义:

Sub subClassOf Super

表示Sub的每个实例都是Super的实例。

这意味着:Book_With_Atleast_One_Male_Author的实例必须遵循您定义的restriction,但这并不意味着遵循此限制的任意个人都是Book_With_Atleast_One_Male_Author的实例。

您可以做的是将:Book_With_Atleast_One_Male_Author定义为Book与您创建的restriction的匿名类之间的交集的等效类。因此,Book并且符合restriction的每个人都将(使用推理者运行)归类为:Book_With_Atleast_One_Male_Author

以下是如何做到这一点:

:Book_With_Atleast_One_Male_Author rdf:type owl:Class ;
                               owl:equivalentClass [ owl:intersectionOf (  :Book :EquivalentToBookAndHasMaleAuthor ) ;rdf:type owl:Class ] .

:EquivalentToBookAndHasMaleAuthor rdf:type owl:Class ;
                              owl:equivalentClass [ rdf:type owl:Restriction; owl:onProperty  :hasAuthor ; owl:someValuesFrom :Male] .