Mercurial > hg > AnnotationManager
view src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java @ 0:77530be3c747
intial
author | dwinter |
---|---|
date | Tue, 22 Nov 2011 15:47:57 +0100 |
parents | |
children | 6888ae3287b8 |
line wrap: on
line source
package de.mpiwg.itgroup.annotationManager.RDFHandling; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.openrdf.repository.RepositoryException; import org.restlet.Context; import org.restlet.engine.component.ChildContext; import de.mpiwg.itgroup.annotationManager.Constants.NS; import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreStoreError; import de.mpiwg.itgroup.annotationManager.Errors.XPointerError; import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException; import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler; import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.Quadruple; import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.LiteralQuadruple; /** * @author dwinter * * Klasse zum Konvertieren von Annotationen zum mpiwg RDF-Format: * http://ontologies.mpiwg-berlin.mpg.de/annotations/ */ public class Convert { private String ctx; private Logger logger = Logger.getRootLogger(); private String urlBase="http://ontologies.mpiwg-berlin.mpg.de/annotations/"; //TODO should go into config public Convert(String c){ ctx=c; } /** * Fasst alle Parameter zusammen, die eine Annotation bilden * @author dwinter * */ static public class Annotation { public String xpointer=null; //if queried xpointer should contain the first xpointer in the xpointers list, if there is more than one. public String creator=null; public String time=null; public String text=null; public String type=null; public String url; public List<String> xpointers=null; // list of xpointers on the page url, can be empty or null if there is only one. /** * @param xpointer Beschreibt die Annotation * @param creator Username des Creators * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren * @param text der Annotation * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) * @param url Url einer Annotation */ public Annotation(String xpointer, String creator, String time, String text, String type, String url){ this.xpointer=xpointer; this.creator=creator; this.time=time; this.text=text; this.type=type; this.url=url; } /** * @param xpointer Beschreibt die Annotation * @param creator Username des Creators * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren * @param text der Annotation * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) */ public Annotation(String xpointer, String creator, String time, String annot, String type){ this.xpointer=xpointer; this.creator=creator; this.time=time; this.text=annot; this.type=type; this.url=null; } } private String annotUrl=null; /** * * @param xpointer Beschreibt die Annotation * @param creator Username des Creators * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren * @param text der Annotation * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) * @return */ private List<Quadruple> annot2quadruple(String xpointer, String creator, String time, String annot, String type){ return annot2quadruple(new Annotation(xpointer, creator, time, annot, type)); } /** * @param annot * @return */ public List<Quadruple> annot2quadruple(Annotation annot){ List<Quadruple> retQuad = new ArrayList<Quadruple>(); String annotation = createRessourceURL("annot:"); if (annot.time==null){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'"); annot.time=format.format(Calendar.getInstance().getTime()); } //TODO: check type retQuad.add(new Quadruple(annotation, NS.RDF+"type", NS.ANNOTATION_TYPE+annot.type, ctx)); //add author retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"author", annot.creator, ctx)); // creation time retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"created", annot.time, ctx)); String[] xpointerSplitted = annot.xpointer.split("#"); if (xpointerSplitted.length>2){ annotUrl=null; throw new XPointerError(); } // now add the xpointers retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"docuviewerText", xpointerSplitted[0], ctx)); retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"textSelection", annot.xpointer, ctx)); String annotationtext =createRessourceURL("annotText:"); retQuad.add(new Quadruple(annotation, NS.ANNOTATION_NS+"body", annotationtext, ctx)); retQuad.add(new Quadruple(annotationtext, NS.RDF+"type", NS.MPIWG_annot+"StandardTextNote", ctx)); retQuad.add(new LiteralQuadruple(annotationtext, NS.MPIWG_annot+"containsText", annot.text, ctx)); for (Quadruple ret:retQuad){ logger.debug(ret.toString()); } annotUrl=annotation; return retQuad; } /** * Erzeuge eine urn aus der aktullen Zeit in millis * @return */ private String createRessourceURL(String prefix) { Calendar cal = Calendar.getInstance(); long time = cal.getTimeInMillis(); return String.format("%s%s%s", urlBase,prefix,time); } /** * gibt nach die nach aufruf eines Converters erzeuge aktuelle url der annotation zurueck * @return */ public String getAnnotUrl() { return annotUrl; } /** * @param args */ public static void main(String[] args) { Convert myConvert = new Convert("http://annotations.rdf"); List<Quadruple> rets = myConvert.annot2quadruple("http://mpdl-dev.mpiwg-berlin.mpg.de/ECHOdocuViewfullTest?url=/mpiwg/online/permanent/library/163127KK&viewMode=text&pn=7#xpointer(string-range(id("s1"), "", 66, 12))", "mbuchman", null, "myannot", "Example"); for (Quadruple ret:rets){ System.out.println(ret.toString()); } } public String storeAnnotation(Convert.Annotation annot) throws TripleStoreStoreError { //Convert convert = new Convert("<file:///annotations>"); if ((annot.type==null) || annot.type.equals("")){ annot.type="Comment"; } List<Quadruple> annots = new ArrayList<Quadruple>(); if (annot.text!=null && !annot.text.equals("")) annots=annot2quadruple(annot); if (annot.url!=null && !annot.url.equals("")) annots.addAll(rel2quadruple(annot)); try { ChildContext context = (ChildContext)Context.getCurrent(); String user = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser"); String pw = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword"); TripleStoreHandler th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", user, pw); th.write(annots); } catch (RepositoryException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new TripleStoreStoreError(); } catch (TripleStoreHandlerException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new TripleStoreStoreError(); } return getAnnotUrl(); } private List<Quadruple> rel2quadruple(Annotation annot) { // TODO Auto-generated method stub return new ArrayList<TripleStoreHandler.Quadruple>(); } }