2016-10-17 3 views
1

私はSemantic MediaWikiを使用しており、別のカスタム拡張を開発中です。私はPHPで直接セマンティック値を照会したいと思います。つまり、次のようなものがあります。私はPHPで直接MediaWikiの意味値(SMW)を照会することはできますか?

SemanticMediaWiki::ask('PAGE_NAME', 'FIELD_NAME') 

しかし、私はこれが可能であることについてのいかなる文書も見当たりません。私はAsk APIがあることを知っていますが、この文書は直接のPHPクエリではなく、URLを使用してクエリを実行するだけです。私はまた、inline queriesを介してページ内に「尋ねる」参照を含めることができることを知っています。しかし、私がしたいのは、私のカスタムエクステンションのPHPの中で直接クエリセマンティック値です。

PHPからセマンティック値を直接照会できるかどうかは誰にも分かりますか?

答えて

2

あなたはまた、https://github.com/vedmaka/SemanticQueryInterfaceを使用することができます - それは、SMW内部APIのラッパーでありますあなたはそのようなことを行うことができます:

$results = $sqi->condition("My property", "My value")->toArray(); 

は、より多くのでhttps://www.mediawiki.org/wiki/User:Vedmaka/Semantic_Query_Interface

+0

感謝を参照してください - これは私が探していたものです。 –

0

Semantic Title拡張子がそれをしない方法を見ることによって、私は私が必要なものを行うための関数を書くことができました:

/** 
* Given a wiki page DB key and a Semantic MediaWiki property name, get 
* the value for that page. 
* 
* Remarks: Assumes that the property is of type "string" or "blob", and that 
* there is only one value for that page/property combination. 
* 
* @param string $dbKey The MediaWiki DB key for the page (i.e., "Test_Page") 
* @param string $propertyLabel The property label used to set the Semantic MediaWiki property 
* @return string The property value, or NULL if none exists 
*/ 
static function getSemanticProperty($dbKey, $propertyLabel) { 
    // Use Semantic MediaWiki code to properly retrieve the value 
    $page  = SMWDIWikiPage::newFromTitle(Title::newFromDBkey($dbKey)); 
    $store  = \SMW\StoreFactory::getStore(); 
    $data  = $store->getSemanticData($page); 
    $property = SMWDIProperty::newFromUserLabel($propertyLabel); 
    $values = $data->getPropertyValues($property); 

    if (count($values) > 0) { 
     $value = array_shift($values); 
     if ($value->getDIType() == SMWDataItem::TYPE_STRING || 
      $value->getDIType() == SMWDataItem::TYPE_BLOB) { 
      return $value->getString(); 
     } 
    } else { 
     return null; 
    } 
} 
関連する問題