Ejemplo n.º 1
0
    def testMatchTriplePathRealRdfTriples(self):
        # Note: at the moment we follow the convention that only (for performance reasons) the triple's object is wrapped in Literal, Uri or BNode.
        # All variable bindings get wrapped.
        g = Graph()
        g.addTriple('uri:x', 'uri:y', Uri('uri:z'))
        g.addTriple('uri:a', 'uri:b', Literal('c'))
        g.addTriple('uri:z', 'uri:d', Uri('uri:a'))
        g.addTriple('uri:a', 'uri:e', Uri('uri:x'))

        self.assertEquals(
            [{'v': Uri('uri:x')}],
            list(g.matchTriplePatterns(('?v', 'uri:y', Uri('uri:z')))))
        self.assertEquals(
            [{'v': Uri('uri:a')}],
            list(g.matchTriplePatterns(('?v', 'uri:b', None))))
        self.assertEquals(
            [{'v': Uri('uri:a')}, {'v': Uri('uri:x')}, {'v': Uri('uri:z')}],
            sorted(g.matchTriplePatterns((None, None, '?v'), ('?v', None, None))))
        self.assertEquals(
            [{'v': Uri('uri:a')}, {'v': Uri('uri:x')}, {'v': Uri('uri:z')}],
            sorted(g.matchTriplePatterns(('?v', None, None), (None, None, '?v'))))
        self.assertEquals(
            [dict(v0=Uri('uri:a'), v1=Uri('uri:x'), v2=Uri('uri:z'))],
            list(g.matchTriplePatterns(
                ('?v0', None, '?v1'),
                ('?v1', None, '?v2'),
                ('?v2', None, '?v0'),
                ('?v0', None, Literal('c')))))