private void verbModel(Model model, String verb) { Model m = ModelFactory.createDefaultModel(); int testLimit = 1000; StmtIterator stmtIt = model.listStatements(); int count = 0; try { while (stmtIt.hasNext()) { count++; m.add(stmtIt.nextStatement()); if (count % testLimit == 0 || !stmtIt.hasNext()) { StringWriter sw = new StringWriter(); m.write(sw, "N-TRIPLE"); StringBuffer updateStringBuff = new StringBuffer(); String graphURI = graph.getGraphURI(); updateStringBuff.append( verb + " DATA { " + ((graphURI != null) ? "GRAPH <" + graphURI + "> { " : "")); updateStringBuff.append(sw); updateStringBuff.append(((graphURI != null) ? " } " : "") + " }"); String updateString = updateStringBuff.toString(); // log.info(updateString); graph.executeUpdate(updateString); m.removeAll(); } } } finally { stmtIt.close(); } }
@Override public Iterator<Quad> find(Node graph, Node subject, Node predicate, Node object) { if (!isVar(subject) && !isVar(predicate) && !isVar(object) && !isVar(graph)) { if (contains(subject, predicate, object, graph)) { return new SingletonIterator(new Triple(subject, predicate, object)); } else { return WrappedIterator.create(Collections.EMPTY_LIST.iterator()); } } StringBuffer findQuery = new StringBuffer("SELECT * WHERE { \n"); String graphURI = !isVar(graph) ? graph.getURI() : null; findQuery.append(" GRAPH "); if (graphURI != null) { findQuery.append(" <" + graphURI + ">"); } else { findQuery.append("?g"); } findQuery.append(" { "); findQuery .append(SparqlGraph.sparqlNode(subject, "?s")) .append(" ") .append(SparqlGraph.sparqlNode(predicate, "?p")) .append(" ") .append(SparqlGraph.sparqlNode(object, "?o")); findQuery.append(" } "); findQuery.append("\n}"); // log.info(findQuery.toString()); ResultSet rs = null; try { rs = JSONInput.fromJSON( rdfService.sparqlSelectQuery(findQuery.toString(), RDFService.ResultFormat.JSON)); } catch (RDFServiceException rdfse) { throw new RuntimeException(rdfse); } List<Quad> quadlist = new ArrayList<Quad>(); while (rs.hasNext()) { QuerySolution soln = rs.nextSolution(); Quad q = new Quad( isVar(graph) ? soln.get("?g").asNode() : graph, isVar(subject) ? soln.get("?s").asNode() : subject, isVar(predicate) ? soln.get("?p").asNode() : predicate, isVar(object) ? soln.get("?o").asNode() : object); // log.info(t); quadlist.add(q); } // log.info(triplist.size() + " results"); return WrappedIterator.create(quadlist.iterator()); }
@Override public void delete(Graph g) { Model[] model = separateStatementsWithBlankNodes(g); deleteModel(model[1] /*statements without blank nodes*/); // replace blank nodes in remaining statements with variables StringBuffer patternBuff = new StringBuffer(); Iterator<Triple> tripIt = g.find(null, null, null); while (tripIt.hasNext()) { Triple t = tripIt.next(); patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getSubject(), null)); patternBuff.append(" "); patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getPredicate(), null)); patternBuff.append(" "); patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getObject(), null)); patternBuff.append(" .\n"); } StringBuffer queryBuff = new StringBuffer(); String graphURI = graph.getGraphURI(); queryBuff.append( "DELETE { " + ((graphURI != null) ? "GRAPH <" + graphURI + "> { " : "") + " \n"); queryBuff.append(patternBuff); if (graphURI != null) { queryBuff.append(" } \n"); } queryBuff.append("} WHERE { \n"); if (graphURI != null) { queryBuff.append(" GRAPH <" + graphURI + "> { \n"); } queryBuff.append(patternBuff); if (graphURI != null) { queryBuff.append(" } \n"); } queryBuff.append("} \n"); log.debug(queryBuff.toString()); graph.executeUpdate(queryBuff.toString()); }
public static void removeAll(Graph g) { ExtendedIterator<Triple> it = GraphUtil.findAll(g); try { while (it.hasNext()) { Triple t = it.next(); g.delete(t); it.remove(); } } finally { it.close(); } // get rid of remaining blank nodes using a SPARQL DELETE if (g instanceof SparqlGraph) { ((SparqlGraph) g).removeAll(); } }