es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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( ), Node( owl:Thing )]
]

¿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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    OWLOntology ontology = TestUtils.ontology;
    OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
    ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();
    OWLReasonerConfiguration config = new SimpleConfiguration(progressMonitor)
        .setFeature(OWLFeatures.OBJECT_PROPERTY_ASSERTIONS, true); // habilitar aserciones de propiedad de objeto
    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("]");
        }
    }
    

    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) )]
    ]

Comments are closed.