diff --git a/classes/BasicSpecialFunction.php b/classes/BasicSpecialFunction.php index e87f2c97c553a833042ee73c370bf5f733a46e9d..fe5daa22f6042768f1555b8f6c191fa2661bfc2a 100644 --- a/classes/BasicSpecialFunction.php +++ b/classes/BasicSpecialFunction.php @@ -6,7 +6,7 @@ class SpecialFunction extends AbstractSpecialFunction{ protected function getFunction($uri){ global $conf; $count = 1; - $prefixUri = $conf['basedir'].$conf['special']['uri']."/"; + $prefixUri = $conf['basedir']; $aux = str_replace($prefixUri, '', $uri, $count); $functionAndParams = explode('/', $aux); return $functionAndParams[0]; @@ -15,7 +15,7 @@ class SpecialFunction extends AbstractSpecialFunction{ protected function getParams($uri){ global $conf; $count = 1; - $prefixUri = $conf['basedir'].$conf['special']['uri']; + $prefixUri = $conf['basedir']; $functionAndParams = explode('/', str_replace($prefixUri, '', $uri, $count)); if(sizeof($functionAndParams) > 1){ array_shift($functionAndParams); @@ -33,15 +33,15 @@ class SpecialFunction extends AbstractSpecialFunction{ $f = $this->getFunction($uri); $params = array(); $params = $this->getParams($uri); - $params[] = $context; + //$params[] = $context; $acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']); $extension = Utils::getExtension($acceptContentType); $args = array(); try{ - $viewFile = $conf['special']['uri'].".".$f.$conf['view']['extension'].".".$extension; - $modelFile = $conf['special']['uri'].".".$f.$conf['model']['extension'].".".$extension; + $viewFile = $conf['service']['prefix'].$f."/".$extension.".template"; + $modelFile = $conf['service']['prefix'].$f."/".$extension.".queries"; if(!(is_dir($conf['model']['directory'].$modelFile) || is_file($conf['model']['directory'].$modelFile))){ - $msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['model']['directory'].$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>"; + $msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>"; throw new Exception($msg); } if(!is_file($conf['view']['directory'].$viewFile)){ @@ -49,10 +49,11 @@ class SpecialFunction extends AbstractSpecialFunction{ throw new Exception($msg); } $endpoints = $context['endpoints']; - array_pop($params); - array_shift($params); + //array_pop($params); + //array_shift($params); $prefixHeader = array(); + for($i=0;$i<sizeof($params);$i++){ if($conf['mirror_external_uris']){ $altUri = Utils::curie2uri($params[$i]); @@ -60,14 +61,15 @@ class SpecialFunction extends AbstractSpecialFunction{ $params[$i] = Utils::uri2curie($altUri); } } - - for($i=0;$i<sizeof($params);$i++){ + + for($i=0;$i<sizeof($params);$i++){ $auxPrefix = Utils::getPrefix($params[$i]); if($auxPrefix['ns'] != NULL){ $prefixHeader[] = $auxPrefix; } $args["arg".$i]=$params[$i]; } + $results['params'] = $params; $base = $conf['view']['standard']; $base['type'] = $modelFile; @@ -86,11 +88,10 @@ class SpecialFunction extends AbstractSpecialFunction{ $base['baseUrl'] = $conf['basedir']; $base['this']['value'] = $uri; $base['this']['contentType'] = $acceptContentType; - $base['view']['directory'] = $conf['home'].$conf['view']['directory']; + $base['view']['directory'] = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$f.'/'; $base['model']['directory'] = $conf['home'].$conf['model']['directory']; chdir($conf['model']['directory']); $first = array(); - $results = array(); Utils::queryFile($modelFile, $endpoints['local'], $results, $first); chdir($conf['home']); $results = Utils::internalize($results); @@ -98,7 +99,11 @@ class SpecialFunction extends AbstractSpecialFunction{ if(is_array($results)){ $results = Convert::array_to_object($results); } - Utils::processDocument($viewFile, $base, $results); + + //Need to redefine viewFile as 'local' i.e., inside service.foo/ so I can load files with the relative path correctly + $viewFile = $extension.".template"; + Utils::processDocument($viewFile, $base, $results); + }catch (Exception $ex){ echo $ex->getMessage(); trigger_error($ex->getMessage(), E_ERROR); diff --git a/classes/Utils.php b/classes/Utils.php index 2c7581fd54bca5b4accc910fee429ab5075d4802..7e49e97b9c2e396641cecf5507553c677f2342b1 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -18,7 +18,7 @@ class Utils{ public static function send406($uri){ header("HTTP/1.0 406 Not Acceptable"); - echo "I can't find a representation suitable for the content type you accept\n\n"; + echo "LODSPeaKr can't find a representation suitable for the content type you accept\n\n"; exit(0); } @@ -287,7 +287,8 @@ class Utils{ global $first; $uri = $base['this']['value']; $data = array(); - + $strippedModelFile = str_replace('.query', '',$modelFile); + if(!is_dir($modelFile)){ require_once($conf['home'].'lib/Haanga/lib/Haanga.php'); @@ -315,25 +316,25 @@ class Utils{ echo $query; } trigger_error("Running query on endpoint", E_USER_NOTICE); - $aux = $e->query($query, Utils::getResultsType($query)); + $aux = $e->query($query, Utils::getResultsType($query)); if($modelFile != $base['type']){ - if(!isset($rPointer[$modelFile])){ - $rPointer[$modelFile] = array(); - $first[$modelFile] = array(); + if(!isset($rPointer[$strippedModelFile])){ + $rPointer[$strippedModelFile] = array(); + $first[$strippedModelFile] = array(); } if(Utils::getResultsType($query) == $conf['output']['select']){ - $rPointer[$modelFile] = Utils::sparqlResult2Obj($aux); - $fPointer[$modelFile] = $rPointer[$modelFile][0]; + $rPointer[$strippedModelFile] = Utils::sparqlResult2Obj($aux); + $fPointer[$strippedModelFile] = $rPointer[$strippedModelFile][0]; /*if(sizeof($rPointer)>0){ $rPointer[$modelFile]['first'] = $rPointer[$modelFile][0]; }*/ }else{ - $rPointer[$modelFile] = $aux; + $rPointer[$strippedModelFile] = $aux; } }else{ if(Utils::getResultsType($query) == $conf['output']['select']){ $rPointer = Utils::sparqlResult2Obj($aux); - $fPointer[$modelFile] = $rPointer[0]; + $fPointer[$strippedModelFile] = $rPointer[0]; /*if(sizeof($rPointer)>0){ $rPointer['first'] = $rPointer[0]; }*/ @@ -342,12 +343,12 @@ class Utils{ } } }else{ - trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE); + trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE); if($modelFile != $base['type']){ - if(!isset($rPointer[$modelFile])){ - $rPointer[$modelFile] = array(); + if(!isset($rPointer[$strippedModelFile])){ + $rPointer[$strippedModelFile] = array(); } - Utils::queryDir($modelFile, $rPointer[$modelFile], $fPointer[$modelFile]); + Utils::queryDir($modelFile, $rPointer[$strippedModelFile], $fPointer[$strippedModelFile]); }else{ Utils::queryDir($modelFile, $rPointer, $fPointer); } @@ -420,40 +421,7 @@ class Utils{ } - public static function getModelandView($t, $extension){ - global $conf; - //Defining default views and models - $curieType=""; - $modelFile = $conf['model']['default'].$conf['model']['extension'].".".$extension; - $viewFile = $conf['view']['default'].$conf['view']['extension'].".".$extension; - - //Get the first class available - /* TODO: Allow user to priotize - * which class should be used - * Example: URI is foaf:Person and ex:Student - * If both, prefer ex:Student - */ - $typesAndValues = array(); - foreach($t as $v){ - $curie = Utils::uri2curie($v); - $typesAndValues[$curie] = 0; - if(isset($conf['types']['priorities'][$curie]) && $conf['types']['priorities'][$curie] >= 0){ - $typesAndValues[$curie] = $conf['types']['priorities'][$curie]; - } - } - arsort($typesAndValues); - foreach($typesAndValues as $v => $w){ - $auxViewFile = $conf['view']['directory'].$v.$conf['view']['extension'].".".$extension; - $auxModelFile = $conf['model']['directory'].$v.$conf['model']['extension'].".".$extension; - if(file_exists($auxModelFile) && file_exists($auxViewFile) && $v != null){ - $viewFile = $v.$conf['view']['extension'].".".$extension; - $modelFile = $v.$conf['model']['extension'].".".$extension; - break; - } - } - return array($modelFile, $viewFile); - } - + } ?> diff --git a/common.inc.php b/common.inc.php index 5f443ea60be8a22eb0b4b75cf1848d00db45594d..c4e9256411a473b05500a84eedff6e2af9b59a57 100644 --- a/common.inc.php +++ b/common.inc.php @@ -32,8 +32,11 @@ $conf['http_accept']['json'] = array('application/json', 'application/x-javascri $conf['http_accept']['nt'] = array('text/plain'); -$conf['special']['uri'] = 'special'; -$conf['special']['class'] = 'classes/BasicSpecialFunction.php'; +$conf['service']['prefix'] = 'service.'; +$conf['service']['class'] = 'classes/BasicSpecialFunction.php'; + +$conf['class']['prefix'] = 'class.'; +$conf['uri']['prefix'] = 'uri.'; //Frontpage when user goes to http://example.org/ $conf['root'] = 'index.html'; @@ -45,6 +48,11 @@ $conf['types']['priorities']['rdfs:Resource'] = -1; //Debug $conf['debug'] = false; +//Modules: LODSPeaKr will try to match the requested URI +//using the modules in the following order +$conf['modules'] = array(); +$conf['modules']['directory'] = 'modules/'; +$conf['modules']['available'] = array('static','uri', 'class', 'service'); include_once('settings.inc.php'); $conf['view']['standard']['baseUrl'] = $conf['basedir']; diff --git a/index.php b/index.php index 577d3a83e5d78bc7aef666291fefc3da08990317..7bd8b7fc1fcb446a7347d0fa4b3a20fa89138cbe 100755 --- a/index.php +++ b/index.php @@ -22,29 +22,25 @@ if($conf['debug']){ error_reporting(E_ERROR); } - - include_once('classes/Utils.php'); include_once('classes/Queries.php'); include_once('classes/Endpoint.php'); -include_once('classes/MetaDb.php'); include_once('classes/Convert.php'); $results = array(); $first = array(); $endpoints = array(); $endpoints['local'] = new Endpoint($conf['endpoint']['local'], $conf['endpointParams']['config']); -$metaDb = new MetaDb($conf['metadata']['db']['location']); $acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']); $extension = Utils::getExtension($acceptContentType); + +//Check content type is supported by LODSPeaKr if($acceptContentType == NULL){ Utils::send406($uri); } -if(sizeof($_GET['q'])>0 && file_exists($conf['static']['directory'].$_GET['q'])){ - echo file_get_contents($conf['static']['directory'].$_GET['q']); - exit(0); -} + +//Export if($conf['export'] && $_GET['q'] == 'export'){ include_once('settings.inc.php'); include_once('classes/Exporter.php'); @@ -54,87 +50,37 @@ if($conf['export'] && $_GET['q'] == 'export'){ exit(0); } - +//Redirect to root URL if necessary $uri = $conf['basedir'].$_GET['q']; $localUri = $uri; if($uri == $conf['basedir']){ header('Location: '.$conf['root']); exit(0); -}elseif(preg_match("|^".$conf['basedir'].$conf['special']['uri']."|", $uri)){ - include_once($conf['special']['class']); - $context = array(); - $context['contentType'] = $acceptContentType; - $context['endpoints'] = $endpoints; - $sp = new SpecialFunction(); - $sp->execute($uri, $context); - exit(0); } + +//Configure external URIs if necessary if($conf['mirror_external_uris']){ $uri = $conf['ns']['local'].$_GET['q']; $localUri = $conf['basedir'].$_GET['q']; -} - -$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){ - 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 == $localUri){ - Utils::send303($page, $acceptContentType); -} - -$uri = $res; -if($conf['mirror_external_uris']){ - $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=Queries::getClass($uri, $endpoints['local']); - -list($modelFile, $viewFile) = Utils::getModelandView($t, $extension); -$base = $conf['view']['standard']; -$base['type'] = $modelFile; -$base['this']['value'] = $uri; -$base['this']['curie'] = Utils::uri2curie($uri); -$base['thislocal']['value'] = $localUri; -$base['thislocal']['curie'] = Utils::uri2curie($localUri); -$base['this']['contentType'] = $acceptContentType; -$base['model']['directory'] = $conf['model']['directory']; -$base['view']['directory'] = $conf['view']['directory']; -$base['ns'] = $conf['ns']; - - -chdir($conf['model']['directory']); - -Utils::queryFile($modelFile, $endpoints['local'], $results, $first); -$results = Utils::internalize($results); -$base['first'] = Utils::getFirsts($results); -chdir($conf['home']); -if(is_array($results)){ - $resultsObj = Convert::array_to_object($results); -}else{ - $resultsObj = $results; +//Modules +foreach($conf['modules']['available'] as $i){ + $className = $i.'Module'; + $currentModule = $conf['modules']['directory'].$className.'.php'; + if(!is_file($currentModule)){ + Utils::send500("<br/>Can't load or error in module <tt>".$currentModule."</tt>" ); + exit(1); + } + require_once($currentModule); + $module = new $className(); + $matching = $module->match($uri) ; + if($matching != FALSE){ + $module->execute($matching); + exit(0); + } } -Utils::processDocument($viewFile, $base, $resultsObj); -//} +Utils::send404($uri); ?> diff --git a/models/class.rdfs:Resource/html.queries/main.query b/models/class.rdfs:Resource/html.queries/main.query new file mode 100644 index 0000000000000000000000000000000000000000..107b0b99b6106b2b56b3292423c6824477325017 --- /dev/null +++ b/models/class.rdfs:Resource/html.queries/main.query @@ -0,0 +1,7 @@ +SELECT ?s2 ?p2 ?s1 ?p1 WHERE { + { + <{{uri}}> ?s1 ?p1 . + }UNION{ + ?s2 ?p2 <{{uri}}> . + } +} diff --git a/models/class.rdfs:Resource/json.queries/main.query b/models/class.rdfs:Resource/json.queries/main.query new file mode 100644 index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d --- /dev/null +++ b/models/class.rdfs:Resource/json.queries/main.query @@ -0,0 +1,3 @@ +DESCRIBE ?resource WHERE { + [] a ?resource . +} diff --git a/models/class.rdfs:Resource/nt.queries/main.query b/models/class.rdfs:Resource/nt.queries/main.query new file mode 100644 index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d --- /dev/null +++ b/models/class.rdfs:Resource/nt.queries/main.query @@ -0,0 +1,3 @@ +DESCRIBE ?resource WHERE { + [] a ?resource . +} diff --git a/models/class.rdfs:Resource/rdf.queries/main.query b/models/class.rdfs:Resource/rdf.queries/main.query new file mode 100644 index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d --- /dev/null +++ b/models/class.rdfs:Resource/rdf.queries/main.query @@ -0,0 +1,3 @@ +DESCRIBE ?resource WHERE { + [] a ?resource . +} diff --git a/models/class.rdfs:Resource/ttl.queries/main.query b/models/class.rdfs:Resource/ttl.queries/main.query new file mode 100644 index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d --- /dev/null +++ b/models/class.rdfs:Resource/ttl.queries/main.query @@ -0,0 +1,3 @@ +DESCRIBE ?resource WHERE { + [] a ?resource . +} diff --git a/models/rdfs:Resource.model.html b/models/rdfs:Resource.model.html deleted file mode 100644 index 5e8f44e2f6e46c5d1bb4858707c27526d1b5e405..0000000000000000000000000000000000000000 --- a/models/rdfs:Resource.model.html +++ /dev/null @@ -1,8 +0,0 @@ -SELECT ?s2 ?p2 ?s1 ?p1 WHERE { - { - <{{uri}}> ?s1 ?p1 . - }UNION{ - ?s2 ?p2 <{{uri}}> . - } -} - diff --git a/models/rdfs:Resource.model.rdf b/models/rdfs:Resource.model.rdf deleted file mode 100644 index 61df9dc82ae823fb1ebafe746788f4ebecb6f20c..0000000000000000000000000000000000000000 --- a/models/rdfs:Resource.model.rdf +++ /dev/null @@ -1 +0,0 @@ -DESCRIBE <{{uri}}> diff --git a/models/special.classes.model.html b/models/service.classes/html.queries/main.query similarity index 100% rename from models/special.classes.model.html rename to models/service.classes/html.queries/main.query diff --git a/models/special.instances.model.html b/models/service.instances/html.queries/main.query similarity index 51% rename from models/special.instances.model.html rename to models/service.instances/html.queries/main.query index d7de13cc16c4e8ec8619293db9b4a9cf8a1a76fb..c5a3510267a2bd0da1fcdb78870c4aec09c1f0f2 100644 --- a/models/special.instances.model.html +++ b/models/service.instances/html.queries/main.query @@ -1,6 +1,6 @@ {%for h in base.header %} -PREFIX {{h.prefix}}: <{{h.ns}}> +PREFIX {{h.prefix}}: <{{h.ns}}> {%endfor%} SELECT DISTINCT ?resource WHERE { - ?resource a {{base.args.arg0}} . + ?resource a {{base.args.arg0}} } diff --git a/models/special.namedGraphs.model.html b/models/service.namedGraphs/html.queries/main.query similarity index 68% rename from models/special.namedGraphs.model.html rename to models/service.namedGraphs/html.queries/main.query index b73ae66e3f2a16aed3d8342b2b913e4984f7885a..3c0f060c416a4a36a8ecc8d21ad23581ab05f660 100644 --- a/models/special.namedGraphs.model.html +++ b/models/service.namedGraphs/html.queries/main.query @@ -1,5 +1,5 @@ SELECT DISTINCT ?g WHERE { GRAPH ?g{ - ?s ?p ?o . + [] ?p ?resource . } } diff --git a/modules/abstractModule.php b/modules/abstractModule.php new file mode 100644 index 0000000000000000000000000000000000000000..a9169d452dc2b32ea13f86498fc9f306dab7aed7 --- /dev/null +++ b/modules/abstractModule.php @@ -0,0 +1,9 @@ +<? +abstract class AbstractModule{ + + abstract protected function match($uri); + abstract protected function execute($params); + +} + +?> diff --git a/modules/classModule.php b/modules/classModule.php new file mode 100644 index 0000000000000000000000000000000000000000..66ae43d9f7415738af93833fb2461caad8195ee7 --- /dev/null +++ b/modules/classModule.php @@ -0,0 +1,126 @@ +<? +require_once('abstractModule.php'); +class ClassModule extends abstractModule{ + //Class module + + public function match($uri){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + + require_once('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){ + Utils::send500("Can't write sqlite database."); + } + Utils::send303($page, $acceptContentType); + exit(0); + }else{ + return false; //Utils::send404($uri); + } + } + return $pair; + } + + public function execute($pair){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + global $results; + global $first; + list($res, $page, $format) = $pair; + //If resource is not the page, send a 303 to the document + if($res == $localUri){ + Utils::send303($page, $acceptContentType); + } + + $uri = $res; + if($conf['mirror_external_uris']){ + $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=Queries::getClass($uri, $endpoints['local']); + + list($modelFile, $viewFile) = $this::getModelandView($t, $extension); + $base = $conf['view']['standard']; + $base['type'] = $modelFile; + $base['this']['value'] = $uri; + $base['this']['curie'] = Utils::uri2curie($uri); + $base['thislocal']['value'] = $localUri; + $base['thislocal']['curie'] = Utils::uri2curie($localUri); + + $base['this']['contentType'] = $acceptContentType; + $base['model']['directory'] = $conf['model']['directory']; + $base['view']['directory'] = $conf['view']['directory']; + $base['ns'] = $conf['ns']; + + + chdir($conf['home'].$conf['model']['directory']); + + Utils::queryFile($modelFile, $endpoints['local'], $results, $first); + $results = Utils::internalize($results); + + $base['first'] = Utils::getFirsts($results); + chdir($conf['home']); + if(is_array($results)){ + $resultsObj = Convert::array_to_object($results); + }else{ + $resultsObj = $results; + } + Utils::processDocument($viewFile, $base, $resultsObj); + + } + + private static function getModelandView($t, $extension){ + global $conf; + global $results; + global $rPointer; + //Defining default views and models + $curieType=""; + $modelFile = 'class.rdfs:Resource/'.$extension.'.queries'; + $viewFile = 'class.rdfs:Resource/'.$extension.'.template'; + + //Get the first class available + $typesAndValues = array(); + foreach($t as $v){ + $curie = Utils::uri2curie($v); + $typesAndValues[$curie] = 0; + if(isset($conf['types']['priorities'][$curie]) && $conf['types']['priorities'][$curie] >= 0){ + $typesAndValues[$curie] = $conf['types']['priorities'][$curie]; + } + } + arsort($typesAndValues); + foreach($typesAndValues as $v => $w){ + $auxViewFile = $conf['view']['directory'].$conf['class']['prefix'].$v.'/'.$extension.'.template'; + $auxModelFile = $conf['model']['directory'].$conf['class']['prefix'].$v.'/'.$extension.'.queries'; + if(file_exists($auxModelFile) && file_exists($auxViewFile) && $v != null){ + $viewFile = $conf['class']['prefix'].$v.'/'.$extension.'.template'; + $modelFile = $conf['class']['prefix'].$v.'/'.$extension.'.queries'; + break; + } + } + return array($modelFile, $viewFile); + } + +} +?> diff --git a/modules/serviceModule.php b/modules/serviceModule.php new file mode 100644 index 0000000000000000000000000000000000000000..841e180ee68980ac1946efd11429d7ee143be249 --- /dev/null +++ b/modules/serviceModule.php @@ -0,0 +1,50 @@ +<? +require_once('abstractModule.php'); +class ServiceModule extends abstractModule{ + //Service module + + public function match($uri){ + global $conf; + global $acceptContentType; + + $q = preg_replace('|^'.$conf['basedir'].'|', '', $uri); + $qArr = explode('/', $q); + if(sizeof($qArr)==0){ + return FALSE; + } + $extension = Utils::getExtension($acceptContentType); + $auxViewFile = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0]."/".$extension.".template"; + $auxModelFile = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0]."/".$extension.".queries"; + if(is_dir($auxModelFile) && is_file($auxViewFile)){ + return $uri;// $qArr[0]; + } + $auxViewFile = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0]; + $auxModelFile = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0]; + if(is_dir($auxModelFile) && is_dir($auxViewFile)){ + Utils::send406($uri);// $qArr[0]; + } + if(is_dir($auxModelFile) && is_file($auxViewFile)){ + return $uri;// $qArr[0]; + } + + return FALSE; + } + + public function execute($service){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + require_once($conf['home'].$conf['service']['class']); + $context = array(); + $context['contentType'] = $acceptContentType; + $context['endpoints'] = $endpoints; + $sp = new SpecialFunction(); + $sp->execute($uri, $context); + exit(0); + } + +} +?> diff --git a/modules/staticModule.php b/modules/staticModule.php new file mode 100644 index 0000000000000000000000000000000000000000..520085176b0bbe61ee1c705630f473637d56dd50 --- /dev/null +++ b/modules/staticModule.php @@ -0,0 +1,31 @@ +<? +require_once('abstractModule.php'); +class StaticModule extends abstractModule{ + //Static module + + public function match($uri){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + $q = preg_replace('|^'.$conf['basedir'].'|', '', $uri); + if(sizeof($q)>0 && file_exists($conf['home'].$conf['static']['directory'].$q)){ + return $q; + } + return FALSE; + } + + public function execute($file){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + echo file_get_contents($conf['static']['directory'].$file); + } + +} +?> diff --git a/modules/uriModule.php b/modules/uriModule.php new file mode 100644 index 0000000000000000000000000000000000000000..492306c7160feca3ead2f6a080d653d5ff711188 --- /dev/null +++ b/modules/uriModule.php @@ -0,0 +1,119 @@ +<? +require_once('abstractModule.php'); +class UriModule extends abstractModule{ + //Uri module + + public function match($uri){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + + require_once('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){ + Utils::send500("Can't write sqlite database."); + } + Utils::send303($page, $acceptContentType); + exit(0); + }else{ + return false; //Utils::send404($uri); + } + } + $extension = Utils::getExtension($pair[2]); + $curie = Utils::uri2curie($pair[0]); + list($modelFile, $viewFile) = $this::getModelandView($curie, $extension); + + if($modelFile == NULL){ + return FALSE; + } + return $pair; + } + + public function execute($pair){ + global $conf; + global $localUri; + global $uri; + global $acceptContentType; + global $endpoints; + global $base; + global $results; + global $first; + list($res, $page, $format) = $pair; + $uri = $res; + $curie = Utils::uri2curie($res); + + //If resource is not the page, send a 303 to the document + if($res == $localUri){ + Utils::send303($page, $acceptContentType); + } + + $uri = $res; + if($conf['mirror_external_uris']){ + $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; + + $curie = Utils::uri2curie($uri); + list($modelFile, $viewFile) = $this::getModelandView($curie, $extension); + if($modelFile == NULL){ + return; + } + + $base = $conf['view']['standard']; + $base['type'] = $modelFile; + $base['this']['value'] = $uri; + $base['this']['curie'] = Utils::uri2curie($uri); + $base['thislocal']['value'] = $localUri; + $base['thislocal']['curie'] = Utils::uri2curie($localUri); + + $base['this']['contentType'] = $acceptContentType; + $base['model']['directory'] = $conf['model']['directory']; + $base['view']['directory'] = $conf['view']['directory']; + $base['ns'] = $conf['ns']; + + + chdir($conf['home'].$conf['model']['directory']); + + Utils::queryFile($modelFile, $endpoints['local'], $results, $first); + $results = Utils::internalize($results); + + $base['first'] = Utils::getFirsts($results); + chdir($conf['home']); + if(is_array($results)){ + $resultsObj = Convert::array_to_object($results); + }else{ + $resultsObj = $results; + } + Utils::processDocument($viewFile, $base, $resultsObj); + + } + + private static function getModelandView($uri, $extension){ + global $conf; + $auxViewFile = $conf['view']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.template'; + $auxModelFile = $conf['model']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.queries'; + if(file_exists($auxModelFile) && file_exists($auxViewFile) ){ + $viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template'; + $modelFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.queries'; + return array($modelFile, $viewFile); + } + return array(NULL, NULL); + } + +} +?> diff --git a/static/index.html b/static/index.html index 7a29d7e7569c5b9b554bbd8ef752c5c68cf4b90f..6a3920ee269d09f04adf97cc9ffbaabebf5b00ab 100644 --- a/static/index.html +++ b/static/index.html @@ -10,8 +10,8 @@ <body> <h1>Services available</h1> <ul> - <li><a href='special/classes'>List of classes in the triple store</a></li> - <li><a href='special/namedGraphs'>Named graphs in the triple store</a></li> + <li><a href='classes'>List of classes in the triple store</a></li> + <li><a href='namedGraphs'>Named graphs in the triple store</a></li> </ul> </body> </html> diff --git a/utils/ldspk.sh b/utils/ldspk.sh new file mode 100755 index 0000000000000000000000000000000000000000..15c92808d609d414c8b796f912a41840ec38d67f --- /dev/null +++ b/utils/ldspk.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +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" + exit 1 +fi + +if [[ ${modules[@]} =~ $2 ]] +then + currentModule=$2 +else + echo "Module \"$2\" not valid" + exit 1 +fi + +if [[ ${formats[@]} =~ $4 ]] +then + currentFormat=$4 +else + if [ -z "$4" ] + then + currentFormat="all" + else + echo "Format \"$4\" not valid" + 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 + + diff --git a/utils/modules/create-class.sh b/utils/modules/create-class.sh new file mode 100755 index 0000000000000000000000000000000000000000..bf86e068b9aac12456651e27ff76e4d85ac0ae9d --- /dev/null +++ b/utils/modules/create-class.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='class' + +modelHtml=$(cat <<QUERY +SELECT ?s2 ?p2 ?s1 ?p1 WHERE { + { + <{{uri}}> ?s1 ?p1 . + }UNION{ + ?s2 ?p2 <{{uri}}> . + } +} +QUERY +) + + +viewHtml=$(cat <<VIEW +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" + "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" + {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> + <head> + <title>Page about {{base.this.value}}</title> + <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{base.this.value}}.rdf" /> + <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{base.this.value}}.ttl" /> + <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" /> + <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" /> + </head> + <body about="{{base.this.value}}"> + <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1> + <div> + <h2>Information from {{base.this.curie}}</h2> + <table> + {% for row in r.main %} + + {% if row.s1%} + <tr> + <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td> + + {% if row.p1.uri == 1 %} + <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td> + {% else %} + <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td> + {% endif %} + + </tr> + {% endif %} + {% endfor %} + </table> + + <br/><br/> + <h2>Information pointing to {{base.this.curie}}</h2> + <table> + {% for row in r.main %} + {% if row.s2%} + <tr> + <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td> + <td><a rev='[{{row.p2.curie}}]' href='{{row.s2.value}}'>{{row.p2.curie}}</a></td> + </tr> + {%endif %} + {% endfor %} + </table> + </div> + </body> +</html> +VIEW) + +modelRdf=$(cat <<QUERY +DESCRIBE ?resource WHERE { + [] a ?resource . +} +QUERY) + +viewRdf=$(cat <<VIEW +{{r|safe}} +VIEW) + +modelTtl=$modelRdf +viewTtl=$viewRdf +modelNt=$modelRdf +viewNt=$viewRdf +modelJson=$modelRdf +viewJson=$viewJson + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ -e "$mainModelDir" ] +then + echo "WARNING: At least one model for $1 exists." >&2 +else + mkdir $mainModelDir +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ -e $mainModelDir/$i.queries ] + then + echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2 + exit 1 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ -e "$mainViewDir" ] +then + echo "WARNING: At least one view for $1 exists." >&2 +else + mkdir $mainViewDir +fi + + +for i in ${obj[@]} +do + if [ -e $mainViewDir/$i.template ] + then + echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2 + exit 1 + fi +done + + +#Create file structure + +for i in ${obj[@]} +do + mkdir $mainModelDir/$i.queries + if [ "$i" == "html" ] + then + echo "$modelHtml" > $mainModelDir/$i.queries/main.query + echo "$viewHtml" > $mainViewDir/$i.template + else + echo "$modelRdf" > $mainModelDir/$i.queries/main.query + echo "$viewRdf" > $mainViewDir/$i.template + fi +done + +echo $initToken.$1 created/modified successfully! >&2 diff --git a/utils/modules/create-service.sh b/utils/modules/create-service.sh new file mode 100755 index 0000000000000000000000000000000000000000..29ff6e9c413de8660e205017a1b227b00497fbf1 --- /dev/null +++ b/utils/modules/create-service.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='service' + +modelHtml=$(cat <<QUERY +{%for h in base.header %} +PREFIX {{h.prefix}}: <{{h.ns}}> +{%endfor%} +SELECT DISTINCT ?resource WHERE { + {%if base.args.arg0 %}GRAPH <{{base.args.arg0}}>{ {%endif%} + [] a ?resource . + {%if base.args.arg0 %} } {%endif%} +} +QUERY) + +viewHtml=$(cat <<VIEW +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" + "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" + {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> + <head> + <title>My new Service</title> + <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + </head> + <body> + <h1>Classes available</h1> + <ul> + {% for row in r.main %} + <li><a href="{{base.baseUrl}}special/instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li> + {% endfor %} + </ul> + </body> +</html> +VIEW) + +modelRdf=$(cat <<QUERY +DESCRIBE ?resource WHERE { + [] a ?resource . +} +QUERY) + +viewRdf=$(cat <<QUERY +{{r|safe}} +QUERY) + +modelTtl=$modelRdf +viewTtl=$viewRdf +modelNt=$modelRdf +viewNt=$viewRdf +modelJson=$modelRdf +viewJson=$viewJson + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ -e "$mainModelDir" ] +then + echo "WARNING: At least one model for $1 exists." >&2 +else + mkdir $mainModelDir +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ -e $mainModelDir/$i.queries ] + then + echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2 + exit 1 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ -e "$mainViewDir" ] +then + echo "WARNING: At least one view for $1 exists." >&2 +else + mkdir $mainViewDir +fi + + +for i in ${obj[@]} +do + if [ -e $mainViewDir/$i.template ] + then + echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2 + exit 1 + fi +done + + +#Create file structure + +for i in ${obj[@]} +do + mkdir $mainModelDir/$i.queries + if [ "$i" == "html" ] + then + echo "$modelHtml" > $mainModelDir/$i.queries/main.query + echo "$viewHtml" > $mainViewDir/$i.template + else + echo "$modelRdf" > $mainModelDir/$i.queries/main.query + echo "$viewRdf" > $mainViewDir/$i.template + fi +done + +echo $initToken.$1 created/modified successfully! >&2 diff --git a/utils/modules/create-uri.sh b/utils/modules/create-uri.sh new file mode 100755 index 0000000000000000000000000000000000000000..8562599817abccfb3d50a3ac03c6f37c99066946 --- /dev/null +++ b/utils/modules/create-uri.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='uri' + +modelHtml=$(cat <<QUERY +SELECT ?s2 ?p2 ?s1 ?p1 WHERE { + { + <{{uri}}> ?s1 ?p1 . + }UNION{ + ?s2 ?p2 <{{uri}}> . + } +} +QUERY +) + + +viewHtml=$(cat <<VIEW +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" + "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" + {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> + <head> + <title>Page about {{base.this.value}}</title> + <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{base.this.value}}.rdf" /> + <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{base.this.value}}.ttl" /> + <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" /> + <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" /> + </head> + <body about="{{base.this.value}}"> + <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1> + <div> + <h2>Information from {{base.this.curie}}</h2> + <table> + {% for row in r.main %} + + {% if row.s1%} + <tr> + <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td> + + {% if row.p1.uri == 1 %} + <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td> + {% else %} + <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td> + {% endif %} + + </tr> + {% endif %} + {% endfor %} + </table> + + <br/><br/> + <h2>Information pointing to {{base.this.curie}}</h2> + <table> + {% for row in r.main %} + {% if row.s2%} + <tr> + <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td> + <td><a rev='[{{row.p2.curie}}]' href='{{row.s2.value}}'>{{row.p2.curie}}</a></td> + </tr> + {%endif %} + {% endfor %} + </table> + </div> + </body> +</html> +VIEW) + +modelRdf=$(cat <<QUERY +DESCRIBE ?resource WHERE { + [] a ?resource . +} +QUERY) + +viewRdf=$(cat <<VIEW +{{r|safe}} +VIEW) + +modelTtl=$modelRdf +viewTtl=$viewRdf +modelNt=$modelRdf +viewNt=$viewRdf +modelJson=$modelRdf +viewJson=$viewJson + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ -e "$mainModelDir" ] +then + echo "WARNING: At least one model for $1 exists." >&2 +else + mkdir $mainModelDir +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ -e $mainModelDir/$i.queries ] + then + echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2 + exit 1 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ -e "$mainViewDir" ] +then + echo "WARNING: At least one view for $1 exists." >&2 +else + mkdir $mainViewDir +fi + + +for i in ${obj[@]} +do + if [ -e $mainViewDir/$i.template ] + then + echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2 + exit 1 + fi +done + + +#Create file structure + +for i in ${obj[@]} +do + mkdir $mainModelDir/$i.queries + if [ "$i" == "html" ] + then + echo "$modelHtml" > $mainModelDir/$i.queries/main.query + echo "$viewHtml" > $mainViewDir/$i.template + else + echo "$modelRdf" > $mainModelDir/$i.queries/main.query + echo "$viewRdf" > $mainViewDir/$i.template + fi +done + +echo $initToken.$1 created/modified successfully! >&2 diff --git a/utils/modules/delete-class.sh b/utils/modules/delete-class.sh new file mode 100755 index 0000000000000000000000000000000000000000..87a8441ecd2bddb35d93a6eb406156ae846a284d --- /dev/null +++ b/utils/modules/delete-class.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='class' + + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ ! -e "$mainModelDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2 + exit 1 +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ ! -e $mainModelDir/$i.queries ] + then + echo "WARNING: $initToken.$1/$i.query does not exists in models." >&2 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ ! -e "$mainViewDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in views. Operation aborted." >&2 +fi + + +for i in ${obj[@]} +do + if [ ! -e $mainViewDir/$i.template ] + then + echo "WARNING: $mainViewDir/$i.template doesn't exist in views." >&2 + fi +done + + +#Delete file structure + +if [ "$2" == "all" ] +then + rm -rf $mainModelDir + rm -rf $mainViewDir +else + for i in ${obj[@]} + do + rm -rf $mainModelDir/$i.queries + rm -rf $mainViewDir/$i.template + done +fi +echo $initToken.$1 deleted successfully! >&2 diff --git a/utils/modules/delete-service.sh b/utils/modules/delete-service.sh new file mode 100755 index 0000000000000000000000000000000000000000..780ebab235081cc7386e529afdedf673b604d9e4 --- /dev/null +++ b/utils/modules/delete-service.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='service' + + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ ! -e "$mainModelDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2 + exit 1 +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ ! -e $mainModelDir/$i.queries ] + then + echo "WARNING: $initToken.$1/$i.query does not exists in models." >&2 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ ! -e "$mainViewDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in views. Operation aborted." >&2 +fi + + +for i in ${obj[@]} +do + if [ ! -e $mainViewDir/$i.template ] + then + echo "WARNING: $mainViewDir/$i.template doesn't exist in views." >&2 + fi +done + + +#Delete file structure + +if [ "$2" == "all" ] +then + rm -rf $mainModelDir + rm -rf $mainViewDir +else + for i in ${obj[@]} + do + rm -rf $mainModelDir/$i.queries + rm -rf $mainViewDir/$i.template + done +fi +echo $initToken.$1 deleted successfully! >&2 diff --git a/utils/modules/delete-uri.sh b/utils/modules/delete-uri.sh new file mode 100755 index 0000000000000000000000000000000000000000..eaf82c3c06e3c62cacd542536575d2cbaa19d530 --- /dev/null +++ b/utils/modules/delete-uri.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +initToken='uri' + + +#Check models +mainModelDir=$DIR/../../models/$initToken.$1 + +if [ ! -e "$mainModelDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2 + exit 1 +fi + +obj=( ) +if [ "$2" == "all" ] +then + obj=( html rdf ttl nt json ) +else + obj=( $2 ) +fi + +for i in ${obj[@]} +do + if [ ! -e $mainModelDir/$i.queries ] + then + echo "WARNING: $initToken.$1/$i.query does not exists in models." >&2 + fi +done + + +#Check views +mainViewDir=$DIR/../../views/$initToken.$1 + +if [ ! -e "$mainViewDir" ] +then + echo "ERROR: $initToken.$1 doesn't exist in views. Operation aborted." >&2 +fi + + +for i in ${obj[@]} +do + if [ ! -e $mainViewDir/$i.template ] + then + echo "WARNING: $mainViewDir/$i.template doesn't exist in views." >&2 + fi +done + + +#Delete file structure + +if [ "$2" == "all" ] +then + rm -rf $mainModelDir + rm -rf $mainViewDir +else + for i in ${obj[@]} + do + rm -rf $mainModelDir/$i.queries + rm -rf $mainViewDir/$i.template + done +fi +echo $initToken.$1 deleted successfully! >&2 diff --git a/views/rdfs:Resource.view.html b/views/class.rdfs:Resource/html.template similarity index 93% rename from views/rdfs:Resource.view.html rename to views/class.rdfs:Resource/html.template index 59f3631899154cb32d0456a682340ac5adfff40f..2cd8b212289059e162fb8c58b6c688b7739f9368 100644 --- a/views/rdfs:Resource.view.html +++ b/views/class.rdfs:Resource/html.template @@ -11,32 +11,32 @@ <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" /> <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" /> </head> - <body about="{{base.this.value}}"> + <body about="{{base.this.value}}"> <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1> <div> <h2>Information from {{base.this.curie}}</h2> - <table> - {% for row in r %} + <table> + {% for row in r.main %} {% if row.s1%} <tr> <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td> - + {% if row.p1.uri == 1 %} <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td> {% else %} <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td> {% endif %} - + </tr> {% endif %} {% endfor %} </table> - + <br/><br/> <h2>Information pointing to {{base.this.curie}}</h2> - <table> - {% for row in r %} + <table> + {% for row in r.main %} {% if row.s2%} <tr> <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td> @@ -48,4 +48,3 @@ </div> </body> </html> - diff --git a/views/class.rdfs:Resource/json.template b/views/class.rdfs:Resource/json.template new file mode 100644 index 0000000000000000000000000000000000000000..f6451d60b03e01731a9e01adfacf9c9cbdc5cfda --- /dev/null +++ b/views/class.rdfs:Resource/json.template @@ -0,0 +1 @@ +{{r.main|safe}} diff --git a/views/rdfs:Resource.view.rdf b/views/class.rdfs:Resource/nt.template similarity index 100% rename from views/rdfs:Resource.view.rdf rename to views/class.rdfs:Resource/nt.template diff --git a/views/class.rdfs:Resource/rdf.template b/views/class.rdfs:Resource/rdf.template new file mode 100644 index 0000000000000000000000000000000000000000..f6451d60b03e01731a9e01adfacf9c9cbdc5cfda --- /dev/null +++ b/views/class.rdfs:Resource/rdf.template @@ -0,0 +1 @@ +{{r.main|safe}} diff --git a/views/class.rdfs:Resource/ttl.template b/views/class.rdfs:Resource/ttl.template new file mode 100644 index 0000000000000000000000000000000000000000..ca994557126054d192c1e40eca4f28f5e635bab8 --- /dev/null +++ b/views/class.rdfs:Resource/ttl.template @@ -0,0 +1 @@ +{{r|safe}} diff --git a/views/header.inc b/views/header.inc index adbefad22dc773222ab0ae36e0d78cecb89e691f..7bb8c2e42f98d125a2d831f9fe0e386938a29419 100644 --- a/views/header.inc +++ b/views/header.inc @@ -1,5 +1,5 @@ <h4>Endpoint: {{base.endpoint.local}}</h4> <div style='float:center'> -<a href='{{base.home}}'>Home</a> | <a href='{{base.home}}special/classes'>Classes</a> | <a href='{{base.home}}special/namedGraphs'>Named Graphs</a> +<a href='{{base.home}}'>Home</a> | <a href='{{base.home}}classes'>Classes</a> | <a href='{{base.home}}namedGraphs'>Named Graphs</a> </div> diff --git a/views/special.classes.view.html b/views/service.classes/html.template similarity index 72% rename from views/special.classes.view.html rename to views/service.classes/html.template index 8a7777fe863303235d9f846e0be11cfbb70b9f00..bdda75d1c01e1d837ca57dbb8ea2cdd2b9c84595 100644 --- a/views/special.classes.view.html +++ b/views/service.classes/html.template @@ -4,17 +4,16 @@ <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> <head> - <title>Classes available</title> + <title>My new Service</title> <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> </head> <body> <h1>Classes available</h1> -{%include "header.inc"%} +{%include "../header.inc"%} <ul> - {% for row in r %} - <li><a href='{{base.baseUrl}}special/instances/{{ row.resource.curie }}'>{{row.resource.curie}}</a></li> + {% for row in r.main %} + <li><a href="{{base.baseUrl}}instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li> {% endfor %} </ul> </body> </html> - diff --git a/views/special.instances.view.html b/views/service.instances/html.template similarity index 65% rename from views/special.instances.view.html rename to views/service.instances/html.template index b164024cf0adbbd522503ca1bd7e72e2066057ae..6f0a319a3b59c753cc6ec2ebb2a9943011ce7e70 100644 --- a/views/special.instances.view.html +++ b/views/service.instances/html.template @@ -3,18 +3,17 @@ "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> - <head> - <title>Instance of {{base.args.arg0}}</title> + <head> + <title>Instances of {{base.args.arg0}}</title> <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> </head> <body> - <h1>Instances of {{base.args.arg0}}</h1> -{%include "header.inc"%} + <h1>Instances of class {{base.args.arg0}}</h1> +{%include "../header.inc"%} <ul> - {% for row in r %} - <li><a href='{{ row.resource.value }}'>{{row.resource.curie}}</a></li> - {% endfor %} + {% for row in r.main %} + <li><a href="{{ row.resource.value }}">{{row.resource.curie}}</a></li> + {% endfor %} </ul> </body> </html> - diff --git a/views/special.namedGraphs.view.html b/views/service.namedGraphs/html.template similarity index 74% rename from views/special.namedGraphs.view.html rename to views/service.namedGraphs/html.template index 65ee0d422589ded5522de1f6a0330367f293fefc..70eaa0b4c3d3a1b03ca12fa1efd09855ca88c7b6 100644 --- a/views/special.namedGraphs.view.html +++ b/views/service.namedGraphs/html.template @@ -4,17 +4,16 @@ <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> <head> - <title>Graphs available in the triple store</title> + <title>Named Graphs</title> <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> </head> <body> - <h1>Graphs available</h1> -{%include "header.inc"%} + <h1>Named graphs available</h1> +{%include "../header.inc"%} <ul> - {% for row in r %} - <li>{{row.g.curie}}</li> + {% for row in r.main %} + <li>{{row.g.value}}</li> {% endfor %} </ul> </body> </html> -