1

我正在使用 Protégé 5.1.0(加上 HermiT 1.3.8.413 Reasoner)中的 OWL 本体,我稍后想与 OWLAPI 4.1.0 以及可能的 DL-Query 或 SPARQL 一起使用。我手头的任务是让某个类的所有个体都没有完成某个对象属性。由于开放世界假设,未实现的对象属性通常不会显示为问题,但我需要这些信息并且希望避免编写自己的代码来检查整个本体。

我准备了我的小例子,作为可读的文本和海龟代码:

类:比萨饼浇头

对象属性:

断言:披萨 一些配料

个人:Pizza1、Pizza2、Topping1、Topping2(各自类别)

断言:Pizza1Topping1

代码:

@prefix : <http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23> .

<http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23> rdf:type owl:Ontology .

#################################################################
#    Object Properties
#################################################################

###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#has
:has rdf:type owl:ObjectProperty ;
     owl:inverseOf :isOn .


###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#isOn
:isOn rdf:type owl:ObjectProperty ,
               owl:FunctionalProperty .


#################################################################
#    Classes
#################################################################

###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza
:Pizza rdf:type owl:Class ;
       rdfs:subClassOf [ rdf:type owl:Restriction ;
                         owl:onProperty :has ;
                         owl:someValuesFrom :Topping
                       ] .


###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping
:Topping rdf:type owl:Class .


#################################################################
#    Individuals
#################################################################

###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza1
:Pizza1 rdf:type owl:NamedIndividual ,
                 :Pizza ;
        :has :Topping1 .


###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza2
:Pizza2 rdf:type owl:NamedIndividual ,
                 :Pizza .


###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping1
:Topping1 rdf:type owl:NamedIndividual ,
                   :Topping ;
          :isOn :Pizza1 .


###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping2
:Topping2 rdf:type owl:NamedIndividual ,
                   :Topping .


#################################################################
#    General axioms
#################################################################

[ rdf:type owl:AllDifferent ;
  owl:distinctMembers ( :Pizza1
                        :Pizza2
                      )
] .


[ rdf:type owl:AllDifferent ;
  owl:distinctMembers ( :Topping1
                        :Topping2
                      )
] .


###  Generated by the OWL API (version 4.2.6.20160910-2108) https://github.com/owlcs/owlapi

在这种情况下,我想查询本体并获取Pizza2当前没有任何Topping的信息,即它的Object Property没有被断言或推断。此外,如果 Topping1 更改为不同的类,我现在希望看到 Pizza1 也出现在查询中,因为“ Pizza has some Topping ”不满意。

有没有一种优雅的方法可以直接在 OWLAPI 中或使用 DL-Query/SPARQL 来执行此操作?

4

0 回答 0