001 package org.dllearner.reasoning;
002
003 import java.io.ByteArrayOutputStream;
004 import java.io.File;
005 import java.net.MalformedURLException;
006 import java.net.URI;
007 import java.net.URISyntaxException;
008 import java.net.URL;
009
010 import javax.xml.transform.OutputKeys;
011 import javax.xml.transform.Transformer;
012 import javax.xml.transform.TransformerConfigurationException;
013 import javax.xml.transform.TransformerException;
014 import javax.xml.transform.TransformerFactory;
015 import javax.xml.transform.TransformerFactoryConfigurationError;
016 import javax.xml.transform.dom.DOMSource;
017 import javax.xml.transform.stream.StreamResult;
018
019 import org.dllearner.core.OntologyFormat;
020 import org.w3c.dom.Document;
021
022 import com.hp.hpl.jena.graph.Graph;
023 import com.hp.hpl.jena.ontology.OntModelSpec;
024 import com.hp.hpl.jena.rdf.model.Model;
025 import com.hp.hpl.jena.reasoner.dig.DIGAdapter;
026
027 public class JenaOWLDIGConverter {
028
029 public static long nrOfStatementsLastConversion = 0;
030
031 public static void main(String[] args) {
032 File file = new File("files/examples/father2.owl");
033 System.out.println(file.toURI().toString());
034
035 String tells = "";
036 try {
037 URL url = file.toURI().toURL();
038 tells = getTellsString(url, OntologyFormat.RDF_XML, new URI("kk"));
039 } catch (URISyntaxException e) {
040 e.printStackTrace();
041 } catch (MalformedURLException e) {
042 e.printStackTrace();
043 }
044 System.out.println(tells);
045 }
046
047 // returns a DIG 1.1 Tells String from an ontology file
048 // using the Jena library
049 public static String getTellsString(URL file, OntologyFormat format, URI kbURI) {
050 String tellString = "";
051
052 // Spezifikation erzeugen: OWL DL
053 OntModelSpec spec = new OntModelSpec( OntModelSpec.OWL_DL_MEM );
054 // OntModelSpec spec = new OntModelSpec( OntModelSpec.);
055
056 // Datei-String in eine URI umwandeln, falls es nicht schon eine ist
057 // (TODO: dieser Codeteil ist nicht besonders schön, man sollte besser eine
058 // generische Methode aufrufen, die testet, ob etwas eine URI ist)
059
060 String uri = file.toString();
061 // String uri = "";
062 /*
063 if(!file.toString().startsWith("file:") && !file.toString().startsWith("http:") ) {
064 try {
065 uri = file.toURI().toURL().toString();
066 } catch (MalformedURLException e) {
067 e.printStackTrace();
068 }
069 } else
070 uri = file.toString();
071 */
072
073 // Datei einlesen und in einen Jena-Graph umwandeln
074 // OntModel m = ModelFactory.createOntologyModel();
075 Model m = spec.createBaseModel();
076 String lang = "";
077 if(format.equals(OntologyFormat.RDF_XML))
078 lang = "RDF/XML";
079 else
080 lang = "N-TRIPLES";
081
082 m.read(uri,lang);
083 Graph g = m.getGraph();
084 // OntModelSpec spec = new OntModelSpec(m);
085
086 /*
087 System.out.println("JENA STATEMENTS");
088 StmtIterator it = m.listStatements();
089 while(it.hasNext()) {
090 System.out.println(it.next());
091 }
092 System.out.println(m.size());
093 */
094
095 nrOfStatementsLastConversion = m.size();
096
097 // DIGAdapter erzeugen und ein org.w3c.document generieren
098 DIGAdapter da = new DIGAdapter(spec, g);
099 // DIGConnection dc = new DIGConnection();
100 // DIGAdapter da = new DIGAdapter(spec, g, dc, m);
101 Document d = da.translateKbToDig();
102
103 // XML so modifizieren, dass KB-URI eingebaut wird
104 d.getDocumentElement().setAttribute("uri", kbURI.toString());
105
106 // XML als String erzeugen (ziemlich umständlich)
107 try {
108 // transformer erzeugen mit identity transformation
109 Transformer transformer = TransformerFactory.newInstance().newTransformer();
110 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
111 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
112 // Quelle ist das DOM-Objekt
113 DOMSource source = new DOMSource( d );
114 // Resultat ist ein OutputStream, leider kann man das Resultat nicht
115 // direkt als String bekommen
116 ByteArrayOutputStream os = new ByteArrayOutputStream();
117 StreamResult result = new StreamResult( os );
118 // Transformation ausführen
119 transformer.transform( source, result );
120 // String aus OutputStream generieren
121 tellString = os.toString();
122
123 } catch (TransformerConfigurationException e) {
124 e.printStackTrace();
125 } catch (TransformerFactoryConfigurationError e) {
126 e.printStackTrace();
127 } catch (TransformerException e) {
128 e.printStackTrace();
129 }
130
131 // System.out.println(tellString);
132
133 return tellString;
134 }
135
136 }