Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)