/**
  * @see SMWStore::getSemanticData()
  * @since 1.8
  */
 public function getSemanticData(SMWDIWikiPage $subject, $filter = false)
 {
     // *** Find out if this subject exists ***//
     $sortkey = '';
     $sid = $this->store->smwIds->getSMWPageIDandSort($subject->getDBkey(), $subject->getNamespace(), $subject->getInterwiki(), $subject->getSubobjectName(), $sortkey, true, true);
     $subject->setSortKey($sortkey);
     if ($sid == 0) {
         // We consider redirects for getting $sid,
         // so $sid == 0 also means "no redirects".
         return new SMWSemanticData($subject);
     }
     $propertyTableHashes = $this->store->smwIds->getPropertyTableHashes($sid);
     foreach ($this->store->getPropertyTables() as $tid => $proptable) {
         if (!array_key_exists($proptable->getName(), $propertyTableHashes)) {
             continue;
         }
         if ($filter !== false) {
             $relevant = false;
             foreach ($filter as $typeId) {
                 $diType = DataTypeRegistry::getInstance()->getDataItemId($typeId);
                 $relevant = $relevant || $proptable->getDiType() == $diType;
                 if ($relevant) {
                     break;
                 }
             }
             if (!$relevant) {
                 continue;
             }
         }
         $this->getSemanticDataFromTable($sid, $subject, $proptable);
     }
     // Note: the sortkey is always set but belongs to no property table,
     // hence no entry in $this->store->m_sdstate[$sid] is made.
     self::$in_getSemanticData++;
     $this->initSemanticDataCache($sid, $subject);
     $this->store->m_semdata[$sid]->addPropertyStubValue('_SKEY', array('', $sortkey));
     self::$in_getSemanticData--;
     return $this->store->m_semdata[$sid];
 }
 private function newDiWikiPage($dbkeys)
 {
     $diWikiPage = new SMWDIWikiPage($dbkeys[0], intval($dbkeys[1]), $dbkeys[2], $dbkeys[4]);
     $diWikiPage->setSortKey($dbkeys[3]);
     return $diWikiPage;
 }