The Reactively Ordered Data Query Language was developed as a powerful yet intuitive interface for the Slipnet. It provides mechanisms for both constructing and querying the data stored within the Slipnet.
RODQL is based on the premise that every proposition can be expressed as a three word sentence in the form "subject verb object", and this "object relation object" structure is the foundation of the Slipnet as described in the previous section. Since exploring the Slipnet is precisely transversing a graph, we express our queries in graph-theoretical terms. The value returned by a query is a sub-graph of the original Slipnet graph. The basic statement types are as follows.
Here "subject", "verb", and "object" are the names of Nodes that may or may not be a part of the database. If a Node is referenced by a name that does not exist within the database, a new one is created. Once the nodes are introduced, this statement simply adds a Link with the label "verb" between the Nodes subject and verb. If such a link already exists, the statement is effectively ignored.
This query will return the subgraph corresponding to the given relation, if it exists. Hence this query can be used as a simple boolean evaluator, returning a "null" (empty) graph if the proposition is not a part of the database. The WHAT keyword acts as a "wildcard" node which represents an unknown value that will be filled in by the query. Hence we might write "GET SENTENCE Marge mother_of WHAT" to determine Marge's children, or "GET SENTENCE Monty AND Homer WHAT WHAT" to determine what is related to both Monty and Homer as well as the nature of each relation. The statement "GET SENTENCE WHAT WHAT WHAT" will return the entire graph.
Given a sequence of link types to transverse, togther with a staring node, the query will "walk" from the specified path, and return the destination node. This allows users to construct "composite link labels" such as "mother_of, father_of" to determine the maternal grandfather of someone in the database.
This query will return all paths between the specified nodes whose length (number of links between them) is less than or equal to the given integer. It can be used to determine more or less convoluted relations between two nodes.
This query returns the subgraph consisting of all paths between the given node and nodes that lie on a path whose radius is less than the specified radius. It can be used to determine the nodes that are related to a particular node.
This query returns a "closed" (circular) path that loops from a node back to itself.
Note that each time a query is evaluated, a smaller Slipnet is returned, and users have the option of restricting future queries to this subgraph. Hence the above statements can be arbitrarily "chained" together. In addition, there are two keywords that allow one to combine queries. The meaning of both of these keywords correspond to their set theoretical (and by extension, graph theoretical) definitions.
The union of two graphs is simply the combination of all nodes and links in either. Hence union might be compared to a boolean "or".
The intersection of two graphs is the combination of all nodes and links in both graphs. Hence intersection might be compared to a boolean "and".