def command(self): if self.opts.infile == "-": infile = sys.stdin else: infile = open(self.opts.infile) facts = Graph() facts.parse(infile, format=self.get_informat()) infile.close() # rstore, rgraph = SetupRuleStore() # network = ReteNetwork(rstore) # rules = HornFromN3(self.opts.rules) # for rule in rules: # network.buildNetworkFromClause(rule) # network.feedFactsToAdd(generateTokenSet(facts)) # # facts += network.inferredFacts minimised = Graph() minimised.namespace_manageer = facts.namespace_manager minimised += facts for s,p,o in facts.triples((None, None, None)): minimised.remove((s,p,o)) rules = HornFromN3(self.opts.rules) topDownStore = TopDownSPARQLEntailingStore( minimised.store, minimised, idb=rules, decisionProcedure=0, derivedPredicates=[p]) target = Graph(topDownStore) q = "ASK WHERE { %s }" % " ".join(x.n3() for x in (s,p,o)) log.debug("QUERY %s" % q) result = target.query(q).askAnswer[0] log.debug("RESULT %s" % result) if not result: minimised.add((s,p,o)) if self.opts.debug: log.info("KEEP %s." % " ".join(x.n3() for x in (s,p,o))) elif self.opts.debug: log.info("DROP %s." % " ".join(x.n3() for x in (s,p,o))) if self.opts.outfile == "-": outfile = sys.stdout else: outfile = open(self.opts.outfile, "w+") minimised.serialize(outfile, format=self.opts.format) outfile.close()