public function testHardModel() { $this->hardify(); $referencer = ResourceReferencer::singleton(); $propertyProxy = PropertyProxy::singleton(); $proxy = ResourceProxy::singleton(); $domainProperty = new core_kernel_classes_Property(RDFS_DOMAIN); $rangeProperty = new core_kernel_classes_Property(RDFS_RANGE); $literalClass = new core_kernel_classes_Class(RDFS_LITERAL); $subClassOfProperty = new core_kernel_classes_Property(RDFS_SUBCLASSOF); $this->assertTrue($this->targetActorsProperty->exists()); $this->assertTrue($this->targetMovieClass->exists()); $this->assertTrue($this->targetWorkClass->isSubclassOf($this->taoClass)); $this->assertTrue($this->targetWorkClass->getOnePropertyValue($subClassOfProperty)->getUri() == $this->taoClass->getUri()); $this->assertTrue($referencer->isClassReferenced($this->targetWorkClass)); $this->assertFalse(is_a($proxy->getImpToDelegateTo($this->targetWorkClass), 'core_kernel_persistence_smoothsql_Class')); $this->assertFalse(is_a($proxy->getImpToDelegateTo($this->targetMovieClass), 'core_kernel_persistence_smoothsql_Class')); $this->assertTrue($this->targetAuthorProperty->getOnePropertyValue($domainProperty)->getUri() == $this->targetWorkClass->getUri()); $this->assertTrue($this->targetAuthorProperty->getOnePropertyValue($rangeProperty)->getUri() == RDFS_LITERAL); $this->assertTrue($this->targetMovieClass->isSubclassOf($this->targetWorkClass)); $this->assertTrue($this->targetMovieClass->getOnePropertyValue($subClassOfProperty)->getUri() == $this->targetWorkClass->getUri()); $this->assertTrue($referencer->isClassReferenced($this->targetMovieClass)); $this->assertTrue($this->targetProducerProperty->getOnePropertyValue($domainProperty)->getUri() == $this->targetMovieClass->getUri()); $this->assertTrue($this->targetProducerProperty->getOnePropertyValue($rangeProperty)->getUri() == RDFS_LITERAL); $this->assertTrue($this->targetActorsProperty->getOnePropertyValue($domainProperty)->getUri() == $this->targetMovieClass->getUri()); $this->assertTrue($this->targetActorsProperty->getOnePropertyValue($rangeProperty)->getUri() == RDFS_LITERAL); $this->assertTrue($this->targetRelatedMoviesProperty->getOnePropertyValue($domainProperty)->getUri() == $this->targetMovieClass->getUri()); $this->assertTrue($this->targetRelatedMoviesProperty->getOnePropertyValue($rangeProperty)->getUri() == $this->targetMovieClass->getUri()); $parentClasses = $this->targetMovieClass->getParentClasses(); $this->assertEquals(1, count($parentClasses)); $this->assertTrue(array_key_exists($this->targetWorkClass->getUri(), $parentClasses)); $prop = new core_kernel_classes_Property($this->targetRelatedMoviesProperty); $this->assertTrue($prop->isMultiple()); }
public function testGetParentClasses() { $class = new core_kernel_classes_Class(GENERIS_BOOLEAN); $indirectParentClasses = $class->getParentClasses(true); $this->assertEquals(2, count($indirectParentClasses)); $expectedResult = array(CLASS_GENERIS_RESOURCE, RDFS_RESOURCE); foreach ($indirectParentClasses as $parentClass) { $this->assertInstanceOf('core_kernel_classes_Class', $parentClass); $this->assertTrue(in_array($parentClass->getUri(), $expectedResult)); } $directParentClass = $class->getParentClasses(); $this->assertEquals(1, count($directParentClass)); foreach ($directParentClass as $parentClass) { $this->assertInstanceOf('core_kernel_classes_Class', $parentClass); $this->assertEquals(CLASS_GENERIS_RESOURCE, $parentClass->getUri()); } }
public function index() { // load all extensions \common_ext_ExtensionsManager::singleton()->getInstalledExtensions(); $res = $this->getCurrentResource(); $this->setData('res', $res); $this->setData('types', $res->getTypes()); //restricted on the currently selected language //$this->setData('triples', $res->getRdfTriples()->getIterator()); $this->setData('triples', $this->getRdfTriples($res, 'subject')->getIterator()); $this->setData('otriples', $this->getRdfTriples($res, 'object')->getIterator()); $this->setData('ptriples', $this->getRdfTriples($res, 'predicate')->getIterator()); if ($res->isClass()) { $class = new \core_kernel_classes_Class($res->getUri()); $this->setData('subclassOf', $class->getParentClasses(false)); $this->setData('subclasses', $class->getSubClasses()); $this->setData('instances', $class->getInstances()); } $this->setData('userLg', $dataLang = \common_session_SessionManager::getSession()->getDataLanguage()); $this->setView('browse.tpl'); }
public function indexTypes() { $toDo = array(); foreach ($this->resource->getTypes() as $class) { $toDo[] = $class->getUri(); // $document->addField(Document\Field::Text('class', $class->getLabel())); } $done = array(RDFS_RESOURCE, TAO_OBJECT_CLASS); $toDo = array_diff($toDo, $done); $classes = array(); while (!empty($toDo)) { $class = new \core_kernel_classes_Class(array_pop($toDo)); $classes[] = $class->getUri(); foreach ($class->getParentClasses() as $parent) { if (!in_array($parent->getUri(), $done)) { $toDo[] = $parent->getUri(); } } $done[] = $class->getUri(); } $this->document->type_r = $classes; }
/** * @param Document $document */ protected function indexTypes(Document $document) { $toDo = array(); foreach ($this->resource->getTypes() as $class) { $toDo[] = $class->getUri(); $document->addField(Document\Field::Text('class', $class->getLabel())); } $done = array(RDFS_CLASS, TAO_OBJECT_CLASS); $toDo = array_diff($toDo, $done); $classLabels = array(); while (!empty($toDo)) { $class = new \core_kernel_classes_Class(array_pop($toDo)); $classLabels[] = $class->getLabel(); foreach ($class->getParentClasses() as $parent) { if (!in_array($parent->getUri(), $done)) { $toDo[] = $parent->getUri(); } } $done[] = $class->getUri(); } $field = Document\Field::Keyword('class_r', $classLabels); $field->isStored = false; $document->addField($field); }
/** * returns the nodes to open in order to display * all the listed resources to be visible * * @param array $resources list of resources to show * @param core_kernel_classes_Class $rootNode root node of the tree * @return array array of the uris of the nodes to open */ public static function getNodesToOpen($uris, core_kernel_classes_Class $rootNode) { // this array is in the form of // URI to test => array of uris that depend on the URI $toTest = array(); foreach ($uris as $uri) { $resource = new core_kernel_classes_Resource($uri); foreach ($resource->getTypes() as $type) { $toTest[$type->getUri()] = array(); } } $toOpen = array($rootNode->getUri()); while (!empty($toTest)) { reset($toTest); list($classUri, $depends) = each($toTest); unset($toTest[$classUri]); if (in_array($classUri, $toOpen)) { $toOpen = array_merge($toOpen, $depends); } else { $class = new core_kernel_classes_Class($classUri); foreach ($class->getParentClasses(false) as $parent) { if ($parent->getUri() == RDFS_CLASS) { continue; } if (!isset($toTest[$parent->getUri()])) { $toTest[$parent->getUri()] = array(); } $toTest[$parent->getUri()] = array_merge($toTest[$parent->getUri()], array($classUri), $depends); } } } return $toOpen; }
/** * Enable you to get the properties of a class. * The advantage of this method is to limit the level of recusrivity in the * It get the properties up to the defined top class * * @access public * @author Bertrand Chevrier, <*****@*****.**> * @param core_kernel_classes_Class $clazz * @param core_kernel_classes_Class $topLevelClazz * @return array */ public static function getClassProperties(core_kernel_classes_Class $clazz, core_kernel_classes_Class $topLevelClazz = null) { $returnValue = array(); if (is_null($topLevelClazz)) { $topLevelClazz = new core_kernel_classes_Class(TAO_OBJECT_CLASS); } if ($clazz->getUri() == $topLevelClazz->getUri()) { $returnValue = $clazz->getProperties(false); return (array) $returnValue; } //determine the parent path $parents = array(); $top = false; do { if (!isset($lastLevelParents)) { $parentClasses = $clazz->getParentClasses(false); } else { $parentClasses = array(); foreach ($lastLevelParents as $parent) { $parentClasses = array_merge($parentClasses, $parent->getParentClasses(false)); } } if (count($parentClasses) == 0) { break; } $lastLevelParents = array(); foreach ($parentClasses as $parentClass) { if ($parentClass->getUri() == RDFS_CLASS) { continue; } if ($parentClass->getUri() == $topLevelClazz->getUri()) { $parents[$parentClass->getUri()] = $parentClass; $top = true; break; } $allParentClasses = $parentClass->getParentClasses(true); if (array_key_exists($topLevelClazz->getUri(), $allParentClasses)) { $parents[$parentClass->getUri()] = $parentClass; } $lastLevelParents[$parentClass->getUri()] = $parentClass; } } while (!$top); foreach ($parents as $parent) { $returnValue = array_merge($returnValue, $parent->getProperties(false)); } $returnValue = array_merge($returnValue, $clazz->getProperties(false)); return (array) $returnValue; }
/** * check if the class is a or a subclass of an Item * * @access public * @author Joel Bout, <*****@*****.**> * @param core_kernel_classes_Class clazz * @return boolean */ public function isItemClass(core_kernel_classes_Class $clazz) { $returnValue = (bool) false; if ($this->itemClass->getUri() == $clazz->getUri()) { return true; } foreach ($clazz->getParentClasses(true) as $parent) { if ($parent->getUri() == $this->itemClass->getUri()) { $returnValue = true; break; } } return (bool) $returnValue; }
/** * (non-PHPdoc) * @see core_kernel_persistence_ClassInterface::getParentClasses() */ public function getParentClasses(core_kernel_classes_Class $resource, $recursive = false) { $returnValue = array(); $sqlQuery = 'SELECT object FROM statements WHERE subject = ? AND predicate = ?'; $sqlResult = $this->getPersistence()->query($sqlQuery, array($resource->getUri(), RDFS_SUBCLASSOF)); while ($row = $sqlResult->fetch()) { $parentClass = new core_kernel_classes_Class($row['object']); $returnValue[$parentClass->getUri()] = $parentClass; if ($recursive == true && $parentClass->getUri() != RDFS_CLASS && $parentClass->getUri() != RDFS_RESOURCE) { if ($parentClass->getUri() == CLASS_GENERIS_RESOURCE) { $returnValue[RDFS_RESOURCE] = new core_kernel_classes_Class(RDFS_RESOURCE); } else { $plop = $parentClass->getParentClasses(true); $returnValue = array_merge($returnValue, $plop); } } } return $returnValue; }