GithubHelp home page GithubHelp logo

sparqlmap's Introduction

SparqlMap

SparqlMap - A SPARQL to SQL rewriter based on R2RML specification.

It can be used in allows both extracting RDF from an relational database and rewrite SPARQL queries into SQL.

The SparqlMap Client provides command line and web access to the SparqlMap core.

Download

Get the latest release on the release page. Please note, that no MySQL driver is included. You will need to get it from the MySQL page and copy it into the ./lib folder.

Building

We use a patched version of Apache Metamode, which improves quotation mark handling.

To include it into your SparqlMap-build please install it locally (using maven)

git clone --branch feature/quoteColumns https://github.com/tomatophantastico/metamodel && cd metamodel && mvn install

SparqlMap utilizes gradle, so you can just run

./gradle installDist

which will create a distribution in build/install/sparqlmap.

Overview over the mapping process

SparqlMap overview

Quick Start

Most of the time, dump creation will take place on the command line. In the binary distributions use the sparqlmap command. Calling sparqlmap without or with a wrong combination of options will present all options available.

Let's have a look at some samples:

RDF Dump

./bin/sparqlmap --action=dump --ds.type=JDBC --ds.url="jdbc:mysql://192.168.59.103:3306/sparqlmaptest" --ds.username=sparqlmap --ds.password=sparqlmap  --r2rmlFile=src/test/resources/hsql-bsbm/mapping.ttl   

Or if you do not have a R2RML mapping, you can create a dump based on a Direct Mapping

./bin/sparqlmap --action=dump --ds.type=JDBC --ds.url="jdbc:mysql://192.168.59.103:3306/sparqlmaptest" --ds.username=sparqlmap --ds.password=sparqlmap 

R2RML Mappings

Re-use an Existing Mapping

Is quite simple, just provide the --r2rmlFileparameter:

--r2rmlFile=<fileLocation>

Creation of a Mapping

Creating a R2RML representation of a default mapping is as easy as this, just change the action:

./bin/sparqlmap --action=directmapping --ds.type=JDBC --ds.url="jdbc:mysql://192.168.59.103:3306/sparqlmaptest" --ds.username=sparqlmap  --ds.password=sparqlmap  

Direct Mapping options

With the following options, the generation of the direct mapping can be controlled. These options are meant to ease manual editing of the generated R2RML file, or when the

  • a given baseuriprefix is suffixed by either mapping, vocab or instance to produce the corresponding uri prefixes.
  • the mappinguriprefix will only show up in the resulting r2rml-file for name the R2RML Resources, such as TriplesMaps
  • vocaburiprefix helps constructing useful identifiers for predicates and class generated from the schema of the data source. It will therefore show up in the extraced data.
  • Resources generated in the RDB-to-RDF translation process use the instanceuriprefix for IRI generation.
--dm.baseuriprefix=<baseuri/>
--dm.mappinguriprefix=<baseuri/mapping/>
--dm.vocaburiprefix=<basuri/vocab/>
--dm.instanceuriprefix=<baseuri/instance>
--dm.separatorchar=#

Rewrite SPARQL queries into SQL

For rewriting SPARQL queries into SQL SparqlMap can expose a SPARQL endpoint by an embedded tomcat. The enpoint is started by

This will expose an SPARQL endpoint with a little snorql interface.

R2RML conformance

SparqlMap conforms with the R2RML specification and was tested with PostgreSQL, MySQL and HSQL.

Adding additional database drivers

Simply copy them into the lib folder.

Building and installation

SparqlMap requires the following dependencies, which are not present in the main repos.

  1. Metamodel with a patch
git clone https://github.com/tomatophantastico/metamodel.git
cd metamodel
mvn install

Actions

CLI

