Annotation: Difference between revisions

From OLPC
Jump to navigation Jump to search
m (+category)
No edit summary
Line 5: Line 5:
See [[content stamping]] for a specific kind of annotation that supports reviewing.
See [[content stamping]] for a specific kind of annotation that supports reviewing.


== Desired Features ==


== Sharing ==
=== Aggregation ===
Sharing annotations back and forth via browser isn't trivial. Sometimes you want to have a notebook with a document and comments, all together. How does that get passed back and forth? Are notes inline or their own objects? Is this affected by the people sharing having previously both owned copies of the uncommented book?

== Aggregation ==
When annotations are separate from the underlying work, one can see a constellation of notes from many people. A few views which we want to readily support:
When annotations are separate from the underlying work, one can see a constellation of notes from many people. A few views which we want to readily support:
* no comments
* no comments
Line 24: Line 22:


[[Category:Content ideas]]
[[Category:Content ideas]]

== API ==

=== Atom ===

(Per discussion with Ian Bicking and Joshua Gay)

A proposal for an Atom representation of an annotation based on the [http://www.atomenabled.org/developers/syndication/atom-format-spec.php Atom syndication standard].

Here's an example from that document:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Example Feed</title>
<link href="http://example.org/"/>
<updated>2003-12-13T18:30:02Z</updated>
<author>
<name>John Doe</name>
</author>
<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
<entry>
<title>Atom-Powered Robots Run Amok</title>
<link href="http://example.org/2003/12/13/atom03"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>Some text.</summary>
</entry>
</feed>

An annotation is a single Atom entry:
<entry
xmlns:ann="http://wiki.laptop.org/go/Annotation">
<title><!-- stupid title has to exist, but we don't have to actually
put in text --></title>
<link href="{document being commented on}" />
<id>urn:uuid:blahblahblah</id> <!-- ID for *this* entry -->
<updated>YYYY-MM-DDTHH:MM:DD</updated>
<source>{uri}</source>
<content type="html">
Delete this term
</content>
<category term="copyedit" scheme="http://laptop.org" />
<category term="{tag}" scheme="?" />
<ann:selected-text>Some text that was highlighted</ann:selected-text>
<ann:pointer>/html[1]/body[1]/div[2]</ann:pointer> <!-- page-wide comments and annotations would not have a pointer -->
<author>
<uri>{open ID URI}</uri>
</author>
</entry>

Entries can be posted with the Atom Publishing Protocol [http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-14.html another IETF standard].

This is based on a APP Collection. This is some base URI, e.g.,:

http://localhost/APP/

You POST to this URI with this entry as the content body. The server will respond with a Location header that indicates where the entry has been placed. This value will be put into the <code>&lt;source&gt;</code> tag, indicating where the entry is now stored. Later updates to the comment are done by PUTting to this URI, with the new entry. Removing the comment is done by DELETE'ing the URI.

When you do <code>GET /APP/</code> you will get an Atom feed. This is basically a set of entries enclosed in a <code>&lt;feed&gt;</code> element.

When you load a page, you would load any comment feeds in which you have indicated interest. This would happen asynchronously -- locally-hosted or cached comments will come up quickly, but potentially other comments would come up more slowly. This also involves fetching data from other domains, which is currently barred in Javascript with XMLHttpRequest; we'll have to create an exception to the permissions.

Revision as of 15:52, 5 May 2007

We want to support annotation of any document, in a generalized way that can be supported by a unified aggregation and sharing system (where annotations/comments are similar to other objects in the object store). Media that should support annotation include documents and images; perhaps also any webpage or item viewed through a browser. In the extreme one can imagine adding notes to any moment in time using a laptop; associated as well as possible with a specific item with its own identifier, or a specific activity, or at least a combination of timestamp and screenshot and context.

We should support elegant libraries for displaying aggregated notes; levels of publicity (and perhaps ways to change this after the fact for clusters of notes) and ways to highlight annotations and reviews as they take place.

See content stamping for a specific kind of annotation that supports reviewing.

Desired Features

Aggregation

When annotations are separate from the underlying work, one can see a constellation of notes from many people. A few views which we want to readily support:

  • no comments
  • my own comments
  • comments from a group (myself/class/teachers)
  • all comments
  • new comments

Types of annotation to support:

  • point-and-click annotation associated with a spot on an image or page
  • selection annotation associated with a string in a document or region in an image
  • block annotation associated with a paragraph or block in a document or region in an image
  • document-level annotation such as tags or reviews

API

Atom

(Per discussion with Ian Bicking and Joshua Gay)

A proposal for an Atom representation of an annotation based on the Atom syndication standard.

Here's an example from that document:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  
  <title>Example Feed</title> 
  <link href="http://example.org/"/>
  <updated>2003-12-13T18:30:02Z</updated>
  <author> 
    <name>John Doe</name>
  </author> 
  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
  
  <entry>
    <title>Atom-Powered Robots Run Amok</title>
    <link href="http://example.org/2003/12/13/atom03"/>
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
    <updated>2003-12-13T18:30:02Z</updated>
    <summary>Some text.</summary>
  </entry>
  
</feed>

An annotation is a single Atom entry:

<entry
  xmlns:ann="http://wiki.laptop.org/go/Annotation">
  <title></title>
  <link href="{document being commented on}" />
  <id>urn:uuid:blahblahblah</id> 
  <updated>YYYY-MM-DDTHH:MM:DD</updated>
  <source>{uri}</source>
  <content type="html">
    Delete this term
  </content>
  <category term="copyedit" scheme="http://laptop.org" />
  <category term="{tag}" scheme="?" />
  <ann:selected-text>Some text that was highlighted</ann:selected-text>
  <ann:pointer>/html[1]/body[1]/div[2]</ann:pointer> 
  <author>
    <uri>{open ID URI}</uri>
  </author>
</entry>

Entries can be posted with the Atom Publishing Protocol another IETF standard.

This is based on a APP Collection. This is some base URI, e.g.,:

 http://localhost/APP/

You POST to this URI with this entry as the content body. The server will respond with a Location header that indicates where the entry has been placed. This value will be put into the <source> tag, indicating where the entry is now stored. Later updates to the comment are done by PUTting to this URI, with the new entry. Removing the comment is done by DELETE'ing the URI.

When you do GET /APP/ you will get an Atom feed. This is basically a set of entries enclosed in a <feed> element.

When you load a page, you would load any comment feeds in which you have indicated interest. This would happen asynchronously -- locally-hosted or cached comments will come up quickly, but potentially other comments would come up more slowly. This also involves fetching data from other domains, which is currently barred in Javascript with XMLHttpRequest; we'll have to create an exception to the permissions.