/** * Tests the merging of two graphs */ public function testMerge() { $this->markTestSkipped("Merging graphs doesn't work yet as blank nodes are not relabeled properly"); $json = <<<JSON_LD_DOCUMENT { "@context": { "ex": "http://vocab.com/", "node": "ex:type/node" }, "@graph": [ { "@id": "1", "@type": "ex:type/node", "ex:name": "1", "ex:link": { "@id": "./2" }, "ex:contains": { "ex:nested": "1.1 (graph 2)" } }, { "@id": "/node/2", "ex:name": "and a different name in graph 2", "ex:link": { "@id": "/node/4" }, "ex:newFromGraph2": "this was added in graph 2" }, { "@id": "http://example.com/node/4", "ex:name": "node 4 from graph 2" } ] } JSON_LD_DOCUMENT; $graph2 = Document::load($json, array('base' => 'http://example.com/node/index.jsonld'))->getGraph(); // Merge graph2 into graph $this->graph->merge($graph2); $nodeIds = array('http://example.com/node/1', 'http://example.com/node/2', 'http://example.com/node/3', 'http://example.com/node/4', '_:b0', '_:b1', '_:b2', '_:b3', '_:b4', 'http://vocab.com/type/node', 'http://vocab.com/type/nodeWithAliases'); $nodes = $this->graph->getNodes(); $this->assertCount(count($nodeIds), $nodes); foreach ($nodes as $node) { // Is the node's ID valid? $this->assertContains($node->getId(), $nodeIds, 'Found unexpected node ID: ' . $node->getId()); // Is the node of the right type? $this->assertInstanceOf('ML\\JsonLD\\Node', $node); // Does the graph return the same instance? $n = $this->graph->getNode($node->getId()); $this->assertSame($node, $n, 'same instance'); $this->assertTrue($node->equals($n), 'equals'); $this->assertSame($this->graph, $n->getGraph(), 'linked to graph'); // It must not share node objects with graph 2 $this->assertNotSame($node, $graph2->getNode($node->getId()), 'shared instance between graph and graph 2'); } // Check that the properties have been updated as well $node1 = $this->graph->getNode('http://example.com/node/1'); $node2 = $this->graph->getNode('http://example.com/node/2'); $node3 = $this->graph->getNode('http://example.com/node/3'); $node4 = $this->graph->getNode('http://example.com/node/4'); $this->assertEquals(new TypedValue('1', RdfConstants::XSD_STRING), $node1->getProperty('http://vocab.com/name'), 'n1->name'); $this->assertSame($node2, $node1->getProperty('http://vocab.com/link'), 'n1 -link-> n2'); $this->assertCount(2, $node1->getProperty('http://vocab.com/contains'), 'n1 -contains-> 2 blank nodes'); $this->assertEquals(array(new TypedValue('2', RdfConstants::XSD_STRING), new TypedValue('and a different name in graph 2', RdfConstants::XSD_STRING)), $node2->getProperty('http://vocab.com/name'), 'n2->name'); $this->assertSame(array($node3, $node4), $node2->getProperty('http://vocab.com/link'), 'n2 -link-> n3 & n4'); $this->assertEquals(new TypedValue('this was added in graph 2', RdfConstants::XSD_STRING), $node2->getProperty('http://vocab.com/newFromGraph2'), 'n2->newFromGraph2'); $this->assertEquals(new TypedValue('node 4 from graph 2', RdfConstants::XSD_STRING), $node4->getProperty('http://vocab.com/name'), 'n4->name'); // Verify that graph 2 wasn't changed $nodeIds = array('http://example.com/node/1', 'http://example.com/node/2', '_:b0', 'http://example.com/node/4', 'http://vocab.com/type/node'); $nodes = $graph2->getNodes(); $this->assertCount(count($nodeIds), $nodes); foreach ($nodes as $node) { // Is the node's ID valid? $this->assertContains($node->getId(), $nodeIds, 'Found unexpected node ID in graph 2: ' . $node->getId()); // Is the node of the right type? $this->assertInstanceOf('ML\\JsonLD\\Node', $node); // Does the graph return the same instance? $n = $graph2->getNode($node->getId()); $this->assertSame($node, $n, 'same instance (graph 2)'); $this->assertTrue($node->equals($n), 'equals (graph 2)'); $this->assertSame($graph2, $n->getGraph(), 'linked to graph (graph 2)'); } }
/** * Tests isBlankNode() */ public function testRemoveGraph() { $this->document->removeGraph('/named-graph'); $this->assertFalse($this->document->containsGraph('/named-graph'), 'Is the removed graph still there?'); }