SparqlMap allows the following command line interactions, selected by the `--action=´ parameter

dump

This creates a dump of the mapped database. You can specify the outputformat, using the --format=<FORMAT> parameter. Supported is TURTLE, TRIG, NTRIPLES and NQUADS. Triple serializations simply ignore the graph definitions of the mappings. A triple that occurs in multiple graphs will consequently appear multiple times in the result.

directmapping

A R2RML mapping is created, based on the concept of a direct mapping, always yields TURTLE output.

query

A query is executed and the result is returned on the command line.

web

SparqlMap can be used as a SPARQL enndpoint, for example for exposing a ACCESS database:

bin/sparqlmap --action=web --ds.type=ACCESS --ds.url=mydata.accdb

The endpoint will be accessible on:

localhost:8080/sparql

Currently, a number of limitations apply:

  • Some the query processing is executed in-memory, which degrades performance
  • There is no further UI for entering and viewing queries

Mapping Options

Existing mapping files can be provided via the r2rmlFile-parameter:

--r2rmlFile=<filename>

If this parameter is omitted, a direct mapping will be created.

The direct mapping generation can be modified by following attributes. If you just define the <baseUriPrefix> you should be fine in most cases.

--dm.baseUriPrefix=http://localhost/baseiri/
--dm.mappingUriPrefix=<baseUriPrefix>/mapping/
--dm.vocabUriPrefix=<baseUriPrefix>/instance/
--dm.instanceUriPrefix=<baseUriPrefix>/vocab/
--dm.separatorChar=+

Custom R2RML extensions

Conditional Mappings and transformations

SparqlMap allows you to perform to define regex based conditionals and transformations for cleaning data. These options are only evaluated when materializing data and is therefore note available in the SQL backend. Also, please bear in mind that complex matching and replacement patterns may seriously degrade performance, although if you need to do this kind of transformation, using the mapping tool is certainly the most efficient way to do so.

Lets consider a simple example, which can also be found in the test suite. Given some hancrafted data about events in a CSV sheet, we want expose the data as highest possible quality and therefore put all the knowledge we got into the mapping. When examining the data, we notice three different kind of date notations here: ´´´ id,date 1,10.10.2016 2,12/23/2016 3,2016 (exact date unknown) ´´´

  • Entry 1 uses a notation with dots as separators, as we are unsure about the notation we want to use the property ´vocab:datewithdot' property.
  • Entry 2 we recognize as a date and we want to transform it into an ´xsd:date´
  • Entry 3 contains literals and requires manual editing. Therefore we want to use the separate property ´vocab:dateString´

Conditional TermMaps (Entry 3)

Conditions are expressed as regexes and are matched against the String-representation of an RDF-Term, e.g., denending on the type of TermMap used:

  • Template based Term Maps materialize the template, any
  • Column-based attempts to convert the content into a string (i.e. a timestamp becomes a xsd:date string, binary gets hex-encoded) and match the pattern In any case, term type, language and literal lype are ignored.

So in order to map the textually desribed dates with the property ´vocab:dateString´ we use the ´smap:requiredPattern´ Property in the term map. ´´´ r2rml:predicateObjectMap [ r2rml:objectMap [ r2rml:column ""date""; smap:requiredPattern """^(.*)a-zA-Z$"""] ; r2rml:predicate vocab:dateString;

] ;

´´´ The object term will only be generated, if the pattern matches the whole string. Technically, this is implementd using Javas String.matches(String requiredPattern). Other R2RML processors will ignore ´smap:requiredPattern´.

Maintain compatibility with other R2RML processors (Entry 1)

As other R2RML processors will ignore the ´smap:requiredPattern´ Property, multiple and perphaps invalid values would be generated, if a column is mapped with multiple ´r2rml:predicateObjectMaps´. In order to be able to express a safe, r2rml compliant fallback in mappings, we subclassed/subpropertied R2RML concepts, such that us can express the generic/fallback mapping using the standard r2rml vocab and the specific cases using the sparqmap vocab.

In our concrete Example, we want to map Entry 1 with a different property. We simply add an other ´predicateObjectMap´ with an other ´smap:requiredPattern´.

´´´ r2rml:predicateObjectMap [ r2rml:objectMap [ r2rml:column ""date""; smap:requiredPattern """^(.*)a-zA-Z$"""] ; r2rml:predicate vocab:dateString;

] ;

smap:predicateObjectMap [ smap:objectMap [ smap:column ""date""; smap:requiredPattern """^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2,4})$""" ] ; smap:predicate vocab:datewithdot;

] ;

´´´

Mind here the use of a different prefix, namely ´smap:predicateObjectMap´ instead of ´r2rml:predicateObjectMap´. This is purely for better compatibility with other R2RML rewriters, as the with the ´smap´ the more specific mapping can be expressed which will be ignored by other R2RML rewriters.

TermMap transformation (Entry 2)

Entry 2 marks the case, where a small transformation is required to fit into a standard data type. This can be achieved with a pattern provided via the ´smap:transformPattern´. It allows the use of regex with capturing groups, defined in the requiredPattern, for small transformations.

Technically, this is achieved with Javas String.replaceAll(String requiredPattern, String replacement).

See this example: ´´´ smap:predicateObjectMap [ smap:objectMap [ smap:column ""date""; smap:requiredPattern """^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})$"""; smap:transformPattern """$1-$2-$3"""; r2rml:datatype xsd:date; ] ; smap:predicate vocab:date ; ] ; ´´´

Data Sources

Using with MongoDB (--ds.type=MONGODB2 or --ds.type=MONGODB3)

--ds.type=MONGODB2 or --ds.type=MONGODB3
--ds.url  the host and port of the mongodb server, e.g.: localhost:11111
--ds.dbname the database name
--ds.username  username
--ds.password  password

Using with a JDBC database

First, make sure that a JDBC4 driver is in the classpath. SparqlMap already contains drivers for the most important FOSS RDBMs, for closed source RDBMs, they have to be added manually.

--ds.url  the full jdbc url, e.g. jdbc:mysql://localhost:3306/test
--ds.username  username of the RDBMS
--ds.password  password of the RDBMS
--ds.maxPoolSize max number of connections to the RDBMs, defaults to 10

Using with CSV files (--ds.type=CSV)

For more details check the Apache MetaModel CSV adapter wiki page

Required parameters

--ds.type=CSV If it is not CSV, you will have to look at your other options
--ds.url=<path> required  The path to the file

Optional parameters and their defaults

--ds.quoteChar=" Encloses values
--ds.separatorChar=, default to , values in a row are split according to this value
--ds.escapeChar=\ for escaping special characters
--ds.encoding=UTF-8 
--ds.columnNameLineNumber=1 Starting from 1, 
--ds.failOnInconsistentRowLength=true defaults to true if the column count varies in the file, this pushes the parser further.
--ds.multilineValues=false allows multiline values

##Excel-Files

--ds.type=EXCEL  Mandatory
--ds.url=<path> required  The path to the file

Optional

--ds.columnNameLineNumber=1
--ds.SkipEmptyLines=true
--ds.SkipEmptyColumns=true

Access-Files

Besides the type, only the file location needs to be provided

--ds.type=ACCESS  Mandatory
--ds.url=<path>

##CouchDB

--ds.type=COUCHDB  Mandatory
--ds.url=<httpurl> required  The url of the couchdbserver (using ektorp)

Optionally:

--ds.username=<username>
--ds.password=<password>

sparqlmap's People

Contributors

tomatophantastico avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

sparqlmap's Issues

webserver wont start

--action=web causes

java.lang.IllegalArgumentException: Unable to call initializer. Object of class [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext] must be an instance of class org.springframework.context.annotation.AnnotationConfigApplicationContext

Build error due to missing artifacts

The following exception occurs when trying to build the project:

❯ ./gradlew clean build
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
Starting jetty with [/home/ruben/develop/external/sparqlmap/sparqlmap-web/target/libs/sparqlmap-web-0.6.3-SNAPSHOT.war]
:clean UP-TO-DATE
:sparqlmap-cli:clean
:sparqlmap-core:clean UP-TO-DATE
:sparqlmap-r2rmltests:clean UP-TO-DATE
:sparqlmap-shared:clean UP-TO-DATE
:sparqlmap-web:clean UP-TO-DATE
:sparqlmap-core:compileJava UP-TO-DATE
:sparqlmap-core:processResources UP-TO-DATE
:sparqlmap-core:classes UP-TO-DATE
:sparqlmap-core:jar
:sparqlmap-shared:compileJava UP-TO-DATE
:sparqlmap-shared:processResources UP-TO-DATE
:sparqlmap-shared:classes UP-TO-DATE
:sparqlmap-shared:jar
:sparqlmap-cli:compileJava
/home/ruben/develop/external/sparqlmap/sparqlmap-cli/src/main/java/sparqlmap.java:16: error: package org.aksw.sparqlmap.core does not exist

sparqlmap seems to bloat generated turtle file (action=dump)

Version: https://github.com/tomatophantastico/sparqlmap/releases/tag/v0.7.5-SNAPSHOT-2

Input CSV: https://github.com/AKSW/transform-bvl-pages-to-csv-file/blob/master/le-online-extracted-places.csv

Mapping: https://github.com/AKSW/transform-bvl-pages-to-csv-file/blob/master/r2rml-mapping.ttl

The TTL output file is about 60 MB.

But after running

rapper -i turtle -o turtle ~/Docker-Containers/sparqlmap/data/output.ttl >! ~/Downloads/output.ttl
rapper: Parsing URI file:///home/k00ni/Docker-Containers/sparqlmap/data/output.ttl with parser turtle
rapper: Serializing with serializer turtle
rapper: Parsing returned 402426 triples

the output file shrinks to about 9 MB. File seems to have way less triples as the one generated by sparqlmap.

rapper -i turtle -c ~/Downloads/output.ttl                            
rapper: Parsing URI file:///home/k00ni/Downloads/output.ttl with parser turtle
rapper: Parsing returned 67071 triples

I reproduced the behavior of rapper with CMEM from eccenca. Uploaded the 60 MB turtle file as a new graph, but downloading it resulted in a file around 9 MB.

Any idea?

Empty resultset when SPARQL endpoints receives faulty query

Calling the SPARQL endpoint with query parameter http://localhost:8090/api/sparql/?query=123 leads to a file download with an empty file.

On the console, sparqlmap prints:

15:32:08,577 [qtp408454989-14] ERROR  SparqlMapWebController : Throwable caught: 
sparqlmap_1   | org.apache.jena.query.QueryParseException: Encountered " <INTEGER> "123 "" at line 1, column 1.
sparqlmap_1   | Was expecting one of:
sparqlmap_1   |     "\ufeff" ...
sparqlmap_1   |     "base" ...
sparqlmap_1   |     "prefix" ...
sparqlmap_1   |     "select" ...
sparqlmap_1   |     "describe" ...
sparqlmap_1   |     "construct" ...
sparqlmap_1   |     "ask" ...
sparqlmap_1   |     
sparqlmap_1   | 	at org.apache.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:100)
sparqlmap_1   | 	at org.apache.jena.sparql.lang.ParserSPARQL11.parse$(ParserSPARQL11.java:52)
sparqlmap_1   | 	at org.apache.jena.sparql.lang.SPARQLParser.parse(SPARQLParser.java:34)
sparqlmap_1   | 	at org.apache.jena.query.QueryFactory.parse(QueryFactory.java:147)
sparqlmap_1   | 	at org.apache.jena.query.QueryFactory.create(QueryFactory.java:79)
sparqlmap_1   | 	at org.apache.jena.query.QueryFactory.create(QueryFactory.java:52)
sparqlmap_1   | 	at org.apache.jena.query.QueryFactory.create(QueryFactory.java:40)
sparqlmap_1   | 	at org.aksw.sparqlmap.core.SparqlMap.executeSparql(SparqlMap.java:258)
sparqlmap_1   | 	at org.aksw.sparqlmap.core.SparqlMap.executeSparql(SparqlMap.java:237)
sparqlmap_1   | 	at org.aksw.sparqlmap.web.SparqlMapWebController.executeSparqlQuery(SparqlMapWebController.java:121)
sparqlmap_1   | 	at org.aksw.sparqlmap.web.SparqlMapWebController.executeSparqlQuery(SparqlMapWebController.java:76)
sparqlmap_1   | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sparqlmap_1   | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sparqlmap_1   | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
sparqlmap_1   | 	at java.lang.reflect.Method.invoke(Method.java:498)
sparqlmap_1   | 	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
sparqlmap_1   | 	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
sparqlmap_1   | 	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
sparqlmap_1   | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
sparqlmap_1   | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
sparqlmap_1   | 	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
sparqlmap_1   | 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
sparqlmap_1   | 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
sparqlmap_1   | 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
sparqlmap_1   | 	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
sparqlmap_1   | 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
sparqlmap_1   | 	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
sparqlmap_1   | 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1712)
sparqlmap_1   | 	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:247)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
sparqlmap_1   | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
sparqlmap_1   | 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
sparqlmap_1   | 	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
sparqlmap_1   | 	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
sparqlmap_1   | 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
sparqlmap_1   | 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
sparqlmap_1   | 	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
sparqlmap_1   | 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
sparqlmap_1   | 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
sparqlmap_1   | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
sparqlmap_1   | 	at org.eclipse.jetty.server.Server.handle(Server.java:534)
sparqlmap_1   | 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
sparqlmap_1   | 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
sparqlmap_1   | 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
sparqlmap_1   | 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
sparqlmap_1   | 	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
sparqlmap_1   | 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
sparqlmap_1   | 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
sparqlmap_1   | 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
sparqlmap_1   | 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
sparqlmap_1   | 	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
sparqlmap_1   | 	at java.lang.Thread.run(Thread.java:745)

dump fails with 500 error code

I run SparqlMap with a mysql database.The following command fails with 500 error code:

curl -X GET --header 'Accept: application/json' 'http://localhost:8090/api/ROOT/dump'

The error message of the reponse is:

{
  "timestamp": 1503939212719,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "java.lang.NullPointerException",
  "message": "org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException",
  "path": "/api/ROOT/dump"
}

The other APIs like mapping or relation work fine with this backend.

This is the SparqlMap output:

18:53:32,713 [qtp782705199-17] WARN   ServletHandler :
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1712)
	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:247)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1699)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
	at org.eclipse.jetty.server.Server.handle(Server.java:534)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at org.aksw.sparqlmap.backend.metamodel.DumperMetaModel.dump(DumperMetaModel.java:119)
	at org.aksw.sparqlmap.backend.metamodel.DumperMetaModel.dump(DumperMetaModel.java:108)
	at org.aksw.sparqlmap.web.SparqlMapWebController.dump(SparqlMapWebController.java:193)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	... 51 more

Dump offset and limit

The response of the dump api can be very large. This can cause problems for some applications. This problem can be solve with a limit and offset option.

build fails

I tried to build SparqlMap from the dev branch with
git clone https://github.com/tomatophantastico/sparqlmap.git && cd sparqlmap && ./gradlew installDist
But this command failed with following error message:

 error: package jersey.repackaged.com.google.common.collect does not exist
import jersey.repackaged.com.google.common.collect.Sets;
                                                  ^
1 error
:sparqlmap-mapping:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sparqlmap-mapping:compileJava'.
> Compilation failed; see the compiler error output for details.

empyt tablename

I'm using the bsbm benchmark as a test cast for an application.
The tablename in the mapping response is empty in all fields, though i expected values like "offer".
This is the mapping file:

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://obda.inf.unibz.it/ontop/benchmark/bsbm.owl#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rev: <http://purl.org/stuff/rev#> .
@prefix bsbm: <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix iso3166: <http://downlode.org/rdf/iso-3166/countries#> .
@prefix bsbm-inst: <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/> .
@base <http://ontop.inf.unibz.it/bench/bsbm/r2rml/vocabulary#> .

<Offer>
    a rr:TriplesMap;
   rr:logicalTable [ rr:sqlQuery """
   	select nr, product, producer, vendor, price, validFrom, validTo, deliveryDays, offerWebpage, publisher, publishDate from offer
   """ ];
   rr:subjectMap [ rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"publisher\"}/Offer{\"nr\"}"
;
   				 rr:class <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/Offer>
];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/price> ;
   	 rr:objectMap [ rr:column "\"price\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/validFrom> ;
   	 rr:objectMap [ rr:column "\"validFrom\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/validTo> ;
   	 rr:objectMap [ rr:column "\"validTo\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/deliveryDays> ;
   	 rr:objectMap [ rr:column "\"deliveryDays\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/offerWebpage> ;
   	 rr:objectMap [ rr:column "\"offerWebpage\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://purl.org/dc/elements/1.1/date> ;
   	 rr:objectMap [ rr:column "\"publishDate\"" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/product> ;
   	 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromProducer{\"producer\"}/Product{\"product\"}" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/vendor> ;
   	 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"vendor\"}/Vendor{\"vendor\"}" ]
   ];
   rr:predicateObjectMap [
   	 rr:predicate 	<http://purl.org/dc/elements/1.1/publisher> ;
   	 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"vendor\"}/Vendor{\"vendor\"}" ]
   ].

if warning because of bind-problems: java.lang.IllegalArgumentException: column=null

In case he can't bind a column, besides a clear warning, it throws an java.lang.IllegalArgumentException exception:

13:53:55,009 [restartedMain] WARN   SparqlMapBuilder$SparqlMapMappingBuilder : Cannot bind col "invalid------Stufen-bis-Toilette-Farbliche-Markierung-erste-u-letzte-Stufe" in mapping http://aksw.org/Projects/SparqlMap/bnodeResolv/cf88bc03-87d8-4e1c-8756-61810e5544dd

java.lang.IllegalArgumentException: column=null
	at org.apache.metamodel.query.SelectItem.<init>(SelectItem.java:171)
	at org.apache.metamodel.query.SelectItem.<init>(SelectItem.java:125)
	at org.apache.metamodel.query.SelectItem.<init>(SelectItem.java:114)
	at org.apache.metamodel.query.Query.select(Query.java:97)
	at org.aksw.sparqlmap.backend.metamodel.translate.MetaModelSelectiveDump.lambda$createQueryUsingTable$35(MetaModelSelectiveDump.java:161)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270)
	at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1548)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.aksw.sparqlmap.backend.metamodel.translate.MetaModelSelectiveDump.createQueryUsingTable(MetaModelSelectiveDump.java:153)
	at org.aksw.sparqlmap.backend.metamodel.translate.MetaModelSelectiveDump.createQuery(MetaModelSelectiveDump.java:125)
	at org.aksw.sparqlmap.backend.metamodel.translate.MetaModelSelectiveDump.<init>(MetaModelSelectiveDump.java:80)
	at org.aksw.sparqlmap.backend.metamodel.translate.MetaModelQueryDump.streamFast(MetaModelQueryDump.java:65)
	at org.aksw.sparqlmap.backend.metamodel.DumperMetaModel.dump(DumperMetaModel.java:159)
	at org.aksw.sparqlmap.backend.metamodel.DumperMetaModel.dump(DumperMetaModel.java:113)
	at org.aksw.sparqlmap.cli.SparqlMapCli.run(SparqlMapCli.java:79)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791)
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781)
	at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
	at org.aksw.sparqlmap.cli.SparqlMapStarter.startSparqlMap(SparqlMapStarter.java:154)
	at org.aksw.sparqlmap.cli.SparqlMapStarter.main(SparqlMapStarter.java:49)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
null

After a fixed the binding-problem, everything is fine.

Columns in logicalTable empty

I use this mapping to generate a rdf graph for an application :

<Offer>
	 a rr:TriplesMap;
	rr:logicalTable [rr:tableName "offer"];
	rr:subjectMap [ rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"publisher\"}/Offer{\"nr\"}"
;
					 rr:class <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/Offer>
 ];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/price> ;
		 rr:objectMap [ rr:column "\"price\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/validFrom> ;
		 rr:objectMap [ rr:column "\"validFrom\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/validTo> ;
		 rr:objectMap [ rr:column "\"validTo\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/deliveryDays> ;
		 rr:objectMap [ rr:column "\"deliveryDays\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/offerWebpage> ;
		 rr:objectMap [ rr:column "\"offerWebpage\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://purl.org/dc/elements/1.1/date> ;
		 rr:objectMap [ rr:column "\"publishDate\"" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/product> ;
		 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromProducer{\"producer\"}/Product{\"product\"}" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/vendor> ;
		 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"vendor\"}/Vendor{\"vendor\"}" ]
	];
	rr:predicateObjectMap [
		 rr:predicate 	<http://purl.org/dc/elements/1.1/publisher> ;
		 rr:objectMap 	[  rr:template "http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/dataFromVendor{\"vendor\"}/Vendor{\"vendor\"}" ]
	].

But the columns in the mapping api request are empty:

 "logicalTable": {
      "path": "/offer",
      "columns": [],
      "primaryKeys": null,
      "fkRelations": [],
      "tablename": "offer",
      "version": null,
      "query": null,
      "prelations": [],
      "name": "offer"
    },;

I am unsure if this is a bug or a mistake in my mapping file

Issue generating mappings with template

Issue using views

An error is being generated when using views:

19:43:18,961 [pool-3-thread-1] ERROR MetaModelSelectiveDump : Error executing:
SELECT subquery."parent", subquery."id" FROM (select id, parent from (select id,
parent from (Select id, Mid(vater, 4, len(vater)) as parent from BioTabelle1) U
NION (Select id, Mid(mutter,4,len(mutter)) as parent from BioTabelle1)) where pa
rent is not null) subquery

It seems that the query is been executed with quotation marks.
I tried to execute the query in the DB console with the quotation, and it also generates an error:

SELECT subquery."parent", subquery."id" ...

The query without quotation executed successfully:

SELECT subquery.parent, subquery.id

Generating Dump based on r2rml config file

Hi,
I am currently unable to generate a very simple mapping using the SPARQLMap.
Can you help me to figure out what I am doing wrong?

I try to run SPARQLMap version 0.7.4 and 0.7.3.
Both versions ignored the mapping and generate the dump based on the direct mapping.

The command that I run was (with '-r2rml.file'):

java -classpath lib* org.aksw.sparqlmap.cli.SparqlMapStarter --action=dump -r2rml.file="mapping_test_2.rml" --ds.type=ACCESS --ds.url="KPS-BIO-A-G 2010 akt.mdb"

I've also tried with '--r2rml.file':

java -classpath lib* org.aksw.sparqlmap.cli.SparqlMapStarter --action=dump --r2rml.file="mapping_test_2.rml" --ds.type=ACCESS --ds.url="KPS-BIO-A-G 2010 akt.mdb"

Feature Request for Conditional Object Map

The following would be a sketch for a new conditionalObjectMap with transformation feature.

The predicate object map could somehow look like the following, maybe some predicates are missing. (The regex might not work.)

<http://www.w3.org/ns/r2rml#predicateObjectMap>
[
    <http://www.w3.org/ns/r2rml#objectMap>
    [
        <http://www.w3.org/ns/r2rml#column> "\"Geb_Datum\""
    ] ;

    <http://www.w3.org/ns/r2rml#conditionalObjectMap>
    [
        <http://www.w3.org/ns/r2rml#condition> "/([0-9]{2})\\.([0-9]{2})\\.([0-9]{4})/" ;
        <http://www.w3.org/ns/r2rml#transformation> [
            <http://www.w3.org/ns/r2rml#regexSubstitution> "/([0-9]{2})\\.([0-9]{2})\\.([0-9]{4})/\\3-\\2-\\1/" ;
            <http://www.w3.org/ns/r2rml#column> "\"Geb_Datum\"" ;
        ]
    ] 
    <http://www.w3.org/ns/r2rml#template> "{Geb_Datum}" ;
    <http://www.w3.org/ns/r2rml#column> "\"Geb_Datum\"" ;
    <http://www.w3.org/ns/r2rml#datatype> <http://www.w3.org/2001/XMLSchema#date>
]

The following sed command would do the transformation

echo "31.10.1517" | sed -n  's/^\([0-9]\{2\}\)\.\([0-9]\{2\}\)\.\([0-9]\{4\}\)$/\3-\2-\1/p'

sparqlmap doesn't stop after it finished a CSV to RDF dump

I ran the following command:

./docker/sparqlmap/sparqlmap/bin/sparqlmap \
  --dsType=CSV \
  --action=dump \
  --r2rmlfile=./data/mapping.ttl \
  --outputFormat=n-triple \
  --dsLocation=./data/le-online-extracted-places.csv >! ./data/rdfdump.nt

The mapping.ttl is:

@prefix dc:         <http://purl.org/dc/elements/1.1/>
@prefix elevator:   <https://github.com/AKSW/leds-asp-f-ontologies/blob/master/ontologies/elevator/ontology.ttl#>
@prefix geo:        <http://www.w3.org/2003/01/geo/>
@prefix inst:       <https://behindertenverband-leipzig.de/gebaeude/> .
@prefix mapping:    <https://behindertenverband-leipzig.de/mapping/> .
@prefix rr:         <http://www.w3.org/ns/r2rml#> .
@prefix schema:     <http://schema.org/> .
@prefix unitmea:    <https://github.com/AKSW/leds-asp-f-ontologies/blob/master/ontologies/unit-and-measurements/ontology.ttl#> .
@prefix placeonto:  <https://behindertenverband-leipzig.de/place-ontology/> .

<https://behindertenverband-leipzig.de/r2rml/gebaeude/>
    # target table
    rr:logicalTable [
        rr:tableName "\"le-online-extracted-places.csv\""
    ] ;
    # subject information
    rr:subjectMap [
        rr:class placeonto:place ;
        rr:template "https://behindertenverband-leipzig.de/gebaeude/{ID}" ;
        rr:termType rr:IRI
    ] ;

    # ID of the building
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"ID\"" ] ;
        rr:predicate placeonto:ID
    ] ;

    # Title of the building
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"Titel\"" ] ;
        rr:predicate dc:title
    ] ;

    # Address
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"Strasse\"" ] ; rr:predicate schema:streetAddress
    ] ;
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"PLZ\"" ] ; rr:predicate schema:postalCode
    ] ;
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"Ort\"" ] ; rr:predicate schema:addressLocality
    ] ;
    # Geolocation
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"Latitude\"" ] ; rr:predicate geo:lat
    ] ;
    rr:predicateObjectMap [
        rr:objectMap [ rr:column "\"Longitude\"" ] ; rr:predicate geo:long
    ] .

[] a rr:TriplesMap;
    rr:logicalTable [
        rr:tableName "\"le-online-extracted-places.csv\""
    ] ;
    rr:subjectMap [
        rr:class elevator:ElevatorCabine ;
        rr:template "https://behindertenverband-leipzig.de/gebaeude/{ID}/elevatorCabine" ;
        rr:termType rr:IRI
    ] ;
    rr:predicateObjectMap [
        rr:predicate elevator:isAvailable;
        rr:objectMap [ rr:column "\"Aufzug-in-der-Einrichtung-vorhanden\"" ]
    ] .

And the CSV file can be found here.

Running sparqlmap inside Docker produces MongoSocketOpenException (besides other warnings)

Part of the log with mentioned exception:

LF4JLogger.java:71] : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
DEBUG 2016-12-06 16:00:29,242 [main][SLF4JLogger.java:56] : Updating cluster description to  {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]
DEBUG 2016-12-06 16:00:29,269 [cluster-ClusterId{value='5846e09d46e0fb0007a8531f', description='null'}-localhost:27017][SLF4JLogger.java:56] : Closing connection connectionId{localValue:1}
INFO  2016-12-06 16:00:29,286 [cluster-ClusterId{value='5846e09d46e0fb0007a8531f', description='null'}-localhost:27017][SLF4JLogger.java:76] : Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
	at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
	at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
	at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
	at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
	... 3 more
DEBUG 2016-12-06 16:00:29,298 [cluster-ClusterId{value='5846e09d46e0fb0007a8531f', description='null'}-localhost:27017][SLF4JLogger.java:56] : Updating cluster description to  {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception=

According Dockerfile is:

FROM java

# folder with sparqlmap files
COPY ./sparqlmap /sparqlmap

# script to call sparqlmap
COPY ./sparqlmap.sh /sparqlmap.sh
RUN chmod +x /sparqlmap.sh

CMD ["./sparqlmap.sh"]

According sparqlmap.sh is:

#!/bin/bash

WORKING_DIR="/tmp/bvl"
SOURCE_CSV="enriched_source.csv"
MAPPING_FILE="mapping.ttl"
RESULT_RDF="rdfdump.nt"

./sparqlmap/bin/sparqlmap \
    --dsType=CSV \
    --action=dump \
    --r2rmlfile=$WORKING_DIR/$MAPPING_FILE \
    --outputFormat=n-triple \
    --dsLocation=$WORKING_DIR/$SOURCE_CSV > $WORKING_DIR/$RESULT_RDF

SPArqlMap on Windows

Has anyone tride SPARQLMap on Windows environment with MSSQL Server.

Cant seem to get it working with the instructions here.

thanks

Error executing SPARQLMap via command line

I am getting the above error when trying to execute SPARQLMap 0.7.5 Snapshot.
Seems that the required parameters are there but I am still receiving the error message.

Command:

java -classpath lib* or
g.aksw.sparqlmap.cli.SparqlMapStarter --action=dump --r2rmlfile="mapping_test_2. ttl" --
ds.type=ACCESS --ds.url="KPS-BIO-A-G 2010 akt.mdb"

Errors:

Error processing command line options: The following options are required: -url,
--ds.url -a, --action

LICENSE is missing

Could you add a LICENSE file, so people know under which conditions they can use the software?

Issue generating dump from Excel file via command line

I am currently experiencing troubles when trying to convert an Excel sheet into RDF via command line,
can you help me with that?

sparqlmap --action=dump --ds.url=".../KPS_Ortstabelle mit Stellen.xlsx" --r2rmlfile="../stellen_mapping2.ttl" --ds.columnNameLineNumber=0 --ds.type=EXCEL

Mapping:

@prefix smap: <http://aksw.org/Projects/SparqlMap/vocab#> .
@prefix r2rml: <http://www.w3.org/ns/r2rml#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix hp: <http://purl.org/voc/hp/> .

<#TableView> r2rml:tableName "\"Tabelle1\"" .

###########################
# Stallen Mapping
###########################

<#VaterTriplesMap>
	r2rml:logicalTable <#TableView>;
	r2rml:subjectMap [ r2rml:template "http://pfarrerbuch.aksw.org/kps/stellen/{\"Ort\"}" 
	r2rml:class hp:Position .
	];

Output:

 Error processing command line options: Was passed main parameter '--ds.columnNameLineNumber=0' but no main parameter was defined in your arg class

When removing parameter --ds.columnNameLineNumber=0

21:14:52,828 [restartedMain] WARN   AbstractApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sparqlMapSetup': Unsatisfied dependency expressed through field 'dc'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'create' defined in class path resource [org/aksw/sparqlmap/common/DataContextFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.metamodel.DataContext]: Factory method 'create' threw exception; nested exception is java.lang.IllegalArgumentException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
21:14:52,850 [restartedMain] ERROR  SpringApplication : Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sparqlMapSetup': Unsatisfied dependency expressed through field 'dc'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'create' defined in class path resource [org/aksw/sparqlmap/common/DataContextFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.metamodel.DataContext]: Factory method 'create' threw exception; nested exception is java.lang.IllegalArgumentException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.aksw.sparqlmap.cli.SparqlMapStarter.startSparqlMap(SparqlMapStarter.java:85)
        at org.aksw.sparqlmap.cli.SparqlMapStarter.main(SparqlMapStarter.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'create' defined in class path resource [org/aksw/sparqlmap/common/DataContextFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.metamodel.DataContext]: Factory method 'create' threw exception; nested exception is java.lang.IllegalArgumentException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1134)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1028)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
        ... 22 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.metamodel.DataContext]: Factory method 'create' threw exception; nested exception is java.lang.IllegalArgumentException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
        ... 34 more
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
        at java.net.URI.create(URI.java:852)
        at org.apache.metamodel.factory.ResourcePropertiesImpl.getUri(ResourcePropertiesImpl.java:56)
        at org.apache.metamodel.factory.FileResourceFactory.accepts(FileResourceFactory.java:28)
        at org.apache.metamodel.factory.ResourceFactoryRegistryImpl.createResource(ResourceFactoryRegistryImpl.java:67)
        at org.aksw.sparqlmap.common.DataContextFactory.getResource(DataContextFactory.java:168)
        at org.aksw.sparqlmap.common.DataContextFactory.create(DataContextFactory.java:112)
        at org.aksw.sparqlmap.common.DataContextFactory$$EnhancerBySpringCGLIB$$875a6da6.CGLIB$create$0(<generated>)
        at org.aksw.sparqlmap.common.DataContextFactory$$EnhancerBySpringCGLIB$$875a6da6$$FastClassBySpringCGLIB$$4a880cd0.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
        at org.aksw.sparqlmap.common.DataContextFactory$$EnhancerBySpringCGLIB$$875a6da6.create(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
        ... 35 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 40: d:/emarx/data/pcp-on-web/KPS_Ortstabelle mit Stellen.xlsx
        at java.net.URI$Parser.fail(URI.java:2848)
        at java.net.URI$Parser.checkChars(URI.java:3021)
        at java.net.URI$Parser.parseHierarchical(URI.java:3105)
        at java.net.URI$Parser.parse(URI.java:3053)
        at java.net.URI.<init>(URI.java:588)
        at java.net.URI.create(URI.java:850)
        ... 50 more

termmaps as a field in subject/predicate/object

If i understand correct, each subject/predicate or object has a seperate termmap.
I think, it would be better, if each subject/predicate or object has this termmap as a field value.
for example:

...
termMap: {...}
}´´´
This way you can see the relations between them 

Query execution fails in BSBM scenario

I have tried SparqlMap for BSBM using my own R2RML mapping. It starts without issues but the querying does not work.

The used dataset is from BSBM. Used mapping is: bsbm.txt

If I use the web interface at http://localhost:8090/ with endpoint at /api/ROOT/sparql/ (I found that it is case sensitive) the following query does not return a single result although it should return a single result (different endpoint implementation works correctly over the same dataset with the same mapping).

PREFIX bsbm-inst: <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/instances/>
PREFIX bsbm: <http://www4.wiwiss.fu-berlin.de/bizer/bsbm/v01/vocabulary/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?producer
WHERE {
    bsbm-inst:Product72 bsbm:producer ?p .
    ?p rdfs:label ?producer .
}

Moreover, if I try to use the BSBM runner, I am not able to run any query. I am using the following command to run it:

java -cp F:/github/bsbm/build/install/bsbm/lib/* benchmark.testdriver.TestDriver -o sparqlmap.xml -runs 1 -w 1 -ucf usecases/explore/sparql.txt http://localhost:8090/api/ROOT/sparql/

Whenever a query is executed, I get the following exception on the endpoint:

18:41:08,952 [qtp128946749-16] ERROR  SparqlMapWebController : Throwable caught:

java.lang.NullPointerException
        at java.util.Objects.requireNonNull(Unknown Source)
        at java.util.Arrays$ArrayList.<init>(Unknown Source)
        at java.util.Arrays.asList(Unknown Source)
        at org.aksw.sparqlmap.web.SparqlMapWebController.executeSparqlQuery(Spar
qlMapWebController.java:86)
        at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvok
e(InvocableHandlerMethod.java:220)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeF
orRequest(InvocableHandlerMethod.java:134)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocabl
eHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingH
andlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingH
andlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapt
er.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatch
erServlet.java:963)
        at org.springframework.web.servlet.DispatcherServlet.doService(Dispatche
rServlet.java:897)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(Frame
workServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServl
et.java:861)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkSer
vlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845
)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1712)
        at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(We
bSocketUpgradeFilter.java:247)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.do
FilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilter
Internal(WebRequestTraceFilter.java:105)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(
RequestContextFilter.java:99)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInter
nal(HttpPutFormContentFilter.java:89)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInterna
l(HiddenHttpMethodFilter.java:77)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterIntern
al(CharacterEncodingFilter.java:197)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilter
Internal(MetricsFilter.java:106)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:107)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1699)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:582)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.jav
a:548)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandl
er.java:226)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1180)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
512)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandle
r.java:185)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1112)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:134)
        at org.eclipse.jetty.server.Server.handle(Server.java:534)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:251)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(Abstra
ctConnection.java:273)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoin
t.java:93)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeP
roduceConsume(ExecuteProduceConsume.java:303)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceC
onsume(ExecuteProduceConsume.java:148)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(Exec
uteProduceConsume.java:136)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:671)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool
.java:589)
        at java.lang.Thread.run(Unknown Source)

Interestingly enough, if I try the query in the browser, it executes the query (although it usually does not return anything).

If I am correct, the SparqlMap was evaluated using BSBM. Can you please provide me information how to make it working?

generating DataCube Observations from CSV File

I am planning to generate a Mapping from CSV to RDF-DataCube with e.g. r2rml.
The CSV File looks like this (downloaded from deStatis Genesis Database)
https://gist.github.com/FTeichmann/048b96628566f5076c2a4ac92c4c59d2
with the desired RDF output looking like this:
https://gist.github.com/FTeichmann/373cb8f9020086c35e96cd3b36dcf124

The Main Problems are:

  • selecting the Sub-Table containing the statistic
  • Generating a unique (maybe random) Identifier for every observation cell
  • attaching the correct Dimensions values to that Identifier:
    <http://example.org/Patente-observation_5c5b9d8> <http://example.org/Jahr> 2010 ; <http://example.org/Land> "Sachsen-Anhalt" ; <http://example.org/Patente> "335" ; qb:dataSet <http://example.org/Patente> ; a qb:observation .

Faulty SPARQL endpoint (/sparql and /context is missing)

Starting sparqlmap with the following parameters to utilize web mode

./sparqlmap.sh --action=web 
    --ds.type=JDBC 
    --ds.url="jdbc:mysql://db:3306/sparqlmap" 
    --ds.username=root 
    --ds.password=Pass123

and after calling localhost:8090 in the browser, it shows me the YASGUI, but executing SPARQL queries leads to the following error message:

{"timestamp":1490628096176,"status":404,"error":"Not Found","message":"Not Found","path":"/sparql"}

After clicking execute again, browser console shows:

jquery.min.js:4 GET http://localhost:8001/context 404 (Not Found)
yasgui.bundled.js:56493 POST http://localhost:8001/sparql 404 (Not Found)

Issue when generating the dump using the "--r2rmlfile" pragma

The exception bellow is shown after running the dump action using the "--r2rmlfile" pragma.

_

16:57:35,485 [restartedMain] WARN AbstractApplicationContext : Exception encou
ntered during context initialization - cancelling refresh attempt: org.springfra
mework.beans.factory.UnsatisfiedDependencyException: Error creating bean with na
me 'sparqlMapCli': Unsatisfied dependency expressed through field 'sm'; nested e
xception is org.springframework.beans.factory.BeanCreationException: Error creat
ing bean with name 'configSparqlMap' defined in org.aksw.sparqlmap.common.Sparql
MapSetup: Bean instantiation via factory method failed; nested exception is org.
springframework.beans.BeanInstantiationException: Failed to instantiate [org.aks
w.sparqlmap.core.SparqlMap]: Factory method 'configSparqlMap' threw exception; n
ested exception is org.apache.jena.riot.RiotException: Failed to determine the c
ontent type: (URI=mapping_test_2.rml : stream=null)
16:57:35,593 [restartedMain] ERROR SpringApplication : Application startup fail
ed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating
bean with name 'sparqlMapCli': Unsatisfied dependency expressed through field '
sm'; nested exception is org.springframework.beans.factory.BeanCreationException
: Error creating bean with name 'configSparqlMap' defined in org.aksw.sparqlmap.
common.SparqlMapSetup: Bean instantiation via factory method failed; nested exce
ption is org.springframework.beans.BeanInstantiationException: Failed to instant
iate [org.aksw.sparqlmap.core.SparqlMap]: Factory method 'configSparqlMap' threw
exception; nested exception is org.apache.jena.riot.RiotException: Failed to de
termine the content type: (URI=mapping_test_2.rml : stream=null)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP
ostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.j
ava:588)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject
(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP
ostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java
:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
ject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
y.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe
an(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
preInstantiateSingletons(DefaultListableBeanFactory.java:759)
at org.springframework.context.support.AbstractApplicationContext.finish
BeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:542)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.
java:761)
at org.springframework.boot.SpringApplication.refreshContext(SpringAppli
cation.java:371)
at org.springframework.boot.SpringApplication.run(SpringApplication.java
:315)
at org.aksw.sparqlmap.cli.SparqlMapStarter.main(SparqlMapStarter.java:25
)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.devtools.restart.RestartLauncher.run(Restart
Launcher.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creati
ng bean with name 'configSparqlMap' defined in org.aksw.sparqlmap.common.SparqlM
apSetup: Bean instantiation via factory method failed; nested exception is org.s
pringframework.beans.BeanInstantiationException: Failed to instantiate [org.aksw
.sparqlmap.core.SparqlMap]: Factory method 'configSparqlMap' threw exception; ne
sted exception is org.apache.jena.riot.RiotException: Failed to determine the co
ntent type: (URI=mapping_test_2.rml : stream=null)
at org.springframework.beans.factory.support.ConstructorResolver.instant
iateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:11
34)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1028)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
ject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
y.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe
an(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolve
Candidate(DependencyDescriptor.java:207)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
doResolveDependency(DefaultListableBeanFactory.java:1136)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
resolveDependency(DefaultListableBeanFactory.java:1064)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP
ostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.j
ava:585)
... 21 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to insta
ntiate [org.aksw.sparqlmap.core.SparqlMap]: Factory method 'configSparqlMap' thr
ew exception; nested exception is org.apache.jena.riot.RiotException: Failed to
determine the content type: (URI=mapping_test_2.rml : stream=null)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy
.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instant
iateUsingFactoryMethod(ConstructorResolver.java:588)
... 33 more
Caused by: org.apache.jena.riot.RiotException: Failed to determine the content t
ype: (URI=mapping_test_2.rml : stream=null)
at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:854)
at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:667)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:212)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:105)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:96)
at org.apache.jena.riot.RDFDataMgr.loadModel(RDFDataMgr.java:325)
at org.aksw.sparqlmap.core.SparqlMapBuilder$SparqlMapMappingBuilder.mapp
edBy(SparqlMapBuilder.java:110)
at org.aksw.sparqlmap.common.SparqlMapSetup.configSparqlMap(SparqlMapSet
up.java:59)
at org.aksw.sparqlmap.common.SparqlMapSetup$$EnhancerBySpringCGLIB$$e0a5
e8e1.CGLIB$configSparqlMap$0()
at org.aksw.sparqlmap.common.SparqlMapSetup$$EnhancerBySpringCGLIB$$e0a5
e8e1$$FastClassBySpringCGLIB$$565f69db.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.j
ava:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$Bea
nMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
at org.aksw.sparqlmap.common.SparqlMapSetup$$EnhancerBySpringCGLIB$$e0a5
e8e1.configSparqlMap()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy
.instantiate(SimpleInstantiationStrategy.java:162)
... 34 more

_

Using "--format=N-TRIPLES" leads to "Error processing command line options: Unknown RDF Format: N-TRIPLES"

I used the latest available release inside a Docker container:

http://github.com/tomatophantastico/sparqlmap/releases/download/v0.7.5-SNAPSHOT-2/sparqlmap-client-0.7.5-SNAPSHOT.zip

Sparqlmap is called with the following command:

# variables
SCRIPT=`realpath $0`
WORK_DIR=`dirname $SCRIPT`
SPARQLMAP_VERSION=0.7.5
MAPPING_FILE=r2rml-mapping.ttl
INPUT_FILE=input.csv
OUTPUT_FILE=output.nt
CSV_SEPARATOR=,

rm $WORK_DIR/data/sparqlmap/output/$OUTPUT_FILE >> /dev/null

# call sparqlmap
docker run --rm \
    -v $WORK_DIR/data/sparqlmap/input/$MAPPING_FILE:/tmp/$MAPPING_FILE \
    -v $WORK_DIR/data/sparqlmap/input/$INPUT_FILE:/tmp/$INPUT_FILE \
    sparqlmap:$SPARQLMAP_VERSION \
    /usr/share/sparqlmap/bin/sparqlmap \
    --action=dump \
    --ds.url=/tmp/$INPUT_FILE \
    --ds.type=CSV \
    --r2rmlfile=/tmp/$MAPPING_FILE \
    --format=N-TRIPLES
    --ds.separatorChar=$CSV_SEPARATOR \
    1>> $WORK_DIR/data/sparqlmap/output/$OUTPUT_FILE \
    2>> $WORK_DIR/data/sparqlmap/logs/sparqlmap.log

Conditional Mappings for SubjectMaps

It will be highly appreciated if we have a conditional mapping for r2rml:subjectMap.
In case there is, it might have some bug in SPARQLMap 0.7.5 SNAPSHOT 2.

The problem is that although I can avoid the generation of undesirable object, there is not too much to do to avoid generating the subjects.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.