コード例 #1
0
 public function testBuildTriplesForEmptySemanticDataContainer()
 {
     $expNsResource = new ExpNsResource('Redirect', Exporter::getNamespaceUri('wiki'), 'Redirect');
     $semanticData = new SemanticData(new DIWikiPage('Foo', NS_MAIN, ''));
     $redirectLookup = $this->getMockBuilder('\\SMW\\SPARQLStore\\RedirectLookup')->disableOriginalConstructor()->getMock();
     $redirectLookup->expects($this->atLeastOnce())->method('findRedirectTargetResource')->will($this->returnValue($expNsResource));
     $instance = new TurtleTriplesBuilder($semanticData, $redirectLookup);
     $this->assertTrue($instance->doBuild()->hasTriplesForUpdate());
     $this->assertInternalType('string', $instance->getTriples());
     $this->assertInternalType('array', $instance->getPrefixes());
 }
コード例 #2
0
	/**
	 * Create the standard PREFIX declarations for SPARQL or Turtle,
	 * possibly with additional namespaces involved.
	 *
	 * @param $extraNamespaces array (associative) of namespaceId => namespaceUri
	 * @param $forSparql boolean true to use SPARQL prefix syntax, false to use Turtle prefix syntax
	 */
	public static function getPrefixString( $extraNamespaces = array(), $forSparql = true ) {
		$prefixString = '';
		$prefixIntro = $forSparql ? 'PREFIX ' : '@prefix ';
		$prefixOutro = $forSparql ? "\n" : " .\n";
		foreach ( array( 'wiki', 'rdf', 'rdfs', 'owl', 'swivt', 'property', 'xsd' ) as $shortname ) {
			$prefixString .= "{$prefixIntro}{$shortname}: <" . SMWExporter::getNamespaceUri( $shortname ) . ">$prefixOutro";
			unset( $extraNamespaces[$shortname] ); // avoid double declaration
		}
		foreach ( $extraNamespaces as $shortname => $uri ) {
			$prefixString .= "{$prefixIntro}{$shortname}: <$uri>$prefixOutro";
		}
		return $prefixString;
	}
コード例 #3
0
ファイル: SMW_SparqlStore.php プロジェクト: Tjorriemorrie/app
 /**
  * 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;
     }
 }
コード例 #4
0
 public function resourceProvider()
 {
     $provider[] = array(Exporter::getSpecialNsResource('rdf', 'type'));
     $provider[] = array(new ExpNsResource('FooRedirectLookup', Exporter::getNamespaceUri('property'), 'property', new DIWikiPage('FooRedirectLookup', SMW_NS_PROPERTY, '')));
     return $provider;
 }
コード例 #5
0
ファイル: RedirectLookup.php プロジェクト: whysasse/kmwiki
 private function getResourceForTargetElement(ExpNsResource $expNsResource, $rediTargetElement)
 {
     if (!$rediTargetElement instanceof ExpResource) {
         throw new RuntimeException('Expected a ExpResource instance');
     }
     $rediTargetUri = $rediTargetElement->getUri();
     $wikiNamespace = Exporter::getNamespaceUri('wiki');
     if (strpos($rediTargetUri, $wikiNamespace) === 0) {
         return new ExpNsResource(substr($rediTargetUri, strlen($wikiNamespace)), $wikiNamespace, 'wiki');
     }
     return $expNsResource;
 }
コード例 #6
0
 public function testExportSubobject()
 {
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $subobject = new Subobject($semanticData->getSubject()->getTitle());
     $subobject->setEmptyContainerForId('Foo');
     $semanticData->addPropertyObjectValue($subobject->getProperty(), $subobject->getContainer());
     $exportData = Exporter::makeExportData($semanticData);
     $expectedProperty = new ExpNsResource($this->transformPropertyLabelToAuxiliary($subobject->getProperty()), Exporter::getNamespaceUri('property'), 'property', new DIWikiPage('Has_subobject', SMW_NS_PROPERTY));
     $this->assertTrue(Exporter::hasHelperExpElement($subobject->getProperty()));
     $this->assertCount(1, $exportData->getValues($expectedProperty));
     $this->exportDataValidator->assertThatExportDataContainsProperty($expectedProperty, $exportData);
     $expectedResource = new ExpNsResource(Exporter::getEncodedPageName($subobject->getSemanticData()->getSubject()) . '-23' . 'Foo', Exporter::getNamespaceUri('wiki'), 'wiki', $subobject->getSemanticData()->getSubject());
     $this->exportDataValidator->assertThatExportDataContainsResource($expectedResource, $expectedProperty, $exportData);
 }
コード例 #7
0
ファイル: SMWExporterTest.php プロジェクト: whysasse/kmwiki
 /**
  * @dataProvider uriDataItemProvider
  * #378
  */
 public function testFindDataItemForExpElement($uri, $expectedDataItem)
 {
     $uri = Exporter::getNamespaceUri('wiki') . $uri;
     $this->assertEquals($expectedDataItem, Exporter::findDataItemForExpElement(new ExpResource($uri)));
 }
コード例 #8
0
 public function testRedirectTragetForDBLookupWithMultipleEntriesForcesNewResource()
 {
     $propertyPage = new DIWikiPage('Foo', SMW_NS_PROPERTY);
     $resource = new ExpNsResource('Foo', Exporter::getNamespaceUri('property'), 'property', $propertyPage);
     $sparqlDatabase = $this->createMockSparqlDatabaseFor(array($resource, $resource));
     $instance = new RedirectLookup($sparqlDatabase);
     $instance->clear();
     $dataItem = new DIWikiPage('Foo', 1, '', '');
     $expNsResource = new ExpNsResource('Foo', 'Bar', '', $dataItem);
     $exists = null;
     $targetResource = $instance->findRedirectTargetResource($expNsResource, $exists);
     $this->assertNotSame($expNsResource, $targetResource);
     $expectedResource = new ExpNsResource(Exporter::getInstance()->getEncodedPageName($propertyPage), Exporter::getNamespaceUri('wiki'), 'wiki');
     $this->assertEquals($expectedResource, $targetResource);
     $this->assertTrue($exists);
 }