Могу ли я запросить семантическое значение MediaWiki (SMW) непосредственно в PHP?

Я использую Semantic MediaWiki, а также разрабатываю другое пользовательское расширение. Я хотел бы запрашивать семантические значения непосредственно в PHP; то есть что-то вроде:

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

Однако я не могу найти документацию о том, что это возможно. Я знаю, что существует Ask API, но в этом документе только запросы с использованием URL-адреса, а не прямой PHP-запрос. Я также знаю, что могу включать ссылки «спрашивать» внутри страниц с помощью встроенных запросов. Однако то, что я хочу сделать, это запросить семантические значения непосредственно внутри PHP моего пользовательского расширения.

Кто-нибудь знает, могу ли я напрямую запросить семантическое значение из PHP?


person Peter Rankin    schedule 17.10.2016    source источник


Ответы (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< /а>

person wakalaka    schedule 18.10.2016
comment
Спасибо - это то, что я искал. - person Peter Rankin; 18.10.2016

Глядя на то, как это делает расширение 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;
    }
}
person Peter Rankin    schedule 17.10.2016