annotate src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java @ 2:6888ae3287b8

changed to namespace handling for users
author dwinter
date Thu, 24 Nov 2011 11:39:12 +0100
parents 77530be3c747
children e5f0906c107c
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.text.DateFormat;
dwinter
parents:
diff changeset
4 import java.text.SimpleDateFormat;
dwinter
parents:
diff changeset
5 import java.util.ArrayList;
dwinter
parents:
diff changeset
6 import java.util.Calendar;
dwinter
parents:
diff changeset
7 import java.util.Date;
dwinter
parents:
diff changeset
8 import java.util.List;
dwinter
parents:
diff changeset
9
dwinter
parents:
diff changeset
10 import org.apache.log4j.Logger;
dwinter
parents:
diff changeset
11 import org.openrdf.repository.RepositoryException;
dwinter
parents:
diff changeset
12 import org.restlet.Context;
dwinter
parents:
diff changeset
13 import org.restlet.engine.component.ChildContext;
dwinter
parents:
diff changeset
14
dwinter
parents:
diff changeset
15 import de.mpiwg.itgroup.annotationManager.Constants.NS;
dwinter
parents:
diff changeset
16 import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreStoreError;
dwinter
parents:
diff changeset
17 import de.mpiwg.itgroup.annotationManager.Errors.XPointerError;
dwinter
parents:
diff changeset
18 import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException;
dwinter
parents:
diff changeset
19 import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler;
dwinter
parents:
diff changeset
20 import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.Quadruple;
dwinter
parents:
diff changeset
21 import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.LiteralQuadruple;
dwinter
parents:
diff changeset
22
dwinter
parents:
diff changeset
23 /**
dwinter
parents:
diff changeset
24 * @author dwinter
dwinter
parents:
diff changeset
25 *
dwinter
parents:
diff changeset
26 * Klasse zum Konvertieren von Annotationen zum mpiwg RDF-Format:
dwinter
parents:
diff changeset
27 * http://ontologies.mpiwg-berlin.mpg.de/annotations/
dwinter
parents:
diff changeset
28 */
dwinter
parents:
diff changeset
29
dwinter
parents:
diff changeset
30 public class Convert {
dwinter
parents:
diff changeset
31 private String ctx;
dwinter
parents:
diff changeset
32 private Logger logger = Logger.getRootLogger();
dwinter
parents:
diff changeset
33 private String urlBase="http://ontologies.mpiwg-berlin.mpg.de/annotations/"; //TODO should go into config
dwinter
parents:
diff changeset
34 public Convert(String c){
dwinter
parents:
diff changeset
35 ctx=c;
dwinter
parents:
diff changeset
36 }
dwinter
parents:
diff changeset
37
dwinter
parents:
diff changeset
38 /**
dwinter
parents:
diff changeset
39 * Fasst alle Parameter zusammen, die eine Annotation bilden
dwinter
parents:
diff changeset
40 * @author dwinter
dwinter
parents:
diff changeset
41 *
dwinter
parents:
diff changeset
42 */
dwinter
parents:
diff changeset
43 static public class Annotation {
dwinter
parents:
diff changeset
44 public String xpointer=null; //if queried xpointer should contain the first xpointer in the xpointers list, if there is more than one.
dwinter
parents:
diff changeset
45 public String creator=null;
dwinter
parents:
diff changeset
46 public String time=null;
dwinter
parents:
diff changeset
47 public String text=null;
dwinter
parents:
diff changeset
48 public String type=null;
dwinter
parents:
diff changeset
49 public String url;
dwinter
parents:
diff changeset
50 public List<String> xpointers=null; // list of xpointers on the page url, can be empty or null if there is only one.
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
51 public String annotationUri=null; // uri der annotation im triplestore
0
dwinter
parents:
diff changeset
52
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
53
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
54 /**
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
55 * @param xpointer Beschreibt die Annotation
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
56 * @param creator Username des Creators oder URI der Creators
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
57 * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
58 * @param text der Annotation
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
59 * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.)
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
60 * @param url Url einer Annotation
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
61 * @param annotationUri Uri der Annotation im Triplestore
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
62 */
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
63 public Annotation(String xpointer, String creator, String time, String text, String type, String url,String annotationUri){
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
64 this.xpointer=xpointer;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
65 this.creator=creator;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
66 this.time=time;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
67 this.text=text;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
68 this.type=type;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
69 this.url=url;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
70 this.annotationUri=annotationUri;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
71 }
0
dwinter
parents:
diff changeset
72 /**
dwinter
parents:
diff changeset
73 * @param xpointer Beschreibt die Annotation
dwinter
parents:
diff changeset
74 * @param creator Username des Creators
dwinter
parents:
diff changeset
75 * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren
dwinter
parents:
diff changeset
76 * @param text der Annotation
dwinter
parents:
diff changeset
77 * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.)
dwinter
parents:
diff changeset
78 * @param url Url einer Annotation
dwinter
parents:
diff changeset
79 */
dwinter
parents:
diff changeset
80 public Annotation(String xpointer, String creator, String time, String text, String type, String url){
dwinter
parents:
diff changeset
81 this.xpointer=xpointer;
dwinter
parents:
diff changeset
82 this.creator=creator;
dwinter
parents:
diff changeset
83 this.time=time;
dwinter
parents:
diff changeset
84 this.text=text;
dwinter
parents:
diff changeset
85 this.type=type;
dwinter
parents:
diff changeset
86 this.url=url;
dwinter
parents:
diff changeset
87 }
dwinter
parents:
diff changeset
88
dwinter
parents:
diff changeset
89 /**
dwinter
parents:
diff changeset
90 * @param xpointer Beschreibt die Annotation
dwinter
parents:
diff changeset
91 * @param creator Username des Creators
dwinter
parents:
diff changeset
92 * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren
dwinter
parents:
diff changeset
93 * @param text der Annotation
dwinter
parents:
diff changeset
94 * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.)
dwinter
parents:
diff changeset
95 */
dwinter
parents:
diff changeset
96 public Annotation(String xpointer, String creator, String time, String annot, String type){
dwinter
parents:
diff changeset
97 this.xpointer=xpointer;
dwinter
parents:
diff changeset
98 this.creator=creator;
dwinter
parents:
diff changeset
99 this.time=time;
dwinter
parents:
diff changeset
100 this.text=annot;
dwinter
parents:
diff changeset
101 this.type=type;
dwinter
parents:
diff changeset
102 this.url=null;
dwinter
parents:
diff changeset
103 }
dwinter
parents:
diff changeset
104
dwinter
parents:
diff changeset
105
dwinter
parents:
diff changeset
106 }
dwinter
parents:
diff changeset
107 private String annotUrl=null;
dwinter
parents:
diff changeset
108
dwinter
parents:
diff changeset
109 /**
dwinter
parents:
diff changeset
110 *
dwinter
parents:
diff changeset
111 * @param xpointer Beschreibt die Annotation
dwinter
parents:
diff changeset
112 * @param creator Username des Creators
dwinter
parents:
diff changeset
113 * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren
dwinter
parents:
diff changeset
114 * @param text der Annotation
dwinter
parents:
diff changeset
115 * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.)
dwinter
parents:
diff changeset
116 * @return
dwinter
parents:
diff changeset
117 */
dwinter
parents:
diff changeset
118
dwinter
parents:
diff changeset
119 private List<Quadruple> annot2quadruple(String xpointer, String creator, String time, String annot, String type){
dwinter
parents:
diff changeset
120 return annot2quadruple(new Annotation(xpointer, creator, time, annot, type));
dwinter
parents:
diff changeset
121 }
dwinter
parents:
diff changeset
122
dwinter
parents:
diff changeset
123
dwinter
parents:
diff changeset
124 /**
dwinter
parents:
diff changeset
125 * @param annot
dwinter
parents:
diff changeset
126 * @return
dwinter
parents:
diff changeset
127 */
dwinter
parents:
diff changeset
128 public List<Quadruple> annot2quadruple(Annotation annot){
dwinter
parents:
diff changeset
129 List<Quadruple> retQuad = new ArrayList<Quadruple>();
dwinter
parents:
diff changeset
130
dwinter
parents:
diff changeset
131 String annotation = createRessourceURL("annot:");
dwinter
parents:
diff changeset
132
dwinter
parents:
diff changeset
133 if (annot.time==null){
dwinter
parents:
diff changeset
134 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");
dwinter
parents:
diff changeset
135 annot.time=format.format(Calendar.getInstance().getTime());
dwinter
parents:
diff changeset
136
dwinter
parents:
diff changeset
137 }
dwinter
parents:
diff changeset
138
dwinter
parents:
diff changeset
139 //TODO: check type
dwinter
parents:
diff changeset
140 retQuad.add(new Quadruple(annotation, NS.RDF+"type", NS.ANNOTATION_TYPE+annot.type, ctx));
dwinter
parents:
diff changeset
141
dwinter
parents:
diff changeset
142 //add author
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
143
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
144
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
145 if (annot.creator.startsWith("http")){
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
146 retQuad.add(new Quadruple(annotation, NS.ANNOTATION_NS+"author", annot.creator, ctx));
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
147 } else {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
148 retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"author", annot.creator, ctx));
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
149 }
0
dwinter
parents:
diff changeset
150
dwinter
parents:
diff changeset
151 // creation time
dwinter
parents:
diff changeset
152 retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"created", annot.time, ctx));
dwinter
parents:
diff changeset
153
dwinter
parents:
diff changeset
154 String[] xpointerSplitted = annot.xpointer.split("#");
dwinter
parents:
diff changeset
155
dwinter
parents:
diff changeset
156 if (xpointerSplitted.length>2){
dwinter
parents:
diff changeset
157 annotUrl=null;
dwinter
parents:
diff changeset
158 throw new XPointerError();
dwinter
parents:
diff changeset
159 }
dwinter
parents:
diff changeset
160
dwinter
parents:
diff changeset
161 // now add the xpointers
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
162 retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"annotatesDocuviewerText", xpointerSplitted[0], ctx));
0
dwinter
parents:
diff changeset
163 retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"textSelection", annot.xpointer, ctx));
dwinter
parents:
diff changeset
164
dwinter
parents:
diff changeset
165 String annotationtext =createRessourceURL("annotText:");
dwinter
parents:
diff changeset
166
dwinter
parents:
diff changeset
167 retQuad.add(new Quadruple(annotation, NS.ANNOTATION_NS+"body", annotationtext, ctx));
dwinter
parents:
diff changeset
168
dwinter
parents:
diff changeset
169 retQuad.add(new Quadruple(annotationtext, NS.RDF+"type", NS.MPIWG_annot+"StandardTextNote", ctx));
dwinter
parents:
diff changeset
170
dwinter
parents:
diff changeset
171 retQuad.add(new LiteralQuadruple(annotationtext, NS.MPIWG_annot+"containsText", annot.text, ctx));
dwinter
parents:
diff changeset
172
dwinter
parents:
diff changeset
173 for (Quadruple ret:retQuad){
dwinter
parents:
diff changeset
174 logger.debug(ret.toString());
dwinter
parents:
diff changeset
175 }
dwinter
parents:
diff changeset
176
dwinter
parents:
diff changeset
177 annotUrl=annotation;
dwinter
parents:
diff changeset
178 return retQuad;
dwinter
parents:
diff changeset
179 }
dwinter
parents:
diff changeset
180
dwinter
parents:
diff changeset
181 /**
dwinter
parents:
diff changeset
182 * Erzeuge eine urn aus der aktullen Zeit in millis
dwinter
parents:
diff changeset
183 * @return
dwinter
parents:
diff changeset
184 */
dwinter
parents:
diff changeset
185 private String createRessourceURL(String prefix) {
dwinter
parents:
diff changeset
186
dwinter
parents:
diff changeset
187 Calendar cal = Calendar.getInstance();
dwinter
parents:
diff changeset
188
dwinter
parents:
diff changeset
189 long time = cal.getTimeInMillis();
dwinter
parents:
diff changeset
190
dwinter
parents:
diff changeset
191 return String.format("%s%s%s", urlBase,prefix,time);
dwinter
parents:
diff changeset
192
dwinter
parents:
diff changeset
193
dwinter
parents:
diff changeset
194
dwinter
parents:
diff changeset
195 }
dwinter
parents:
diff changeset
196
dwinter
parents:
diff changeset
197 /**
dwinter
parents:
diff changeset
198 * gibt nach die nach aufruf eines Converters erzeuge aktuelle url der annotation zurueck
dwinter
parents:
diff changeset
199 * @return
dwinter
parents:
diff changeset
200 */
dwinter
parents:
diff changeset
201 public String getAnnotUrl() {
dwinter
parents:
diff changeset
202
dwinter
parents:
diff changeset
203 return annotUrl;
dwinter
parents:
diff changeset
204 }
dwinter
parents:
diff changeset
205
dwinter
parents:
diff changeset
206 /**
dwinter
parents:
diff changeset
207 * @param args
dwinter
parents:
diff changeset
208 */
dwinter
parents:
diff changeset
209 public static void main(String[] args) {
dwinter
parents:
diff changeset
210 Convert myConvert = new Convert("http://annotations.rdf");
dwinter
parents:
diff changeset
211 List<Quadruple> rets = myConvert.annot2quadruple("http://mpdl-dev.mpiwg-berlin.mpg.de/ECHOdocuViewfullTest?url=/mpiwg/online/permanent/library/163127KK&amp;viewMode=text&amp;pn=7#xpointer(string-range(id(&quot;s1&quot;), &quot;&quot;, 66, 12))", "mbuchman", null, "myannot", "Example");
dwinter
parents:
diff changeset
212 for (Quadruple ret:rets){
dwinter
parents:
diff changeset
213 System.out.println(ret.toString());
dwinter
parents:
diff changeset
214 }
dwinter
parents:
diff changeset
215
dwinter
parents:
diff changeset
216 }
dwinter
parents:
diff changeset
217
dwinter
parents:
diff changeset
218
dwinter
parents:
diff changeset
219 public String storeAnnotation(Convert.Annotation annot) throws TripleStoreStoreError {
dwinter
parents:
diff changeset
220
dwinter
parents:
diff changeset
221 //Convert convert = new Convert("<file:///annotations>");
dwinter
parents:
diff changeset
222
dwinter
parents:
diff changeset
223
dwinter
parents:
diff changeset
224 if ((annot.type==null) || annot.type.equals("")){
dwinter
parents:
diff changeset
225 annot.type="Comment";
dwinter
parents:
diff changeset
226 }
dwinter
parents:
diff changeset
227
dwinter
parents:
diff changeset
228 List<Quadruple> annots = new ArrayList<Quadruple>();
dwinter
parents:
diff changeset
229 if (annot.text!=null && !annot.text.equals(""))
dwinter
parents:
diff changeset
230 annots=annot2quadruple(annot);
dwinter
parents:
diff changeset
231 if (annot.url!=null && !annot.url.equals(""))
dwinter
parents:
diff changeset
232 annots.addAll(rel2quadruple(annot));
dwinter
parents:
diff changeset
233
dwinter
parents:
diff changeset
234
dwinter
parents:
diff changeset
235
dwinter
parents:
diff changeset
236 try {
dwinter
parents:
diff changeset
237 ChildContext context = (ChildContext)Context.getCurrent();
dwinter
parents:
diff changeset
238 String user = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser");
dwinter
parents:
diff changeset
239 String pw = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword");
dwinter
parents:
diff changeset
240
dwinter
parents:
diff changeset
241 TripleStoreHandler th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", user, pw);
dwinter
parents:
diff changeset
242
dwinter
parents:
diff changeset
243 th.write(annots);
dwinter
parents:
diff changeset
244 } catch (RepositoryException e) {
dwinter
parents:
diff changeset
245 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
246 e.printStackTrace();
dwinter
parents:
diff changeset
247 throw new TripleStoreStoreError();
dwinter
parents:
diff changeset
248 } catch (TripleStoreHandlerException e) {
dwinter
parents:
diff changeset
249 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
250 e.printStackTrace();
dwinter
parents:
diff changeset
251 throw new TripleStoreStoreError();
dwinter
parents:
diff changeset
252 }
dwinter
parents:
diff changeset
253
dwinter
parents:
diff changeset
254
dwinter
parents:
diff changeset
255
dwinter
parents:
diff changeset
256 return getAnnotUrl();
dwinter
parents:
diff changeset
257 }
dwinter
parents:
diff changeset
258
dwinter
parents:
diff changeset
259
dwinter
parents:
diff changeset
260 private List<Quadruple> rel2quadruple(Annotation annot) {
dwinter
parents:
diff changeset
261 // TODO Auto-generated method stub
dwinter
parents:
diff changeset
262 return new ArrayList<TripleStoreHandler.Quadruple>();
dwinter
parents:
diff changeset
263 }
dwinter
parents:
diff changeset
264
dwinter
parents:
diff changeset
265 }