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    }