コード例 #1
0
class TestUnionGroup(unittest.TestCase):

    def setUp(self):
        self.store = TripleStore()
        self.store.add_triples(('a', 'name', 'name-a'), ('b', 'name', 'name-b'),
                    ('a', 'weight', 'weight-a'), ('b', 'size', 'size-b'))
        self.p = UnionGroup(Pattern(self.store, VariableExpression('id'), LiteralExpression('name'), VariableExpression('name')),
                            Pattern(self.store, VariableExpression('id'), LiteralExpression('weight'), VariableExpression('weight')))

    def test_match_empty_solution(self):
        self.assertEqual(
            [dict(id='a', name='name-a'), dict(id='b', name='name-b'),
             dict(id='a', weight='weight-a')],
            list(self.p.match({}))
        )
    
    def test_match_with_constraining_solution(self):
        self.assertEqual(
            [dict(id='a', name='name-a'), dict(id='a', weight='weight-a')],
            list(self.p.match({'id': 'a'}))
        )
        self.assertEqual(
            [dict(id='b', name='name-b'), dict(id='a', weight='weight-a', name='name-b')],
            list(self.p.match({'name': 'name-b'}))
        )
        self.assertEqual(
            [],
            list(self.p.match({'id': 'c'}))
        )
コード例 #2
0
class TestParsing(unittest.TestCase):
    
    def setUp(self):
        self.store = TripleStore()
    
    def test_parse_query_select(self):
        p = self.store.parse_query("""SELECT ?title
        WHERE
        {
          <http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title .
        }""")
        
        self.assertTrue(hasattr(p, 'query'))
        _, variables, pattern = p.query
        
        self.assertEqual(1, len(variables))
        self.assertTrue(isinstance(variables[0], VariableExpression))
        self.assertEquals('title', variables[0].name)
        self.assertTrue(isinstance(pattern, Pattern))
        triple = pattern.pattern
        self.assertEqual(3, len(triple))
        self.assertEqual('http://example.org/book/book1', triple[0].value)
        self.assertEqual('http://purl.org/dc/elements/1.1/title', triple[1].value)
        self.assertEqual('title', triple[2].name)
    
    def test_parse_query_select_with_prefix(self):
        p = self.store.parse_query("""PREFIX foaf: <http://xmlns.com/foaf/0.1/>
        SELECT ?x ?name
        WHERE  { ?x foaf:name ?name }""")
        
        self.assertTrue(hasattr(p, 'prologue'))
        self.assertTrue(hasattr(p.prologue, 'prefixes'))
        prefixes = p.prologue.prefixes
        self.assertEqual(1, len(prefixes))
        prefix = prefixes[0]
        self.assertTrue(hasattr(prefix, 'name'))
        self.assertEqual('foaf:', prefix.name)
        self.assertTrue(hasattr(prefix, 'value'))
        self.assertEqual('http://xmlns.com/foaf/0.1/', prefix.value)
        
        name, variables, pattern = p.query
        self.assertEqual(2, len(variables))
        self.assertTrue(isinstance(variables[0], VariableExpression))
        self.assertEquals('x', variables[0].name)
        self.assertTrue(isinstance(variables[1], VariableExpression))
        self.assertEquals('name', variables[1].name)
        
        self.assertTrue(isinstance(pattern, Pattern))
        triple = pattern.pattern
        self.assertTrue(isinstance(triple[0], VariableExpression))
        self.assertEquals('x', triple[0].name)
        self.assertEqual('http://xmlns.com/foaf/0.1/name', triple[1].value)
        self.assertTrue(isinstance(triple[2], VariableExpression))
        self.assertEqual('name', triple[2].name)
コード例 #3
0
 def setUp(self):
     self.store = TripleStore()
コード例 #4
0
 def setUp(self):
     self.store = TripleStore()
     self.store.add_triples(('a', 'name', 'name-a'), ('b', 'name', 'name-b'),
                 ('a', 'weight', 'weight-a'), ('b', 'size', 'size-b'),
                 ('a', 'height', 100))
