/**
  * @since 2.4
  *
  * {@inheritDoc}
  */
 public function validate($dataValue)
 {
     $this->hasConstraintViolation = false;
     if (!$this->canValidate($dataValue)) {
         return $this->hasConstraintViolation;
     }
     $property = $dataValue->getProperty();
     if (!ApplicationFactory::getInstance()->getPropertySpecificationLookup()->hasUniquenessConstraintBy($property)) {
         return $this->hasConstraintViolation;
     }
     $blobStore = $this->cachedPropertyValuesPrefetcher->getBlobStore();
     $dataItem = $dataValue->getDataItem();
     $hash = $this->cachedPropertyValuesPrefetcher->createHashFromString($property->getKey() . ':' . $dataItem->getHash());
     $container = $blobStore->read($hash);
     $key = 'PVUC';
     if (!$container->has($key)) {
         $page = $this->tryFindMatchResultFor($hash, $dataValue);
         $container->set($key, $page);
         $blobStore->save($container);
     }
     $wikiPage = $container->get($key);
     // Verify that the contextPage (where the annotation has its origin) is
     // matchable to the request and in case it is not a match inform the user
     // about the origin
     if ($wikiPage instanceof DIWikiPage && !$dataValue->getContextPage()->equals($wikiPage)) {
         $dataValue->addErrorMsg(array('smw-datavalue-uniqueness-constraint-error', $property->getLabel(), $dataValue->getWikiValue(), $wikiPage->getTitle()->getPrefixedText()));
         $this->hasConstraintViolation = true;
     }
 }