Links: A Diversity of dynamic Links
Links are not just for references, but they are used inside LogiLogi too. As noted, they can refer to logis and to versions of logis, but by default they refer to tags. Where tags are like index-words, given to a logi by its author. Logis can be tagged with one or more tags. And multiple logis can have the same tags. The following is an example of a tag-link (the url of the LogiLogi server, such as http://en.logilogi.org should normally be prepended):
This link refers to two different tags, namely 'Aristotle' and 'History'. All logis tagged with both of these tags will be in the set referred to. If there are multiple logis in the set, they will all be shown in the pop-over balloon on mouse-over. If the link is clicked directly, instead of hovered over, then the user will immediately be led to the logi with the highest rating. If there are no logis tagged with both tags, then the link will refer to all logis having at least the tag 'Aristotle'. More generally speaking, when there is a row of N tags for which no logis are found, the last is removed, so there are N - 1 tags, and finding a matching logi is retried, until either a logi is found, or only the tag at the front remains. In the latter case the link is considered unresolvable.
Linking to tag-sets allows one to easily refer to concepts within a certain context, and even incrementally so. In our simple example the historical meaning of Aristotle will be different from his meaning for philosophy. So 'Aristotle/History' should refer to a different description than 'Aristotle/Philosophy', but when an 'Aristotle/History' page has not yet been created, one would be content with the 'Aristotle'- or 'Aristotle/Philosophy'-page. In a more realistic setting this would allow an author to easily define or clarify concepts such as Heideggers 'Dasein' as he or other philosophers use, and understand them, possibly only after readers indicate their usage is unclear to them. Thus by referring to a page in context, authors can already point out in which direction they are thinking, even before having to create the pages referred to. And of course when a page with a contextualized tag-set is created, such as 'Aristotle/History', there will be no name-clash (with the other 'Aristotle' pages).
Now on to the other link-types; Here is an example of a permalink to a specific logi.
The first two segments of the link are the tags again, while the last part is the name of the author ('Ed Lee' in this example), followed by a number, which together form an unique identifier. The number is the 'opus' number of the logi; that is the $N$th logi written by its author. The whole link is a stable reference to the logi, even if the logi is tagged differently, because the system only uses the last part of the link to identify the logi. The tags are just there to provide context once a visitor lands on the page. In addition, a version-link is similar in shape. It only adds a version-number at the end, as can be seen below.
When links are added to a logi, they are kept track of separately from the text. Thus, while editing a logi, the links are not present in the text, or in its underlying representation. So one can focus on the text, and freely restructure it, without the risk of strange things happening to links or remarks. This is possible because LogiLogi stores links separately from the text, just like the Xanadu project does. It works as follows: the string of characters that a text is, is first of all stored separately from the view on this string that the current version provides. The view initially consists of a set of pointers to the begin- and end-points of the string. Then, when for example, in a new version a paragraph is added to the middle of the text, its characters are appended to the end of the string. While a set of pointers to the new characters is inserted in the middle of the view. This new view is then stored as the second version. Now when links are attached, they are anchored to the string of characters, and not to the view, so their references remain stable, no matter what happens to the surface text (the view). It is illustrated in the view, string, inserts image.