1

私は Semantic MediaWiki を使用しており、別のカスタム拡張も開発しています。PHP でセマンティック値を直接クエリしたいと思います。つまり、次のようなものです。

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

ただし、これが可能であるというドキュメントが見つからないようです。Ask APIがあることは知っていますが、これは直接の PHP クエリではなく、URL を使用したクエリのみを文書化しています。また、インライン クエリを使用して、ページ内に "ask" 参照を含めることができることも知っています。ただし、私がやりたいことは、カスタム拡張機能の PHP 内でセマンティック値を直接クエリすることです。

PHPからセマンティック値を直接クエリできるかどうかを知っている人はいますか?

4

2 に答える 2

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で詳細を参照してください。

于 2016-10-18T07:11:02.807 に答える
1

セマンティック タイトル拡張機能の方法を調べることで、必要なことを行う関数を作成できました。

/**
 * 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;
    }
}
于 2016-10-17T17:21:48.607 に答える