public function testGetDescription() { $this->markTestNeedsDatabase(); $this->authenticateDbUser(); $model = Erfurt_App::getInstance()->getSysOntModel(); $resource = new Erfurt_Rdf_Resource('http://ns.ontowiki.net/SysOnt/Anonymous', $model); $description = $resource->getDescription(); $this->assertTrue(isset($description['http://ns.ontowiki.net/SysOnt/Anonymous'])); $anonymousDesc = $description['http://ns.ontowiki.net/SysOnt/Anonymous']; $this->assertTrue(isset($anonymousDesc['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'])); $this->assertTrue(isset($anonymousDesc['http://www.w3.org/2000/01/rdf-schema#label'])); $this->assertTrue(isset($anonymousDesc['http://www.w3.org/2000/01/rdf-schema#comment'])); }
/** * forwards to the CKAN registration page with some prefilled values */ public function registerAction() { // this action needs no view $this->_helper->viewRenderer->setNoRender(); // disable layout $this->_helper->layout()->disableLayout(); // m (model) is automatically used and selected if (!isset($this->request->m) && !$this->_owApp->selectedModel) { throw new OntoWiki_Exception('No model pre-selected model and missing parameter m (model)!'); } else { $model = $this->_owApp->selectedModel; } // get model URI / resource and load description $resourceUri = (string) $model; $resource = new Erfurt_Rdf_Resource($resourceUri, $model); $description = $resource->getDescription(); $description = $description[$resourceUri]; // fill CKAN parameter $parameter = array(); $parameter['title'] = $model->getTitle(); $parameter['url'] = $resourceUri; // go through the model info properties and use the first value as // notes value for ckan $infoProperties = $this->_config->descriptionHelper->properties; foreach ($infoProperties as $infoProperty) { if (!isset($parameter['description'])) { if (isset($description[$infoProperty][0]['value'])) { $parameter['notes'] = $description[$infoProperty][0]['value']; } } } // build GET URI from the parameter array to redirect $getparams = '?'; foreach ($parameter as $key => $value) { $getparams .= '&' . $key . '=' . urlencode($value); } $redirectUrl = $this->registerBaseUrl . $getparams; // redirect to CKANs dataset registration page $this->_response->setRedirect($redirectUrl, $code = 302); }
/** * Parses a String to an RDF node. * * @param string $node * @return Erfurt_Rdf_Node The parsed RDF node * @throws Erfurt_Sparql_ParserException */ protected function _parseNode($node = false) { if ($node) { $node = $node; } else { $node = current($this->_tokens); } if ($node[strlen($node) - 1] === '.') { $node = substr($node, 0, -1); } if ($this->_dtypeCheck($node)) { return $node; } if ($this->_bNodeCheck($node)) { $node = '?' . $node; if (isset($this->_usedBlankNodes[$node]) && $this->_usedBlankNodes[$node] === false) { require_once 'Erfurt/Sparql/ParserException.php'; throw new Erfurt_Sparql_ParserException('Reuse of blank node id not allowed here.' - 1, key($this->_tokens)); } $this->_query->addUsedVar($node); $this->_usedBlankNodes[$node] = true; return $node; } if ($node === '[') { $node = '?' . substr($this->_query->getBlanknodeLabel(), 1); $this->_query->addUsedVar($node); $this->_fastForward(); if (current($this->_tokens) !== ']') { prev($this->_tokens); } return $node; } if ($this->_iriCheck($node)) { $base = $this->_query->getBase(); if ($base != null) { require_once 'Erfurt/Rdf/Resource.php'; $node = Erfurt_Rdf_Resource::initWithNamespaceAndLocalName(substr($base, 1, -1), substr($node, 1, -1)); } else { require_once 'Erfurt/Rdf/Resource.php'; $node = Erfurt_Rdf_Resource::initWithIri(substr($node, 1, -1)); } return $node; } else { if ($this->_qnameCheck($node)) { $node = $this->_query->getFullUri($node); require_once 'Erfurt/Rdf/Resource.php'; $node = Erfurt_Rdf_Resource::initWithIri($node); return $node; } else { if ($this->_literalCheck($node)) { if (substr($node, 0, 1) === '"' || substr($node, 0, 1) === "'") { $ch = substr($node, 0, 1); $chLong = str_repeat($ch, 3); if (substr($node, 0, 3) == $chLong) { $ch = $chLong; } $this->_parseLiteral($node, $ch); } else { $this->_parseLiteral($node, null); } } else { if ($this->_varCheck($node)) { $pos = is_string($node) ? strpos($node, '.') : false; if ($pos) { return substr($node, 0, $pos); } else { return $node; } } else { if ($node[0] === '<') { //partial IRI? loop tokens until we find a closing > while (next($this->_tokens)) { $node .= current($this->_tokens); if (substr($node, -1) === '>') { break; } } if (substr($node, -1) != '>') { var_dump($this->_tokens); exit; require_once 'Erfurt/Sparql/ParserException.php'; throw new Erfurt_Sparql_ParserException('Unclosed IRI: ' . $node, -1, key($this->_tokens)); } return $this->_parseNode($node); } else { require_once 'Erfurt/Sparql/ParserException.php'; throw new Erfurt_Sparql_ParserException('"' . $node . '" is neither a valid rdf- node nor a variable.', -1, key($this->_tokens)); } } } } } return $node; }
/** * Event handler method, which is called on menu creation. Adds some * datagathering relevant menu entries. * * @param Erfurt_Event $event * * @return bool */ public function onCreateMenu($event) { $menu = $event->menu; $resource = $event->resource; $model = $event->model; $owApp = OntoWiki::getInstance(); // We only add entries to the menu, if all params are given and the // model is editable. if (null === $resource || null === $model || !$model->isEditable() || !$owApp->erfurt->getAc()->isModelAllowed('edit', $owApp->selectedModel)) { return; } $owApp = OntoWiki::getInstance(); $translate = $owApp->translate; $wrapperRegistry = Erfurt_Wrapper_Registry::getInstance(); $activeWrapperList = $wrapperRegistry->listActiveWrapper(); if ((bool) $this->_privateConfig->sync->enabled) { $syncConfigList = $this->_listSyncConfigs(); } else { $syncConfigList = array(); } $uri = (string) $resource; $modelUri = (string) $model; $menuArray = array(); // Check all active wrapper extensions, whether URI is handled. Also // check, whether a sync config exists. foreach ($activeWrapperList as $wrapperName) { $hash = $this->_getHash($uri, $wrapperName, $modelUri); $r = new Erfurt_Rdf_Resource($uri); $r->setLocator($this->_getProxyUri($uri)); $wrapperInstance = $wrapperRegistry->getWrapperInstance($wrapperName); if ($wrapperInstance->isHandled($r, $modelUri)) { $menuArray[$wrapperName] = array('instance' => $wrapperInstance); if (isset($syncConfigList[$hash])) { $menuArray[$wrapperName]['sync'] = true; } } } // Only add a separator, if at least one active wrapper exists. if (count($menuArray) > 0) { $menu->appendEntry(OntoWiki_Menu::SEPARATOR); } foreach ($menuArray as $wrapperName => $wrapperArray) { $wrapperInstance = $wrapperArray['instance']; if (isset($wrapperArray['sync']) && $wrapperArray['sync'] === true) { $message = $translate->_('Sync Data with %1$s'); $menu->appendEntry(sprintf($message, $wrapperInstance->getName()), array('about' => $uri, 'class' => 'sync_data_button wrapper_' . $wrapperName)); } else { $message = $translate->_('Import Data with %1$s'); $menu->appendEntry(sprintf($message, $wrapperInstance->getName()), array('about' => $uri, 'class' => 'fetch_data_button wrapper_' . $wrapperName)); } // Configure for sync entry. if ((bool) $this->_privateConfig->sync->enabled) { $configUrl = $owApp->config->urlBase . 'datagathering/config?uri=' . urlencode($uri) . '&wrapper=' . urlencode($wrapperName); if ($event->isModel) { $configUrl .= '&m=' . urlencode($uri); } $message = $translate->_('Configure Sync with %1$s'); $menu->appendEntry(sprintf($message, $wrapperInstance->getName()), $configUrl); } } return true; }
public function testGetLocator() { $uri = new Erfurt_Rdf_Resource('http://example.org/testResource1'); $uri->setLocator('http://example.org/testLocator'); $this->assertEquals('http://example.org/testLocator', $uri->getLocator()); }
public static function import($graphUri, $uri, $locator, $all = true, $presets = array(), $exceptedProperties = array(), $wrapperName = 'linkeddata', $fetchMode = 'none', $action = 'add', $versioning = true, $filterCallback = null) { // Check whether user is allowed to write the model. $erfurt = Erfurt_App::getInstance(); $store = $erfurt->getStore(); $storeGraph = $store->getModel($graphUri); if (!$storeGraph || !$storeGraph->isEditable()) { return self::IMPORT_NOT_EDITABLE; } $r = new Erfurt_Rdf_Resource($uri); $r->setLocator($locator); // Try to instanciate the requested wrapper $wrapper = null; try { $wrapper = Erfurt_Wrapper_Registry::getInstance()->getWrapperInstance($wrapperName); } catch (Erfurt_Wrapper_Exception $e) { return self::IMPORT_WRAPPER_INSTANCIATION_ERR; } if (null == $wrapper) { return self::IMPORT_WRAPPER_NOT_AVAILABLE; } $wrapperResult = null; try { $wrapperResult = $wrapper->run($r, $graphUri, $all); } catch (Erfurt_Wrapper_Exception $e) { return self::IMPORT_WRAPPER_ERR; } if ($wrapperResult === false) { return self::IMPORT_WRAPPER_RESULT_NOT_AVAILABLE; } else { if (is_array($wrapperResult)) { if (isset($wrapperResult['status_codes'])) { if (in_array(Erfurt_Wrapper::RESULT_HAS_ADD, $wrapperResult['status_codes'])) { $newStatements = $wrapperResult['add']; //default filter $newStatements = self::filterStatements($newStatements, $uri, $all, $presets, $exceptedProperties, $fetchMode); //custom filter if ($filterCallback != null && is_array($filterCallback)) { try { $newStatements = call_user_func($filterCallback, $newStatements); } catch (Exception $e) { return self::IMPORT_CUSTOMFILTER_EXCEPTION; } } $stmtBeforeCount = $store->countWhereMatches($graphUri, '{ ?s ?p ?o }', '*'); if ($versioning) { // Prepare versioning... $versioning = $erfurt->getVersioning(); $actionSpec = array('type' => self::VERSIONING_IMPORT_ACTION_TYPE, 'modeluri' => $graphUri, 'resourceuri' => $uri); // Start action $versioning->startAction($actionSpec); } if ($action == 'add') { try { $store->addMultipleStatements($graphUri, $newStatements); } catch (Exception $e) { $versioning->abortAction(); if (defined('_EFDEBUG')) { throw $e; } return self::IMPORT_GENERAL_EXCEPTION; } } else { if ($action == 'update') { $queryoptions = array('use_ac' => false, 'result_format' => Erfurt_Store::RESULTFORMAT_EXTENDED, 'use_additional_imports' => false); $oldStatements = $store->sparqlQuery('SELECT * FROM <' . $graphUri . '> WHERE { ?s ?p ?o }', $queryoptions); //transform resultset to rdf/php statements $modelOld = new Erfurt_Rdf_MemoryModel(); $modelOld->addStatementsFromSPOQuery($oldStatements); $modelNew = new Erfurt_Rdf_MemoryModel($newStatements); $storeGraph->updateWithMutualDifference($modelOld->getStatements(), $modelNew->getStatements()); } } if ($versioning) { $versioning->endAction(); } $stmtAfterCount = $store->countWhereMatches($graphUri, '{ ?s ?p ?o }', '*'); $stmtAddCount = $stmtAfterCount - $stmtBeforeCount; if ($stmtAddCount > 0) { // TODO test ns // If we added some statements, we check for additional namespaces and add them. if (in_array(Erfurt_Wrapper::RESULT_HAS_NS, $wrapperResult['status_codes'])) { $namespaces = $wrapperResult['ns']; $erfurtNamespaces = $erfurt->getNamespaces(); foreach ($namespaces as $ns => $prefix) { try { $erfurtNamespaces->addNamespacePrefix($graphUri, $prefix, $ns, false); } catch (Exception $e) { // Ignore... } } } return self::IMPORT_OK; } else { if (count($newStatements) > 0) { return self::IMPORT_NO_NEW_DATA; } else { return self::IMPORT_NO_DATA; } } } else { return self::IMPORT_NO_DATA; } } else { return self::IMPORT_WRAPPER_ERR; } } else { return self::IMPORT_WRAPPER_ERR; } } }
public function testIsHandledFalseWithLocator() { $r = new Erfurt_Rdf_Resource('mailto:me@example.org'); $r->setLocator('mailto:anotherMe@example.org'); $this->assertFalse($this->_wrapper->isHandled($r, null)); }
public function __construct($resourceUri) { $owApp = OntoWiki::getInstance(); $store = $owApp->erfurt->getStore(); $model = $owApp->selectedModel; $resource = new Erfurt_Sparql_Query2_IriRef($resourceUri); $ontology = new Erfurt_Sparql_Query2_IriRef(EF_OWL_ONTOLOGY); $fetchFrom = new Erfurt_Sparql_Query2_IriRef(static::SITE_FETCH_OPTIONS_FROM); // fetch options from this resource $query = new Erfurt_Sparql_Query2(); list($key, $value, $class, $dataset) = $this->_queryAddVars($query, array('key', 'value', 'class', 'dataset')); $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); // resource options $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($resource, $key, $value); $union->addElement($group); // class options $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($resource, EF_RDF_TYPE, $class); $group->addTriple($class, $key, $value); $union->addElement($group); // dataset options $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($dataset, EF_RDF_TYPE, new Erfurt_Sparql_Query2_IriRef(EF_OWL_ONTOLOGY)); $group->addTriple($dataset, $key, $value); $union->addElement($group); $query->addElement($union); $query->addTriple($key, EF_RDF_TYPE, new Erfurt_Sparql_Query2_IriRef(static::SITE_TEMPLATE_OPTION)); $results = $model->sparqlQuery($query); foreach ($results as $result) { $arrayKey = $result[$key->getName()]; $this->_options[$arrayKey][$this->_getPriority($result)][] = $result[$value->getName()]; $templateOption = new Erfurt_Rdf_Resource($arrayKey, $model); $arrayKeyLocalName = $templateOption->getLocalName(); $this->_optionLocalNames[$arrayKeyLocalName][] = $arrayKey; } // fetch options from linked resources $query = new Erfurt_Sparql_Query2(); list($other, $class, $dataset) = $this->_queryAddVars($query, array('other', 'class', 'dataset')); $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); // resource links $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($resource, $fetchFrom, $other); $union->addElement($group); // class links $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($resource, EF_RDF_TYPE, $class); $group->addTriple($class, $fetchFrom, $other); $union->addElement($group); // dataset links $group = new Erfurt_Sparql_Query2_GroupGraphPattern(); $group->addTriple($dataset, EF_RDF_TYPE, $ontology); $group->addTriple($dataset, $fetchFrom, $other); $union->addElement($group); $query->addElement($union); $results = $model->sparqlQuery($query); foreach ($results as $result) { $options = new TemplateOptionsClass($result[$other->getName()]); foreach ($options->_options as $arrayKey => $priorities) { foreach ($priorities as $priority => $values) { $floor = floor($priority); $this->_options[$arrayKey][(string) ($floor + 0.1 * $this->_getPriority($result) + 0.1 * ($priority - $floor))] = $values; } } foreach ($options->_optionLocalNames as $arrayKeyLocalName => $keys) { foreach ($keys as $key) { if (!isset($this->_optionLocalNames[$arrayKeyLocalName]) || !in_array($key, $this->_optionLocalNames[$arrayKeyLocalName])) { $this->_optionLocalNames[$arrayKeyLocalName][] = $key; } } } } foreach (array_keys($this->_options) as $key) { ksort($this->_options[$key]); } }
protected function _createBNode($id = null) { if (null === $id) { while (true) { $id = self::BNODE_PREFIX . ++$this->_bnodeCounter; if (!isset($this->_usedBnodeIds[$id])) { break; } } } $this->_usedBnodeIds[$id] = true; require_once 'Erfurt/Rdf/Resource.php'; return Erfurt_Rdf_Resource::initWithBlankNode($id); }