├── README ├── pom.xml └── src └── main └── java └── org └── acaro └── dbpedia4neo ├── inserter ├── DBpediaLoader.java └── TripleHandler.java └── web ├── Main.java └── QueryHandler.java /README: -------------------------------------------------------------------------------- 1 | A set of hacks to setup a dbpedia endpoint through neo4j 2 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | org.acaro.dbpedia4neo 5 | dbpedia4neo 6 | jar 7 | 1.0-SNAPSHOT 8 | 9 | 7.2.2.v20101205 10 | 11 | dbpedia4neo 12 | http://maven.apache.org 13 | 14 | 15 | 16 | org.apache.maven.plugins 17 | maven-eclipse-plugin 18 | 2.5 19 | 20 | true 21 | true 22 | true 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-compiler-plugin 28 | 2.3.2 29 | 30 | 1.6 31 | 1.6 32 | 33 | 34 | 35 | 36 | 37 | 38 | com.tinkerpop.blueprints 39 | blueprints-graph-sail 40 | 0.7 41 | 42 | 43 | com.tinkerpop.blueprints 44 | blueprints-sail-graph 45 | 0.7 46 | 47 | 48 | com.tinkerpop.blueprints 49 | blueprints-neo4j-graph 50 | 0.7 51 | 52 | 53 | junit 54 | junit 55 | 3.8.1 56 | test 57 | 58 | 59 | org.openrdf.sesame 60 | sesame-rio-ntriples 61 | 2.3.2 62 | 63 | 64 | org.openrdf.sesame 65 | sesame-repository-api 66 | 2.3.2 67 | 68 | 69 | org.openrdf.sesame 70 | sesame-repository-sail 71 | 2.3.2 72 | 73 | 74 | org.slf4j 75 | slf4j-api 76 | 1.5.6 77 | 78 | 79 | org.slf4j 80 | slf4j-jdk14 81 | 1.5.6 82 | 83 | 84 | org.slf4j 85 | jcl-over-slf4j 86 | 1.5.6 87 | 88 | 89 | org.openrdf.sesame 90 | sesame-queryparser-sparql 91 | 2.3.2 92 | 93 | 94 | org.eclipse.jetty 95 | jetty-server 96 | ${jettyVersion} 97 | 98 | 99 | org.eclipse.jetty 100 | jetty-servlet 101 | ${jettyVersion} 102 | 103 | 104 | org.eclipse.jetty 105 | jetty-websocket 106 | ${jettyVersion} 107 | 108 | 109 | commons-lang 110 | commons-lang 111 | 2.5 112 | 113 | 114 | 115 | 116 | tinkerpop-repository 117 | TinkerPop Maven2 Repository 118 | http://tinkerpop.com/maven2 119 | 120 | true 121 | always 122 | 123 | 124 | 125 | neo4j repo 126 | neo4j repo 127 | http://m2.neo4j.org/snapshots/ 128 | 129 | 130 | openrdf 131 | openrdf 132 | http://repo.aduna-software.org/maven2/releases/ 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /src/main/java/org/acaro/dbpedia4neo/inserter/DBpediaLoader.java: -------------------------------------------------------------------------------- 1 | package org.acaro.dbpedia4neo.inserter; 2 | 3 | import java.io.BufferedInputStream; 4 | import java.io.File; 5 | import java.io.FileInputStream; 6 | import java.io.FileNotFoundException; 7 | import java.io.IOException; 8 | 9 | import org.openrdf.model.ValueFactory; 10 | import org.openrdf.rio.ParseErrorListener; 11 | import org.openrdf.rio.RDFHandlerException; 12 | import org.openrdf.rio.RDFParseException; 13 | import org.openrdf.rio.ntriples.NTriplesParser; 14 | import org.openrdf.sail.Sail; 15 | import org.openrdf.sail.SailConnection; 16 | import org.openrdf.sail.SailException; 17 | 18 | import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jGraph; 19 | import com.tinkerpop.blueprints.pgm.oupls.sail.GraphSail; 20 | import com.tinkerpop.blueprints.pgm.util.TransactionalGraphHelper; 21 | import com.tinkerpop.blueprints.pgm.util.TransactionalGraphHelper.CommitManager; 22 | 23 | public class DBpediaLoader 24 | { 25 | public static void main( String[] args ) 26 | throws SailException, RDFParseException, RDFHandlerException, FileNotFoundException, IOException 27 | { 28 | Neo4jGraph neo = new Neo4jGraph("dbpedia4neo"); 29 | Sail sail = new GraphSail(neo); 30 | CommitManager manager = TransactionalGraphHelper.createCommitManager(neo, 10000); 31 | 32 | for (String file: args) { 33 | System.out.println("Loading " + file + ": "); 34 | loadFile(file, sail.getConnection(), sail.getValueFactory(), manager); 35 | System.out.print('\n'); 36 | } 37 | manager.close(); 38 | sail.shutDown(); 39 | } 40 | 41 | private static void loadFile(final String file, SailConnection sc, ValueFactory vf, CommitManager manager) throws RDFParseException, RDFHandlerException, FileNotFoundException, IOException { 42 | NTriplesParser parser = new NTriplesParser(vf); 43 | TripleHandler handler = new TripleHandler(sc, manager); 44 | parser.setRDFHandler(handler); 45 | parser.setStopAtFirstError(false); 46 | parser.setParseErrorListener(new ParseErrorListener() { 47 | 48 | @Override 49 | public void warning(String msg, int lineNo, int colNo) { 50 | System.err.println("warning: " + msg); 51 | System.err.println("file: " + file + " line: " + lineNo + " column: " +colNo); 52 | } 53 | 54 | @Override 55 | public void error(String msg, int lineNo, int colNo) { 56 | System.err.println("error: " + msg); 57 | System.err.println("file: " + file + " line: " + lineNo + " column: " +colNo); 58 | } 59 | 60 | @Override 61 | public void fatalError(String msg, int lineNo, int colNo) { 62 | System.err.println("fatal: " + msg); 63 | System.err.println("file: " + file + " line: " + lineNo + " column: " +colNo); 64 | } 65 | 66 | }); 67 | parser.parse(new BufferedInputStream(new FileInputStream(new File(file))), "http://dbpedia.org/"); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/org/acaro/dbpedia4neo/inserter/TripleHandler.java: -------------------------------------------------------------------------------- 1 | package org.acaro.dbpedia4neo.inserter; 2 | 3 | import org.openrdf.model.Statement; 4 | import org.openrdf.rio.RDFHandler; 5 | import org.openrdf.rio.RDFHandlerException; 6 | import org.openrdf.sail.SailConnection; 7 | import org.openrdf.sail.SailException; 8 | 9 | import com.tinkerpop.blueprints.pgm.util.TransactionalGraphHelper.CommitManager; 10 | 11 | public class TripleHandler implements RDFHandler { 12 | private SailConnection sc; 13 | private CommitManager manager; 14 | 15 | public TripleHandler(SailConnection sc, CommitManager manager) { 16 | this.sc = sc; 17 | this.manager = manager; 18 | } 19 | 20 | public void handleComment(String arg0) throws RDFHandlerException { 21 | } 22 | 23 | public void handleNamespace(String arg0, String arg1) 24 | throws RDFHandlerException { 25 | } 26 | 27 | public void handleStatement(Statement arg0) { 28 | 29 | try { 30 | // avoid self-cycles 31 | if (arg0.getSubject().stringValue().equals(arg0.getObject().stringValue())) 32 | return; 33 | 34 | sc.addStatement(arg0.getSubject(), arg0.getPredicate(), arg0.getObject()); 35 | manager.incrCounter(); 36 | if (manager.atCommit()) 37 | System.out.print("."); 38 | } catch (SailException e) { 39 | e.printStackTrace(); 40 | } catch (Exception e) { 41 | e.printStackTrace(); 42 | System.out.println("Subject: " + arg0.getSubject().toString() + 43 | " Predicate: " + arg0.getPredicate().toString() + 44 | " Object: " + arg0.getObject().toString()); 45 | } 46 | } 47 | 48 | public void startRDF() throws RDFHandlerException { 49 | } 50 | 51 | public void endRDF() throws RDFHandlerException { 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/org/acaro/dbpedia4neo/web/Main.java: -------------------------------------------------------------------------------- 1 | package org.acaro.dbpedia4neo.web; 2 | 3 | import org.eclipse.jetty.server.Server; 4 | import org.eclipse.jetty.servlet.ServletContextHandler; 5 | import org.eclipse.jetty.servlet.ServletHolder; 6 | 7 | import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jGraph; 8 | import com.tinkerpop.blueprints.pgm.impls.sail.SailGraph; 9 | import com.tinkerpop.blueprints.pgm.oupls.sail.GraphSail; 10 | 11 | public class Main { 12 | public static void main(String[] args) throws Exception { 13 | 14 | final Server server = new Server(8081); 15 | final Neo4jGraph neo = new Neo4jGraph("dbpedia4neo"); 16 | final GraphSail gsail = new GraphSail(neo); 17 | final SailGraph sail = new SailGraph(gsail); 18 | 19 | ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 20 | context.setContextPath("/"); 21 | server.setHandler(context); 22 | 23 | // set the query handler 24 | context.addServlet(new ServletHolder(new QueryHandler(sail)), "/query"); 25 | 26 | // we need a clean shutdown 27 | Runtime.getRuntime().addShutdownHook(new Thread() { 28 | @Override 29 | public void run() { 30 | try { 31 | System.out.println("Shutting down..."); 32 | server.stop(); 33 | sail.shutdown(); 34 | } catch (Exception e) { 35 | e.printStackTrace(); 36 | } 37 | } 38 | }); 39 | // start the server 40 | server.start(); 41 | server.join(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/org/acaro/dbpedia4neo/web/QueryHandler.java: -------------------------------------------------------------------------------- 1 | package org.acaro.dbpedia4neo.web; 2 | 3 | import javax.servlet.http.HttpServlet; 4 | import javax.servlet.http.HttpServletRequest; 5 | import javax.servlet.http.HttpServletResponse; 6 | 7 | import org.apache.commons.lang.StringEscapeUtils; 8 | 9 | import com.tinkerpop.blueprints.pgm.Vertex; 10 | import com.tinkerpop.blueprints.pgm.impls.sail.SailGraph; 11 | 12 | import java.io.IOException; 13 | import java.io.PrintWriter; 14 | import java.util.List; 15 | import java.util.Map; 16 | import java.util.Map.Entry; 17 | 18 | @SuppressWarnings("serial") 19 | public class QueryHandler extends HttpServlet { 20 | private static final String FORM = "

