Пример #1
0
 private function isNonRedirectableResource(ExpNsResource $expNsResource)
 {
     return $expNsResource->getNamespaceId() === 'swivt' || $expNsResource->getNamespaceId() === 'rdf' || $expNsResource->getNamespaceId() === 'rdfs' || $expNsResource->getNamespaceId() === 'property' && strrpos($expNsResource->getLocalName(), 'aux') || isset($expNsResource->isUserDefined) && !$expNsResource->isUserDefined;
 }
 /**
  * Add a serialization of the given SMWExpResource to the output,
  * assuming that an opening property tag is alerady there.
  *
  * @param $expResourceProperty SMWExpNsResource the property to use
  * @param $expResource array of (SMWExpResource or SMWExpData)
  * @param $indent string specifying a prefix for indentation (usually a sequence of tabs)
  * @param $isClassTypeProp boolean whether the resource must be declared as a class
  *
  * @bug The $isClassTypeProp parameter is not properly taken into account.
  * @bug Individual resources are not serialised properly.
  */
 protected function serializeExpCollection(SMWExpNsResource $expResourceProperty, array $collection, $indent, $isClassTypeProp)
 {
     $this->post_ns_buffer .= $indent . '<' . $expResourceProperty->getQName() . " rdf:parseType=\"Collection\">\n";
     foreach ($collection as $expElement) {
         if ($expElement instanceof SMWExpData) {
             $this->serializeNestedExpData($expElement, $indent);
         } else {
             // FIXME: the below is not the right thing to do here
             //$this->serializeExpResource( $expResourceProperty, $expElement, $indent );
         }
         if ($isClassTypeProp) {
             // FIXME: $expResource is undefined
             //$this->requireDeclaration( $expResource, SMW_SERIALIZER_DECL_CLASS );
         }
     }
     $this->post_ns_buffer .= "{$indent}</" . $expResourceProperty->getQName() . ">\n";
 }
 /**
  * Store a value for a property identified by its title object. No
  * duplicate elimination as this is usually done in SMWSemanticData
  * already (which is typically used to generate this object).
  *
  * @param SMWExpNsResource $property
  * @param Element $child
  */
 public function addPropertyObjectValue(SMWExpNsResource $property, Element $child)
 {
     $this->hash = null;
     if (!array_key_exists($property->getUri(), $this->m_edges)) {
         $this->m_children[$property->getUri()] = array();
         $this->m_edges[$property->getUri()] = $property;
     }
     $this->m_children[$property->getUri()][] = $child;
 }
Пример #4
0
 /**
  * Find the redirect target of an SMWExpNsResource.
  * Returns an SMWExpNsResource object the input redirects to,
  * the input itself if there is no redirect (or it cannot be
  * used for making a resource with a prefix).
  *
  * @since 1.6
  * @param $expNsResource string URI to check
  * @param $exists boolean that is set to true if $expNsResource is in the
  * store; always false for blank nodes; always true for subobjects
  * @return SMWExpNsResource
  */
 protected function getSparqlRedirectTarget(SMWExpNsResource $expNsResource, &$exists)
 {
     if ($expNsResource->isBlankNode()) {
         $exists = false;
         return $expNsResource;
     } elseif ($expNsResource->getDataItem() instanceof SMWDIWikiPage && $expNsResource->getDataItem()->getSubobjectName() !== '') {
         $exists = true;
         return $expNsResource;
     }
     $resourceUri = SMWTurtleSerializer::getTurtleNameForExpElement($expNsResource);
     $rediUri = SMWTurtleSerializer::getTurtleNameForExpElement(SMWExporter::getSpecialPropertyResource('_REDI'));
     $skeyUri = SMWTurtleSerializer::getTurtleNameForExpElement(SMWExporter::getSpecialPropertyResource('_SKEY'));
     $sparqlResult = smwfGetSparqlDatabase()->select('*', "{$resourceUri} {$skeyUri} ?s  OPTIONAL { {$resourceUri} {$rediUri} ?r }", array('LIMIT' => 1), array($expNsResource->getNamespaceId() => $expNsResource->getNamespace()));
     $firstRow = $sparqlResult->current();
     if ($firstRow === false) {
         $exists = false;
         return $expNsResource;
     } elseif (count($firstRow) > 1 && !is_null($firstRow[1])) {
         $exists = true;
         $rediTargetElement = $firstRow[1];
         $rediTargetUri = $rediTargetElement->getUri();
         $wikiNamespace = SMWExporter::getNamespaceUri('wiki');
         if (strpos($rediTargetUri, $wikiNamespace) === 0) {
             return new SMWExpNsResource(substr($rediTargetUri, 0, strlen($wikiNamespace)), $wikiNamespace, 'wiki');
         } else {
             return $expNsResource;
         }
     } else {
         $exists = true;
         return $expNsResource;
     }
 }
Пример #5
0
 /**
  * Check if the given property is one of the special properties of the OWL
  * language that require their values to be classes or RDF lists of
  * classes. In these cases, it is necessary to declare this in the exported
  * data. 
  *  
  * @note The list of properties checked here is not complete for the OWL
  * language but covers what is used in SMW.
  * @note OWL 2 allows URIs to refer to both classes and individual elements
  * in different contexts. We only need declarations for classes that are
  * used as such, hence it is enough to check the property. Moreover, we do
  * not use OWL Datatypes in SMW, so rdf:type, rdfs:domain, etc. always
  * refer to classes.
  * @param SMWExpNsResource $property
  */
 protected function isOWLClassTypeProperty(SMWExpNsResource $property)
 {
     $locname = $property->getLocalName();
     if ($property->getNamespaceID() == 'rdf') {
         return $locname == 'type';
     } elseif ($property->getNamespaceID() == 'owl') {
         return $locname == 'intersectionOf' || $locname == 'unionOf' || $locname == 'equivalentClass' || $locname == 'complementOf' || $locname == 'someValuesFrom' || $locname == 'allValuesFrom' || $locname == 'onClass';
     } elseif ($property->getNamespaceID() == 'rdfs') {
         return $locname == 'subClassOf' || $locname == 'range' || $locname == 'domain';
     } else {
         return false;
     }
 }
 public function testRedirectTargetForCachedLookup()
 {
     $dataItem = new DIWikiPage('Foo', NS_MAIN);
     $expNsResource = new ExpNsResource('Foo', 'Bar', '', $dataItem);
     $cache = $this->getMockBuilder('\\Onoi\\Cache\\Cache')->disableOriginalConstructor()->getMock();
     $cache->expects($this->once())->method('contains')->will($this->returnValue(true));
     $cache->expects($this->once())->method('fetch')->with($this->equalTo($expNsResource->getUri()))->will($this->returnValue($expNsResource));
     $connection = $this->getMockBuilder('\\SMWSparqlDatabase')->disableOriginalConstructor()->getMock();
     $instance = new RedirectLookup($connection, $cache);
     $exists = null;
     $instance->findRedirectTargetResource($expNsResource, $exists);
     $this->assertTrue($exists);
     $instance->clear();
 }