# HG changeset patch # User Mikel Egana Aranguren # Date 1342105920 -7200 # Node ID 622cde484f4c26e2b3cfb9c0b063d01c42e6e01c # Parent 68c4ae500a139156fc0aa16827816282139ac8c6 Add new tool to perform OPPL queries diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-OSX-v1.5.2/32bit/libFaCTPlusPlusJNI.jnilib diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-OSX-v1.5.2/64bit/libFaCTPlusPlusJNI.jnilib diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-linux-v1.5.2/32bit/FaCT++ diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-linux-v1.5.2/32bit/libFaCTPlusPlusJNI.so diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-linux-v1.5.2/64bit/FaCT++ diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-linux-v1.5.2/64bit/libFaCTPlusPlusJNI.so diff -r 68c4ae500a13 -r 622cde484f4c OPPL/FaCT++-linux-v1.5.2/Models.lisp/create-new-test diff -r 68c4ae500a13 -r 622cde484f4c OPPL/README --- a/OPPL/README Sat Mar 31 12:54:09 2012 +0200 +++ b/OPPL/README Thu Jul 12 17:12:00 2012 +0200 @@ -12,9 +12,11 @@ oppl_galaxy_tool.jar inference.jar query.jar +oppl_query.jar oppl_galaxy_lib/ inference_lib/ query_lib/ +oppl_query_lib/ FaCT++-linux-v1.5.2/ FaCT++-OSX-v1.5.2/ @@ -29,6 +31,7 @@ + 6.- Start Galaxy. @@ -38,7 +41,7 @@ FORESEEN FEATURES ================= -General (OPPL, Inference, Query): +General (OPPL, Inference, Query, OPPL query): - Support for processing ontologies that import other ontologies loaded in galaxy. @@ -61,6 +64,8 @@ - Support for DataPropertyAssertion, DataPropertyHierarchy, DifferentIndividuals, ... +OPPL query: + KNOWN BUGS AND ISSUES diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query.jar Binary file OPPL/oppl_query.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OPPL/oppl_query.xml Thu Jul 12 17:12:00 2012 +0200 @@ -0,0 +1,68 @@ + + It performs a query, expressed in OPPL Syntax, against an OWL ontology + + + + + + + + + + + java -Xmx7000M -Xms250M -DentityExpansionLimit=1000000000 -jar ${__tool_data_path__}/shared/jars/oppl_query.jar $ontology $reasoner $answer_format "$query" > $output 2>/dev/null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +**About OPPL-Query-Galaxy** + + OPPL-Query-Galaxy can be used to execute an OPPL query against an OWL ontology (?whole:CLASS, ?part:CLASS SELECT ?part SubClassOf part_of some ?whole WHERE ?part != Nothing). The result is a two column table with the entities that have been bound by the variables. + +**Formats** + + OPPL-Query-Galaxy uses the OWL API, and therefore it can load any ontology format that such API is able to load: OBO flat file, OWL (RDF/XML, OWL/XML, Functional, Manchester), turtle, and KRSS. The output is a list of terms. + +**Contact** + + Please send any request or comment to mikel.egana.aranguren@gmail.com. + + + + diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/FaCTpp-OWLAPI-3.2-v1.5.2.jar Binary file OPPL/oppl_query_lib/FaCTpp-OWLAPI-3.2-v1.5.2.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/HermiT.jar Binary file OPPL/oppl_query_lib/HermiT.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/antlr-runtime-3.2.jar Binary file OPPL/oppl_query_lib/antlr-runtime-3.2.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/aterm-java-1.6.jar Binary file OPPL/oppl_query_lib/aterm-java-1.6.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/jgrapht-jdk1.5.jar Binary file OPPL/oppl_query_lib/jgrapht-jdk1.5.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/org.coode.oppl-API.jar Binary file OPPL/oppl_query_lib/org.coode.oppl-API.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/owlapi-bin.jar Binary file OPPL/oppl_query_lib/owlapi-bin.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/parsers.jar Binary file OPPL/oppl_query_lib/parsers.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-core.jar Binary file OPPL/oppl_query_lib/pellet-core.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-datatypes.jar Binary file OPPL/oppl_query_lib/pellet-datatypes.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-el.jar Binary file OPPL/oppl_query_lib/pellet-el.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-owlapiv3.jar Binary file OPPL/oppl_query_lib/pellet-owlapiv3.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-query.jar Binary file OPPL/oppl_query_lib/pellet-query.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/oppl_query_lib/pellet-rules.jar Binary file OPPL/oppl_query_lib/pellet-rules.jar has changed diff -r 68c4ae500a13 -r 622cde484f4c OPPL/src/GalaxyOWLAPI.java --- a/OPPL/src/GalaxyOWLAPI.java Sat Mar 31 12:54:09 2012 +0200 +++ b/OPPL/src/GalaxyOWLAPI.java Thu Jul 12 17:12:00 2012 +0200 @@ -38,7 +38,6 @@ import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.reasoner.InferenceType; -import org.semanticweb.owlapi.reasoner.NodeSet; import org.semanticweb.owlapi.reasoner.OWLReasoner; import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; import org.semanticweb.owlapi.util.BidirectionalShortFormProvider; @@ -63,7 +62,7 @@ /** * A wrapper of the OWL API * - * @author Mikel Egaña Aranguren + * @author Mikel Ega��a Aranguren */ public class GalaxyOWLAPI { private OWLOntologyManager manager; diff -r 68c4ae500a13 -r 622cde484f4c OPPL/src/OPPLQueryGalaxy.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OPPL/src/OPPLQueryGalaxy.java Thu Jul 12 17:12:00 2012 +0200 @@ -0,0 +1,171 @@ +/** + * + */ +package es.upm.cbgp.opplquery.oppl.galaxy; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Iterator; +import java.util.Scanner; +import java.util.Set; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.semanticweb.owlapi.expression.ParserException; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLObject; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; + +import es.upm.fi.dia.oeg.oppl.galaxy.GalaxyOWLAPI; + +import org.coode.oppl.ChangeExtractor; +import org.coode.oppl.ConstraintSystem; +import org.coode.oppl.OPPLParser; +import org.coode.oppl.OPPLScript; +import org.coode.oppl.ParserFactory; +import org.coode.parsers.ErrorListener; +import org.coode.parsers.LoggerErrorListener; +import org.coode.oppl.bindingtree.Assignment; +import org.coode.oppl.bindingtree.BindingNode; +import org.coode.oppl.exceptions.QuickFailRuntimeExceptionHandler; +import org.coode.oppl.exceptions.RuntimeExceptionHandler; + +public class OPPLQueryGalaxy { + + /** + * @param args + * @throws OWLOntologyCreationException + * @throws ParserException + * @throws FileNotFoundException + */ + public static void main(String[] args) throws OWLOntologyCreationException, ParserException, FileNotFoundException { + // Get the arguments from command-line + String OWLFilePath = args [0]; // /home/mikel/UPM/OPPL_galaxy/OPPL/OPPL/test-data/ontology/single/test.owl + String reasoner_type = args [1]; // Pellet|FaCTPlusPlus|HermiT + String Answer_render = args [2]; // URI|URIfragment|URIfragment2OBO + String OPPL_script_sourcee = args [3]; + +// String OPPL_script_file = args [3]; +// File OPPL_script_file = new File("/home/mikel/UPM/OPPL_galaxy/OPPL/OPPL/test-data/oppl_script/test_oppl_query.oppl"); +// File OPPL_script_file = new File("/home/mikel/UPM/OPPL_galaxy/OPPL/OPPL/test-data/oppl_script/test_oppl_query_object_prop.oppl"); +// File OPPL_script_file = new File("/home/mikel/UPM/OPPL_galaxy/OPPL/OPPL/test-data/oppl_script/test_oppl_query_object_ind.oppl"); + +// String OPPL_script_source = ""; +// Scanner input = new Scanner(OPPL_script_file); +// while(input.hasNext()) { +// String nextToken = input.next(); +// OPPL_script_source = OPPL_script_source + " " + nextToken; +// } +// input.close(); + + // Create the manager + GalaxyOWLAPI galaxyowlapi = new GalaxyOWLAPI(); + + // Load the main ontology and hope for the imported URIs to be resolvable + galaxyowlapi.loadMainOntology(OWLFilePath); + + // Set the reasoner + + // Pellet + if(reasoner_type.equals("Pellet")){ + galaxyowlapi.setReasonerPellet(); + } + // FaCTPlusPlus + else if (reasoner_type.equals("FaCTPlusPlus")){ + galaxyowlapi.setReasonerFaCT(); + } + // HermiT + else{ + galaxyowlapi.setReasonerHermit(); + } + + OPPL_script_source = completeOPPLScript(OPPL_script_source); +// System.out.println(OPPL_script_source); + + ParserFactory parserFactory = new ParserFactory(galaxyowlapi.getOWLManager(), galaxyowlapi.getMainOntology(), galaxyowlapi.getReasoner()); + Logger logger = Logger.getLogger(OPPLQueryGalaxy.class.getName()); + ErrorListener errorListener = (ErrorListener) new LoggerErrorListener(logger); + OPPLParser opplparser = parserFactory.build(errorListener); + OPPLScript OPPLscript = opplparser.parse(OPPL_script_source); + RuntimeExceptionHandler exceptionhandler = new QuickFailRuntimeExceptionHandler(); + ChangeExtractor extractor = new ChangeExtractor(exceptionhandler, true); + extractor.visit(OPPLscript); + ConstraintSystem cs = OPPLscript.getConstraintSystem(); + Set nodes = cs.getLeaves(); + + Iterator NodesIterator = nodes.iterator(); + while(NodesIterator.hasNext()){ + Set Assignments = ((BindingNode)NodesIterator.next()).getAssignments(); + Iterator AssignmentIterator = Assignments.iterator(); + while(AssignmentIterator.hasNext()){ + Assignment assignment = (Assignment)AssignmentIterator.next(); + System.out.print(assignment.getAssignedVariable().toString()); + System.out.print("\t"); + String OWLObjectString = ((OWLObject)assignment.getAssignment()).toString(); + IRI entityIRI = IRI.create(OWLObjectString.substring(1,OWLObjectString.length()-1)); + print_result_entity(entityIRI, Answer_render); + System.out.print("\n"); + } + } + } + + //URI|URIfragment|URIfragment2OBO + private static void print_result_entity (IRI iri, String Answer_render){ + if(Answer_render.equals("URI")){ + System.out.print(iri); + } + + // Weird bug: in eclipse it can print out the IRIs of every entity, but in Galaxy it can't! + // done manually + else if(Answer_render.equals("URIfragment")){ + if(iri.toString().contains("#")){ + System.out.print(iri.getFragment()); + } + else{ + String [] iri_tokens = iri.toString().split("/"); + System.out.print(iri_tokens[iri_tokens.length-1]); + } + } + else{ + if(iri.toString().contains("#")){ + System.out.print((iri.getFragment()).replace("_", ":")); + } + else{ + String [] iri_tokens = iri.toString().split("/"); + System.out.print((iri_tokens[iri_tokens.length-1]).replace("_", ":")); + } + } + } + + // Very crappy stuff: complete the query to make a whole OPPL script that can be parsed + private static String completeOPPLScript (String OPPLQuery){ + + // Get the first variable and add at least an axiom to make a whole script + Pattern p = Pattern.compile("(\\?\\w+):(CLASS|INDIVIDUAL|OBJECTPROPERTY|DATAPROPERTY|ANNOTATIONPROPERTY|CONSTANT)"); + Matcher m = p.matcher(OPPLQuery); + m.find(); + if (m.group(2).equals("CLASS")){ + OPPLQuery = OPPLQuery + " BEGIN ADD " + m.group(1) + " SubClassOf !A END;"; + } + else if (m.group(2).equals("INDIVIDUAL")){ + OPPLQuery = OPPLQuery + " BEGIN ADD " + m.group(1) + " !p !b END;"; + } + else if (m.group(2).equals("OBJECTPROPERTY")){ + OPPLQuery = OPPLQuery + " BEGIN ADD Transitive ?p END;"; + } +// else if (m.group(2).equals("DATAPROPERTY")){ +// OPPLQuery = OPPLQuery + " BEGIN ADD ?whole SubClassOf !A END;"; +// } +// else if (m.group(2).equals("ANNOTATIONPROPERTY")){ +// OPPLQuery = OPPLQuery + " BEGIN ADD ?whole SubClassOf !A END;"; +// } +// else if (m.group(2).equals("CONSTANT")){ +// OPPLQuery = OPPLQuery + " BEGIN ADD ?whole SubClassOf !A END;"; +// } + else{ + OPPLQuery = "Malformed OPPL query"; + } + return OPPLQuery; + } +} diff -r 68c4ae500a13 -r 622cde484f4c OPPL/test-data/ontology/single/test.owl --- a/OPPL/test-data/ontology/single/test.owl Sat Mar 31 12:54:09 2012 +0200 +++ b/OPPL/test-data/ontology/single/test.owl Thu Jul 12 17:12:00 2012 +0200 @@ -32,6 +32,14 @@ + + + + + + + + @@ -55,6 +63,12 @@ + + + + + + @@ -122,9 +136,37 @@ + + + + + + + + + + + + + + + + + + + + + + - + diff -r 68c4ae500a13 -r 622cde484f4c OPPL/test-data/oppl_script/test.oppl --- a/OPPL/test-data/oppl_script/test.oppl Sat Mar 31 12:54:09 2012 +0200 +++ b/OPPL/test-data/oppl_script/test.oppl Thu Jul 12 17:12:00 2012 +0200 @@ -4,5 +4,4 @@ ?part SubClassOf part_of some ?whole WHERE ?part != Nothing BEGIN ADD ?part SubClassOf part_of only ?whole -END; - +END; \ No newline at end of file diff -r 68c4ae500a13 -r 622cde484f4c OPPL/test-data/oppl_script/test_oppl_query.oppl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OPPL/test-data/oppl_script/test_oppl_query.oppl Thu Jul 12 17:12:00 2012 +0200 @@ -0,0 +1,4 @@ +?whole:CLASS, +?part:CLASS +SELECT +?part SubClassOf part_of some ?whole WHERE ?part != Nothing \ No newline at end of file diff -r 68c4ae500a13 -r 622cde484f4c OPPL/test-data/oppl_script/test_oppl_query_object_ind.oppl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OPPL/test-data/oppl_script/test_oppl_query_object_ind.oppl Thu Jul 12 17:12:00 2012 +0200 @@ -0,0 +1,4 @@ +?a:INDIVIDUAL, +?part:CLASS, +?c:INDIVIDUAL +SELECT ?a prop ?c \ No newline at end of file diff -r 68c4ae500a13 -r 622cde484f4c OPPL/test-data/oppl_script/test_oppl_query_object_prop.oppl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OPPL/test-data/oppl_script/test_oppl_query_object_prop.oppl Thu Jul 12 17:12:00 2012 +0200 @@ -0,0 +1,2 @@ +?p:OBJECTPROPERTY +SELECT Transitive ?p \ No newline at end of file