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.

Accediendo a la propiedad del objeto para un individuo utilizando Apache Jena

He creado una ontología OWL utilizando Protégé, que describe un sistema de base de datos de pacientes. Ahora estoy intentando desarrollar un código en Java utilizando Apache Jena para leer el archivo OWL que he creado, y luego realizar una serie de operaciones sobre él. Mi objetivo principal es hacer que mi código sea capaz de encontrar un Individuo específico por su nombre (por ejemplo, el nombre de un paciente) y luego acceder a una Propiedad de Objeto específica para ese individuo, y mostrar su valor. Por ejemplo, un paciente “John” tiene una propiedad de objeto “Tratado_Por” que corresponde a otro individuo “Amy” (Amy es un individuo de tipo doctor). Sin embargo, no he podido descubrir qué método de Jena se utiliza para recuperar los valores de las propiedades de objeto de un individuo determinado.

Aquí está mi código (por favor, ignore los comentarios, son fragmentos de intentos anteriores para esta tarea):

public class Main {

public static void main(String[] args) {
    OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
    String fileName = "C:/Users/Ahmed Medhat/Documents/assignment1ontv3.0.owl";

    try {
        InputStream inputStream = new FileInputStream(fileName);
        model.read(inputStream, "RDF/XML");
        //model.read(inputStream, "OWL/XML");
        inputStream.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    Scanner sc = new Scanner(System.in);
    System.out.println("Ingrese el nombre del paciente: ");
    String patientName = sc.next();

    ExtendedIterator<individual> itI = model.listIndividuals();

    while (itI.hasNext()) {
        Individual i = itI.next();
        String localName = i.getLocalName();
        //System.out.println(patientName);
        //System.out.println(localName);
        if(localName.equals(patientName))
        {
            //System.out.println("Se accedió al código condicional.");
            OntClass Class = i.getOntClass();
            System.out.println("La enfermedad del paciente es: " + Class.listDeclaredProperties());
        }
        System.out.println("Falló.");
    }
}
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor de una propiedad de objeto de un individuo específico en Jena, puedes usar el siguiente código:

    Individual paciente = modelo.getIndividual("URI_del_paciente");
    ObjectProperty tratadoPorProp = modelo.getObjectProperty("URI_Tratado_Por");
    Individual doctor = paciente.getObjectProperty(tratadoPorProp).as(Individual.class);
    

    En este código, reemplaza “URI_del_paciente” y “URI_Tratado_Por” con los URIs de tu individuo de paciente y de la propiedad de objeto “Tratado_Por” respectivamente. Este código recupera el individuo que es el valor de la propiedad de objeto “Tratado_Por” en el individuo de paciente, y lo almacena en la variable “doctor”.

    A continuación, puedes obtener el nombre del individuo doctor usando el siguiente código:

    System.out.println("El paciente es tratado por " + doctor.getLocalName());
    

    Este código obtiene el nombre local del individuo doctor y lo muestra en la consola.

    Ten en cuenta que deberás modificar tu código existente para obtener el individuo mediante su URI en lugar de por su nombre, ya que los URIs suelen utilizarse para identificar de manera única a los individuos en ontologías OWL.

Comments are closed.