/** * @since 2.4 * * @param SemanticData $semanticData * * @return string */ public static function createFromSemanticData(SemanticData $semanticData) { $hash = array(); $hash[] = $semanticData->getSubject()->getSerialization(); foreach ($semanticData->getProperties() as $property) { $hash[] = $property->getKey(); foreach ($semanticData->getPropertyValues($property) as $di) { $hash[] = $di->getSerialization(); } } foreach ($semanticData->getSubSemanticData() as $data) { $hash[] = $data->getHash(); } sort($hash); return md5(implode('#', $hash)); }
public function testAddAndRemoveSubSemanticData() { $title = Title::newFromText(__METHOD__); $instance = new SemanticData(DIWikiPage::newFromTitle($title)); // Adds only a subobject reference to the container $subobject = $this->newSubobject($title); $instance->addSubobject($subobject); $this->assertInternalType('array', $instance->getSubSemanticData()); foreach ($instance->getSubSemanticData() as $subSemanticData) { $this->assertInstanceOf('SMWContainerSemanticData', $subSemanticData); $this->assertEquals($subSemanticData, $subobject->getSemanticData()); } $instance->removeSubSemanticData($subobject->getSemanticData()); $this->assertNotInstanceOf('SMWContainerSemanticData', $instance->getSubSemanticData()); }
/** * Removes data from the given SMWSemanticData. * If the subject of the data that is to be removed is not equal to the * subject of this SMWSemanticData, it will just be ignored (nothing to * remove). Likewise, removing data that is not present does not change * anything. * * @since 1.8 * * @param SemanticData $semanticData */ public function removeDataFrom(SemanticData $semanticData) { if (!$this->mSubject->equals($semanticData->getSubject())) { return; } foreach ($semanticData->getProperties() as $property) { $values = $semanticData->getPropertyValues($property); foreach ($values as $dataItem) { $this->removePropertyObjectValue($property, $dataItem); } } foreach ($semanticData->getSubSemanticData() as $semData) { $this->removeSubSemanticData($semData); } }