コード例 #1
0
ファイル: Query2Test.php プロジェクト: FTeichmann/Erfurt
 public function testGetSparql()
 {
     $q1 = new Erfurt_Sparql_Query2(Erfurt_Sparql_Query2::typeAsk);
     $this->assertEquals("ASK  \nWHERE { \n} \n", $q1->getSparql());
     $q2 = new Erfurt_Sparql_Query2(Erfurt_Sparql_Query2::typeDescribe);
     $this->assertEquals("DESCRIBE * \nWHERE { \n} \n", $q2->getSparql());
     $q3 = new Erfurt_Sparql_Query2(Erfurt_Sparql_Query2::typeSelect);
     $this->assertEquals("SELECT * \nWHERE { \n} \n", $q3->getSparql());
     $q4 = new Erfurt_Sparql_Query2(Erfurt_Sparql_Query2::typeConstruct);
     $constrPure = "CONSTRUCT  \n{ \n} \nWHERE { \n} \n";
     $this->assertEquals($constrPure, $q4->getSparql());
     $q4->setBase(new Erfurt_Sparql_Query2_IriRef('http://base.com'));
     $this->assertEquals("BASE <http://base.com> \nCONSTRUCT  \n{ \n} \nWHERE { \n} \n", $q4->getSparql());
     $q4->removeBase();
     $this->assertEquals($constrPure, $q4->getSparql());
     $q3->setDistinct();
     $this->assertEquals("SELECT DISTINCT * \nWHERE { \n} \n", $q3->getSparql());
     $q3->setReduced();
     $this->assertEquals("SELECT REDUCED * \nWHERE { \n} \n", $q3->getSparql());
 }
コード例 #2
0
ファイル: Resource.php プロジェクト: dmj/uni-helmstedt.hab.de
 /**
  * Builds the SPARQL query
  */
 private function _buildQueries()
 {
     $query = new Erfurt_Sparql_Query2();
     $uri = new Erfurt_Sparql_Query2_IriRef($this->_uri);
     $predVar = new Erfurt_Sparql_Query2_Var('predicate');
     $objVar = new Erfurt_Sparql_Query2_Var('object');
     $query->addTriple($uri, $predVar, $objVar);
     $query->addFilter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_isBlank($objVar)));
     if (!empty($this->_ignoredPredicates)) {
         $or = new Erfurt_Sparql_Query2_ConditionalAndExpression();
         $filter = new Erfurt_Sparql_Query2_Filter($or);
         foreach ($this->_ignoredPredicates as $ignored) {
             $or->addElement(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_sameTerm($predVar, new Erfurt_Sparql_Query2_IriRef($ignored))));
         }
         $query->getWhere()->addElement($filter);
     }
     $query->setDistinct(true)->addProjectionVar($predVar)->addProjectionVar($objVar)->getOrder()->add($predVar);
     $queries = array();
     $closure = Erfurt_App::getInstance()->getStore()->getImportsClosure($this->_model->getModelUri(), true);
     $queryGraphs = array_merge(array($this->_graph), $closure);
     foreach ($queryGraphs as $currentGraph) {
         $query->setFroms(array($currentGraph));
         $queries[$currentGraph] = clone $query;
     }
     return $queries;
 }
