[
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)