diff --git a/README.md b/README.md index 3ed806b975501f5f66a790513b7de6954ad97b55..17d036d323290638d223ff8a6924987836f723f3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ LODSPeaKr author: Alvaro Graves (alvaro@graves.cl) -version: 20130611 +version: 20130612 [LODSPeaKr](http://lodspeakr.org) is a framework for creating Linked Data applications in a simple and easy way. You can see [several applications](http://alangrafu.github.com/lodspeakr/applications.html) created using LODSPeaKr. diff --git a/classes/Utils.php b/classes/Utils.php index 64edc8be6e35cd0ca8ff68aab260fea9edf7008d..6dcda771c781b064787636be44e28ef4865c9324 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -279,19 +279,10 @@ class Utils{ } $data['rdf']->$subjectMethod->mirroredUri = $subject; $data['rdf']->$subjectMethod->mirroredCurie = $subjectCurie; - if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ - if(is_bool($conf['mirror_external_uris'])){ - $data['rdf']->$subjectMethod->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $subject); - $data['rdf']->$subjectMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $subject)); - }elseif(is_string($conf['mirror_external_uris'])){ - $data['rdf']->$subjectMethod->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $subject); - $data['rdf']->$subjectMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $subject)); - }else{ - HTTPStatus::send500("Error in mirroring configuration"); - exit(1); - } - } - + + $data['rdf']->$subjectMethod->value = Utils::getUnMirroredUri($subject); + $data['rdf']->$subjectMethod->curie = Utils::uri2curie( $data['rdf']->$subjectMethod->value); + if(!isset($data['rdf']->subjects->$subjectMethod)){ $data['rdf']->subjects->$subjectMethod = $data['rdf']->$subjectMethod; } @@ -310,18 +301,9 @@ class Utils{ $data['rdf']->$subjectMethod->$predicateMethod->mirroredUri = $predicate; $data['rdf']->$subjectMethod->$predicateMethod->mirroredCurie = $predicateCurie; - if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ - if(is_bool($conf['mirror_external_uris'])){ - $data['rdf']->$subjectMethod->$predicateMethod->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $predicate); - $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $predicate)); - }elseif(is_string($conf['mirror_external_uris'])){ - $data['rdf']->$subjectMethod->$predicateMethod->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $predicate); - $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $predicate)); - }else{ - HTTPStatus::send500("Error in mirroring configuration"); - exit(1); - } - } + $data['rdf']->$subjectMethod->$predicateMethod->value = Utils::getUnMirroredUri($predicate); + $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie( $data['rdf']->$subjectMethod->$predicateMethod->value); + if(!isset($data['rdf']->$subjectMethod->predicates)){ $data['rdf']->$subjectMethod->predicates = new stdClass(); @@ -355,18 +337,9 @@ class Utils{ $obj = new stdClass(); $obj->mirroredUri = $object; $obj->mirroredCurie = $objectCurie; - if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ - if(is_bool($conf['mirror_external_uris'])){ - $obj->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $object); - $obj->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $object)); - }elseif(is_string($conf['mirror_external_uris'])){ - $obj->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $object); - $obj->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $object)); - }else{ - HTTPStatus::send500("Error in mirroring configuration"); - exit(1); - } - } + $obj->value = Utils::getUnMirroredUri($object); + $obj->curie = Utils::uri2curie($obj->value); + if(!isset($spCounter[$subjectMethod." ".$predicateMethod])){ $spCounter[$subjectMethod." ".$predicateMethod] = 0; @@ -649,16 +622,9 @@ class Utils{ $value['mirroredUri'] = $value['value']; $value['mirroredCurie'] = Utils::uri2curie($value['value']); if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ - 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"); - exit(1); - } + $value['value'] = Utils::getUnMirroredUri($value['value']); } - $value['curie'] = $value['mirroredCurie']; + $value['curie'] = Utils::uri2curie($value['value']); $array[$key] = $value; } } @@ -790,6 +756,54 @@ class Utils{ return $result; } + public static function getMirroredUri($localUri){ + global $conf; + $uri = $localUri; + if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ + if(is_bool($conf['mirror_external_uris'])){ + $uri = preg_replace("|^".$conf['ns']['local']."|", $conf['ns']['base'], $localUri); + }elseif(is_string($conf['mirror_external_uris'])){ + $uri = preg_replace("|^".$conf['ns']['local']."|", $conf['mirror_external_uris'], $localUri); + }elseif(is_array($conf['mirror_external_uris'])){ + $defaultKey = ""; //Default namespace is empty string "" + $namespaceFragment = array_shift(split("/", str_replace($conf['basedir'], "", $localUri))); + $uri = preg_replace("|^".$conf['basedir']."|",$conf['mirror_external_uris'][$defaultKey], $localUri); + foreach($conf['mirror_external_uris'] as $k => $v){ + if($namespaceFragment == $k){ + $uri = preg_replace("|^".$conf['basedir'].$k."/"."|",$conf['mirror_external_uris'][$k], $localUri); + break; + } + } + }else{ + HTTPStatus::send500("Error in mirroring configuration"); + exit(1); + } + } + return $uri; + } + + public static function getUnMirroredUri($uri){ + global $conf; + $localUri = $uri; + if(is_bool($conf['mirror_external_uris'])){ + $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $uri); + }elseif(is_string($conf['mirror_external_uris'])){ + $localUri = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $uri); + }elseif(is_array($conf['mirror_external_uris'])){ + //Instead of doing expensive regex, jsut use str_replace + foreach($conf['mirror_external_uris'] as $k => $v){ + if(strlen(str_replace($v, "", $uri)) != strlen($uri)){ + $fragment = ($k == "")?$k: $k."/"; + $localUri = preg_replace("|^".$v."|",$conf['basedir'].$fragment, $uri); + break; + } + } + }else{ + HTTPStatus::send500("Error in mirroring configuration"); + exit(1); + } + return $localUri; + } } ?> diff --git a/common.inc.php b/common.inc.php index f272c7a5a588c58c65a19746ac8001ffb6d12d53..dad2a927bea1031ed3e8defc2a8a100a980b745b 100644 --- a/common.inc.php +++ b/common.inc.php @@ -1,6 +1,6 @@ <?php -$conf['version'] = '20130611'; +$conf['version'] = '20130612'; $conf['output']['select'] = 'json'; $conf['output']['ask'] = 'json'; $conf['output']['describe'] = 'rdf'; diff --git a/index.php b/index.php index bb5b0573d62a71b8889f0780dca8c1e344426b36..cebf6d55822657bf3680929888c90414f6717b24 100755 --- a/index.php +++ b/index.php @@ -70,19 +70,9 @@ if($uri == $conf['basedir']){ //Configure external URIs if necessary -if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){ - $localUri = $conf['basedir'].$_GET['q']; - - if(is_bool($conf['mirror_external_uris'])){ - $uri = $conf['ns']['local'].$_GET['q']; - }elseif(is_string($conf['mirror_external_uris'])){ - $uri = $conf['mirror_external_uris'].$_GET['q']; - }else{ - HTTPStatus::send500("Error in mirroring configuration"); - exit(1); - } - -} +$localUri = $conf['basedir'].$_GET['q']; + +$uri = Utils::getMirroredUri($localUri); //Modules