/**
  * @since 2.5
  *
  * {@inheritDoc}
  */
 public function addResourceValue(ExpData $expData, DIProperty $property, DataItem $dataItem)
 {
     $expElement = $this->exporter->getDataItemExpElement($dataItem);
     if ($expElement !== null) {
         $expData->addPropertyObjectValue($this->getResourceElementForProperty($property), $expElement);
     }
     $this->addResourceHelperValue($expData, $property, $dataItem);
 }
Пример #2
0
 /**
  * @dataProvider dataItemExpElementProvider
  */
 public function testGetDataItemExpElement(DataItem $dataItem, $instance)
 {
     if ($instance === null) {
         return $this->assertNull(Exporter::getDataItemExpElement($dataItem));
     }
     $this->assertInstanceOf($instance, Exporter::getDataItemExpElement($dataItem));
 }
 private function doMapValueDescription(ValueDescription $description, &$exact)
 {
     if ($description->getComparator() === SMW_CMP_EQ) {
         $result = $this->exporter->getDataItemExpElement($description->getDataItem());
     } else {
         // OWL cannot represent <= and >= ...
         $exact = false;
         $result = false;
     }
     return $result;
 }
Пример #4
0
 public function testDeleteSubjectOnMockBaseStore()
 {
     $title = Title::newFromText('DeleteSubjectOnMockBaseStore');
     $expResource = Exporter::getDataItemExpElement(DIWikiPage::newFromTitle($title));
     $resourceUri = TurtleSerializer::getTurtleNameForExpElement($expResource);
     $extraNamespaces = array($expResource->getNamespaceId() => $expResource->getNamespace());
     $baseStore = $this->getMockBuilder('\\SMWStore')->disableOriginalConstructor()->getMockForAbstractClass();
     $baseStore->expects($this->once())->method('deleteSubject')->with($this->equalTo($title))->will($this->returnValue(true));
     $sparqlDatabase = $this->getMockBuilder('\\SMWSparqlDatabase')->disableOriginalConstructor()->getMock();
     $sparqlDatabase->expects($this->once())->method('deleteContentByValue')->will($this->returnValue(true));
     $sparqlDatabase->expects($this->once())->method('delete')->with($this->equalTo("{$resourceUri} ?p ?o"), $this->equalTo("{$resourceUri} ?p ?o"), $this->equalTo($extraNamespaces))->will($this->returnValue(true));
     $connectionManager = $this->getMockBuilder('\\SMW\\ConnectionManager')->disableOriginalConstructor()->getMock();
     $connectionManager->expects($this->any())->method('getConnection')->will($this->returnValue($sparqlDatabase));
     $instance = new SPARQLStore($baseStore);
     $instance->setConnectionManager($connectionManager);
     $instance->deleteSubject($title);
 }
Пример #5
0
 public function doDataUpdate(SMWSemanticData $data)
 {
     parent::doDataUpdate($data);
     $expDataArray = $this->prepareUpdateExpData($data);
     if (count($expDataArray) > 0) {
         $subjectResource = SMWExporter::getDataItemExpElement($data->getSubject());
         $this->deleteSparqlData($subjectResource);
         $turtleSerializer = new SMWTurtleSerializer(true);
         $turtleSerializer->startSerialization();
         foreach ($expDataArray as $expData) {
             $turtleSerializer->serializeExpData($expData);
         }
         $turtleSerializer->finishSerialization();
         $triples = $turtleSerializer->flushContent();
         $prefixes = $turtleSerializer->flushSparqlPrefixes();
         smwfGetSparqlDatabase()->insertData($triples, $prefixes);
     }
 }
 private function createFilterConditionToMatchRegexPattern($dataItem, &$joinVariable, $comparator, $pattern)
 {
     if ($dataItem instanceof DIBlob) {
         return new FilterCondition("{$comparator}( ?{$joinVariable}, \"{$pattern}\", \"s\")", array());
     }
     if ($dataItem instanceof DIUri) {
         return new FilterCondition("{$comparator}( str( ?{$joinVariable} ), \"{$pattern}\", \"i\")", array());
     }
     // Pattern search for a wikipage object can only be done on the sortkey
     // literal and not on it's resource
     $skeyExpElement = Exporter::getInstance()->getSpecialPropertyResource('_SKEY');
     $expElement = $this->exporter->getDataItemExpElement($dataItem->getSortKeyDataItem());
     $condition = new SingletonCondition($expElement);
     $filterVariable = $this->compoundConditionBuilder->getNextVariable();
     $condition->condition = "?{$joinVariable} " . $skeyExpElement->getQName() . " ?{$filterVariable} .\n";
     $condition->matchElement = "?{$joinVariable}";
     $filterCondition = new FilterCondition("{$comparator}( ?{$filterVariable}, \"{$pattern}\", \"s\")", array());
     $condition->weakConditions = array($filterVariable => $filterCondition->getCondition());
     return $condition;
 }
