public function getContents() { $query = new Erfurt_Sparql_SimpleQuery(); $results = false; $similars = array(); $typesArr = array(); $types = $this->_getTypes(); $url = new OntoWiki_Url(array('route' => 'properties'), array('r')); $listUrl = new OntoWiki_Url(array('route' => 'instances'), array()); $titleHelper = new OntoWiki_Model_TitleHelper($this->_owApp->selectedModel); $titleHelper->addResources($types); foreach ($types as $typeUri) { if (!array_key_exists($typeUri, $typesArr)) { $typesArr[$typeUri] = $typeUri; } $query->resetInstance()->setProloguePart('SELECT DISTINCT ?uri')->setWherePart('WHERE { ?uri a <' . $typeUri . '> . FILTER (!sameTerm(?uri, <' . (string) $this->_owApp->selectedResource . '>)) FILTER (isURI(?uri)) }')->setLimit(OW_SHOW_MAX + 1); if ($instances = $this->_owApp->selectedModel->sparqlQuery($query)) { $results = true; $url->setParam('r', $typeUri, true); // create properties url for the class $typesArr[$typeUri] = array('uri' => $typeUri, 'url' => (string) $url, 'title' => $titleHelper->getTitle($typeUri, $this->_lang), 'has_more' => false); // has_more is used for the dots if (count($instances) > OW_SHOW_MAX) { $typesArr[$typeUri]['has_more'] = true; $instances = array_splice($instances, 0, OW_SHOW_MAX); } $instTitleHelper = new OntoWiki_Model_TitleHelper($this->_owApp->selectedModel); $instTitleHelper->addResources($instances, 'uri'); $conf['filter'][0] = array('mode' => 'rdfsclass', 'rdfsclass' => $typeUri, 'action' => 'add'); // the list url is used for the context menu link $listUrl->setParam('instancesconfig', json_encode($conf), true); $listUrl->setParam('init', true, true); $typesArr[$typeUri]['listUrl'] = (string) $listUrl; foreach ($instances as $row) { $instanceUri = $row['uri']; // set URL $url->setParam('r', $instanceUri, true); if (!array_key_exists($typeUri, $similars)) { $similars[$typeUri] = array(); } // add instance $similars[$typeUri][$instanceUri] = array('uri' => $instanceUri, 'title' => $instTitleHelper->getTitle($instanceUri, $this->_lang), 'url' => (string) $url); } } } $this->view->types = $typesArr; $this->view->similars = $similars; if (!$results) { $this->view->message = 'No matches.'; } return $this->render('similarinstances'); }
public function getContents() { $titleHelper = new OntoWiki_Model_TitleHelper($this->_owApp->selectedModel); $query = new Erfurt_Sparql_SimpleQuery(); $results = false; $_predicates = $this->_predicates; $properties = array(); $instances = array(); $url = new OntoWiki_Url(array('route' => 'properties'), array('r')); $titleHelper->addResources($_predicates, 'uri'); foreach ($_predicates as $predicate) { $predicateUri = $predicate['uri']; $url->setParam('r', $predicateUri, true); // create properties url for the relation $properties[$predicateUri]['uri'] = $predicateUri; $properties[$predicateUri]['url'] = (string) $url; $properties[$predicateUri]['title'] = $titleHelper->getTitle($predicateUri, $this->_lang); $query->resetInstance()->setProloguePart('SELECT DISTINCT ?uri')->setWherePart('WHERE { ?uri <' . $predicateUri . '> <' . (string) $this->_owApp->selectedResource . '> . FILTER (isURI(?uri)) }')->setLimit(OW_SHOW_MAX + 1); if ($subjects = $this->_owApp->selectedModel->sparqlQuery($query)) { $results = true; // has_more is used for the dots if (count($subjects) > OW_SHOW_MAX) { $properties[$predicateUri]['has_more'] = true; $subjects = array_splice($subjects, 0, OW_SHOW_MAX); } else { $properties[$predicateUri]['has_more'] = false; } $subjectTitleHelper = new OntoWiki_Model_TitleHelper($this->_owApp->selectedModel); $subjectTitleHelper->addResources($subjects, 'uri'); foreach ($subjects as $subject) { $subjectUri = $subject['uri']; $subject['title'] = $subjectTitleHelper->getTitle($subjectUri, $this->_lang); // set URL $url->setParam('r', $subjectUri, true); $subject['url'] = (string) $url; if (array_key_exists($predicateUri, $instances)) { if (!array_key_exists($subjectUri, $instances[$predicateUri])) { $instances[$predicateUri][$subjectUri] = $subject; } } else { $instances[$predicateUri] = array($subjectUri => $subject); } } } } $this->view->resource = $this->_owApp->selectedResource; $this->view->properties = $properties; $this->view->instances = $instances; if (!$results) { $this->view->message = 'No matches.'; } return $this->render('linkinghere'); }