From 60029fdd473cffbd06259081e1b9e718bf35d2a0 Mon Sep 17 00:00:00 2001 From: alangrafu <alvaro@graves.cl> Date: Mon, 23 Jan 2012 20:29:18 -0800 Subject: [PATCH] Fixed bugs in modules Service now return 406 if service exists but the content type is not supported Fixed use of previously returned values in classModule Adding new format for ref:Resource Delete old format --- classes/BasicSpecialFunction.php | 10 +++--- classes/Utils.php | 31 ++++++++++--------- common.inc.php | 4 +-- .../html.queries/main.query | 7 +++++ .../json.queries/main.query | 3 ++ .../class.rdfs:Resource/nt.queries/main.query | 3 ++ .../rdf.queries/main.query | 3 ++ .../ttl.queries/main.query | 3 ++ models/rdfs:Resource.model.html | 8 ----- models/rdfs:Resource.model.rdf | 1 - .../html.queries/main.query} | 0 models/special.instances.model.html | 6 ---- models/special.namedGraphs.model.html | 5 --- modules/classModule.php | 15 +++++---- modules/serviceModule.php | 30 +++++++++++++++--- .../html.template} | 17 +++++----- views/class.rdfs:Resource/json.template | 1 + .../nt.template} | 0 views/class.rdfs:Resource/rdf.template | 1 + views/class.rdfs:Resource/ttl.template | 1 + .../html.template} | 8 ++--- views/special.instances.view.html | 20 ------------ views/special.namedGraphs.view.html | 20 ------------ 23 files changed, 89 insertions(+), 108 deletions(-) create mode 100644 models/class.rdfs:Resource/html.queries/main.query create mode 100644 models/class.rdfs:Resource/json.queries/main.query create mode 100644 models/class.rdfs:Resource/nt.queries/main.query create mode 100644 models/class.rdfs:Resource/rdf.queries/main.query create mode 100644 models/class.rdfs:Resource/ttl.queries/main.query delete mode 100644 models/rdfs:Resource.model.html delete mode 100644 models/rdfs:Resource.model.rdf rename models/{special.classes.model.html => service.classes/html.queries/main.query} (100%) delete mode 100644 models/special.instances.model.html delete mode 100644 models/special.namedGraphs.model.html rename views/{rdfs:Resource.view.html => class.rdfs:Resource/html.template} (93%) create mode 100644 views/class.rdfs:Resource/json.template rename views/{rdfs:Resource.view.rdf => class.rdfs:Resource/nt.template} (100%) create mode 100644 views/class.rdfs:Resource/rdf.template create mode 100644 views/class.rdfs:Resource/ttl.template rename views/{special.classes.view.html => service.classes/html.template} (72%) delete mode 100644 views/special.instances.view.html delete mode 100644 views/special.namedGraphs.view.html diff --git a/classes/BasicSpecialFunction.php b/classes/BasicSpecialFunction.php index e87f2c97..6a3fc28f 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); @@ -38,10 +38,10 @@ class SpecialFunction extends AbstractSpecialFunction{ $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)){ diff --git a/classes/Utils.php b/classes/Utils.php index eaf6767e..855d7783 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); } @@ -409,7 +410,7 @@ class Utils{ unset($base['first']); $vars = compact('base', 'r', 'first'); if($conf['debug']){ - var_dump($vars); + var_dump($r); } if(is_file($base['view']['directory'].$view)){ Haanga::Load($view, $vars); diff --git a/common.inc.php b/common.inc.php index 5579e1a7..eaf3f257 100644 --- a/common.inc.php +++ b/common.inc.php @@ -32,8 +32,8 @@ $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'; //Frontpage when user goes to http://example.org/ $conf['root'] = 'index.html'; 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 00000000..107b0b99 --- /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 00000000..fbb7078a --- /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 00000000..fbb7078a --- /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 00000000..fbb7078a --- /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 00000000..fbb7078a --- /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 5e8f44e2..00000000 --- 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 61df9dc8..00000000 --- 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/special.instances.model.html deleted file mode 100644 index d7de13cc..00000000 --- a/models/special.instances.model.html +++ /dev/null @@ -1,6 +0,0 @@ -{%for h in base.header %} -PREFIX {{h.prefix}}: <{{h.ns}}> -{%endfor%} -SELECT DISTINCT ?resource WHERE { - ?resource a {{base.args.arg0}} . -} diff --git a/models/special.namedGraphs.model.html b/models/special.namedGraphs.model.html deleted file mode 100644 index b73ae66e..00000000 --- a/models/special.namedGraphs.model.html +++ /dev/null @@ -1,5 +0,0 @@ -SELECT DISTINCT ?g WHERE { - GRAPH ?g{ - ?s ?p ?o . - } -} diff --git a/modules/classModule.php b/modules/classModule.php index 68ab2266..3348c78d 100644 --- a/modules/classModule.php +++ b/modules/classModule.php @@ -38,6 +38,8 @@ class ClassModule extends abstractModule{ 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){ @@ -75,7 +77,7 @@ class ClassModule extends abstractModule{ chdir($conf['home'].$conf['model']['directory']); -// echo $conf['home'].$conf['model']['directory'].$modelFile;exit(0); + Utils::queryFile($modelFile, $endpoints['local'], $results, $first); $results = Utils::internalize($results); @@ -92,17 +94,14 @@ class ClassModule extends abstractModule{ private static function getModelandView($t, $extension){ global $conf; + global $results; + global $rPointer; //Defining default views and models $curieType=""; - $modelFile = $conf['model']['default'].$conf['model']['extension'].".".$extension; - $viewFile = $conf['view']['default'].$conf['view']['extension'].".".$extension; + $modelFile = 'class.rdfs:Resource/'.$extension.'.queries'; + $viewFile = 'class.rdfs:Resource/'.$extension.'.template'; //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); diff --git a/modules/serviceModule.php b/modules/serviceModule.php index 695229fe..7e2e0865 100644 --- a/modules/serviceModule.php +++ b/modules/serviceModule.php @@ -4,18 +4,40 @@ class ServiceModule extends abstractModule{ //Service module public function match($uri){ - global $conf; - return preg_match("|^".$conf['basedir'].$conf['special']['uri']."|", $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($pair){ + public function execute($service){ global $conf; global $localUri; global $uri; global $acceptContentType; global $endpoints; global $base; - require_once($conf['home'].$conf['special']['class']); + require_once($conf['home'].$conf['service']['class']); $context = array(); $context['contentType'] = $acceptContentType; $context['endpoints'] = $endpoints; 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 59f36318..2cd8b212 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 00000000..f6451d60 --- /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 00000000..f6451d60 --- /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 00000000..ca994557 --- /dev/null +++ b/views/class.rdfs:Resource/ttl.template @@ -0,0 +1 @@ +{{r|safe}} 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 8a7777fe..dac4c802 100644 --- a/views/special.classes.view.html +++ b/views/service.classes/html.template @@ -4,17 +4,15 @@ <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"%} <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}}special/instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li> {% endfor %} </ul> </body> </html> - diff --git a/views/special.instances.view.html b/views/special.instances.view.html deleted file mode 100644 index b164024c..00000000 --- a/views/special.instances.view.html +++ /dev/null @@ -1,20 +0,0 @@ -<?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>Instance 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"%} - <ul> - {% for row in r %} - <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/special.namedGraphs.view.html deleted file mode 100644 index 65ee0d42..00000000 --- a/views/special.namedGraphs.view.html +++ /dev/null @@ -1,20 +0,0 @@ -<?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>Graphs available in the triple store</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"%} - <ul> - {% for row in r %} - <li>{{row.g.curie}}</li> - {% endfor %} - </ul> - </body> -</html> - -- GitLab