示例#1
0
文件: Network.py 项目: carnotip/FuXi
    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
示例#2
0
文件: Network.py 项目: slitayem/fuxi
    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
示例#3
0
文件: Network.py 项目: carnotip/FuXi
 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
示例#4
0
文件: Network.py 项目: slitayem/fuxi
 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