def setupDescriptionLogicProgramming(self, owlN3Graph, expanded=[], addPDSemantics=True, classifyTBox=False, constructNetwork=True, derivedPreds=[], ignoreNegativeStratus=False, safety = DATALOG_SAFETY_NONE): rt=[rule for rule in MapDLPtoNetwork(self, owlN3Graph, complementExpansions=expanded, constructNetwork=constructNetwork, derivedPreds=derivedPreds, ignoreNegativeStratus=ignoreNegativeStratus, safety = safety)] if ignoreNegativeStratus: rules,negRules=rt rules = set(rules) self.negRules = set(negRules) else: rules=set(rt) if constructNetwork: self.rules.update(rules) additionalRules = set(AdditionalRules(owlN3Graph)) if addPDSemantics: from FuXi.Horn.HornRules import HornFromN3 additionalRules.update(HornFromN3(StringIO(non_DHL_OWL_Semantics))) if constructNetwork: for rule in additionalRules: self.buildNetwork(iter(rule.formula.body), iter(rule.formula.head), rule) self.rules.add(rule) else: rules.update(additionalRules) if constructNetwork: rules = self.rules # noRules=len(rules) if classifyTBox: self.feedFactsToAdd(generateTokenSet(owlN3Graph)) # print "##### DLP rules fired against OWL/RDF TBOX",self return rules
def setupDescriptionLogicProgramming(self, owlN3Graph, expanded=[], addPDSemantics=True, classifyTBox=False, constructNetwork=True, derivedPreds=[], ignoreNegativeStratus=False, safety = DATALOG_SAFETY_NONE): rt=[rule for rule in MapDLPtoNetwork(self, owlN3Graph, complementExpansions=expanded, constructNetwork=constructNetwork, derivedPreds=derivedPreds, ignoreNegativeStratus=ignoreNegativeStratus, safety = safety)] if ignoreNegativeStratus: rules,negRules=rt rules = set(rules) self.negRules = set(negRules) else: rules=set(rt) if constructNetwork: self.rules.update(rules) additionalRules = set(AdditionalRules(owlN3Graph)) if addPDSemantics: from FuXi.Horn.HornRules import HornFromN3 additionalRules.update(HornFromN3(StringIO(non_DHL_OWL_Semantics))) if constructNetwork: for rule in additionalRules: self.buildNetwork(iter(rule.formula.body), iter(rule.formula.head), rule) self.rules.add(rule) else: rules.update(additionalRules) if constructNetwork: rules = self.rules noRules=len(rules) if classifyTBox: self.feedFactsToAdd(generateTokenSet(owlN3Graph)) # print "##### DLP rules fired against OWL/RDF TBOX",self return rules
def calculateStratifiedModel(self,database): """ Stratified Negation Semantics for DLP using SPARQL to handle the negation """ if not self.negRules: return from FuXi.DLP.Negation import StratifiedSPARQL # from FuXi.Rete.Magic import PrettyPrintRule import copy noNegFacts = 0 for i in self.negRules: #Evaluate the Graph pattern, and instanciate the head of the rule with #the solutions returned nsMapping = dict([(v,k) for k,v in self.nsMap.items()]) sel,compiler=StratifiedSPARQL(i,nsMapping) query=compiler.compile(sel) i.stratifiedQuery=query vars = sel.projection unionClosureG = self.closureGraph(database) for rt in unionClosureG.query(query): solutions={} if isinstance(rt,tuple): solutions.update(dict([(vars[idx],i) for idx,i in enumerate(rt)])) else: solutions[vars[0]]=rt i.solutions=solutions head=copy.deepcopy(i.formula.head) head.ground(solutions) fact=head.toRDFTuple() self.inferredFacts.add(fact) self.feedFactsToAdd(generateTokenSet([fact])) noNegFacts += 1 #Now we need to clear assertions that cross the individual, concept, relation divide # toRemove=[] for s,p,o in self.inferredFacts.triples((None,RDF.type,None)): if s in unionClosureG.predicates() or\ s in [_s for _s,_p,_o in unionClosureG.triples_choices( (None, RDF.type, [OWL_NS.Class, OWL_NS.Restriction]))]: self.inferredFacts.remove((s,p,o)) return noNegFacts
def calculateStratifiedModel(self,database): """ Stratified Negation Semantics for DLP using SPARQL to handle the negation """ if not self.negRules: return from FuXi.DLP.Negation import StratifiedSPARQL from FuXi.Rete.Magic import PrettyPrintRule import copy noNegFacts = 0 for i in self.negRules: #Evaluate the Graph pattern, and instanciate the head of the rule with #the solutions returned nsMapping = dict([(v,k) for k,v in self.nsMap.items()]) sel,compiler=StratifiedSPARQL(i,nsMapping) query=compiler.compile(sel) i.stratifiedQuery=query vars = sel.projection unionClosureG = self.closureGraph(database) for rt in unionClosureG.query(query): solutions={} if isinstance(rt,tuple): solutions.update(dict([(vars[idx],i) for idx,i in enumerate(rt)])) else: solutions[vars[0]]=rt i.solutions=solutions head=copy.deepcopy(i.formula.head) head.ground(solutions) fact=head.toRDFTuple() self.inferredFacts.add(fact) self.feedFactsToAdd(generateTokenSet([fact])) noNegFacts += 1 #Now we need to clear assertions that cross the individual, concept, relation divide toRemove=[] for s,p,o in self.inferredFacts.triples((None,RDF.type,None)): if s in unionClosureG.predicates() or\ s in [_s for _s,_p,_o in unionClosureG.triples_choices( (None, RDF.type, [OWL_NS.Class, OWL_NS.Restriction]))]: self.inferredFacts.remove((s,p,o)) return noNegFacts