fixing bugs related to deletion of graphs containing blank nodes

This commit is contained in:
brianjlowe 2012-06-20 18:36:49 +00:00
parent f5a39b1148
commit d1336f05b2
2 changed files with 7 additions and 16 deletions

View file

@ -202,11 +202,14 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
log.warn("This likely indicates a problem; excessive data may be deleted.");
}
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s } FILTER (!bound(?ss)) }";
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s FILTER(!isBlank(?ss)) } FILTER (!bound(?ss)) }";
Query rootFinderQuery = QueryFactory.create(rootFinder);
QueryExecution qe = QueryExecutionFactory.create(rootFinderQuery, blankNodeModel);
try {
ResultSet rs = qe.execSelect();
if (!rs.hasNext()) {
log.warn("No rooted blank node trees; deletion is not possible.");
}
while (rs.hasNext()) {
QuerySolution qs = rs.next();
Resource s = qs.getResource("s");
@ -268,7 +271,6 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
private void removeUsingSparqlUpdate(Dataset dataset, Model model, String graphURI) {
StringBuffer patternBuff = new StringBuffer();
StmtIterator stmtIt = model.listStatements();
if (!stmtIt.hasNext()) {
@ -276,16 +278,6 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
return;
}
while(stmtIt.hasNext()) {
Triple t = stmtIt.next().asTriple();
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();
queryBuff.append("CONSTRUCT { \n");
addStatementPatterns(stmtIt, queryBuff, !WHERE_CLAUSE);
@ -294,13 +286,13 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
queryBuff.append(" GRAPH <" + graphURI + "> { \n");
}
stmtIt = model.listStatements();
addStatementPatterns(stmtIt, queryBuff, !WHERE_CLAUSE);
addStatementPatterns(stmtIt, queryBuff, WHERE_CLAUSE);
if (graphURI != null) {
queryBuff.append(" } \n");
}
queryBuff.append("} \n");
//log.debug(queryBuff.toString());
log.debug(queryBuff.toString());
Query construct = QueryFactory.create(queryBuff.toString());
// make a plain dataset to force the query to be run in a way that

View file

@ -568,7 +568,7 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService {
log.warn("This likely indicates a problem; excessive data may be deleted.");
}
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s } FILTER (!bound(?ss)) }";
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s FILTER(!isBlank(?ss)) } FILTER (!bound(?ss)) }";
Query rootFinderQuery = QueryFactory.create(rootFinder);
QueryExecution qe = QueryExecutionFactory.create(rootFinderQuery, blankNodeModel);
try {
@ -618,7 +618,6 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService {
private void removeUsingSparqlUpdate(Model model, String graphURI) {
StmtIterator stmtIt = model.listStatements();
if (!stmtIt.hasNext()) {