package org.bbaw.wsp.cms.mdsystem.metadata.rdfmanager; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.bbaw.wsp.cms.mdsystem.metadata.rdfmanager.WspRdfStore; import org.bbaw.wsp.cms.mdsystem.metadata.rdfmanager.RdfHandler; import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.query.*; public class JenaMain { /** * examples for test purposes */ static final String oreTestBriefe = "/home/juergens/WspEtc/rdfData/Briefe.rdf"; static final String oreTestSaschas = "/home/juergens/WspEtc/rdfData/AvH-Briefwechsel-Ehrenberg-sascha.rdf"; static final String oreBiblio = "/home/juergens/WspEtc/rdfData/AvHBiblio.rdf"; static final String oreBiblioNeu = "/home/juergens/WspEtc/rdfData/BiblioNeu.rdf"; private static final String ORE_EDOC = "C:/Dokumente und Einstellungen/wsp-shk1/Eigene Dateien/ParserTest/XSLTTest/outputs/eDocToRdfTest"; private static final String ORE_MODS = "C:/Dokumente und Einstellungen/wsp-shk1/Eigene Dateien/ParserTest/XSLTTest/outputs/ModsToRdfTest"; private Model model; private RdfHandler manager; private WspRdfStore wspStore; private Dataset dataset; /** * needs to be instantiated from outside e.g. org.bbaw.wsp.cms.test.TestLocal */ public JenaMain() { } public void initStore() { wspStore = new WspRdfStore(); wspStore.createStore(); wspStore.createModelFactory(); // removeAll() performed? dataset = wspStore.getDataset(); manager = new RdfHandler(); doYourWork(); } /** * call methods from here */ private void doYourWork() { // createNamedModelsFromOreSets("/home/juergens/WspEtc/rdfData/eDocToRdfTest"); // addEDocs(); // addMods(); getAllNamedModelsInDataset(); countGraphes(); dataset.close(); // model.close(); } private void countGraphes() { wspStore.openDataset(); // select all FROM QueryExecution quecExec = QueryExecutionFactory.create("SELECT (Count(Distinct(?g)) AS ?numberGraphes) { GRAPH ?g { ?s ?p ?o }}", dataset); ResultSet resu = quecExec.execSelect(); System.out.println("_____________number of graphes_______________"); try { ResultSetFormatter.out(resu); } finally { quecExec.close(); } wspStore.closeDataset(); } private void addMods() { createNamedModelsFromOreSets(ORE_MODS); } private void addEDocs() { createNamedModelsFromOreSets(ORE_EDOC); } /** * creates single namedmodel from code this should later be done by fuseki * over http * */ private void createNewModelFromSingleOre(String location) { wspStore.openDataset(); Model freshModel = wspStore.getFreshModel(); Model model = manager.fillModelFromFile(freshModel, location); String rdfAbout = manager.scanID(oreBiblioNeu); wspStore.addNamedModelToWspStore(rdfAbout, model); wspStore.closeDataset(); } /** * creates a namedmodel from code this should later be done by fuseki over * http * * @param location */ private void createNamedModelsFromOreSets(String location) { // read all mods rdf List<String> pathList = extractPathLocally(location); System.out.println("pathlist : " + pathList.size()); final long start = System.currentTimeMillis(); wspStore.openDataset(); for (String string : pathList) { Model freshsModel = wspStore.getFreshModel(); Model m = manager.fillModelFromFile(freshsModel, string); String modsRdfAbout = manager.scanID(string); wspStore.addNamedModelToWspStore(modsRdfAbout, m); } System.out.println("set read in time elapsed : " + (System.currentTimeMillis() - start) / 1000); wspStore.closeDataset(); } /** * simply prints all named Models in a dataset */ private void getAllNamedModelsInDataset(){ wspStore.openDataset(); Iterator<String> ite = dataset.listNames(); int i = 0; try { while(ite.hasNext()){ i++; String s = ite.next(); System.out.println("name : "+s); } } catch(NullPointerException e) { System.out.println("number of named models: "+i); wspStore.closeDataset(); } } // wspStore.openDataset(); // // dataset = wspStore.getDataset(); // manager.count(dataset); // Model model = dataset.getDefaultModel(); // wspStore.closeDataset(); /** * TODO */ private void createInferenceModel() { // create inference model wspStore.createInfModel(dataset.getDefaultModel()); System.out.println("infmodel : " + wspStore.getRdfsModel()); // list the nicknames StmtIterator iter = wspStore.getRdfsModel().listStatements(); while (iter.hasNext()) { System.out.println(" " + iter.nextStatement()); } } // dataset = wspStore.getDataset(); // wspStore.openDataset(); // manager.count(dataset); // wspStore.closeDataset(); // /** * try your sparql SELECT here this should later be done by fuseki over http */ private void queryPerSparqlSelect() { wspStore.openDataset(); String sparqlSelect = "PREFIX foaf:<http://xmlns.com/foaf/0.1/> SELECT ?familyName FROM NAMED <http://wsp.bbaw.de/oreTestBriefe> WHERE {?x foaf:familyName ?familyName}"; QueryExecution quExec = manager.selectSomething(sparqlSelect, dataset); // QueryExecution quExec = QueryExecutionFactory.create( // "PREFIX foaf:<http://xmlns.com/foaf/0.1/> SELECT ?familyName FROM NAMED <http://wsp.bbaw.de/oreTestBriefe> WHERE {?x foaf:familyName ?familyName}" // , dataset) ; ResultSet res = quExec.execSelect(); System.out.println(""); System.out.println("_____________check_reults_______________"); try { ResultSetFormatter.out(res); } finally { quExec.close(); } wspStore.closeDataset(); } /** * TODO still considering if we really need this */ private void reify() { // turn triples into quads wspStore.openDataset(); Model modsModel = dataset.getNamedModel("http://wsp.bbaw.de/oreTestBriefe"); StmtIterator stit = modsModel.listStatements(); while (stit.hasNext()) { Statement state = stit.next(); // System.out.println("statements : "+state); ReifiedStatement reifSt = state.createReifiedStatement("http://wsp.bbaw.de/oreTestBriefe"); System.out.println("is reified : " + state.isReified()); System.out.println("reified statement : " + reifSt.toString()); } System.out.println(manager.getAllTriples(model)); } /** * updates a namedModel */ private void updateModelBySparqlInsert() { String updateIntoNamed = "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + "INSERT DATA INTO <http://wsp.bbaw.de/oreTestBriefe>" + " { <http://www.bbaw.de/posterDh> dc:title \"Digital Knowledge Store\" } "; String updateToDefault = "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + "INSERT DATA " + " { <http://www.bbaw.de/posterDh> dc:title \"Digital Knowledge Store\" } "; wspStore.openDataset(); manager.performUpdate(dataset, updateToDefault); wspStore.closeDataset(); } /** * get all statements by sparql SELECT from a single named Graph this should * later be done by fuseki over http */ private void queryAllBySelect() { wspStore.openDataset(); // select all FROM QueryExecution quecExec = QueryExecutionFactory.create("SELECT * FROM NAMED <http://pom.bbaw.de:8085/exist/rest/db/wsp/avh/avhBib.xml> WHERE { GRAPH <http://pom.bbaw.de:8085/exist/rest/db/wsp/avh/avhBib.xml> { ?s ?p ?o } }", dataset); ResultSet resu = quecExec.execSelect(); System.out.println("_____________check_reults_______________"); try { ResultSetFormatter.out(resu); } finally { quecExec.close(); } wspStore.closeDataset(); } /** * same as queryAllBySelect() but without Sparql */ private void queryAllStatementsFromJenaCode() { wspStore.openDataset(); Model briefe = dataset.getNamedModel("http://wsp.bbaw.de/oreTestBriefe"); StmtIterator erator = briefe.listStatements(); while (erator.hasNext()) { Statement st = erator.next(); System.out.println("st : " + st); } wspStore.closeDataset(); } public void buildLuceneIndex() { } /** * TODO writes statement to dot format for visualization in graphviz * * @param res */ private void writeToDotLang(String res) { try { OutputStream outputStream = new FileOutputStream(new File("oreTestBriefe.dot")); Writer writer = new OutputStreamWriter(outputStream); writer.write(res); writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * helper method to get all paths from a set of rdf files * * @param startUrl * @return */ public List<String> extractPathLocally(String startUrl) { List<String> pathList = new ArrayList<String>(); // home verzeichnis pfad über system variable // String loc = System.getenv("HOME")+"/wsp/configs"; // out.println("hom variable + conf datei : "+loc); File f = new File(startUrl); // out.println("readable : "+Boolean.toString(f.canRead())); // out.println("readable : "+f.isDirectory()); if (f.isDirectory()) { File[] filelist = f.listFiles(); for (File file : filelist) { if (file.getName().toLowerCase().contains("rdf")) { if (!startUrl.endsWith("/")) { pathList.add(startUrl + "/" + file.getName()); } else { pathList.add(startUrl + file.getName()); } } } } return pathList; } }