コード例 #3
0
 /**
  * Opens a resource context in data markup.
  *
  * Options (all are optional):
  * - resource - resource URI (by default, the current resource in template)
  * - type     - resource type (by default, rdf:type value for the specified resource)
  * - rel      - relation to the resource, string or array of strings
  * - rev      - reverse relation (from the resource), string or array of strings
  * - itemref  - microdata's itemref as an array of IDs
  * - tag      - HTML tag to create context with
  * - id       - HTML id attribute
  * - class    - HTML class attribute
  * - markup   - markup format ("RDFa", "microdata", false)
  *
  * The following options may be specified in template options:
  * rel, rev, itemref, tag, id, class
  */
 public function openContext($options = array())
 {
     $model = OntoWiki::getInstance()->selectedModel;
     $tmplOpt = $this->view->templateOptions();
     $markup = $tmplOpt->getValue('http://ns.ontowiki.net/SysOnt/Site/dataMarkupFormat', 'RDFa');
     $markup = isset($options['markup']) ? $options['markup'] : $markup;
     $resource = isset($options['resource']) ? $options['resource'] : $this->view->resourceUri;
     $html = array();
     $attr = '';
     $iprefix = '';
     $type = null;
     $rel = array();
     $rev = array();
     $itemref = null;
     // can generate new namespaces which weren't included in html element
     //$resource = $this->view->curie($resource);
     if (isset($options['type'])) {
         $type = $options['type'];
     } else {
         $query = new Erfurt_Sparql_Query2();
         $query->addProjectionVar($type = new Erfurt_Sparql_Query2_Var('type'));
         $query->addTriple(new Erfurt_Sparql_Query2_IriRef($resource), new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE), $type);
         if ($types = $model->sparqlQuery($query)) {
             $type = $types[0]['type'];
         }
     }
     if (isset($options['rel'])) {
         $rel = $options['rel'];
     } elseif (isset($this->view->rel)) {
         $rel = $this->view->rel;
     }
     if (!is_array($rel)) {
         $rel = array($rel);
     }
     if (isset($options['rev'])) {
         $rev = $options['rev'];
     } elseif (isset($this->view->rev)) {
         $rev = $this->view->rev;
     }
     if (!is_array($rev)) {
         $rev = array($rev);
     }
     if (isset($options['itemref'])) {
         $itemref = $options['itemref'];
     } elseif (isset($this->view->itemref)) {
         $itemref = $this->view->itemref;
     }
     foreach (array('id', 'class') as $name) {
         if (isset($options[$name])) {
             $html[$name] = $options[$name];
         } elseif (isset($this->view->{$name})) {
             $html[$name] = $this->view->{$name};
         }
     }
     switch ($markup) {
         case 'RDFa':
             $attr .= ' resource="' . $resource . '"';
             if ($type !== null) {
                 $attr .= ' typeof="' . $type . '"';
             }
             if ($rel) {
                 $attr .= ' rel="' . implode(' ', $rel) . '"';
             }
             if ($rev) {
                 $attr .= ' rev="' . implode(' ', $rev) . '"';
             }
             break;
         case 'microdata':
             /* some parsers (Google) don't merge properties
                from multiple elements for the same resource */
             if (isset(static::$_itemref[$resource])) {
                 $flag = true;
                 if (!isset($html['id'])) {
                     //throw new OntoWiki_Exception('Attempting to create additional element for the same resource without itemref link (no itemref).');
                     $flag = false;
                 } elseif (!in_array($html['id'], static::$_itemref[$resource])) {
                     //throw new OntoWiki_Exception('Attempting to create additional element for the same resource without itemref link (ID not listed in itemref).');
                     $flag = false;
                 }
                 if ($flag) {
                     break;
                 }
             }
             $attr .= ' itemscope="itemscope"';
             /* "The itemid attribute must not be specified on elements
                that do not have both an itemscope attribute
                and an itemtype attribute specified" */
             if ($type !== null) {
                 $attr .= sprintf(' itemid="%s" itemtype="%s"', $resource, $type);
             }
             if ($rel) {
                 $attr .= sprintf(' itemprop="%s"', implode(' ', $rel));
             }
             //if ($rev)           $iprefix = sprintf('<link itemprop="%s" href="#TODO"/>%s', implode(' ', $rev), $iprefix);
             if ($itemref) {
                 $attr .= sprintf(' itemref="%s"', implode(' ', $itemref));
                 /* remember which elements are linked using itemref
                    so context markup can be disabled for them later */
                 static::$_itemref[$resource] = $itemref;
             } else {
                 static::$_itemref[$resource] = array();
             }
             break;
     }
     foreach ($html as $name => $value) {
         $attr .= ' ' . $name . '="' . $value . '"';
     }
     if (!isset($options['tag'])) {
         if (!isset($this->view->tag)) {
             $this->view->tag = 'span';
         }
         $tag = $this->view->tag;
     } else {
         $tag = $options['tag'];
     }
     // stack information for closecontext
     if (!isset($this->view->dataMarkupContextStack)) {
         $this->view->dataMarkupContextStack = array();
     }
     array_push($this->view->dataMarkupContextStack, array('tag' => $tag));
     return "<{$tag}{$attr}>{$iprefix}";
 }
