Jewett, Jim J wrote: >> Will there be only one annotation/bookmark db per text db?
Alexander R. Pruss: > Yes. I don't think the renderer should be scanning several. I agree with this, in principle; the question is what sort of tradeoffs that will require. For example, if I were reading something by Plato, I might want to see translation notes, commentaries from Augustus, class notes from a professor, notes from a modern scholar relevant to my own paper, and my own comments. I also might want to beam the class notes but not the modern scholars's notes. (And if version one is beam all-or-nothing, then the receiver might want to avoid duplicating all the Professor's notes, but also avoid losing his own notes.) > One solution is to make some "merge" code. So if there is only one commentary, then a good utility for merges and partial exports becomes more important. > Well, maybe some work would need to be done about overlapping > annotations--that's something that isn't permissible yet. I understand if that is a pain for version 1, but I think it should change eventually, and the header format should not make it harder. Perhaps order annotations by start-point, and the reader can just keep looking for additional annotations until the next start-point is "too far" ahead? > There will be room in the header for future data. How? The structure I see lets you add *bytes*, but I don't see any reliable way to add *fields*. If I find a longer header length, I know that more space has been reserved, but I don't know what it is for; at best I can treat header length as a version field and hope that no one else extends the header differently. What I would like is a variable-header section, perhaps as pairs of strings for field-name/value. (This does make the header variable length.) That way, if someone else adds a different extension field, I can just ignore it. > The uid is the record number of the annotated record. > The index is the index of annotation within the annotations > for this record. Thus, the first annotation for this record > is 0, etc. So you are assuming that an annotation-db record will contain several different annotations? Is that just for space/synch efficiency? I wouldn't recommend doing that, because it makes it harder to merge/filter annotations. Or are you saying that there can be several annotations of a single text-record, and you order them by index instead of by start-position? If so, why? > I am hoping we don't need a version yet. I think a self-defining variable header would be better, but I think we need at least one of the two. If we add a version number later, then future code will always have to say if header.length == x version=0 else version=header.version >> RecordType (Bookmark vs edit vs commentary)? Or is that assumed >> to be handled by the palm categories? I suspect we will want >> both record type and user-defined categories within (at least >> some) annotation types. > I don't know about "edit". As for bookmark vs. annotation, the > difference is not significant really. I consider annotations where > triggerStart == triggerStop to be bookmarks. I was thinking of record type as indicating the layout, in case some annotations needed different data. edit vs commentary vs bookmark are different reasons for the annotation; it is possible that users will want to turn off some but not all annotation categories sometimes. >> Is there a way to make annotations that span paragraphs, > Not with the current highlighting code. However, eventually, > it could be done by just allowing triggerStop to point beyond > the current paragraph. OK; in that case I would personally prefer that triggerstop include paragraph data, but I would certainly understand if that were part of the variable header. (A bit ugly in the code, but treats the normal case as the default.) >> For paragraphs, you could just add a stop >> paragraph number, but for different indices, you might want a >> "refer to annotation X; it still applies" record. > This can be done if we need it later. Which is why I wondered whether their should be a record-type field, or whether palm categories would be used for that (in which case we should do something like the plucker extended categories for selecting groups of annotations). >> What does the yoffset provide? ... Is it the absolute y-offset, >> making assumptions about the font and screen-width? > It lets one position things precisely, so a bookmark can be > set on a half-line, or more usefully, half-way through a table. > Currently when the assumptions become invalid, the y-offset is > invalidated, and the bookmark just goes to the top of the text > that is bookmarked (e.g., top of table, start of line). Then doesn't trigger-start provide (a superset of) this same information, except that it won't be invalidated (and *might* be slower to render)? Instead of saying "30 pixels down, which I hope will be row three of the table", you can say "419 characters in, which I know is in the second column of the third row of the table". So I guess in summary, I would get rid of headerLength (use palm-category, until we approach a dozen record types/versions) and index, but I would definately keep the dataOffset to leave room for a variable header. I might even special-case a keywords header (like extended palm categories) to always be the first variable header, if it exists. _______________________________________________ plucker-dev mailing list [EMAIL PROTECTED] http://lists.rubberchicken.org/mailman/listinfo/plucker-dev