View Javadoc

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         //TODO: other options here
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 }