コード例 #4
0
 /**
  * Handles search requests
  */
 public function searchAction()
 {
     $title = $this->_owApp->translate->_('Resource Search');
     $this->view->placeholder('main.window.title')->set($title);
     OntoWiki::getInstance()->getNavigation()->disableNavigation();
     $store = $this->_erfurt->getStore();
     if (isset($this->_owApp->selectedModel) && null !== $this->_owApp->selectedModel) {
         $modelUri = $this->_owApp->selectedModel->getModelIri();
     } else {
         $modelUri = null;
     }
     if ($this->_request->getParam('searchtext-input') !== null) {
         $searchText = trim($this->getParam('searchtext-input'));
     }
     $error = false;
     $errorMsg = '';
     // check if search is already errorenous
     if (!$error) {
         // try sparql query pre search check (with limit to 1)
         $elements = $store->getSearchPattern($searchText, $modelUri);
         $query = new Erfurt_Sparql_Query2();
         $query->addElements($elements);
         $query->setLimit(1);
         $query->addFrom($modelUri);
         try {
             $store->sparqlQuery($query);
         } catch (Exception $e) {
             // build error message
             $this->_owApp->appendMessage(new OntoWiki_Message($this->_owApp->translate->_('search failed'), OntoWiki_Message::ERROR));
             $error = true;
             $errorMsg .= 'Message details: ';
             $errorMsg .= str_replace('LIMIT 1', '', $e->getMessage());
         }
     }
     // if error occured set output for error page
     if ($error) {
         $this->view->errorMsg = $errorMsg;
     } else {
         // set redirect to effective search controller
         $url = new OntoWiki_Url(array('controller' => 'list'), array());
         $url->setParam('s', $searchText);
         $url->setParam('init', '1');
         $this->_redirect($url);
     }
 }
コード例 #5
0
ファイル: Instances.php プロジェクト: cfrancois7/aksw.org
 /**
  * if the selected resources changed (due to filters or limit or offset)
  * we have to change the value query as well (because the resources are mentioned as subjects)
  *
  * @return OntoWiki_Model_Instances $this
  */
 protected function updateValueQuery()
 {
     if ($this->_valueQueryUptodate) {
         return $this;
     }
     $resources = $this->getShownResources();
     foreach ($resources as $key => $resource) {
         $resources[$key] = new Erfurt_Sparql_Query2_SameTerm($this->_resourceVar, new Erfurt_Sparql_Query2_IriRef($resource['value']));
     }
     if ($this->_valueQueryResourceFilter == null) {
         $this->_valueQueryResourceFilter = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_BooleanLiteral(false));
         $this->_valueQuery->addElement($this->_valueQueryResourceFilter);
     }
     $this->_valueQueryResourceFilter->setConstraint(empty($resources) ? new Erfurt_Sparql_Query2_BooleanLiteral(false) : new Erfurt_Sparql_Query2_ConditionalOrExpression($resources));
     //fix for a strange issue where a query with only optionals fails
     //(but there is a magic/unkown condition, that makes it work for some queries!?)
     //if($this->_store->getBackendName() == 'ZendDb'){
     $hasTriple = false;
     foreach ($this->_valueQuery->getWhere()->getElements() as $element) {
         if ($element instanceof Erfurt_Sparql_Query2_IF_TriplesSameSubject) {
             $hasTriple = true;
             break;
         }
     }
     if (!$hasTriple) {
         $this->_valueQuery->getWhere()->addElement(new Erfurt_Sparql_Query2_Triple($this->_resourceVar, new Erfurt_Sparql_Query2_Var('p'), new Erfurt_Sparql_Query2_Var('o')));
     }
     //}
     //remove duplicate triples...
     $this->_valueQuery->optimize();
     $this->_valueQueryUptodate = true;
     return $this;
 }
コード例 #6
0
ファイル: ClassNode.php プロジェクト: FTeichmann/Erfurt
 public static function addFilterHelper(Erfurt_Sparql_Query2 $query, Erfurt_Sparql_Query2_Var $resVar, $predicate, $type, $value)
 {
     if (is_string($predicate)) {
         $predicate = new Erfurt_Sparql_Query2_IriRef($predicate);
     }
     if (!$predicate instanceof Erfurt_Sparql_Query2_IriRef) {
         throw new RuntimeException('Argument 3 passed to Erfurt_Sparql_Query2_Abstraction_ClassNode::addFilterHelper must be an instance of Erfurt_Sparql_Query2_IriRef instance of ' . typeHelper($predicate) . ' given');
     }
     switch ($type) {
         case 'contains':
             $propVar = new Erfurt_Sparql_Query2_Var($predicate);
             $filteringTriple = new Erfurt_Sparql_Query2_Triple($resVar, $predicate, $propVar);
             $filterExp = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_Regex($propVar, new Erfurt_Sparql_Query2_RDFLiteral($value)));
             $query->getWhere()->addElement($filteringTriple);
             $query->getWhere()->addElement($filterExp);
             return array($filteringTriple, $filterExp);
             break;
         case 'equals':
             $filteringTriple = new Erfurt_Sparql_Query2_Triple($resVar, $predicate, new Erfurt_Sparql_Query2_RDFLiteral($value));
             $query->getWhere()->addElement($filteringTriple);
             return $filteringTriple;
             break;
         default:
             throw new RuntimeException('Argument 4 passed to Erfurt_Sparql_Query2_Abstraction_ClassNode::addFilterHelper must be "equals" or "contains", ' . $type . ' given');
             break;
     }
     return null;
 }
