From e46e3dfbdcfac9cf6717b466f74897c827962b61 Mon Sep 17 00:00:00 2001
From: alvaro <alvaro@alia.(none)>
Date: Wed, 22 Feb 2012 12:08:21 -0800
Subject: [PATCH] Modified to new file structure

---
 classes/Endpoint.php                          |  4 +-
 classes/Utils.php                             | 74 +++++++++++--------
 classes/modules/serviceModule.php             | 49 ++++++------
 classes/modules/typeModule.php                | 58 +++++++--------
 classes/modules/uriModule.php                 | 33 ++++-----
 common.inc.php                                | 10 +--
 components/includes/header.inc                |  5 ++
 components/services/classes/html.template     | 19 +++++
 .../services/classes/queries/main.query       | 12 +++
 .../instances/html.queries/main.query         | 13 ++++
 components/services/instances/html.template   | 19 +++++
 components/services/namedGraphs/html.template | 19 +++++
 .../services/namedGraphs/queries/main.query   |  6 ++
 components/types/rdfs:Resource/html.template  | 52 +++++++++++++
 .../types/rdfs:Resource/queries/po.query      |  9 +++
 .../types/rdfs:Resource/queries/sp.query      |  9 +++
 index.php                                     |  2 +-
 .../Haanga/Extension/Filter/Googlemaps.php    |  2 +
 18 files changed, 287 insertions(+), 108 deletions(-)
 create mode 100644 components/includes/header.inc
 create mode 100644 components/services/classes/html.template
 create mode 100644 components/services/classes/queries/main.query
 create mode 100644 components/services/instances/html.queries/main.query
 create mode 100644 components/services/instances/html.template
 create mode 100644 components/services/namedGraphs/html.template
 create mode 100644 components/services/namedGraphs/queries/main.query
 create mode 100644 components/types/rdfs:Resource/html.template
 create mode 100644 components/types/rdfs:Resource/queries/po.query
 create mode 100644 components/types/rdfs:Resource/queries/sp.query

