Sparql OWL/owlapi:使用“获取个人”;“不满意”;对象属性

Sparql OWL/owlapi:使用“获取个人”;“不满意”;对象属性,sparql,owl,ontology,dlquery,Sparql,Owl,Ontology,Dlquery,我正在使用Protégé5.1.0(加上HermiT 1.3.8.413 Reasoner)中的OWL本体,稍后我想将其与OWLAPI 4.1.0以及DL Query或SPARQL一起使用。我手头的任务是让一个类中具有特定对象属性的所有个体都无法实现。由于开放世界的假设,未实现的对象属性通常不会显示为问题,但我需要这些信息,并且希望避免编写自己的代码来检查整个本体 我准备了一个小示例,作为可读文本和代码: 课程:披萨,浇头 对象属性:has 断言:比萨饼有一些配料 个人:披萨1、披萨2、Topp

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

我准备了一个小示例,作为可读文本和代码:

课程:披萨浇头

对象属性:has

断言:比萨饼有一些配料

个人:披萨1、披萨2、Topping1、Topping2(各等级)

断言:Pizza1拥有Topping1

代码:

@前缀:。
@前缀owl:。
@前缀rdf:。
@前缀xml:。
@前缀xsd:。
@前缀rdfs:。
@基地。
rdf:type owl:Ontology。
#################################################################
#对象属性
#################################################################
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#has
:具有rdf:type owl:ObjectProperty;
猫头鹰:逆:伊森。
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#isOn
:isOn rdf:type owl:ObjectProperty,
猫头鹰:功能属性。
#################################################################
#班级
#################################################################
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza
:Pizza rdf:type owl:Class;
rdfs:subassof[rdf:type owl:Restriction;
owl:onProperty:has;
猫头鹰:来自:Topping的一些值
] .
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping
:Topping rdf:type owl:Class。
#################################################################
#个人
#################################################################
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza1
:Pizza1 rdf:type owl:NamedIndividual,
:比萨饼;
:has:Topping1。
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Pizza2
:Pizza2 rdf:type owl:NamedIndividual,
:比萨饼。
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping1
:Topping1 rdf:type owl:NamedIndividual,
:浇头;
:isOn:Pizza1。
###  http://www.semanticweb.org/user/ontologies/2017/0/untitled-ontology-23#Topping2
:Topping2 rdf:type owl:NamedIndividual,
:浇头。
#################################################################
#一般公理
#################################################################
[rdf:type owl:AllDifferent;
猫头鹰:distinctMembers(:Pizza1)
:比萨饼2
)
] .
[rdf:type owl:AllDifferent;
猫头鹰:distinctMembers(:Topping1)
:Topping2
)
] .
###由OWL API生成(版本4.2.6.20160910-2108)https://github.com/owlcs/owlapi
在本例中,我想查询本体并获取Pizza2当前没有任何Toping的信息,即其对象属性未断言或推断。另外,如果Topping1被更改为另一个类,我现在想看到Pizza1也出现在查询中,因为“Pizza有一些Topping”不令人满意


有没有一种优雅的方法可以直接在OWLAPI中或使用DL Query/SPARQL实现这一点?

使用OWL API查看必要对象属性的公理
p_i
,然后使用SPARQL查询当前本体中没有数据的个人
SELECT?ind WHERE{ind a:the_class.FILTER NOT EXISTS{ind:the_property?o}}
顺便说一句,在OWL术语中,
Pizza有一些Topping
不是一个断言on
SELECT?p,其中{p a:Pizza.FILTER NOT EXISTS{p:has:Topping}< /代码>由于某种原因,我也得到了PIDZA1。替换<代码>:TopP< <代码> > <代码> o >代码>不考虑连接的类,但是,当我有不同的类由这个对象属性连接时(例如,顶部、面团和酱汁),我必须这样做三次,然后手动合并结果,对吗?啊,对不起。我们讨论的是类限制:
SELECT?p其中{p a:Pizza.FILTER不存在{p:has?o.?o rdf:type/rdfs:subassof*:Topping}
您可以使用SPARQL 1.1
VALUES
这是
UNION
的一个更简洁的快捷方式。使用OWL API查看必要对象属性的公理
p_i
更容易,然后使用SPARQL查询当前本体中没有数据的个人
SELECT?ind WHERE{ind a:the_class.FILTER NOT EXISTS{ind:the_property?o}}
顺便说一句,在OWL术语中,
Pizza有一些Topping
不是一个断言on
SELECT?p,其中{p a:Pizza.FILTER NOT EXISTS{p:has:Topping}< /代码>由于某种原因,我也得到了PIDZA1。替换<代码>:TopP< <代码> > <代码> o >代码>不考虑连接的类,但是,当我有不同的类由这个对象属性连接时(例如,顶部、面团和酱汁),我必须这样做三次,然后手动合并结果,对吗?啊,对不起。我们讨论的是类限制:
SELECT?p其中{p a:Pizza.FILTER不存在{p:has?o.?o rdf:type/rdfs:subassof*:Topping}
您可以使用SPARQL 1.1
,它是
联合
的精简快捷方式。
@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