1 package org.openprovenance.elmo;
2 import java.io.File;
3 import java.io.FileWriter;
4 import java.io.Writer;
5 import java.util.Collection;
6 import java.util.Collections;
7
8
9
10 import javax.xml.namespace.QName;
11 import org.openprovenance.model.OPMDeserialiser;
12 import org.openprovenance.model.OPMGraph;
13 import org.openprovenance.model.OPMSerialiser;
14 import org.openrdf.elmo.ElmoManager;
15 import org.openrdf.elmo.ElmoManagerFactory;
16 import org.openrdf.elmo.ElmoModule;
17 import org.openrdf.elmo.sesame.SesameManager;
18 import org.openrdf.elmo.sesame.SesameManagerFactory;
19 import org.openrdf.rio.RDFFormat;
20 import org.openrdf.rio.RDFHandler;
21 import org.openrdf.rio.n3.N3Writer;
22 import org.openrdf.rio.ntriples.NTriplesWriter;
23 import org.openrdf.rio.rdfxml.RDFXMLWriter;
24
25 public class RepositoryHelper {
26
27
28 public void registerConcepts(ElmoModule module) {
29 module.addConcept(org.openprovenance.rdf.Edge.class);
30 module.addConcept(org.openprovenance.rdf.Node.class);
31 module.addConcept(org.openprovenance.rdf.OPMGraph.class);
32 module.addConcept(org.openprovenance.rdf.Account.class);
33 module.addConcept(org.openprovenance.rdf.Artifact.class);
34 module.addConcept(org.openprovenance.rdf.Process.class);
35 module.addConcept(org.openprovenance.rdf.Agent.class);
36 module.addConcept(org.openprovenance.rdf.Role.class);
37 module.addConcept(org.openprovenance.rdf.Used.class);
38 module.addConcept(org.openprovenance.rdf.WasGeneratedBy.class);
39 module.addConcept(org.openprovenance.rdf.WasDerivedFrom.class);
40 module.addConcept(org.openprovenance.rdf.WasTriggeredBy.class);
41 module.addConcept(org.openprovenance.rdf.WasControlledBy.class);
42 module.addConcept(org.openprovenance.rdf.Annotation.class);
43 module.addConcept(org.openprovenance.rdf.Property.class);
44 module.addConcept(org.openprovenance.rdf.OTime.class);
45 module.addConcept(org.openprovenance.rdf.AValue.class);
46 module.addDatatype(org.openprovenance.elmo.XMLLiteral.class,
47 "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral");
48 }
49
50 public void setPrefixes(RDFHandler serialiser,
51 Collection<String[]> prefixes) throws org.openrdf.rio.RDFHandlerException {
52 serialiser.handleNamespace("opm","http://openprovenance.org/ontology#");
53 for (String[] prefix: prefixes) {
54 serialiser.handleNamespace(prefix[0],prefix[1]);
55 }
56 }
57
58
59 public void dumpToRDF(File file,
60 SesameManager manager,
61 RDFFormat format,
62 Collection<String[]> prefixes) throws Exception {
63 Writer writer = new FileWriter(file);
64 RDFHandler serialiser=null;
65 if (format.equals(RDFFormat.N3)) {
66 serialiser=new N3Writer(writer);
67 } else if (format.equals(RDFFormat.RDFXML)) {
68 serialiser=new RDFXMLWriter(writer);
69 } else if (format.equals(RDFFormat.NTRIPLES)) {
70 serialiser=new NTriplesWriter (writer);
71 }
72 setPrefixes(serialiser,prefixes);
73 manager.getConnection().export(serialiser);
74 writer.close();
75 }
76
77 public void readFromRDF(File file, String uri, SesameManager manager, RDFFormat format) throws Exception {
78 manager.getConnection().add(file,uri,format);
79 }
80
81
82 public static void main(String [] args) throws Exception {
83 if ((args==null) || (!((args.length==4) || (args.length==5)))) {
84 System.out.println("Usage: opmconvert -xml2rdf fileIn fileOut NS [yes]");
85 System.out.println("Usage: opmconvert -xml2n3 fileIn fileOut NS [yes]");
86 System.out.println("Usage: opmconvert -rdf2xml fileIn fileOut NS [gid]");
87
88 return;
89 }
90 if (args[0].equals("-rdf2xml")) {
91 String fileIn=args[1];
92 String fileOut=args[2];
93 String namespace=args[3];
94 String gid=null;
95 if (args.length==5) gid=args[4];
96
97 RepositoryHelper rHelper=new RepositoryHelper();
98 rHelper.rdfToXml(fileIn,fileOut,namespace,gid);
99 return;
100 }
101
102 if (args[0].equals("-xml2rdf")) {
103 String fileIn=args[1];
104 String fileOut=args[2];
105 String namespace=args[3];
106 String gid=null;
107 if (args.length==5) gid=args[4];
108
109 RepositoryHelper rHelper=new RepositoryHelper();
110 rHelper.xmlToRdf(fileIn,fileOut,namespace,gid);
111 return;
112 }
113
114 if (args[0].equals("-xml2n3")) {
115 String fileIn=args[1];
116 String fileOut=args[2];
117 String namespace=args[3];
118 String gid=null;
119 if (args.length==5) gid=args[4];
120
121 RepositoryHelper rHelper=new RepositoryHelper();
122 rHelper.xmlToN3(fileIn,fileOut,namespace,gid);
123 return;
124 }
125
126
127
128
129 }
130
131 public void rdfToXml(String fileIn, String fileOut, String NS, String graphId) throws Exception {
132 ElmoModule module = new ElmoModule();
133 registerConcepts(module);
134 ElmoManagerFactory factory=new SesameManagerFactory(module);
135 ElmoManager manager = factory.createElmoManager();
136
137 RdfOPMFactory oFactory=new RdfOPMFactory(new RdfObjectFactory(manager,NS),
138 manager);
139 File file = new File(fileIn);
140 readFromRDF(file,null,(SesameManager)manager,RDFFormat.RDFXML);
141
142 QName qname = new QName(NS, graphId);
143 Object o=manager.find(qname);
144 org.openprovenance.rdf.OPMGraph gr=(org.openprovenance.rdf.OPMGraph)o;
145 OPMGraph oGraph=oFactory.newOPMGraph(gr);
146 OPMSerialiser.getThreadOPMSerialiser().serialiseOPMGraph(new File(fileOut),oGraph,true);
147 }
148
149 public void xmlToRdf(String fileIn, String fileOut, String NS, String gid) throws Exception {
150 xmlToRdf(fileIn,fileOut,NS,gid,RDFFormat.RDFXML);
151 }
152 public void xmlToN3(String fileIn, String fileOut, String NS, String gid) throws Exception {
153 xmlToRdf(fileIn,fileOut,NS,gid,RDFFormat.N3);
154 }
155
156 public void xmlToRdf(String fileIn, String fileOut, String NS, String gid, RDFFormat format) throws Exception {
157 ElmoModule module = new ElmoModule();
158 registerConcepts(module);
159 ElmoManagerFactory factory=new SesameManagerFactory(module);
160 ElmoManager manager = factory.createElmoManager();
161
162
163 OPMGraph oGraph=OPMDeserialiser.getThreadOPMDeserialiser().deserialiseOPMGraph(new File(fileIn));
164 String graphId=oGraph.getId();
165
166
167 String namespace=NS;
168 if ((gid!=null) && (gid.equals("yes"))) namespace=namespace+ graphId +"/";
169 RdfOPMFactory oFactory=new RdfOPMFactory(new RdfObjectFactory(manager,namespace));
170
171
172 RdfOPMGraph graph2=oFactory.newOPMGraph(oGraph);
173
174 Collection<String[]> prefixes=Collections.singleton(new String[]{"ex",namespace});
175
176
177 dumpToRDF(new File(fileOut),(SesameManager)manager,format,prefixes);
178 }
179
180
181 }