Skip to content
Snippets Groups Projects
Commit 78004056 authored by alvaro's avatar alvaro
Browse files

Added sparql filter module that allow users to filter by a random query rather...

Added sparql filter module that allow users to filter by a random query rather than a type to select a model/view for a URI
parent bf0db9c0
No related branches found
No related tags found
No related merge requests found
...@@ -16,7 +16,6 @@ class Endpoint{ ...@@ -16,7 +16,6 @@ class Endpoint{
if($output != null){ if($output != null){
$this->params['output'] = $output; $this->params['output'] = $output;
} }
if($output == 'xml'){ if($output == 'xml'){
$accept = 'application/sparql-results+xml'; $accept = 'application/sparql-results+xml';
}elseif($output == 'rdf'){ }elseif($output == 'rdf'){
......
...@@ -240,14 +240,17 @@ class Utils{ ...@@ -240,14 +240,17 @@ class Utils{
public static function getResultsType($query){ public static function getResultsType($query){
global $conf; global $conf;
global $uri;
if(preg_match("/select/i", $query)){ if(preg_match("/select/i", $query)){
return $conf['output']['select']; return $conf['output']['select'];
}elseif(preg_match("/describe/i", $query)){ }elseif(preg_match("/describe/i", $query)){
return $conf['output']['describe']; return $conf['output']['describe'];
}elseif(preg_match("/construct/i", $query)){ }elseif(preg_match("/construct/i", $query)){
return $conf['output']['describe']; return $conf['output']['describe'];
}elseif(preg_match("/ask/i", $query)){
return $conf['output']['ask'];
}else{ }else{
HTTPStatus::send500(null); HTTPStatus::send500($uri);
} }
} }
...@@ -257,7 +260,7 @@ class Utils{ ...@@ -257,7 +260,7 @@ class Utils{
global $lodspk; global $lodspk;
global $endpoints; global $endpoints;
global $results; global $results;
$strippedModelDir = str_replace('endpoint.', '', $modelDir); $strippedModelDir = str_replace('endpoint.', '', $modelDir);
$lodspk['model'] = $modelDir; $lodspk['model'] = $modelDir;
$originalDir = getcwd(); $originalDir = getcwd();
$subDirs= array(); $subDirs= array();
...@@ -324,7 +327,7 @@ class Utils{ ...@@ -324,7 +327,7 @@ class Utils{
global $lodspk; global $lodspk;
global $results; global $results;
global $firstResults; global $firstResults;
$uri = $lodspk['this']['value']; global $uri;
$data = array(); $data = array();
$strippedModelFile = str_replace('endpoint.', '', str_replace('.query', '',$modelFile)); $strippedModelFile = str_replace('endpoint.', '', str_replace('.query', '',$modelFile));
if(!is_dir($modelFile)){ if(!is_dir($modelFile)){
...@@ -583,7 +586,7 @@ class Utils{ ...@@ -583,7 +586,7 @@ class Utils{
return $triples; return $triples;
} }
private static function addPrefixes($q){ public static function addPrefixes($q){
global $conf; global $conf;
$matches = array(); $matches = array();
$visited = array(); $visited = array();
......
<?
require_once('abstractModule.php');
class sparqlFilterModule extends abstractModule{
//Class module
public function match($uri){
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
global $results;
global $firstResults;
require_once($conf['home'].'classes/MetaDb.php');
$metaDb = new MetaDb($conf['metadata']['db']['location']);
$pair = Queries::getMetadata($localUri, $acceptContentType, $metaDb);
if($pair == NULL){ // Original URI is not in metadata
if(Queries::uriExist($uri, $endpoints['local'])){
$page = Queries::createPage($uri, $localUri, $acceptContentType, $metaDb);
if($page == NULL){
HTTPStatus::send500("Can't write sqlite database.");
}
HTTPStatus::send303($page, $acceptContentType);
exit(0);
}else{
return false;
}
}
list($res, $page, $format) = $pair;
$uri = $res;
$queries = $this->getQueries();
$e = $endpoints['local'];
require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
Haanga::configure(array(
'cache_dir' => $conf['home'].'cache/',
'autoescape' => FALSE,
));
$vars = compact('uri', 'lodspk', 'models', 'first');
foreach($queries as $l => $v){
$q = Utils::addPrefixes(file_get_contents($v));
$fnc = Haanga::compile($q);
$query = $fnc($vars, TRUE);
$aux = $e->query($query, Utils::getResultsType($query));
if($aux["boolean"] === true){
$pair[] = $l;
return $pair;
}
}
return false;
}
public function execute($pair){
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
global $results;
global $firstResults;
$results = array();
list($res, $page, $format, $filter) = $pair;
//If resource is not the page, send a 303 to the document
if($res == $localUri){
HTTPStatus::send303($page, $acceptContentType);
}
$uri = $res;
if($conf['mirror_external_uris'] != false){
$localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res);
}
$extension = Utils::getExtension($format);
/*Redefine Content type based on the
* dcterms:format for this page
*/
$acceptContentType = $format;
//Check if files for model and view exist
$t = array($pair[3]);
$obj = $this->getModelandView($t, $extension);
$modelFile = $obj['modelFile'];
$lodspk['model'] = $conf['model']['directory'];
$viewFile = $obj['viewFile'];
$lodspk['view'] = $obj['view']['directory'];
if($viewFile == null){
$lodspk['transform_select_query'] = true;
}
$lodspk['sparqlFilter'] = $modelFile;
$lodspk['home'] = $conf['basedir'];
$lodspk['baseUrl'] = $conf['basedir'];
$lodspk['module'] = 'sparqlFilter';
$lodspk['root'] = $conf['root'];
$lodspk['contentType'] = $acceptContentType;
$lodspk['ns'] = $conf['ns'];
$lodspk['endpoint'] = $conf['endpoint'];
$lodspk['view'] = $conf['view']['directory'];
$lodspk['type'] = $modelFile;
$lodspk['add_mirrored_uris'] = true;
$lodspk['this']['value'] = $uri;
$lodspk['this']['curie'] = Utils::uri2curie($uri);
$lodspk['this']['local'] = $localUri;
$lodspk['this']['extension'] = $extension;
//chdir($conf['home'].$conf['model']['directory']);
Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
if(!$lodspk['resultRdf']){
$results = Utils::internalize($results);
$firstAux = Utils::getfirstResults($results);
//chdir($conf['home']);
if(is_array($results)){
$resultsObj = Convert::array_to_object($results);
$results = $resultsObj;
}else{
$resultsObj = $results;
}
$lodspk['firstResults'] = Convert::array_to_object($firstAux);
}else{
$resultsObj = $results;
}
//chdir($conf['home'].$conf['model']['directory']);
Utils::processDocument($viewFile, $lodspk, $resultsObj);
}
private function getQueries(){
global $conf;
$results = array();
$dir = $conf['home'].$conf['model']['directory'].'/'.$conf['sparqlFilter']['prefix'];
if ($handle = opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($entry = readdir($handle))) {
if($entry != '.' && $entry != '..'){
if(file_exists($dir.'/'.$entry.'/'.$conf['sparqlFilter']['filterFileName']))
$results[$entry] = $dir.'/'.$entry.'/'.$conf['sparqlFilter']['filterFileName'];
}
}
closedir($handle);
return $results;
}else{
return null;
}
}
private static function getModelandView($t, $extension){
global $conf;
global $results;
global $rPointer;
global $lodspk;
$objResult = array('modelFile' => null, 'viewFile' => null);
//Defining default views and models
$curieType="";
//Get the firstResults type available
foreach($t as $v){
if($v == null){continue;}
$auxViewFile = $conf['view']['directory'].'/'.$conf['sparqlFilter']['prefix'].'/'.$v.'/'.$extension.'.template';
$auxModelFile = $conf['model']['directory'].'/'.$conf['sparqlFilter']['prefix'].'/'.$v.'/'.$extension.'queries';
if(file_exists($auxModelFile)){
$objResult['modelFile'] = $auxModelFile;//$conf['sparqlFilter']['prefix'].'/'.$v.'/'.$extensionModel.'queries';
if(file_exists($auxViewFile)){
$objResult['viewFile'] = $auxViewFile;//$conf['sparqlFilter']['prefix'].'/'.$v.'/'.$extensionView.'template';
}elseif($extension != 'html'){ //View doesn't exists (and is not HTML)
$objResult['viewFile'] = null;
}
return $objResult;
}elseif(file_exists($conf['model']['directory'].'/'.$conf['sparqlFilter']['prefix'].'/'.$v.'/queries')){
$objResult['modelFile'] = $conf['model']['directory'].'/'.$conf['sparqlFilter']['prefix'].'/'.$v.'/queries';
if(file_exists($auxViewFile) ){
$objResult['viewFile'] = $auxViewFile;
}else{
$lodspk['transform_select_query'] = true;
$objResult['viewFile'] = null;
}
trigger_error("LODSPeaKr can't find the proper query. Using HTML query instead.", E_USER_NOTICE);
break;
}
}
return $objResult;
}
}
?>
<? <?
$conf['version'] = '20120630'; $conf['version'] = '20120630';
$conf['output']['select'] = 'json'; $conf['output']['select'] = 'json';
$conf['output']['ask'] = 'json';
$conf['output']['describe'] = 'rdf'; $conf['output']['describe'] = 'rdf';
$conf['endpointParams']['config']['show_inline'] = 0; $conf['endpointParams']['config']['show_inline'] = 0;
$conf['endpointParams']['config']['named_graph'] = ''; $conf['endpointParams']['config']['named_graph'] = '';
...@@ -19,7 +20,7 @@ $conf['model']['default'] = 'rdfs:Resource'; ...@@ -19,7 +20,7 @@ $conf['model']['default'] = 'rdfs:Resource';
$conf['view']['directory'] = 'components'; #include trailing slash! $conf['view']['directory'] = 'components'; #include trailing slash!
$conf['view']['extension'] = '.view'; $conf['view']['extension'] = '.view';
$conf['view']['default'] = 'rdfs:Resource'; $conf['view']['default'] = 'rdfs:Resource';
$conf['static']['directory'] = 'static/'; #include trailing slash! $conf['static']['directory'] = 'static/'; #include trailing slash!
$conf['static']['haanga'] = false; //Should static files be processed by Haanga? $conf['static']['haanga'] = false; //Should static files be processed by Haanga?
...@@ -38,6 +39,8 @@ $conf['service']['prefix'] = 'services'; ...@@ -38,6 +39,8 @@ $conf['service']['prefix'] = 'services';
$conf['type']['prefix'] = 'types'; $conf['type']['prefix'] = 'types';
$conf['uri']['prefix'] = 'uris'; $conf['uri']['prefix'] = 'uris';
$conf['redirect']['prefix'] = 'redirect'; $conf['redirect']['prefix'] = 'redirect';
$conf['sparqlFilter']['prefix'] = 'sparqlFilter';
$conf['sparqlFilter']['filterFileName'] = 'filter.query';
//Frontpage when user goes to http://example.org/ //Frontpage when user goes to http://example.org/
$conf['root'] = 'index.html'; $conf['root'] = 'index.html';
...@@ -60,7 +63,12 @@ $conf['session']['password'] = 'admin'; ...@@ -60,7 +63,12 @@ $conf['session']['password'] = 'admin';
$conf['modules'] = array(); $conf['modules'] = array();
$conf['modules']['directory'] = 'classes/modules/'; $conf['modules']['directory'] = 'classes/modules/';
$conf['modules']['available'] = array('static','uri', 'type', 'service');//, 'export'); $conf['modules']['available'] = array('static','uri', 'type', 'service');
//To add sparqlFilter module, copy the following line in your settings.inc.php
//$conf['modules']['available'] = array('static','uri', 'sparqlFilter', 'type', 'service');
//Uncomment next line to enable sessions //Uncomment next line to enable sessions
//$conf['modules']['available'] = array('session', 'static','uri', 'type', 'service'); //$conf['modules']['available'] = array('session', 'static','uri', 'type', 'service');
......
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