Skip to content
Snippets Groups Projects
Commit cf85aeae authored by alangrafu's avatar alangrafu
Browse files

another

parent 61f63481
No related branches found
No related tags found
No related merge requests found
...@@ -42,6 +42,9 @@ class Endpoint{ ...@@ -42,6 +42,9 @@ class Endpoint{
if(preg_match("/describe/i", $q)){ if(preg_match("/describe/i", $q)){
return $aux; return $aux;
} }
if(preg_match("/construct/i", $q)){
return $aux;
}
} }
public function queryPost($q){ public function queryPost($q){
......
...@@ -156,12 +156,39 @@ class Utils{ ...@@ -156,12 +156,39 @@ class Utils{
return $ct; return $ct;
} }
private static function travelTree($tree){
$results = array();
if(is_string($tree)){
return $tree;
}
foreach($tree as $t){
$aux = Utils::travelTree($t);
if(is_array($aux)){
$results = array_merge($results, $aux);
}else{
array_push($results, $aux);
}
}
return $results;
}
private static function serializeRdf($data, $extension){ private static function serializeRdf($data, $extension){
global $conf; global $conf;
require('lib/arc2/ARC2.php'); $ser;
$dPointer;
$docs = Utils::travelTree($data);
require_once('lib/arc2/ARC2.php');
$parser = ARC2::getRDFParser(); $parser = ARC2::getRDFParser();
$parser->parse($conf['basedir'], $data); $triples = array();
$triples = $parser->getTriples();
foreach($docs as $d){
$parser->parse($conf['basedir'], $d);
$t = $parser->getTriples();
$triples = array_merge($triples, $t);
}
if($conf['mirror_external_uris']){ if($conf['mirror_external_uris']){
global $uri; global $uri;
global $localUri; global $localUri;
...@@ -175,7 +202,6 @@ class Utils{ ...@@ -175,7 +202,6 @@ class Utils{
$t['p'] = "http://www.w3.org/2000/10/swap/pim/contact#preferredURI"; $t['p'] = "http://www.w3.org/2000/10/swap/pim/contact#preferredURI";
array_push($triples, $t); array_push($triples, $t);
} }
$ser;
switch ($extension){ switch ($extension){
case 'ttl': case 'ttl':
$ser = ARC2::getTurtleSerializer(); $ser = ARC2::getTurtleSerializer();
...@@ -200,7 +226,7 @@ class Utils{ ...@@ -200,7 +226,7 @@ class Utils{
$extension = Utils::getExtension($contentType); $extension = Utils::getExtension($contentType);
header('Content-Type: '.$contentType); header('Content-Type: '.$contentType);
if(!is_object($data)){ if($extension != 'html'){
$data = Utils::serializeRdf($data, $extension); $data = Utils::serializeRdf($data, $extension);
} }
Utils::showView($base, $data, $viewFile); Utils::showView($base, $data, $viewFile);
...@@ -265,16 +291,18 @@ class Utils{ ...@@ -265,16 +291,18 @@ class Utils{
} }
closedir($handle); closedir($handle);
$originalDir = $base['model']['directory']; $originalDir = $base['model']['directory'];
foreach($subDirs as $v){ if(isset($subDIrs)){
if(!isset($r[$modelDir])){ foreach($subDirs as $v){
$r[$modelDir] = array(); if(!isset($r[$modelDir])){
} $r[$modelDir] = array();
if($modelDir != $base['type']){ }
Utils::queryDir($v, $r[$modelDir]); if($modelDir != $base['type']){
}else{ Utils::queryDir($v, $r[$modelDir]);
Utils::queryDir($v, $r); }else{
} Utils::queryDir($v, $r);
} }
}
}
chdir($conf['home']); chdir($conf['home']);
//return $data; //return $data;
} }
...@@ -288,8 +316,6 @@ class Utils{ ...@@ -288,8 +316,6 @@ class Utils{
$uri = $base['this']['value']; $uri = $base['this']['value'];
$data = array(); $data = array();
$strippedModelFile = str_replace('.query', '',$modelFile); $strippedModelFile = str_replace('.query', '',$modelFile);
if(!is_dir($modelFile)){ if(!is_dir($modelFile)){
require_once($conf['home'].'lib/Haanga/lib/Haanga.php'); require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
Haanga::configure(array( Haanga::configure(array(
...@@ -306,12 +332,73 @@ class Utils{ ...@@ -306,12 +332,73 @@ class Utils{
$r = Convert::array_to_object($r2); $r = Convert::array_to_object($r2);
$f = Convert::array_to_object($first); $f = Convert::array_to_object($first);
$vars = compact('uri', 'base', 'r', 'f'); $vars = compact('uri', 'base', 'r', 'f');
$fnc = Haanga::compile(file_get_contents($modelFile)); $fnc = Haanga::compile(file_get_contents($modelFile));
$query = $fnc($vars, TRUE); $query = $fnc($vars, TRUE);
if(is_object($base)){ if(is_object($base)){
$baseObj = Convert::object_to_array($base); $baseObj = Convert::object_to_array($base);
$base = $baseObj; $base = $baseObj;
} }
if($base['transform_select_query']==true){
include_once($conf['home'].'lib/arc2/ARC2.php');
$parser = ARC2::getSPARQLParser();
$parser->parse($query);
$sparqlConstruct = array();
if (!$parser->getErrors()) {
$resultVars = array();
$q_infos = $parser->getQueryInfos();
foreach($q_infos['query']['result_vars'] as $v){
if($v['type'] == 'var'){
$resultVars[$v['value']] = 1;
}
};
$x = Utils::extractTriples($q_infos['query']['pattern']);
foreach($x as $v){
if(($resultVars[$v['s']] && $v['s_type'] == 'var')
|| ($resultVars[$v['p']] && $v['p_type'] == 'var')
|| ($resultVars[$v['o']] && $v['o_type'] == 'var')){
array_push($sparqlConstruct, $v);
}
}
$construct = "";
foreach($sparqlConstruct as $v){
if($v['s_type'] == 'uri'){
$construct .= "<".$v['s']."> ";
}elseif($v['s_type'] == 'var'){
$construct .= '?'.$v['s'].' ';
}else{
$construct.= $v['s']." ";
}
if($v['p_type'] == 'uri'){
$construct .= "<".$v['p']."> ";
}elseif($v['p_type'] == 'var'){
$construct .= '?'.$v['p'].' ';
}else{
$construct.= $v['p']." ";
}
if($v['o_type'] == 'uri'){
$construct .= "<".$v['o']."> ";
}elseif($v['o_type'] == 'literal'){
$construct .= '"'.$v['o'].'" ';
}elseif($v['o_type'] == 'var'){
$construct .= '?'.$v['o'].' ';
}else{
$construct.= $v['o']." ";
}
$construct .= ".\n";
}
$query = preg_replace('/select.*where/i', 'CONSTRUCT {'.$construct.'} WHERE', $query);
}else {
Utils::send500("invalid query: " . $parser->getErrors());
}
}
if($conf['debug']){ if($conf['debug']){
echo $query; echo $query;
} }
...@@ -395,8 +482,11 @@ class Utils{ ...@@ -395,8 +482,11 @@ class Utils{
public static function showView($baseData, $data, $view){ public static function showView($baseData, $data, $view){
global $conf; global $conf;
global $uri;
global $extension;
$base = $conf['view']['standard']; $base = $conf['view']['standard'];
$base = $baseData; $base = $baseData;
if(isset($baseData['params'])){ if(isset($baseData['params'])){
$base['this']['params'] = $baseData['params']; $base['this']['params'] = $baseData['params'];
} }
...@@ -408,11 +498,13 @@ class Utils{ ...@@ -408,11 +498,13 @@ class Utils{
$r = $data; $r = $data;
$first = $base['first']; $first = $base['first'];
unset($base['first']); unset($base['first']);
$vars = compact('base', 'r', 'first'); $vars = compact('uri','base', 'r', 'first');
if($conf['debug']){ if($conf['debug']){
var_dump($vars); var_dump($vars);
} }
if(is_file($base['view']['directory'].$view)){ if(is_string($data)){
echo($data);
}elseif(is_file($base['view']['directory'].$view)){
Haanga::Load($view, $vars); Haanga::Load($view, $vars);
}else{ }else{
$fnc = Haanga::compile($view); $fnc = Haanga::compile($view);
...@@ -421,7 +513,25 @@ class Utils{ ...@@ -421,7 +513,25 @@ class Utils{
} }
private static function extractTriples($obj){
$triples = array();
if(is_array($obj)){
foreach($obj as $k => $v){
if($v['type'] != 'triple'){
$aux = Utils::extractTriples($v);
if($aux['type'] != 'triple'){
$triples = array_merge($triples,$aux);
}else{
$triples = array_merge($triples, $aux);
}
}else{
array_push($triples, $v);
}
}
}
return $triples;
}
} }
?> ?>
...@@ -63,12 +63,16 @@ class ClassModule extends abstractModule{ ...@@ -63,12 +63,16 @@ class ClassModule extends abstractModule{
list($modelFile, $viewFile) = $this::getModelandView($t, $extension); list($modelFile, $viewFile) = $this::getModelandView($t, $extension);
$base = $conf['view']['standard']; $base = $conf['view']['standard'];
if($viewFile == null){
$base['transform_select_query'] = true;
}
$base['type'] = $modelFile; $base['type'] = $modelFile;
$base['this']['value'] = $uri; $base['this']['value'] = $uri;
$base['this']['curie'] = Utils::uri2curie($uri); $base['this']['curie'] = Utils::uri2curie($uri);
$base['thislocal']['value'] = $localUri; $base['thislocal']['value'] = $localUri;
$base['thislocal']['curie'] = Utils::uri2curie($localUri); $base['thislocal']['curie'] = Utils::uri2curie($localUri);
$base['this']['extension'] = $extension;
$base['this']['contentType'] = $acceptContentType; $base['this']['contentType'] = $acceptContentType;
$base['model']['directory'] = $conf['model']['directory']; $base['model']['directory'] = $conf['model']['directory'];
$base['view']['directory'] = $conf['view']['directory']; $base['view']['directory'] = $conf['view']['directory'];
...@@ -95,6 +99,7 @@ class ClassModule extends abstractModule{ ...@@ -95,6 +99,7 @@ class ClassModule extends abstractModule{
global $conf; global $conf;
global $results; global $results;
global $rPointer; global $rPointer;
global $base;
//Defining default views and models //Defining default views and models
$curieType=""; $curieType="";
$modelFile = 'class.rdfs:Resource/'.$extension.'.queries'; $modelFile = 'class.rdfs:Resource/'.$extension.'.queries';
...@@ -117,6 +122,13 @@ class ClassModule extends abstractModule{ ...@@ -117,6 +122,13 @@ class ClassModule extends abstractModule{
$viewFile = $conf['class']['prefix'].$v.'/'.$extension.'.template'; $viewFile = $conf['class']['prefix'].$v.'/'.$extension.'.template';
$modelFile = $conf['class']['prefix'].$v.'/'.$extension.'.queries'; $modelFile = $conf['class']['prefix'].$v.'/'.$extension.'.queries';
break; break;
}elseif($extension != 'html' &&
file_exists($conf['view']['directory'].$conf['class']['prefix'].$v.'/html.template') &&
file_exists($conf['model']['directory'].$conf['class']['prefix'].$v.'/html.queries') && $v != null){
$modelFile = $conf['class']['prefix'].$v.'/html.queries';
$viewFile = null;//$conf['class']['prefix'].$v.'/html.queries';
trigger_error("LODSPeaKr can't find the proper query. Using HTML query instead.", E_USER_NOTICE);
break;
} }
} }
return array($modelFile, $viewFile); return array($modelFile, $viewFile);
......
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
USAGE="Usage: $0 create|delete uri|class|service foo [html|rdf|ttl|nt|json]"
formats=( html rdf ttl nt json all )
operations=( create delete )
modules=( class service uri )
currentOperation=
currentFormat=
currentModule=
if [[ ${operations[@]} =~ $1 ]]
then
currentOperation=$1
else
echo "Operation \"$1\" not valid"
echo $USAGE
exit 1
fi
if [[ ${modules[@]} =~ $2 ]]
then
currentModule=$2
else
echo "Module \"$2\" not valid"
echo $USAGE
exit 1
fi
if [[ ${formats[@]} =~ $4 ]]
then
currentFormat=$4
else
if [ -z "$4" ]
then
currentFormat="all"
else
echo "Format \"$4\" not valid"
echo $USAGE
exit 1
fi
fi
currentUnit=$3
if [[ $currentOperation == "create" ]]
then
$DIR/modules/create-$currentModule.sh "$currentUnit" "$currentFormat"
fi
if [[ $currentOperation == "delete" ]]
then
$DIR/modules/delete-$currentModule.sh "$currentUnit" "$currentFormat"
fi
...@@ -76,7 +76,7 @@ DESCRIBE ?resource WHERE { ...@@ -76,7 +76,7 @@ DESCRIBE ?resource WHERE {
QUERY) QUERY)
viewRdf=$(cat <<VIEW viewRdf=$(cat <<VIEW
{{r|safe}} {{r.main|safe}}
VIEW) VIEW)
modelTtl=$modelRdf modelTtl=$modelRdf
......
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