コード例 #7
0
 /**
  * RouteShutdown is the earliest event in the dispatch cycle, where a
  * fully routed request object is available
  */
 public function routeShutdown(Zend_Controller_Request_Abstract $request)
 {
     if (isset($request->noListRedirect)) {
         return;
     }
     $ontoWiki = OntoWiki::getInstance();
     // TODO: Refactor! The list helper is from an extension! Do not access extensions
     // from core code!
     if (!Zend_Controller_Action_HelperBroker::hasHelper('List')) {
         return;
     }
     $listHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('List');
     // only once and only when possible
     if (!$this->_isSetup && $ontoWiki->selectedModel != null && (isset($request->init) || isset($request->instancesconfig) || isset($request->s) || isset($request->class) || isset($request->p) || isset($request->limit))) {
         $frontController = Zend_Controller_Front::getInstance();
         $store = $ontoWiki->erfurt->getStore();
         $resource = $ontoWiki->selectedResource;
         $session = $ontoWiki->session;
         // when switching to another class:
         // reset session vars (regarding the list)
         if (isset($request->init)) {
             //echo 'kill list session';
             // reset the instances object
             unset($session->instances);
             //reset config from tag explorer
             unset($session->cloudproperties);
         }
         //react on m parameter to set the selected model
         if (isset($request->m)) {
             try {
                 $model = $store->getModel($request->getParam('m', null, false));
                 $ontoWiki->selectedModel = $model;
             } catch (Erfurt_Store_Exception $e) {
                 $model = null;
                 $ontoWiki->selectedModel = null;
             }
         }
         $list = $listHelper->getLastList();
         if (!isset($request->list) && $list == null || isset($request->init)) {
             // instantiate model, that selects all resources
             $list = new OntoWiki_Model_Instances($store, $ontoWiki->selectedModel, array());
         } else {
             // use the object from the session
             if (isset($request->list) && $request->list != $listHelper->getLastListName()) {
                 if ($listHelper->listExists($request->list)) {
                     $list = $listHelper->getList($request->list);
                     $ontoWiki->appendMessage(new OntoWiki_Message('reuse list'));
                 } else {
                     throw new OntoWiki_Exception('your trying to configure a list, but there is no list name specified');
                 }
             }
             $list->setStore($store);
             // store is not serialized in session! reset it
         }
         //local function :)
         function _json_decode($string)
         {
             /* PHP 5.3 DEPRECATED ; REMOVE IN PHP 6.0 */
             if (get_magic_quotes_gpc()) {
                 // add slashes for unicode chars in json
                 $string = str_replace('\\u', '\\\\u', $string);
                 //$string = str_replace('\\u000a','', $string);
                 $string = stripslashes($string);
             }
             /* ---- */
             return json_decode($string, true);
         }
         //a shortcut for search param
         if (isset($request->s)) {
             if (isset($request->instancesconfig)) {
                 $config = _json_decode($request->instancesconfig);
                 if (null === $config) {
                     throw new OntoWiki_Exception('Invalid parameter instancesconfig (json_decode failed): ' . $this->_request->setup);
                 }
             } else {
                 $config = array();
             }
             if (!isset($config['filter'])) {
                 $config['filter'] = array();
             }
             $config['filter'][] = array('action' => 'add', 'mode' => 'search', 'searchText' => $request->s);
             $request->setParam('instancesconfig', json_encode($config));
         }
         //a shortcut for class param
         if (isset($request->class)) {
             if (isset($request->instancesconfig)) {
                 $config = _json_decode($request->instancesconfig);
                 if (null === $config) {
                     throw new OntoWiki_Exception('Invalid parameter instancesconfig (json_decode failed): ' . $this->_request->setup);
                 }
             } else {
                 $config = array();
             }
             if (!isset($config['filter'])) {
                 $config['filter'] = array();
             }
             $config['filter'][] = array('action' => 'add', 'mode' => 'rdfsclass', 'rdfsclass' => $request->class);
             $request->setParam('instancesconfig', json_encode($config));
         }
         //check for change-requests
         if (isset($request->instancesconfig)) {
             $config = _json_decode($request->instancesconfig);
             if (null === $config) {
                 throw new OntoWiki_Exception('Invalid parameter instancesconfig (json_decode failed)');
             }
             // TODO is this a bug? why access sort->asc when it is null?
             if (isset($config['sort'])) {
                 if ($config['sort'] == null) {
                     $list->orderByUri($config['sort']['asc']);
                 } else {
                     $list->setOrderProperty($config['sort']['uri'], $config['sort']['asc']);
                 }
             }
             if (isset($config['shownProperties'])) {
                 foreach ($config['shownProperties'] as $prop) {
                     if ($prop['action'] == 'add') {
                         $list->addShownProperty($prop['uri'], $prop['label'], $prop['inverse']);
                     } else {
                         $list->removeShownProperty($prop['uri'], $prop['inverse']);
                     }
                 }
             }
             if (isset($config['filter'])) {
                 foreach ($config['filter'] as $filter) {
                     // set default value for action and mode if they're not assigned
                     if (!isset($filter['action'])) {
                         $filter['action'] = 'add';
                     }
                     if (!isset($filter['mode'])) {
                         $filter['mode'] = 'box';
                     }
                     if ($filter['action'] == 'add') {
                         if ($filter['mode'] == 'box') {
                             $list->addFilter($filter['property'], isset($filter['isInverse']) ? $filter['isInverse'] : false, isset($filter['propertyLabel']) ? $filter['propertyLabel'] : 'defaultLabel', $filter['filter'], isset($filter['value1']) ? $filter['value1'] : null, isset($filter['value2']) ? $filter['value2'] : null, isset($filter['valuetype']) ? $filter['valuetype'] : 'literal', isset($filter['literaltype']) ? $filter['literaltype'] : null, isset($filter['hidden']) ? $filter['hidden'] : false, isset($filter['id']) ? $filter['id'] : null, isset($filter['negate']) ? $filter['negate'] : false);
                         } else {
                             if ($filter['mode'] == 'search') {
                                 $list->addSearchFilter($filter['searchText'], isset($filter['id']) ? $filter['id'] : null);
                             } else {
                                 if ($filter['mode'] == 'rdfsclass') {
                                     $list->addTypeFilter($filter['rdfsclass'], isset($filter['id']) ? $filter['id'] : null);
                                 } else {
                                     if ($filter['mode'] == 'cnav') {
                                         $list->addTripleFilter(NavigationHelper::getInstancesTriples($filter['uri'], $filter['cnav']), isset($filter['id']) ? $filter['id'] : null);
                                     } else {
                                         if ($filter['mode'] == 'query') {
                                             try {
                                                 //echo $filter->query."   ";
                                                 $query = Erfurt_Sparql_Query2::initFromString($filter['query']);
                                                 // TODO what the hell is this?!
                                                 if (!$query instanceof Exception) {
                                                     $list->addTripleFilter($query->getWhere()->getElements(), isset($filter['id']) ? $filter['id'] : null);
                                                 }
                                                 //echo $query->getSparql();
                                             } catch (Erfurt_Sparql_ParserException $e) {
                                                 $ontoWiki->appendMessage('the query could not be parsed');
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     } else {
                         $list->removeFilter($filter['id']);
                     }
                 }
             }
             if (isset($config['order'])) {
                 foreach ($config['order'] as $prop) {
                     if ($prop['action'] == 'set') {
                         if ($prop['mode'] == 'var') {
                             $list->setOrderVar($prop['var']);
                         } else {
                             $list->setOrderUri($prop['uri']);
                         }
                     }
                 }
             }
         }
         if (isset($request->limit)) {
             // how many results per page
             $list->setLimit($request->limit);
         } else {
             $list->setLimit(10);
         }
         if (isset($request->p)) {
             // p is the page number
             $list->setOffset($request->p * $list->getLimit() - $list->getLimit());
         } else {
             $list->setOffset(0);
         }
         //save to session
         $name = isset($request->list) ? $request->list : 'instances';
         $listHelper->updateList($name, $list, true);
         // avoid setting up twice
         $this->_isSetup = true;
         // redirect normal requests if config-params are given to a param-free uri
         // (so a browser reload by user does nothing unwanted)
         if (!$request->isXmlHttpRequest()) {
             //strip of url parameters that modify the list
             $url = new OntoWiki_Url(array(), null, array('init', 'instancesconfig', 's', 'p', 'limit', 'class', 'list'));
             //redirect
             $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
             $redirector->gotoUrl($url);
         }
     }
 }
コード例 #8
0
ファイル: ElementHelper.php プロジェクト: FTeichmann/Erfurt
 public function __construct()
 {
     $this->id = Erfurt_Sparql_Query2::getNextID();
 }
コード例 #9
0
 /**
  * Searches the local database for URIs. If mode is set to properties only,
  * only defined properties and URIs that are used at least once as a
  * property are returned.
  *
  * the classes array is used for class restrictions
  *
  * @param array  $termsArray
  * @param string $modelUri
  * @param int    $mode
  * @param int    $limit
  * @param array  $classes
  *
  * @return array
  */
 private function _searchLocal(array $termsArray, $modelUri, $mode, $limit, $classes = array())
 {
     if ($mode === self::SEARCH_MODE_PROPERTIES) {
         return $this->_searchLocalPropertiesOnly($termsArray, $modelUri, $limit);
     }
     $store = Erfurt_App::getInstance()->getStore();
     // get a store specific text-search query2 object
     $searchPattern = $store->getSearchPattern(implode(" ", $termsArray), $modelUri);
     $query = new Erfurt_Sparql_Query2();
     $query->addElements($searchPattern);
     $projVar = new Erfurt_Sparql_Query2_Var('resourceUri');
     $query->addProjectionVar($projVar);
     // add class restriction patterns for each class
     foreach ($classes as $class) {
         $classPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
         $classPattern->addTriple($projVar, new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE), new Erfurt_Sparql_Query2_IriRef($class));
         $query->addElement($classPattern);
     }
     $query->setLimit(20);
     $query->setDistinct(true);
     $queryResult = $store->sparqlQuery($query, array('result_format' => 'extended'));
     $tempResult = array();
     foreach ($queryResult['results']['bindings'] as $row) {
         $object = isset($row['o']) ? $row['o']['value'] : null;
         $weight = $this->_getWeight($termsArray, $row['resourceUri']['value'], $object);
         if (isset($tempResult[$row['resourceUri']['value']])) {
             if ($weight > $tempResult[$row['resourceUri']['value']]) {
                 $tempResult[$row['resourceUri']['value']] = $weight;
             }
         } else {
             $tempResult[$row['resourceUri']['value']] = $weight;
         }
     }
     arsort($tempResult);
     require_once 'OntoWiki/Model/TitleHelper.php';
     require_once 'OntoWiki/Utils.php';
     if (null !== $modelUri) {
         $model = $store->getModel($modelUri, false);
         $titleHelper = new OntoWiki_Model_TitleHelper($model);
     } else {
         $titleHelper = new OntoWiki_Model_TitleHelper();
     }
     $titleHelper->addResources(array_keys($tempResult));
     $translate = $this->_owApp->translate;
     // create different source description strings
     if (count($classes) > 0) {
         $sourceString = $translate->_('Local Search') . ' (' . $translate->_('recommended') . ')';
     } else {
         $sourceString = $translate->_('Local Search');
     }
     $result = array();
     foreach ($tempResult as $uri => $w) {
         $title = $titleHelper->getTitle($uri);
         if (null !== $title) {
             $result[$uri] = str_replace('|', '&Iota;', $title) . '|' . $uri . '|' . $sourceString;
         } else {
             $result[$uri] = OntoWiki_Utils::compactUri($uri) . $uri . '|' . $sourceString;
         }
     }
     return $result;
 }
コード例 #10
0
 protected function _buildSubCheckQuery($uri, $setup)
 {
     $subVar = new Erfurt_Sparql_Query2_Var('subResourceUri');
     $searchVar = new Erfurt_Sparql_Query2_Var('resourceUri');
     //$classVar = new Erfurt_Sparql_Query2_Var('classUri');
     $query = new Erfurt_Sparql_Query2();
     $query->addProjectionVar($subVar);
     $query->setDistinct();
     $this->_owApp->logger->info("data: " . print_r($query, true));
     $elements = array();
     $in = array();
     $out = array();
     if (isset($setup->config->hierarchyRelations->in)) {
         if (count($setup->config->hierarchyRelations->in) > 1) {
             // init union var
             $unionSub = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
             // parse config gile
             foreach ($setup->config->hierarchyRelations->in as $rel) {
                 // sub stuff
                 $groupPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
                 // add triplen
                 $groupPattern->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar);
                 // add triplet to union var
                 $unionSub->addElement($groupPattern);
             }
             $in[] = $unionSub;
         } else {
             $rel = $setup->config->hierarchyRelations->in;
             // add optional sub relation
             // create optional graph to load sublacsses of selected class
             $queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern();
             $queryOptional->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), $searchVar);
             $in[] = $queryOptional;
         }
     }
     if (isset($setup->config->hierarchyRelations->out)) {
         if (count($setup->config->hierarchyRelations->out) > 1) {
             // init union var
             $unionSub = new Erfurt_Sparql_Query2_GroupGraphPattern();
             // parse config gile
             foreach ($setup->config->hierarchyRelations->out as $rel) {
                 // sub stuff
                 $optPattern = new Erfurt_Sparql_Query2_OptionalGraphPattern();
                 // add triple
                 $optPattern->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar);
                 // add triplet to union var
                 $unionSub->addElement($optPattern);
             }
             $out[] = $unionSub;
         } else {
             $rel = $setup->config->hierarchyRelations->out;
             // add optional sub relation
             // create optional graph to load sublacsses of selected class
             $queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern();
             $queryOptional->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), $subVar);
             $out[] = $queryOptional;
         }
     }
     $inout = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     $inout->addElements($in);
     $inout->addElements($out);
     $elements[] = $inout;
     /*$elements[] = new Erfurt_Sparql_Query2_Triple(
           $searchVar,
           new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE),
           $classVar
       );*/
     // add filter
     $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_sameTerm($searchVar, new Erfurt_Sparql_Query2_IriRef($uri)));
     $query->addElements($elements);
     $query->setLimit(1);
     // log results
     $this->_owApp->logger->info('NavigationController CHECK SUB: ' . PHP_EOL . $query->__toString());
     return $query;
 }
