diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/PropertyAnnotators/SchemaPropertyAnnotator.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/src/PropertyAnnotators/SchemaPropertyAnnotator.php | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/PropertyAnnotators/SchemaPropertyAnnotator.php b/www/wiki/extensions/SemanticMediaWiki/src/PropertyAnnotators/SchemaPropertyAnnotator.php new file mode 100644 index 00000000..1a84ccf5 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/src/PropertyAnnotators/SchemaPropertyAnnotator.php @@ -0,0 +1,66 @@ +<?php + +namespace SMW\PropertyAnnotators; + +use SMW\DIProperty; +use SMW\PropertyAnnotator; +use SMW\Schema\Schema; + +/** + * @license GNU GPL v2+ + * @since 3.0 + * + * @author mwjames + */ +class SchemaPropertyAnnotator extends PropertyAnnotatorDecorator { + + /** + * @var Schema + */ + private $schema; + + /** + * @since 3.0 + * + * @param PropertyAnnotator $propertyAnnotator + * @param Schema $schema + */ + public function __construct( PropertyAnnotator $propertyAnnotator, Schema $schema = null ) { + parent::__construct( $propertyAnnotator ); + $this->schema = $schema; + } + + protected function addPropertyValues() { + + if ( $this->schema === null ) { + return; + } + + $semanticData = $this->getSemanticData(); + + $semanticData->addPropertyObjectValue( + new DIProperty( '_SCHEMA_TYPE' ), + $this->dataItemFactory->newDIBlob( $this->schema->get( Schema::SCHEMA_TYPE ) ) + ); + + $semanticData->addPropertyObjectValue( + new DIProperty( '_SCHEMA_DEF' ), + $this->dataItemFactory->newDIBlob( $this->schema ) + ); + + if ( ( $desc = $this->schema->get( Schema::SCHEMA_DESCRIPTION, '' ) ) !== '' ) { + $semanticData->addPropertyObjectValue( + new DIProperty( '_SCHEMA_DESC' ), + $this->dataItemFactory->newDIBlob( $desc ) + ); + } + + foreach ( $this->schema->get( Schema::SCHEMA_TAG, [] ) as $tag ) { + $semanticData->addPropertyObjectValue( + new DIProperty( '_SCHEMA_TAG' ), + $this->dataItemFactory->newDIBlob( mb_strtolower( $tag ) ) + ); + } + } + +} |