Home
About Avanti
Nova
MicroLCS
News
Contact
2012.02.22
Web based interface for Nova
This is a basic easy to use interface that demonstrates the semantic mapping capabilities of Avanti Nova. In this case a simple library catalog is implemented bringing together a database of book title records and related content on the web. The interface presents a list of objects with the "current" object in red text, followed by the first 30 characters of the objects' content in grey. The objects in black are ones that the current object links to. Along the top: Home, New, Edit, ... are operations that can be done on the current object. The Home object is the reference point. Everything in the interface is clickable. Clicking on an object label makes that one the current, and so forth, traversing the relationship structure. Documents in Nova are displayed as HTML. Any Nova document can link to any other. and these relationship structures are completely independent of the content. Keep in mind that nothing about the library catalog is hard coded in Nova. It could be set up for many different things. The web interface itself is written as a collection of PHP modules. It talks to the Nova server via socket using its own network application protocol based on the Nova scripting language. This web interface is a proof of concept and a reference application that can do useful things and that can be extended in many directions. It is not necessarily a "production" application of Nova. There is a long way to go. Navigating "backward" through structures isn't implemented yet (use the Back button of the browser). Linking and unlinking require that you know the object name you want to link to. Go ahead and try it out, but keep in mind that any objects you create are open for all to see. If you change something that's ok. Delete is currently disabled. Please feel free to tell me what you think. Feedback is welcome! -- pschlumpf@gmail.com
Try it out here.
Focus will continue in providing something useful for the library community as Nova evolves into a universal tool for data mapping in many contexts. Nova databases consist of sets of small pieces of information. These can either be metadata referencing external objects, the data itself, or a mix of both. Nova imposes no particular model of the structure of the data: No rows and colums in tables, or tree like heirarchies. It is a blank canvas for organising information and ideas.
Simplicity is our passion.
2011.08.19
Avanti Nova 0.1 Released
2011.05.02
Avanti Nova
A little background of how semantic maps are stored in Nova using an example: Consider a set of 10 objects. They can be anything. Then, think of a square 10 x 10 two-dimensional array where columns are the objects and rows are the relationships each object has with all the objects in the set. Each cell in the array has a 1 if a relationship exists. A 0 otherwise. At this level we do not care what the objects are, simply the relationships between them. This array is a database of pure relationships. By flipping the cells in the array from 0 to 1 or 1 to 0 we can manipulate the relationships between objects in the set. This can be queried. If, say, you want to see all the relationships object 3 has with other objects, select row 3 from the array. To make this thing useful, we map objects to external strings. That provides objects their meaning. These strings can be anything. They could be the text of the objects themselves, or they can reference things in the outside world through URLs or other mechanisms. Rules and protocols can be defined arbitrarily for these strings to make them useful in ways that aren't anticipated by Nova. Then, introduce indexes to make all this searchable. That is the power of Nova. It's a blank canvas -- nothing is hard coded. It's all up to you. So what we have is a set of objects whose interrelations are completely independent of what they are or what they describe. A pure semantic database independent of content.
Nova today consists of a command line interpreter that implements the language and a client/server architecture to make that language available on a network, similar to the way an SQL database server works. It happens to be written in Java. What it is written in doesn't matter. It could have been written in C or any layer of abstraction sufficient to implement what it does. Simplicity gives the freedom to do all kinds of things. Nova is simple enough where even a computer isn't necessary. A pencil, eraser and paper would work. The computer just makes things easier and scales better. We have to be careful not to let our tools define the way we do things.
Some of these commands and expressions, particularly those that have to do with creating objects and making links, are essential. Others are supporting structures native to this particular environment that may or may not remain.
$a = data
$peter = "Peter Schlumpf" The quote marks are optional, so
$peter = Peter Schlumpf
is valid.
$peter = Peter Schlumpf $peter2 = $peterThen $peter2 contains the string "Peter Schlumpf". %record($a).field This casts object $a as a CSV record and prints out the specified field, addressable by fields. Field definitions are defined in the object $record. So if we declare an object: $record = , First_name Last_nameWe're setting the format. The comma is the delimiter, and First_name and Last_name are fields. %record($a).field = data This sets a field in object $a cast as a CSV record to the data value. %record($a).field This prints the value of the specified field in object $a. $source --> $target ... Creates a link from the source object to the target object. The ... means that there can be more than one target object. $source x-> $target ... Breaks an exisitng link from the source object to the target. $source <-> $target ... Creates a bi-directional link bwtween source and target. $source ?-> $target ... Queries the relationship from source to target. Returns 1 if there is a relationship. Returns 0 if there is no relationship. del $a Deletes object $a from the set. list $object Lists all the relationship an object has with all the other objects in the set. browse $object maxLevel Browses the relationships an object has with others, and theirs in turn to the specified level. Think "degrees of seperation." count $object Returns the number of relationships an object has with other objects in the system. arms Print the arms array data structure in a character graphic format. env Shows the Nova run time environment. help Displays the help screen. noop No Operation. Does nothing. find <$object> search_string Perform a search on the strings of all the objects that $object points to. print <["string"] [$object] [%record]> ... Prints the contents of an object, a field or a line of text. println <["string"] [$object] [%record]> ... Does the same thing as the print command but adds a carriage return to the end. quit Exits the Nova run time environment. save Save the ARMS space to the specified file. load Loads the ARMS space from the specified file. reset Resets the ARMS space and sets the number of objects. If you fight the existing paradigm, it's tough. -- Ted Nelson |