Browse Source

Fixed support for "on-the-fly" datatypes using a BaseDataType.

Christophe Debruyne 7 years ago
parent
commit
504231d0a0

+ 2 - 40
src/r2rml/engine/R2RMLTypeMapper.java

@@ -1,9 +1,8 @@
 package r2rml.engine;
 
-import org.apache.jena.datatypes.DatatypeFormatException;
+import org.apache.jena.datatypes.BaseDatatype;
 import org.apache.jena.datatypes.RDFDatatype;
 import org.apache.jena.datatypes.TypeMapper;
-import org.apache.jena.graph.impl.LiteralLabel;
 import org.apache.jena.rdf.model.Resource;
 
 /**
@@ -32,44 +31,7 @@ public class R2RMLTypeMapper {
 	}
 
 	private static RDFDatatype createNewDataTypeFor(String uri) {
-		return new RDFDatatype() {
-			
-			@Override
-			public String unparse(Object value) { return null; }
-			
-			@Override
-			public Object parse(String lexicalForm) throws DatatypeFormatException { return null; }
-			
-			@Override
-			public RDFDatatype normalizeSubType(Object value, RDFDatatype dt) { return null; }
-			
-			@Override
-			public boolean isValidValue(Object valueForm) { return false; }
-			
-			@Override
-			public boolean isValidLiteral(LiteralLabel lit) { return false; }
-			
-			@Override
-			public boolean isValid(String lexicalForm) { return false; }
-			
-			@Override
-			public boolean isEqual(LiteralLabel value1, LiteralLabel value2) { return false; }
-			
-			@Override
-			public String getURI() { return uri; }
-			
-			@Override
-			public Class<?> getJavaClass() { return null; }
-			
-			@Override
-			public int getHashCode(LiteralLabel lit) { return 0; }
-			
-			@Override
-			public Object extendedTypeDefinition() { return null; }
-			
-			@Override
-			public Object cannonicalise(Object value) { return null; }
-		};
+		return new BaseDatatype(uri);
 	}
 
 }

+ 16 - 0
test/resources/14.mapping.ttl

@@ -0,0 +1,16 @@
+@prefix rr: <http://www.w3.org/ns/r2rml#> .
+@prefix ex: <http://example.com/ns#> .
+
+<#TriplesMap1>
+    rr:logicalTable [ rr:tableName "EMP" ];
+    rr:subjectMap [
+        rr:template "http://data.example.com/employee/{EMPNO}";
+        rr:class ex:Employee;
+    ];
+    rr:predicateObjectMap [
+        rr:predicate ex:name;
+        rr:objectMap [ 
+			rr:column "ENAME" ;
+			rr:datatype ex:test ;
+		];
+    ].

+ 4 - 0
test/resources/14.output.ttl

@@ -0,0 +1,4 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix ex: <http://example.com/ns#> .
+<http://data.example.com/employee/7369> rdf:type ex:Employee.
+<http://data.example.com/employee/7369> ex:name "SMITH"^^ex:test.

+ 17 - 0
test/test/TestR2RML.java

@@ -271,5 +271,22 @@ public class TestR2RML extends TestCase {
 		// assertEquals(true, output.difference(compare).isEmpty());
 		// assertEquals(true, compare.difference(output).isEmpty());
 	}
+	
+	/**
+	 * Testing adhoc datatypes...
+	 * @throws R2RMLException
+	 */
+	public void testExample14() throws R2RMLException {
+		Configuration configuration = new Configuration();
+		configuration.setMappingFile("./test/resources/14.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/14.output.ttl");
+		assertEquals(true, model.difference(target).isEmpty());
+		assertEquals(true, target.difference(model).isEmpty());	
+	}
 
 }