コード例 #11
0
ファイル: Query2.php プロジェクト: FTeichmann/Erfurt
 public function __wakeup()
 {
     self::$idCounter = $this->idCounterSerialized;
     //restore the static var
 }
コード例 #12
0
 /**
  * Method that counts already existing distinct datasets for given uri
  *
  * @param $uri uri string
  *
  * @return int distinct existing datasets
  */
 private function countUriPattern($uri)
 {
     $query = new Erfurt_Sparql_Query2();
     $query->setDistinct(true);
     $unions = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     $subjectVar = new Erfurt_Sparql_Query2_Var('s');
     $query->addProjectionVar($subjectVar);
     // create six temporary vars (not selected in query)
     $tempVars = array();
     for ($i = 0; $i < 6; $i++) {
         $tempVars[] = new Erfurt_Sparql_Query2_Var('var' . $i);
     }
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($subjectVar, $tempVars[0], $tempVars[1]);
     $unions->addElement($singlePattern);
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($tempVars[2], $subjectVar, $tempVars[3]);
     $unions->addElement($singlePattern);
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($tempVars[4], $tempVars[5], $subjectVar);
     $unions->addElement($singlePattern);
     $query->getWhere()->addElement($unions);
     $filter = new Erfurt_Sparql_Query2_ConditionalOrExpression();
     $filter->addElement(new Erfurt_Sparql_Query2_Regex($subjectVar, new Erfurt_Sparql_Query2_RDFLiteral('^' . $uri), new Erfurt_Sparql_Query2_RDFLiteral('i')));
     $query->addFilter($filter);
     $result = $this->_owApp->erfurt->getStore()->countWhereMatches($this->_model->getModelIri(), $query->getWhere(), 's', true);
     return $result;
 }