diff --git a/classes/Endpoint.php b/classes/Endpoint.php
index 2393bb12..c4bb2db6 100644
--- a/classes/Endpoint.php
+++ b/classes/Endpoint.php
@@ -35,8 +35,8 @@ class Endpoint{
         $aux = curl_exec($c); // execute the curl command 
         if($conf['debug']){
           if($aux == false){
-          	trigger_error("Error executing SPARQL query: ".curl_error($c), E_USER_ERROR);
-          	echo("Error executing SPARQL query: ".curl_error($c));
+          	trigger_error("Error executing SPARQL query (".$this->sparqlUrl."): ".curl_error($c), E_USER_ERROR);
+          	echo("Error executing SPARQL query (".$this->sparqlUrl."): ".curl_error($c));
           }
         }
         curl_close($c);
diff --git a/classes/Utils.php b/classes/Utils.php
index 1988d108..95baf1c3 100644
--- a/classes/Utils.php
+++ b/classes/Utils.php
@@ -199,7 +199,7 @@ class Utils{
   	$ser;
   	$dPointer;
   	$docs = Utils::travelTree($data);
-  	require_once('lib/arc2/ARC2.php');
+  	require_once($conf['home'].'lib/arc2/ARC2.php');
   	$parser = ARC2::getRDFParser();
   	 $triples = array();
   	 
@@ -241,11 +241,12 @@ class Utils{
   
   public static function processDocument($viewFile, $lodspk, $data){
   	global $conf;
+  	global $lodspk;
   	$contentType = $lodspk['contentType'];
   	$extension = Utils::getExtension($contentType); 
   	
   	header('Content-Type: '.$contentType);
-  	if($lodspk['resultRdf']){
+  	if(isset($lodspk['resultRdf']) && $lodspk['resultRdf'] == true){
   	  echo Utils::serializeRdf($data, $extension);
   	}else{
   	  Utils::showView($lodspk, $data, $viewFile);  	
@@ -271,38 +272,41 @@ class Utils{
   	global $lodspk;
   	global $endpoints;
   	global $results;
+  	$strippedModelDir = str_replace('endpoint.', '', $modelDir); 	  
   	$lodspk['model'] = $modelDir;
   	$originalDir = getcwd();
   	$subDirs= array();
-  	trigger_error("Entering $modelDir from ".getcwd(), E_USER_NOTICE);
+  	trigger_error("Entering $strippedModelDir from ".getcwd(), E_USER_NOTICE);
   	chdir($modelDir);
   	$handle = opendir('.');
   	
   	while (false !== ($modelFile = readdir($handle))) {
   	  if($modelFile != "." && $modelFile != ".." && strpos($modelFile, ".") !== 0){
   	  	if(is_dir($modelFile)){
-  	  	  trigger_error("Save $modelFile for later, after all the queries in the current directory has been resolved", E_USER_NOTICE);
-  	  	  $subDirs[]=$modelFile;
+  	  	  if(strpos('endpoint.', $modelFile) == 0){
+  	  	  	trigger_error("Save $modelFile for later, after all the queries in the current directory has been resolved", E_USER_NOTICE);
+  	  	  	$subDirs[]=$modelFile;
+  	  	  }
   	  	}else{
   	  	  $e = null;
-  	  	  if(!isset($endpoints[$modelDir])){
-  	  	  	trigger_error("Creating endpoint for $modelDir", E_USER_NOTICE);
-  	  	  	if(!isset($conf['endpoint'][$modelDir])){
-  	  	  	  trigger_error("Couldn't find $modelDir as a list of available endpoints. Will continue using local", E_USER_WARNING);
+  	  	  if(!isset($endpoints[$strippedModelDir])){
+  	  	  	trigger_error("Creating endpoint for $strippedModelDir", E_USER_NOTICE);
+  	  	  	if(!isset($conf['endpoint'][$strippedModelDir])){
+  	  	  	  trigger_error("Couldn't find $strippedModelDir as a list of available endpoints. Will continue using local", E_USER_WARNING);
   	  	  	  $e = $endpoints['local'];
   	  	  	}else{  
-  	  	  	  $endpoints[$modelDir] = new Endpoint($conf['endpoint'][$modelDir], $conf['endpoint']['config']);
-  	  	  	  $e = $endpoints[$modelDir];
+  	  	  	  $endpoints[$strippedModelDir] = new Endpoint($conf['endpoint'][$strippedModelDir], $conf['endpoint']['config']);
+  	  	  	  $e = $endpoints[$strippedModelDir];
   	  	  	}
   	  	  }else{
-  	  	  	$e = $endpoints[$modelDir];
+  	  	  	$e = $endpoints[$strippedModelDir];
   	  	  }
   	  	  if($modelDir != $lodspk['type']){
-  	  	  	if(!isset($r[$modelDir]) ){
-  	  	  	  $r[$modelDir] = array();
-  	  	  	  $f[$modelDir] = array();
+  	  	  	if(!isset($r[$strippedModelDir]) ){
+  	  	  	  $r[$strippedModelDir] = array();
+  	  	  	  $f[$strippedModelDir] = array();
   	  	  	}
-  	  	  	Utils::queryFile($modelFile, $e, $r[$modelDir], $f);
+  	  	  	Utils::queryFile($modelFile, $e, $r[$strippedModelDir], $f);
   	  	  }else{
   	  	  	Utils::queryFile($modelFile, $e, $r, $f);
   	  	  }
@@ -317,13 +321,13 @@ class Utils{
   	  	  $r[$modelDir] = array();
   	  	}
   	  	if($modelDir != $lodspk['type']){
-  	  	  Utils::queryDir($v, $r[$modelDir], $f[$modelDir]);
+  	  	  Utils::queryDir($v, $r[$strippedModelDir], $f[$strippedModelDir]);
   	  	}else{
   	  	  Utils::queryDir($v, $r, $f);
   	  	}
   	  }  	
   	}
-  	chdir($conf['home']);
+  //	chdir($conf['home']);
   	//return $data;
   }
   
@@ -335,7 +339,7 @@ class Utils{
   	global $firstResults;
 	$uri = $lodspk['this']['value'];
   	$data = array();
-  	$strippedModelFile = str_replace('.query', '',$modelFile); 	  
+  	$strippedModelFile = str_replace('endpoint.', '', str_replace('.query', '',$modelFile)); 	  
  	if(!is_dir($modelFile)){
   	  require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
   	  Haanga::configure(array(
@@ -464,14 +468,17 @@ class Utils{
   	  	}  	 
   	  }
   	}else{
-  	  trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE);
-  	  if($modelFile != $lodspk['type']){
-  	  	if(!isset($rPointer[$strippedModelFile])){
-  	  	  $rPointer[$strippedModelFile] = array();
+  	  if(strpos('endpoint.', $modelFile) == 0){
+  	  	
+  	  	trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE);
+  	  	if($modelFile != $lodspk['type']){
+  	  	  if(!isset($rPointer[$strippedModelFile])){
+  	  	  	$rPointer[$strippedModelFile] = array();
+  	  	  }
+  	  	  Utils::queryDir($modelFile, $rPointer[$strippedModelFile], $fPointer[$strippedModelFile]);
+  	  	}else{
+  	  	  Utils::queryDir($modelFile, $rPointer, $fPointer);
   	  	}
-  	  	Utils::queryDir($modelFile, $rPointer[$strippedModelFile], $fPointer[$strippedModelFile]);
-  	  }else{
-  	  	Utils::queryDir($modelFile, $rPointer, $fPointer);
   	  }
   	}
   }
@@ -508,12 +515,12 @@ class Utils{
   	return $array;
   }
   
-  public static function getfirstResultss($array){
+  public static function getfirstResults($array){
   	global $conf;
   	$firstResultsKeyAppearance = true;
   	foreach($array as $key => $value){
   	  if(!isset($value['value'])){
-  	  	$aux = Utils::getfirstResultss($value);
+  	  	$aux = Utils::getfirstResults($value);
   	  	if(isset($aux['0'])){
   	  	  $array[$key] = $aux['0'];
   	  	}else{
@@ -528,6 +535,7 @@ class Utils{
   public static function showView($lodspkData, $data, $view){
   	global $conf;
   	global $uri;
+  	global $lodspk;
   	global $extension;
   	//$lodspk = $conf['view']['standard'];
   	$lodspk = $lodspkData;
@@ -535,8 +543,11 @@ class Utils{
   	  $lodspk['this']['params'] = $lodspkData['params'];
   	}
   	require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
+  	$viewAux = explode("/",$view);
+  	$viewFile = array_pop($viewAux);
+  	$viewPath = join("/", $viewAux);
   	Haanga::configure(array(
-  	  'template_dir' => $lodspk['view'],
+  	  'template_dir' => $conf['home'].$viewPath,
   	  'cache_dir' => $conf['home'].'cache/',
   	  ));
   	$models = $data;
@@ -550,12 +561,13 @@ class Utils{
  	}
 	if(is_string($data)){
 	  echo($data);
-	}elseif(is_file($lodspk['view'].$view)){
-	  Haanga::Load($view, $vars);
+	}elseif(is_file($conf['home'].$view)){
+	  Haanga::Load($viewFile, $vars);
 	}elseif($view == null){
 	  $fnc = Haanga::compile('{{models|safe}}');
 	  $fnc($vars, TRUE);
 	}else{
+	  echo $conf['home'].$viewPath." ".$viewFile;
 	  $fnc = Haanga::compile($view);
 	  $fnc($vars, TRUE);
 	}
diff --git a/classes/modules/serviceModule.php b/classes/modules/serviceModule.php
index d2cb174a..61a4a556 100644
--- a/classes/modules/serviceModule.php
+++ b/classes/modules/serviceModule.php
@@ -13,28 +13,32 @@ class ServiceModule extends abstractModule{
   	if(sizeof($qArr)==0){
   	  return FALSE;
   	}
-  	$extension = Utils::getExtension($acceptContentType); 
-  	$lodspk['model'] = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0].'/';
-  	$lodspk['view'] = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0].'/';
-  	$viewFile  = $extension.".template";
-  	$modelFile = $extension.".queries";
-  	if(file_exists($lodspk['model']) && file_exists($lodspk['view'])){
-  	  if(!file_exists($lodspk['view'].$viewFile)){
-  	  	$viewFile = null;  	  
+  	$extension = Utils::getExtension($acceptContentType);
+  	$viewFile  = null;
+  	
+  	$lodspk['model'] = $conf['model']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/';
+  	$lodspk['view'] = $conf['view']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/'.$extension.'.template';
+  	$modelFile = $lodspk['model'].$extension.'.queries';
+  	if(file_exists($lodspk['model'].$extension.'.queries')){
+  	  if(!file_exists($lodspk['view'])){
+  	  	$viewFile = null;
+  	  }else{
+  	  	$viewFile = $lodspk['view'];
   	  }
-  	  if(file_exists($lodspk['model'].$modelFile) && $qArr[0] != null){
-  	  	trigger_error("Using model ".$modelFile." and view ".$viewFile, E_USER_NOTICE);
-  	  	return array($modelFile, $viewFile);
-  	  }elseif($extension != 'html' && file_exists($lodspk['model'].'/html.queries')){
-  	  	$modelFile = 'html.queries';
-  	  	trigger_error("Using ".$modelFile." as model. It will be used as a CONSTRUCT", E_USER_NOTICE);
-  	  	return array($modelFile, $viewFile);
+  	  return array($modelFile, $viewFile);
+  	}elseif(file_exists($lodspk['model'].'queries')){
+  	  if($extension != 'html'){$lodspk['resultRdf'] = true;}
+ 	  $modelFile = $lodspk['model'].'queries';
+  	  if(!file_exists($lodspk['view'])){
+  	  	$viewFile = null;
   	  }else{
-  	  	Utils::send406($uri);
-  	  	exit(0);
+  	  	$viewFile = $lodspk['view'];
   	  }
+  	  return array($modelFile, $viewFile);
+  	}elseif(file_exists($lodspk['model'])){
+  	  Utils::send406($uri);
+  	  exit(0);
   	}
-  	
   	return FALSE;  
   }
   
@@ -59,7 +63,6 @@ class ServiceModule extends abstractModule{
   	$extension = Utils::getExtension($acceptContentType); 
   	$args = array();
   	list($modelFile, $viewFile) = $service;
-  	
   	try{
   	  $prefixHeader = array();
   	  
@@ -109,14 +112,14 @@ class ServiceModule extends abstractModule{
   	  if($viewFile == null){
   	  	$lodspk['transform_select_query'] = true;
   	  }
-  	  chdir($lodspk['model']);
+  	//  chdir($lodspk['model']);
   	  
   	  Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
       if(!$lodspk['resultRdf']){
       	$results = Utils::internalize($results); 
-      	$lodspk['firstResults'] = Utils::getfirstResultss($results);
+      	$lodspk['firstResults'] = Utils::getfirstResults($results);
       	
-      	chdir($conf['home']);
+    //  	chdir($conf['home']);
       	if(is_array($results)){
       	  $resultsObj = Convert::array_to_object($results);
       	}else{
@@ -128,7 +131,7 @@ class ServiceModule extends abstractModule{
   	  
   	  //Need to redefine viewFile as 'local' i.e., inside service.foo/ so I can load files with the relative path correctly
   	  //$viewFile = $extension.".template";
-  	  chdir($conf['home']);  	  
+  	  //chdir($conf['home']);  	  
   	  Utils::processDocument($viewFile, $lodspk, $results);    	  
   	}catch (Exception $ex){
   	  echo $ex->getMessage();
diff --git a/classes/modules/typeModule.php b/classes/modules/typeModule.php
index 2f5b3f48..0eeae4a9 100644
--- a/classes/modules/typeModule.php
+++ b/classes/modules/typeModule.php
@@ -15,7 +15,7 @@ class TypeModule extends abstractModule{
   	$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);
@@ -68,7 +68,7 @@ class TypeModule extends abstractModule{
   	if($viewFile == null){
   	  $lodspk['transform_select_query'] = true;
   	}
-
+  	
   	$lodspk['type'] = $modelFile;
   	$lodspk['home'] = $conf['basedir'];
   	$lodspk['baseUrl'] = $conf['basedir'];
@@ -78,19 +78,20 @@ class TypeModule extends abstractModule{
   	$lodspk['ns'] = $conf['ns'];
   	$lodspk['endpoint'] = $conf['endpoint'];
   	$lodspk['view'] = $conf['view']['directory'];
-
+  	
   	$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']);
+  	//chdir($conf['home'].$conf['model']['directory']);
+  	
   	Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
     if(!$lodspk['resultRdf']){
   	  $results = Utils::internalize($results); 
-  	  $lodspk['firstResults'] = Utils::getfirstResultss($results);
+  	  $lodspk['firstResults'] = Utils::getfirstResults($results);
   	  
-  	  chdir($conf['home']);
+  	  //chdir($conf['home']);
   	  if(is_array($results)){
   	  	$resultsObj = Convert::array_to_object($results);
   	  }else{
@@ -112,11 +113,6 @@ class TypeModule extends abstractModule{
   	$objResult = array('modelFile' => null, 'viewFile' => null);
   	//Defining default views and models
   	$curieType="";
-/*  	$objResult['modelFile'] = 'main.query';
-  	$objResult['viewFile'] = 'html.template';
-  	$objResult['modelDir'] = $conf['model']['directory'].'type.rdfs:Resource/html.queries/';
-  	$objResult['viewDir'] = $conf['view']['directory'].'type.rdfs:Resource/'; 
-  */	
  	//Get the firstResults type available
   	$typesAndValues = array('rdfs:Resource' => -1);
   	if($conf['disableComponents'] != true){
@@ -129,34 +125,38 @@ class TypeModule extends abstractModule{
   	  }
   	}
   	arsort($typesAndValues);
+  	$extensionView = $extension.".";
+  	$extensionModel = '';
+  	if($extension != 'html'){
+  	  $extensionModel = $extension.'.';
+  	}
   	foreach($typesAndValues as $v => $w){
-  	  $auxModelFile = $conf['model']['directory'].$conf['type']['prefix'].$v.'/'.$extension.'.queries';
-  	  $auxViewFile = $conf['view']['directory'].$conf['type']['prefix'].$v.'/'.$extension.'.template'; 
+  	  $auxViewFile  = $conf['view']['directory'].'/'.$conf['type']['prefix'].'/'.$v.'/'.$extension.'.template';
+  	  $auxModelFile = $conf['model']['directory'].'/'.$conf['type']['prefix'].'/'.$v.'/'.$extension.'.queries';
   	  if($v == null){continue;}
   	  if(file_exists($auxModelFile)){
-  	  	$objResult['modelFile'] = $conf['type']['prefix'].$v.'/'.$extension.'.queries';
+  	  	$objResult['modelFile'] = $auxModelFile;//$conf['type']['prefix'].'/'.$v.'/'.$extensionModel.'queries';
   	  	if(file_exists($auxViewFile)){
-  	  	  $objResult['viewFile'] = $conf['type']['prefix'].$v.'/'.$extension.'.template';
+  	  	  $objResult['viewFile'] = $auxViewFile;//$conf['type']['prefix'].'/'.$v.'/'.$extensionView.'template';
   	  	}elseif($extension != 'html'){ //View doesn't exists (and is not HTML)
-  	  	  $objResult['viewFile'] = null;  	  	
+  	  	  $objResult['viewFile'] = null;
   	  	}
   	  	return $objResult;
-  	  }elseif($extension != 'html' &&
-  	  	file_exists($conf['model']['directory'].$conf['type']['prefix'].$v.'/html.queries')){
-	  $objResult['modelFile'] = $conf['type']['prefix'].$v.'/html.queries';
-  	  if(file_exists($auxViewFile) ){
-  	  	$objResult['viewFile'] = $conf['type']['prefix'].$v.'/'.$extension.'.template';
-  	  }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;
+  	  }elseif(file_exists($conf['model']['directory'].'/'.$conf['type']['prefix'].'/'.$v.'/queries')){
+  	  	$objResult['modelFile'] = $conf['model']['directory'].'/'.$conf['type']['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;
+  	  }
   	}
-  	if($objResult['viewFile'] == null && $extension == 'html'){
+  	/*if($objResult['viewFile'] == null && $extensionView == 'html'){
   	  $objResult['viewFile'] = 'html.template';
-  	}
+  	}*/
   	return $objResult;
   }
   
diff --git a/classes/modules/uriModule.php b/classes/modules/uriModule.php
index 73d55aa5..67d834a9 100644
--- a/classes/modules/uriModule.php
+++ b/classes/modules/uriModule.php
@@ -16,9 +16,7 @@ class UriModule extends abstractModule{
   	}
   	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);
@@ -34,7 +32,6 @@ class UriModule extends abstractModule{
   	$extension = Utils::getExtension($pair[2]); 
   	$curie = Utils::uri2curie($pair[0]);
   	list($modelFile, $viewFile) = $this->getModelandView($curie, $extension);
-  	
   	if($modelFile == NULL){
   	  return FALSE;
   	}
@@ -89,24 +86,25 @@ class UriModule extends abstractModule{
   	//$lodspk = $conf['view']['standard'];
 
   	$lodspk['type'] = $modelFile;
+  	  	$lodspk['home'] = $conf['basedir'];
+
   	$lodspk['module'] = 'uri';
   	$lodspk['add_mirrored_uris'] = true;
   	$lodspk['this']['value'] = $uri;
   	$lodspk['this']['curie'] = Utils::uri2curie($uri);
   	$lodspk['local']['value'] = $localUri;
   	$lodspk['local']['curie'] = Utils::uri2curie($localUri);
-  	
-  	$lodspk['this']['contentType'] = $acceptContentType;
+  	$lodspk['contentType'] = $acceptContentType;
   	$lodspk['model'] = $conf['model']['directory'];
   	$lodspk['view'] = $conf['view']['directory'];
   	$lodspk['ns'] = $conf['ns'];
   	
   	
-  	chdir($conf['home'].$conf['model']['directory']);
+  	//chdir($conf['home'].$conf['model']['directory']);
   	Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
   	if(!$lodspk['resultRdf']){
   	  $results = Utils::internalize($results); 
-  	  $lodspk['firstResults'] = Utils::getfirstResultss($results);
+  	  $lodspk['firstResults'] = Utils::getfirstResults($results);
   	  
   	  chdir($conf['home']);
   	  if(is_array($results)){
@@ -117,7 +115,7 @@ class UriModule extends abstractModule{
   	}else{
   	  $resultsObj = $results;
   	}
-  	chdir($conf['home']);
+  	//chdir($conf['home']);
   	if($conf['debug']){
   	  trigger_error("Using template ".$viewFile, E_USER_NOTICE);
   	  echo("TEMPLATE: ".$viewFile."\n\n");
@@ -129,14 +127,14 @@ class UriModule extends abstractModule{
   private static function getModelandView($uri, $extension){  	
   	global $conf;
   	global $lodspk;
-  	$auxViewFile  = $conf['view']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.template';
-  	$auxModelFile = $conf['model']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
- 	if(file_exists($auxModelFile)){
+  	$auxViewFile  = $conf['view']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/'.$extension.'.template';
+  	$auxModelFile = $conf['model']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/'.$extension.'.queries';
+  	if(file_exists($auxModelFile)){
  	  //Model exists
-  	  $modelFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
+  	  $modelFile = $auxModelFile;//$conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
   	  if(file_exists($auxViewFile) ){
   	  	//View exists, everything is fine
-  	  	$viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template';
+  	  	$viewFile = $conf['model']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/'.$extension.'.template';
   	  }elseif($extension != 'html'){
   	  	//View doesn't exists (and is not HTML)
   	  	$viewFile = null;  	  	
@@ -145,11 +143,11 @@ class UriModule extends abstractModule{
   	  	return array(null, null);
   	  }
   	  return array($modelFile, $viewFile);
-  	}elseif($extension != 'html' && file_exists($conf['model']['directory'].$conf['uri']['prefix'].$uri.'/html.queries')){
-  	  $modelFile = $conf['uri']['prefix'].$uri.'/html.queries';
-  	  if(file_exists($auxViewFile) ){
+  	}elseif(file_exists($conf['model']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/queries')){
+  	  $modelFile = $conf['model']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/queries';//$conf['uri']['prefix'].$uri.'/html.queries';
+	  if(file_exists($auxViewFile) ){
   	  	//View exists, everything is fine
-  	  	$viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template';
+  	  	$viewFile = $conf['model']['directory'].'/'.$conf['uri']['prefix'].'/'.$uri.'/'.$extension.'.template';
   	  }elseif($extension != 'html'){
   	  	//View doesn't exists (and is not HTML)
   	  	$lodspk['transform_select_query'] = true;
@@ -157,6 +155,7 @@ class UriModule extends abstractModule{
   	  }
   	  return array($modelFile, $viewFile);
   	}
+
   	return array(NULL, NULL);
   }
   
diff --git a/common.inc.php b/common.inc.php
index a51c4f69..0c99dd1b 100644
--- a/common.inc.php
+++ b/common.inc.php
@@ -12,11 +12,11 @@ $conf['metadata']['db']['location'] = 'meta/db.sqlite';
 
 include_once('namespaces.php');
 
-$conf['model']['directory'] = 'models/'; #include trailing slash!
+$conf['model']['directory'] = 'components'; #include trailing slash!
 $conf['model']['extension'] = '.model';
 $conf['model']['default'] = 'rdfs:Resource';
 
-$conf['view']['directory'] = 'views/'; #include trailing slash!
+$conf['view']['directory'] = 'components'; #include trailing slash!
 $conf['view']['extension'] = '.view';
 $conf['view']['default'] = 'rdfs:Resource';
 
@@ -32,11 +32,11 @@ $conf['http_accept']['json'] = array('application/json', 'application/x-javascri
 $conf['http_accept']['nt']   = array('text/plain');
 
 
-$conf['service']['prefix'] = 'service.';
+$conf['service']['prefix'] = 'services';
 $conf['service']['class'] = 'classes/BasicSpecialFunction.php';
 
-$conf['type']['prefix'] = 'type.';
-$conf['uri']['prefix'] = 'uri.';
+$conf['type']['prefix'] = 'types';
+$conf['uri']['prefix'] = 'uris';
 
 //Frontpage when user goes to http://example.org/
 $conf['root'] = 'index.html';
diff --git a/components/includes/header.inc b/components/includes/header.inc
new file mode 100644
index 00000000..2c90255a
--- /dev/null
+++ b/components/includes/header.inc
@@ -0,0 +1,5 @@
+<h4>Endpoint: {{lodspk.endpoint.local}}</h4>
+<div style='float:center'>
+<a href='{{lodspk.home}}'>Home</a> | <a href='{{lodspk.home}}classes'>Classes</a> | <a href='{{lodspk.home}}namedGraphs'>Named Graphs</a>
+</div>
+
diff --git a/components/services/classes/html.template b/components/services/classes/html.template
new file mode 100644
index 00000000..b93ea0f5
--- /dev/null
+++ b/components/services/classes/html.template
@@ -0,0 +1,19 @@
+<?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 lodspk.ns %}xmlns:{{i}}="{{ns}}" 
+    {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
+  <head>
+    <title>My new Service</title>
+    <link href="css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+  </head>
+  <body>
+    <h1>Classes available</h1>
+{%include "../../includes/header.inc"%}
+	<ul>
+    {% for row in models.main %}
+        <li><a href="{{lodspk.baseUrl}}instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li>
+    {% endfor %}
+    </ul>
+  </body>
+</html>
diff --git a/components/services/classes/queries/main.query b/components/services/classes/queries/main.query
new file mode 100644
index 00000000..0157430d
--- /dev/null
+++ b/components/services/classes/queries/main.query
@@ -0,0 +1,12 @@
+{%for h in base.header %}
+PREFIX {{h.prefix}}: <{{h.ns}}>
+{%endfor%}
+SELECT DISTINCT ?resource WHERE {
+  {
+    {%if base.args.arg0 %}GRAPH <{{base.args.arg0}}>{%else%} GRAPH ?g {%endif%} {
+    	?x a ?resource .
+    }
+  }UNION{
+    ?x a ?resource .
+  }
+}order by ?resource
diff --git a/components/services/instances/html.queries/main.query b/components/services/instances/html.queries/main.query
new file mode 100644
index 00000000..a93cf367
--- /dev/null
+++ b/components/services/instances/html.queries/main.query
@@ -0,0 +1,13 @@
+{%for h in lodspk.header %}
+PREFIX {{h.prefix}}: <{{h.ns}}>
+{%endfor%}
+SELECT DISTINCT ?resource WHERE {
+  {
+    GRAPH ?g{
+      ?resource a {{lodspk.args.arg0}}
+    }
+  }UNION{
+      ?resource a {{lodspk.args.arg0}}
+  }
+}order by ?resource
+limit 1000
diff --git a/components/services/instances/html.template b/components/services/instances/html.template
new file mode 100644
index 00000000..1dc603e1
--- /dev/null
+++ b/components/services/instances/html.template
@@ -0,0 +1,19 @@
+<?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>Instances of {{lodspk.args.arg0}}</title>
+    <link href="../css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+  </head>
+  <body>
+    <h1>Instances of class {{lodspk.args.arg0}}</h1>
+{%include "../../includes/header.inc"%}
+	<ul>
+    {% for row in models.main %}
+        <li><a href="{{ row.resource.value }}">{{row.resource.curie}}</a></li>
+    {% endfor %}
+    </ul>
+  </body>
+</html>
diff --git a/components/services/namedGraphs/html.template b/components/services/namedGraphs/html.template
new file mode 100644
index 00000000..e6109aef
--- /dev/null
+++ b/components/services/namedGraphs/html.template
@@ -0,0 +1,19 @@
+<?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>Named Graphs</title>
+    <link href="css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+  </head>
+  <body>
+    <h1>Named graphs available</h1>
+{%include "../../includes/header.inc"%}
+	<ul>
+    {% for row in models.main %}
+        <li>{{row.g.value}}</li>
+    {% endfor %}
+    </ul>
+  </body>
+</html>
diff --git a/components/services/namedGraphs/queries/main.query b/components/services/namedGraphs/queries/main.query
new file mode 100644
index 00000000..c0ec090e
--- /dev/null
+++ b/components/services/namedGraphs/queries/main.query
@@ -0,0 +1,6 @@
+SELECT DISTINCT ?g WHERE {
+  GRAPH ?g{
+  	[] ?p ?resource .
+  }
+}
+ order by ?g
diff --git a/components/types/rdfs:Resource/html.template b/components/types/rdfs:Resource/html.template
new file mode 100644
index 00000000..7dd111f2
--- /dev/null
+++ b/components/types/rdfs:Resource/html.template
@@ -0,0 +1,52 @@
+<?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 lodspk.ns %}xmlns:{{i}}="{{ns}}" 
+    {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
+    <head>
+    <title>Page about {{lodspk.this.value}}</title>
+    <link href="{{lodspk.home}}css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+    <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{lodspk.this.value}}.rdf" />
+    <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{lodspk.this.value}}.ttl" />
+    <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{lodspk.this.value}}.nt" />
+    <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{lodspk.this.value}}.json" />
+  </head>
+  <body about="{{lodspk.this.value}}">
+    <h1>Default view</h1>
+
+    <div style='margin-top: 40px'>
+    <table>
+    <tr><th>Subject</th><th>Predicate</th><th>Object</th></tr>
+    {% for row in models.po %}
+     <tr>
+<td>{%if forloop.first%}<a href='{{lodspk.this.value}}'>{{lodspk.this.curie}}</a>{%endif%}</td>
+     <td style='background-color:#c9f9c9'><a href='{{row.p.value}}'>{{row.p.curie}}</a></td>
+     
+        <td style='background-color:#c9f9c9'>
+        {%if row.o.uri == 1%}
+        <a rev='[{{row.p.curie}}]' href='{{row.o.value}}'>{{row.o.curie}}</a>
+        {%else%}
+        {{row.o.value}}
+        {%endif%}
+        </td>
+
+        </tr>
+    {% endfor %}
+<tr><td></td><td><a href='{{lodspk.this.value}}'>{{lodspk.this.curie}}</a></td><td></td></tr>
+
+    {% for row in models.sp %}
+      <tr>
+        <td style='background-color:#c9f9c9'><a href='{{row.s.value}}'>{{row.s.curie}}</a></td>
+
+        <td style='background-color:#c9f9c9'><a rel='{{row.s.curie}}' href='{{row.p.value}}'>{{row.p.curie}}</a></td>
+<td>{%if forloop.first%}<a href='{{lodspk.this.value}}'>{{lodspk.this.curie}}</a>{%endif%}</td>
+        </tr>
+    {% endfor %}
+    <tr><th>Subject</th><th>Predicate</th><th>Object</th></tr>
+
+    </table>
+    </div>    
+    
+    <br/>
+  </body>
+</html>
diff --git a/components/types/rdfs:Resource/queries/po.query b/components/types/rdfs:Resource/queries/po.query
new file mode 100644
index 00000000..f573aab3
--- /dev/null
+++ b/components/types/rdfs:Resource/queries/po.query
@@ -0,0 +1,9 @@
+SELECT ?p ?o  WHERE {
+  {
+    GRAPH ?g{
+                <{{uri}}> ?p ?o.
+    }
+  }UNION{     
+                <{{uri}}> ?p ?o .
+  }
+}
diff --git a/components/types/rdfs:Resource/queries/sp.query b/components/types/rdfs:Resource/queries/sp.query
new file mode 100644
index 00000000..3b5b69fb
--- /dev/null
+++ b/components/types/rdfs:Resource/queries/sp.query
@@ -0,0 +1,9 @@
+SELECT ?s ?p  WHERE {
+  {
+    GRAPH ?g{
+                ?s ?p <{{uri}}> .
+    }
+  }UNION{     
+                ?s ?p <{{uri}}> .
+  }
+}
diff --git a/index.php b/index.php
index 087d7a1c..07cce5f9 100755
--- a/index.php
+++ b/index.php
@@ -84,7 +84,7 @@ foreach($conf['modules']['available'] as $i){
   }
   require_once($currentModule);
   $module = new $className();
-  $matching = $module->match($uri) ;
+  $matching = $module->match($uri);
   if($matching != FALSE){
   	$module->execute($matching);
   	exit(0);
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php
index 08faea9a..92e36635 100644
--- a/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php
@@ -50,6 +50,7 @@ class Haanga_Extension_Filter_Googlemaps{
   	$pre = "<div id='map_canvas_".$randId."' style='width: ".$w."px; height: ".$h."px'></div><script type='text/javascript'
   	src='http://maps.googleapis.com/maps/api/js?sensor=false'></script>
     <script type='text/javascript'>
+    <![CDATA[
     function initialize() {
 	  var myOptions = {
 	  zoom: 4,
@@ -88,6 +89,7 @@ class Haanga_Extension_Filter_Googlemaps{
     }
         
     google.maps.event.addDomListener(window, 'load', initialize);
+    ]]>
     </script>";
     return $pre;
   }
-- 
GitLab