This is a design for an annotation system that will eventually be able to annotate arbitrary objects with actions (and possibly other things?). Annotations are stored in a database, separately from the object that they annotate. This feature allows a person to annotate an object without creating a copy or new version of the "file" containing it. In addition, he can annotate an object that he has only read access to. (I don't know how important this feature is, since it creates many headaches: for example, how to make sure that the owner of the file doesn't delete it, or simply change it so that the annotated object can no longer be uniquely identified.) In addition, a scripting system will allow annotations to be linked together into sequences, so as to create active presentations. Scripts are also stored in a database. It is more compelling to store scripts in a database, because scripts should be able to cross file boundaries, so there would be a problem about where to store them anyway. Storing them piecewise in their respective files is a possibility, but it makes it difficult to find the beginning of a script given its middle, without some additional database or directory. It also has implications about how a script looks, that is, whether a script is a "program" or a sequence of (possibly computed) next fields. [Suppose that you wanted to go from annotations to links, for browsing purposes, rather than all the way to scripts. It would be nice if there were an incremental development path in that direction also. Discuss difference between annotations/scripts and links/scripts: A link has a next field, and may have a type, keyword, name, etc. Scripted links might specify a sequence of link names (if they were guaranteed unique -- note that this gives a layer of indirection, because it's not a sequence of locations per se -- the user could create a new link with a given name). It's interesting that scripted links are almost as much to specify as scripted annotations: in the former case, you must specify the first link to follow, and then choose one of possibly many links (or to stop) at each successive destination -- and you might join two items explicitly in a script that aren't linked in the underlying link system. What if an annotation included one or more links? That feels the same as a script, but without the decision procedure to tell which one in a branching situation. So if you expressed those links as a list of next locations without conditions, the system could go into a browsing mode that would let the user choose among them. But then a browsing system would let the user go breadth first (choose one, go there, go back, choose the next, go there, go back, etc -- perhaps doable with scripts), while a scripting system would tend to enforce depth-first exploration.] Annotation system Each annotation has the following fields. annotation id -- a unique id operations on annotations create in internal form get annotation [aid] either from internal form or go to database if necessary save write to db; turn off edited bit note: db response vs. internal response might imply keeping only edited annotations internally delete play operations on files save copy rename Scripts data structures operations Applications demonstrations want mouse, fine-tuned actions? Drive user interface - window layout, ... Actions: Consider DBTools stuff from Whiteboard. tutorials audio, video, connections to other documents reviewing/critiqueing papers would use voice annotation, text annotation, possibly links to other documents. Note that a reference link to another document does not carry with it the need to come back from that spot. Also, how is this different in Cedar from just inserting a filename!position -- look in PopUpButtons help feature: Help: TYPE ~ LIST OF HelpDocument; HelpDocument: TYPE ~ RECORD [ filename: ROPE, searches: ROPEList ]; organizing own personal information files, Walnut msgs, Gargoyle illustrations, ChipNDale layouts,... pgming environment tool general editing, compiler output, inserting breakpoints, Help facility ScriptedDocsDesign.tioga Polle Zellweger (PTZ) May 4, 1987 6:53:37 pm PDT A document to be opened; if only a short name, will look in current working directory and version maps for highest version. The document is split this many ways, and a word-search is done on each ROPE. Κ%˜™Icode™0—J™J˜™J˜J˜¨J˜Jš œΟoœœœœŒ ˜Χ J˜˜˜)J˜J˜—˜˜J˜—˜J˜8—˜J˜ J˜^—J˜J˜J˜—˜J˜J˜J˜—J˜—˜J˜J˜J˜ J˜—˜ ˜J˜IJ˜0—˜ J˜,—˜šœ]ΟbœΕ˜°KšœΟkœŸœŸœ˜"šœŸœŸœ˜šœ Ÿœ˜K™{—šœ˜K™M—Kšœ˜—J˜——˜#J˜A—˜J˜F———…— a