Browse Source

Added support for functions.

Added support for functions based on the R2RML-F paper.
Christophe Debruyne 7 years ago
parent
commit
2828f699dc

+ 215 - 7
derby.log

@@ -1,16 +1,224 @@
 ----------------------------------------------------------------
-Mon May 16 13:45:37 IST 2016:
-Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance a816c00e-0154-b999-ad38-00000660a100 
-on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@5451c3a8 
+Wed Jun 29 20:39:10 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance a816c00e-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
 Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
 java.vendor=Oracle Corporation
-java.runtime.version=1.8.0_45-b14
+java.runtime.version=1.8.0_51-b16
 user.dir=/Users/chrdebru/GITHUB/r2rml
 os.name=Mac OS X
 os.arch=x86_64
-os.version=10.11.3
+os.version=10.11.5
 derby.system.home=null
 Database Class Loader started - derby.database.classpath=''
 ----------------------------------------------------------------
-Mon May 16 13:45:39 IST 2016:
-Shutting down instance a816c00e-0154-b999-ad38-00000660a100 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@5451c3a8 
+Wed Jun 29 20:39:12 IST 2016:
+Shutting down instance a816c00e-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:13 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance df1940da-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:13 IST 2016:
+Shutting down instance df1940da-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:14 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance 3ebfc1a6-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:14 IST 2016:
+Shutting down instance 3ebfc1a6-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:15 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance 297dc276-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:15 IST 2016:
+Shutting down instance 297dc276-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:15 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance db384342-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:16 IST 2016:
+Shutting down instance db384342-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:16 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance b596c40e-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:16 IST 2016:
+Shutting down instance b596c40e-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:17 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance b89944da-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:17 IST 2016:
+Shutting down instance b89944da-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:18 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance e43fc5a6-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:18 IST 2016:
+Shutting down instance e43fc5a6-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:18 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance 388a4672-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:19 IST 2016:
+Shutting down instance 388a4672-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:19 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance b578c73e-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:19 IST 2016:
+Shutting down instance b578c73e-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:20 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance 5b0b480a-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:20 IST 2016:
+Shutting down instance 5b0b480a-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:20 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance 5aa2c8d3-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:21 IST 2016:
+Shutting down instance 5aa2c8d3-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:21 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance f0e4499f-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:21 IST 2016:
+Shutting down instance f0e4499f-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+----------------------------------------------------------------
+Wed Jun 29 20:39:22 IST 2016:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance afc9ca6b-0155-9dac-1abc-0000037ae9a8 
+on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 
+Loaded from file:/Users/chrdebru/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.8.0_51-b16
+user.dir=/Users/chrdebru/GITHUB/r2rml
+os.name=Mac OS X
+os.arch=x86_64
+os.version=10.11.5
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
+----------------------------------------------------------------
+Wed Jun 29 20:39:22 IST 2016:
+Shutting down instance afc9ca6b-0155-9dac-1abc-0000037ae9a8 on database directory memory:/Users/chrdebru/GITHUB/r2rml/testing with class loader sun.misc.Launcher$AppClassLoader@2c7b84de 

+ 53 - 8
src/r2rml/model/R2RMLMappingFactory.java

@@ -1,17 +1,22 @@
 package r2rml.model;
 
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.List;
 
 import org.apache.jena.query.QueryExecutionFactory;
 import org.apache.jena.rdf.model.InfModel;
 import org.apache.jena.rdf.model.Model;
 import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.RDFNode;
 import org.apache.jena.rdf.model.Resource;
 import org.apache.jena.util.FileManager;
 import org.apache.jena.vocabulary.RDF;
 import org.apache.log4j.Logger;
 
 import r2rml.engine.R2RML;
