from sets import Set from pychinko.rete import RuleCompiler, Rete from pychinko.interpreter import Interpreter from pychinko.terms import URI, Rule, Variable, Fact, Pattern, Literal from pychinko.simplequery import QueryN3Sink, SimpleQueryEvaluator from pychinko.pychinkafon import N3Sink, N3Parser from pychinko.nodes import RuleNode from pychinko.helpers import keysToList from rdflib.TripleStore import TripleStore import unittest import time class QueryTests(unittest.TestCase): """I test Pychinko's querying facilities""" def setUp(self): self.store = TripleStore() t = time.time() self.store.load('groundtests/rdfig/small-rdfig1.rdf') self.ReportLoadTime(t, self.store) self.querier = SimpleQueryEvaluator(self.store) def ReportLoadTime(self, t, store): print 'Time to load:', time.time() - t print 'Size of store:', len(store) def ReportHits(self, t, rows): print 'Number of hits:', len(rows) print 'Pychinko query time:', time.time() - t def testOneVarQuery(self): """I test a one variable match query""" oneVarQuery = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. """ #must be 120 matches self.assert_(len(self.querier.queryFromString(oneVarQuery)), 120) def testMultiVarQuery(self): """I test queries with multiple variables""" multiVarQuery1 = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. ?y dc:creator ?c. ?c foaf:nick ?z. """ multiVarQuery2 = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. ?y dc:creator ?c. ?c foaf:nick "bijanp". """ #must be 120 matches here too self.assertEqual(len(self.querier.queryFromString(multiVarQuery1)), 120) self.assertEqual(len(self.querier.queryFromString(multiVarQuery2)), 2) def testBuiltinQueries(self): """I test queries that make use of CWM's builtins""" builtinQuery1 = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. ?y dc:creator ?c. ?c foaf:nick ?z. ?z string:contains "bij". """ self.assertEqual(len(self.querier.queryFromString(builtinQuery1)), 2) builtinQuery2 = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. ?y dc:creator ?c. ?c foaf:nick ?z. ?z string:contains "russellparadox". """ self.assertEqual(len(self.querier.queryFromString(builtinQuery2)), 0) builtinQuery3 = """ @prefix wn: . @prefix foaf: . @prefix dc: . @prefix string: . @prefix math: . ?y dc:date ?a. ?y dc:creator ?c. ?c foaf:nick ?z. ?z string:startsWith "b". """ self.assertEqual(len(self.querier.queryFromString(builtinQuery3)), 5) if __name__ == "__main__": print "Running query tests.." unittest.main()