diff --git a/build-release.sh b/build-release.sh
new file mode 100755
index 00000000000..bfccd085e3a
--- /dev/null
+++ b/build-release.sh
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+###
+# README:
+#
+# The required components for building the release can be found: http://obda.inf.unibz.it/files/dev/Dependencies.zip
+#
+# - In UNIX system, locate the dependencies folder in ONTOP_DEP_HOME variable.
+#
+###
+
+# location for the build dependencies home
+export ONTOP_DEP_HOME=/Users/timi/Documents/Dependencies
+
+# location for the JDBC plugin jars
+export JDBC_PLUGINS_PATH=$ONTOP_DEP_HOME
+
+# location for protege clean folder (Protege 4.2)
+export PROTEGE_COPY_PATH=$ONTOP_DEP_HOME
+export PROTEGE_COPY_FILENAME=protege-4.2-beta.284
+export PROTEGE_MAIN_FOLDER_NAME=Protege_4.2
+export PROTEGE_MAIN_PLUGIN=ontopro-plugin
+
+# location and name for jetty distribution (should be ZIP)
+export JETTY_COPY_PATH=$ONTOP_DEP_HOME
+export JETTY_COPY_FILENAME=jetty-distribution-8.1.9
+export JETTY_INNER_FOLDERNAME=jetty-distribution-8.1.9
+
+#location for sesame and workbench WEB-APP jars
+export OPENRDF_WORKBENCH_PATH=$ONTOP_DEP_HOME
+export OPENRDF_SESAME_PATH=$ONTOP_DEP_HOME
+
+# name of the wars for sesame and workbench WEB-APPs (these have to be already customized with stylesheets)
+export OPENRDF_SESAME_FILENAME=openrdf-sesame
+export OPENRDF_WORKBENCH_FILENAME=openrdf-workbench
+
+# folder names of the output
+export PROTEGE_DIST=ontopPro
+export QUEST_SESAME_DIST=QuestSesame
+export QUEST_JETTY_DIST=QuestJetty
+export OWL_API_DIST=QuestOWL
+
+export VERSION=1.8
+export REVISION=0
+
+#svn update
+mvn clean
+
+# Packing the -ontopPro- distribution
+#
+echo ""
+echo "========================================="
+echo " Making -ontopPro- distribution package"
+echo "-----------------------------------------"
+echo "pluginVersion=$VERSION.$REVISION" > obdalib-core/src/main/resources/it/unibz/krdb/obda/utils/version.properties
+rm -fr obdalib-protege41/dist
+mvn install -DskipTests
+cd obdalib-protege41/
+mvn bundle:bundle -DskipTests
+
+rm -fr ../quest-distribution/$PROTEGE_DIST
+mkdir ../quest-distribution/$PROTEGE_DIST
+cp target/it.unibz.inf.obda.p4plugin-$VERSION.jar ../quest-distribution/$PROTEGE_DIST/it.unibz.inf.obda.p4plugin-$VERSION.$REVISION.jar
+cp $PROTEGE_COPY_PATH/$PROTEGE_COPY_FILENAME.zip ../quest-distribution/$PROTEGE_DIST/
+
+cd ../quest-distribution/$PROTEGE_DIST/
+
+mkdir -p $PROTEGE_MAIN_FOLDER_NAME/plugins
+cp it.unibz.inf.obda.p4plugin-$VERSION.$REVISION.jar $PROTEGE_MAIN_FOLDER_NAME/plugins/
+cp $JDBC_PLUGINS_PATH/org.protege.osgi.jdbc.jar $PROTEGE_MAIN_FOLDER_NAME/plugins/
+cp $JDBC_PLUGINS_PATH/org.protege.osgi.jdbc.prefs.jar $PROTEGE_MAIN_FOLDER_NAME/plugins/
+zip ../$PROTEGE_DIST/$PROTEGE_MAIN_PLUGIN-$VERSION.$REVISION.zip $PROTEGE_MAIN_FOLDER_NAME/plugins/*.*
+
+zip $PROTEGE_COPY_FILENAME.zip $PROTEGE_MAIN_FOLDER_NAME/plugins/*
+mv $PROTEGE_COPY_FILENAME.zip $PROTEGE_MAIN_PLUGIN-with-protege-$VERSION.$REVISION.zip
+
+rm -fr $PROTEGE_MAIN_FOLDER_NAME
+cd ..
+
+# Packing the sesame distribution
+#
+echo ""
+echo "========================================="
+echo " Making Sesame distribution package"
+echo "-----------------------------------------"
+rm -fr $QUEST_SESAME_DIST
+mkdir -p $QUEST_SESAME_DIST/WEB-INF/lib
+mvn assembly:assembly -DskipTests
+cp target/quest-distribution-$VERSION-sesame-bin.jar $QUEST_SESAME_DIST/WEB-INF/lib/ontop-distribution-$VERSION.$REVISION.jar
+unzip -q -d $QUEST_SESAME_DIST/WEB-INF/lib/ target/quest-distribution-$VERSION-dependencies.zip
+cp $OPENRDF_SESAME_PATH/$OPENRDF_SESAME_FILENAME.war $QUEST_SESAME_DIST/
+cp $OPENRDF_WORKBENCH_PATH/$OPENRDF_WORKBENCH_FILENAME.war $QUEST_SESAME_DIST/
+
+cd $QUEST_SESAME_DIST
+echo ""
+echo "[INFO] Adding QuestSesame and dependency JARs to openrdf-sesame.war"
+jar -uf $OPENRDF_SESAME_FILENAME.war WEB-INF/lib/*
+
+echo "[INFO] Adding QuestSesame and dependency JARs to openrdf-workbench.war"
+jar -uf $OPENRDF_WORKBENCH_FILENAME.war WEB-INF/lib/*
+
+rm -fr WEB-INF
+cd ..
+
+# Packaging the sesame jetty distribution
+#
+echo ""
+echo "========================================="
+echo " Making Sesame Jetty distribution package"
+echo "-----------------------------------------"
+rm -fr $QUEST_JETTY_DIST
+mkdir $QUEST_JETTY_DIST
+cp $JETTY_COPY_PATH/$JETTY_COPY_FILENAME.zip $QUEST_JETTY_DIST/ontop-with-jetty-$VERSION.$REVISION.zip
+
+export JETTY_FOLDER=$JETTY_INNER_FOLDERNAME
+cd $QUEST_JETTY_DIST
+mkdir -p $JETTY_INNER_FOLDERNAME/webapps
+cp ../$QUEST_SESAME_DIST/$OPENRDF_SESAME_FILENAME.war $JETTY_FOLDER/webapps
+cp ../$QUEST_SESAME_DIST/$OPENRDF_WORKBENCH_FILENAME.war $JETTY_FOLDER/webapps
+
+zip ontop-with-jetty-$VERSION.$REVISION.zip $JETTY_FOLDER/webapps/*
+
+rm -fr $JETTY_FOLDER
+cd ..
+
+# Packaging the OWL-API distribution
+#
+echo ""
+echo "========================================="
+echo " Making OWL-API distribution package"
+echo "-----------------------------------------"
+rm -fr $OWL_API_DIST
+mkdir $OWL_API_DIST
+echo "[INFO] Copying files..."
+cp target/quest-distribution-$VERSION-bin.zip $OWL_API_DIST/ontop-distribution-$VERSION.$REVISION.zip
+
+echo ""
+echo "Done."
+echo ""
diff --git a/obdalib-core/pom.xml b/obdalib-core/pom.xml
index 0586b1e1946..96050c10330 100644
--- a/obdalib-core/pom.xml
+++ b/obdalib-core/pom.xml
@@ -35,18 +35,6 @@
commons-cli
commons-cli
-
- org.openrdf.sesame
- sesame-model
-
-
- org.openrdf.sesame
- sesame-rio-api
-
-
- org.openrdf.sesame
- sesame-rio-turtle
-
junit
junit
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLWriter.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLWriter.java
deleted file mode 100644
index ae598d7c76b..00000000000
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLWriter.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (C) 2009-2013, Free University of Bozen Bolzano
- * This source code is available under the terms of the Affero General Public
- * License v3.
- *
- * Please see LICENSE.txt for full license terms, including the availability of
- * proprietary exceptions.
- */
-package it.unibz.krdb.obda.io;
-
-import it.unibz.krdb.obda.model.CQIE;
-import it.unibz.krdb.obda.model.DataTypePredicate;
-import it.unibz.krdb.obda.model.Function;
-import it.unibz.krdb.obda.model.Term;
-import it.unibz.krdb.obda.model.OBDAMappingAxiom;
-import it.unibz.krdb.obda.model.OBDAModel;
-import it.unibz.krdb.obda.model.OBDAQuery;
-import it.unibz.krdb.obda.model.Predicate;
-import it.unibz.krdb.obda.model.URIConstant;
-import it.unibz.krdb.obda.model.URITemplatePredicate;
-import it.unibz.krdb.obda.model.ValueConstant;
-import it.unibz.krdb.obda.model.Variable;
-import it.unibz.krdb.obda.model.impl.BNodePredicateImpl;
-import it.unibz.krdb.obda.model.impl.FunctionalTermImpl;
-import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-
-public class R2RMLWriter {
-
- BufferedWriter out;
- List mappings;
- URI sourceUri;
- PrefixManager prefixmng;
-
- public R2RMLWriter(File file, OBDAModel obdamodel, URI sourceURI)
- {
- try {
- this.out = new BufferedWriter(new FileWriter(file));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- this.sourceUri = sourceURI;
- this.mappings = obdamodel.getMappings(sourceUri);
- this.prefixmng = obdamodel.getPrefixManager();
- }
-
- public R2RMLWriter(OBDAModel obdamodel, URI sourceURI)
- {
- this.sourceUri = sourceURI;
- this.mappings = obdamodel.getMappings(sourceUri);
- this.prefixmng = obdamodel.getPrefixManager();
- }
-
-
- public void write(File file)
- {
- try {
- this.out = new BufferedWriter(new FileWriter(file));
-
- out.write("@prefix rr: .\n");
-
- Map prefixes = prefixmng.getPrefixMap();
- out.write("@prefix xsd: .\n");
- for(String key : prefixes.keySet())
- {
- out.write("@prefix "+key+" <"+prefixes.get(key)+"> .\n");
- }
- out.write("@base .\n\n");
-
- for (OBDAMappingAxiom mapping : mappings)
- {
- if (mapping.getId().contains("join"))
- getJoinMapping(mapping);
- else{
- out.write("<"+mapping.getId().replaceAll(" ", "_")+">\n\t a rr:TriplesMap;\n");
-
- //write sql table
- out.write("\trr:logicalTable "+getSQL(mapping.getSourceQuery().toString()));
-
-
- OBDAQuery targetQuery = mapping.getTargetQuery();
-
- //write subjectMap
- out.write("\trr:subjectMap ["+getSubjectMap(targetQuery)+" ]");
-
- List predobjs = getPredObjMap(targetQuery);
- if (predobjs.size() > 0)
- out.write(";\n");
- else
- out.write(".\n\n");
-
- for (int i=0;i 0)
- out.write("\trr:predicateObjectMap [\n"+ predobjs.get(predobjs.size()-1) + "\n\t].\n\n");
-
- }
- }
-
- out.close();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
-
- }
- }
-
- private String getSQL(String sql) {
- if (sql.contains("*"))
- {
- String table = getTableName(sql);
- return ("[ rr:tableName \"\\"+table.substring(0, table.length()-1)+"\\\"\" ];\n");
- }
- else
- return ("[ rr:sqlQuery \"\"\"\n\t\t"+sql+"\n\t\"\"\" ];\n");
- }
-
- private void getJoinMapping(OBDAMappingAxiom mapping) throws IOException {
-
- String sql = mapping.getSourceQuery().toString();
- String childSql = getChildSQL(sql);
- String parentSql = getParentSQL(sql);
- String refMap = findParentRef(parentSql);
-
-
-
- OBDAQuery targetQuery = mapping.getTargetQuery();
-
-
- out.write("<"+mapping.getId()+">\n\t a rr:TriplesMap;\n");
-
- //write sql table
- out.write("\trr:logicalTable "+getSQL(childSql));
-
-
- //write subjectMap
- out.write("\trr:subjectMap ["+getSubjectMap(targetQuery)+" ];\n");
-
- //write predobjmap
- out.write("\trr:predicateObjectMap [\n"+ getJoinPredicate(targetQuery) + getJoinObject(sql,refMap) + "\t].\n\n");
-
-
- }
-
- private String getJoinObject(String targetQuery, String parent) {
- String childCond = getChildCond(targetQuery);
- String parentCond = getParentCond(targetQuery);
-
- return "\t\t rr:objectMap [\n\t\t\ta rr:RefObjectMap;\n\t\t\trr:parentTriplesMap <"+
- parent+">;\n\t\t\trr:joinCondition [\n\t\t\t\trr:child \"\\\""+childCond+"\\\"\";\n\t\t\t\trr:parent \"\\\""
- +parentCond+"\\\"\";\n\t\t];\n\t];\n";
-
- }
-
- private String getJoinPredicate(OBDAQuery targetQuery) {
- //there's only one term in the body
- Term term = ((CQIE)targetQuery).getBody().get(0);
- if (term instanceof FunctionalTermImpl)
- {
- Function atom = (FunctionalTermImpl) term;
- //not class atoms
- if (atom.getTerms().size() > 1)
- {
- return ("\t\t rr:predicate \t<"+atom.getFunctionSymbol().toString()+"> ;\n");
- }
- }
- return null;
- }
-
- private String findParentRef(String parentSql) {
- for(OBDAMappingAxiom mapping : mappings)
- {
- if (mapping.getSourceQuery().toString().equals(parentSql))
- return mapping.getId();
- }
- return null;
- }
-
- private String getParentCond(String sql) {
- int begin = sql.indexOf("PARENT.");
- int end = sql.length();
-
- if (sql.contains("AND"))
- //i'm screwed
- end = 0;
-
- return sql.substring(begin+7, end);
- }
-
- private String getChildCond(String sql) {
- int begin = sql.indexOf("CHILD.");
- int end = sql.indexOf(" = ");
- return sql.substring(begin+6, end);
- }
-
- private String getChildSQL(String sql) {
- String child = "";
- int index = sql.indexOf("(");
- child = sql.substring(index+1,sql.indexOf(" as CHILD")-1);
-
- return (child);
- }
-
- private String getParentSQL(String sql) {
- String parent = "";
- int index = sql.indexOf("CHILD, ");
- parent = sql.substring(index+8,sql.indexOf(" as PARENT")-1);
-
- return (parent);
- }
-
- private String getSubjectMap(OBDAQuery targetQuery) {
-
- String subject = "";
- List classes = new ArrayList();
- CQIE cqie = (CQIE)targetQuery;
- List body = cqie.getBody();
- Iterator it = body.iterator();
- while(it.hasNext())
- {
- Term term = it.next();
- if (term instanceof Function)
- {
- Function atom = (Function) term;
- int arity = atom.getTerms().size();
-
- if (arity == 1) {
- // class
- if (atom.getPredicate().isClass())
- classes.add(atom.getFunctionSymbol().toString());
- }
- }
-
- }
-
- //get first term = subject
- Term term = body.get(0).getTerm(0);
- if (term instanceof FunctionalTermImpl)
- {
- Function atom = (FunctionalTermImpl) term;
- int arity = atom.getTerms().size();
-
-
- if (arity == 1) {
-
- // constant - arity 1
- if (!atom.getPredicate().isClass())
- subject += " rr:constant " + removeJoinKeyword(atom.getTerm(0))+ ";\n";
-
- } else if (arity == 2 || atom.getPredicate().equals(OBDAVocabulary.RDFS_LITERAL_LANG)) {
-
- // column - arity 2 - base prefix + {} + 1 var
- if (atom.getTerm(0).toString().equals("\"http://example.com/base/{}\""))
- subject += " rr:column \"\\\""+ removeJoinKeyword(atom.getTerm(1))+"\\\"\"";
- else //template - arity 2
- subject += " rr:template " + getTemplate(atom);
-
- } else if (arity > 2) {
- // template - any arity
- subject += " rr:template " + getTemplate(atom) +"\n";
- }
-
- if (atom.getFunctionSymbol() instanceof BNodePredicateImpl) {
- // bnode
- subject += "; rr:termType rr:BlankNode ";
- }
- if (atom.getPredicate().equals(OBDAVocabulary.RDFS_LITERAL_LANG))
- subject += "; rr:termType rr:Literal ";
-
-
- for(String cl : classes)
- subject += ";\n\t\t\t\t\t rr:class <"+cl+">\n";
- }
-
-
- return subject;
- }
- private String removeJoinKeyword(Term atom)
- {
- String str = atom.toString();
- if (str.startsWith("CHILD_"))
- return str.substring(6);
- else if (str.startsWith("PARENT_"))
- return str.substring(7);
- return str;
- }
-
- private String getTemplate(Function atom)
- {
- String temp = atom.getTerm(0).toString();
- String newtemp = "";
- //copy uri part
- int oldidx=0;
-
- int i=1;
- while(temp.contains("{}"))
- {
- int idx = temp.indexOf("{}");
- newtemp+= temp.substring(oldidx, idx);
-
- oldidx = idx+2;
- newtemp += "{\\\""+removeJoinKeyword(atom.getTerm(i)) + "\\\"}";
- i++;
- temp = temp.replaceFirst("[{]", "[");
-
- }
-
- newtemp += temp.substring(oldidx, temp.length());
- return newtemp;
- }
-
- private String getTableName(String sql)
- {
- int index = sql.indexOf("FROM");
- return sql.substring(index+5, sql.length());
- }
-
-
- private List getPredObjMap(OBDAQuery targetQuery)
- {
- List predobj = new ArrayList();
- CQIE cqie = (CQIE)targetQuery;
- List body = cqie.getBody();
- Iterator it = body.iterator();
- while(it.hasNext())
- {
- Term term = it.next();
- if (term instanceof Function)
- {
- Function atom = (Function) term;
- //not class atoms
- if (atom.getTerms().size() > 1)
- {
- predobj.add("\t\t rr:predicate \t<"+atom.getFunctionSymbol().toString()+"> ;\n"+getObject(atom.getTerm(1)));
- }
- }
-
- }
-
- return predobj;
- }
-
- private String getObject(Term obj)
- {
- String object = "";
- if(obj instanceof FunctionalTermImpl)
- {
-
- FunctionalTermImpl fobj = ((FunctionalTermImpl) obj);
- int size = fobj.getTerms().size();
- if (size == 1)
- { //object
- if (fobj.isDataTypeFunction()) {
- Predicate p = fobj.getFunctionSymbol();
- if (p instanceof DataTypePredicate || p instanceof URITemplatePredicate)
- object = "\t\t rr:objectMap \t[ rr:column \"\\\""+fobj.getTerm(0).toString()+"\\\"\"; rr:datatype <"+ p.toString() + "> ]";
- else
- object = "\t\t rr:objectMap \t[ rr:column \"\\\""+fobj.getTerm(0).toString()+"\\\"\"; rr:datatype "+ p.toString() + " ]";
- } else
- object = "\t\t rr:object \t "+((Function)obj).getTerm(0).toString();
- return object;
- }
- else
- {
- String lang ="", templ ="";
-
- if (fobj.getTerm(0).toString().startsWith("\"http"))
- templ = " rr:template "+getTemplate((Function)obj);
- else
- templ = " rr:column \"\\\""+fobj.getTerm(0).toString()+"\\\"\"";
-
-
- if (fobj.getFunctionSymbol().equals(OBDAVocabulary.RDFS_LITERAL_LANG))
- {
- if(fobj.getTerm(size-1) instanceof ValueConstant){
- if (!((ValueConstant)(fobj.getTerm(size-1))).toString().equals(OBDAVocabulary.NULL.toString()))
- lang = "; rr:language "+ fobj.getTerm(size-1).toString();
- }
- object = "\t\t rr:objectMap \t[ "+templ+ lang+" ]";
- }
- else
- {
- object = "\t\t rr:objectMap \t[ "+templ+" ]";
- }
- }
- }
- else if (obj instanceof Variable)
- object = "\t\t rr:objectMap [ rr:column \"\\\""+obj.toString()+"\\\"\" ]";
- else if (obj instanceof URIConstant)
- System.out.println("URIConst: "+obj.toString());
- else if (obj instanceof ValueConstant)
- System.out.println("ValueConst: "+obj.toString());
- else if (((Function)obj).isDataFunction())
- {
- Iterator varcol = ((Function)obj).getVariables().iterator();
- object = "\t\t rr:objectMap \t[ rr:column \"\\\""+varcol.next().toString()+"\\\"\"; rr:datatype xsd:"+
- ((Function)obj).getFunctionSymbol().toString().split("#")[1]+"]";
- }
- else
- System.out.println("Found: "+obj.toString());
-
- return object;
- }
-
- public static void main(String args[])
- {
- String file = "C:/Project/Test Cases/mapping2.ttl";
- //"C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D004/r2rmlb.ttl";
- R2RMLReader reader = new R2RMLReader(file);
- R2RMLWriter writer = new R2RMLWriter(reader.readModel(URI.create("blah")),URI.create("blah"));
- File out = new File("C:/Project/Test Cases/mapping1.ttl");
- //"C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D004/WRr2rmlb.ttl");
- writer.write(out);
-
- }
-}
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/model/impl/SQLQueryImpl.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/model/impl/SQLQueryImpl.java
index 934221cb1c9..54f5c676cf5 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/model/impl/SQLQueryImpl.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/model/impl/SQLQueryImpl.java
@@ -22,13 +22,17 @@ protected SQLQueryImpl(String sqlQuery) {
this.sqlQuery = sqlQuery;
}
- @Override
- public String toString() {
+ public String getSQLQuery() {
if ((sqlQuery == null) || (sqlQuery.equals(""))) {
return "";
}
return sqlQuery;
}
+
+ @Override
+ public String toString() {
+ return getSQLQuery();
+ }
@Override
public SQLQueryImpl clone() {
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/DatalogQueryHelper.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/DatalogQueryHelper.java
index 41d2e94edba..e68284d8278 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/DatalogQueryHelper.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/DatalogQueryHelper.java
@@ -8,8 +8,8 @@
*/
package it.unibz.krdb.obda.parser;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.model.OBDALibConstants;
+import it.unibz.krdb.obda.io.PrefixManager;
import java.util.Map;
import java.util.Set;
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TargetQueryParser.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TargetQueryParser.java
index 4f1e08924f3..b37e1c13c5e 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TargetQueryParser.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TargetQueryParser.java
@@ -8,8 +8,8 @@
*/
package it.unibz.krdb.obda.parser;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.model.CQIE;
+import it.unibz.krdb.obda.io.PrefixManager;
public interface TargetQueryParser {
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleOBDASyntaxParser.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleOBDASyntaxParser.java
index ee37c418947..c2ada7a82a8 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleOBDASyntaxParser.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleOBDASyntaxParser.java
@@ -8,9 +8,9 @@
*/
package it.unibz.krdb.obda.parser;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.model.CQIE;
import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
+import it.unibz.krdb.obda.io.PrefixManager;
import java.util.Map;
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleSyntaxParser.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleSyntaxParser.java
index c88489212e9..5fe8c39a9e5 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleSyntaxParser.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/parser/TurtleSyntaxParser.java
@@ -8,9 +8,9 @@
*/
package it.unibz.krdb.obda.parser;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.model.CQIE;
import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
+import it.unibz.krdb.obda.io.PrefixManager;
import java.util.Map;
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/renderer/TargetQueryRenderer.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/renderer/TargetQueryRenderer.java
index 3a708015505..22ed612cbf6 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/renderer/TargetQueryRenderer.java
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/renderer/TargetQueryRenderer.java
@@ -8,7 +8,6 @@
*/
package it.unibz.krdb.obda.renderer;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.io.SimplePrefixManager;
import it.unibz.krdb.obda.model.CQIE;
import it.unibz.krdb.obda.model.DataTypePredicate;
@@ -22,6 +21,7 @@
import it.unibz.krdb.obda.model.Variable;
import it.unibz.krdb.obda.model.impl.FunctionalTermImpl;
import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
+import it.unibz.krdb.obda.io.PrefixManager;
import java.util.ArrayList;
import java.util.List;
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/uri/UriTemplateHelper.java b/obdalib-core/src/main/java/it/unibz/krdb/obda/uri/UriTemplateHelper.java
new file mode 100644
index 00000000000..2e0d4c78d93
--- /dev/null
+++ b/obdalib-core/src/main/java/it/unibz/krdb/obda/uri/UriTemplateHelper.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009-2013, Free University of Bozen Bolzano
+ * This source code is available under the terms of the Affero General Public
+ * License v3.
+ *
+ * Please see LICENSE.txt for full license terms, including the availability of
+ * proprietary exceptions.
+ */
+package it.unibz.krdb.obda.uri;
+
+import it.unibz.krdb.obda.model.Function;
+import it.unibz.krdb.obda.model.Variable;
+
+import java.util.Iterator;
+
+public class UriTemplateHelper {
+
+ public static String getUriTemplateString(Function uriFunction) {
+ String template = uriFunction.getTerm(0).toString();
+ Iterator vars = uriFunction.getVariables().iterator();
+ String[] split = template.split("\\{\\}");
+ int i = 0;
+ template = "";
+ while (vars.hasNext()) {
+ template += split[i] + "{" + vars.next().toString() + "}";
+ i++;
+ }
+ if (split.length-i > 1)
+ template += split[i];
+
+ return template;
+ }
+}
diff --git a/obdalib-core/src/main/resources/it/unibz/krdb/obda/utils/version.properties b/obdalib-core/src/main/resources/it/unibz/krdb/obda/utils/version.properties
index 76b5b6feff4..4da3fe90d8a 100644
--- a/obdalib-core/src/main/resources/it/unibz/krdb/obda/utils/version.properties
+++ b/obdalib-core/src/main/resources/it/unibz/krdb/obda/utils/version.properties
@@ -1 +1 @@
-pluginVersion=1.8-b2564
+pluginVersion=1.8.0
diff --git a/obdalib-core/src/test/java/it/unibz/krdb/obda/api/io/PrefixRendererTest.java b/obdalib-core/src/test/java/it/unibz/krdb/obda/api/io/PrefixRendererTest.java
index 4a82bba4a95..500faf1b5de 100644
--- a/obdalib-core/src/test/java/it/unibz/krdb/obda/api/io/PrefixRendererTest.java
+++ b/obdalib-core/src/test/java/it/unibz/krdb/obda/api/io/PrefixRendererTest.java
@@ -8,7 +8,6 @@
*/
package it.unibz.krdb.obda.api.io;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.io.SimplePrefixManager;
import it.unibz.krdb.obda.model.CQIE;
import it.unibz.krdb.obda.model.DatalogProgram;
@@ -17,6 +16,7 @@
import it.unibz.krdb.obda.model.OBDADataFactory;
import it.unibz.krdb.obda.model.impl.FunctionalTermImpl;
import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
+import it.unibz.krdb.obda.io.PrefixManager;
import java.util.Collections;
import java.util.LinkedList;
diff --git a/obdalib-core/src/test/java/it/unibz/krdb/obda/parser/TurtleSyntaxParserTest.java b/obdalib-core/src/test/java/it/unibz/krdb/obda/parser/TurtleSyntaxParserTest.java
index af262295772..6b3645e0dcd 100644
--- a/obdalib-core/src/test/java/it/unibz/krdb/obda/parser/TurtleSyntaxParserTest.java
+++ b/obdalib-core/src/test/java/it/unibz/krdb/obda/parser/TurtleSyntaxParserTest.java
@@ -8,8 +8,8 @@
*/
package it.unibz.krdb.obda.parser;
-import it.unibz.krdb.obda.io.PrefixManager;
import it.unibz.krdb.obda.io.SimplePrefixManager;
+import it.unibz.krdb.obda.io.PrefixManager;
import junit.framework.TestCase;
import org.slf4j.Logger;
diff --git a/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLExportAction.java b/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLExportAction.java
index fa8d9ce1369..40f52d84a0e 100644
--- a/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLExportAction.java
+++ b/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLExportAction.java
@@ -8,11 +8,11 @@
*/
package it.unibz.krdb.obda.protege4.gui.action;
-import it.unibz.krdb.obda.io.R2RMLWriter;
import it.unibz.krdb.obda.model.OBDAMappingAxiom;
import it.unibz.krdb.obda.model.OBDAModel;
import it.unibz.krdb.obda.model.impl.OBDAModelImpl;
import it.unibz.krdb.obda.protege4.core.OBDAModelManager;
+import it.unibz.krdb.obda.sesame.r2rml.R2RMLWriter;
import java.awt.event.ActionEvent;
import java.io.File;
diff --git a/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLImportAction.java b/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLImportAction.java
index 99443a21e34..c7bb13be373 100644
--- a/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLImportAction.java
+++ b/obdalib-protege41/src/main/java/it/unibz/krdb/obda/protege4/gui/action/R2RMLImportAction.java
@@ -9,11 +9,11 @@
package it.unibz.krdb.obda.protege4.gui.action;
import it.unibz.krdb.obda.exception.DuplicateMappingException;
-import it.unibz.krdb.obda.io.R2RMLReader;
import it.unibz.krdb.obda.model.OBDAMappingAxiom;
import it.unibz.krdb.obda.model.OBDAModel;
import it.unibz.krdb.obda.model.impl.OBDAModelImpl;
import it.unibz.krdb.obda.protege4.core.OBDAModelManager;
+import it.unibz.krdb.obda.sesame.r2rml.R2RMLReader;
import java.awt.event.ActionEvent;
import java.io.File;
diff --git a/obdalib-sesame/pom.xml b/obdalib-sesame/pom.xml
new file mode 100644
index 00000000000..c06fc0a2ecc
--- /dev/null
+++ b/obdalib-sesame/pom.xml
@@ -0,0 +1,68 @@
+
+ 4.0.0
+
+ obdalib-parent
+ inf.unibz.it.obda
+ 1.8
+
+ inf.unibz.it.obda
+ obdalib-sesame
+ 1.8
+
+
+
+
+ ch.qos.logback
+ logback-classic
+
+
+ ch.qos.logback
+ logback-core
+
+
+ obdalib-core
+ inf.unibz.it.obda
+ 1.8
+
+
+ slf4j-log4j12
+ org.slf4j
+
+
+
+
+
+ org.openrdf.sesame
+ sesame-runtime
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-turtle
+
+
+
+
+
+
+ maven-compiler-plugin
+ 2.3.2
+
+
+ 1.6
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+
\ No newline at end of file
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/sesame/SesameRDFIterator.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameRDFIterator.java
similarity index 100%
rename from obdalib-core/src/main/java/it/unibz/krdb/obda/sesame/SesameRDFIterator.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameRDFIterator.java
diff --git a/quest-sesame/src/main/java/sesameWrapper/SesameStatement.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatement.java
similarity index 99%
rename from quest-sesame/src/main/java/sesameWrapper/SesameStatement.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatement.java
index 0af4864fec6..6e32914156b 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SesameStatement.java
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatement.java
@@ -6,7 +6,7 @@
* Please see LICENSE.txt for full license terms, including the availability of
* proprietary exceptions.
*/
-package sesameWrapper;
+package it.unibz.krdb.obda.sesame;
import it.unibz.krdb.obda.model.BNode;
import it.unibz.krdb.obda.model.Constant;
diff --git a/quest-sesame/src/main/java/sesameWrapper/SesameStatementIterator.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatementIterator.java
similarity index 96%
rename from quest-sesame/src/main/java/sesameWrapper/SesameStatementIterator.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatementIterator.java
index f2968adbac3..ea0edc79097 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SesameStatementIterator.java
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/SesameStatementIterator.java
@@ -6,7 +6,7 @@
* Please see LICENSE.txt for full license terms, including the availability of
* proprietary exceptions.
*/
-package sesameWrapper;
+package it.unibz.krdb.obda.sesame;
import it.unibz.krdb.obda.model.OBDADataFactory;
import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
@@ -34,19 +34,16 @@ public SesameStatementIterator(Iterator it) {
this.iterator = it;
}
- @Override
public boolean hasNext() {
return iterator.hasNext();
}
- @Override
public Statement next() {
Assertion assertion = iterator.next();
Statement individual = new SesameStatement(assertion);
return individual;
}
- @Override
public void remove() {
throw new UnsupportedOperationException("This iterator is read-only");
}
diff --git a/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/OBDAMappingTransformer.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/OBDAMappingTransformer.java
new file mode 100644
index 00000000000..bf30bbf5297
--- /dev/null
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/OBDAMappingTransformer.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2009-2013, Free University of Bozen Bolzano
+ * This source code is available under the terms of the Affero General Public
+ * License v3.
+ *
+ * Please see LICENSE.txt for full license terms, including the availability of
+ * proprietary exceptions.
+ *
+ * @author Timea Bagosi
+ */
+package it.unibz.krdb.obda.sesame.r2rml;
+
+import it.unibz.krdb.obda.model.CQIE;
+import it.unibz.krdb.obda.model.DataTypePredicate;
+import it.unibz.krdb.obda.model.Function;
+import it.unibz.krdb.obda.model.OBDAMappingAxiom;
+import it.unibz.krdb.obda.model.OBDAQueryModifiers;
+import it.unibz.krdb.obda.model.Predicate;
+import it.unibz.krdb.obda.model.Term;
+import it.unibz.krdb.obda.model.URITemplatePredicate;
+import it.unibz.krdb.obda.model.ValueConstant;
+import it.unibz.krdb.obda.model.Variable;
+import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
+import it.unibz.krdb.obda.model.impl.SQLQueryImpl;
+import it.unibz.krdb.obda.uri.UriTemplateHelper;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.Set;
+
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+import com.hp.hpl.jena.vocabulary.RDFS;
+
+public class OBDAMappingTransformer {
+
+ private ValueFactory vf;
+
+ public OBDAMappingTransformer() {
+ this.vf = new ValueFactoryImpl();
+ }
+
+ public Set getStatements(OBDAMappingAxiom axiom) {
+ Set statements = new HashSet();
+ SQLQueryImpl squery = (SQLQueryImpl) axiom.getSourceQuery();
+ CQIE tquery = (CQIE) axiom.getTargetQuery();
+
+ int idx = 0;
+ Random rand = new Random();
+ idx = rand.nextInt(10000);
+
+ //triplesMap node
+ String mapping_id = axiom.getId();
+ if (!mapping_id.startsWith("http://"))
+ mapping_id = "http://example.org/" + mapping_id;
+ Resource mainNode = vf.createURI(mapping_id);
+ statements.add(vf.createStatement(mainNode, vf.createURI(OBDAVocabulary.RDF_TYPE), R2RMLVocabulary.TriplesMap));
+
+ //process source query
+ String sqlquery = squery.getSQLQuery();
+ OBDAQueryModifiers modifiers = squery.getQueryModifiers();
+ if (sqlquery.startsWith("SELECT * FROM") &&
+ !sqlquery.contains("WHERE") && !sqlquery.contains(",")) {
+ //tableName -> need small parser
+ Resource logicalTableNode = vf.createBNode("logicalTableNode" + idx);
+ String tableName = sqlquery.substring(14);
+ //tableName = trimApostrophes(tableName);
+ statements.add(vf.createStatement(mainNode, R2RMLVocabulary.logicalTable, logicalTableNode));
+ statements.add(vf.createStatement(logicalTableNode, R2RMLVocabulary.tableName, vf.createLiteral(tableName)));
+// } else if (sqlquery.contains("CHILD")) {
+// //join mapping
+//
+
+ } else {
+ //sqlquery -> general case
+ statements.add(vf.createStatement(mainNode, R2RMLVocabulary.sqlQuery, vf.createLiteral(sqlquery)));
+ }
+
+ //get subject uri
+ Resource subjectNode = vf.createBNode("subjectMap" +idx);
+ Function uriTemplate = (Function) tquery.getBody().get(0).getTerm(0); //URI("..{}..", , )
+ String subjectURI = UriTemplateHelper.getUriTemplateString(uriTemplate);
+ //add subject Map to triples Map node
+ statements.add(vf.createStatement(mainNode, R2RMLVocabulary.subjectMap, subjectNode));
+ //add template subject
+ statements.add(vf.createStatement(subjectNode, R2RMLVocabulary.template, vf.createURI(subjectURI)));
+ //TODO: deal with column and termType
+
+
+ //process target query
+ for (Function func : tquery.getBody()) {
+ Predicate pred = func.getFunctionSymbol();
+ if (pred.isClass()) {
+ //add class declaration to subject Map node
+ statements.add(vf.createStatement(subjectNode, R2RMLVocabulary.classUri, vf.createURI(pred.getName())));
+ } else {
+
+ Resource predObjNode = vf.createBNode("predicateObjectMap"+ idx);
+ //add predicateObjectMap to triples Map node
+ statements.add(vf.createStatement(mainNode, R2RMLVocabulary.predicateObjectMap, predObjNode));
+ //add predicate declaration to predObj node
+ statements.add(vf.createStatement(predObjNode, R2RMLVocabulary.predicate, vf.createURI(pred.getName())));
+ //add object declaration to predObj node
+ //term 0 is always the subject, we are interested in term 1
+ Term object = func.getTerm(1);
+ Resource objNode = vf.createBNode("objectMap"+idx);
+ statements.add(vf.createStatement(predObjNode, R2RMLVocabulary.objectMap, objNode));
+ if (object instanceof Variable){
+ statements.add(vf.createStatement(objNode, R2RMLVocabulary.column, vf.createLiteral(((Variable) object).getName())));
+ } else if (object instanceof Function) {
+ //check if uritemplate
+ Predicate objectPred = ((Function) object).getFunctionSymbol();
+ if (objectPred instanceof URITemplatePredicate) {
+ String objectURI = UriTemplateHelper.getUriTemplateString((Function)object);
+ //add template object
+ statements.add(vf.createStatement(objNode, R2RMLVocabulary.template, vf.createURI(objectURI)));
+ }else if (objectPred instanceof DataTypePredicate) {
+ statements.add(vf.createStatement(objNode, R2RMLVocabulary.constant, vf.createLiteral(((Function) object).getTerm(0).toString())));
+ statements.add(vf.createStatement(objNode, R2RMLVocabulary.datatype, vf.createURI(objectPred.getName())));
+ }
+ } else {
+ System.out.println("FOUND UNKNOWN: "+object.toString());
+ }
+ }
+
+ }
+
+ return statements;
+ }
+
+ private String trimApostrophes(String input) {
+ input = input.trim();
+ while (input.startsWith("\""))
+ input = input.substring(1);
+ while (input.endsWith("\""))
+ input = input.substring(0, input.length()-1);
+ return input;
+ }
+
+
+}
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLManager.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLManager.java
similarity index 93%
rename from obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLManager.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLManager.java
index 1d8920ce4c3..6d6d33ea1bc 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLManager.java
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLManager.java
@@ -6,15 +6,15 @@
* Please see LICENSE.txt for full license terms, including the availability of
* proprietary exceptions.
*/
-package it.unibz.krdb.obda.io;
+package it.unibz.krdb.obda.sesame.r2rml;
import it.unibz.krdb.obda.model.CQIE;
import it.unibz.krdb.obda.model.Function;
-import it.unibz.krdb.obda.model.Term;
import it.unibz.krdb.obda.model.OBDADataFactory;
import it.unibz.krdb.obda.model.OBDALibConstants;
import it.unibz.krdb.obda.model.OBDAMappingAxiom;
import it.unibz.krdb.obda.model.Predicate;
+import it.unibz.krdb.obda.model.Term;
import it.unibz.krdb.obda.model.Variable;
import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
@@ -25,11 +25,13 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.openrdf.model.Graph;
import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFParser;
import org.openrdf.rio.Rio;
@@ -54,7 +56,7 @@ public R2RMLManager(File file) {
InputStream in = new FileInputStream(file);
URL documentUrl = new URL("file://" + file);
myGraph = new org.openrdf.model.impl.GraphImpl();
- StatementCollector collector = new StatementCollector(myGraph);
+ StatementCollector collector = new StatementCollector(myGraph);
parser.setRDFHandler(collector);
parser.parse(in, documentUrl.toString());
} catch (Exception e) {
@@ -62,7 +64,16 @@ public R2RMLManager(File file) {
}
}
+ public R2RMLManager(Graph graph){
+ myGraph = graph;
+ r2rmlParser = new R2RMLParser();
+
+ }
+
public Graph getGraph() {
+ Iterator it = myGraph.iterator();
+ while (it.hasNext())
+ System.out.println(it.next());
return myGraph;
}
@@ -128,7 +139,7 @@ private List getJoinMappings(Graph myGraph, Resource tripleMap
Term joinSubject1 = r2rmlParser.getSubjectAtom(myGraph, tripleMap);
Term joinSubject1Child = r2rmlParser.getSubjectAtom(myGraph, tripleMap, "CHILD_");
-
+ int idx = 1;
//for each predicateobject map that contains a join
for (Resource joinPredObjNode : joinNodes) {
//get the predicates
@@ -177,9 +188,10 @@ private List getJoinMappings(Graph myGraph, Resource tripleMap
throw new Exception("Could not create source query for join in "+tripleMap.stringValue());
}
//finally, create mapping and add it to the list
- OBDAMappingAxiom mapping = fac.getRDBMSMappingAxiom("mapping-join-"+tripleMap.stringValue(), sourceQuery, targetQuery);
-
- System.out.println("joinMapping: "+mapping.toString());
+ OBDAMappingAxiom mapping = fac.getRDBMSMappingAxiom("mapping-join"+idx+"-"+tripleMap.stringValue(), sourceQuery, targetQuery);
+ idx++;
+ System.out.println("WARNING joinMapping introduced : "+mapping.toString());
+ System.out.println("Renaming of variables as CHILD_ and PARENT_ introduced!");
joinMappings.add(mapping);
}
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLParser.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLParser.java
similarity index 74%
rename from obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLParser.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLParser.java
index 0c90995a0e9..c534e852eea 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLParser.java
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLParser.java
@@ -6,7 +6,7 @@
* Please see LICENSE.txt for full license terms, including the availability of
* proprietary exceptions.
*/
-package it.unibz.krdb.obda.io;
+package it.unibz.krdb.obda.sesame.r2rml;
import it.unibz.krdb.obda.model.Constant;
import it.unibz.krdb.obda.model.DataTypePredicate;
@@ -38,52 +38,13 @@
public class R2RMLParser {
- private final String baseuri = "http://example.com/base/";
-
- public static final ValueFactory fact = new ValueFactoryImpl();
- public final URI TriplesMap = fact.createURI("http://www.w3.org/ns/r2rml#TriplesMap");
-
- public final URI logicalTable = fact.createURI("http://www.w3.org/ns/r2rml#logicalTable");
- public final URI tableName = fact.createURI("http://www.w3.org/ns/r2rml#tableName");
- public final URI baseTableOrView = fact.createURI("http://www.w3.org/ns/r2rml#baseTableOrView");
- public final URI r2rmlView = fact.createURI("http://www.w3.org/ns/r2rml#R2RMLView");
-
- public final URI subjectMap = fact.createURI("http://www.w3.org/ns/r2rml#subjectMap");
- public final URI subject = fact.createURI("http://www.w3.org/ns/r2rml#subject");
- public final URI predicateObjectMap = fact.createURI("http://www.w3.org/ns/r2rml#predicateObjectMap");
- public final URI predicateMap = fact.createURI("http://www.w3.org/ns/r2rml#predicateMap");
- public final URI objectMap = fact.createURI("http://www.w3.org/ns/r2rml#objectMap");
- public final URI object = fact.createURI("http://www.w3.org/ns/r2rml#object");
- public final URI refObjectMap = fact.createURI("http://www.w3.org/ns/r2rml#refObjectMap");
- public final URI graphMap = fact.createURI("http://www.w3.org/ns/r2rml#graphMap");
- public final URI graph = fact.createURI("http://www.w3.org/ns/r2rml#graph");
-
- public final URI predicate = fact.createURI("http://www.w3.org/ns/r2rml#predicate");
- public final URI template = fact.createURI("http://www.w3.org/ns/r2rml#template");
- public final URI column = fact.createURI("http://www.w3.org/ns/r2rml#column");
- public final URI constant = fact.createURI("http://www.w3.org/ns/r2rml#constant");
- public final URI termType = fact.createURI("http://www.w3.org/ns/r2rml#termType");
- public final URI language = fact.createURI("http://www.w3.org/ns/r2rml#language");
- public final URI datatype = fact.createURI("http://www.w3.org/ns/r2rml#datatype");
- public final URI inverseExpression = fact.createURI("http://www.w3.org/ns/r2rml#inverseExpression");
- public final URI iri = fact.createURI("http://www.w3.org/ns/r2rml#IRI");
- public final URI blankNode = fact.createURI("http://www.w3.org/ns/r2rml#BlankNode");
- public final URI literal = fact.createURI("http://www.w3.org/ns/r2rml#Literal");
- public final URI classUri = fact.createURI("http://www.w3.org/ns/r2rml#class");
- public final URI sqlQuery = fact.createURI("http://www.w3.org/ns/r2rml#sqlQuery");
- public final URI sqlVersion = fact.createURI("http://www.w3.org/ns/r2rml#sqlVersion");
-
- public final URI parentTriplesMap = fact.createURI("http://www.w3.org/ns/r2rml#parentTriplesMap");
- public final URI joinCondition = fact.createURI("http://www.w3.org/ns/r2rml#joinCondition");
- public final URI child = fact.createURI("http://www.w3.org/ns/r2rml#child");
- public final URI parent = fact.createURI("http://www.w3.org/ns/r2rml#parent");
-
- private OBDADataFactory fac = OBDADataFactoryImpl.getInstance();
+ private ValueFactory fact;
+ private OBDADataFactory fac;
Iterator iterator, newiterator;
- List classPredicates = new ArrayList();
- List joinPredObjNodes = new ArrayList();
+ List classPredicates;
+ List joinPredObjNodes;
String parsedString = "";
String subjectString = "";
@@ -91,7 +52,10 @@ public class R2RMLParser {
String basePrefix = "";
public R2RMLParser() {
-
+ classPredicates = new ArrayList();
+ joinPredObjNodes = new ArrayList();
+ fact = new ValueFactoryImpl();
+ fac = OBDADataFactoryImpl.getInstance();
}
/*
@@ -99,11 +63,11 @@ public R2RMLParser() {
*/
public Set getMappingNodes(Graph myGraph)
{
- Set resources = GraphUtil.getSubjects(myGraph, logicalTable, null);
+ Set resources = GraphUtil.getSubjects(myGraph, R2RMLVocabulary.logicalTable, null);
Set nodes = new HashSet();
for (Resource subj : resources) {
//add resource if it's a triplesMap declaration
- iterator = myGraph.match(subj, fact.createURI(OBDAVocabulary.RDF_TYPE), TriplesMap);
+ iterator = myGraph.match(subj, fact.createURI(OBDAVocabulary.RDF_TYPE), R2RMLVocabulary.TriplesMap);
if (iterator.hasNext()) {
nodes.add(subj);
}
@@ -121,7 +85,7 @@ public String getSQLQuery(Graph myGraph, Resource subj) {
String sqlString;
// search for logicalTable declaration
- Set objects = GraphUtil.getObjects(myGraph, subj, logicalTable);
+ Set objects = GraphUtil.getObjects(myGraph, subj, R2RMLVocabulary.logicalTable);
if (objects.size() > 0){
Resource object = (Resource) objects.toArray()[0];
@@ -139,7 +103,7 @@ public String getSQLQuery(Graph myGraph, Resource subj) {
// search for r2rmlview declaration
- tableit = myGraph.match(object, r2rmlView, null);
+ tableit = myGraph.match(object, R2RMLVocabulary.r2rmlView, null);
if (tableit.hasNext()) {
Resource objectt = (Resource) tableit.next().getObject();
@@ -149,7 +113,7 @@ public String getSQLQuery(Graph myGraph, Resource subj) {
}
// search for basetableorview declaration
- tableit = myGraph.match(object, baseTableOrView, null,
+ tableit = myGraph.match(object, R2RMLVocabulary.baseTableOrView, null,
(Resource) null);
if (tableit.hasNext()) {
Resource objectt = (Resource) tableit.next().getObject();
@@ -170,7 +134,7 @@ public String getSQLQuery(Graph myGraph, Resource subj) {
private String getSQLQueryString(Graph myGraph, Resource object) {
// search for sqlQuery declarations
- Iterator tableit = myGraph.match(object, sqlQuery, null);
+ Iterator tableit = myGraph.match(object, R2RMLVocabulary.sqlQuery, null);
if (tableit.hasNext()) {
String sqlString = tableit.next().getObject().toString();
// System.out.println(sqlString);
@@ -185,7 +149,7 @@ private String getSQLQueryString(Graph myGraph, Resource object) {
private String getSQLTableName(Graph myGraph, Resource object){
//look for tableName declaration
- Iterator newiterator = myGraph.match(object, tableName, null);
+ Iterator newiterator = myGraph.match(object, R2RMLVocabulary.tableName, null);
if (newiterator.hasNext()) {
String sqlString = newiterator.next().getObject().toString();
// System.out.println(sqlString);
@@ -205,7 +169,7 @@ public List getClassPredicates() {
public Set getPredicateObjects(Graph myGraph, Resource subj) {
// process PREDICATEOBJECTs
Set predobjs = new HashSet();
- Set objectss = GraphUtil.getObjects(myGraph, subj, predicateObjectMap);
+ Set objectss = GraphUtil.getObjects(myGraph, subj, R2RMLVocabulary.predicateObjectMap);
for (Value objectVal : objectss) {
Resource object = (Resource) objectVal;
predobjs.add(object);
@@ -223,11 +187,11 @@ public Term getSubjectAtom(Graph myGraph, Resource subj, String joinCond)
Term subjectAtom = null;
// process SUBJECT
- Set objects = GraphUtil.getObjects(myGraph, subj, subjectMap);
+ Set objects = GraphUtil.getObjects(myGraph, subj, R2RMLVocabulary.subjectMap);
Resource object = (Resource) objects.toArray()[0];
// process template declaration
- iterator = myGraph.match(object, template, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.template, null);
if (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -237,7 +201,7 @@ public Term getSubjectAtom(Graph myGraph, Resource subj, String joinCond)
}
// process column declaration
- iterator = myGraph.match(object, column, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.column, null);
if (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -246,7 +210,7 @@ public Term getSubjectAtom(Graph myGraph, Resource subj, String joinCond)
}
// process constant declaration
- iterator = myGraph.match(object, constant, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.constant, null);
if (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -255,7 +219,7 @@ public Term getSubjectAtom(Graph myGraph, Resource subj, String joinCond)
}
// process termType declaration
- iterator = myGraph.match(object, termType, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.termType, null);
if (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -263,7 +227,7 @@ public Term getSubjectAtom(Graph myGraph, Resource subj, String joinCond)
}
// process class declaration
- iterator = myGraph.match(object, classUri, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.classUri, null);
while (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -289,7 +253,7 @@ public List getBodyPredicates(Graph myGraph, Resource object)
// process PREDICATE
// look for the predicate
- iterator = myGraph.match(object, predicate, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.predicate, null);
while (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -299,12 +263,12 @@ public List getBodyPredicates(Graph myGraph, Resource object)
// process PREDICATEMAP
// look for the predicateMap
- iterator = myGraph.match(object, predicateMap, null);
+ iterator = myGraph.match(object, R2RMLVocabulary.predicateMap, null);
while (iterator.hasNext()) {
Resource objectt = (Resource) (iterator.next().getObject());
// process constant declaration
- Iterator newiterator = myGraph.match(objectt, constant, null);
+ Iterator newiterator = myGraph.match(objectt, R2RMLVocabulary.constant, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -331,7 +295,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
// process OBJECT
// look for the object
- iterator = myGraph.match(objectt, this.object, null);
+ iterator = myGraph.match(objectt, R2RMLVocabulary.object, null);
if (iterator.hasNext()) {
parsedString = iterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -350,12 +314,12 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
}
// process OBJECTMAP
- iterator = myGraph.match(objectt, objectMap, null);
+ iterator = myGraph.match(objectt, R2RMLVocabulary.objectMap, null);
if (iterator.hasNext()) {
Resource object = (Resource) (iterator.next().getObject());
// look for column declaration
- newiterator = myGraph.match(object, column, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.column, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
objectString = trim(parsedString);
@@ -367,7 +331,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
// look for constant declaration
- newiterator = myGraph.match(object, constant, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.constant, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -379,7 +343,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
}
// look for template declaration
- newiterator = myGraph.match(object, template, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.template, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
@@ -389,7 +353,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
}
// process termType declaration
- newiterator = myGraph.match(object, termType, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.termType, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -398,7 +362,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
}
// look for language declaration
- newiterator = myGraph.match(object, language, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.language, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -410,7 +374,7 @@ public Term getObjectAtom(Graph myGraph, Resource objectt, String joinCond)
}
// look for datatype declaration
- newiterator = myGraph.match(object, datatype, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.datatype, null);
if (newiterator.hasNext()) {
parsedString = newiterator.next().getObject().toString();
// System.out.println(parsedString);
@@ -468,12 +432,12 @@ public List getJoinNodes(Graph myGraph, Resource termMap)
// for each predicate object map
// process OBJECTMAP
- iterator = myGraph.match(predobj, objectMap, null);
+ iterator = myGraph.match(predobj, R2RMLVocabulary.objectMap, null);
if (iterator.hasNext()) {
Resource objectt = (Resource) (iterator.next().getObject());
// look for parentTriplesMap declaration
- newiterator = myGraph.match(objectt, parentTriplesMap, null);
+ newiterator = myGraph.match(objectt, R2RMLVocabulary.parentTriplesMap, null);
if (newiterator.hasNext()) {
// found a join condition, add the predicateobject node to the list
joinPredObjNodes.add(predobj);
@@ -485,15 +449,15 @@ public List getJoinNodes(Graph myGraph, Resource termMap)
private Function getTermTypeAtom(String type, String string) {
- if (type.contentEquals(iri.stringValue())) {
+ if (type.contentEquals(R2RMLVocabulary.iri.stringValue())) {
return getURIFunction(string);
- } else if (type.contentEquals(blankNode.stringValue())) {
+ } else if (type.contentEquals(R2RMLVocabulary.blankNode.stringValue())) {
return getTypedFunction(string, 2);
- } else if (type.contentEquals(literal.stringValue())) {
+ } else if (type.contentEquals(R2RMLVocabulary.literal.stringValue())) {
return getTypedFunction(trim(string), 3);
}
@@ -519,7 +483,7 @@ public Function getTypedFunction(String parsedString, int type, String joinCond)
String string = (parsedString);
if (!string.contains("{"))
if (!string.startsWith("http://"))
- { string = baseuri + "{" + string + "}";
+ { string = R2RMLVocabulary.baseuri + "{" + string + "}";
if (type == 2)
string = "\"" + string + "\"";
}
@@ -528,7 +492,7 @@ public Function getTypedFunction(String parsedString, int type, String joinCond)
type = 0;
}
if (type == 1 && !string.startsWith("http://"))
- string = baseuri + string;
+ string = R2RMLVocabulary.baseuri + string;
string = string.replace("\\{", "[");
string = string.replace("\\}", "]");
@@ -603,12 +567,12 @@ private String trimTo1(String string) {
public Resource getReferencedTripleMap(Graph myGraph, Resource predobjNode) {
// process OBJECTMAP
- iterator = myGraph.match(predobjNode, objectMap, null);
+ iterator = myGraph.match(predobjNode, R2RMLVocabulary.objectMap, null);
if (iterator.hasNext()) {
Resource object = (Resource) (iterator.next().getObject());
// look for parentTriplesMap declaration
- newiterator = myGraph.match(object, parentTriplesMap, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.parentTriplesMap, null);
if (newiterator.hasNext()) {
return (Resource)newiterator.next().getObject();
}
@@ -619,17 +583,17 @@ public Resource getReferencedTripleMap(Graph myGraph, Resource predobjNode) {
public String getChildColumn(Graph myGraph, Resource predobjNode) {
// process OBJECTMAP
- iterator = myGraph.match(predobjNode, objectMap, null);
+ iterator = myGraph.match(predobjNode, R2RMLVocabulary.objectMap, null);
if (iterator.hasNext()) {
Resource object = (Resource) (iterator.next().getObject());
// look for joincondition declaration
- newiterator = myGraph.match(object, joinCondition, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.joinCondition, null);
if (newiterator.hasNext()) {
Resource objectt = (Resource) (newiterator.next().getObject());
// look for child declaration
- Iterator newiterator2 = myGraph.match(objectt, child, null);
+ Iterator newiterator2 = myGraph.match(objectt, R2RMLVocabulary.child, null);
if (newiterator2.hasNext()) {
return trimTo1(newiterator2.next().getObject().stringValue());
}
@@ -640,17 +604,17 @@ public String getChildColumn(Graph myGraph, Resource predobjNode) {
public String getParentColumn(Graph myGraph, Resource predobjNode) {
// process OBJECTMAP
- iterator = myGraph.match(predobjNode, objectMap, null);
+ iterator = myGraph.match(predobjNode, R2RMLVocabulary.objectMap, null);
if (iterator.hasNext()) {
Resource object = (Resource) (iterator.next().getObject());
// look for joincondition declaration
- newiterator = myGraph.match(object, joinCondition, null);
+ newiterator = myGraph.match(object, R2RMLVocabulary.joinCondition, null);
if (newiterator.hasNext()) {
Resource objectt = (Resource) (newiterator.next().getObject());
// look for parent declaration
- Iterator newiterator2 = myGraph.match(objectt, parent, null);
+ Iterator newiterator2 = myGraph.match(objectt, R2RMLVocabulary.parent, null);
if (newiterator2.hasNext()) {
return trimTo1(newiterator2.next().getObject().stringValue());
}
diff --git a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLReader.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLReader.java
similarity index 84%
rename from obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLReader.java
rename to obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLReader.java
index c8f0b1e4956..45ce1490635 100644
--- a/obdalib-core/src/main/java/it/unibz/krdb/obda/io/R2RMLReader.java
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLReader.java
@@ -6,7 +6,7 @@
* Please see LICENSE.txt for full license terms, including the availability of
* proprietary exceptions.
*/
-package it.unibz.krdb.obda.io;
+package it.unibz.krdb.obda.sesame.r2rml;
import java.io.File;
import java.net.URI;
@@ -32,33 +32,33 @@ public class R2RMLReader {
private Graph graph ;
+ public R2RMLReader(Graph graph) {
+ manager = new R2RMLManager(graph);
+ this.graph = graph;
+ }
+
public R2RMLReader(String file)
{
this(new File(file));
}
- public R2RMLReader(File file)
+ public R2RMLReader(File file, OBDAModel model)
{
-
- manager = new R2RMLManager(file);
- graph = manager.getGraph();
+ this(file);
+ obdaModel = model;
}
- public R2RMLReader(File file, OBDAModel model)
+ public R2RMLReader(File file)
{
-
manager = new R2RMLManager(file);
graph = manager.getGraph();
- obdaModel = model;
}
-
public void setOBDAModel(OBDAModel model)
{
this.obdaModel = model;
}
-
-
+
public OBDAModel readModel(URI sourceUri){
try {
//add to the model the mappings retrieved from the manager
@@ -76,12 +76,14 @@ public ArrayList readMappings(){
public static void main(String args[])
{
- String file = "C:/Project/Test Cases/mapping.ttl";
+ String file = "/Users/timi/Documents/hdd/Project/Test Cases/mapping1.ttl";
// "C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D014/r2rmla.ttl";
//"C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D004/WRr2rmlb.ttl";
R2RMLReader reader = new R2RMLReader(file);
- reader.readMappings();
+ ArrayList axioms = reader.readMappings();
+ for (OBDAMappingAxiom ax : axioms)
+ System.out.println(ax);
}
diff --git a/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLVocabulary.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLVocabulary.java
new file mode 100644
index 00000000000..5e8c9d0945b
--- /dev/null
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLVocabulary.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2009-2013, Free University of Bozen Bolzano
+ * This source code is available under the terms of the Affero General Public
+ * License v3.
+ *
+ * Please see LICENSE.txt for full license terms, including the availability of
+ * proprietary exceptions.
+ */
+package it.unibz.krdb.obda.sesame.r2rml;
+
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+public class R2RMLVocabulary {
+
+ public static final String baseuri = "http://example.com/base/";
+
+ public static final ValueFactory fact = new ValueFactoryImpl();
+ public static final URI TriplesMap = fact.createURI("http://www.w3.org/ns/r2rml#TriplesMap");
+
+ public static final URI logicalTable = fact.createURI("http://www.w3.org/ns/r2rml#logicalTable");
+ public static final URI tableName = fact.createURI("http://www.w3.org/ns/r2rml#tableName");
+ public static final URI baseTableOrView = fact.createURI("http://www.w3.org/ns/r2rml#baseTableOrView");
+ public static final URI r2rmlView = fact.createURI("http://www.w3.org/ns/r2rml#R2RMLView");
+
+ public static final URI subjectMap = fact.createURI("http://www.w3.org/ns/r2rml#subjectMap");
+ public static final URI subject = fact.createURI("http://www.w3.org/ns/r2rml#subject");
+ public static final URI predicateObjectMap = fact.createURI("http://www.w3.org/ns/r2rml#predicateObjectMap");
+ public static final URI predicateMap = fact.createURI("http://www.w3.org/ns/r2rml#predicateMap");
+ public static final URI objectMap = fact.createURI("http://www.w3.org/ns/r2rml#objectMap");
+ public static final URI object = fact.createURI("http://www.w3.org/ns/r2rml#object");
+ public static final URI refObjectMap = fact.createURI("http://www.w3.org/ns/r2rml#refObjectMap");
+ public static final URI graphMap = fact.createURI("http://www.w3.org/ns/r2rml#graphMap");
+ public static final URI graph = fact.createURI("http://www.w3.org/ns/r2rml#graph");
+
+ public static final URI predicate = fact.createURI("http://www.w3.org/ns/r2rml#predicate");
+ public static final URI template = fact.createURI("http://www.w3.org/ns/r2rml#template");
+ public static final URI column = fact.createURI("http://www.w3.org/ns/r2rml#column");
+ public static final URI constant = fact.createURI("http://www.w3.org/ns/r2rml#constant");
+ public static final URI termType = fact.createURI("http://www.w3.org/ns/r2rml#termType");
+ public static final URI language = fact.createURI("http://www.w3.org/ns/r2rml#language");
+ public static final URI datatype = fact.createURI("http://www.w3.org/ns/r2rml#datatype");
+ public static final URI inverseExpression = fact.createURI("http://www.w3.org/ns/r2rml#inverseExpression");
+ public static final URI iri = fact.createURI("http://www.w3.org/ns/r2rml#IRI");
+ public static final URI blankNode = fact.createURI("http://www.w3.org/ns/r2rml#BlankNode");
+ public static final URI literal = fact.createURI("http://www.w3.org/ns/r2rml#Literal");
+ public static final URI classUri = fact.createURI("http://www.w3.org/ns/r2rml#class");
+ public static final URI sqlQuery = fact.createURI("http://www.w3.org/ns/r2rml#sqlQuery");
+ public static final URI sqlVersion = fact.createURI("http://www.w3.org/ns/r2rml#sqlVersion");
+
+ public static final URI parentTriplesMap = fact.createURI("http://www.w3.org/ns/r2rml#parentTriplesMap");
+ public static final URI joinCondition = fact.createURI("http://www.w3.org/ns/r2rml#joinCondition");
+ public static final URI child = fact.createURI("http://www.w3.org/ns/r2rml#child");
+ public static final URI parent = fact.createURI("http://www.w3.org/ns/r2rml#parent");
+
+}
diff --git a/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLWriter.java b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLWriter.java
new file mode 100644
index 00000000000..5cfc1310b4b
--- /dev/null
+++ b/obdalib-sesame/src/main/java/it/unibz/krdb/obda/sesame/r2rml/R2RMLWriter.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2009-2013, Free University of Bozen Bolzano
+ * This source code is available under the terms of the Affero General Public
+ * License v3.
+ *
+ * Please see LICENSE.txt for full license terms, including the availability of
+ * proprietary exceptions.
+ */
+package it.unibz.krdb.obda.sesame.r2rml;
+
+import it.unibz.krdb.obda.io.PrefixManager;
+import it.unibz.krdb.obda.model.CQIE;
+import it.unibz.krdb.obda.model.DataTypePredicate;
+import it.unibz.krdb.obda.model.Function;
+import it.unibz.krdb.obda.model.OBDAMappingAxiom;
+import it.unibz.krdb.obda.model.OBDAModel;
+import it.unibz.krdb.obda.model.OBDAQuery;
+import it.unibz.krdb.obda.model.Predicate;
+import it.unibz.krdb.obda.model.Term;
+import it.unibz.krdb.obda.model.URIConstant;
+import it.unibz.krdb.obda.model.URITemplatePredicate;
+import it.unibz.krdb.obda.model.ValueConstant;
+import it.unibz.krdb.obda.model.Variable;
+import it.unibz.krdb.obda.model.impl.BNodePredicateImpl;
+import it.unibz.krdb.obda.model.impl.FunctionalTermImpl;
+import it.unibz.krdb.obda.model.impl.OBDAVocabulary;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.openrdf.model.Graph;
+import org.openrdf.model.Statement;
+import org.openrdf.model.impl.GraphImpl;
+import org.openrdf.rio.turtle.TurtleWriter;
+
+
+public class R2RMLWriter {
+
+ private BufferedWriter out;
+ private List mappings;
+ private URI sourceUri;
+ private PrefixManager prefixmng;
+
+ public R2RMLWriter(File file, OBDAModel obdamodel, URI sourceURI)
+ {
+ try {
+ this.out = new BufferedWriter(new FileWriter(file));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.sourceUri = sourceURI;
+ this.mappings = obdamodel.getMappings(sourceUri);
+ this.prefixmng = obdamodel.getPrefixManager();
+ }
+
+ public R2RMLWriter(OBDAModel obdamodel, URI sourceURI)
+ {
+ this.sourceUri = sourceURI;
+ this.mappings = obdamodel.getMappings(sourceUri);
+ this.prefixmng = obdamodel.getPrefixManager();
+ }
+
+ /**
+ * call this method if you need the RDF Graph
+ * that represents the R2RML mappings
+ * @return an RDF Graph
+ */
+ public Graph getGraph() {
+ OBDAMappingTransformer transformer = new OBDAMappingTransformer();
+ Set statements = new HashSet();
+ for (OBDAMappingAxiom axiom: this.mappings) {
+ statements.addAll(transformer.getStatements(axiom));
+ }
+ @SuppressWarnings("deprecation")
+ Graph g = new GraphImpl();
+ g.addAll(statements);
+ return g;
+ }
+
+ /**
+ * the method to write the R2RML mappings
+ * from an rdf Graph to a file
+ * @param file the ttl file to write to
+ */
+ public void write(File file)
+ {
+ try {
+ //retrieve rdf graph to write
+ Graph result = getGraph();
+ //open output stream
+ this.out = new BufferedWriter(new FileWriter(file));
+ //set up turtle writer
+ TurtleWriter writer = new TurtleWriter(this.out);
+ writer.startRDF();
+ //handle namespaces
+ Map prefixes = this.prefixmng.getPrefixMap();
+ for (String pref : prefixes.keySet()) {
+ writer.handleNamespace(pref, prefixes.get(pref));
+ }
+ //write graph statements
+ Iterator stIterator = result.iterator();
+ while (stIterator.hasNext()) {
+ writer.handleStatement(stIterator.next());
+ }
+ writer.endRDF();
+ //close output stream
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ public static void main(String args[])
+ {
+ String file = "/Users/timi/Documents/hdd/Project/Test Cases/mapping1.ttl";
+ R2RMLReader reader = new R2RMLReader(file);
+
+ R2RMLWriter writer = new R2RMLWriter(reader.readModel(URI.create("blah")),URI.create("blah"));
+ File out = new File("/Users/timi/Documents/hdd/Project/Test Cases/mapping1out.ttl");
+ //"C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D004/WRr2rmlb.ttl");
+ Graph g = writer.getGraph();
+ Iterator st = g.iterator();
+ while (st.hasNext())
+ System.out.println(st.next());
+ writer.write(out);
+
+ }
+}
diff --git a/pom.xml b/pom.xml
index 6ba8eca73a2..8930ac84a2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,12 +9,6 @@
http://obda.inf.unibz.it/
-
- junit
- junit
- 4.10
- test
-
@@ -22,12 +16,14 @@
reformulation-core
obdalib-owlapi3
obdalib-protege41
+ obdalib-sesame
quest-owlapi3
quest-distribution
quest-sparql-compliance
quest-sesame
quest-db
quest-rdb2rdf-compliance
+
@@ -101,7 +97,7 @@
junit
junit
- 3.8.1
+ 4.10
test
@@ -117,17 +113,17 @@
org.slf4j
slf4j-api
- 1.5.11
+ 1.6.4
ch.qos.logback
logback-classic
- 0.9.20
+ 1.0.2
ch.qos.logback
logback-core
- 0.9.20
+ 1.0.2
xsdlib
@@ -187,7 +183,7 @@
org.slf4j
log4j-over-slf4j
- 1.5.11
+ 1.6.4
commons-logging
diff --git a/quest-db/pom.xml b/quest-db/pom.xml
index 9792baedff0..69ef3544b43 100644
--- a/quest-db/pom.xml
+++ b/quest-db/pom.xml
@@ -30,6 +30,11 @@
quest-owlapi3
1.8
+
+ inf.unibz.it.obda
+ obdalib-sesame
+ 1.8
+
org.openrdf.sesame
diff --git a/quest-db/src/main/java/it/unibz/krdb/obda/owlrefplatform/questdb/QuestDBVirtualStore.java b/quest-db/src/main/java/it/unibz/krdb/obda/owlrefplatform/questdb/QuestDBVirtualStore.java
index f71e8a7251b..e5bdd70947f 100644
--- a/quest-db/src/main/java/it/unibz/krdb/obda/owlrefplatform/questdb/QuestDBVirtualStore.java
+++ b/quest-db/src/main/java/it/unibz/krdb/obda/owlrefplatform/questdb/QuestDBVirtualStore.java
@@ -8,10 +8,8 @@
*/
package it.unibz.krdb.obda.owlrefplatform.questdb;
-import it.unibz.krdb.obda.exception.DuplicateMappingException;
import it.unibz.krdb.obda.exception.InvalidMappingException;
import it.unibz.krdb.obda.io.ModelIOManager;
-import it.unibz.krdb.obda.io.R2RMLReader;
import it.unibz.krdb.obda.model.OBDADataFactory;
import it.unibz.krdb.obda.model.OBDADataSource;
import it.unibz.krdb.obda.model.OBDAException;
@@ -27,13 +25,16 @@
import it.unibz.krdb.obda.owlrefplatform.core.QuestConnection;
import it.unibz.krdb.obda.owlrefplatform.core.QuestConstants;
import it.unibz.krdb.obda.owlrefplatform.core.QuestPreferences;
+import it.unibz.krdb.obda.sesame.r2rml.R2RMLReader;
+import it.unibz.krdb.sql.DBMetadata;
import java.io.File;
import java.io.IOException;
import java.net.URI;
-import java.sql.SQLException;
+import java.util.Properties;
import java.util.Set;
+import org.openrdf.model.Graph;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyIRIMapper;
@@ -55,84 +56,195 @@ public class QuestDBVirtualStore extends QuestDBAbstractStore {
private static OBDADataFactory fac = OBDADataFactoryImpl.getInstance();
protected transient OWLOntologyManager man = OWLManager.createOWLOntologyManager();
+ private OWLAPI3Translator translator = new OWLAPI3Translator();
public QuestDBVirtualStore(String name, URI obdaURI) throws Exception {
this(name, null, obdaURI, null);
}
public QuestDBVirtualStore(String name, URI obdaURI, QuestPreferences config) throws Exception {
-
this(name, null, obdaURI, config);
}
- // constructors String, URI, URI, (Config)
public QuestDBVirtualStore(String name, URI tboxFile, URI obdaURI) throws Exception {
-
this(name, tboxFile, obdaURI, null);
-
+ }
+
+ public QuestDBVirtualStore(String name, QuestPreferences pref) throws Exception {
+ // direct mapping : no tbox, no obda file, repo in-mem h2
+ this(name, (URI)null, null, pref);
}
+ /**
+ * The method generates the OBDAModel from an
+ * obda or ttl (r2rml) file
+ * @param obdaURI - the file URI
+ * @return the generated OBDAModel
+ * @throws IOException
+ * @throws InvalidMappingException
+ */
public OBDAModel getObdaModel(URI obdaURI) throws IOException, InvalidMappingException {
+ //create empty model
OBDAModel obdaModel = fac.getOBDAModel();
// System.out.println(obdaURI.toString());
if (obdaURI.toString().endsWith(".obda")) {
+ //read obda file
ModelIOManager modelIO = new ModelIOManager(obdaModel);
modelIO.load(new File(obdaURI));
} else if (obdaURI.toString().endsWith(".ttl")) {
+ //read R2RML file
R2RMLReader reader = new R2RMLReader(new File(obdaURI));
obdaModel = reader.readModel(obdaURI);
-
}
return obdaModel;
}
+ /**
+ * The constructor to setup Quest virtual store given
+ * an owl file URI and an obda or R2rml mapping file URI
+ * @param name - the name of the triple store
+ * @param tboxFile - the owl file URI
+ * @param obdaUri - the obda or ttl file URI
+ * @param config - QuestPreferences
+ * @throws Exception
+ */
public QuestDBVirtualStore(String name, URI tboxFile, URI obdaUri, QuestPreferences config) throws Exception {
super(name);
+ //obtain the model
OBDAModel obdaModel = null;
if (obdaUri == null) {
log.debug("No mappings where given, mappings will be automatically generated.");
+ //obtain model from direct mapping RDB2RDF method
obdaModel = getOBDAModelDM();
} else {
+ //obtain model from file
obdaModel = getObdaModel(obdaUri);
}
+ //set config preferences values
if (config == null) {
config = new QuestPreferences();
}
+ //we are working in virtual mode
config.setProperty(QuestPreferences.ABOX_MODE, QuestConstants.VIRTUAL);
+ //obtain the ontology
OWLOntology owlontology = null;
Ontology tbox;
if (tboxFile != null) {
- OWLAPI3Translator translator = new OWLAPI3Translator();
- OWLOntologyIRIMapper iriMapper = new AutoIRIMapper(new File(tboxFile).getParentFile(), false);
- man.addIRIMapper(iriMapper);
- owlontology = man.loadOntologyFromOntologyDocument(new File(tboxFile));
- Set clousure = man.getImportsClosure(owlontology);
-
- tbox = translator.mergeTranslateOntologies(clousure);
+ //read owl file
+ owlontology = getOntologyFromFile(tboxFile);
+ //get transformation from owlontology into ontology
+ tbox = getOntologyFromOWLOntology(owlontology);
- } else { // create empty ontology
+ } else {
+ // create empty ontology
owlontology = man.createOntology();// createOntology(OBDADataFactoryImpl.getIRI(name));
tbox = OntologyFactoryImpl.getInstance().createOntology();
if (obdaModel.getSources().size() == 0)
obdaModel.addSource(getMemOBDADataSource("MemH2"));
}
-
OBDAModelSynchronizer.declarePredicates(owlontology, obdaModel);
- questInstance = new Quest(tbox, obdaModel, config);
+ //set up Quest
+ setupQuest(tbox, obdaModel, null, config);
+ }
- questInstance.setupRepository();
+
+ /**
+ * Constructor to start Quest given an OWL ontology and an RDF Graph
+ * representing R2RML mappings
+ * @param name - the name of the triple store
+ * @param tbox - the OWLOntology
+ * @param mappings - the RDF Graph (Sesame API)
+ * @param pref - QuestPreferences
+ * @throws Exception
+ */
+ public QuestDBVirtualStore(String name, OWLOntology tbox, Graph mappings, DBMetadata metadata, QuestPreferences config) throws Exception {
+ //call super constructor -> QuestDBAbstractStore
+ super(name);
+
+ //obtain ontology
+ Ontology ontology = getOntologyFromOWLOntology(tbox);
+ //obtain datasource
+ OBDADataSource source = getDataSourceFromConfig(config);
+ //obtain obdaModel
+ R2RMLReader reader = new R2RMLReader(mappings);
+ OBDAModel obdaModel = reader.readModel(source.getSourceID());
+ //add data source to model
+ obdaModel.addSource(source);
+ OBDAModelSynchronizer.declarePredicates(tbox, obdaModel);
+ //setup Quest
+ setupQuest(ontology, obdaModel, metadata, config);
+ }
+
+
+private OBDADataSource getDataSourceFromConfig(QuestPreferences config) {
+ String id = config.get(QuestPreferences.DBNAME).toString();
+ String url = config.get(QuestPreferences.JDBC_URL).toString();
+ String username = config.get(QuestPreferences.DBUSER).toString();
+ String password = config.get(QuestPreferences.DBPASSWORD).toString();
+ String driver = config.get(QuestPreferences.JDBC_DRIVER).toString();
+
+ OBDADataSource source = OBDADataFactoryImpl.getInstance().getDataSource(URI.create(id));
+ source.setParameter(RDBMSourceParameterConstants.DATABASE_URL, url);
+ source.setParameter(RDBMSourceParameterConstants.DATABASE_USERNAME, username);
+ source.setParameter(RDBMSourceParameterConstants.DATABASE_PASSWORD, password);
+ source.setParameter(RDBMSourceParameterConstants.DATABASE_DRIVER, driver);
+
+ return source;
}
- public QuestDBVirtualStore(String name, QuestPreferences pref) throws Exception {
- // direct mapping : no tbox, no obda file, repo in-mem h2
- this(name, null, null, pref);
+ /**
+ * Given a URI of an owl file returns the
+ * translated OWLOntology object
+ * @param tboxFile - the URI of the file
+ * @return the translated OWLOntology
+ * @throws Exception
+ */
+ private OWLOntology getOntologyFromFile(URI tboxFile) throws Exception{
+ //get owl ontology from file
+ OWLOntologyIRIMapper iriMapper = new AutoIRIMapper(new File(tboxFile).getParentFile(), false);
+ man.addIRIMapper(iriMapper);
+ OWLOntology owlontology = man.loadOntologyFromOntologyDocument(new File(tboxFile));
+
+ return owlontology;
+ }
+
+ /**
+ * Given an OWL ontology returns the translated Ontology
+ * of its closure
+ * @param owlontology
+ * @return the translated Ontology
+ * @throws Exception
+ */
+ private Ontology getOntologyFromOWLOntology(OWLOntology owlontology) throws Exception{
+ //compute closure first (owlontology might contain include other source declarations)
+ Set clousure = owlontology.getOWLOntologyManager().getImportsClosure(owlontology);
+ return translator.mergeTranslateOntologies(clousure);
+ }
+
+ private void setupQuest(Ontology tbox, OBDAModel obdaModel, DBMetadata metadata, QuestPreferences pref) throws Exception {
+ //start Quest with the given ontology and model and preferences
+ if (metadata == null) {
+ //start up quest by obtaining metadata from given data source
+ questInstance = new Quest(tbox, obdaModel, pref);
+ }
+ else {
+ //start up quest with given metadata
+ questInstance = new Quest(tbox, obdaModel, metadata, pref);
+ }
+
+ questInstance.setupRepository();
}
+ /**
+ * Create an in-memory H2 database data source
+ * @param name - the datasource name
+ * @return the created OBDADataSource
+ */
private static OBDADataSource getMemOBDADataSource(String name) {
OBDADataSource obdaSource = OBDADataFactoryImpl.getInstance().getDataSource(URI.create(name));
@@ -149,10 +261,14 @@ private static OBDADataSource getMemOBDADataSource(String name) {
obdaSource.setParameter(RDBMSourceParameterConstants.DATABASE_USERNAME, username);
obdaSource.setParameter(RDBMSourceParameterConstants.IS_IN_MEMORY, "true");
obdaSource.setParameter(RDBMSourceParameterConstants.USE_DATASOURCE_FOR_ABOXDUMP, "true");
+
return (obdaSource);
-
}
+ /**
+ * Generate an OBDAModel from Direct Mapping (Bootstrapping)
+ * @return the OBDAModel
+ */
private OBDAModel getOBDAModelDM() {
DirectMappingEngine dm = new DirectMappingEngine("http://example.org/base", 0);
@@ -165,6 +281,10 @@ private OBDAModel getOBDAModelDM() {
return null;
}
+ /**
+ * Get a Quest connection from the Quest instance
+ * @return the QuestConnection
+ */
public QuestConnection getQuestConnection() {
try {
// System.out.println("getquestconn..");
diff --git a/quest-owlapi3/pom.xml b/quest-owlapi3/pom.xml
index d7578df6e99..714ec6bba43 100644
--- a/quest-owlapi3/pom.xml
+++ b/quest-owlapi3/pom.xml
@@ -15,6 +15,11 @@
ch.qos.logback
logback-classic
+
+ junit
+ junit
+ test
+
ch.qos.logback
logback-core
@@ -34,6 +39,11 @@
reformulation-core
1.8
+
+ inf.unibz.it.obda
+ obdalib-sesame
+ 1.8
+
net.sourceforge.owlapi
owlapi-api
diff --git a/quest-rdb2rdf-compliance/pom.xml b/quest-rdb2rdf-compliance/pom.xml
index 30d1beaf032..e110c60a813 100644
--- a/quest-rdb2rdf-compliance/pom.xml
+++ b/quest-rdb2rdf-compliance/pom.xml
@@ -19,6 +19,11 @@
ch.qos.logback
logback-core
+
+ junit
+ junit
+ test
+
inf.unibz.it.obda
obdalib-core
diff --git a/quest-sesame/pom.xml b/quest-sesame/pom.xml
index 6020104d86c..61577fadf1c 100644
--- a/quest-sesame/pom.xml
+++ b/quest-sesame/pom.xml
@@ -8,7 +8,7 @@
quest-sesame
quest-sesame
- This is the Sesame API implementation basedon Quest
+ This is the Sesame API implementation based on Quest
@@ -19,6 +19,11 @@
ch.qos.logback
logback-core
+
+ junit
+ junit
+ test
+
obdalib-core
inf.unibz.it.obda
@@ -35,6 +40,11 @@
inf.unibz.it.obda
1.8
+
+ obdalib-sesame
+ inf.unibz.it.obda
+ 1.8
+
reformulation-core
inf.unibz.it.obda
diff --git a/quest-sesame/src/main/java/sesameWrapper/QuestSesameMaterializerCMD.java b/quest-sesame/src/main/java/sesameWrapper/QuestSesameMaterializerCMD.java
index 3c3e8fd0e07..319247f29f7 100644
--- a/quest-sesame/src/main/java/sesameWrapper/QuestSesameMaterializerCMD.java
+++ b/quest-sesame/src/main/java/sesameWrapper/QuestSesameMaterializerCMD.java
@@ -10,13 +10,14 @@
import it.unibz.krdb.obda.exception.InvalidMappingException;
import it.unibz.krdb.obda.io.ModelIOManager;
-import it.unibz.krdb.obda.io.R2RMLReader;
import it.unibz.krdb.obda.model.OBDAModel;
import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
import it.unibz.krdb.obda.ontology.Ontology;
import it.unibz.krdb.obda.owlapi3.OBDAModelSynchronizer;
import it.unibz.krdb.obda.owlapi3.OWLAPI3Translator;
import it.unibz.krdb.obda.owlrefplatform.questdb.QuestDBVirtualStore;
+import it.unibz.krdb.obda.sesame.SesameStatementIterator;
+import it.unibz.krdb.obda.sesame.r2rml.R2RMLReader;
import java.io.BufferedWriter;
import java.io.File;
diff --git a/quest-sesame/src/main/java/sesameWrapper/SemanticIndexCMD.java b/quest-sesame/src/main/java/sesameWrapper/SemanticIndexCMD.java
index 1739d40c421..ff926336585 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SemanticIndexCMD.java
+++ b/quest-sesame/src/main/java/sesameWrapper/SemanticIndexCMD.java
@@ -29,8 +29,6 @@
import java.net.URI;
import java.sql.Connection;
-import junit.framework.TestCase;
-
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyManager;
diff --git a/quest-sesame/src/main/java/sesameWrapper/SesameGraphQuery.java b/quest-sesame/src/main/java/sesameWrapper/SesameGraphQuery.java
index 513091e28be..09d6758a72e 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SesameGraphQuery.java
+++ b/quest-sesame/src/main/java/sesameWrapper/SesameGraphQuery.java
@@ -13,6 +13,7 @@
import it.unibz.krdb.obda.ontology.Assertion;
import it.unibz.krdb.obda.owlrefplatform.core.QuestDBConnection;
import it.unibz.krdb.obda.owlrefplatform.core.QuestDBStatement;
+import it.unibz.krdb.obda.sesame.SesameStatement;
import java.util.HashMap;
import java.util.LinkedList;
diff --git a/quest-sesame/src/main/java/sesameWrapper/SesameMaterializer.java b/quest-sesame/src/main/java/sesameWrapper/SesameMaterializer.java
index d04193c844f..35a4d8b1c2f 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SesameMaterializer.java
+++ b/quest-sesame/src/main/java/sesameWrapper/SesameMaterializer.java
@@ -12,6 +12,7 @@
import it.unibz.krdb.obda.ontology.Assertion;
import it.unibz.krdb.obda.ontology.Ontology;
import it.unibz.krdb.obda.owlrefplatform.core.abox.QuestMaterializer;
+import it.unibz.krdb.obda.sesame.SesameStatementIterator;
import java.util.Iterator;
diff --git a/quest-sesame/src/main/java/sesameWrapper/SesameVirtualRepo.java b/quest-sesame/src/main/java/sesameWrapper/SesameVirtualRepo.java
index 9520967fc3d..10d20027f5f 100644
--- a/quest-sesame/src/main/java/sesameWrapper/SesameVirtualRepo.java
+++ b/quest-sesame/src/main/java/sesameWrapper/SesameVirtualRepo.java
@@ -13,12 +13,18 @@
import it.unibz.krdb.obda.owlrefplatform.core.QuestDBConnection;
import it.unibz.krdb.obda.owlrefplatform.core.QuestPreferences;
import it.unibz.krdb.obda.owlrefplatform.questdb.QuestDBVirtualStore;
+import it.unibz.krdb.sql.DBMetadata;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
import java.net.URI;
+import java.util.Properties;
+import org.openrdf.model.Graph;
import org.openrdf.repository.RepositoryException;
+import org.semanticweb.owlapi.model.OWLOntology;
public class SesameVirtualRepo extends SesameAbstractRepo {
@@ -30,10 +36,60 @@ public SesameVirtualRepo(String name, String obdaFile, boolean existential, Stri
this(name, null, obdaFile, existential, rewriting);
}
+ public SesameVirtualRepo(String name, String obdaFile, String configFileName) throws Exception {
+ this(name, null, obdaFile, configFileName);
+ }
+
public SesameVirtualRepo(String name, String tboxFile, String obdaFile, boolean existential, String rewriting)
throws Exception {
super();
+ createRepo(name, tboxFile, obdaFile, getPreferencesFromSettings(existential, rewriting));
+ }
+
+ public SesameVirtualRepo(String name, String tboxFile, String obdaFile, String configFileName) throws Exception {
+ super();
+ createRepo(name, tboxFile, obdaFile, getPreferencesFromFile(configFileName));
+ }
+
+ public SesameVirtualRepo(String name, OWLOntology tbox, Graph mappings, String configFileName) throws Exception {
+ super();
+ createRepo(name, tbox, mappings, null, getPreferencesFromFile(configFileName));
+ }
+ public SesameVirtualRepo(String name, OWLOntology tbox, Graph mappings, QuestPreferences config) throws Exception {
+ this(name, tbox, mappings, null, config);
+ }
+ public SesameVirtualRepo(String name, OWLOntology tbox, Graph mappings, DBMetadata metadata, QuestPreferences prop) throws Exception {
+ super();
+ createRepo(name, tbox, mappings, metadata, prop);
+ }
+
+ /**
+ * Generate QuestPreferences from a config file
+ * @param configFileName - the path to the config file
+ * @return the read QuestPreferences object
+ * @throws FileNotFoundException
+ * @throws IOException
+ */
+ private QuestPreferences getPreferencesFromFile(String configFileName) throws FileNotFoundException, IOException {
+ QuestPreferences pref = new QuestPreferences();
+ if (!configFileName.isEmpty()) {
+ File configFile = new File(URI.create(configFileName));
+ pref.readDefaultPropertiesFile(new FileInputStream(configFile));
+ } else {
+ pref.readDefaultPropertiesFile();
+ }
+ return pref;
+ }
+
+ /**
+ * Generate a QuestPreferences object from some passed
+ * arguments as settings
+ * @param existential - boolean to turn existential reasoning on or off (default=false)
+ * @param rewriting - String to indicate rewriting technique to be used (default=TreeWitness)
+ * @return the QuestPreferences object
+ */
+ private QuestPreferences getPreferencesFromSettings(boolean existential, String rewriting) {
QuestPreferences pref = new QuestPreferences();
pref.setCurrentValueOf(QuestPreferences.ABOX_MODE, QuestConstants.VIRTUAL);
if (existential)
@@ -44,51 +100,40 @@ public SesameVirtualRepo(String name, String tboxFile, String obdaFile, boolean
pref.setCurrentValueOf(QuestPreferences.REFORMULATION_TECHNIQUE, QuestConstants.TW);
else if (rewriting.equals("Default"))
pref.setCurrentValueOf(QuestPreferences.REFORMULATION_TECHNIQUE, QuestConstants.UCQBASED);
-
- createRepo(name, tboxFile, obdaFile, pref);
+ return pref;
}
- public SesameVirtualRepo(String name, String obdaFile, String configFileName) throws Exception {
-
- this(name, null, obdaFile, configFileName);
- }
-
- public SesameVirtualRepo(String name, String tboxFile, String obdaFile, String configFileName) throws Exception {
- super();
- QuestPreferences pref = new QuestPreferences();
- if (!configFileName.isEmpty()) {
- File configFile = new File(URI.create(configFileName));
- pref.readDefaultPropertiesFile(new FileInputStream(configFile));
- } else {
- pref.readDefaultPropertiesFile();
- }
-
- createRepo(name, tboxFile, obdaFile, pref);
+ private void createRepo(String name, OWLOntology tbox, Graph mappings, DBMetadata metadata, QuestPreferences pref) throws Exception
+ {
+ this.virtualStore = new QuestDBVirtualStore(name, tbox, mappings, metadata, pref);
}
-
private void createRepo(String name, String tboxFile, String mappingFile, QuestPreferences pref) throws Exception
{
if (mappingFile == null) {
+ //if we have no mappings
this.virtualStore = new QuestDBVirtualStore(name, pref);
} else {
+ //generate obdaURI
URI obdaURI;
if (mappingFile.startsWith("file:"))
obdaURI = URI.create(mappingFile);
else
obdaURI = new File(mappingFile).toURI();
- if (tboxFile == null)
+ if (tboxFile == null) {
+ //if we have no owl file
this.virtualStore = new QuestDBVirtualStore(name, obdaURI, pref);
- else {
+ } else {
+ //if we have both owl and mappings file
+ //generate tboxURI
URI tboxURI;
if (tboxFile.startsWith("file:"))
tboxURI = URI.create(tboxFile);
else
tboxURI = new File(tboxFile).toURI();
- this.virtualStore = new QuestDBVirtualStore(name, tboxURI,
- obdaURI, pref);
+ this.virtualStore = new QuestDBVirtualStore(name, tboxURI, obdaURI, pref);
}
}
}
diff --git a/quest-sesame/src/main/java/sesameWrapper/example/ABoxSesameMaterializerExample.java b/quest-sesame/src/main/java/sesameWrapper/example/ABoxSesameMaterializerExample.java
index bf7c99029b6..4df20006541 100644
--- a/quest-sesame/src/main/java/sesameWrapper/example/ABoxSesameMaterializerExample.java
+++ b/quest-sesame/src/main/java/sesameWrapper/example/ABoxSesameMaterializerExample.java
@@ -12,6 +12,7 @@
import it.unibz.krdb.obda.model.OBDADataFactory;
import it.unibz.krdb.obda.model.OBDAModel;
import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
+import it.unibz.krdb.obda.sesame.SesameStatementIterator;
import java.io.BufferedWriter;
import java.io.File;
@@ -23,7 +24,6 @@
import org.openrdf.rio.n3.N3Writer;
import sesameWrapper.SesameMaterializer;
-import sesameWrapper.SesameStatementIterator;
public class ABoxSesameMaterializerExample {
diff --git a/quest-sesame/src/main/java/sesameWrapper/example/QuestSesameVirtualExample.java b/quest-sesame/src/main/java/sesameWrapper/example/QuestSesameVirtualExample.java
index 92838cce13d..7131b43578f 100644
--- a/quest-sesame/src/main/java/sesameWrapper/example/QuestSesameVirtualExample.java
+++ b/quest-sesame/src/main/java/sesameWrapper/example/QuestSesameVirtualExample.java
@@ -8,8 +8,19 @@
*/
package sesameWrapper.example;
+import it.unibz.krdb.obda.io.ModelIOManager;
+import it.unibz.krdb.obda.model.OBDAModel;
+import it.unibz.krdb.obda.model.impl.OBDADataFactoryImpl;
+import it.unibz.krdb.obda.owlrefplatform.core.QuestConstants;
+import it.unibz.krdb.obda.owlrefplatform.core.QuestPreferences;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URL;
import java.util.List;
+import org.openrdf.model.Graph;
import org.openrdf.model.Value;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryLanguage;
@@ -17,6 +28,15 @@
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.rio.RDFFormat;
+import org.openrdf.rio.RDFParser;
+import org.openrdf.rio.Rio;
+import org.openrdf.rio.helpers.StatementCollector;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyIRIMapper;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.util.AutoIRIMapper;
import sesameWrapper.SesameVirtualRepo;
@@ -28,6 +48,7 @@ public class QuestSesameVirtualExample {
*/
final String owlFile = "src/main/resources/example/exampleBooks.owl";
final String obdaFile = "src/main/resources/example/exampleBooks.obda";
+ final String ttlFile = "src/main/resources/example/Books-mappings.ttl";
public void runQuery() throws Exception {
@@ -37,6 +58,7 @@ public void runQuery() throws Exception {
* TreeWitness algorithm.
*/
Repository repo = new SesameVirtualRepo("virtualExample", owlFile, obdaFile, false, "TreeWitness");
+
/*
* Repository must be always initialized first
@@ -95,10 +117,103 @@ public void runQuery() throws Exception {
}
}
+ public void runR2RML() throws Exception {
+ /*
+ * Create a Quest Sesame repository with additional setup that uses no
+ * existential reasoning and the rewriting technique is using
+ * TreeWitness algorithm.
+ */
+
+ //create owlontology from file
+ OWLOntologyManager man = OWLManager.createOWLOntologyManager();
+ OWLOntologyIRIMapper iriMapper = new AutoIRIMapper(new File(owlFile).getParentFile(), false);
+ man.addIRIMapper(iriMapper);
+ OWLOntology owlontology = man.loadOntologyFromOntologyDocument(new File(owlFile));
+
+ //create RDF Graph from ttl file
+ RDFParser parser = Rio.createParser(RDFFormat.TURTLE);
+ InputStream in = new FileInputStream(ttlFile);
+ URL documentUrl = new URL("file://" + ttlFile);
+ Graph myGraph = new org.openrdf.model.impl.GraphImpl();
+ StatementCollector collector = new StatementCollector(myGraph);
+ parser.setRDFHandler(collector);
+ parser.parse(in, documentUrl.toString());
+
+ QuestPreferences pref = new QuestPreferences();
+ pref.setCurrentValueOf(QuestPreferences.ABOX_MODE, QuestConstants.VIRTUAL);
+ pref.setCurrentValueOf(QuestPreferences.REWRITE, "true");
+ pref.setCurrentValueOf(QuestPreferences.REFORMULATION_TECHNIQUE, QuestConstants.TW);
+ //set jdbc params in config
+ pref.setCurrentValueOf(QuestPreferences.DBNAME, "books");
+ pref.setCurrentValueOf(QuestPreferences.JDBC_URL, "jdbc:mysql://10.7.20.39/books?sessionVariables=sql_mode='ANSI'");
+ pref.setCurrentValueOf(QuestPreferences.DBUSER, "fish");
+ pref.setCurrentValueOf(QuestPreferences.DBPASSWORD, "fish");
+ pref.setCurrentValueOf(QuestPreferences.JDBC_DRIVER, "com.mysql.jdbc.Driver");
+
+ Repository repo = new SesameVirtualRepo("virtualExample2", owlontology, myGraph, pref);
+
+ System.out.println(myGraph);
+ /*
+ * Repository must be always initialized first
+ */
+ repo.initialize();
+
+ /*
+ * Get the repository connection
+ */
+ RepositoryConnection con = repo.getConnection();
+
+ /*
+ * Sample query: show all books with their title.
+ */
+ String sparqlQuery =
+ "PREFIX : \n" +
+ "SELECT ?x ?y \n" +
+ "WHERE {?x a :Book; :hasEdition ?y}";
+
+ try {
+ TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, sparqlQuery);
+ TupleQueryResult result = tupleQuery.evaluate();
+
+ /*
+ * Print out the results to the standard output
+ */
+ List bindingNames = result.getBindingNames();
+ System.out.println(bindingNames);
+
+ while (result.hasNext()) {
+ BindingSet bindingSet = result.next();
+ boolean needSeparator = false;
+ for (String binding : bindingNames) {
+ if (needSeparator) {
+ System.out.print(", ");
+ }
+ Value value = bindingSet.getValue(binding);
+ System.out.print(value.toString());
+ needSeparator = true;
+ }
+ System.out.println();
+ }
+
+ /*
+ * Close result set to release resources
+ */
+ result.close();
+ } finally {
+
+ /*
+ * Finally close the connection to release resources
+ */
+ if (con != null && con.isOpen()) {
+ con.close();
+ }
+ }
+ }
public static void main(String[] args) {
try {
QuestSesameVirtualExample example = new QuestSesameVirtualExample();
- example.runQuery();
+ // example.runQuery();
+ example.runR2RML();
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/quest-sesame/src/main/resources/example/Books-mappings.ttl b/quest-sesame/src/main/resources/example/Books-mappings.ttl
new file mode 100644
index 00000000000..719939f7680
--- /dev/null
+++ b/quest-sesame/src/main/resources/example/Books-mappings.ttl
@@ -0,0 +1,119 @@
+@prefix rr: .
+@prefix xsd: .
+@prefix : .
+@prefix owl: .
+@prefix rdf: .
+@prefix xsd: .
+@prefix rdfs: .
+@prefix quest: .
+@prefix owl2xml: .
+@base .
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select wr_code, wr_name from tb_affiliated_writers
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#author/{\"wr_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"wr_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_books" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"bk_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"bk_title\"" ]
+ ];
+
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [
+ a rr:RefObjectMap;
+ rr:parentTriplesMap ;
+ rr:joinCondition [
+ rr:child "\"bk_code\"";
+ rr:parent "\"bk_id\"";
+ ];
+ ];
+ ].
+
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select ed_code, ed_name from tb_editor
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#editor/{\"ed_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"ed_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_edition" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#edition/{\"ed_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"pub_date\"" ]
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"n_edt\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select bk_code, bk_title from tb_books where bk_type='A'
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"bk_code\"}/";
+ rr:class
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select wr_code,wr_name from tb_on_prob_wr
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#author/{\"wr_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"wr_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select ed_code,pub_date,n_edt from tb_edition where ed_type='S'
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#edition/{\"ed_code\"}/";
+ rr:class
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select id_bk,gen_name from tb_bk_gen
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"id_bk\"}/" ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"gen_name\"" ]
+ ].
+
+
diff --git a/quest-sesame/src/main/resources/example/exampleBooks.obda b/quest-sesame/src/main/resources/example/exampleBooks.obda
index 1155d5164b7..e2b79dfd554 100644
--- a/quest-sesame/src/main/resources/example/exampleBooks.obda
+++ b/quest-sesame/src/main/resources/example/exampleBooks.obda
@@ -1,5 +1,5 @@
[PrefixDeclaration]
-: http://meraka/moss/exampleBooks.owl#
+: http://meraka/moss/exampleBooks.owl#
owl: http://www.w3.org/2002/07/owl#
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
xsd: http://www.w3.org/2001/XMLSchema#
@@ -8,10 +8,10 @@ quest: http://obda.org/quest#
[SourceDeclaration]
sourceUri Books
-connectionUrl jdbc:h2:tcp://localhost/books
-username sa
-password
-driverClass org.h2.Driver
+connectionUrl jdbc:postgresql://10.7.20.39/books
+username postgres
+password postgres
+driverClass org.postgresql.Driver
[MappingDeclaration] @collection [[
mappingId cl_Authors
@@ -31,7 +31,7 @@ target :edition/{ed_code}/ a :Edition ; :dateOfPublication {pub_date} ; :editio
source select ed_code, pub_date, n_edt from tb_edition
mappingId cl_AudioBook
-target :book/{bk_code}/ a :AudioBook .
+target :book/{t.bk_code}/ a :AudioBook .
source select bk_code, bk_title from tb_books where bk_type='A'
mappingId cl_EmergingWriter
diff --git a/quest-sesame/src/main/resources/example/exampleBooks.ttl b/quest-sesame/src/main/resources/example/exampleBooks.ttl
new file mode 100644
index 00000000000..e3321b82532
--- /dev/null
+++ b/quest-sesame/src/main/resources/example/exampleBooks.ttl
@@ -0,0 +1,118 @@
+@prefix rr: .
+@prefix xsd: .
+@prefix : .
+@prefix owl: .
+@prefix rdf: .
+@prefix xsd: .
+@prefix rdfs: .
+@prefix quest: .
+@prefix owl2xml: .
+@base .
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_affiliated_writers" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#author/{\"wr_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"wr_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_books" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"bk_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"bk_title\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_editor" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#editor/{\"ed_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"ed_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:tableName "tb_edition" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#edition/{\"ed_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"pub_date\"" ]
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"n_edt\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select bk_code, bk_title from tb_books where bk_type='A'
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"bk_code\"}/";
+ rr:class
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select wr_code,wr_name from tb_on_prob_wr
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#author/{\"wr_code\"}/";
+ rr:class
+ ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"wr_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select ed_code,pub_date,n_edt from tb_edition where ed_type='S'
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#edition/{\"ed_code\"}/";
+ rr:class
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """
+ select id_bk,gen_name from tb_bk_gen
+ """ ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"id_bk\"}/" ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:column "\"gen_name\"" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """select * from (select * from tb_books) as CHILD, (select * from tb_edition) as PARENT WHERE CHILD.bk_code = PARENT.bk_id""" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"CHILD.bk_code\"}/" ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:template "http://meraka/moss/exampleBooks.owl#edition/{\"PARENT.ed_code\"}/" ]
+ ].
+
+
+ a rr:TriplesMap;
+ rr:logicalTable [ rr:sqlQuery """select * from (select * from tb_books) as CHILD, (select * from tb_authors) as PARENT WHERE CHILD.bk_code = PARENT.bk_code""" ];
+ rr:subjectMap [ rr:template "http://meraka/moss/exampleBooks.owl#book/{\"CHILD.bk_code\"}/" ];
+ rr:predicateObjectMap [
+ rr:predicate ;
+ rr:objectMap [ rr:template "http://meraka/moss/exampleBooks.owl#author/{\"PARENT.wr_id\"}/" ]
+ ].
diff --git a/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/R2RMLWriterTest.java b/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/R2RMLWriterTest.java
deleted file mode 100644
index 18b7a544d9c..00000000000
--- a/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/R2RMLWriterTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2009-2013, Free University of Bozen Bolzano
- * This source code is available under the terms of the Affero General Public
- * License v3.
- *
- * Please see LICENSE.txt for full license terms, including the availability of
- * proprietary exceptions.
- */
-package inf.unibz.ontop.sesame.tests.general;
-
-import it.unibz.krdb.obda.io.R2RMLWriter;
-import it.unibz.krdb.obda.model.OBDAModel;
-
-import java.io.File;
-import java.net.URI;
-
-public class R2RMLWriterTest {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
-
- String owlfile = "C:/Project/Test Cases/Book.owl";
- String obdafile = "C:/Project/Test Cases/Book.obda";
-
- URI owlURI = new File(owlfile).toURI();
- URI obdaURI = new File(obdafile).toURI();
- it.unibz.krdb.obda.owlrefplatform.questdb.QuestDBVirtualStore store;
- store = new it.unibz.krdb.obda.owlrefplatform.questdb.QuestDBVirtualStore("test", owlURI, obdaURI);
-
- OBDAModel model = store.getObdaModel(obdaURI);
- R2RMLWriter writer = new R2RMLWriter(model, URI.create("simple-h2"));
- File out = new File("C:/Project/Test Cases/mapping1.ttl");
- //"C:/Project/Timi/Workspace/obdalib-parent/quest-rdb2rdf-compliance/src/main/resources/D004/WRr2rmlb.ttl");
- writer.write(out);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
-}
diff --git a/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/SesameVirtualTest.java b/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/SesameVirtualTest.java
index 041699f62c5..0bd9855b3c0 100644
--- a/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/SesameVirtualTest.java
+++ b/quest-sesame/src/test/java/inf/unibz/ontop/sesame/tests/general/SesameVirtualTest.java
@@ -38,8 +38,8 @@ public void test() throws Exception
try {
- String owlfile = "C:/Project/Test Cases/Book.owl";
- String obdafile = "C:/Project/Test Cases/Book.obda";
+ String owlfile = "/Users/timi/Documents/hdd/Project/Test Cases/Book.owl";
+ String obdafile = "/Users/timi/Documents/hdd/Project/Test Cases/Books-mappings.ttl";
//"/home/timi/ontologies/helloworld/helloworld.owl";
repo = new SesameVirtualRepo("my_name", owlfile, obdafile, false, "TreeWitness");
@@ -49,7 +49,7 @@ public void test() throws Exception
///query repo
try {
- String queryString = "select * where { ?z ?y }";
+ String queryString = "select * where {?x ?z ?y }";
//"}";
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tupleQuery.evaluate();
diff --git a/quest-sesame/src/test/java/inf/unibz/ontp/sesame/repository/test/SesameMaterializerCmdTest.java b/quest-sesame/src/test/java/inf/unibz/ontp/sesame/repository/test/SesameMaterializerCmdTest.java
index a8cd7acf832..ab66b790218 100644
--- a/quest-sesame/src/test/java/inf/unibz/ontp/sesame/repository/test/SesameMaterializerCmdTest.java
+++ b/quest-sesame/src/test/java/inf/unibz/ontp/sesame/repository/test/SesameMaterializerCmdTest.java
@@ -17,6 +17,7 @@
import it.unibz.krdb.obda.owlapi3.OWLAPI3Translator;
import it.unibz.krdb.obda.owlapi3.QuestOWLIndividualIterator;
import it.unibz.krdb.obda.owlrefplatform.owlapi3.OWLAPI3Materializer;
+import it.unibz.krdb.obda.sesame.SesameStatementIterator;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
@@ -41,7 +42,6 @@
import org.semanticweb.owlapi.model.OWLOntologyManager;
import sesameWrapper.SesameMaterializer;
-import sesameWrapper.SesameStatementIterator;
public class SesameMaterializerCmdTest extends TestCase {
diff --git a/reformulation-core/pom.xml b/reformulation-core/pom.xml
index 6ad2eef7cbc..3d14c53743a 100644
--- a/reformulation-core/pom.xml
+++ b/reformulation-core/pom.xml
@@ -35,6 +35,10 @@
slf4j-api
jar
+
+ org.openrdf.sesame
+ sesame-model
+
postgresql
postgresql
diff --git a/reformulation-core/src/main/java/it/unibz/krdb/obda/owlrefplatform/core/Quest.java b/reformulation-core/src/main/java/it/unibz/krdb/obda/owlrefplatform/core/Quest.java
index 1c8358a7578..b9e38cfc5bb 100644
--- a/reformulation-core/src/main/java/it/unibz/krdb/obda/owlrefplatform/core/Quest.java
+++ b/reformulation-core/src/main/java/it/unibz/krdb/obda/owlrefplatform/core/Quest.java
@@ -285,6 +285,11 @@ public Quest(Ontology tbox, OBDAModel mappings, Properties config) {
loadOBDAModel(mappings);
}
+
+ public Quest(Ontology tbox, OBDAModel mappings, DBMetadata metadata, Properties config) {
+ this(tbox, mappings, config);
+ this.metadata = metadata;
+ }
protected Map getSQLCache() {
return querycache;
@@ -652,13 +657,21 @@ public void setupRepository() throws Exception {
OBDADataSource datasource = unfoldingOBDAModel.getSources().get(0);
URI sourceId = datasource.getSourceID();
- metadata = JDBCConnectionManager.getMetaData(localConnection);
-
- SQLDialectAdapter sqladapter = SQLAdapterFactory.getSQLDialectAdapter(datasource
- .getParameter(RDBMSourceParameterConstants.DATABASE_DRIVER));
+ //if the metadata was not already set
+ if (metadata == null) {
- JDBCUtility jdbcutil = new JDBCUtility(datasource.getParameter(RDBMSourceParameterConstants.DATABASE_DRIVER));
- datasourceQueryGenerator = new SQLGenerator(metadata, jdbcutil, sqladapter);
+ metadata = JDBCConnectionManager.getMetaData(localConnection);
+ }
+
+ SQLDialectAdapter sqladapter = SQLAdapterFactory
+ .getSQLDialectAdapter(datasource
+ .getParameter(RDBMSourceParameterConstants.DATABASE_DRIVER));
+
+ JDBCUtility jdbcutil = new JDBCUtility(
+ datasource
+ .getParameter(RDBMSourceParameterConstants.DATABASE_DRIVER));
+ datasourceQueryGenerator = new SQLGenerator(metadata, jdbcutil,
+ sqladapter);
if (isSemanticIdx) {
datasourceQueryGenerator.setUriIds(uriRefIds);
}
@@ -1005,9 +1018,7 @@ private void preprocessProjection(Connection localConnection, ArrayList