IP Library Granted Patent US 8,015,482
Granted Patent B2
US 8,015,482 · App. 11/227,803 · Granted Sep 6, 2011

Dynamic anchoring of annotations to editable content

Assignee: Microsoft Corporation
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,015,482
App. No.
11/227,803
Granted
Sep 6, 2011
Kind
B2
Abstract

Described is the annotating of computer document content, particularly editable content, by saving annotations in a separate annotation store, and mapping the annotations back to the content. By mapping, no data are added to the original content at runtime, and only minimal data need be added to the content when persisted. An annotation is anchored to a piece of runtime content, such as upon creation of the annotation, by maintaining annotation data as well as start and end pointers mapped to the annotated piece. Upon saving the content, information (e.g., an anchor marker including an identifier) is persisted with the piece of content to allow the annotation to be re-anchored to the piece upon subsequent reload. For example, when loading content from persistent storage that includes an annotation identifier, the annotation identifier is processed to locate a start and end of the portion and an annotation in the annotation store.

Claims (32)

1. A computer-implemented method, comprising:

providing an application programming interface (API) for managing annotations within content, the API comprising a DynamicSelectionProcessor.GenerateLocatorPart which converts a content selection to an annotation framework locator part, a DynamicSelectionProcessor.ResolveLocatorPart which converts the annotation framework locator part to a corresponding content selection;

loading content from persistent storage to create a runtime content, the content including a portion thereof that is associated with an annotation identifier;

processing the annotation identifier and determining a start of the portion and an end of the portion;

upon loading the content, inserting one or more anchor markers into the runtime content, wherein each anchor marker is a simple class, AnchorMarker, which has properties for setting and getting an AnchorMarkerID, which is an identifier corresponding to the annotation framework locator part, and an AnchorMarkerTagType, the AnchorMarkerID and AnchorMarkerTagType properties being kept in a corresponding DependencyProperties of the each anchor marker to enable the properties to be serialized and deserialized;

upon loading the content, each of the anchor markers registering itself with a DynamicAnchorManager by overriding an OnParentChanged method;

converting at least one of the one or more anchor markers into content locators;

maintaining anchor information in a dynamic anchor table, the anchor information corresponding to the portion within the runtime content;

loading annotation information from a persistent store which is separate from the content, the annotation information comprising an annotation corresponding to the annotation identifier; and

associating the annotation with the portion using the anchor information within the dynamic anchor table, the annotation corresponding to the start and end of the portion.

2. The method of claim 1 wherein processing the annotation identifier comprises using the annotation identifier to locate in an annotation store a set of annotation information that corresponds to the annotation.

3. The method of claim 1 further comprising, maintaining data for the start and the end of the portion in a dynamic anchor table.

4. The method of claim 2 wherein maintaining the data for the start and the end of the portion comprises dynamically adjusting the data as the content is edited.

5. The method of claim 1 wherein location data corresponding the start or end of the portion, or both, changes after loading the content, and further comprising, upon saving the content, persisting the location data as changed, and persisting the annotation identifier in association with the piece of content.

6. A computer program product comprising at least one computer-readable storage medium having encoded thereon computer-executable instructions, which when executed perform a method comprising:

providing an application programming interface (API) for managing annotations within content, the API comprising a DynamicSelectionProcessor.GenerateLocatorPart which converts a content selection to an annotation framework locator part, and a DynamicSelectionProcessor.ResolveLocatorPart which converts the annotation framework locator part to a corresponding content selection;

loading content from a persistent storage to create a runtime content;

upon loading the content, inserting one or more anchor markers into the runtime content, wherein each anchor marker is a simple class, AnchorMarker, which has properties for setting and getting an AnchorMarkerID, which is an identifier corresponding to the annotation framework locator part, and an AnchorMarkerTagType, the AnchorMarkerID and AnchorMarkerTagType properties being kept in a corresponding DependencyProperties of the each anchor marker to enable the properties to be serialized and deserialized;

upon loading the content, each of the anchor markers registering itself with a DynamicAnchorManager by overriding an OnParentChanged method;

converting at least one of the one or more anchor markers into content locators;

anchoring an annotation to a piece of runtime content without altering the runtime content from the perspective of a program that has loaded the content, the annotation comprising a locator part identifier and a selection endpoint which provides a link between the annotation and the piece of runtime content;

maintaining a runtime anchor table to manage a relationship between the annotation and the runtime content; and

upon saving the content, persisting annotation information in an annotation store, the annotation store being separate from the content to which the annotation is anchored, the annotation information comprising data associated with the annotation and the piece of content, the annotation information allowing the annotation to be re-anchored to the piece of content upon the content being subsequently reloaded into a subsequent instance of runtime content.

7. The computer program product of claim 6 wherein anchoring the annotation to the piece of runtime content comprises associating start and end pointers that indicate the piece relative to at least one other piece of the content.

8. The computer program product of claim 7 further comprising, dynamically updating at least one of the start and end pointers as the content is edited.

9. The computer program product of claim 7 wherein associating the start and end pointers with the piece comprises accessing an annotation store based on an identifier corresponding to the piece.

10. The computer program product of claim 8 wherein the identifier is maintained with a previously persisted instance of the content, and further comprising, resolving the identifier into the start and end pointers.

11. The computer program product of claim 8 wherein the identifier is generated upon creation of the annotation, and wherein anchoring the annotation to a piece of runtime content comprises maintaining the start and end pointers in association with the identifier.

12. The computer program product of claim 6 wherein persisting the information in association with the piece of content comprises writing the information to a store that is separate from the content.

13. The computer program product of claim 6 wherein persisting the information in association with the piece of content comprises adding pointer data to the content that includes an identifier corresponding to the annotation.

14. The computer program product of claim 13 wherein adding the pointer data comprises surrounding the piece of content with a XAML start tag including the identifier and a XAML end tag including the identifier.

15. The computer program product of claim 6 further comprising, maintaining the annotation as annotation information in an annotation store.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2014
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 034543/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 10, 2005
From: SIMOVA, SVETLANA IVANOVA; RUIZ, RAFAEL ROBERTO
To: MICROSOFT CORPORATION
Reel/Frame 016633/0230 →
Continuity (1)
Related Publication 20070061704A1 · Mar 15, 2007