Пример #7
0
 public function descriptionToExpData($desc, &$exact)
 {
     if ($desc instanceof SMWConjunction || $desc instanceof SMWDisjunction) {
         $result = new SMWExpData(new SMWExpResource(''));
         $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('rdf', 'type'), new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Class')));
         $elements = array();
         foreach ($desc->getDescriptions() as $subdesc) {
             $element = $this->descriptionToExpData($subdesc, $exact);
             if ($element === false) {
                 $element = new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Thing'));
             }
             $elements[] = $element;
         }
         $prop = $desc instanceof SMWConjunction ? 'intersectionOf' : 'unionOf';
         $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('owl', $prop), SMWExpData::makeCollection($elements));
     } elseif ($desc instanceof SMWClassDescription) {
         if (count($desc->getCategories()) == 1) {
             // single category
             $result = new SMWExpData(SMWExporter::getResourceElement(end($desc->getCategories())));
         } else {
             // disjunction of categories
             $result = new SMWExpData(new SMWExpResource(''));
             $elements = array();
             foreach ($desc->getCategories() as $cat) {
                 $elements[] = new SMWExpData(SMWExporter::getResourceElement($cat));
             }
             $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('owl', 'unionOf'), SMWExpData::makeCollection($elements));
         }
         $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('rdf', 'type'), new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Class')));
     } elseif ($desc instanceof SMWConceptDescription) {
         $result = new SMWExpData(SMWExporter::getResourceElement($desc->getConcept()));
     } elseif ($desc instanceof SMWSomeProperty) {
         $result = new SMWExpData(new SMWExpResource(''));
         $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('rdf', 'type'), new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Restriction')));
         $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('owl', 'onProperty'), new SMWExpData(SMWExporter::getResourceElement($desc->getProperty())));
         $subdata = $this->descriptionToExpData($desc->getDescription(), $exact);
         if ($desc->getDescription() instanceof SMWValueDescription && $desc->getDescription()->getComparator() == SMW_CMP_EQ) {
             $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('owl', 'hasValue'), $subdata);
         } else {
             if ($subdata === false) {
                 $owltype = SMWExporter::getOWLPropertyType($desc->getProperty()->getPropertyTypeID());
                 if ($owltype == 'ObjectProperty') {
                     $subdata = new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Thing'));
                 } elseif ($owltype == 'DatatypeProperty') {
                     $subdata = new SMWExpData(SMWExporter::getSpecialNsResource('rdfs', 'Literal'));
                 } else {
                     // no restrictions at all with annotation properties ...
                     return new SMWExpData(SMWExporter::getSpecialNsResource('owl', 'Thing'));
                 }
             }
             $result->addPropertyObjectValue(SMWExporter::getSpecialNsResource('owl', 'someValuesFrom'), $subdata);
         }
     } elseif ($desc instanceof SMWValueDescription) {
         if ($desc->getComparator() == SMW_CMP_EQ) {
             $result = SMWExporter::getDataItemExpElement($desc->getDataItem());
         } else {
             // alas, OWL cannot represent <= and >= ...
             $exact = false;
             $result = false;
         }
     } elseif ($desc instanceof SMWThingDescription) {
         $result = false;
     } else {
         $result = false;
         $exact = false;
     }
     return $result;
 }
 /**
  * Create an SMWSparqlCondition from an SMWValueDescription.
  *
  * @param $description SMWValueDescription
  * @param $joinVariable string name, see buildSparqlCondition()
  * @param $orderByProperty mixed SMWDIProperty or null, see buildSparqlCondition()
  * @return SMWSparqlCondition
  */
 protected function buildValueCondition(SMWValueDescription $description, $joinVariable, $orderByProperty)
 {
     $dataItem = $description->getDataItem();
     switch ($description->getComparator()) {
         case SMW_CMP_EQ:
             $comparator = '=';
             break;
         case SMW_CMP_LESS:
             $comparator = '<';
             break;
         case SMW_CMP_GRTR:
             $comparator = '>';
             break;
         case SMW_CMP_LEQ:
             $comparator = '<=';
             break;
         case SMW_CMP_GEQ:
             $comparator = '>=';
             break;
         case SMW_CMP_NEQ:
             $comparator = '!=';
             break;
         case SMW_CMP_LIKE:
             $comparator = 'regex';
             break;
         case SMW_CMP_NLKE:
             $comparator = '!regex';
             break;
         default:
             $comparator = '';
             // unkown, unsupported
     }
     if ($comparator === '') {
         $result = $this->buildTrueCondition($joinVariable, $orderByProperty);
     } elseif ($comparator == '=') {
         $expElement = SMWExporter::getDataItemHelperExpElement($dataItem);
         if (is_null($expElement)) {
             $expElement = SMWExporter::getDataItemExpElement($dataItem);
         }
         $result = new SMWSparqlSingletonCondition($expElement);
         $this->addOrderByDataForProperty($result, $joinVariable, $orderByProperty, $dataItem->getDIType());
     } elseif ($comparator == 'regex' || $comparator == '!regex') {
         if ($dataItem instanceof SMWDIBlob) {
             $pattern = '^' . str_replace(array('^', '.', '\\', '+', '{', '}', '(', ')', '|', '^', '$', '[', ']', '*', '?'), array('\\^', '\\.', '\\\\', '\\+', '\\{', '\\}', '\\(', '\\)', '\\|', '\\^', '\\$', '\\[', '\\]', '.*', '.'), $dataItem->getString()) . '$';
             $result = new SMWSparqlFilterCondition("{$comparator}( ?{$joinVariable}, \"{$pattern}\", \"s\")", array());
             $this->addOrderByDataForProperty($result, $joinVariable, $orderByProperty, $dataItem->getDIType());
         } else {
             $result = $this->buildTrueCondition($joinVariable, $orderByProperty);
         }
     } else {
         $result = new SMWSparqlFilterCondition('', array());
         $this->addOrderByData($result, $joinVariable, $dataItem->getDIType());
         $orderByVariable = $result->orderByVariable;
         if ($dataItem instanceof SMWDIWikiPage) {
             $expElement = SMWExporter::getDataItemExpElement($dataItem->getSortKeyDataItem());
         } else {
             $expElement = SMWExporter::getDataItemHelperExpElement($dataItem);
             if (is_null($expElement)) {
                 $expElement = SMWExporter::getDataItemExpElement($dataItem);
             }
         }
         $valueName = SMWTurtleSerializer::getTurtleNameForExpElement($expElement);
         if ($expElement instanceof SMWExpNsResource) {
             $result->namespaces[$expElement->getNamespaceId()] = $expElement->getNamespace();
         }
         $result->filter = "?{$orderByVariable} {$comparator} {$valueName}";
     }
     return $result;
 }