コード例 #13
0
 private function checkConfig($config)
 {
     $resVar = new Erfurt_Sparql_Query2_Var('resourceUri');
     $typeVar = new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE);
     $query = new Erfurt_Sparql_Query2();
     $query->addProjectionVar($resVar)->setDistinct(true);
     $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     if (is_string($config->hierarchyTypes)) {
         $config->hierarchyTypes = array($config->hierarchyTypes);
     }
     foreach ($config->hierarchyTypes->toArray() as $type) {
         $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern();
         $ggp->addTriple($resVar, $typeVar, new Erfurt_Sparql_Query2_IriRef($type));
         $union->addElement($ggp);
     }
     $query->addElement($union);
     $query->setLimit(1);
     $allResults = $this->_owApp->selectedModel->sparqlQuery($query);
     /*$this->_owApp->logger->info(
           'Navigation Query: ' .PHP_EOL . $query->__toString()
       );
       $this->_owApp->logger->info(
           'Navigation Query Results: ' .PHP_EOL . print_r($all_results)
       );*/
     return count($allResults);
 }
コード例 #14
0
ファイル: Model.php プロジェクト: FTeichmann/Erfurt
 /**
  * Moves resource to new URI
  * renaming all occurences of the resource.
  *
  * @param string $oldUri The URI that identifies the resource.
  * @param string $newUri The URI to move resource to.
  *
  * @return void
  */
 public function renameResource($oldUri, $newUri)
 {
     $query = new Erfurt_Sparql_Query2();
     $query->setDistinct(true);
     $vars = array();
     foreach (array('s', 'p', 'o') as $varName) {
         $vars[$varName] = new Erfurt_Sparql_Query2_Var($varName);
         $query->addProjectionVar($vars[$varName]);
     }
     $oldUriRef = new Erfurt_Sparql_Query2_IriRef($oldUri);
     $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     foreach ($vars as $var) {
         $group = new Erfurt_Sparql_Query2_GroupGraphPattern();
         $group->addTriple($vars['s'], $vars['p'], $vars['o']);
         $group->addFilter(new Erfurt_Sparql_Query2_sameTerm($var, $oldUriRef));
         $union->addElement($group);
     }
     $query->addElement($union);
     $result = $this->sparqlQuery($query, array('result_format' => 'extended'));
     $removed = array();
     $added = array();
     foreach ($result['results']['bindings'] as $s) {
         // result format from sparqlQuery
         // isn't the same as format for delete/addMultipleStatements
         if (array_key_exists('xml:lang', $s['o'])) {
             $s['o']['lang'] = $s['o']['xml:lang'];
             unset($s['o']['xml:lang']);
         }
         $removed[$s['s']['value']][$s['p']['value']][] = $s['o'];
         foreach (array('s', 'p', 'o') as $varName) {
             if ($s[$varName]['type'] === 'uri' && $s[$varName]['value'] === $oldUri) {
                 $s[$varName]['value'] = $newUri;
             }
         }
         $added[$s['s']['value']][$s['p']['value']][] = $s['o'];
     }
     $this->deleteMultipleStatements($removed);
     $this->addMultipleStatements($added);
 }
