Skip to content
Snippets Groups Projects
Utils.php 16.6 KiB
Newer Older
<? 

class Utils{
  public static function uri2curie($uri){
  	global $conf;
  	$ns = $conf['ns'];
  	$curie = $uri;
  	foreach($ns as $k => $v){
  	  $aux = preg_replace("|^$v|", "", $uri);
  	  if($aux != $uri){
  	  	$uriSegments = explode("/", $aux);
  	  	$lastSegment = array_pop($uriSegments);
  	  	if(sizeof($uriSegments)>0){
  	  	  $prefix = $k."_".(implode("_", $uriSegments));
  	  	  //Adding "new" namespace
  	  	  $conf['ns'][$prefix] = $v.implode("/", $uriSegments)."/";
  	  	}else{
  	  	  $prefix = $k;
  	  	}
  	  	$curie = $prefix.":".$lastSegment;
  	  	break;
  	}
  	return $curie;
  }
  
Alvaro Graves's avatar
Alvaro Graves committed
  public static function curie2uri($curie){
  	global $conf;
  	$ns = $conf['ns'];
  	$parts = explode(':', $curie);
  	//Avoid if we have a namespace prefix called 'http'
  	if(preg_match('|^//|', $parts[1])){
  	  return $curie;
  	}  	
  	if(sizeof($parts)>1 ){
  	  if(!isset($ns[$parts[0]])){
  		$prefixSegments = explode("_", $parts[0]);
  		$realPrefix = array_shift($prefixSegments);
  		$conf['ns'][$parts[0]] = $ns[$realPrefix].join("/", $prefixSegments);
  		return $ns[$realPrefix].join("/", $prefixSegments)."/".$parts[1];
  	  }else{
  	  	return $ns[$parts[0]].$parts[1];
  	  }
  	}else{
  	  return $curie;
  	}
Alvaro Graves's avatar
Alvaro Graves committed
  }
  
  public static function getPrefix($curie){
  	global $conf;
  	$ns = $conf['ns'];
  	$parts = explode(':', $curie);
  	//Avoid if we have a namespace prefix called 'http'
  	if(preg_match('|^//|', $parts[1])){
  	  return $curie;
  	}  	
  	return array('ns' => $ns[$parts[0]], 'prefix' => $parts[0]);
  public static function getTemplate($uri){
  	$filename = str_replace(":", "_", $uri);
  	if(file_exists ($filename)){
  	  include_once($filename);
  	}
  }
  
  private static function sparqlResult2Obj($data){
  	$obj = array();
alangrafu's avatar
alangrafu committed
  	if(!isset($data['results'])){
  	  foreach($data as $k => $v){
  	  	$obj[$k] = Utils::sparqlResult2Obj($v);
  	  }
  	}else{
alangrafu's avatar
alangrafu committed
  	  $aux = $data['results']['bindings'];
  	  if(sizeof($aux)>0){
  	  	foreach($aux as $w){
  	  	  $row = array();
  	  	  foreach($w as $k => $v){
alangrafu's avatar
alangrafu committed
  	  	  	$row[$k]['value'] = $v['value'];
alangrafu's avatar
alangrafu committed
  	  	  	  $row[$k]['curie'] = Utils::uri2curie($v['value']);
  	  	  	  $row[$k]['uri'] = 1;
alangrafu's avatar
alangrafu committed
  	  	  	  $row[$k]['curie'] = 'blankNode';
  	  	  	}  	  	  	
alangrafu's avatar
alangrafu committed
  	  	  /*if(sizeof($aux) == 1){
  	  	  $obj = $row;
  	  	  }*/
  	  	  if(sizeof($row) >0){
  	  	  	array_push($obj, $row);
  	  	  }
alangrafu's avatar
alangrafu committed
  	  	  
alangrafu's avatar
alangrafu committed
  
  
  public static function getExtension($accept_string){
  	global $conf;
  	foreach($conf['http_accept'] as $ext => $accept_arr){
  	  if(in_array($accept_string, $accept_arr)){
  	    $extension = $ext;
  	  }
  	return $extension;
  public static function getBestContentType($accept_string){
  	global $conf;
  	$b = array();
  	foreach($a as $v){
alangrafu's avatar
alangrafu committed
  	  foreach($conf['http_accept'] as $formatTypeArray){
  	  	if(strstr($v, ";")){
  	  	  $aux = explode(";q=", $v);
  	  	  if(in_array($aux[0], $formatTypeArray)){
  	  	  	$b[$aux[0]] = $aux[1];
  	  	  }
alangrafu's avatar
alangrafu committed
  	  	}else{
  	  	  if(in_array($v, $formatTypeArray)){
  	  	  	$b[$v] = 1;
  	  	  }
Alvaro Graves's avatar
Alvaro Graves committed
  	$ct = 'text/html';
  	foreach($a as $k => $v){
  	  $ct = $k;
  	  break;
Alvaro Graves's avatar
Alvaro Graves committed
  	}
  	if($ct == NULL || $ct == "" || $ct == "*/*"){
  	  $ct = 'text/html';
Alvaro Graves's avatar
Alvaro Graves committed
  	}
  	return $ct;
alangrafu's avatar
alangrafu committed
  
alangrafu's avatar
alangrafu committed
  
  private static function travelTree($tree){
  	$results = array();
  	if(is_string($tree)){
  	  return $tree;
  	}
  	foreach($tree as $t){
  	  $aux = Utils::travelTree($t);
  	  if(is_array($aux)){
  	  	$results = array_merge($results, $aux);
  	  }else{
  	  	array_push($results, $aux);
  	  }
  	}
  	return $results;
  }
  
  
  public static function serializeRdf($data, $extension='rdf'){
alangrafu's avatar
alangrafu committed
  	$ser;
  	$dPointer;
  	$docs = Utils::travelTree($data);
alvaro's avatar
alvaro committed
  	require_once($conf['home'].'lib/arc2/ARC2.php');
alangrafu's avatar
alangrafu committed
  	$parser = ARC2::getRDFParser();
alangrafu's avatar
alangrafu committed
  	 $triples = array();
  	 
  	foreach($docs as $d){
  	  $parser->parse($conf['basedir'], $d);
  	  $t = $parser->getTriples();
  	  $triples = array_merge($triples, $t);
  	}
alvaro's avatar
alvaro committed
  	if($lodspk['mirror_external_uris']){
alangrafu's avatar
alangrafu committed
  	  global $uri;
  	  global $localUri;
  	  $t = array();
alangrafu's avatar
alangrafu committed
  	  $t['s']      = $localUri;
alangrafu's avatar
alangrafu committed
  	  $t['s_type'] = 'uri';
  	  $t['p']      = "http://www.w3.org/2002/07/owl#sameAs";
alangrafu's avatar
alangrafu committed
  	  $t['o']      = $uri;
alangrafu's avatar
alangrafu committed
  	  $t['o_type'] = 'uri';  	 
  	  array_push($triples, $t);
  	  $t['p']      = "http://www.w3.org/2000/10/swap/pim/contact#preferredURI";
  	  array_push($triples, $t);
  	}
alangrafu's avatar
alangrafu committed
  	switch ($extension){
  	case 'ttl':
  	  $ser = ARC2::getTurtleSerializer();
  	  break;
  	case 'nt':
  	  $ser = ARC2::getNTriplesSerializer();
  	  break;
alangrafu's avatar
alangrafu committed
  	case 'json':
  	  $ser = ARC2::getRDFJSONSerializer();
  	  break;
alangrafu's avatar
alangrafu committed
  	case 'rdf':
  	  $ser = ARC2::getRDFXMLSerializer();
  	  break;
  	default:
  	  $ser = null;
alangrafu's avatar
alangrafu committed
  	}
  	if($ser != null){
alangrafu's avatar
alangrafu committed
  	$doc = $ser->getSerializedTriples($triples);
  	}else{
  	$doc = var_export($data, true);
  	}
alangrafu's avatar
alangrafu committed
  	return $doc;
  public static function processDocument($viewFile, $lodspk, $data){
alvaro's avatar
alvaro committed
  	global $lodspk;
alvaro's avatar
alvaro committed
  	$contentType = $lodspk['contentType'];
  	$extension = Utils::getExtension($contentType); 
  	header('Content-Type: '.$contentType);
alvaro's avatar
alvaro committed
  	if(isset($lodspk['resultRdf']) && $lodspk['resultRdf'] == true){
  	  echo Utils::serializeRdf($data, $extension);
  	}else{
  	  Utils::showView($lodspk, $data, $viewFile);  	
  	}
Alvaro Graves's avatar
Alvaro Graves committed
  }
  
  public static function getResultsType($query){
  	global $conf;
  	if(preg_match("/select/i", $query)){
  	  return $conf['output']['select'];
Alvaro Graves's avatar
Alvaro Graves committed
  	}elseif(preg_match("/describe/i", $query)){
  	  return $conf['output']['describe'];
Alvaro Graves's avatar
Alvaro Graves committed
  	}elseif(preg_match("/construct/i", $query)){
  	  return $conf['output']['describe'];
Alvaro Graves's avatar
Alvaro Graves committed
  	}else{
  	  HTTPStatus::send500(null);
alangrafu's avatar
alangrafu committed
  public static function queryDir($modelDir, &$r, &$f){
alangrafu's avatar
alangrafu committed
  	global $endpoints;
  	global $results;
alvaro's avatar
alvaro committed
  	$strippedModelDir = str_replace('endpoint.', '', $modelDir); 	  
alvaro's avatar
alvaro committed
  	$lodspk['model'] = $modelDir;
Alvaro Graves's avatar
Alvaro Graves committed
  	$subDirs= array();
alvaro's avatar
alvaro committed
  	trigger_error("Entering $strippedModelDir from ".getcwd(), E_USER_NOTICE);
  	chdir($modelDir);
  	$handle = opendir('.');
alangrafu's avatar
alangrafu committed
  	
  	while (false !== ($modelFile = readdir($handle))) {
  	  if($modelFile != "." && $modelFile != ".." && strpos($modelFile, ".") !== 0){
alvaro's avatar
alvaro committed
  	  	  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;
  	  	  }
  	  	  if(preg_match('/\.query$/', $modelFile)){
  	  	    $e = null;
  	  	    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[$strippedModelDir] = new Endpoint($conf['endpoint'][$strippedModelDir], $conf['endpoint']['config']);
  	  	        $e = $endpoints[$strippedModelDir];
  	  	      }
  	  	    }else{
  	  	      $e = $endpoints[$strippedModelDir];
  	  	    }
  	  	    if($modelDir != $lodspk['type']){
  	  	      if(!isset($r[$strippedModelDir]) ){
  	  	        $r[$strippedModelDir] = array();
  	  	        $f[$strippedModelDir] = array();
  	  	      }
  	  	      Utils::queryFile($modelFile, $e, $r[$strippedModelDir], $f);
  	  	    }else{
  	  	      Utils::queryFile($modelFile, $e, $r, $f);
  	  	    }
alangrafu's avatar
alangrafu committed
  	  	  }
alangrafu's avatar
alangrafu committed
  	  }
  	}
  	closedir($handle);
alvaro's avatar
alvaro committed
  	$originalDir = $lodspk['model'];
Alvaro Graves's avatar
Alvaro Graves committed
  	if(isset($subDirs)){
alangrafu's avatar
alangrafu committed
  	  foreach($subDirs as $v){
  	  	if(!isset($r[$modelDir])){
  	  	  $r[$modelDir] = array();
  	  	}
  	  	if($modelDir != $lodspk['type']){
alvaro's avatar
alvaro committed
  	  	  Utils::queryDir($v, $r[$strippedModelDir], $f[$strippedModelDir]);
alangrafu's avatar
alangrafu committed
  	  	}else{
  	  	  Utils::queryDir($v, $r, $f);
alangrafu's avatar
alangrafu committed
  	  	}
  	  }  	
  	}
alvaro's avatar
alvaro committed
  //	chdir($conf['home']);
alangrafu's avatar
alangrafu committed
  	//return $data;
  }
  
  
alangrafu's avatar
alangrafu committed
  public static function queryFile($modelFile, $e, &$rPointer, &$fPointer){
alangrafu's avatar
alangrafu committed
  	global $conf;
alangrafu's avatar
alangrafu committed
  	global $results;
  	global $firstResults;
	$uri = $lodspk['this']['value'];
alangrafu's avatar
alangrafu committed
  	$data = array();
alvaro's avatar
alvaro committed
  	$strippedModelFile = str_replace('endpoint.', '', str_replace('.query', '',$modelFile)); 	  
alangrafu's avatar
alangrafu committed
 	if(!is_dir($modelFile)){
  	  require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
  	  Haanga::configure(array(
  	  	'cache_dir' => $conf['home'].'cache/',
  	  	'autoescape' => FALSE,
  	  	));
  	  
  	  //Haanga supports the dot (.) convention only for objects
  	  if(is_array($lodspk)){
  	  	$lodspkObj = Convert::array_to_object($lodspk);
  	    $lodspk = $lodspkObj;
alangrafu's avatar
alangrafu committed
  	  }
alangrafu's avatar
alangrafu committed
  	  $r2 = Convert::array_copy($results);
  	  $models = Convert::array_to_object($r2);
  	  $f2 = Convert::array_copy($firstResults);
  	  $first = Convert::array_to_object($f2);
 	  $vars = compact('uri', 'lodspk', 'models', 'first');
alvaro's avatar
alvaro committed
 	  $q = file_get_contents($modelFile);
 	  if($q == false){
 	  	HTTPStatus::send500("I can't load ".$modelFile." in ".getcwd());
alvaro's avatar
alvaro committed
 	  }
 	  $fnc = Haanga::compile($q);
alangrafu's avatar
alangrafu committed
  	  $query = $fnc($vars, TRUE);
alangrafu's avatar
alangrafu committed
  	  
  	  if(is_object($lodspk)){
  	  	$lodspkObj = Convert::object_to_array($lodspk);
  	    $lodspk = $lodspkObj;
alangrafu's avatar
alangrafu committed
  	  }
alangrafu's avatar
alangrafu committed
  	  
  	  if($lodspk['transform_select_query']==true){
alangrafu's avatar
alangrafu committed
  	  	include_once($conf['home'].'lib/arc2/ARC2.php');
  	  	$parser = ARC2::getSPARQLParser();
  	  	$parser->parse($query);
  	  	$sparqlConstruct = array();
  	  	if (!$parser->getErrors()) {
  	  	  $resultVars = array();
  	  	  $q_infos = $parser->getQueryInfos();
  	  	  foreach($q_infos['query']['result_vars'] as $v){
  	  	  	if($v['type'] == 'var'){
  	  	  	  $resultVars[$v['value']] = 1;
  	  	  	}
  	  	  };
  	  	  $x = Utils::extractObj($q_infos['query']['pattern']);
alangrafu's avatar
alangrafu committed
  	  	  foreach($x as $v){
  	  	  	if(($resultVars[$v['s']] && $v['s_type'] == 'var')
  	  	  	  || ($resultVars[$v['p']] && $v['p_type'] == 'var')
	  	  	|| ($resultVars[$v['o']] && $v['o_type'] == 'var')){
	  	  	array_push($sparqlConstruct, $v);
	  	  	}	  	  
	  	  }
	  	  $construct = "";
	  	  foreach($sparqlConstruct as $v){
	  	  	if($v['s_type'] == 'uri'){
	  	  	  $construct .= "<".$v['s']."> ";
	  	  	}elseif($v['s_type'] == 'var'){
	  	  	  $construct .= '?'.$v['s'].' ';
	  	  	}else{
	  	  	  $construct.= $v['s']." ";
	  	  	}
	  	  	
	  	  	if($v['p_type'] == 'uri'){
	  	  	  $construct .= "<".$v['p']."> ";
	  	  	}elseif($v['p_type'] == 'var'){
	  	  	  $construct .= '?'.$v['p'].' ';
	  	  	}else{
	  	  	  $construct.= $v['p']." ";
	  	  	}
	  	  	
	  	  	if($v['o_type'] == 'uri'){
	  	  	  $construct .= "<".$v['o']."> ";
	  	  	}elseif($v['o_type'] == 'literal'){
	  	  	  $construct .= '"'.$v['o'].'" ';
	  	  	}elseif($v['o_type'] == 'var'){
	  	  	  $construct .= '?'.$v['o'].' ';
	  	  	}else{
	  	  	  $construct.= $v['o']." ";
	  	  	}
	  	  	
	  	  	$construct .= ".\n";
	  	  }
	  	  if($construct == ""){
	  	  	if(sizeof($q_infos['query']['result_vars'])>0){
	  	  	  //For now, assuming variables are in the GRAPH ?g
	  	  	  $query = "CONSTRUCT {?g ?x ?y} WHERE{GRAPH ?g{?g ?x ?y}}";
	  	  	}else{
	  	  	  HTTPStatus::send500();
	  	  	$query = preg_replace('/select\n?.*\n?where/i', 'CONSTRUCT {'.$construct.'} WHERE', $query);
alangrafu's avatar
alangrafu committed
	  	}else {
	  	  HTTPStatus::send500("invalid query: " . $parser->getErrors());
alangrafu's avatar
alangrafu committed
	  	}
	  }
  	  	echo "\n-------------------------------------------------\nIn ".getcwd()."\n";
  	    echo "$modelFile (against ".$e->getSparqlUrl().")\n-------------------------------------------------\n\n";
  	  trigger_error("Running query from ".$modelFile." on endpoint ".$e->getSparqlURL(), E_USER_NOTICE);
alangrafu's avatar
alangrafu committed
  	  $aux = $e->query($query, Utils::getResultsType($query)); 
  	  if($modelFile != $lodspk['type']){
alangrafu's avatar
alangrafu committed
  	  	if(!isset($rPointer[$strippedModelFile])){
  	  	  $rPointer[$strippedModelFile] = array();
  	  	  $firstResults[$strippedModelFile] = array();
alangrafu's avatar
alangrafu committed
  	  	}
  	  	if(Utils::getResultsType($query) == $conf['output']['select']){
alangrafu's avatar
alangrafu committed
  	  	  $rPointer[$strippedModelFile] = Utils::sparqlResult2Obj($aux);
  	  	  $fPointer[$strippedModelFile] = $rPointer[$strippedModelFile][0];
  	  	  $rPointer[$modelFile]['firstResults'] = $rPointer[$modelFile][0];
alangrafu's avatar
alangrafu committed
  	  	}else{
  	  	  $lodspk['resultRdf'] = true;
alangrafu's avatar
alangrafu committed
  	  	  $rPointer[$strippedModelFile] = $aux;
alangrafu's avatar
alangrafu committed
  	  }else{
  	  	if(Utils::getResultsType($query) == $conf['output']['select']){
alangrafu's avatar
alangrafu committed
  	  	  $rPointer = Utils::sparqlResult2Obj($aux);
alangrafu's avatar
alangrafu committed
  	  	  $fPointer[$strippedModelFile] = $rPointer[0];
  	  	  $rPointer['firstResults'] = $rPointer[0];
alangrafu's avatar
alangrafu committed
  	  	}else{
  	  	  $lodspk['resultRdf'] = true;
alangrafu's avatar
alangrafu committed
  	  	  $rPointer = $aux;
  	  	}  	 
alangrafu's avatar
alangrafu committed
  	}else{
alvaro's avatar
alvaro committed
  	  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);
alangrafu's avatar
alangrafu committed
  	  	}
  	  }
  	}
alangrafu's avatar
alangrafu committed
  public static function internalize($array){
  	global $conf;
  	$firstResultsKeyAppearance = true;
  	foreach($array as $key => $value){
  	  if(!isset($value['value'])){
  	  	$array[$key] = Utils::internalize($value);
  	  	/*if($firstResultsKeyAppearance){
  	  	$firstResultsKeyAppearance = false;
  	  	$array['_firstResults']=$array[$key];
  	  	if(isset($value['uri']) && $value['uri'] == 1){
  	  	  if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){
  	  	  	$value['mirroredUri'] = $value['value'];
  	  	  	
  	  	  	if(is_bool($conf['mirror_external_uris'])){
  	  	  	  $value['value'] = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $value['value']);
  	  	  	}elseif(is_string($conf['mirror_external_uris'])){
  	  	  	  $value['value'] = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $value['value']);
  	  	  	}else{
  	  	  	  HTTPStatus::send500("Error in mirroring configuration");
Alvaro Graves's avatar
Alvaro Graves committed
  	  	  $value['curie'] = Utils::uri2curie($value['value']);
alangrafu's avatar
alangrafu committed
  	  	  $array[$key] = $value;
alangrafu's avatar
alangrafu committed
  	return $array;
alangrafu's avatar
alangrafu committed
  }
  
alvaro's avatar
alvaro committed
  public static function getfirstResults($array){
  	$firstResultsKeyAppearance = true;
  	foreach($array as $key => $value){
  	  if(!isset($value['value'])){
alvaro's avatar
alvaro committed
  	  	$aux = Utils::getfirstResults($value);
alangrafu's avatar
alangrafu committed
  	  	  $array[$key] = $aux['0'];
alangrafu's avatar
alangrafu committed
  	  	  $array[$key] = $aux;
alangrafu's avatar
alangrafu committed
  
  public static function showView($lodspkData, $data, $view){
alangrafu's avatar
alangrafu committed
  	global $conf;
alangrafu's avatar
alangrafu committed
  	global $uri;
alvaro's avatar
alvaro committed
  	global $lodspk;
alangrafu's avatar
alangrafu committed
  	global $extension;
  	//$lodspk = $conf['view']['standard'];
  	$lodspk = $lodspkData;
  	if(isset($lodspkData['params'])){
  	  $lodspk['this']['params'] = $lodspkData['params'];
alvaro's avatar
alvaro committed
  	require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
alvaro's avatar
alvaro committed
  	$viewAux = explode("/",$view);
  	$viewFile = array_pop($viewAux);
  	$viewPath = join("/", $viewAux);
alangrafu's avatar
alangrafu committed
  	Haanga::configure(array(
alvaro's avatar
alvaro committed
  	  'template_dir' => $conf['home'].$viewPath,
alangrafu's avatar
alangrafu committed
  	  'cache_dir' => $conf['home'].'cache/',
  	  ));
  	$models = $data;
  	$first = $lodspk['firstResults'];
  	unset($lodspk['firstResults']);
  	$lodspk = $lodspk;
  	//unset($lodspk);
  	$vars = compact('uri','lodspk', 'models', 'first');
alangrafu's avatar
alangrafu committed
 	  var_dump($vars); 	
alangrafu's avatar
alangrafu committed
	if(is_string($data)){
	  echo($data);
alvaro's avatar
alvaro committed
	}elseif(is_file($conf['home'].$view)){
	  Haanga::Load($viewFile, $vars);
	}elseif($view == null){
	  $fnc = Haanga::compile('{{models|safe}}');
	  $fnc($vars, TRUE);
alangrafu's avatar
alangrafu committed
	}else{
alvaro's avatar
alvaro committed
	  echo $conf['home'].$viewPath." ".$viewFile;
alangrafu's avatar
alangrafu committed
	  $fnc = Haanga::compile($view);
	  $fnc($vars, TRUE);
alangrafu's avatar
alangrafu committed
	}
  	
  private static function extractObj($obj, $term = 'triple'){
alangrafu's avatar
alangrafu committed
  	$triples = array();
  	if(is_array($obj)){
  	  foreach($obj as $k => $v){
  	  	if($v['type'] != 'triple'){
  	  	  $aux = Utils::extractObj($v);
alangrafu's avatar
alangrafu committed
  	  	  if($aux['type'] != 'triple'){
  	  	  	$triples = array_merge($triples,$aux);
  	  	  }else{
  	  	  	$triples = array_merge($triples, $aux);
  	  	  }
  	  	}else{  	  	
  	  	  array_push($triples, $v);
  	  	}
  	  }
  	}
  	return $triples;
  }
  
alangrafu's avatar
alangrafu committed