import unittest import rdflib import re from nose import SkipTest TRIPLE = ( rdflib.URIRef("http://example.com/s"), rdflib.RDFS.label, rdflib.Literal("example 1"), ) class TestTrig(unittest.TestCase): def testEmpty(self): g = rdflib.Graph() s = g.serialize(format="trig") self.assertTrue(s is not None) def testRepeatTriples(self): g = rdflib.ConjunctiveGraph() g.get_context("urn:a").add( (rdflib.URIRef("urn:1"), rdflib.URIRef("urn:2"), rdflib.URIRef("urn:3")) ) g.get_context("urn:b").add( (rdflib.URIRef("urn:1"), rdflib.URIRef("urn:2"), rdflib.URIRef("urn:3")) ) self.assertEqual(len(g.get_context("urn:a")), 1) self.assertEqual(len(g.get_context("urn:b")), 1) s = g.serialize(format="trig", encoding="latin-1") self.assertTrue(b"{}" not in s) # no empty graphs! def testSameSubject(self): g = rdflib.ConjunctiveGraph() g.get_context("urn:a").add( (rdflib.URIRef("urn:1"), rdflib.URIRef("urn:p1"), rdflib.URIRef("urn:o1")) ) g.get_context("urn:b").add( (rdflib.URIRef("urn:1"), rdflib.URIRef("urn:p2"), rdflib.URIRef("urn:o2")) ) self.assertEqual(len(g.get_context("urn:a")), 1) self.assertEqual(len(g.get_context("urn:b")), 1) s = g.serialize(format="trig", encoding="latin-1") self.assertEqual(len(re.findall(b"p1", s)), 1) self.assertEqual(len(re.findall(b"p2", s)), 1) self.assertTrue(b"{}" not in s) # no empty graphs! def testRememberNamespace(self): g = rdflib.ConjunctiveGraph() g.add(TRIPLE + (rdflib.URIRef("http://example.com/graph1"),)) # In 4.2.0 the first serialization would fail to include the # prefix for the graph but later serialize() calls would work. first_out = g.serialize(format="trig", encoding="latin-1") second_out = g.serialize(format="trig", encoding="latin-1") self.assertTrue(b"@prefix ns1: ." in second_out) self.assertTrue(b"@prefix ns1: ." in first_out) def testGraphQnameSyntax(self): g = rdflib.ConjunctiveGraph() g.add(TRIPLE + (rdflib.URIRef("http://example.com/graph1"),)) out = g.serialize(format="trig", encoding="latin-1") self.assertTrue(b"ns1:graph1 {" in out) def testGraphUriSyntax(self): g = rdflib.ConjunctiveGraph() # getQName will not abbreviate this, so it should serialize as # a '<...>' term. g.add(TRIPLE + (rdflib.URIRef("http://example.com/foo."),)) out = g.serialize(format="trig", encoding="latin-1") self.assertTrue(b" {" in out) def testBlankGraphIdentifier(self): g = rdflib.ConjunctiveGraph() g.add(TRIPLE + (rdflib.BNode(),)) out = g.serialize(format="trig", encoding='latin-1') graph_label_line = out.splitlines()[-4] self.assertTrue(re.match(br"^_:[a-zA-Z0-9]+ \{", graph_label_line)) def testGraphParsing(self): # should parse into single default graph context data = """ . """ g = rdflib.ConjunctiveGraph() g.parse(data=data, format="trig") self.assertEqual(len(list(g.contexts())), 1) # should parse into single default graph context data = """ . { . } """ g = rdflib.ConjunctiveGraph() g.parse(data=data, format="trig") self.assertEqual(len(list(g.contexts())), 1) # should parse into 2 contexts, one default, one named data = """ . { . } { . } """ g = rdflib.ConjunctiveGraph() g.parse(data=data, format="trig") self.assertEqual(len(list(g.contexts())), 2) def testRoundTrips(self): raise SkipTest("skipped until 5.0") data = """ . { . } { . } """ g = rdflib.ConjunctiveGraph() for i in range(5): g.parse(data=data, format="trig") data = g.serialize(format="trig") # output should only contain 1 mention of each resource/graph name self.assertEqual(data.count("thing_a"), 1) self.assertEqual(data.count("thing_b"), 1) self.assertEqual(data.count("thing_c"), 1) self.assertEqual(data.count("thing_d"), 1) self.assertEqual(data.count("thing_e"), 1) self.assertEqual(data.count("thing_f"), 1) self.assertEqual(data.count("graph_a"), 1) def testDefaultGraphSerializesWithoutName(self): data = """ . { . } """ g = rdflib.ConjunctiveGraph() g.parse(data=data, format="trig") data = g.serialize(format="trig", encoding="latin-1") self.assertTrue(b"None" not in data) def testPrefixes(self): data = """ @prefix ns1: . = { ns1:Person_A a ns1:Person ; ns1:TextSpan "Simon" . } = { ns1:Person_C a ns1:Person ; ns1:TextSpan "Agnes" . } """ cg = rdflib.ConjunctiveGraph() cg.parse(data=data, format="trig") data = cg.serialize(format="trig", encoding="latin-1") self.assertTrue(b"ns2: " not in data) self.assertTrue(b"ns2:document1" in data)