public function testGetBaseIriWithEmptyBaseReturnsModelIri() { $this->markTestNeedsTestConfig(); $model1 = new Erfurt_Rdf_Model('http://example.org/'); $model2 = new Erfurt_Rdf_Model('http://example.org/', 'http://example.org/resources/'); $this->assertSame('http://example.org/', $model1->getBaseIri()); $this->assertSame('http://example.org/resources/', $model2->getBaseIri()); }
/** * Transform a given string to full URI using the models namespaces if it * is a qname or check the uri if it is not a qname * * @param $qname the input qname or uri candidate * @param $model the Erfurt model which is used to check for namespaces */ public static function getFromQnameOrUri($qnameOrUri, Erfurt_Rdf_Model $model) { // test for qname if (preg_match(self::$_regExpQname, (string) $qnameOrUri) == 0) { // input is not a qname so test for Uri-ness and return uri if (!self::check($qnameOrUri)) { throw new Erfurt_Uri_Exception('The supplied string is neither a valid Qname nor Uri by syntax.'); } else { // return checked Uri return $qnameOrUri; } } else { // input is qname so split it and build Uri from namespace if possible $parts = explode(':', $qnameOrUri); if (count($parts) > 1) { $prefix = $parts[0]; $localName = $parts[1]; $namespace = $model->getNamespaceByPrefix($prefix); } else { // it is a local name only $localName = $qnameOrUri; $namespace = $model->getBaseIri(); } $uri = $namespace . $localName; if (!self::check($uri)) { throw new Erfurt_Uri_Exception('The given qname "' . $qnameOrUri . '" results in an invalid Uri "' . $uri . '".'); } else { // return constructed and checked Uri return $uri; } } }
/** * * Enter description here ... * * @param $uri string to convert to nice uri * @param $titleHelper TitleHelper instance to use to get titles for URIs */ private function generateUriFromSparql($uri, $titleHelper) { $schema = $this->loadNamingSchema($uri); $properties = array(); foreach ($schema as $element) { if (is_string($this->_config->property->{$element})) { $properties[$this->_config->property->{$element}] = array('element' => $element, 'rank' => '1'); } elseif (is_array($this->_config->property->{$element}->toArray())) { $countDeep = 0; foreach ($this->_config->property->{$element}->toArray() as $elementDeep) { $properties[(string) $elementDeep] = array('element' => $element, 'rank' => $countDeep++); } } } $query = new Erfurt_Sparql_Query2(); $sRef = new Erfurt_Sparql_Query2_IriRef($uri); $pVar = new Erfurt_Sparql_Query2_Var('p'); $oVar = new Erfurt_Sparql_Query2_Var('o'); $query->addProjectionVar($pVar); $query->addProjectionVar($oVar); $query->addTriple($sRef, $pVar, $oVar); $query->addFrom((string) $this->_model); $query->setLimit(100); $query->setDistinct(true); $container = new Erfurt_Sparql_Query2_ConditionalOrExpression(); foreach ($properties as $filterProp => $element) { $sameTerm = new Erfurt_Sparql_Query2_sameTerm($pVar, new Erfurt_Sparql_Query2_IriRef($filterProp)); //$filter = new Erfurt_Sparql_Query2_Filter($sameTerm); $container->addElement($sameTerm); } $query->addFilter($container); $result = $this->_owApp->erfurt->getStore()->sparqlQuery($query, array('withImports' => true)); $replacements = array(); foreach ($result as $row) { if (array_key_exists($row['p'], $properties)) { $titleHelper->addResource($row['p']); if (Erfurt_Uri::check($row['o'])) { $titleHelper->addResource($row['o']); } if (array_key_exists($properties[$row['p']]['element'], $replacements)) { $newRank = (int) $properties[$row['p']]['rank']; $minRank = $replacements[$properties[$row['p']]['element']]['rank']; if ($newRank < $minRank) { $replacements[$properties[$row['p']]['element']] = array('rank' => $newRank, 'value' => $row['o'], 'key' => $row['p']); } } else { $replacements[$properties[$row['p']]['element']] = array('rank' => $properties[$row['p']]['rank'], 'value' => $row['o'], 'key' => $row['p']); } } } $localName = ''; foreach ($schema as $element) { if (array_key_exists($element, $replacements)) { if (Erfurt_Uri::check($replacements[$element]['value'])) { $val = $titleHelper->getTitle($replacements[$element]['value']); } else { $val = $replacements[$element]['value']; } $val = $this->convertChars($val); $key = $this->convertChars($titleHelper->getTitle($replacements[$element]['key'])); $localName .= $key . '/' . $val . '/'; } } // no meaningful localname created falback to old uri (TODO or md5 a new one?) if ($localName === '') { return $uri; //$localName = 'resource/' . md5($uri . time()); } $base = ''; if ($this->_model !== null && $this->_model->getBaseIri() !== '') { $base = $this->_model->getBaseIri(); if ($base[strlen($base) - 1] !== '#' && $base[strlen($base) - 1] !== '/') { $base .= '/'; } } else { $count = 0; foreach (explode('/', $uri) as $element) { if ($count > 2) { break; } else { $count++; $base .= $element . '/'; } } } return $base . $localName; }