FuXi 1.0-rc 1.0-rc-III updates

I have made a few updates to FuXi.  Some are minor, others are major.
The detailed changes are below, but in summary.

- Fixes to major problems including the way adorned rules are compared
in order to ensure that - during a proof - the same goal will not be
proved twice (i.e., memoization or tabling)
- Fixed hashing of rules to take adornment into consideration, so
GrandFather_bb(?Y ?Z) :- And( Father(?X ?Y) Parent(?Z ?X)) is
considered different from GrandFather_bf(?Y ?Z) :- And( Father(?X ?Y)
Parent(?Z ?X))
- Rules for owl:IFP, owl:FP, and owl:oneOf terms are now only included
if these terms are in the signature of the OWL graph
- Added method to determine the derived predicates from an OWL graph
and a DDL-like graph which uses a vocabulary that allows
identification of derived / base predicates explicitly, common prefix,
or substring match (IdentifyDerivedPredicates).  See:
http://code.google.com/p/fuxi/wiki/FuXiUserManual#IdentifyDerivedPredicates
- Various correctness fixes for the top-down proof system
- Restriction BooleanClass instances (in InfixOWL) can now be directly
compared

InfixOWL has now stabilized to the point where I use it readily for
several other projects where I need to manipulate or create OWL
programatically - For extracting subsets of SNOMED-CT as OWL for
example.

The major addition, however (described here:
http://code.google.com/p/fuxi/wiki/FuXiUserManual#FuXi_.SPARQL) is an
rdflib store that can acts as a  thin wrapper between a SPARQL dataset
and a Semantic Web theory (as RIF Core / N3 / OWL2-RL) such that high-
level SPARQL queries (which use predicates whose semantics are
determined by the theory) can be answered against the 'base' SPARQL
dataset via query-rewriting.  This is one part of a framework for
federated SPARQL query mediation.

Most of what is needed to be a RIF implementation (and thus contribute
to the W3C implementation report of the RIF-related specifications) is
a syntax parser for the XML-based exchange syntax for RIF.  I just
need to find the time to work on this.  I'd welcome any volunteers who
wish to help in that regard.  Other than this, I think I'm pretty much
on a glide path to a 1.0 release.

I have yet to push these changes to cheeseshop/pypy so the only way to
pick them up is via the Mercurial repository.  Plus I need to look
into issues with easy_install identified in a previous email

-------------------- Changelog ---------------------------

a580574310:
fix to properly move builtins to end of chain
 bab89a0593:
- removed semantics for owl:differentFrom, list handling, owl:IFP,
owl:FP, owl:oneOf,  (they are now
optional)
- Added FuXi.DLP.ConditionalAxioms.AdditionalRules which takes an OWL
graph and returns a generator
over additional owl:IFP, owl:FP, etc. rules
- needed depending on the existence of axioms involving these
predicates
 b2a33fffe0:
- added additional arguments to FuXi.Horn.HornRules.HornFromDL needed
for
setupDescriptionLogicProgramming (derivedPreds - a list of derived
predicated and complSkip  - a
list of complement classes whose semantics will be ignored)
- added utility function FuXi.Horn.HornRules.NormalizeBody which takes
a rule and moves all its
builtins to the end
- updated getVarMapping method on Uniterms to take a reverse boolean
keyword argument which switches
the order of the mapping (from one predicate instance to another)
- Updated doctest strings
 a57d85d65e:
- The alphaNetworkHash method (on FuXi.Rete.AlphaNode instances) now
takes a list of BNodes which
are to be treated as skolem terms rather than undistinguished
variables
- Typo fixes
- Removed from MagicSetTransformation, the checking for owl:IFP,
owl:FP, and owl:oneOf terms to add
their corresponding clauses.  These need to be checked for by the user
explicitly via
FuXi.DLP.ConditionalAxioms.AdditionalRules
- Added adornment to string representation of a rule (which is the
basis for the hash of a rule)
- AdornLiteral now takes a skolemTerms argument (a list of BNodes)
that indicates which BNodes
should not be treated as an undistinguished variable
- added IdentifyDerivedPredicates to FuXi.Rete.Magic which takes a DDL
meta graph, an OWL graph and
a ruleset.  Returns the set of derived predicate names as determined
by the input.  See:
http://code.google.com/p/fuxi/wiki/DataDescriptionLanguage for a
description of the data description
language
- changed setupDescriptionLogicProgramming method on
FuXi.Rete.ReteNetwork instances so
AdditionalRules is used to add additional clauses if addPDSemantics is
specified as true
- added versions of normalizeUri and compute_qname used to create
QNames in generated SPARQL queries
(during top-down proving)

In FuXi.Rete.Util:
- lazyGeneratorPeek generalized to arbitrary first N terms checked.
Added helper class as a special
generator with an indication of success or failure of an earlier
'peek'

In FuXi.Rete.Magic:
- Completely refactored out RDFTuplesToSPARQL which takes a
conjunction of Horn literals and returns
the corresponding SPARQL query
- Added normalizeBindingsAndQuery which takes a query in the form of a
list of variables to bind to
an a priori set of bindings and a conjunct of literals and applies the
bindings
- Various fixes to RunQuery related to generation of SPARQL and
determination of whether or not
query is ground or not.
- RunQuery now returns a generator over its solutions (except ASK
queries) - this ensures that the
entire proof chain is solved incrementally and via lazy iteration
rather than fetching all answers
from a ground query before continuation.
- Added a framework for indentation of debugging (to determine shape
of the proof search space), and
a means for storing answers to queries for subsequent invokations
- lazyGeneratorPeek is now used to ensure the propagation of proof
searching is incremental and
facilitated by lazil incrementing a generator
- Fixed code determining variables to return for RunQuery
- Fixed handling of multiple answers from combined ground querying for
a list of literals in a rule
body.
- Created PML proofs now include query nodes
- Building of proof graph (in PML) is optional
- Added fix to catch answers that do not combine properly (they are
discarded as subsequent answers)
- Fixed sip strategy handling of previously solved goals and adornment
patterns
- Added check to ensure that in the absence of any valid rules for a
goal and with an unsuccessful
ground query, if the query prediacate is not in the IDB, we have
failed
 479f1dee8f:
To FuXi.Syntax.InfixOWL
- added DeepClassClear which recursively clears the given class,
continuing where any related class
is an anonymous class
- Added common MalformedClass exception
- Added support for comparing BooleanClass instances where equivalence
is determined by equivalence
of their members
- Fixed order of class inheritance for EnumeratedClass and
BooleanClass
- Fixed Restriction to better handle when the graph already has the
restriction defined in the graph
and where it doesn't and we want to populate the graph
using the given arguments
- If either of someValuesFrom, allValuesFrom, etc.. is anything other
than a Class, or Identifier,
this signals that there is a value already specified in the underlying
graph which needs to be
retrieved
- Restrictions are now hashable (and thus comparable)
 d68802c005:
Added an implementation for a top-down query answering component

-- Chime

Received on Monday, 21 December 2009 22:36:09 UTC