コード例 #5
0
class TestQuery(unittest.TestCase):
    
    def setUp(self):
        self.store = TripleStore()
        self.store.add_triples(('a', 'name', 'name-a'), ('b', 'name', 'name-b'),
                    ('a', 'weight', 'weight-a'), ('b', 'size', 'size-b'),
                    ('a', 'height', 100))
    
    def test_query_simple(self):
        self.assertEqual(
            [('a', 'name-a'), ('b', 'name-b')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name }'))
        )
    
    def test_query_join(self):
        self.assertEqual(
            [('a', 'name-a', 'weight-a')],
            list(self.store.query('SELECT ?id ?name ?weight WHERE { ?id name ?name . ?id weight ?weight }'))
        )
    
    def test_query_join_unmatchable(self):
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?id ?weight WHERE { ?id name ?name . ?name weight ?weight }'))
        )
    
    def test_query_union(self):
        self.assertEqual(
            [('a', 'name-a', None), ('b', 'name-b', None), ('a', None, 'weight-a')],
            list(self.store.query('SELECT ?id ?name ?weight WHERE { { ?id name ?name} UNION {?id weight ?weight} }'))
        )
    
    def test_single_optional(self):
        self.assertEqual(
            [('a', 'name-a', 'weight-a'), ('b', 'name-b', None)],
            list(self.store.query('SELECT ?id ?value ?weight WHERE { ?id name ?value OPTIONAL {?id weight ?weight} }'))
        )
        self.assertEqual(
            [('b', 'name-b', None)],
            list(self.store.query('SELECT ?id ?value ?weight WHERE { ?id name ?value OPTIONAL {?id weight ?weight} ?id size ?size }'))
        )
    
    def test_multiple_optional(self):
        self.assertEqual(
            [('a', 'name-a', 'weight-a', None), ('b', 'name-b', None, 'size-b')],
            list(self.store.query('''SELECT ?id ?value ?weight ?size
                        WHERE { ?id name ?value 
                        OPTIONAL {?id weight ?weight}
                        OPTIONAL {?id size ?size} }'''))
        )

    def test_group_optional(self):
        self.assertEqual(
            [('a', 'name-a', None, None), ('b', 'name-b', None, None)],
            list(self.store.query('''SELECT ?id ?value ?weight ?size
                        WHERE { ?id name ?value 
                        OPTIONAL {?id weight ?weight . ?id size ?size} }'''))
        )
    
    def test_star_has_right_column_order(self):
        q = self.store.query('SELECT * WHERE { ?id name ?name }')
        self.assertEqual(('id', 'name'), tuple(v.name for v in q.variables))
        q = self.store.query('SELECT * WHERE { { ?id name ?name} UNION {?id weight ?weight} }')
        self.assertEqual(('id', 'name', 'weight'), tuple(v.name for v in q.variables))
        q = self.store.query('SELECT * WHERE { ?id name ?value OPTIONAL {?id weight ?weight} }')
        self.assertEqual(('id', 'value', 'weight'), tuple(v.name for v in q.variables))
    
    def test_filter(self):
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height > 99) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height > 100) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height >= 100) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height >= 101) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height < 101) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height < 100) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height <= 100) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height <= 99) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height != 100) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height != 101) }'))
        )
        self.assertEqual(
            [],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height = 101) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height = 100) }'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER (?height = 2*50) }'))
        )
    
    def test_complex_filter(self):
        self.assertEqual(
            [('b', 'name', 'name-b')],
            list(self.store.query('SELECT ?id ?property ?value WHERE { ?id ?property ?value FILTER (regex(?value, "^name-") && ?id != "a")}'))
        )
        self.assertEqual(
            [(100,)],
            list(self.store.query('SELECT ?height WHERE { ?id height ?height FILTER ((2* -?height) = 2* -100) }'))
        )
        
    def test_order_by(self):
        self.assertEqual(
            [('a', 'name-a'), ('b', 'name-b')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name } ORDER BY ?name'))
        )
        self.assertEqual(
            [('a', 'name-a'), ('b', 'name-b')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name } ORDER BY ASC(?name)'))
        )
        self.assertEqual(
            [('b', 'name-b'), ('a', 'name-a')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name } ORDER BY DESC(?name)'))
        )
        
    def test_limit(self):
        self.assertEqual(
            [('a', 'name-a')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name } ORDER BY ?name LIMIT 1'))
        )
    
    def test_order_by(self):
        self.assertEqual(
            [('b', 'name-b')],
            list(self.store.query('SELECT ?id ?name WHERE { ?id name ?name } ORDER BY ?name OFFSET 1'))
        )
    
    def test_distinct(self):
        self.assertEqual(
            set([('a',), ('b',)]),
            set(self.store.query('SELECT DISTINCT ?id WHERE { { ?id name ?name} UNION {?id weight ?weight} }'))
        )
コード例 #6
0
 def setUp(self):
     self.store = TripleStore()
     self.store.add_triples(('a', 'name', 'name-a'), ('b', 'name', 'name-b'),
                 ('a', 'weight', 'weight-a'), ('b', 'size', 'size-b'))
     self.p = UnionGroup(Pattern(self.store, VariableExpression('id'), LiteralExpression('name'), VariableExpression('name')),
                         Pattern(self.store, VariableExpression('id'), LiteralExpression('weight'), VariableExpression('weight')))