[ 
https://issues.apache.org/jira/browse/RYA-417?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16320827#comment-16320827
 ] 

ASF GitHub Bot commented on RYA-417:
------------------------------------

Github user jessehatfield commented on a diff in the pull request:

    https://github.com/apache/incubator-rya/pull/255#discussion_r160764875
  
    --- Diff: 
extras/rya.forwardchain/src/main/java/org/apache/rya/forwardchain/rule/AntecedentVisitor.java
 ---
    @@ -0,0 +1,51 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *   http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +package org.apache.rya.forwardchain.rule;
    +
    +import java.util.HashSet;
    +import java.util.Set;
    +
    +import org.openrdf.query.algebra.StatementPattern;
    +import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
    +
    +/**
    + * Query visitor that identifies all triple patterns represented as
    + * {@link StatementPattern}s in a query, which therefore represent triples
    + * that could potentially contribute to a solution. Considers only the 
statement
    + * patterns themselves, i.e. the leaves of the query tree, and does not 
consider
    + * other constraints that may restrict the set of triples that may be 
relevant.
    + * This means relying on this analysis to determine whether a fact can be 
part
    + * of a solution can yield false positives, but not false negatives.
    + */
    +class AntecedentVisitor extends QueryModelVisitorBase<RuntimeException> {
    --- End diff --
    
    In order to actually produce new triples, yes -- I should say "*can* be 
triggered" meaning "we should check this rule again, since a new statement has 
been added that may or may not create a new solution."
    
    More concrete example: suppose we have rule 1 `CONSTRUCT { ?p rdfs:domain 
?super } WHERE { ?sub rdfs:subClassOf ?super . ?p rdfs:domain ?sub }` and rule 
2 `CONSTRUCT { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b 
rdfs:subClassOf ?c }`. We execute rule 1 and get no results. Then we execute 
rule 2 and derive one new triple: `:Person rdfs:subClassOf :LivingThing .` This 
"triggers" rule 1 in the sense that we have to check it again -- we don't know 
whether it'll actually match since we didn't keep partial query solutions. 
Maybe there are properties with domain Person, maybe not -- all we know is that 
it's theoretically possible that the first rule could now produce triples that 
it couldn't before. In contrast, this wouldn't happen in the other direction: 
if we then use rule 1 to derive `:bornIn rdfs:domain :Person`, we immediately 
know that there's no need to execute rule 2 again. There's no way that any 
triple of that form could contribute to any application of rule 2, no matter 
what other data exists.
    
    This visitor is used to help make those connections: if any statement 
pattern in the WHERE portion of rule 1 matches any statement pattern in the 
CONSTRUCT portion of rule 2, then rule 2 can trigger rule 1, meaning that when 
rule 2 produces triples, we should make sure that rule 1 will be executed again 
to check for any new solutions. (More sophisticated approaches are probably 
possible, like "yes this rule can produce "?x p ?y" but based on the rest of 
the query there are certain constraints on ?x...", but for now we're just 
comparing individual statement patterns.)


> Implement a forward-chaining rules engine (SPIN)
> ------------------------------------------------
>
>                 Key: RYA-417
>                 URL: https://issues.apache.org/jira/browse/RYA-417
>             Project: Rya
>          Issue Type: New Feature
>            Reporter: Jesse Hatfield
>            Assignee: Jesse Hatfield
>
> Implement a forward-chaining reasoner that:
> * Runs as a batch process
> * Operates on user-defined [SPIN|http://spinrdf.org] rules
> * Inserts derived information back into Rya
> * Iterates until no new information can be derived



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to