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

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

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

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

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

1

Решение

Вы также можете использовать https://github.com/vedmaka/SemanticQueryInterface — это оболочка для внутреннего API SMW, которая позволяет вам делать такие вещи:

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

Смотрите больше на https://www.mediawiki.org/wiki/User:Vedmaka/Semantic_Query_Interface

2

Другие решения

Глядя на то, как Семантическое название расширение делает это, я смог написать функцию, чтобы сделать то, что мне нужно:

/**
* 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;
}
}
0

По вопросам рекламы [email protected]