Type in your query:


" + 21 | "
" + 22 | "" + 23 | "" + 24 | "
"; 25 | private static final String QUERY = "This was your query: %s
"; 26 | private static final String HEADER = "%s"; 27 | private static final String FOOTER = ""; 28 | private SailGraph sail; 29 | 30 | protected QueryHandler(SailGraph sail) { 31 | this.sail = sail; 32 | } 33 | 34 | // get will just return the input form 35 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 36 | PrintWriter writer = resp.getWriter(); 37 | 38 | printHeader(writer, "DBPediaWebShell"); 39 | printForm(writer, req.getRequestURI()); 40 | printFooter(writer); 41 | } 42 | 43 | // post will parse the query, run it and return its results 44 | protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { 45 | PrintWriter writer = resp.getWriter(); 46 | 47 | printHeader(writer, "DBPediaWebShell"); 48 | String query; 49 | if ((query = req.getParameter("query")) != null) 50 | printQuery(writer, query); 51 | 52 | try { 53 | double start = System.currentTimeMillis(); 54 | List> results = sail.executeSparql(query); 55 | printResults(writer, results, System.currentTimeMillis()-start); 56 | } catch (RuntimeException e) { 57 | writer.write(e.getMessage()); 58 | e.printStackTrace(writer); 59 | } 60 | printForm(writer, req.getRequestURI()); 61 | printFooter(writer); 62 | } 63 | 64 | private void printQuery(PrintWriter writer, String query) { 65 | writer.write(String.format(QUERY, escapeHtml(query))); 66 | } 67 | 68 | private void printResults(PrintWriter writer, List> results, double time) { 69 | writer.write(results.size() + " results in " + time + "ms.
"); 70 | for (Map result: results) { 71 | for (Entry r: result.entrySet()) { 72 | writer.write(escapeHtml(r.getKey()) + " => "); 73 | writer.write(escapeHtml((String) r.getValue().getId())); 74 | writer.write("
"); 75 | } 76 | } 77 | } 78 | 79 | private void printHeader(PrintWriter writer, String title) { 80 | writer.write(String.format(HEADER, title)); 81 | } 82 | 83 | private void printFooter(PrintWriter writer) { 84 | writer.write(FOOTER); 85 | } 86 | 87 | private void printForm(PrintWriter writer, String action) { 88 | writer.write(String.format(FORM, action)); 89 | } 90 | 91 | private String escapeHtml(String str) { 92 | return StringEscapeUtils.escapeHtml(str); 93 | } 94 | } 95 | --------------------------------------------------------------------------------