+import r2rml.engine.RRF;
 
 /**
  * R2RMLMappingFactory Class.
@@ -21,7 +26,7 @@ import r2rml.engine.R2RML;
  *
  */
 public class R2RMLMappingFactory {
-	
+
 	private static Logger logger = Logger.getLogger(R2RMLMappingFactory.class.getName());
 
 	private static String CONSTRUCTSMAPS = "PREFIX rr: <http://www.w3.org/ns/r2rml#> CONSTRUCT { ?x rr:subjectMap [ rr:constant ?y ]. } WHERE { ?x rr:subject ?y. }";
@@ -31,7 +36,7 @@ public class R2RMLMappingFactory {
 
 	public static R2RMLMapping createR2RMLMapping(String mappingFile, String baseIRI) {
 		R2RMLMapping mapping = new R2RMLMapping();
-		
+
 		// We reason over the mapping to facilitate retrieval of the mappings
 		Model data = FileManager.get().loadModel(mappingFile);
 
@@ -40,20 +45,41 @@ public class R2RMLMappingFactory {
 		data.add(QueryExecutionFactory.create(CONSTRUCTOMAPS, data).execConstruct());
 		data.add(QueryExecutionFactory.create(CONSTRUCTPMAPS, data).execConstruct());
 		data.add(QueryExecutionFactory.create(CONSTRUCTGMAPS, data).execConstruct());
-		
+
 		Model schema = ModelFactory.createDefaultModel();
 		schema.read(R2RMLMappingFactory.class.getResourceAsStream("/r2rml.rdf"), null);
-		
-		//Model schema = FileManager.get().loadModel("./resources/r2rml.rdf");
+
+		// Model schema = FileManager.get().loadModel("./resources/r2rml.rdf");
 		InfModel mappingmodel = ModelFactory.createRDFSModel(schema, data);
 
+		// Check to see if we have functions that we can retrieve over HTTP
+		List<RDFNode> functions = mappingmodel.listObjectsOfProperty(RRF.function).toList();
+		for(RDFNode n : functions) {
+			if(n.isURIResource()) {
+				String uri = n.asResource().getURI();
+				if(isValidURL(uri)) {
+					logger.info("Detected function with URI that is a URL. Try to fetch it.");
+					try {
+						Model m = ModelFactory.createDefaultModel();
+						m.read(uri);
+						mappingmodel.add(m);
+					} catch (Exception e) {
+						logger.warn("Couldn't fetch resource via URI " + uri + " (" + e.getMessage() + ")");
+						logger.warn("We will continue and hope for the best. :-)");
+					}
+				}
+
+			}
+		}
+
+		// Look for the TriplesMaps
 		List<Resource> list = mappingmodel.listSubjectsWithProperty(RDF.type, R2RML.TriplesMap).toList();
-		
+
 		if(list.isEmpty()) {
 			logger.error("R2RML Mapping File has no TriplesMaps.");
 			return null;
 		}
-		
+
 		for(Resource tm : list) {
 			TriplesMap triplesMap = new TriplesMap(tm, baseIRI);
 			if(!triplesMap.preProcessAndValidate()) {
@@ -62,9 +88,28 @@ public class R2RMLMappingFactory {
 			}
 			mapping.addTriplesMap(tm, triplesMap);
 		}		
-		
+
 		return mapping;
 	}
 
+	/**
+	 * Small utility function  to test URL based on 
+	 * http://stackoverflow.com/questions/1600291/validating-url-in-java
+	 * 
+	 * @param uri
+	 * @return
+	 */
+	private static boolean isValidURL(String uri) {
+		try {  
+			URL u = new URL(uri);  
+			u.toURI();
+		} catch (MalformedURLException e) {  
+			return false;  
+		} catch (URISyntaxException e) {
+			return false;
+		}
+		return true; 
+	}
+
 
 }

+ 31 - 0
test/resources/F02.mapping.ttl

@@ -0,0 +1,31 @@
+@prefix rr: <http://www.w3.org/ns/r2rml#> .
+@prefix rrf: <http://kdeg.scss.tcd.ie/ns/rrf#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> . 
+
+<#TriplesMap1>
+    rr:logicalTable [ rr:tableName "EMP" ];
+    rr:subjectMap [
+        rr:template "http://data.example.com/employee/{EMPNO}";
+        rr:class foaf:Person;
+    ];
+    rr:predicateObjectMap [
+        rr:predicate foaf:givenName;
+        rr:objectMap [ rr:column "FNAME" ];
+    ];
+    rr:predicateObjectMap [
+        rr:predicate foaf:lastName;
+        rr:objectMap [ rr:column "LNAME" ];
+    ];
+    rr:predicateObjectMap [
+        rr:predicate foaf:name;
+        rr:objectMap [
+	        rrf:functionCall [
+	 			rrf:function <http://data.example.org/functions/concat> ;
+	 			rrf:parameterBindings (
+	 				[ rr:column "FNAME" ]
+	 				[ rr:column "LNAME" ]
+	 			) ;
+	 		] ; 
+	 	]
+    ]    
+    .

+ 17 - 0
test/resources/F02.output.ttl

@@ -0,0 +1,17 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> . 
+
+<http://data.example.com/employee/1> rdf:type foaf:Person.
+<http://data.example.com/employee/1> foaf:givenName "CHRISTOPHE".
+<http://data.example.com/employee/1> foaf:lastName "DEBRUYNE".
+<http://data.example.com/employee/1> foaf:name "CHRISTOPHE DEBRUYNE".
+
+<http://data.example.com/employee/2> rdf:type foaf:Person.
+<http://data.example.com/employee/2> foaf:givenName "ADEMAR".
+<http://data.example.com/employee/2> foaf:lastName "CROTTI JUNIOR".
+<http://data.example.com/employee/2> foaf:name "ADEMAR CROTTI JUNIOR".
+
+<http://data.example.com/employee/3> rdf:type foaf:Person.
+<http://data.example.com/employee/3> foaf:givenName "DECLAN".
+<http://data.example.com/employee/3> foaf:lastName "O'SULLIVAN".
+<http://data.example.com/employee/3> foaf:name "DECLAN O'SULLIVAN".

+ 0 - 4
test/test/TestR2RMLF.java

@@ -91,10 +91,6 @@ public class TestR2RMLF extends TestCase {
 		}
 	}
 
-	/**
-	 * 2.3 Example: Mapping a Simple Table
-	 * https://www.w3.org/TR/r2rml/#example-simple
-	 */
 	public void testExampleF01() {
 		Configuration configuration = new Configuration();
 		configuration.setMappingFile("./test/resources/F01.mapping.ttl");

+ 95 - 0
test/test/TestR2RMLFLinkedData.java

@@ -0,0 +1,95 @@
+package test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLNonTransientConnectionException;
+import java.sql.Statement;
+
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Logger;
+import org.junit.BeforeClass;
+
+import junit.framework.TestCase;
+import r2rml.engine.Configuration;
+import r2rml.engine.R2RMLProcessor;
+
+/**
+ * Unit test for testing the functionality of this implementation using an
+ * in memory database.
+ * 
+ * @author Christophe Debruyne
+ *
+ */
+public class TestR2RMLFLinkedData extends TestCase {
+
+	private static Logger logger = Logger.getLogger(TestR2RMLFLinkedData.class.getName());
+	private static String connectionURL = "jdbc:derby:memory:testing";
+
+	public TestR2RMLFLinkedData(String testName) {
+		super(testName);
+	}
+
+	@BeforeClass
+	public static void init() throws Exception {
+		// Log4J junit configuration.
+		BasicConfigurator.configure();
+	}
+
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		try {
+			logger.info("Starting in-memory database for unit tests");
+			Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+			DriverManager.getConnection(connectionURL + ";create=true").close();
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			fail("Exception during database startup.");
+		}
+		try {
+			Connection connection = DriverManager.getConnection(connectionURL);
+			Statement statement = connection.createStatement();
+			statement.execute("CREATE TABLE EMP(EMPNO INT PRIMARY KEY, FNAME VARCHAR(20), LNAME VARCHAR(20))");
+			statement.execute("INSERT INTO EMP VALUES (1, 'CHRISTOPHE', 'DEBRUYNE')");
+			statement.execute("INSERT INTO EMP VALUES (2, 'ADEMAR', 'CROTTI JUNIOR')");
+			statement.execute("INSERT INTO EMP VALUES (3, 'DECLAN', 'O''SULLIVAN')");
+			statement.close();
+			connection.close();
+
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			fail("Failure setting up the database.");
+		}
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		logger.info("Stopping in-memory database.");
+		try {
+			DriverManager.getConnection(connectionURL + ";drop=true").close();
+		} catch (SQLNonTransientConnectionException ex) {
+			if (ex.getErrorCode() != 45000) {
+				throw ex;
+			}
+			// Shutdown success
+		}
+	}
+
+	public void testExampleF01() {
+		Configuration configuration = new Configuration();
+		configuration.setMappingFile("./test/resources/F02.mapping.ttl");
+		configuration.setConnectionURL(connectionURL);
+		R2RMLProcessor engine = new R2RMLProcessor(configuration);
+		engine.execute();
+		Model model = engine.getDataset().getDefaultModel();
+		Model target = ModelFactory.createDefaultModel();
+		target.read("./test/resources/F02.output.ttl");
+		assertEquals(true, model.difference(target).isEmpty());
+		assertEquals(true, target.difference(model).isEmpty());	
+	}
+
+}