def test(self,debug=debug): print testName, label query = urlopen(queryFile).read() factGraph = Graph().parse(urlopen(rdfDoc),format='n3') factGraph.parse(open('SPARQL/W3C/rdfs-axiomatic-triples.n3'),format='n3') self.rules.extend(self.network.setupDescriptionLogicProgramming( factGraph, addPDSemantics=True, constructNetwork=False)) if debug: pprint(list(self.rules)) topDownStore=TopDownSPARQLEntailingStore( factGraph.store, factGraph, idb=self.rules, DEBUG=debug, nsBindings=nsMap, decisionProcedure = BFP_METHOD, identifyHybridPredicates = True, templateMap={ STRING.contains : "REGEX(%s,%s)" }) targetGraph = Graph(topDownStore) parsedQuery=parse(query) for pref,nsUri in (setdict(nsMap) | setdict( parsedQuery.prolog.prefixBindings)).items(): targetGraph.bind(pref,nsUri) # rt=targetGraph.query('',parsedQuery=parsedQuery) actualSolns=[ImmutableDict([(k,v) for k,v in d.items()]) for d in parseResults( targetGraph.query(query).serialize( format='xml'))] expectedSolns=[ImmutableDict([(k,v) for k,v in d.items()]) for d in parseResults(urlopen(result).read())] actualSolns.sort(key=lambda d:hash(d)) expectedSolns.sort(key=lambda d:hash(d)) self.failUnless(set(actualSolns) == set(expectedSolns), "Answers don't match %s v.s. %s"%(actualSolns, expectedSolns) ) if debug: for network,goal in topDownStore.queryNetworks: pprint(goal) network.reportConflictSet(True)
def test(self, debug=debug): if debug: print testName, label, named_graphs query = urlopen(queryFile).read() try: parsedQuery = parse(query) except ParseException: return assertion = BNode() result_node = BNode() test_graph.add((result_node, RDF.type, EARL.TestResult)) test_graph.add( (result_node, DC['date'], Literal(datetime.date.today()))) test_graph.add((assertion, RDF.type, EARL.Assertion)) test_graph.add((assertion, EARL.assertedBy, MY_FOAF.chime)) test_graph.add((assertion, EARL.subject, URIRef('http://metacognition.info/software/fuxi'))) test_graph.add((assertion, EARL.test, TEST[testName])) test_graph.add((assertion, EARL.result, result_node)) if named_graphs: g = ConjunctiveGraph() else: g = Graph() if debug: print "Source graph ", rdfDoc g.parse(urlopen(rdfDoc), publicID=rdfDoc, format='n3') for sourceUri, graphIri in named_graphs: g.parse(urlopen(sourceUri), publicID=graphIri, format='n3') if named_graphs: factGraph = Graph(g.store, identifier=rdfDoc) else: factGraph = g if ENT.RIF in regime: rules = [] else: from FuXi.DLP.CompletionReasoning import GetELHConsequenceProcedureRules rules = [i for i in self.rdfs_rules] if ENT.RDFS in regime else [] rules.extend( self.network.setupDescriptionLogicProgramming( factGraph, addPDSemantics=True, constructNetwork=False)) if query.find('subClassOf') + 1 and (ENT.RDFS not in regime or testName in COMPLETION_RULES): if debug: print "Added completion rules for EL TBox reasoning" rules.extend(GetELHConsequenceProcedureRules(factGraph)) facts2add = [] for owl_class in factGraph.subjects(RDF.type, OWLNS.Class): facts2add.append( (owl_class, RDFS.subClassOf, owl_class, factGraph)) factGraph.addN(facts2add) if debug: pprint(list(rules)) if debug: print query topDownStore = TopDownSPARQLEntailingStore( factGraph.store, factGraph, idb=rules, DEBUG=debug, nsBindings=nsMap, #hybridPredicates = [RDFS.subClassOf], identifyHybridPredicates=True, templateMap={STRING.contains: "REGEX(%s,%s)"}) targetGraph = Graph(topDownStore) for pref, nsUri in (setdict(nsMap) | setdict( parsedQuery.prolog.prefixBindings)).items(): targetGraph.bind(pref, nsUri) rt = targetGraph.query('', parsedQuery=parsedQuery) if rt.askAnswer: actualSolns = rt.askAnswer[0] expectedSolns = parseResults(urlopen(result).read()) else: actualSolns = [ ImmutableDict([(k, v) for k, v in d.items()]) for d in parseResults(rt.serialize(format='xml')) ] expectedSolns = [ ImmutableDict([(k, v) for k, v in d.items()]) for d in parseResults(urlopen(result).read()) ] actualSolns.sort(key=lambda d: hash(d)) expectedSolns.sort(key=lambda d: hash(d)) actualSolns = set(actualSolns) expectedSolns = set(expectedSolns) if actualSolns == expectedSolns: test_graph.add((result_node, EARL.outcome, EARL['pass'])) else: test_graph.add((result_node, EARL.outcome, EARL['fail'])) self.failUnless( actualSolns == expectedSolns, "Answers don't match %s v.s. %s" % (actualSolns, expectedSolns)) if debug: for network, goal in topDownStore.queryNetworks: pprint(goal) network.reportConflictSet(True)
def test(self,debug=debug): if debug: print testName, label, named_graphs query = urlopen(queryFile).read() try: parsedQuery=parse(query) except ParseException: return assertion = BNode() result_node = BNode() test_graph.add((result_node,RDF.type,EARL.TestResult)) test_graph.add((result_node,DC['date'],Literal(datetime.date.today()))) test_graph.add((assertion,RDF.type,EARL.Assertion)) test_graph.add((assertion,EARL.assertedBy,MY_FOAF.chime)) test_graph.add((assertion, EARL.subject, URIRef('http://metacognition.info/software/fuxi'))) test_graph.add((assertion,EARL.test,TEST[testName])) test_graph.add((assertion,EARL.result,result_node)) if named_graphs: g = ConjunctiveGraph() else: g = Graph() if debug: print "Source graph ", rdfDoc g.parse( urlopen(rdfDoc), publicID=rdfDoc, format='n3') for sourceUri, graphIri in named_graphs: g.parse( urlopen(sourceUri), publicID=graphIri, format='n3') if named_graphs: factGraph = Graph(g.store,identifier=rdfDoc) else: factGraph = g if ENT.RIF in regime: rules = [] else: from FuXi.DLP.CompletionReasoning import GetELHConsequenceProcedureRules rules = [ i for i in self.rdfs_rules ] if ENT.RDFS in regime else [] rules.extend(self.network.setupDescriptionLogicProgramming( factGraph, addPDSemantics=True, constructNetwork=False)) if query.find('subClassOf')+1 and ( ENT.RDFS not in regime or testName in COMPLETION_RULES ): if debug: print "Added completion rules for EL TBox reasoning" rules.extend(GetELHConsequenceProcedureRules(factGraph)) facts2add = [] for owl_class in factGraph.subjects(RDF.type,OWLNS.Class): facts2add.append( (owl_class,RDFS.subClassOf,owl_class,factGraph) ) factGraph.addN(facts2add) if debug: pprint(list(rules)) if debug: print query topDownStore=TopDownSPARQLEntailingStore( factGraph.store, factGraph, idb=rules, DEBUG=debug, nsBindings=nsMap, #hybridPredicates = [RDFS.subClassOf], identifyHybridPredicates = True, templateMap={ STRING.contains : "REGEX(%s,%s)" }) targetGraph = Graph(topDownStore) for pref,nsUri in (setdict(nsMap) | setdict( parsedQuery.prolog.prefixBindings)).items(): targetGraph.bind(pref,nsUri) rt=targetGraph.query('',parsedQuery=parsedQuery) if rt.askAnswer: actualSolns = rt.askAnswer[0] expectedSolns = parseResults(urlopen(result).read()) else: actualSolns=[ImmutableDict([(k,v) for k,v in d.items()]) for d in parseResults(rt.serialize(format='xml'))] expectedSolns=[ImmutableDict([(k,v) for k,v in d.items()]) for d in parseResults(urlopen(result).read())] actualSolns.sort(key=lambda d:hash(d)) expectedSolns.sort(key=lambda d:hash(d)) actualSolns = set(actualSolns) expectedSolns = set(expectedSolns) if actualSolns == expectedSolns: test_graph.add((result_node,EARL.outcome,EARL['pass'])) else: test_graph.add((result_node,EARL.outcome,EARL['fail'])) self.failUnless(actualSolns == expectedSolns, "Answers don't match %s v.s. %s"%(actualSolns, expectedSolns) ) if debug: for network,goal in topDownStore.queryNetworks: pprint(goal) network.reportConflictSet(True)