私は Protégé 5.1.0 (および HermiT 1.3.8.413 Reasoner) で OWL オントロジーを使用しており、後で OWLAPI 4.1.0 と DL-Query または SPARQL で使用したいと考えています。当面の私の仕事は、特定のオブジェクト プロパティが満たされていないクラスのすべての個体を取得することです。オープン ワールドの前提により、満たされていないオブジェクト プロパティが問題として現れることは通常ありませんが、情報が必要であり、オントロジー全体をチェックするために独自のコードを作成することは避けたいと考えています。
読み取り可能なテキストとタートルコードとして、小さな例を用意しました。
クラス:ピザ,トッピング
オブジェクト プロパティ:持っています
主張:ピザ にはいくつかのトッピングがあります
個人: Pizza1、Pizza2、Topping1、Topping2 (それぞれのクラスの)
アサーション: Pizza1にはTopping1があります
コード:
@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 にトッピングがない、つまりオブジェクト プロパティがアサートまたは推論されていないという情報を取得したいと考えています。また、Topping1 が別のクラスに変更された場合、「 Pizza has some Topping」が満足できないため、Pizza1 もクエリに表示されるようにしたいと考えています。
OWLAPIで直接、またはDL-Query/SPARQLを使用してこれを行うエレガントな方法はありますか?