我正在创建两个类Book
和Person
,以及一个对象属性hasAuthor
:
Person
包含子类Man
和Women
。Book
包含子类Hard_bounded_book
和Soft_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 ]
)
] .
现在我创建了Book
和Person
以及关系的一些实例:
: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
的实例时,我什么都得不到。
如果您对所发生的事情有任何疑问,请告诉我?
感谢。
答案 0 :(得分:1)
当然你不会得到!您将:Book_With_Atleast_One_Male_Author
定义为subClassOf
与Book
之间交叉点的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] .