Hace tiempo que no uso Java. Hoy me he encontrado este código para maninpular ontologías. Que tiempos! Lo dejo por aquí:

A code to read ontologies using a reasoner. It is a very old code (2012).

My recipe


import com.hp.hpl.jena.ontology.OntDocumentManager;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import org.mindswap.pellet.jena.PelletReasonerFactory;

public class testQuery {

	/**
	 *  URI donde está ubicada la ontología
	 */
    static String URILocalFile = "file:///Users/isaac/ontologies/Animals.owl";
    static String URIExternal1 = "http://acsic.uib.es/isaaclera/ontology/Animals.owl";

    //EL NameSpace NS se puede obtener a partir de la ontología pero yo por temas de eficiencia se lo indico
    //El NS no tiene porque coincidir con el URI
    private static String NS = "http://acsic.uib.es/Animals.owl#";
//    private static String NS;

    //La ontologia cargada por el razonador
	private static String LoadURI = URIExternal1;


    private static OntModel model;

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//Se carga la ontología con el modelo de razonador índicado
        model = getReasonerModelTest(LoadURI);

        //Se imprime la ontología por System.out en sintaxis indicada
		//model.write(System.out,"RDF/XML");

        //Definción del query
		String prefixes = 
			"PREFIX owl:  <http://www.w3.org/2002/07/owl#> " +
			"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+
			"PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
			"PREFIX base: <"+NS+">";

		//QUERIES:
		//Listado de clases
		String query1 =
			"SELECT ?algo "
			  + " WHERE { " 
			    + " ?algo rdf:type owl:Class .  "
			  	+ " }";

        //Que cosas se come nemo
		String query2 = " Select ?x { " +
				" base:Charles base:come ?x ." +
				" }";

        //Charles se come a Nemo
        String query3 = " ASK { " +
                " base:Charles base:come base:Nemo ." +
                " }";
		/**
		 * Change your Query HERE!
         *
		 */
		String testQuery = query2;




		
		Query query = QueryFactory.create(prefixes+testQuery);
		QueryExecution qe = QueryExecutionFactory.create(query, model);
		
		if (testQuery.contains("ASK")){
			boolean result = qe.execAsk() ;
			System.out.println("\t Result : "+result);
		}else{
			ResultSet results = qe.execSelect();
	
			//¿Como utilizar los resultados?
			//A - Mostrados directamente por pantalla
			ResultSetFormatter.out(System.out, results, query);
			
			//B - a nivel de programación
//			for (;results.hasNext();){
//				QuerySolution soln = results.nextSolution() ;
//				//siendo X la variable
//				String cls = soln.get("x").asNode().getLocalName();
//				
//			}
		}
		
		qe.close();
		
	}
	
	public static OntModel getReasonerModelTest(String url) {
		OntDocumentManager mgr = new OntDocumentManager();
		mgr.setProcessImports(true);
		
		//Razonador de Jena
		//OntModelSpec s = new OntModelSpec(OntModelSpec.RDFS_MEM_RDFS_INF);
		
		//Razonador Pellet
		OntModelSpec s = new OntModelSpec(PelletReasonerFactory.THE_SPEC);
		 
		s.setDocumentManager( mgr );
		OntModel model = ModelFactory.createOntologyModel( s );
		
		System.out.println("\t Reading...");
		model.read(url);
		System.out.println("\t [ok]");
		
		// load the model to the reasoner
		System.out.println("\t Preparing...");
		model.prepare();
		System.out.println("\t [ok]");

        //Otro razonador factible
//		System.out.println("Classifying...");
//		((PelletInfGraph) model.getGraph()).getKB().classify();
//		System.out.println("[done]");
		
		System.out.println("\t NS = "+model.getNsPrefixURI(""));
		if (null==model.getNsPrefixURI("")){
			System.out.println("\t\t NS ERROR "); 
		}
		if (NS.length()<3) NS = model.getNsPrefixURI("");
		
		return model;
	}

}