Links and
Link Types


The connection that a link represents is defined by spec-sets called end-sets. Each link has three end-sets: a from-set, a to-set, and a three-set. These three end-sets are operationally the same, but by convention, links start at the from-set and end at the to-set, and have a type as defined by their three-set.

Frontends create links by specifying the three end-sets and a document in which to store the link. This document is the link's home document. The address of the link within its home document is the link's global identifier. Note that the home document and end-sets of a link are completely independent. A link in a document could connect from the contents of another document to the contents of still other documents.

Each link has a final, virtual property called its home-set. It is the set of all documents that store the link in their link space. This initially contains just the home document of the link, but editing and version creation operations can cause a link to exist in more than one document.

Link Types

The current, unimaginative scheme for link typing simply associates each type with a tumbler address. The three-set for a quote link, for example, just contains the tumbler address associated with type "quote". Below are listed the values used for the example Udanax Green system:

  jump 1.1.0.1.0.2.0.2.1

quote 1.1.0.1.0.2.0.2.2

footnote 1.1.0.1.0.2.0.2.3

marginal note 1.1.0.1.0.2.0.2.4
Much more powerful conventions will completely replace this in the product release.

The end-set used to designate a link's type is deliberately misnamed to escape the assumption that a type is just a symbol. The simplest improvement makes each type a document that stores a description of the uses and conventions for the given type. In a more interesting example, type "quote" refers to a set of documents with programs for presenting the link on a variety of displays. Thus, a frontend could present a mathematical equation as a graph, a musical score as sheet music, and digital audio as sound played on a stereo.

Link Matching

Udanax Green supplies a very powerful operation for finding links. The operation takes four spec-sets as arguments: one for each end-set and one for the home-set. The arguments specify the contents within which the appropriate end-set must attach. The operation returns all links whose from-set intersects the first argument, whose to-set intersects the second argument, whose three-set intersect the third argument, and whose home-set intersects the fourth argument. The example shows the arguments used to find all the places at which author A quotes other authors (or himself):

  from-set: span of author A's documents

to-set the docuverse

three-set: the ID that specifies the `quote' type.

home-set: span of author A's documents
This returns all links of type `quote' that author A made from his documents to anywhere within the docuverse. In the example, links were matched based on their owner using the tumbler addressing architecture. The docuverse (i.e., no restriction) can also be expressed with an empty spec-set. By restricting the to-set to author B's documents rather than the entire docuverse, the operation would return all the places at which author A quoted author B.

Note that the link matching is an operation on the Udanax Green enfiladic data structures and does NOT search through all the links in the docuverse!

Link Interaction with Edits and Versions

Links interact with edit operations and versions by staying attached to the same contents, independent of their location. The chapter "Addressing" described the derivation of a unique identity for each byte and link in Udanax Green. Links connect to these objects rather than to the positions of the objects within documents. A consequence of this is that inserted bytes remain unconnected to links, even when inserted amidst a connected group of bytes. The end-set of the link effectively splits to only include the original characters. In the examples below, the italicized characters are in the end-set of a link.

  initial text This text was already here...

insert text This text was alinserted text ready here...

rearrange text This text alinserted was text ready here...
Consistent interaction between links and editing operations requires that the backend perform the editing operations. Frontends might be unaware of all links attached to a particular span of bytes.