Emeka - RDF IRC Agent (FOAF/RSS/Versa)

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Emeka is a programmable IRC bot (implemented in Python) which provides services for querying remote RDF resources. In particular, Emeka's command library provides common services associated with RSS and FOAF resources. The short-term goal was to be a tool for learning Versa by example usage as well as to demonstrate the ability of IRC and RDF to serve as a framework for building Agents (in the traditional AI sense). The long-term goal is for Emeka to demonstrate the true value of RDF: machine readability and ontological commitment.

Emeka is based on (and primarily motivated by) phenny and julie. Emeka's RDF query language of choice is Versa. It uses the Universal Feed Parser for the interpretation of RSS/Atom/CDF feeds. Feeds of various formats are parsed, normalized as RSS 1.0, and loaded into an RDF model - in order to perform common services.

Basic Services

The functions above that take a URL as their first argument can alternatively take a Versa variable reference (in the form: $varName) which must refer to a variable bound to a string or a list/set of strings. In the former case, the string is used as the remote location of the RDF graph and in the latter case each string is used as the remote location of an RDF graph to parse. Feeds can be aggregated on the fly in this way. For an example of this, see #swhack logs. Variables can be bound to the result of evaluating Versa expressions.

Advanced Services

Reasoning

Either (or both) of the first two arguments can be a 1) Uri 2) Versa variable reference ($varName) bound to a string or 3) a Versa variable reference bound to a list/set of strings (each of which is treated as an individual RDF graph to parse into the model). The first set of graphs are loaded as rules and the second set are loaded as facts. The third argument represents the number of times to expand the graph by following rdfs:seeAlso properties. The final argument is an expression to invoke on the final graph (expanded by inferred statements)

This final service uses FuXi and its use is best demonstrated by example. This sample graph is loaded in along with some standard owl rules and a query is executed which results in some additional information inferred via logical deduction.

Downloads

Emeka's implementation consists of the following primary components:

Dependencies

Emeka also relies on the following software packages

Profile

Emeka's Description of a Project (DOAP) instance: Emeka.rdf

Emeka resides on the following channels (on irc.freenode.net): #swhack,#versa,#ogbuji,#foaf,#swig,#4suite. You can browse its documentation interactively by saying either ".help" or "Emeka, help" in a channel where it resides.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::