-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
split cityData_server_scala into 3 projects: core, Jena, BigData.
Now cityData_server_scala_jena/ is the SBT project to run.
- Loading branch information
Showing
34 changed files
with
655 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
This is a project with BigData(R) , now named BlazeGraph, SPARQL database, used as embedded API. | ||
|
||
Due to a missing implementation in Banana-RDF, it is not yet working . |
37 changes: 37 additions & 0 deletions
37
cityData_server_scala_bigdata/app/controllers/ApplicationBigData.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package controllers | ||
|
||
import play.api._ | ||
import play.api.mvc._ | ||
import play.api.mvc.Request | ||
import play.api.libs.iteratee.Enumerator | ||
import play.api.libs.iteratee.Iteratee | ||
import scala.concurrent.Future | ||
import scala.concurrent.ExecutionContext.Implicits.global | ||
import models.REST_SPARQL_bridge | ||
import org.w3.banana.io.JsonLd | ||
import models.REST_SPARQL_bridge_Jena | ||
import models.REST_SPARQL_bridge_BigData | ||
|
||
object ApplicationBigData extends Controller with REST_SPARQL_bridge_BigData { | ||
|
||
/** | ||
* a simple wrapper with simple URL's for a SPARQL database. | ||
* For example for dbPedia it would accept URI's like: | ||
* /baseURL/cities/fra/01600 | ||
* and maybe later: | ||
* /baseURL/Settlement?country=France&postalCode=01600 | ||
* In fact we are only interested in a small number of classes and properties, | ||
* but it would be nice to have something as generic as possible. | ||
* | ||
* The entry point starts with a country and a postal code. | ||
* The process retrieves corresponding triples from the following sources: | ||
* - local (embedded) dbPedia instance | ||
* - hosted dbPedia instance at endpoint http://dbpedia.org/sparql - TODO | ||
*/ | ||
def displayCity(path: String) = { | ||
Action { implicit request => | ||
Ok(getJSONLD(request)). | ||
as("application/ld+json; charset=utf-8") | ||
} | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
cityData_server_scala_bigdata/app/models/REST_SPARQL_bridge_BigData.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package models | ||
|
||
import play.api.mvc.Request | ||
import play.api.mvc.AnyContent | ||
import org.w3.banana.jena.Jena | ||
import com.hp.hpl.jena.query.Dataset | ||
import org.w3.banana.sesame.Sesame | ||
import org.openrdf.repository.RepositoryConnection | ||
|
||
trait REST_SPARQL_bridge_BigData extends REST_SPARQL_bridge[Sesame, RepositoryConnection] | ||
with SPARQLDatabaseBigData |
31 changes: 31 additions & 0 deletions
31
cityData_server_scala_bigdata/app/models/SPARQLDatabaseBigData.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package models | ||
|
||
import org.w3.banana.SparqlOpsModule | ||
import org.w3.banana.sesame.Sesame | ||
import org.w3.banana.sesame.SesameModule | ||
import play.api.Logger | ||
import org.w3.banana.io.RDFWriter | ||
import org.w3.banana.io.JsonLdExpanded | ||
import org.w3.banana.io.JsonLdFlattened | ||
import com.bigdata.rdf.sail.remote.BigdataSailRemoteRepository | ||
import com.bigdata.rdf.sail.{BigdataSailTupleQuery, BigdataSailRepositoryConnection, BigdataSailRepository, BigdataSail} | ||
import java.io.File | ||
import java.util.Properties | ||
import org.apache.commons.io.FileUtils | ||
import scala.util.Try | ||
import org.openrdf.query.{TupleQueryResult, QueryLanguage} | ||
import org.openrdf.model.impl.URIImpl | ||
import org.openrdf.repository.RepositoryConnection | ||
import org.openrdf.query.Dataset | ||
|
||
trait SPARQLDatabaseBigData extends SPARQLDatabaseTrait[Sesame, RepositoryConnection] with SesameModule { | ||
type DATASET = | ||
RepositoryConnection | ||
override lazy val dataset: DATASET = { | ||
val db = BigData() // initializing the database | ||
// TODO expose write Connection | ||
val rc = db.readConnection | ||
Logger.info(s"SPARQLDatabaseTrait dataset created $rc") | ||
rc | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
sbt.version=0.13.8 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
organization := "pixelhumain" | ||
|
||
name := "semantic_rest_bigdata" | ||
|
||
version := "1.0-SNAPSHOT" | ||
|
||
lazy val semantic_rest_core = RootProject(file("../semantic_rest_core")) | ||
|
||
lazy val semantic_rest = (project in file(".")) | ||
.enablePlugins(PlayScala) | ||
.dependsOn(semantic_rest_core) | ||
|
||
scalaVersion := "2.11.6" | ||
|
||
|
||
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % Test | ||
|
||
javacOptions ++= Seq("-source","1.7", "-target","1.7") | ||
|
||
resolvers += Resolver.url("inthenow-releases", url("http://dl.bintray.com/inthenow/releases"))(Resolver.ivyStylePatterns) | ||
|
||
// banana-rdf still has some dependencies that are not yet on Maven Central | ||
resolvers += Resolver.file("Local repo", file(System.getProperty("user.home") + "/.ivy2/local"))(Resolver.ivyStylePatterns) | ||
|
||
|
||
// BigData specific: the project is split in 3 : the implementation independent core, the Jena TDB project, the BD project | ||
libraryDependencies += "org.w3" %% "banana-sesame" % "0.8.1" | ||
|
||
resolvers += "apache-repo-releases" at "http://repository.apache.org/content/repositories/releases/" | ||
|
||
// For BigData database | ||
resolvers += "Bigdata releases" at "http://systap.com/maven/releases/" | ||
|
||
// For BigData | ||
resolvers += "nxparser-repo" at "http://nxparser.googlecode.com/svn/repository/" | ||
|
||
libraryDependencies += "com.bigdata" % "bigdata" % "1.5.1" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Routes | ||
# This file defines all application routes (Higher priority routes first) | ||
# ~~~~ | ||
|
||
GET /cities/*path controllers.ApplicationBigData.displayCity(path: String) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// Comment to get more information during initialization | ||
logLevel := Level.Warn | ||
|
||
// The Typesafe repository | ||
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" | ||
|
||
// Use the Play sbt plugin for Play projects | ||
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Introduction | ||
Here is an abstract web application with Play! framework that wraps a SPARQL database. | ||
It is a database independent source code, thanks to Banana-RDF. | ||
|
||
It is used by [../cityData\_server\_scala\_jena](../cityData_server_scala_jena) . |
37 changes: 37 additions & 0 deletions
37
cityData_server_scala_core/app/controllers/AbstractApplication.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package controllers | ||
|
||
import play.api._ | ||
import play.api.mvc._ | ||
import play.api.mvc.Request | ||
import play.api.libs.iteratee.Enumerator | ||
import play.api.libs.iteratee.Iteratee | ||
import scala.concurrent.Future | ||
import scala.concurrent.ExecutionContext.Implicits.global | ||
import models.REST_SPARQL_bridge | ||
import org.w3.banana.io.JsonLd | ||
import org.w3.banana.RDF | ||
|
||
/** independent of a concrete SPARQL database, thanks to Banana-RDF framework */ | ||
trait AbstractApplication[Rdf <: RDF, DATASET] extends Controller with REST_SPARQL_bridge[Rdf, DATASET] { | ||
|
||
/** | ||
* a simple wrapper with simple URL's for a SPARQL database. | ||
* For example for dbPedia it would accept URI's like: | ||
* /baseURL/cities/fra/01600 | ||
* and maybe later: | ||
* /baseURL/Settlement?country=France&postalCode=01600 | ||
* In fact we are only interested in a small number of classes and properties, | ||
* but it would be nice to have something as generic as possible. | ||
* | ||
* The entry point starts with a country and a postal code. | ||
* The process retrieves corresponding triples from the following sources: | ||
* - local (embedded) dbPedia instance | ||
* - hosted dbPedia instance at endpoint http://dbpedia.org/sparql - TODO | ||
*/ | ||
def displayCity(path: String) = { | ||
Action { implicit request => | ||
Ok(getJSONLD(request)). | ||
as("application/ld+json; charset=utf-8") | ||
} | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
cityData_server_scala_core/app/models/RDFStoreLocalProvider.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package models | ||
|
||
import scala.util.Try | ||
import org.w3.banana.RDF | ||
import org.w3.banana.RDFOpsModule | ||
import org.w3.banana.RDFStore | ||
import org.w3.banana.SparqlOpsModule | ||
|
||
/** | ||
* abstract RDFStore Local Provider | ||
* NOTE: same design pattern as for XXXModule in Banana | ||
*/ | ||
trait RDFStoreLocalProvider[Rdf <: RDF, DATASET] extends RDFOpsModule with SparqlOpsModule { | ||
implicit val rdfStore: RDFStore[Rdf, Try, DATASET] | ||
val dataset: DATASET | ||
} |
79 changes: 79 additions & 0 deletions
79
cityData_server_scala_core/app/models/REST_SPARQL_bridge.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package models | ||
|
||
import play.api.mvc.Request | ||
import play.api.mvc.AnyContent | ||
import org.w3.banana.RDF | ||
|
||
trait REST_SPARQL_bridge[Rdf <: RDF, DATASET] extends SPARQLDatabaseTrait[Rdf, DATASET] { | ||
|
||
val dbo = "http://dbpedia.org/ontology/" | ||
val dbp = "http://dbpedia.org/resource/" | ||
|
||
val queryBeginning = """ | ||
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> | ||
PREFIX dbpedia: <http://dbpedia.org/resource/> | ||
CONSTRUCT { | ||
?CITY ?P ?O . | ||
} | ||
WHERE { | ||
?CITY a dbpedia-owl:Settlement ; | ||
""" | ||
val queryEnding = """ | ||
?P ?O . | ||
} | ||
""" | ||
|
||
/** | ||
* For URI's like | ||
* /baseURL/cities/fra/01600 | ||
* | ||
* create SPARQL query: <pre> | ||
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> | ||
PREFIX dbpedia: <http://dbpedia.org/resource/> | ||
CONSTRUCT { | ||
?CITY ?P ?O . | ||
} | ||
WHERE { | ||
?CITY a dbpedia-owl:Settlement ; | ||
dbpedia-owl:country dbpedia:France ; | ||
dbpedia-owl:postalCode 01600 ; | ||
?P ?O . | ||
} | ||
</pre> | ||
*/ | ||
def getJSONLD(request: Request[AnyContent]): String = { | ||
println("getJSONLD: " + request) | ||
val conf = RequestRDFConfig(Seq( | ||
new RequestRDFPathName(dbo + "country") { | ||
val iso3166ToDBPedia = Map( | ||
"fra" -> (dbp + "France")) | ||
override def map(value: String): String = wrapAsURI(iso3166ToDBPedia.get(value).get) | ||
}, | ||
RequestRDFPathName(dbo + "postalCode"))) | ||
runQuery(makeSPARQL(request, conf)) | ||
} | ||
|
||
private def makeSPARQL(request: Request[AnyContent], conf: RequestRDFConfig): String = { | ||
val path = request.path | ||
val elems = path.split("/").drop(2) | ||
// elems contains e.g. "fr", "01600" | ||
val propsAndValues = conf.mappings.zip(elems) | ||
val criteria: Seq[String] = propsAndValues.map { | ||
x => | ||
wrapAsURI(x._1.uri) + " " + x._1.map(x._2) + " ;\n" | ||
} | ||
val queryString = queryBeginning + criteria.mkString + queryEnding | ||
println("makeSPARQL: " + queryString) | ||
queryString | ||
} | ||
|
||
def wrapAsURI(uri: String) = s"<$uri>" | ||
def wrapAsString(string: String) = s""""${string}"""" | ||
|
||
case class RequestRDFPathName(uri: String) { | ||
def map(value: String): String = wrapAsString(value) | ||
} | ||
case class RequestRDFConfig(mappings: Seq[RequestRDFPathName]) | ||
|
||
} |
29 changes: 29 additions & 0 deletions
29
cityData_server_scala_core/app/models/SPARQLDatabaseTrait.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package models | ||
|
||
import org.w3.banana.SparqlOpsModule | ||
import org.w3.banana.RDF | ||
import org.w3.banana.JsonLDWriterModule | ||
|
||
trait SPARQLDatabaseTrait[Rdf <: RDF, DATASET] | ||
extends RDFStoreLocalProvider[Rdf, DATASET] | ||
with JsonLDWriterModule { | ||
import ops._ | ||
import rdfStore.transactorSyntax._ | ||
import rdfStore.graphStoreSyntax._ | ||
import sparqlOps._ | ||
import rdfStore.sparqlEngineSyntax._ | ||
|
||
def runQuery(queryString: String): String = { | ||
val query =parseConstruct(queryString) | ||
|
||
val res = dataset.r({ | ||
val result = for { | ||
query <- parseConstruct(queryString) | ||
graph <- dataset.executeConstruct(query, Map()) | ||
} yield graph | ||
result | ||
}) | ||
val graph = res.get.get | ||
jsonldCompactedWriter.asString(graph, "" ).get | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
sbt.version=0.13.8 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
organization := "pixelhumain" | ||
|
||
name := "semantic_rest_core" | ||
|
||
version := "1.0-SNAPSHOT" | ||
|
||
lazy val semantic_rest = (project in file(".")) | ||
.enablePlugins(PlayScala) | ||
|
||
scalaVersion := "2.11.6" | ||
|
||
|
||
libraryDependencies += "org.w3" %% "banana-rdf" % "0.8.1" | ||
|
||
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % Test | ||
|
||
javacOptions ++= Seq("-source","1.7", "-target","1.7") | ||
|
||
resolvers += Resolver.url("inthenow-releases", url("http://dl.bintray.com/inthenow/releases"))(Resolver.ivyStylePatterns) | ||
|
||
// banana-rdf still has some dependencies that are not yet on Maven Central | ||
resolvers += Resolver.file("Local repo", file(System.getProperty("user.home") + "/.ivy2/local"))(Resolver.ivyStylePatterns) | ||
|
||
|
Oops, something went wrong.