annotate src/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java @ 15:6c7c4140630d

on the way to updating annotations.
author casties
date Wed, 21 Mar 2012 18:12:45 +0100
parents 97f68ab3430f
children 667d98fd28bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.annotationManager.RDFHandling;
dwinter
parents:
diff changeset
2
dwinter
parents:
diff changeset
3 import java.util.ArrayList;
dwinter
parents:
diff changeset
4 import java.util.List;
dwinter
parents:
diff changeset
5
dwinter
parents:
diff changeset
6 import org.apache.log4j.Logger;
dwinter
parents:
diff changeset
7 import org.openrdf.query.BindingSet;
dwinter
parents:
diff changeset
8 import org.openrdf.query.TupleQueryResult;
dwinter
parents:
diff changeset
9 import org.restlet.Context;
dwinter
parents:
diff changeset
10 import org.restlet.engine.component.ChildContext;
dwinter
parents:
diff changeset
11
dwinter
parents:
diff changeset
12 import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreSearchError;
dwinter
parents:
diff changeset
13 import de.mpiwg.itgroup.annotationManager.RDFHandling.Convert.Annotation;
5
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
14 import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
15 import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler;
0
dwinter
parents:
diff changeset
16
dwinter
parents:
diff changeset
17 public class RDFSearcher {
dwinter
parents:
diff changeset
18
dwinter
parents:
diff changeset
19 private String urlBase="http://ontologies.mpiwg-berlin.mpg.de/annotations/"; //TODO should go into config
dwinter
parents:
diff changeset
20
dwinter
parents:
diff changeset
21 private TripleStoreHandler th;
dwinter
parents:
diff changeset
22
dwinter
parents:
diff changeset
23 private String context;
dwinter
parents:
diff changeset
24
dwinter
parents:
diff changeset
25 private Logger logger= Logger.getRootLogger();
dwinter
parents:
diff changeset
26
dwinter
parents:
diff changeset
27 public RDFSearcher(String context) {
dwinter
parents:
diff changeset
28 this.context=context;
dwinter
parents:
diff changeset
29 }
dwinter
parents:
diff changeset
30
dwinter
parents:
diff changeset
31
dwinter
parents:
diff changeset
32
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
33 /** Sucht im Triplestore nach Annotationen
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
34 * @param uri Adresse der Annotierten Ressource, in der Regel nicht mit dem xpointer, sonder die URI der kompletten Ressource oder NULL oder leer
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
35 * @param user Author der Annotationen, entweder als uri der Person oder ein Username, je nachdem wie die Annotatinen angelegt wurden.
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
36 * @param limit
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
37 * @param offset
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
38 * @return
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
39 * @throws TripleStoreHandlerException
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
40 * @throws TripleStoreSearchError
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
41 */
0
dwinter
parents:
diff changeset
42 public List<Annotation> search(String uri, String user, String limit,
dwinter
parents:
diff changeset
43 String offset) throws TripleStoreHandlerException, TripleStoreSearchError {
dwinter
parents:
diff changeset
44
dwinter
parents:
diff changeset
45 List<Annotation> retAnnots = new ArrayList<Convert.Annotation>();
dwinter
parents:
diff changeset
46 ChildContext context = (ChildContext)Context.getCurrent();
dwinter
parents:
diff changeset
47 String tripleStoreUser = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser");
dwinter
parents:
diff changeset
48 String tripleStorePW = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword");
dwinter
parents:
diff changeset
49
dwinter
parents:
diff changeset
50 th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", tripleStoreUser, tripleStorePW);//TODO should go into config
dwinter
parents:
diff changeset
51 String queryString="";
dwinter
parents:
diff changeset
52
dwinter
parents:
diff changeset
53 String whereString = "?s ?p <http://www.w3.org/2000/10/annotationType#Comment>.";
dwinter
parents:
diff changeset
54 //whereString +="?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/docuviewerText> ?link.";
dwinter
parents:
diff changeset
55
dwinter
parents:
diff changeset
56 if(uri!=null && !uri.equals("")){
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
57 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> <%s>.",uri);}
0
dwinter
parents:
diff changeset
58 else {
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
59 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> ?uri.");
0
dwinter
parents:
diff changeset
60 }
dwinter
parents:
diff changeset
61 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/textSelection> ?xpointer.");
dwinter
parents:
diff changeset
62 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#body> ?annotText.");
dwinter
parents:
diff changeset
63
dwinter
parents:
diff changeset
64 if(user!=null && !user.equals("")){
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
65 if (user.startsWith("http")){
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
66 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> <%s>.",user);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
67 } else {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
68 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> \"%s\".",user);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
69 }
0
dwinter
parents:
diff changeset
70 } else {
dwinter
parents:
diff changeset
71 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> ?author.");
dwinter
parents:
diff changeset
72 }
dwinter
parents:
diff changeset
73
dwinter
parents:
diff changeset
74 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#created> ?created.");
dwinter
parents:
diff changeset
75
5
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
76 whereString +=String.format(" OPTIONAL {?annotText <http://ontologies.mpiwg-berlin.mpg.de/annotations/containsText> ?text.}");
0
dwinter
parents:
diff changeset
77
dwinter
parents:
diff changeset
78 queryString=String.format("select distinct * where {%s}",whereString);
dwinter
parents:
diff changeset
79
dwinter
parents:
diff changeset
80
dwinter
parents:
diff changeset
81 logger.debug("RDFSearcher:"+queryString);
dwinter
parents:
diff changeset
82
dwinter
parents:
diff changeset
83 try {
dwinter
parents:
diff changeset
84 TupleQueryResult results = th.querySPARQL(queryString);
dwinter
parents:
diff changeset
85
dwinter
parents:
diff changeset
86 while (results.hasNext()) {
dwinter
parents:
diff changeset
87 BindingSet result = results.next();
dwinter
parents:
diff changeset
88 String annotUri;
dwinter
parents:
diff changeset
89 if(uri!=null && !uri.equals("")){
dwinter
parents:
diff changeset
90 annotUri=uri;
dwinter
parents:
diff changeset
91 } else {
dwinter
parents:
diff changeset
92 annotUri = result.getBinding("uri").getValue().stringValue();
dwinter
parents:
diff changeset
93 }
dwinter
parents:
diff changeset
94
dwinter
parents:
diff changeset
95 String annotUser;
dwinter
parents:
diff changeset
96 if(user!=null && !user.equals("")){
dwinter
parents:
diff changeset
97 annotUser=user;
dwinter
parents:
diff changeset
98 } else {
dwinter
parents:
diff changeset
99 annotUser = result.getBinding("author").getValue().stringValue();
dwinter
parents:
diff changeset
100 }
dwinter
parents:
diff changeset
101
5
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
102 String textString="";
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
103 if (result.getBinding("text")!=null){
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
104 textString= result.getBinding("text").getValue().stringValue();
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
105 }
0
dwinter
parents:
diff changeset
106 Annotation annot = new Annotation(result.getBinding("xpointer").getValue().stringValue(),
dwinter
parents:
diff changeset
107 annotUser, result.getBinding("created").getValue().stringValue(),
5
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
108 textString, null,
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
109 annotUri,result.getBinding("s").getValue().stringValue());
0
dwinter
parents:
diff changeset
110 retAnnots.add(annot);
dwinter
parents:
diff changeset
111 }
dwinter
parents:
diff changeset
112 } catch (Exception e) {
5
0be9d53a6967 editor for annotations
dwinter
parents: 2
diff changeset
113 e.printStackTrace();
0
dwinter
parents:
diff changeset
114 throw new TripleStoreSearchError();
dwinter
parents:
diff changeset
115 }
dwinter
parents:
diff changeset
116 // TODO Auto-generated method stub
dwinter
parents:
diff changeset
117 return retAnnots;
dwinter
parents:
diff changeset
118 }
dwinter
parents:
diff changeset
119
dwinter
parents:
diff changeset
120 }