OWL2Parser.java revision e7cf03540118dff9e3c71cd1878a9258bbbbd7d7
0N/Aimport org.semanticweb.owlapi.apibinding.OWLManager;
2273N/Aimport org.semanticweb.owlapi.model.OWLException;
0N/Aimport org.semanticweb.owlapi.model.OWLOntology;
0N/Aimport org.semanticweb.owlapi.model.OWLOntologyManager;
0N/Aimport org.semanticweb.owlapi.model.OWLAnnotationProperty;
0N/Aimport org.semanticweb.owlapi.util.OWLOntologyMerger;
0N/Aimport org.semanticweb.owlapi.model.*;
0N/Aimport org.semanticweb.owlapi.model.OWLAxiom;
0N/Aimport org.semanticweb.owlapi.io.OWLRendererException;
0N/Aimport uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxRenderer;
0N/Aimport uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxObjectRenderer;
0N/Aimport org.coode.owlapi.owlxml.renderer.OWLXMLRenderer;
0N/Aimport org.coode.owlapi.rdf.rdfxml.*;
0N/Aimport org.coode.owlapi.rdf.model.*;
0N/A
0N/Aimport java.io.*;
0N/Aimport java.net.URI;
0N/Aimport java.util.*;
1472N/A
1472N/A//@SuppressWarnings("unchecked")
1472N/Apublic class OWL2Parser {
0N/A private static enum OPTION {OWL_XML, MANCHESTER, RDF_XML}
0N/A private static OPTION op;
0N/A private static List<OWLOntology> loadedImportsList = new ArrayList<OWLOntology>();
1879N/A private static ArrayList<IRI> importsIRI = new ArrayList<IRI>();
1879N/A private static Map<OWLOntology,List<OWLOntology>> m = new HashMap<OWLOntology, List<OWLOntology>>();
1879N/A private static Set<OWLOntology> s = new HashSet<OWLOntology>();
1879N/A private static Set<OWLOntology> expanded = new HashSet<OWLOntology>();
1879N/A
1879N/A public static void main(String[] args) {
0N/A
0N/A if (args.length < 1) {
0N/A System.out.println("Usage: processor <URI> [FILENAME] <OPTION>");
0N/A System.exit(1);
0N/A }
0N/A
0N/A String filename = "";
0N/A BufferedWriter out;
0N/A
0N/A // A simple example of how to load and save an ontology
0N/A try {
0N/A OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
0N/A if (args.length == 3) {
0N/A // args[0]: IRI
0N/A // args[1]: name of output file
0N/A // args[2]: type of output file: xml, rdf, or otherwise assume Manchester syntax
0N/A filename = args[1];
0N/A out = new BufferedWriter(new FileWriter(filename));
0N/A if (args[2].equals("xml"))
0N/A op = OPTION.OWL_XML;
0N/A else {
0N/A if (args[1].equals("rdf"))
0N/A op = OPTION.RDF_XML;
0N/A else
0N/A op = OPTION.MANCHESTER;
0N/A }
0N/A
0N/A } else {
0N/A // args[0]: IRI
0N/A // args[1]: type of output:
0N/A // xml (OWL XML),
0N/A // rdf (RDF/XML),
0N/A // or otherwise use Manchester syntax
0N/A // Output goes to standard output, i.e. System.out
0N/A if (args.length == 2) {
0N/A if (args[1].equals("xml"))
0N/A op = OPTION.OWL_XML;
0N/A else {
0N/A if (args[1].equals("rdf"))
0N/A op = OPTION.RDF_XML;
0N/A else
0N/A op = OPTION.MANCHESTER;
0N/A }
0N/A }
0N/A else
0N/A {
0N/A // args[0]: IRI
0N/A // Output goes to standard output, i.e. System.out
0N/A // and will be made in Manchester syntax
0N/A if (args.length == 1)
0N/A op = OPTION.MANCHESTER;
0N/A }
0N/A out = new BufferedWriter(new OutputStreamWriter(System.out));
0N/A }
0N/A
0N/A /* Load an ontology from a physical IRI */
0N/A IRI physicalIRI = IRI.create(args[0]);
0N/A
0N/A // Now do the loading
0N/A OWLOntology ontology = manager.loadOntologyFromOntologyDocument(physicalIRI);
0N/A getImportsList(ontology, manager);
0N/A
0N/A if (loadedImportsList.size() == 0)
0N/A parsing_option(ontology, out, manager);
0N/A else {
0N/A if(importsIRI.contains(ontology.getOntologyID().getOntologyIRI())) {
0N/A importsIRI.remove(importsIRI.lastIndexOf(ontology.getOntologyID().getOntologyIRI()));
0N/A }
642N/A if(loadedImportsList.contains(ontology)) {
642N/A
642N/A OWLOntologyManager mng = OWLManager.createOWLOntologyManager();
642N/A OWLOntologyMerger merger = new OWLOntologyMerger(manager);
642N/A
642N/A String str = ontology.getOntologyID().getOntologyIRI().toQuotedString();
642N/A String notag = str.replaceAll("\\<","");
642N/A
642N/A notag = notag.replaceAll("\\>","");
642N/A notag = notag.replaceAll("\\[.*?]","");
642N/A notag = notag.replaceAll("Ontology\\(","");
642N/A notag = notag.replaceAll(" ","");
642N/A notag = notag.replaceAll("\\)","");
2597N/A
2597N/A loadedImportsList.remove(loadedImportsList.indexOf(ontology));
2597N/A Object aux[] = loadedImportsList.toArray();
2597N/A
2597N/A String merged_name = "";
2597N/A
2597N/A for (Object it : aux) {
2597N/A Object aux_ont = it;
0N/A String mrg = aux_ont.toString();
0N/A mrg = mrg.replaceAll("\\>","");
481N/A mrg = mrg.replaceAll("http:/","");
0N/A mrg = mrg.replaceAll("\\/.*?/","");
0N/A mrg = mrg.replaceAll(".*?/","");
0N/A mrg = mrg.replaceAll("\\[.*?]","");
0N/A mrg = mrg.replaceAll("\\)","");
0N/A mrg = mrg.replaceAll(" ","");
0N/A merged_name = merged_name + mrg;
0N/A }
0N/A
0N/A merged_name = notag + merged_name;
0N/A
0N/A IRI mergedOntologyIRI = IRI.create(merged_name);
0N/A OWLOntology merged = merger.createMergedOntology(manager, mergedOntologyIRI);
0N/A
0N/A ManchesterOWLSyntaxRenderer rendi = new ManchesterOWLSyntaxRenderer (manager);
0N/A parsing_option(ontology, out, manager);
0N/A }
0N/A else
0N/A parseZeroImports(out, ontology);
0N/A }
0N/A } catch (IOException e) {
0N/A System.err.println("Error: can not build file: " + filename);
0N/A e.printStackTrace();
0N/A } catch (Exception ex) {
0N/A System.err.println("OWL parse error: " + ex.getMessage());
0N/A ex.printStackTrace();
0N/A }
0N/A }
0N/A
0N/A private static void getImportsList(OWLOntology ontology,
0N/A OWLOntologyManager om) {
0N/A
0N/A List<OWLOntology> empty = Collections.emptyList();
0N/A List<OWLOntology> l = new ArrayList<OWLOntology>();
0N/A ArrayList<OWLOntology> unSavedImports = new ArrayList<OWLOntology>();
0N/A
0N/A try {
0N/A if (om.getDirectImports(ontology).isEmpty()) {
0N/A m.put(ontology,empty);
0N/A }
0N/A else {
0N/A List<OWLOntology> srt = new ArrayList<OWLOntology>();
0N/A for (OWLOntology imported : om.getDirectImports(ontology)) {
0N/A if (!importsIRI.contains(imported.getOntologyID().getOntologyIRI())) {
0N/A unSavedImports.add(imported);
0N/A loadedImportsList.add(imported);
0N/A importsIRI.add(imported.getOntologyID().getOntologyIRI());
0N/A l.add(imported);
0N/A }
0N/A }
0N/A }
0N/A m.put(ontology,l);
0N/A for (OWLOntology onto : unSavedImports) {
0N/A getImportsList(onto, om);
0N/A }
0N/A
0N/A } catch (Exception e) {
0N/A System.err.println("Error getImportsList!");
0N/A e.printStackTrace();
0N/A }
0N/A }
0N/A
0N/A private static void parseZeroImports(BufferedWriter out, OWLOntology ontology) {
1080N/A List all = getKeysByValue();
1080N/A ListIterator it = all.listIterator();
0N/A ListIterator itr = all.listIterator();
0N/A
0N/A while(itr.hasNext()) {
0N/A OWLOntology ontos = (OWLOntology)itr.next();
0N/A expanded.add(ontos);
0N/A parsing_option(ontos, out, ontos.getOWLOntologyManager());
0N/A s.add(ontos);
0N/A parseImports(out, ontology);
0N/A }
0N/A }
0N/A
0N/A
0N/A public static void parseImports(BufferedWriter out, OWLOntology ontology) {
0N/A
0N/A Iterator iter = m.entrySet().iterator();
0N/A while (iter.hasNext()) {
0N/A
0N/A Map.Entry pairs = (Map.Entry)iter.next();
0N/A Set values = new HashSet<OWLOntology>();
0N/A List ls = new ArrayList<OWLOntology>();
0N/A ls.add(pairs.getValue());
0N/A List l = new ArrayList<OWLOntology>();
0N/A l = (List)ls.get(0);
642N/A values = cnvrt(l);
642N/A OWLOntology onto = (OWLOntology)pairs.getKey();
642N/A
0N/A if(checkset(values)) {
0N/A if (!expanded.contains(onto))
0N/A {
113N/A parsing_option (onto, out, onto.getOWLOntologyManager());
0N/A expanded.add(onto);
0N/A s.add((OWLOntology)pairs.getKey());
0N/A if (onto.getOntologyID().toString().equals(ontology.getOntologyID().toString()))
0N/A System.exit(0);
0N/A
0N/A parseImports(out, ontology);
0N/A }
0N/A }
0N/A }
0N/A }
0N/A
0N/A public static Set cnvrt(List lst) {
0N/A
0N/A Set st = new HashSet<OWLOntology>();
0N/A Iterator it = lst.iterator();
0N/A
0N/A if (lst.size() == 0)
0N/A return st;
0N/A
0N/A while(it.hasNext()) {
0N/A OWLOntology aux_ont = (OWLOntology)it.next();
0N/A st.add(aux_ont);
0N/A }
0N/A return st;
0N/A }
0N/A
0N/A public static Boolean checkset(Collection it) {
0N/A
0N/A if (it.isEmpty()) return false;
0N/A Set<OWLOntology> aux = new HashSet<OWLOntology>();
0N/A aux.addAll(it);
0N/A return equalcollections(aux, s);
0N/A }
0N/A
0N/A public static Boolean equalcollections(Set<OWLOntology> l1, Set<OWLOntology> l2) {
0N/A Boolean eq = true;
0N/A
0N/A if(l1.isEmpty() || l2.isEmpty())
0N/A eq = false;
0N/A
0N/A for (OWLOntology ont: l1)
0N/A if (!l2.contains(ont))
0N/A eq = false;
0N/A return eq;
0N/A }
0N/A
0N/A public static List getKeysByValue() {
0N/A List keys = new ArrayList<OWLOntology>();
0N/A Iterator it = m.entrySet().iterator();
0N/A while(it.hasNext()) {
0N/A Map.Entry pairs = (Map.Entry)it.next();
0N/A if(pairs.getValue().toString().equals("[]")) {
0N/A keys.add(pairs.getKey());
0N/A }
0N/A }
0N/A return keys;
0N/A }
0N/A
0N/A public static void parsing_option(OWLOntology onto, BufferedWriter out, OWLOntologyManager mng) {
0N/A switch (op) {
0N/A case OWL_XML: parse2xml(onto, out, mng); break;
0N/A case MANCHESTER: parse(onto, out); break;
0N/A case RDF_XML: parse2rdf(onto, out, mng); break;
0N/A }
0N/A }
0N/A
0N/A public static void parse(OWLOntology onto, BufferedWriter out) {
0N/A try {
0N/A ManchesterOWLSyntaxRenderer rendi = new ManchesterOWLSyntaxRenderer (onto.getOWLOntologyManager());
0N/A rendi.render(onto,out);
0N/A } catch(OWLRendererException ex) {
0N/A System.err.println("Error by ManchesterParser!");
0N/A ex.printStackTrace();
0N/A }
0N/A }
0N/A
0N/A public static void parse2xml(OWLOntology onto, BufferedWriter out, OWLOntologyManager mng) {
2062N/A try {
2062N/A OWLXMLRenderer ren = new OWLXMLRenderer(mng);
0N/A ren.render(onto,out);
0N/A } catch (OWLRendererException ex) {
0N/A System.err.println("Error by XMLParser!");
0N/A ex.printStackTrace();
0N/A }
0N/A }
0N/A
0N/A public static void parse2rdf(OWLOntology onto, BufferedWriter out, OWLOntologyManager mng) {
0N/A try {
0N/A RDFXMLRenderer rdfrend = new RDFXMLRenderer(mng, onto, out);
0N/A rdfrend.render();
0N/A } catch (IOException ex) {
0N/A System.err.println("Error by RDFParser!");
0N/A ex.printStackTrace();
0N/A }
0N/A }
0N/A}
0N/A