diff --git a/classes/Utils.php b/classes/Utils.php index a5116f06df60042e0040171e6f30bb6c48ba400e..41c5f1058326b9baab11369a594663b5d99cb395 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -35,11 +35,23 @@ class Utils{ global $conf; $ns = $conf['ns']; $curie = $uri; + + $aux = $uri; foreach($ns as $k => $v){ - $curie = preg_replace("|^$v|", "$k:", $uri); - if($curie != $uri){ + $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; } @@ -52,8 +64,15 @@ class Utils{ if(preg_match('|^//|', $parts[1])){ return $curie; } - if(sizeof($parts)>1 && isset($ns[$parts[0]])){ - return $ns[$parts[0]].$parts[1]; + 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; } @@ -67,7 +86,7 @@ class Utils{ if(preg_match('|^//|', $parts[1])){ return $curie; } - return array('ns' => $ns[$parts[0]], 'prefix' => $parts[0]);; + return array('ns' => $ns[$parts[0]], 'prefix' => $parts[0]); } public static function getTemplate($uri){ @@ -468,10 +487,18 @@ class Utils{ }*/ }else{ if(isset($value['uri']) && $value['uri'] == 1){ - if($conf['mirror_external_uris']){ + 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{ + Utils::send500("Error in mirroring configuration"); + exit(1); + } } - $value['value'] = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $value['value']); $value['curie'] = Utils::uri2curie($value['value']); $array[$key] = $value; } diff --git a/classes/modules/serviceModule.php b/classes/modules/serviceModule.php index a791cf233adc06c943404a109bbf867de90c66aa..261930b75af94eba44bbd3870ac512c32a6ba6b5 100644 --- a/classes/modules/serviceModule.php +++ b/classes/modules/serviceModule.php @@ -64,7 +64,7 @@ class ServiceModule extends abstractModule{ $prefixHeader = array(); for($i=0;$i<sizeof($params);$i++){ - if($conf['mirror_external_uris']){ + if($conf['mirror_external_uris'] != false){ $altUri = Utils::curie2uri($params[$i]); $altUri = preg_replace("|^".$conf['basedir']."|", $conf['ns']['local'], $altUri); $params[$i] = Utils::uri2curie($altUri); @@ -73,6 +73,8 @@ class ServiceModule extends abstractModule{ $segmentConnector = ""; for($i=0;$i<sizeof($params);$i++){ + Utils::curie2uri($params[$i]); + //echo $params[$i]." ".Utils::curie2uri($params[$i]);exit(0); $auxPrefix = Utils::getPrefix($params[$i]); if($auxPrefix['ns'] != NULL){ $prefixHeader[] = $auxPrefix; diff --git a/classes/modules/typeModule.php b/classes/modules/typeModule.php index 02f6433cd5740c10b3835898e77291374cf83099..fd13cc9e2ec0b297edf4e9ac0dd63221bbb80b06 100644 --- a/classes/modules/typeModule.php +++ b/classes/modules/typeModule.php @@ -47,7 +47,7 @@ class TypeModule extends abstractModule{ } $uri = $res; - if($conf['mirror_external_uris']){ + if($conf['mirror_external_uris'] != false){ $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res); } diff --git a/classes/modules/uriModule.php b/classes/modules/uriModule.php index 1bb02a68ec757ad892b9c33a64c9cf0591f0d37f..e9c222555154bec014f10ee19e16e5ab03e68b6c 100644 --- a/classes/modules/uriModule.php +++ b/classes/modules/uriModule.php @@ -67,7 +67,7 @@ class UriModule extends abstractModule{ } $uri = $res; - if($conf['mirror_external_uris']){ + if($conf['mirror_external_uris'] != false){ $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res); } diff --git a/index.php b/index.php index 7bd8b7fc1fcb446a7347d0fa4b3a20fa89138cbe..e710d64fb061c4616cf6fcf3c9a8d55c16940696 100755 --- a/index.php +++ b/index.php @@ -59,9 +59,18 @@ if($uri == $conf['basedir']){ } //Configure external URIs if necessary -if($conf['mirror_external_uris']){ - $uri = $conf['ns']['local'].$_GET['q']; +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{ + Utils::send500("Error in mirroring configuration"); + exit(1); + } + } diff --git a/install.sh b/install.sh index 65619b531916770ace037327479e9035d10e0e1e..1c142215d16706d26998360ec2fe25c53d8ed8a0 100755 --- a/install.sh +++ b/install.sh @@ -53,7 +53,7 @@ while [ "$everything_ok" != "y" ]; do if [[ "$basedir" =~ ^"$ns" ]]; then external="false" else - external="true" + external=$ns extra="\$conf['ns']['base'] = '$basedir';" fi @@ -94,7 +94,7 @@ LODSPEAKR_HOME=`pwd`/ \$conf['home'] = '$LODSPEAKR_HOME'; \$conf['basedir'] = '$basedir'; \$conf['debug'] = false; -\$conf['mirror_external_uris'] = $external; +\$conf['mirror_external_uris'] = '$external'; /*ATTENTION: By default this application is available to * be exported and copied (its configuration) diff --git a/models/service.classes/html.queries/main.query b/models/service.classes/html.queries/main.query index 1dd0704ec5e74ac232ef38d8fff359458e075247..0157430d87fd46e5665a7bfd17a72b9122102cbb 100644 --- a/models/service.classes/html.queries/main.query +++ b/models/service.classes/html.queries/main.query @@ -2,7 +2,11 @@ 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 . + { + {%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/models/service.instances/html.queries/main.query b/models/service.instances/html.queries/main.query index f50a15c6cd2f549779ca29478dfbe21bb6c6996a..a93cf3679adc9bede7577cb91870bc0cfdb7a600 100644 --- a/models/service.instances/html.queries/main.query +++ b/models/service.instances/html.queries/main.query @@ -2,7 +2,12 @@ PREFIX {{h.prefix}}: <{{h.ns}}> {%endfor%} SELECT DISTINCT ?resource WHERE { - GRAPH ?g{ - ?resource a {{lodspk.args.arg0}} + { + GRAPH ?g{ + ?resource a {{lodspk.args.arg0}} + } + }UNION{ + ?resource a {{lodspk.args.arg0}} } -} +}order by ?resource +limit 1000 diff --git a/models/service.namedGraphs/html.queries/main.query b/models/service.namedGraphs/html.queries/main.query index 3c0f060c416a4a36a8ecc8d21ad23581ab05f660..c0ec090ec217ee8faced00975ed230a19e57aa43 100644 --- a/models/service.namedGraphs/html.queries/main.query +++ b/models/service.namedGraphs/html.queries/main.query @@ -3,3 +3,4 @@ SELECT DISTINCT ?g WHERE { [] ?p ?resource . } } + order by ?g