Пример #1
0
def HornFromN3(n3Source,additionalBuiltins=None):
    from FuXi.Rete.RuleStore import SetupRuleStore, N3RuleStore
    if isinstance(n3Source,ConjunctiveGraph):
        store=N3RuleStore(additionalBuiltins=additionalBuiltins)
        for ctx in n3Source.contexts():
            for s,p,o in ctx:
                store.add((s,p,o),ctx)
    else:
        store,graph=SetupRuleStore(n3Source,additionalBuiltins=additionalBuiltins)
    store._finalize()
    return Ruleset(n3Rules=store.rules,nsMapping=store.nsMgr)
Пример #2
0
def HornFromN3(n3Source,additionalBuiltins=None):
    """
    Takes the path or URL of a N3 document, and a mapping from predicates
    to functions that implement any builtins found in the N3 document
    """
    from FuXi.Rete.RuleStore import SetupRuleStore, N3RuleStore
    if isinstance(n3Source,ConjunctiveGraph):
        store=N3RuleStore(additionalBuiltins=additionalBuiltins)
        for ctx in n3Source.contexts():
            for s,p,o in ctx:
                store.add((s,p,o),ctx)
    else:
        store,graph=SetupRuleStore(n3Source,additionalBuiltins=additionalBuiltins)
    store._finalize()
    return Ruleset(n3Rules=store.rules,nsMapping=store.nsMgr)
Пример #3
0
def NetworkFromN3(n3Source,additionalBuiltins=None):
    """
    Takes an N3 / RDF conjunctive graph and returns a ReteNetwork
    """
    from FuXi.Rete.RuleStore import SetupRuleStore
    rule_store, rule_graph, network = SetupRuleStore(
                         makeNetwork=True,
                         additionalBuiltins=additionalBuiltins)
    for ctx in n3Source.contexts():
        for s,p,o in ctx:
            rule_store.add((s,p,o),ctx)
    rule_store._finalize()
    for rule in Ruleset(n3Rules=rule_store.rules,nsMapping=rule_store.nsMgr):
        network.buildNetworkFromClause(rule)
    return network
Пример #4
0
def HornFromN3(n3Source, additionalBuiltins=None):
    """Extract Horn rules from an N3 document.

    Takes the path or URL of a N3 document, and a mapping from predicates
    to functions that implement any builtins found in the N3 document
    """
    from FuXi.Rete.RuleStore import SetupRuleStore, N3RuleStore
    if isinstance(n3Source, ConjunctiveGraph):
        store = N3RuleStore(additionalBuiltins=additionalBuiltins)
        for ctx in n3Source.contexts():
            for s, p, o in ctx:
                store.add((s, p, o), ctx)
    else:
        store, graph = SetupRuleStore(n3Source,
                                      additionalBuiltins=additionalBuiltins)
    store._finalize()
    return Ruleset(n3Rules=store.rules, nsMapping=store.nsMgr)
Пример #5
0
def NetworkFromN3(n3Source, additionalBuiltins=None):
    """Take an N3 / RDF conjunctive graph and return a ReteNetwork.

    Network is built from the rules in the N3 graph
    """
    from FuXi.Rete.RuleStore import SetupRuleStore
    rule_store, rule_graph, network = SetupRuleStore(
        makeNetwork=True, additionalBuiltins=additionalBuiltins)
    if isinstance(n3Source, ConjunctiveGraph):
        for ctx in n3Source.contexts():
            for s, p, o in ctx:
                rule_store.add((s, p, o), ctx)
    else:
        for s, p, o in n3Source:
            rule_store.add((s, p, o), n3Source)
    rule_store._finalize()
    for rule in Ruleset(n3Rules=rule_store.rules, nsMapping=rule_store.nsMgr):
        network.buildNetworkFromClause(rule)
    return network
Пример #6
0
class AdornProgramTest(unittest.TestCase):
    def setUp(self):
        self.ruleStore,self.ruleGraph=SetupRuleStore(StringIO(PROGRAM2))
        self.ruleStore._finalize()
        self.ruleStrings=[
        'Forall ?Y ?X ( :sg_bf(?X ?Y) :- And( :sg_magic(?X) ex:flat(?X ?Y) ) )',
        'Forall  ( :sg_magic(?Z1) :- And( :sg_magic(?X) ex:up(?X ?Z1) ) )',
        'Forall ?Z4 ?Y ?X ?Z1 ?Z2 ?Z3 ( :sg_bf(?X ?Y) :- And( :sg_magic(?X) ex:up(?X ?Z1) :sg_magic(?Z1) :sg_bf(?Z1 ?Z2) ex:flat(?Z2 ?Z3) :sg_magic(?Z3) :sg_bf(?Z3 ?Z4) ex:down(?Z4 ?Y) ) )',
        'Forall  ( :sg_magic(?Z3) :- And( :sg_magic(?X) ex:up(?X ?Z1) :sg_bf(?Z1 ?Z2) ex:flat(?Z2 ?Z3) ) )',
        ]

    def testAdorn(self):
        fg=Graph().parse(StringIO(PROGRAM2),format='n3')
        rules=Ruleset(n3Rules=self.ruleGraph.store.rules,
                   nsMapping=self.ruleStore.nsMgr)
        from pprint import pprint;pprint(self.ruleStrings)        
        for rule in MagicSetTransformation(fg,
                                           rules,
                                           NON_LINEAR_MS_QUERY,
                                           [MAGIC.sg]):
            self.failUnless(repr(rule) in self.ruleStrings, repr(rule))