[Attempto] Pellet vs RACE

Tobias Kuhn kuhntobias at gmail.com
Tue Aug 10 14:45:08 CEST 2010


Hi George,

> For layer 2, if complex statements not likely to involve gobs of memory could be
> identified, i'd start them right away at low priority rather than waiting, to
> conserve cpu and user time.

This seems to be a good approach to me. I see one major problem (or 
challenge): when the ontology is changed while such a low priority 
reasoning task is running, the result of the reasoning process is 
potentially outdated.

> As you say, retaining performance with scale has to be solved to achieve non-R&D
> utility.  What about the idea to stick the wiki data in a SQL engine?  Is
> modern, Turing-complete SQL too incapable somehow compared with Prolog?  Would
> Datalog be a cost-effective compromise?

In order to avoid confusion, we should be clear about what kind of 
languages in what kind of situations we are talking about.

SQL is primarily a language for querying and modifying data bases, even 
though SQL can also be used as a programming or knowledge representation 
language. You can *represent* knowledge in SQL in several ways, but SQL 
is mostly used to *query* and *modify* knowledge. (I use "knowledge" and 
"data" synonymously here.) The databases themselves implement a form of 
the relational database model that does not directly depend on SQL. This 
relational database model corresponds to a subset of first-order logic, 
and overlaps with OWL (because n-ary relations are supported, it is not 
a subset of OWL). More complex facts can be expressed in SQL with the 
"CREATE ASSERTION" keyword. It would be interesting to investigate how 
SQL databases could be used to store complex knowledge relying on 
relation tables and assertions (probably this has already been done...). 
However, I assume that current database management systems are not 
optimized for a high number of highly complex assertion statements. 
Thus, you might end up with a performance loss instead of a gain. 
Furthermore, I assume that SQL assertions are only checked against the 
relation data but not against each other. Another problem could be that 
relational databases rely on the open world assumption, which is not 
appropriate in all situations.

Prolog builds upon a subset of first-order logic (i.e. Horn clauses). 
Note that we use Prolog only as a programming language, but not as a 
knowledge representation language. ACE is translated into Discourse 
Representation Structures (DRS), which are a notational variant of 
first-order logic. These DRSs can be represented in Prolog but without 
making use of the Horn clause semantics of Prolog. DRSs can be 
represented in Prolog, as OWL can be represented in XML. Prolog or 
Datalog can be used as knowledge representation languages for 
ontologies, but they lack many useful features, e.g. negation (other 
than negation as failure).

The bottom line is that languages like SQL or Datalog can certainly be 
worth exploring as alternatives for AceWiki, but it's definitely more 
than just "to stick the wiki data in a SQL engine".

For these reasons, I try to improve AceWiki with the current approach of 
using OWL reasoners. With the latest version of AceWiki, external 
reasoners like FaCT++ can be used, which greatly improves the 
performance of AceWiki. Furthermore, the reasoning in AceWiki can now be 
restricted to a certain OWL 2 Profile (EL, QL or RL). In this way, 
complex statements are not considered for reasoning, and the knowledge 
base can grow much bigger without negative performance effects. I just 
had the idea that the statements that are excluded this way could still 
be checked for consistency against the core knowledge base, but not 
against each other (like assertions in SQL). This could be done 
manually, or periodically in an automatic way.


Cheers,
Tobias


More information about the attempto mailing list