Rolonics 102--a brief introduction to the AgileWiki
The AgileWiki is a Rolonic based system. And there are only 3 types of data: documents, name/value pairs and Rolons. You could say that it almost turtles all the way down.
Every rolon has an optional document associated with it, a WikiPage, a web page, a word document or whatever. Descriptors on the rolon identify the mime type.
Then there are the name/value pairs. Some of the simpler classifiers and descriptors are implemented as name/value pairs.
Finally there are rolons. A rolon's journal is a series of other rolons. Its ledger is a structure of rolons. And the classifiers are ledgers as well. Finally, every rolon has a descriptor unit which is of course another rolon. (Yes, there is one generic descriptor unit of descriptor units rolon which has itself as its own descriptor unit. But there are other more specific descriptor units for specialized descriptor units too, as well as a host of rolons which serve as descriptor units for non-descriptor unit rolons.)
But rolons change over time. And the AgileWiki supports queries for changes over time and the state of rolons for any past time. This is where the database comes in. Name/value pairs, documents and rolons are not stored in the database per say. Rather, their changes over time are recorded. So for example, the value of a name is determined by starting at a given time and proceeding backwards to find the first (latest) applicable assignment.
Now in addition to these data structures, there is also command logic. Each command is implemented a thread-safe object with several methods. Commands are then associated with various types of rolons, which defines their scope. Each command has a help method, which gives a brief description, a process method to perform the defined operation and an applicability method. This last method is the command's classifier--it determines the conditions under which it is valid.
The AgileWiki then is comprised of a simple set of data structures, a form of versioning and semi-smart commands. Reminds me of lisp a bit. But its very simplicity allows for very effective caching logic, making it all very fast. And it is easily built up into complex structures able to describe most any application. But there is also a bit more. I haven't said much about relations between rolons (classifiers).
The database supports lists, which are ordered sets of rolons. Lists are used to implement structures. So a rolon can be the parent of a list of child rolons. And a rolon can have a list of parent rolons. (Think non-cyclic graph.) Further, the classifier rolons of a rolon are also a list defining the applicative context for that rolon. You can order the list, and that defines preferences when determining a rolon's context.
Further, some classifiers which are name/value pairs are inverted in the database, as these classifiers are used to quickly locate rolons of interest.
1 Comments:
A nice world view, my friend. Why don't you express it in some available and standard formalism like an ontology (think of RDF, OWL and the like.). You have inferencing already implemented over these formalism too. You could save lot of time and share your achievemetns with others easily.
Post a Comment
<< Home