Mercurial > hg > AnnotationManager
view src/main/java/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java @ 23:a3e324009990
now Mavenified!
removed tiny-mce javascript from html frontend.
still needs TripleStoreManager project in Eclipse.
jsontoken 1.1 has to be built manually.
author | casties |
---|---|
date | Tue, 03 Apr 2012 13:05:05 +0200 |
parents | src/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java@b0ef5c860464 |
children | b37487b756ac |
line wrap: on
line source
package de.mpiwg.itgroup.annotationManager.RDFHandling; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.openrdf.query.BindingSet; import org.openrdf.query.TupleQueryResult; import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreSearchError; import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException; import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler; public class RDFSearcher { private String urlBase = "http://ontologies.mpiwg-berlin.mpg.de/annotations/"; // TODO should go into config private String context; private Logger logger = Logger.getRootLogger(); public RDFSearcher(String context) { this.context = context; } /** * Sucht im Triplestore nach Annotationen. * * @param id * id der Annotation * @return * @throws TripleStoreHandlerException * @throws TripleStoreSearchError */ public List<Annotation> searchById(String id) throws TripleStoreHandlerException, TripleStoreSearchError { if (id == null) { return null; } List<Annotation> retAnnots = new ArrayList<Annotation>(); TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); String queryString = ""; // query for tuples with id as subject StringBuilder whereString = new StringBuilder(String.format("<%s> ?p <http://www.w3.org/2000/10/annotationType#Comment>.", id)); whereString.append(String.format("<%s> <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> ?uri.", id)); whereString.append(String.format("<%s> <http://ontologies.mpiwg-berlin.mpg.de/annotations/textSelection> ?xpointer.", id)); whereString.append(String.format("<%s> <http://www.w3.org/2000/10/annotation-ns#body> ?annotText.", id)); whereString.append(String.format("<%s> <http://www.w3.org/2000/10/annotation-ns#author> ?author.", id)); whereString.append(String.format("<%s> <http://www.w3.org/2000/10/annotation-ns#created> ?created.", id)); whereString.append(" OPTIONAL {?annotText <http://ontologies.mpiwg-berlin.mpg.de/annotations/containsText> ?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 = result.getBinding("uri").getValue().stringValue(); String annotUser = result.getBinding("author").getValue().stringValue(); String textString = ""; if (result.getBinding("text") != null) { textString = result.getBinding("text").getValue().stringValue(); } String xpointer = result.getBinding("xpointer").getValue().stringValue(); String created = result .getBinding("created").getValue().stringValue(); Annotation annot = new Annotation(xpointer, annotUser, created, textString, null, annotUri, id); retAnnots.add(annot); } } catch (Exception e) { e.printStackTrace(); throw new TripleStoreSearchError(); } // TODO Auto-generated method stub return retAnnots; } /** * 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<Annotation> searchByUriUser(String uri, String user, String limit, String offset) throws TripleStoreHandlerException, TripleStoreSearchError { List<Annotation> retAnnots = new ArrayList<Annotation>(); TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); String queryString = ""; String whereString = "?s ?p <http://www.w3.org/2000/10/annotationType#Comment>."; // whereString +="?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/docuviewerText> ?link."; if (uri != null && !uri.equals("")) { whereString += String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> <%s>.", uri); } else { whereString += String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> ?uri."); } whereString += String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/textSelection> ?xpointer."); whereString += String.format("?s <http://www.w3.org/2000/10/annotation-ns#body> ?annotText."); if (user != null && !user.equals("")) { if (user.startsWith("http")) { whereString += String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> <%s>.", user); } else { whereString += String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> \"%s\".", user); } } else { whereString += String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> ?author."); } whereString += String.format("?s <http://www.w3.org/2000/10/annotation-ns#created> ?created."); whereString += String .format(" OPTIONAL {?annotText <http://ontologies.mpiwg-berlin.mpg.de/annotations/containsText> ?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; } public void deleteById(String id) throws TripleStoreHandlerException, TripleStoreSearchError { if (id == null) { return; } TripleStoreHandler th = TripleStoreConnection.newTripleStoreHandler(); // delete triples with id as subject /* 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); logger.debug("RDFSearcher:" + queryString); try { th.querySPARQL(queryString); } catch (Exception e) { e.printStackTrace(); throw new TripleStoreSearchError(); } } }