コード例 #15
0
 public function querylist($query, $template, $templateOptions = array(), $options = array())
 {
     $owapp = OntoWiki::getInstance();
     $store = $owapp->erfurt->getStore();
     $model = $owapp->selectedModel;
     $prefix = isset($options['prefix']) ? $options['prefix'] : '';
     $suffix = isset($options['suffix']) ? $options['suffix'] : '';
     $delimiter = isset($options['delimiter']) ? $options['delimiter'] : '';
     $property = isset($options['property']) ? $options['property'] : '';
     if ($this->_titleHelper == null) {
         $this->_titleHelper = new OntoWiki_Model_TitleHelper($model);
     }
     if ($property !== '') {
         // construct query to retrieve specified property of the current resource
         $query = new Erfurt_Sparql_Query2();
         $resourceUriVar = new Erfurt_Sparql_Query2_Var('resourceUri');
         $query->addProjectionVar($resourceUriVar);
         $query->addTriple(new Erfurt_Sparql_Query2_IriRef($this->view->resourceUri), new Erfurt_Sparql_Query2_IriRef($property), $resourceUriVar);
     }
     try {
         $result = $model->sparqlQuery($query);
     } catch (Exception $e) {
         // executions failed (return nothing)
         return $e->getMessage();
     }
     // pre-fill the title helper
     foreach ($result as $row) {
         foreach ($row as $value) {
             if (Erfurt_Uri::check($value)) {
                 $this->_titleHelper->addResource($value);
             }
         }
     }
     /*
      * If the ordering doesn't work using the 'ORDER BY' clause you should add ASC() around the
      * variable which should by sorted. E.g. "… } ORDER BY ASC(?start) ASC(?end)"
      */
     if (!stristr($query, 'ORDER BY')) {
         // sort results by resource title
         usort($result, array('Site_View_Helper_Querylist', '_cmpTitles'));
     }
     $return = '';
     $count = count($result);
     $current = 0;
     $odd = true;
     foreach ($result as $row) {
         // shift status vars
         $current++;
         $odd = !$odd;
         // prepare a first / last hint for the template
         $listhint = $current == 1 ? 'first' : null;
         $listhint = $current == $count ? 'last' : $listhint;
         $row['listhint'] = $listhint;
         // prepare other template vars
         $row['oddclass'] = $odd ? 'odd' : 'even';
         $row['rowcount'] = $count;
         $row['current'] = $current;
         if (!Erfurt_Uri::check($row['resourceUri'])) {
             $row['title'] = $row['resourceUri'];
         } else {
             $row['title'] = $this->_titleHelper->getTitle($row['resourceUri']);
         }
         $row = array_merge($row, $templateOptions);
         // render the template
         $return .= $prefix . $this->view->partial($template, $row) . $suffix;
         if ($current < $count) {
             $return .= $delimiter;
         }
     }
     return $return;
 }