/** * Find the redirect target of an ExpNsResource * * Returns an SMWExpNsResource object the input redirects to, the input * itself if there is no redirect (or it cannot be used for making a resource * with a prefix). * * @since 1.6 * * @param ExpNsResource $expNsResource string URI to check * @param boolean $existsthat is set to true if $expNsResource is in the * store; always false for blank nodes; always true for subobjects * * @return ExpNsResource * @throws RuntimeException */ public function findRedirectTargetResource(ExpNsResource $expNsResource, &$exists) { $exists = true; if ($expNsResource->isBlankNode() || $this->isNonRedirectableResource($expNsResource)) { $exists = false; return $expNsResource; } if ($expNsResource->getDataItem() instanceof DIWikiPage && $expNsResource->getDataItem()->getSubobjectName() !== '') { return $expNsResource; } $firstRow = $this->doLookupResourceUriTargetFor($expNsResource); if ($firstRow === false) { $exists = false; return $expNsResource; } if (count($firstRow) > 1 && !is_null($firstRow[1])) { return $this->getResourceForTargetElement($expNsResource, $firstRow[1]); } return $expNsResource; }
/** * Find the redirect target of an SMWExpNsResource. * Returns an SMWExpNsResource object the input redirects to, * the input itself if there is no redirect (or it cannot be * used for making a resource with a prefix). * * @since 1.6 * @param $expNsResource string URI to check * @param $exists boolean that is set to true if $expNsResource is in the * store; always false for blank nodes; always true for subobjects * @return SMWExpNsResource */ protected function getSparqlRedirectTarget(SMWExpNsResource $expNsResource, &$exists) { if ($expNsResource->isBlankNode()) { $exists = false; return $expNsResource; } elseif ($expNsResource->getDataItem() instanceof SMWDIWikiPage && $expNsResource->getDataItem()->getSubobjectName() !== '') { $exists = true; return $expNsResource; } $resourceUri = SMWTurtleSerializer::getTurtleNameForExpElement($expNsResource); $rediUri = SMWTurtleSerializer::getTurtleNameForExpElement(SMWExporter::getSpecialPropertyResource('_REDI')); $skeyUri = SMWTurtleSerializer::getTurtleNameForExpElement(SMWExporter::getSpecialPropertyResource('_SKEY')); $sparqlResult = smwfGetSparqlDatabase()->select('*', "{$resourceUri} {$skeyUri} ?s OPTIONAL { {$resourceUri} {$rediUri} ?r }", array('LIMIT' => 1), array($expNsResource->getNamespaceId() => $expNsResource->getNamespace())); $firstRow = $sparqlResult->current(); if ($firstRow === false) { $exists = false; return $expNsResource; } elseif (count($firstRow) > 1 && !is_null($firstRow[1])) { $exists = true; $rediTargetElement = $firstRow[1]; $rediTargetUri = $rediTargetElement->getUri(); $wikiNamespace = SMWExporter::getNamespaceUri('wiki'); if (strpos($rediTargetUri, $wikiNamespace) === 0) { return new SMWExpNsResource(substr($rediTargetUri, 0, strlen($wikiNamespace)), $wikiNamespace, 'wiki'); } else { return $expNsResource; } } else { $exists = true; return $expNsResource; } }