# HG changeset patch # User casties # Date 1338492750 -7200 # Node ID bd414fe235b56f3eb7783aec7425b810b0fe464c # Parent e5f5848892a2f438c3ea48040b641633a907f5b5 now with 100% better sparql. diff -r e5f5848892a2 -r bd414fe235b5 src/main/java/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java --- a/src/main/java/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java Thu May 31 19:08:48 2012 +0200 +++ b/src/main/java/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java Thu May 31 21:32:30 2012 +0200 @@ -18,6 +18,22 @@ private Logger logger = Logger.getRootLogger(); + static final String baseGraph = " ?annotation <" + NS.RDF_NS + "type> <" + NS.OAC_NS + "Annotation>." + + " ?annotation <" + NS.OAC_NS + "hasTarget> ?target." + + " ?annotation <" + NS.OAC_NS + "hasBody> ?body." + + " ?annotation <" + NS.DCTERMS_NS + "creator> ?creator." + + " ?annotation <" + NS.DCTERMS_NS + "created> ?created." + + " ?body <" + NS.CNT_NS + "chars> ?text." + + " ?target <" + NS.DCTERMS_NS + "isPartOf> ?uri."; + static final String optGraph = " OPTIONAL { ?body <" + NS.RDF_NS + "type> <" + NS.OAC_NS + "Body>}" + + " OPTIONAL { ?body <" + NS.RDF_NS + "type> <" + NS.CNT_NS + "ContentAsText>}" + + " OPTIONAL { ?target <" + NS.RDF_NS + "type> <" + NS.OAC_NS + "Target>}"; + static final String nonOptGraph = " ?body <" + NS.RDF_NS + "type> <" + NS.OAC_NS + "Body>." + + " ?body <" + NS.RDF_NS + "type> <" + NS.CNT_NS + "ContentAsText>." + + " ?target <" + NS.RDF_NS + "type> <" + NS.OAC_NS + "Target>."; + + static final String annotGraph = baseGraph + optGraph; + public RDFSearcher(String context) { this.context = context; } @@ -38,7 +54,6 @@ List retAnnots = new ArrayList(); TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); String queryString = ""; - // query for tuples with id as subject StringBuilder whereString = new StringBuilder(); whereString.append(String.format("<%s> ?target.", id)); whereString.append("?target ?uri."); @@ -46,7 +61,7 @@ whereString.append("?body ?bodyText."); whereString.append(String.format("<%s> ?userUrl.", id)); whereString.append(String.format("<%s> ?creationDate", id)); - + /* * StringBuilder whereString = new * StringBuilder(String.format("<%s> ?p .", id)); @@ -113,31 +128,21 @@ TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); String queryString = ""; - String whereString = "?s ?p ."; - // whereString +="?s ?link."; + String whereString = annotGraph; if (uri != null && !uri.equals("")) { - whereString = String.format("?target <%s>.", uri); - } else { - whereString = "?target ?uri."; + whereString += String.format("FILTER (?uri = <%s>)", uri); } - whereString += "?annotation ?target."; - whereString += "?annotation ?body."; - whereString += "?body ?bodyText."; if (user != null && !user.equals("")) { if (user.startsWith("http")) { - whereString += String.format("?annotation <%s>", user); + whereString += String.format("FILTER (?creator = <%s>)", user); } else { - whereString += String.format("?annotation \"%s\".", user); + whereString += String.format("FILTER (?creator = \"%s\")", user); } - } else { - whereString += "?annotation ?userUrl."; } - whereString += "?annotation ?creationDate"; - - queryString = String.format("select * from <%s> where {%s}", context, whereString); + queryString = String.format("SELECT * FROM <%s> WHERE {%s}", context, whereString); logger.debug("RDFSearcher:" + queryString); @@ -152,20 +157,18 @@ } else { annotatedUri = result.getBinding("uri").getValue().stringValue(); } - String annotUser; if (user != null && !user.equals("")) { annotUser = user; } else { - annotUser = result.getBinding("userUrl").getValue().stringValue(); + annotUser = result.getBinding("creator").getValue().stringValue(); } - String textString = ""; - if (result.getBinding("bodyText") != null) { - textString = result.getBinding("bodyText").getValue().stringValue(); + if (result.getBinding("text") != null) { + textString = result.getBinding("text").getValue().stringValue(); } String xpointer = result.getBinding("target").getValue().stringValue(); - String time = result.getBinding("creationDate").getValue().stringValue(); + String time = result.getBinding("created").getValue().stringValue(); String annotationUri = result.getBinding("annotation").getValue().stringValue(); Annotation annot = new Annotation(xpointer, annotUser, time, textString, null, annotatedUri, annotationUri); retAnnots.add(annot); @@ -188,7 +191,8 @@ * wish Virtuoso would speak SparQL1.1... String queryString = * String.format("WITH <%s> DELETE { <%s> ?p ?o } WHERE { <%s> ?p ?o }", context, id, id); */ - String queryString = String.format("DELETE FROM <%s> { <%s> ?p ?o } WHERE { <%s> ?p ?o }", context, id, id); + String whereString = annotGraph + String.format(" FILTER(?annotation = <%s>)", id); + String queryString = String.format("DELETE FROM <%s> {%s} WHERE {%s}", context, baseGraph+nonOptGraph, whereString); logger.debug("RDFSearcher:" + queryString); @@ -199,93 +203,6 @@ throw new TripleStoreSearchError(); } } - /** - * Sucht im Triplestore nach Annotationen - * - * @param uri - * Adresse der Annotierten Ressource, in der Regel nicht mit dem xpointer, sonder die URI der kompletten Ressource - * oder NULL oder leer - * @param user - * Author der Annotationen, entweder als uri der Person oder ein Username, je nachdem wie die Annotatinen angelegt - * wurden. - * @param limit - * @param offset - * @return - * @throws TripleStoreHandlerException - * @throws TripleStoreSearchError - */ - public List searchByUriUserAlt(String uri, String user, String limit, String offset) - throws TripleStoreHandlerException, TripleStoreSearchError { - List retAnnots = new ArrayList(); - TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); - String queryString = ""; - - String whereString = "?s ?p ."; - // whereString +="?s ?link."; - - if (uri != null && !uri.equals("")) { - whereString += String.format("?s <%s>.", - uri); - } else { - whereString += String.format("?s ?uri."); - } - whereString += String.format("?s ?xpointer."); - whereString += String.format("?s ?annotText."); - - if (user != null && !user.equals("")) { - if (user.startsWith("http")) { - whereString += String.format("?s <%s>.", user); - } else { - whereString += String.format("?s \"%s\".", user); - } - } else { - whereString += String.format("?s ?author."); - } - - whereString += String.format("?s ?created."); - - whereString += String - .format(" OPTIONAL {?annotText ?text.}"); - - queryString = String.format("select distinct * where {%s}", whereString); - - logger.debug("RDFSearcher:" + queryString); - - try { - TupleQueryResult results = th.querySPARQL(queryString); - - while (results.hasNext()) { - BindingSet result = results.next(); - String annotUri; - if (uri != null && !uri.equals("")) { - annotUri = uri; - } else { - annotUri = result.getBinding("uri").getValue().stringValue(); - } - - String annotUser; - if (user != null && !user.equals("")) { - annotUser = user; - } else { - annotUser = result.getBinding("author").getValue().stringValue(); - } - - String textString = ""; - if (result.getBinding("text") != null) { - textString = result.getBinding("text").getValue().stringValue(); - } - Annotation annot = new Annotation(result.getBinding("xpointer").getValue().stringValue(), annotUser, result - .getBinding("created").getValue().stringValue(), textString, null, annotUri, result.getBinding("s") - .getValue().stringValue()); - retAnnots.add(annot); - } - } catch (Exception e) { - e.printStackTrace(); - throw new TripleStoreSearchError(); - } - // TODO Auto-generated method stub - return retAnnots; - } }