我可以直接在PHP中查询MediaWiki语义值(SMW)吗?

时间:2016-10-17 11:18:36

标签: php mediawiki semantic-mediawiki

我正在使用Semantic MediaWiki,我还在开发另一个自定义扩展。我想直接在PHP中查询语义值;即,像: SemanticMediaWiki :: ask(' PAGE_NAME',' FIELD_NAME') 但是,我似乎无法找到任何有关这方面的文件。我知道有一个Ask API,但是这个文档只使用URL查询,而不是直接的PHP查询。我也知道我可以包括"问"通过内联查询引用内部页面。但是,我想要做的是直接在我的自定义扩展的PHP内部查询语义值。 有谁知道我是否可以直接从PHP查询语义值?

2 个答案:

答案 0 :(得分: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

了解详情

答案 1 :(得分: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;
    }
}