Browse Source

load mappings from string and input stream to be used in juma uplift

Ademar Crotti Junior 5 years ago
parent
commit
e92f896f4b

+ 9 - 0
src/r2rml/engine/Configuration.java

@@ -30,6 +30,7 @@ public class Configuration {
 	private String baseIRI = null;
 	private boolean filePerGraph = false;
 	private List<String> CSVFiles = new ArrayList<String>();
+	private String mapping;
 
 	public Configuration(String path) throws R2RMLException {
 		Properties properties = new Properties();
@@ -146,5 +147,13 @@ public class Configuration {
 	public boolean hasCSVFiles() {
 		return CSVFiles != null && CSVFiles.size() > 0;
 	}
+
+	public String getMapping() {
+		return mapping;
+	}
+
+	public void setMapping(String mapping) {
+		this.mapping = mapping;
+	}
 	
 }

+ 13 - 3
src/r2rml/engine/R2RMLProcessor.java

@@ -39,15 +39,25 @@ public class R2RMLProcessor {
 		createDatabaseConnection();
 		
 		String file = configuration.getMappingFile();
+		String R2RMLmapping = configuration.getMapping();
 		String baseIRI = configuration.getBaseIRI();
 		
-		R2RMLMapping mapping = R2RMLMappingFactory.createR2RMLMapping(file, baseIRI);
+		R2RMLMapping mapping = null;
+		if (file != null) {
+			mapping = R2RMLMappingFactory.createR2RMLMappingFromFile(file, baseIRI);
+		} else if (R2RMLmapping != null) {
+			mapping = R2RMLMappingFactory.createR2RMLMappingFromString(R2RMLmapping, baseIRI);
+		} else {
+			logger.error("You have to provide either an R2RML mapping in a file or as a String.");
+			System.exit(-1);
+		}
+
 		DB database = new DB(connection);
 		
 		boolean abort = false;
 		
-		if(mapping != null) {
-			if(!mapping.generateTriples(database, dataset))
+		if (mapping != null) {
+			if (!mapping.generateTriples(database, dataset))
 				abort = true;
 		} else {
 			abort = true;

+ 24 - 4
src/r2rml/model/R2RMLMappingFactory.java

@@ -1,5 +1,7 @@
 package r2rml.model;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -37,13 +39,31 @@ public class R2RMLMappingFactory {
 	// MAKE CONSTANTS EXPLICITELY LITERALS TO DEAL WITH TYPED CONSTANTS
 	// EVEN THOUGH IT IS OUT OF THE SPEC
 	private static String CONSTRUCTLITERAL = "PREFIX rr: <http://www.w3.org/ns/r2rml#> CONSTRUCT { ?x rr:termType rr:Literal . } WHERE { ?x rr:constant ?y . FILTER (isLiteral(?y)) }" ;
-	
-	public static R2RMLMapping createR2RMLMapping(String mappingFile, String baseIRI) {
+
+	// If mapping is contained in a String (in TURTLE)
+	public static R2RMLMapping createR2RMLMappingFromString(String mapping, String baseIRI) {
+		Model data = ModelFactory.createDefaultModel();
+		data.read(new ByteArrayInputStream(mapping.getBytes()), null, "TURTLE");
+		return createR2RMLMapping(data, baseIRI);
+	}
+
+	// If mapping is contained in a Input Stream (in TURTLE)
+	public static R2RMLMapping createR2RMLMappingFromInputStream(InputStream mapping, String baseIRI) {
+		Model data = ModelFactory.createDefaultModel();
+		data.read(mapping, null, "TURTLE");
+		return createR2RMLMapping(data, baseIRI);
+	}
+
+	// If mapping is contained in file
+	public static R2RMLMapping createR2RMLMappingFromFile(String mappingFile, String baseIRI) {
+		Model data = FileManager.get().loadModel(mappingFile);
+		return createR2RMLMapping(data, baseIRI);
+	}
+
+	private static R2RMLMapping createR2RMLMapping(Model data, String baseIRI) {
 		R2RMLMapping mapping = new R2RMLMapping();
 
 		// We reason over the mapping to facilitate retrieval of the mappings
-		Model data = FileManager.get().loadModel(mappingFile);
-		
 		// We construct triples to replace the shortcuts.
 		data.add(QueryExecutionFactory.create(CONSTRUCTSMAPS, data).execConstruct());
 		data.add(QueryExecutionFactory.create(CONSTRUCTOMAPS, data).execConstruct());