summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php146
1 files changed, 146 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php b/www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php
new file mode 100644
index 00000000..be0161d2
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Query/Language/ValueDescription.php
@@ -0,0 +1,146 @@
+<?php
+
+namespace SMW\Query\Language;
+
+use SMW\DataValueFactory;
+use SMw\DIProperty;
+use SMW\Query\QueryComparator;
+use SMWDataItem as DataItem;
+use SMWNumberValue as NumberValue;
+use SMWURIValue as UriValue;
+
+/**
+ * Description of one data value, or of a range of data values.
+ *
+ * Technically this usually corresponds to nominal predicates or to unary
+ * concrete domain predicates in OWL which are parametrised by one constant
+ * from the concrete domain.
+ * In RDF, concrete domain predicates that define ranges (like "greater or
+ * equal to") are not directly available.
+ *
+ * @license GNU GPL v2+
+ * @since 1.6
+ *
+ * @author Markus Krötzsch
+ */
+class ValueDescription extends Description {
+
+ /**
+ * @var DataItem
+ */
+ private $dataItem;
+
+ /**
+ * @var integer element in the SMW_CMP_ enum
+ */
+ private $comparator;
+
+ /**
+ * @var null|DIProperty
+ */
+ private $property = null;
+
+ /**
+ * @param DataItem $dataItem
+ * @param null|DIProperty $property
+ * @param integer $comparator
+ */
+ public function __construct( DataItem $dataItem, DIProperty $property = null, $comparator = SMW_CMP_EQ ) {
+ $this->dataItem = $dataItem;
+ $this->comparator = $comparator;
+ $this->property = $property;
+ }
+
+ /**
+ * @see Description::getFingerprint
+ * @since 2.5
+ *
+ * @return string
+ */
+ public function getFingerprint() {
+
+ $property = null;
+
+ if ( $this->property !== null ) {
+ $property = $this->property->getSerialization();
+ }
+
+ // A change to the order does also change the signature and renders a
+ // different query ID
+ return 'V:' . md5( $this->comparator . '|' . $this->dataItem->getHash() . '|' . $property );
+ }
+
+ /**
+ * @deprecated Use getDataItem() and \SMW\DataValueFactory::getInstance()->newDataValueByItem() if needed. Vanishes before SMW 1.7
+ * @return DataItem
+ */
+ public function getDataValue() {
+ // FIXME: remove
+ return $this->dataItem;
+ }
+
+ /**
+ * @return DataItem
+ */
+ public function getDataItem() {
+ return $this->dataItem;
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @return DIProperty|null
+ */
+ public function getProperty() {
+ return $this->property;
+ }
+
+ /**
+ * @return integer
+ */
+ public function getComparator() {
+ return $this->comparator;
+ }
+
+ /**
+ * @param bool $asValue
+ *
+ * @return string
+ */
+ public function getQueryString( $asValue = false ) {
+
+ $comparator = QueryComparator::getInstance()->getStringForComparator(
+ $this->comparator
+ );
+
+ $dataValue = DataValueFactory::getInstance()->newDataValueByItem(
+ $this->dataItem,
+ $this->property
+ );
+
+ // Set option to ensure that the output doesn't alter the display
+ // characteristics of a value
+ $dataValue->setOption( UriValue::VALUE_RAW, true );
+ $dataValue->setOption( NumberValue::NO_DISP_PRECISION_LIMIT, true );
+
+ if ( $asValue ) {
+ return $comparator . $dataValue->getWikiValue();
+ }
+
+ // this only is possible for values of Type:Page
+ if ( $comparator === '' ) { // some extra care for Category: pages
+ return '[[:' . $dataValue->getWikiValue() . ']]';
+ }
+
+ return '[[' . $comparator . $dataValue->getWikiValue() . ']]';
+ }
+
+ public function isSingleton() {
+ return $this->comparator == SMW_CMP_EQ;
+ }
+
+ public function getSize() {
+ return 1;
+ }
+
+}