Deduce las afirmaciones de superclases (o subclases) OWL no triviales utilizando un razonador en Java.
Quiero expresar las siguientes afirmaciones de DL en OWL:
A ⊑ B
A ⊑ ∃R
lo que significa que A es un subconcepto de B y todas las instancias de A deben tener una relación R con algo más.
Lo estoy expresando con la siguiente ontología OWL:
Prefix(:=http://example.org/my-ontology#)
Ontology(
Declaration(Class(:A))
Declaration(Class(:B))
Declaration(ObjectProperty(:R))
SubClassOf(:A :B)
SubClassOf(:A ObjectSomeValuesFrom(:R owl:Thing))
)
Estoy utilizando el razonador HermiT para obtener todas las superclases de :A de la siguiente manera:
OWLOntology ontology = TestUtils.ontology;
OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();
OWLReasonerConfiguration config = new SimpleConfiguration(progressMonitor);
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, config);
reasoner.precomputeInferences();
for (OWLClass owlClass : ontology.getClassesInSignature()) {
if (owlClass.toStringID().contains(“#A”)) {
System.out.println(“Clase=>” + owlClass.toStringID() + “\nSuperClase[“);
System.out.println(“\t” + reasoner.getSuperClasses(owlClass, false));
System.out.println(“]”);
}
}
pero esto solo imprime:
Clase=>http://example.org/my-ontology#A
SuperClase[
Nodeset[Node(
]
¿Cómo puedo obtener también la información sobre SubClassOf(:A ObjectSomeValuesFrom(:R owl:Thing))?
PD: No puedo simplemente enumerar las afirmaciones de inclusión de la ontología, sino que tengo que usar un razonador (no necesariamente HermiT) para inferirlas posiblemente.
davy.ai
Para recuperar la información sobre
SubClassOf(:A ObjectSomeValuesFrom(:R owl:Thing))
, debes habilitar la característica de razonamiento llamada “aserciones de propiedad de objeto”.Aquí está el fragmento de código modificado que inicializa el razonador con la configuración necesaria:
Con esta modificación, la salida incluirá la restricción
ObjectSomeValuesFrom(:R owl:Thing)
:Clase=>http://example.org/my-ontology#A
SuperClase[
Conjunto de Nodos[Node( <http: example.org/my-ontology#b=""> ),
Node( ObjectSomeValuesFrom(<http: example.org/my-ontology#r=""> owl:Thing) )]
]