Skip to content
Snippets Groups Projects
Commit 48d5112d authored by Alvaro Graves's avatar Alvaro Graves
Browse files

LODSPeaKr works with sqlite3 instead of using ARC's endpoint

Removed functions related to extract  metadata from a SPARQL endpoint,
it stores it on the sqlite database. This will ease the installation
process
parent 1c2f1fdf
No related branches found
No related tags found
No related merge requests found
<?
class MetaDb extends SQLite3{
private $dbLocation;
public function __construct($location){
$this->dbLocation = $location;
}
public function query($q){
global $conf;
try{
$db = new PDO('sqlite:'.$this->dbLocation);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$results = array();
foreach($db->query($q) as $entry) {
array_push($results, $entry);
}
$db = NULL;
}catch(PDOException $e){
print 'Exception query : '.$e->getMessage()."\n".$this->dbLocation."\n";
exit(10);
}
return $results;
}
public function write($q){
global $conf;
try{
$db = new PDO('sqlite:'.$this->dbLocation);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$results = $db->exec($q);
$db = NULL;
}catch(PDOException $e){
print 'Exception exec: '.$e->getMessage()."\n\n";
exit(10);
}
return $results;
}
}
?>
......@@ -28,70 +28,51 @@ class Queries{
return NULL;
}
public static function getMetaData($uri, $format, $e){
global $conf;
$named_graph = $conf['metaendpoint']['config']['named_graph'];
$q = <<<QUERY
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT ?page ?uri ?format WHERE{
GRAPH <$named_graph>{
?s ?p ?o . #Stupid dummy triple to make it work with ARC2
OPTIONAL{
?page foaf:primaryTopic <$uri> ;
dcterms:format "$format" .
} .
OPTIONAL{
<$uri> foaf:primaryTopic ?uri;
dcterms:format ?format
} .
}
}LIMIT 1
public static function getMetadata($uri, $format, $e){
global $conf;
$q = <<<QUERY
SELECT uri, doc, format FROM document WHERE
(uri = "$uri" AND format = "$format") OR doc = "$uri"
LIMIT 1
QUERY;
$r = $e->query($q);
if(sizeof($r['results']['bindings'])>0){
$u = (isset($r['results']['bindings'][0]['uri']))?$r['results']['bindings'][0]['uri']['value']:NULL;
$p = (isset($r['results']['bindings'][0]['page']))?$r['results']['bindings'][0]['page']['value']:NULL;
$f = (isset($r['results']['bindings'][0]['format']))?$r['results']['bindings'][0]['format']['value']:NULL;
return array($u, $p, $f);
}
return NULL;
}
$r = $e->query($q);
if(sizeof($r) > 0){
$u = $r[0]['uri'];
$p = $r[0]['doc'];
$f = $r[0]['format'];
return array($u, $p, $f);
}else{
return NULL;
}
}
public static function createPage($uri, $contentType, $e){
global $conf;
$ext = 'html';
$named_graph = $conf['metaendpoint']['config']['named_graph'];
//TODO: More flexible page creation method
$inserts = "";
foreach($conf['http_accept'] as $extension => $f){
$page = $uri.".".$extension;
foreach($f as $v){
if($contentType == $v){
$returnPage = $uri.".".$extension;
}
$inserts .= "<$page> foaf:primaryTopic <$uri>;
dcterms:format '".$v."'.";
if($v == $contentType){
$ext = $extension;
}
}
}
$q = <<<QUERY
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
INSERT INTO <$named_graph> {
$inserts
}
public static function createPage($uri, $contentType, $e){
global $conf;
$ext = 'html';
$inserts = "";
foreach($conf['http_accept'] as $extension => $f){
$page = $uri.".".$extension;
foreach($f as $v){
if($contentType == $v){
$returnPage = $uri.".".$extension;
}
if($inserts != ""){
$inserts .= "UNION ";
}
$inserts .= "SELECT '$uri', '$page', '$v' \n";
if($v == $contentType){
$ext = $extension;
}
}
}
$q = <<<QUERY
INSERT INTO document (uri, doc, format) $inserts
QUERY;
$r = $e->queryPost($q);
if($r == null){
return null;
}
return $returnPage;
}
$r = $e->write($q);
return $returnPage;
}
}
?>
?>
......@@ -7,11 +7,7 @@ $conf['endpoint']['config']['output'] = $conf['endpoint']['select']['output'];
$conf['endpoint']['config']['named_graph'] = '';
$conf['endpoint']['config']['show_inline'] = 0;
$conf['metaendpoint']['select']['output'] = 'json';
$conf['metaendpoint']['describe']['output'] = 'rdf';
$conf['metaendpoint']['config']['output'] = $conf['metaendpoint']['select']['output'];
$conf['metaendpoint']['config']['show_inline'] = 0;
$conf['metaendpoint']['config']['named_graph'] = 'http://lodspeakr.org/metadata';
$conf['metadata']['db']['location'] = 'meta/db.sqlite';
$conf['ns']['rdf'] = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
$conf['ns']['rdfs'] = 'http://www.w3.org/2000/01/rdf-schema#';
......
<?php
/* ARC2 static class inclusion */
include_once('lib/arc2/ARC2.php');
include_once('settings.inc.php');
set_time_limit(0);
/* MySQL and endpoint configuration */
$config = array(
/* db */
'db_host' => $conf['metaendpoint']['db']['host'],
'db_name' => $conf['metaendpoint']['db']['dbname'],
'db_user' => $conf['metaendpoint']['db']['user'],
'db_pwd' => $conf['metaendpoint']['db']['pass'],
/* store name */
'store_name' => 'my_endpoint_store',
/* endpoint */
'endpoint_features' => array(
'select', 'construct', 'ask', 'describe',
'insert','load', 'delete',
'dump' /* dump is a special command for streaming SPOG export */
),
'endpoint_timeout' => 60, /* not implemented in ARC2 preview */
'endpoint_read_key' => '',
'endpoint_write_key' => $conf['metaendpoint']['config']['key'],
'endpoint_max_limit' => 0
);
/* instantiation */
$ep = ARC2::getStoreEndpoint($config);
if (!$ep->isSetUp()) {
$ep->setUp(); /* create MySQL tables */
}
/* request handling */
$ep->go();
?>
......@@ -8,11 +8,11 @@ include_once('common.inc.php');
include_once('classes/Utils.php');
include_once('classes/Queries.php');
include_once('classes/Endpoint.php');
include_once('classes/MetaDb.php');
$endpoint = new Endpoint($conf['endpoint']['host'], $conf['endpoint']['config']);
$metaEndpoint = new Endpoint($conf['metaendpoint']['host'], $conf['metaendpoint']['config']);
$metaDb = new MetaDb($conf['metadata']['db']['location']);
$uri = $conf['basedir'].$_GET['q'];
if($uri == $conf['basedir']){
......@@ -26,29 +26,29 @@ $extension = Utils::getExtension($acceptContentType);
if($acceptContentType == NULL){
Utils::send406($uri);
}
$pair = Queries::getMetadata($uri, $acceptContentType, $metaEndpoint);
if($pair == NULL){ // Original URI is not in metadata
if(Queries::uriExist($uri, $endpoint)){
$page = Queries::createPage($uri, $acceptContentType, $metaEndpoint);
if($page == null){
Utils::send500(null);
}
Utils::send303($page, $acceptContentType);
}else{
Utils::send404($uri);
}
}
list($res, $page, $format) = $pair;
$pair = Queries::getMetadata($uri, $acceptContentType, $metaDb);
if($page != NULL && $res == NULL){
Utils::send303($page, $acceptContentType);
}
if($pair == NULL){ // Original URI is not in metadata
if(Queries::uriExist($uri, $endpoint)){
$page = Queries::createPage($uri, $acceptContentType, $metaDb);
if($page == NULL){
Utils::send500(NULL);
}
Utils::send303($page, $acceptContentType);
}else{
Utils::send404($uri);
}
}
list($res, $page, $format) = $pair;
//If resource is not the page, send a 303 to the document
if($res == $uri){
Utils::send303($page, $acceptContentType);
}
if($res != NULL && $page == NULL){ // Original URI is a page
$uri = $res;
$curieType = Utils::uri2curie(Queries::getClass($uri, $endpoint));
/*Redefine Content type based on the
* dcterms:format for this page
*/
......@@ -62,9 +62,9 @@ if($res != NULL && $page == NULL){ // Original URI is a page
$modelFile = $conf['model']['directory'].$conf['model']['default'].$conf['model']['extension'].".".$extension;
$viewFile = $conf['view']['directory'].$conf['view']['default'].$conf['view']['extension'].".".$extension;
}
$query = file_get_contents($modelFile);
$query = preg_replace("|".$conf['resource']['url_delimiter']."|", "<".$uri.">", $query);
header('Content-Type: '.$acceptContentType);
if(preg_match("/describe/i", $query)){
$results = $endpoint->query($query, $conf['endpoint']['describe']['output']);
......@@ -97,6 +97,6 @@ if($res != NULL && $page == NULL){ // Original URI is a page
Utils::showView($uri, $results, $viewFile);
exit(0);
}
//}
?>
......@@ -4,13 +4,6 @@ root_htaccess="root.htaccess"
parent_htaccess="../.htaccess"
settings_file="settings.inc.php"
mysql_port="3306"
mysql_host="localhost"
mysql_dbname="lodspeakr"
mysql_user="root"
mysql_pass=""
sparql_key=$RANDOM
basedir="http://localhost/my/data/"
lodspeakrdir="lodspeakr"
ns=$basedir
......@@ -56,70 +49,12 @@ do
endpoint=$aux_endpoint
fi
echo "==Internal SPARQL endpoint=="
echo "lodspeakr read -u 1s from your SPARQL endpoint, however it needs to add metadata to its own SPARQL endpoint"
echo ""
echo "Ok, to create lodspeakr' endpoint I need a MySQL database"
echo -n "What is host where the database server is located (default $mysql_host)? "
read -u 1 aux_mysql_host
echo ""
if [ "$aux_mysql_host" != "" ]
then
mysql_host=$aux_mysql_host
fi
echo -n "What is port the database is listening to (default $mysql_port)? "
read -u 1 aux_mysql_port
echo ""
if [ "$aux_mysql_port" != "" ]
then
mysql_port=$aux_mysql_port
fi
echo -n "What is name of the database (default $mysql_dbname)? "
read -u 1 aux_mysql_dbname
echo ""
if [ "$aux_mysql_dbname" != "" ]
then
mysql_dbname=$aux_mysql_dbname
fi
echo -n "What is user for this database (default $mysql_user)? "
read -u 1 mysql_user
echo ""
if [ "$aux_mysql_user" != "" ]
then
mysql_user=$aux_mysql_user
fi
echo -n "What is password for $mysql_user? "
read -u 1 mysql_pass
echo ""
if [ "$aux_mysql_pass" != "" ]
then
mysql_pass=$aux_mysql_pass
fi
echo -n "Create a key for lodspeakr' SPARQL endpoint (default: $sparql_key): "
read -u 1 aux_sparql_key
echo ""
if [ "$aux_sparql_key" != "" ]
then
sparql_key=$aux_sparql_key
fi
echo "==Configuration=="
echo "Ok, so I have the following configuration:"
echo "Base URL is $basedir"
echo "lodspeakr is installed at $basedir$lodspeakrdir"
echo "The local namespace is $ns"
echo "Your SPARQL endpoint is located at $endpoint"
echo "For lodspeakr internal sparql endpoint the configuration is as follows:"
echo "Host: $mysql_host"
echo "Database name: $mysql_dbname"
echo "Port: $mysql_port"
echo "User: $mysql_user"
echo "Pass: $mysql_pass"
echo "Key for the SPARQL key: $sparql_key"
echo -n "Is everything ok (y/n)?"
......@@ -141,16 +76,6 @@ done
\$conf['endpoint']['host'] = '$endpoint';
\$conf['basedir'] = '$basedir';
\$conf['metaendpoint']['host'] = '$basedir$lodspeakrdir/endpoint.php';
\$conf['metaendpoint']['config']['key'] = '$sparql_key';
\$conf['metaendpoint']['config']['named_graph'] = 'http://lodspeakr.org/metadata';
\$conf['metaendpoint']['db']['host'] = '$mysql_host';
\$conf['metaendpoint']['db']['port'] = '$mysql_port';
\$conf['metaendpoint']['db']['dbname'] = '$mysql_dbname';
\$conf['metaendpoint']['db']['user'] = '$mysql_user';
\$conf['metaendpoint']['db']['pass'] = '$mysql_pass';
\$conf['metaendpoint']['config']['key'] = '$sparql_key';
\$conf['ns']['local'] = '$ns';
?>"
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment