package org.bbaw.wsp.cms.mdsystem.metadata.rdfmanager; import java.util.Map; import java.util.Set; import org.bbaw.wsp.cms.mdsystem.metadata.general.extractor.RdfMetadataExtractor; import org.bbaw.wsp.cms.mdsystem.metadata.general.extractor.factory.MetadataExtractorFactory; import org.openjena.riot.Lang; import org.openjena.riot.RiotLoader; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSetFormatter; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.shared.PrefixMapping; import com.hp.hpl.jena.sparql.core.DatasetGraph; import com.hp.hpl.jena.update.GraphStore; import com.hp.hpl.jena.update.GraphStoreFactory; import com.hp.hpl.jena.update.UpdateExecutionFactory; import com.hp.hpl.jena.update.UpdateFactory; import com.hp.hpl.jena.update.UpdateProcessor; import com.hp.hpl.jena.update.UpdateRequest; import com.hp.hpl.jena.util.FileManager; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; public class RdfHandler { /** * * @param store * @return */ public String getAllTriples(Model model) { StringBuffer dump = new StringBuffer(); StmtIterator statements = model.listStatements(); while (statements.hasNext()) { Statement statement = statements.nextStatement(); RDFNode object = statement.getObject(); dump.append(statement.getSubject().getLocalName()) .append(' ') .append(statement.getPredicate().getLocalName()) .append(' ') .append((object instanceof Resource || object instanceof Literal ? object.toString() : '"' + object.toString() + "\"")) .append('\n'); } return dump.toString(); } /** * * * @param store * @return */ public String getAllTriplesAsDot(Model model) { StringBuffer dump = new StringBuffer(); StmtIterator statements = model.listStatements(); dump.append("digraph G { "); dump.append('\n'); dump.append("edge [len=2];"); dump.append('\n'); while (statements.hasNext()) { Statement statement = statements.nextStatement(); System.out.println("statements.nextStatement() "+statement); RDFNode object = statement.getObject(); dump.append("\"") .append(statement.getSubject().getLocalName()) .append("\" ") .append("-> \"") .append((object instanceof Resource || object instanceof Literal ? object.toString() : '"' + object.toString() + "\"")) .append("\"") .append(" [label=\"") .append(statement.getPredicate().getLocalName()) .append("\"]") .append(";") .append('\n'); } dump.append('}'); return dump.toString(); } /** * INSERT * @param store * @param queryString */ public void performUpdate(Dataset dataset, String queryString){ GraphStore graphStore = GraphStoreFactory.create(dataset) ; UpdateRequest request = UpdateFactory.create(queryString) ; UpdateProcessor proc = UpdateExecutionFactory.create(request, graphStore) ; proc.execute() ; // System.out.println("model : "+model); // System.out.println("query : "+queryString); } /** * counts triple in a defaultgraph of the dataset * @param dataset */ public void count(Dataset dataset){ QueryExecution qExec = QueryExecutionFactory.create( "SELECT (count(*) AS ?count) { ?s ?p ?o} LIMIT 10", dataset) ; ResultSet rs = qExec.execSelect() ; System.out.println(""); System.out.println("_____________triples im defaultgraph_______________"); try { ResultSetFormatter.out(rs) ; } finally { qExec.close() ; } } /** * * @param sparqlSelect * @param dataset * @return */ public QueryExecution selectSomething(String sparqlSelect, Dataset dataset){ QueryExecution queExec = QueryExecutionFactory.create(sparqlSelect, dataset) ; return queExec; } /** * fill Graph * @param store */ public Model fillModelFromFile(Model model, String loc){ Model moodel = FileManager.get().readModel(model, loc); return moodel; } /** * takes a file and scans it for the about id * * @param file * @return String as like as ID of the file */ public String scanID(final String file) { try { RdfMetadataExtractor fac = MetadataExtractorFactory.newRdfMetadataParser(file); String test = fac.getRdfAboutValue(); return test; } catch (ApplicationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public void readQuadsViaRiot(String filename, DatasetGraph dataset, Lang lang, String baseURI){ RiotLoader.read(filename, dataset, lang, baseURI); } public void readFileViaRiot(String filename, DatasetGraph dataset, Lang lang, String baseURI){ RiotLoader.read(filename, dataset, lang, baseURI); } /** * TODO * DELETE * @param store * @param queryString */ public void deleteRecord(Model model, String queryString){ GraphStore graphStore = GraphStoreFactory.create(model); queryString = "DELETE WHERE { <http://avh.bbaw.de/biblio/Aggr> ?p ?o }"; /** * PREFIX dc: <http://purl.org/dc/elements/1.1/> DELETE DATA FROM <http://example/bookStore> { <http://example/book3> dc:title "Fundamentals of Compiler Desing" } */ } /** * TODO * DELETE all */ public void deleteAll(){ /** * * DELETE { ?book ?p ?v } WHERE { ?book dc:date ?date . FILTER ( ?date < "2000-01-01T00:00:00"^^xsd:dateTime ) ?book ?p ?v } * */ } /** * TODO * copy */ public void copyRecords(){ /** * von einem namedGraph zu einem anderen * * PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> INSERT INTO <http://example/bookStore2> { ?book ?p ?v } WHERE { GRAPH <http://example/bookStore> { ?book dc:date ?date . FILTER ( ?date < "2000-01-01T00:00:00"^^xsd:dateTime ) ?book ?p ?v } } * */ } /** * TODO */ public void moveRecords(){ /** * * PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> INSERT INTO <http://example/bookStore2> { ?book ?p ?v } WHERE { GRAPH <http://example/bookStore> { ?book dc:date ?date . FILTER ( ?date < "2000-01-01T00:00:00"^^xsd:dateTime ) ?book ?p ?v } } DELETE FROM <http://example/bookStore> { ?book ?p ?v } WHERE { GRAPH <http://example/bookStore> { ?book dc:date ?date . FILTER ( ?date < "2000-01-01T00:00:00"^^xsd:dateTime ) ?book ?p ?v } } * */ } /** * Helper method that splits up a URI into a namespace and a local part. * It uses the prefixMap to recognize namespaces, and replaces the * namespace part by a prefix. * * @param prefixMap * @param resource */ public static String[] split(PrefixMapping prefixMap, Resource resource) { String uri = resource.getURI(); if (uri == null) { return new String[] {null, null}; } Map<String,String> prefixMapMap = prefixMap.getNsPrefixMap(); Set<String> prefixes = prefixMapMap.keySet(); String[] split = { null, null }; for (String key : prefixes){ String ns = prefixMapMap.get(key); if (uri.startsWith(ns)) { split[0] = key; split[1] = uri.substring(ns.length()); return split; } } split[1] = uri; return split; } // public void navigateTest(){ // // create an empty model // Model model = ModelFactory.createDefaultModel(); // // // use the FileManager to find the input file // InputStream in = FileManager.get().open(oreTest); // if (in == null) { // throw new IllegalArgumentException( "File: " + oreTest + " not found"); // } // // // read the RDF/XML file // model.read(new InputStreamReader(in), ""); // // // retrieve the Adam Smith vcard resource from the model // Resource descr = model.getResource("http://avh.bbaw.de/biblio/Aggr"); // // Resource statem = (Resource )descr.getRequiredProperty(DC.title).getObject(); // // System.out.println("statem : "+statem); // // // retrieve the value of the N property //// Resource name = (Resource) descr.getRequiredProperty(DCTerms.creator).getObject(); // // Statement s = descr.getProperty(DCTerms.creator); // System.out.println("as triple : "+s.asTriple()); // System.out.println("creator s ? : "+s.getSubject()); // System.out.println("creator p ? : "+s.getPredicate()); // System.out.println("creator o ? : "+s); // // if (s instanceof Resource) { // System.out.println("creator o ? : "+s); // } else { // // object is a literal // System.out.println(" \"" + s.toString() + "\""); // } // // // retrieve the given name property // String rights = descr.getRequiredProperty(DC.rights).getString(); // // // add two nick name properties to vcard // descr.addProperty(DCTerms.format, "PDF"); // // // set up the output // System.out.println("The rights of \"" + rights + "\" are:"); // // list the nicknames // StmtIterator iter = descr.listProperties(DCTerms.format); // while (iter.hasNext()) { // System.out.println(" " + iter.nextStatement().getObject().toString()); // } // } }