Skip to content
Snippets Groups Projects
index.php 3.09 KiB
<?
if(!file_exists('settings.inc.php')){
  echo 'Need to configure lodspeakr first. Please run "install.sh" first';
  exit(0);
}
include_once('common.inc.php');

include_once('classes/Utils.php');
include_once('classes/Queries.php');
include_once('classes/Endpoint.php');
include_once('classes/MetaDb.php');


$endpoint = new Endpoint($conf['endpoint']['host'], $conf['endpoint']['config']);
$metaDb = new MetaDb($conf['metadata']['db']['location']);

$uri =  $conf['basedir'].$_GET['q'];
if($uri == $conf['basedir']){
  //TODO: A better frontpage
  echo "root";
  return;
}

$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
$extension = Utils::getExtension($acceptContentType); 
if($acceptContentType == NULL){
  Utils::send406($uri);
}
$pair = Queries::getMetadata($uri, $acceptContentType, $metaDb);

	if($pair == NULL){ // Original URI is not in metadata
		if(Queries::uriExist($uri, $endpoint)){
			$page = Queries::createPage($uri, $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 == $uri){
    Utils::send303($page, $acceptContentType);
  }

  $uri = $res;
  $curieType = Utils::uri2curie(Queries::getClass($uri, $endpoint));
  
  /*Redefine Content type based on the
   * dcterms:format for this page
   */
  $acceptContentType = $format;
  $extension = Utils::getExtension($acceptContentType); 

  //Check if files for model and view exist
  $viewFile = $conf['view']['directory'].$curieType.$conf['view']['extension'].".".$extension;
  $modelFile = $conf['model']['directory'].$curieType.$conf['model']['extension'].".".$extension;
  if(!file_exists($modelFile) || !file_exists($viewFile) || $curieType == null){
  	$modelFile = $conf['model']['directory'].$conf['model']['default'].$conf['model']['extension'].".".$extension;
  	$viewFile = $conf['view']['directory'].$conf['view']['default'].$conf['view']['extension'].".".$extension;
  }
  
  $query = file_get_contents($modelFile);
  $query = preg_replace("|".$conf['resource']['url_delimiter']."|", "<".$uri.">", $query);
  header('Content-Type: '.$acceptContentType);
  if(preg_match("/describe/i", $query)){
  	$results = $endpoint->query($query, $conf['endpoint']['describe']['output']);
  	require('lib/arc2/ARC2.php');
  	$parser = ARC2::getRDFParser();
  	$parser->parse($conf['basedir'], $results);
  	$triples = $parser->getTriples();
  	$ser;
  	switch ($extension){
  	case 'ttl':
  	  $ser = ARC2::getTurtleSerializer();
  	  break;
  	case 'nt':
  	  $ser = ARC2::getNTriplesSerializer();
  	  break;
  	case 'rdf':
  	  $ser = ARC2::getRDFXMLSerializer();
  	  break;
  	}
  	$doc = $ser->getSerializedTriples($triples);
  	echo $doc;
  	exit(0);
  }
  elseif(preg_match("/select/i", $query)){
  	$results = $endpoint->query($query, $conf['endpoint']['select']['output']);
  	if(sizeof($results['results']['bindings']) == 0){
  	  Utils::send404($uri);
  	}
  }
  Utils::showView($uri, $results, $viewFile);
  
  exit(0);
//}

?>