US20020065848A1 - Simultaneous multi-user document editing system - Google Patents
Simultaneous multi-user document editing system Download PDFInfo
- Publication number
- US20020065848A1 US20020065848A1 US09/933,012 US93301201A US2002065848A1 US 20020065848 A1 US20020065848 A1 US 20020065848A1 US 93301201 A US93301201 A US 93301201A US 2002065848 A1 US2002065848 A1 US 2002065848A1
- Authority
- US
- United States
- Prior art keywords
- container
- document
- user
- workspace
- containers
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6209—Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2147—Locking files
Definitions
- This invention relates to a system and methods for storing and simultaneous multi-user editing of documents, including text documents, presentation documents, graphic image documents, audio/visual clips and other types of documents.
- a common approach to collaboration is to circulate documents, often as email attachments, among members of a team.
- all team members agree to let one member (“ball carrier”) have exclusive control of a document until he or she finishes editing it and emails it to another team member.
- ball carrier There can be only one ball carrier at a time, and only the ball carrier may edit the document. If other workgroup members edit separate copies of the document while the ball carrier has control of it, the multiple versions of the document must later be merged and conflicting co-edited sections resolved.
- Document type incompatibilities may arise when circulating a document in this manner. For example, a text document may become unreadable if different team members edit it using different word processors or even using different versions of the same word processor. Additionally, technical problems may arise with the transmission of email attachments. Some email servers arbitrarily restrict the size of attachments. Those that exceed a certain threshold size are not accepted. A large document, such as a large slide presentation document, may not be circulable to all workgroup members.
- Microsoft NetMeetingTM provides application sharing.
- a user may share an application running on his or her machine with others.
- the various session participants take turns controlling the application. While one participant has control of the application, the others can watch his or her activity, such as editing or scrolling through a document, on their screens.
- document circulation only one user may edit a document at any given time.
- Lotus NotesTM another widely used groupware system, uses a special database to store shared information. Replicas of the database are distributed to several network servers or client machines. A workgroup member with appropriate access privileges may make modifications to information stored in his or her local copy of a replicated database. All active replicas are periodically reconciled. However, if conflicts arise as replicas are compared and merged, Notes is limited in its ability to automatically resolve the conflicts.
- the system is preferably platform independent to allow users with different computing platform to utilize it.
- the present invention provides a system and methods for simultaneous editing of a document by two or more distinct users.
- the system will typically include one or more workspace servers and a number of client computers. Users access the system by using client software (or “clients”) which execute on the client computers.
- client software or “clients”
- the system includes a file system in which a number of workspaces are stored.
- Each workspace contains a container tree data structure and a membership list.
- the container tree data structure has a root container at its head and includes a document sub-tree for each document in the workspace.
- Each document sub-tree has a parent container at its head and each parent container is a child container of the root container.
- the root container is used to store information about the entire workspace, including the name of the workspace, a description of the workspace, pointers to each parent container, etc.
- each parent container is used to store information relating to its associated document, such as the title of the document.
- Each document sub-tree includes one or more primary data containers, which are children of the parent container of the document sub-tree.
- the data of a document i.e. the text of a text document
- Each container in the container tree may be independently locked by a user of the system.
- a workspace server receives the locked and new containers, and incorporates them into the master copy of the container tree.
- a user may attempt to modify unlocked containers using a Blind Post operation.
- the workspace server updates the blindly posted container, unless the blindly posted container is out-of-date or locked by another user.
- Each of the users may simultaneously edit his or her respective locked sections of the document. In this way, multiple users may simultaneously lock and edit different sections of the same document. Locking, editing and posting operations are done by each user using document editors built into the client software.
- the document editors allow a user to simply view a document by downloading sections of it and displaying them on a screen connected to a client computer.
- the workspace server After updating the master copy of the container tree in response to a Post request, the workspace server broadcasts the updated containers to all other users (and possibly also to the user that originated the Post request) in an Update message.
- Each client modifies the user's local copy of the container tree, at least to the extent necessary to update any section of a document that is currently being displayed to a user.
- Update messages may be Chubby, in which case all information required to fully update a container is transmitted to a client, or they may be Skinny, in which case the client is only advised that a container has changed, but is not fully advised as to the change.
- the client may mark the container as invalid and subsequently obtain an up-to-date copy of it from the workspace server.
- Update messages may be broadcasted to advise clients when containers are locked and unlocked.
- a client may be configured to indicate whether a container is locked by using an indicator on the screen of the client computer.
- Update messages allow each user to see the changes being made to the workspace soon after they are posted to the workspace server.
- the system may also include a master server which regulates the registration of users, allows users to log into the system and other tasks. Access to each workspace may be restricted to members of the workspace, each of whom must be or become a user of the system prior to connecting to the workspace.
- a workspace is used to aggregate related documents. For example, all documents in a workspace may relate to a specific project, company or patient. The membership in the workspace may be limited to people who have an interest in the documents. Alternatively, a workspace may be used to aggregate any group of documents, which may not have any relationship between them.
- Members of a workspace may have different access privileges. For example, members with owner privileges may be allowed to perform any action in the workspace, including inviting new members to join the workspace. Members with worker privileges may be permitted only to edit documents stored within the workspace. Members with only viewer privileges may be permitted to view documents but may not be permitted to edit them.
- each document into sections affects the granularity with which different users may edit adjacent sections of a document.
- text documents are broken into paragraph sections, although this is not necessary.
- sentence or character sections may be used to provide finer granularity.
- the documents stored in a workspace may be of many different types.
- container classes are defined to store documents of different types.
- article classes are defined to store document sections of different data types.
- Each container contains an article. Actual section data is stored in the articles.
- the structural arrangement of the containers in the container tree corresponds to the structural arrangement of the sections in a document.
- the selection of the article within each container corresponds to the data type of the section stored in the article.
- data sections which have a natural “next” and “previous” relationship between them, such as paragraphs in a text document are stored in a series of containers connected as a linked list.
- data sections within a document which do not have such a natural relationship are stored as independent children of a common parent container.
- text and shape elements on a slide presentation are stored in separate containers which are not linked to one another.
- Documents may have many different types of data within them.
- a primary data type is selected for each document and the primary container structure corresponds to the primary data type.
- Data of other types may be embedded in the document and are stored using a container structure that corresponds to the data type and structure of the embedded data.
- the articles used to store the data sections of the embedded data will depend on the data type of those sections.
- a particular embodiment of the present invention may be configured to support documents having various types of data.
- documents of an unsupported data type may be stored within the container tree as generic documents.
- a parent container is created to store information about the generic document.
- the parent container has a single child container that includes a data buffer article.
- the generic document is stored within the data buffer article.
- a user may lock the child container and then download and edit the document using an editor not provided with the embodiment.
- the edited document may then be uploaded and stored within the data buffer and the lock may be released. This allows users to store and access generic documents as part of the embodiment.
- a generic document may be divided into separate parts, each of which may be stored in a separate child container of the parent article, and each of which may be independently locked for editing by different users.
- FIG. 1 is block diagram of an embodiment of a simultaneous multi-user document editing system according to the present invention
- FIG. 2 illustrates a text document used to illustrate the structure and operation of the embodiment of FIG. 1;
- FIG. 3 illustrates a presentation document used to illustrate the structure and operation of the embodiment of FIG. 1;
- FIGS. 4, 5 and 6 illustrate a workspace of the embodiment of FIG. 1;
- FIG. 7 illustrates a hierarchy of container classes of the embodiment of FIG. 1;
- FIG. 8 illustrates a hierarchy of article classes of the embodiment of FIG. 1;
- FIG. 9 illustrates the storage of a generic document in accordance with the present invention.
- FIG. 10 illustrates a header file of the present invention
- FIG. 11 illustrates a document file of the present invention
- FIG. 12 illustrates a login transaction according to the present invention
- FIG. 13 illustrates a Create Workspace transaction according to the present invention
- FIGS. 14 a and 14 b illustrates a method of connecting to a workspace according to the present invention
- FIG. 15 illustrates a method of creating a new document in a workspace according to the present invention
- FIG. 16 illustrates a View/Edit Document transaction according to the present invention
- FIG. 17 illustrates a Post transaction according to the present invention
- FIG. 18 illustrates a method for processing an Update message according to the present invention
- FIG. 19 illustrates a method for conducting a presentation according to the present invention.
- FIG. 20 illustrates a client of FIG. 1.
- FIG. 1 illustrates one exemplary embodiment of a collaborative document editing system 100 according to the present invention.
- System 100 includes a file system 104 , a user database 106 , a workspace database 108 , one or more master servers 110 a , 110 b , . . . , one or more workspace servers 112 a , 112 b , . . . , a communication network 114 and one or more clients 116 a , 116 b , . . . .
- Master servers 110 and workspace servers 112 are software processes (or tasks) that may operate on a single computer or may be distributed among various computers. For example, one master server 110 a and one workspace server 112 a may operate on a first server computer 118 a , while another workspace server 112 b operates on a second server computer 118 b . Master servers 110 and workspace servers 112 are coupled to communication network 114 . System 100 may include any number of master servers 110 and workspace servers 112 . Each master server 110 and workspace server 112 will operate on a server computer 118 . More than one master server 110 and workspace server 112 may operate on a particular server computer 118 .
- Clients 116 are computer processes that will typically operate on separate client computers 119 , although one or more clients may operate on a single computer 119 . Clients 116 may also operate on one or more server computers 118 , although this is not illustrated in FIG. 1. Each client 116 is coupled to communication network 114 , allowing the client 116 to communicate with any master server 110 and any workspace server 112 .
- File system 104 is used to store one or more workspaces 122 a , 122 b , . . . 122 n .
- Each workspace 122 includes a data structure used to store one or more documents and a data structure used to store information about one or more members of the workspace.
- the term “document” refers generally to any complete data object such as: a text document; an image; a stream of video or sound data; a movie incorporating both video and sound; a “white board” document incorporating various shapes and/or text; a presentation that may include a plurality of slides, each of which incorporates various shapes, backgrounds and text. Many other types of documents may be stored within a workspace.
- Workspace database 108 is used to store information about each workspace 122 stored in file system 104 .
- Master server 110 a and workspace server 112 a communicate with file system 104 and workspace database 108 using an internal communication link 120 within server computer 118 a .
- File system 104 and workspace database 108 are also coupled to network 114 allowing master servers 110 and workspace servers 112 located on other server computers 118 , such as workspace server 112 b located on server computer 118 b , to communicate with file system 104 .
- User database 106 is used to store information about users 102 , who are typically people that use clients 116 to access data stored in workspaces 122 .
- the structure of user database 106 is described further below.
- File system 104 , user database 106 and workspace server 108 may be stored on a data storage device 121 , which may be a magnetic or optical data storage device or any other type of data storage device or system. In the present exemplary embodiment, this data storage device is located within server computer 118 a . In another embodiment of a system according to the present invention, the data storage device may be located in any server computer and in fact file system 104 and user database 106 may be located in separated data storage devices on different server computers 118 a . Server computers 118 other than the specific server computer 118 on which the data storage device is located may access it as an external device through network 114 .
- FIG. 2 illustrates an exemplary text document 190 .
- Text document 190 has five paragraphs 192 a , 192 b , . . . , 192 e and includes an embedded image and an embedded table.
- Paragraphs 192 a , 192 c , and 192 e contain only text.
- Paragraph 192 b comprises text and an embedded graphic image 194 .
- Paragraph 192 d comprises no text and an embedded table 196 .
- Graphic image 194 is a rectangular image with a size of 100 ⁇ 150 pixels.
- Table 196 has a 2 ⁇ 3 array of cells which contain text (including numerical text) and other data, including formulae used to calculate the value of cells based on the content of other cells.
- FIG. 3 illustrates an exemplary presentation document 200 .
- a presentation document refers to a collection of slides or screens which may be displayed sequentially or in any order. Some or all of the slides may share some common elements, such as a background image or shading and default shapes. Each slide will typically also have some unique content, such as text, images, video, sounds, etc.
- Presentation document 200 has three slides 202 , 204 and 206 . Slides 202 and 204 share two common components: a corporate logo 208 and vertical line 210 . Slide 202 has some text 212 , consisting of paragraphs 214 a , 214 b and 214 c. Slide 204 has an arrow shape 216 and an audio/video clip 218 . Slide 206 has a graphic image 220 .
- the present invention utilizes a concept of breaking down documents into smaller, independently editable sections.
- a text document may be broken down into paragraphs.
- an image document may be broken down into blocks of pixels
- a table document may be broken down into cells
- a presentation document may be broken down into slides, which may be broken down further into constituent components such as text, image, video, sound, table, shape and other elements.
- it may treated as having as single editable section.
- a text document that includes a single paragraph may have only one editable section.
- a text document in the present embodiment is broken down into independently editable paragraph sections. If, in an alternative embodiment, increased granularity is desired, a text document could be broken down into independently editable sentence, word or even character sections. The use of smaller sections may decrease the efficiency of system 100 , depending on the amount of data which must be communicated between a client 116 and a workspace server 112 to allow a user to view and edit each section (in methods 1000 - 1700 , FIGS. 13 to 19 ).
- a larger or smaller packet of data may have to be communicated for each section. If the section size is selected to be very small (i.e. a character in a text document), then the network communication overhead may become a bottleneck, preventing efficient use of the system. In system 100 , paragraph sized sections have been selected as an efficient compromise for a text document.
- Each section of a document may be independently locked by a user 102 . Different users may lock adjacent (or separated) sections, and independently edit them.
- FIGS. 4, 5 and 6 illustrate a specific workspace 122 a , which is exemplary of the structure of all workspaces 122 according to the present invention.
- Workspace 122 a includes a container tree 124 and a member list 143 .
- Container tree 124 is a tree data structure with a root node 126 at its head.
- Each node in workspace 122 a consists of a container 140 , which is a data structure.
- Containers 140 at different nodes may have different structures, depending on the relationship between the container 140 and its parent, siblings, and children.
- Each container 140 stores an article 142 , which in turn stores independently editable data.
- Articles 142 stored in different containers 140 may also have different structures, depending on their specific contents. (In FIGS. 4, 5 and 6 , many containers 140 and articles 142 are not identified with these reference numerals to avoid cluttering the Figures.)
- the root node 126 of the container tree 124 comprises a root container 400 that stores a root article 402 .
- the root node 126 of container tree 124 has two child nodes, which comprise containers 404 and 406 . These “first-level” children of root container 400 are the “parent containers” 410 of document sub-trees 412 and 414 .
- Each document sub-tree stores all of the information for a particular document. In the present example, document sub-tree 412 stores text document 190 and document sub-tree 414 stores presentation document 200 .
- Member list 143 includes a linked list of member records 144 .
- Each member record 144 relates to a person who has been given access privileges to workspace 122 .
- the person may be a user 102 of system 100 or may have been invited to join the workspace 122 , but has not yet registered as a user of system 100 .
- FIG. 7 illustrates a hierarchy of container data structures.
- each container data structure is defined using object oriented concepts.
- a Container class 300 includes the following fields: Field Usage container_id Record an identifier for the container 140. This identifier is unique with respect to all containers in the work- space 122 and may be unique with respect to all workspaces 122.
- container_parent A pointer to the parent container of the container 140.
- the root container 400 of a container tree 124 does not have a parent container, and this field may be Null.
- container_lock_handle Used to lock the container 140 and to identify a user 102, if any, that has locked the container 140.
- container_excluded_handle_list Used to identify users 102 that are not permitted to access the container 140 or the article 142 contained within it.
- container_article A pointer to the article 142 contained within the container.
- the article 142 will be a separate data structure that is associated with the container through this pointer. Alternatively, this field may be de- fined as a data buffer of any data type or structure.
- container_article_length Used to record the length of the arti- cle 142 associated with the container 140. This will typically be measured in bytes or another measure associ- ated with the article.
- container_valid Used by a client 116 to identify whether the container 140 and/or arti- cle 142 associated with the container 140 has been modified by a different client 116, requiring the first client to download an updated version of the container 140 before displaying its contents.
- container_time_stamp Used to record the last time that the container 140 was updated in file system 104.
- a number of container classes inherit the structure of Container class 300 and add additional fields to it.
- a List_Container class 302 maintains a list of child containers and is used to store documents (or parts of documents) that may be broken down into sections that have a natural “next” and “previous” relationship between them.
- List_Container class 302 inherits the structure of Container class 300 and adds the following data fields: Field Usage list_head_pointer A pointer to a container 140 at the head of the list of child containers 140.
- list_tail_pointer A pointer to the container 140 at the tail of the list of child containers 140.
- An Array_Container class 304 maintains an array of child containers and is used to store documents (or parts of documents) that may be broken down into sections that may or may not have an ordered relationship between them.
- the array of child containers may have any number of dimensions and each dimension may have any size.
- Array_Container class 304 inherits the structure of Container class 300 and adds the following fields: Field Usage array_dimensions Record the number of dimensions and the size of each dimension in the array of pointers to child containers.
- child_array Record an array of pointers to child containers 140. In the present exemplary embodiment of the present invention, this array is stored in a growable array, which may be expanded in any dimension, or by add- ing additional dimensions.
- a reference to each child container may be stored in a fixed length array of pointers or it may be a linked list of pointers.
- a Childless_Container class 306 inherits the structure of Container class 300 .
- a Childless_Container class 306 does not have any child containers.
- a group of container classes which are collectively referred to as sibling containers, are used to form the list of child containers of a List_Container class 302 .
- a Sibling class 310 is defined to store information common to child containers of a List_Container class 302 and has the following fields: Field Usage list_previous_pointer Points to the previous sibling container in the doubly linked list. In the head sibling container in the doubly linked list this field will typically be Null. list_next_pointer Points to the next sibling container in the doubly linked list In the tail sibling container in the doubly linked list this field will typically be Null.
- a document that is desirably stored using sibling containers may include a portion that is best represented using one or more List_Containers 302 that also have a sibling relationship between them.
- a sibling relationship is a natural “next” and “previous” relationship between sections of a document. For example, successive paragraphs in a text document have a sibling relationship based on their order within the text document.
- a sibling container Sibling_List_Container class 312 is defined which may be used as part of a list of sibling containers, and which may also have its own list of child sibling containers.
- the Sibling List_Container class 312 inherits the structure of both the Sibling class 310 and List_Container class 302 .
- a document that is desirably stored using sibling containers may also include a portion that is best represented using one or more Array_Containers 304 .
- a sibling container Sibling_Array_Container class 314 is defined for this purpose that inherits the structure of both Sibling class 310 and Array_Container class 304 .
- a Sibling_Childless_Container class 316 is defined that inherits the structure of both Sibling class 310 and Childless_Container class 306 .
- the Sibling_Childless_Container class 316 may be used as part of a list of sibling containers but has no child containers.
- Container classes List_Container 302 and all containers that inherit the structure of Sibling class 310 may be used to store documents (or parts of documents) that can be divided into portions with a linear relationship between them. These sibling container classes have been described as part of a doubly linked list. The present invention is not limited to the use of a doubly linked list and any other data structure for maintaining a list of elements may be used. For example, the relationship between sibling containers may be represented as a singly linked list or an array of elements. The particular structure of containers 140 used to construct a particular workspace 122 will depend on the type and structure of the documents to be stored in the workspace 122 .
- FIG. 8 illustrates a hierarchy of article data structures.
- Articles 142 are used to store sections of documents.
- the structure of each article 142 is defined using object oriented principles.
- An Article class 340 includes the following fields which enables all article types that inherit its structure to be embedded in other elements: Field Usage article_window Used to record the position and dimensions, relative to another element, of the window in which the article is displayed, if the article describes data that is embed- ded in a document, in contrast to data which is part of the main data of a document; If the article is not embedded within a document of a different type, this field will typically be Null.
- a Text_Article class 342 is used to record information about text data.
- Text_Article class 342 inherits the structure of Article class 340 and adds the following field:
- Field Usage text_attributes Record default text attributes for text data such as type- face, font size and color, style (such as bold, italic and underline), alignment, line spacing and bullet style (if any).
- Image_Article class 344 is used to record information about graphic image data.
- Image Article class 344 inherits the structure of Article class 340 and adds the following fields: Field Usage image_attributes Record image information such as the width and height in pixels, color model, number of bits per pixel, hori- zontal and vertical resolution, compression informa- tion.
- image_thumbnail Record a thumbnail version (i.e. a smaller version) of the entire graphic image.
- a Table_Article class 346 is used to record information about table type data.
- Table_Article class 346 inherits the structure of Article class 340 and adds the following field: Field Usage table_attributes Record table information such as the number of rows and columns and the preferred cell sizes.
- An AV_Clip_Article class 348 is used to record information about audio/video clips.
- An audio/video clip may be composed of only audio data, only video data or a combination of audio and video data.
- AV_Clip_Article class 348 inherits the structure of Article class 340 and adds the following fields: Field Usage AV_format Record the format in which the audio/video data is stored, including compression/decompression method, sample depth and rate.
- AV_length Record the length of the audio/video clip in seconds (or alternatively using another measure, such as the number of frames in the audio/video clip).
- each document sub-tree is headed by a parent container 410 (i.e. containers 404 and 406 ).
- the structure of each sub-tree will depend on the type and contents of the document stored in the sub-tree.
- a single document may contain many types of data.
- text document 190 includes an image 194 and a table 196 (FIG. 2).
- the primary data type of text document 190 is text, and it includes “image” and “table” type data within it.
- Text_Article class 342 , Image_Article class 344 , Table_Article class 346 and AV_Clip Article class 348 may be used to include, respectively, text, image, table, and audio/visual type data within a document sub-tree for a document that has been identified has having a different primary data type.
- Another embodiment of the present invention may incorporate additional article classes to store other types of data.
- a number of article classes are defined to store summary information relating to a workspace or an entire document (depending on the primary data type of the document).
- a Summary class 350 is defined to store information common to such article classes and has the following fields: Field Usage summary_title Record the title or caption of the workspace 122 or document.
- summary_description Record a description of the workspace 122 or document.
- summary_keywords Record searchable keywords pertaining to the workspace 122 or document.
- summary_log Record log entries made by workspace members over the lifetime of the workspace 122 or document.
- summary_history Record the date, time and user handle for impor- tant events in the lifetime of the workspace 122 or document, including its creation. In another embodiment, other information may be stored in this information.
- a Workspace_Article class 354 is defined that inherits the structure of both Article class 340 and Summary class 350 and adds the following fields: Field Usage document_count Record the number of documents in the workspace 122. This field is optional and in another embodiment, it may be omitted. The number of documents in a workspace may be determined by counting the number of child containers 140 of root container 400 (FIG. 4) of the workspace 122.
- Text_Document_Article class 356 is defined that inherits the structure of both Text_Article class 342 and Summary class 350 and adds the following fields: Field Usage text_document_format Record formatting information such as page size and orientation, margins. text_document_statistics Record statistics such as paragraph and word count.
- an Image_Document_Article class 358 is defined that inherits the structure of both Image_Article class 344 and Summary class 350 .
- Table_Document_Article class 360 is defined that inherits the structure of both Table_Article class 346 and Summary class 350 .
- an AV_Clip Document_Article class 362 is defined that inherits the structure of both AV_Clip Article class 348 and Summary class 350 .
- Additional document article classes may be defined in accordance with the present invention for data types that will typically not be found within a document that is of another data type.
- a Presentation_Document_Article class 364 is defined in the instant embodiment to record information about entire presentation documents.
- Presentation_Document_Article class 364 inherits the structure of both Article class 340 and Summary class 350 and adds the following fields: Field Usage slide_order_table Record the display order of slides in the presen- tation using the slide_identifier of each slide in a container of class Slide_Article 366 (described below).
- default_background Record default background color or gradient to be displayed on newly created slides.
- default_title_properties Record default position and font attributes of text to be displayed on newly created title slides.
- default_text_properties Record default position and font attributes of text to be displayed on newly created text slides.
- default_shapes Record a collection of graphical elements to be displayed by default on newly created slides.
- current_slide Record the slide currently being displayed in an active presentation (i.e. it is currently being presented); when the presentation is not active, this field will be ⁇ 1. The operation of an active presentation is described below in relation to method 1700 on FIG. 19.
- the present exemplary embodiment supports the storage of generic documents which are of a data type that is not otherwise supported by the embodiment.
- a Generic_Document_Article class 352 is defined to store information about generic documents. Generic_Document_Article class 352 inherits the structure of Article class 340 and Summary class 350 .
- a number of article classes are defined for data types that, in the present embodiment of the invention, appear only within documents that have a different primary data type.
- a Slide_Article class 366 is defined to store the information relating to slides in a presentation document.
- Slide_Article class 366 inherits the structure of Article class 340 and adds the following fields:
- Field Usage slide_identifier Record the unique identifier of the slide within the presentation.
- this field may be set in a different manner.
- the container_id is used for this field, the field may be omitted and the container_id field of the container may be used in an equivalent manner.
- slide_type Record the type of slide (such as title, text slide or blank) to guide the default display and attributes of slide-specific elements.
- slide_background Record the background color or gradient if it differs from the default stored in the default_background field of an associated Presentation_Document_Article class 364.
- default_shapes_flag Record a flag indicating whether or not the default shapes stored in the default_shapes field of an associated Presentation_Document_Article class 364 are to be displayed.
- advancement_effect Record the type of graphical effect to be used as the slide is advanced during a presentation.
- advancement_interval Record the time interval for automatic slide advancement.
- a Shape_Article class 368 is defined that inherits the structure of Article class 340 and adds the following fields: Field Usage shape_type Record the type of shape (line, rectangle, ellipse, arrow etc). shape_attributes Record shape-specific information, such as major and minor semiaxis in the case of an ellipse, required to create an instance of the shape.
- a Paragraph_Article class 370 is used to store character and formatting information for a paragraph of text.
- Paragraph_Article class 370 inherits the structure of Article class 340 and adds the following fields: Field Usage character_data Record an array of character data for the para- graph.
- formatting_data Record differences in the character formatting between the data in the character_data field and the default attributes set out in the text_attributes field of an associated Text_Article 342. In the present embodiment, this is done by recording the type of formatting change and the offset from the beginning of the character_data field at which the change occurs. For example, a formatting attribute that applies to all data in the character_data field begins at offset 0. In an alternative embodiment, this field may be omitted and formatting data may be embedded within the character_data field.
- change_tracking_data Record array offsets, member handles and time stamps of editing changes.
- Pixel_Article class 372 is used to store pixel data for graphic images. Pixel_Article class 372 inherits the structure of Article class 340 and adds the following field: Field Usage pixel_data Record pixel data for a graphic image.
- a Cell_Article class 374 is defined to store data for cells within tables (or spreadsheets).
- Cell_Article class 374 inherits the structure of Article class 340 and adds the following field:
- Field Usage cell_data contains a data value for the cell, which may be alphanumeric or a formula for calculating a value for the cell, which may be based on the value of other cells.
- An AV_Data_Article class 376 is used to store segments of audio/video clips or movies. AV_Data_Article class 376 inherits the structure of Article class 340 and adds the following field: Field Usage av_data Record the audio/video data for the segment.
- a Data_Article class 378 is used to store data associated with generic documents. Data_Article class 378 inherits the structure of Article class 340 .
- the present invention is not limited to the use of objected oriented techniques to define the structure of containers 140 and articles 142 and any mechanism for defining data structures having the same operation and function as those described above may be used.
- independent data structures may be defined for each container and article subclass.
- independent variables may be defined for each field in a data structure, without formally defining the structural relationship of the fields.
- the data of a document may be divided between different types of articles 142 .
- the appearance of a slide in a presentation document may depend on the contents of a Presentation_Document_Article 364 (in particular, the default_background field, default_text_properties field, and default_shapes field), a Slide_Article 366 (in particular, the slide_background field and default_shapes field), and several Shape_Articles 368 .
- the data of a document may alternately be stored within a single article 142 .
- Articles 370 , 372 , 374 and 376 have been described as being used to store independently editable subdivisions of a document.
- an article such as articles 370 , 372 , 374 and 376 , may store all of the editable data within a document.
- a short text document may be stored in a single Paragraph_Article 370 .
- FIGS. 4, 5 and 6 illustrate exemplary workspace 122 a .
- Workspace 122 a is used to store exemplary text document 190 and exemplary presentation document 200 .
- the root node 126 of workspace 122 a comprises root container 400 of class Array_Container 304 (FIG. 7).
- the container_article field of container 400 contains (or includes a pointer that points to) a root article 402 of class Workspace_Article 354 (FIG. 8).
- Container 400 has the following contents: Field Contents container_id 1234 container_parent Null container_lock_handle Null container_excluded_list_handle Null container_article 402 container_article_length 724 bytes container_valid TRUE container_time_stamp June 10, 2001 : 13:36:43 array_dimensions 2 ⁇ 1 child_array [404 406]
- Root container 400 has a unique container_id of 1234 .
- the unique container_id is assigned to each container 140 when the container 140 is created, as is described below.
- the container_parent field of container 400 has a value of Null, since root container 400 is at the root node 126 of container tree 124 and accordingly has no parent container.
- the container_lock_handle of root container 400 also has a value of Null, indicating that container 400 is not locked by any user 102 .
- the container_excluded_handle_list also has a value of Null, indicating that no user 102 is excluded from accessing root container 400 .
- the container_article field of root container 400 points to article 402 , which has a length of 724 bytes (as indicated by the container_article_length field).
- the container_valid field has a value of TRUE, indicating that the contents of the container 400 , and the associated article 402 have not been changed by a client 116 .
- the container_time_stamp field records that the container 400 was last updated in file system 104 on Jun. 10, 2001 at 13:36:43.
- the array_dimensions field indicates that the array of child containers 140 is one dimensional and contains two elements in its sole dimension.
- the child_array field contains a one dimensional array storing pointers to containers 404 and 406 as child containers of container 400 .
- Root article 402 is of class Workspace_Article 354 and has the following contents: Field Contents article_window Null summary_title Exemplary workspace summary_description Exemplary workspace for patent application summary_keywords exemplary, patent summary_log June 7, 2001, 11:06:14 rpw1: I created this work- space to store documents relating to my patent application summary_history June 7, 2001: 11:04:27, rpw1, CREATE document_count 2
- the article_window field of root article 402 is Null, indicating that the root article 402 is not embedded within a document having a data type different from data of the root article 402 .
- Root article 402 identifies the name of workspace 122 as “Exemplary workspace” (in the summary_title field), describes the workspace as “Exemplary workspace for patent application” (in the description field).
- the keywords field of root article 402 indicate that workspace 122 b can be searched for by using the keywords “exemplary” and “patent” using a workspace searching engine built into master server 110 . (The structure and operation of the workspace searching engine is typical and will be understood by skilled persons and are not described in detail.
- workspace searching engine may be activated from any screen of a client 116 , which is described in greater detail below.
- the summary_log field records the first entry in the log.
- the summary_history field records the date and time of the “CREATE” event and the workspace creator's handle.
- the document_count field indicates that there are two documents in the workspace.
- the root container 400 of a container tree 124 has one child container for each document that is stored in the workspace 122 .
- Each of the child containers of the root container is a parent container 410 of a document sub-tree that stores the contents of the associated document.
- root container 400 has two child containers 404 and 406 .
- Containers 404 and 406 are parent containers 410 , respectively, for document sub-tree 412 , in which text document 190 is stored, and for document sub-tree 414 , in which presentation document 200 is stored.
- the article contained within each parent container 410 is referred to as a parent article.
- text documents such as document 190 are broken down into paragraph sections.
- the order of paragraphs in a text document is defined by their order of appearance in the document, and each paragraph may be said to have a “previous” and “next” relationship with its adjacent paragraphs. (The first paragraph has no “previous” paragraph and the last paragraph has no “next’ paragraph.)
- the previous and next ordering of paragraphs is maintained in document sub-tree 412 by storing the paragraph sections in a linked list formed of sibling containers 140 .
- the storage of text document 190 in document sub-tree 412 will now be explained with reference to FIG. 5.
- Parent container 404 is of class List_Container 302 and has the following contents:
- Container 404 (Class List_Container 302 ) Field Contents container_id 2123 container_parent 400 container_lock_handle Null container_excluded_handle_list Null container_article 416 container_article_length 786 bytes container_valid TRUE container_time_stamp June 20, 2001 : 08:54:17 list_head_pointer 420 list_tail_pointer 436
- container_id, container_parent, container_lock_handle, container_excluded_handle_list, container_article_length, container_valid and container_time_stamp fields are analogous to the corresponding fields of root container 400 .
- the container_article field points to article 416 , which is of class Text_Document_Article 356 .
- container 404 has five child containers: containers 420 , 424 , 428 , 432 and 436 , which formed a list.
- the list_head_pointer field of container 404 points to container 420 , the first container in the list and the list tail pointer field of container 404 points to container 436 , the last container in the list.
- Parent article 416 is of class Text_Document_Article 356 , indicating that the document stored in sub-tree 412 is a text document.
- Parent article 416 has the following contents:
- Article 416 (Class Text_Document_Article 356 ) Field Contents article_window Null text_attributes Arial, 12 point, black, left justification, single spacing summary_title Patent Description summary_description Description of Thoughtslinger collaborative editing system summary_keywords collaborative, editing summary_log June 10, 2001, 16:52:33 cs1: Began writing description of system June 15, 2001, 04:23:12 cs1: Finished first draft summary_history June 10, 2001, 16:50:32 cs1: CREATE text_document_format 8.5 ⁇ 11 paper, portrait orientation, top margin: 1 inch; left margin: 1 inch; right margin 0.5 inches; bottom margin: 1.5 inches; page number: (format: “-#-”, position bottom center) text_document_statistics 7234 words; 511 lines; 103 paragraphs
- the text_attributes field indicates the default format for each section of the text document 190 .
- the text_document_format indicates the document format of document 190 .
- the text attributes of text data within document 190 may be changed and any such changes are stored in containers 420 , 424 , 428 , 432 and 436 .
- the text_document_statistics field indicates the number of words, lines and paragraphs contained in the document 190 .
- the summary_title field sets out the title of document 190 .
- the remaining fields of article 416 are analogous to those of article 404 .
- the present exemplary embodiment divides text document 190 into paragraph sections for storage in its document sub-tree 412 .
- Text document 190 contains 5 paragraphs 192 a - 192 e . Accordingly, the text of text document 190 is stored in the 5 child containers of container 404 : 420 , 424 , 428 , 432 , 436 .
- Container 420 which is at the head of the list of child containers 420 , 424 , 15 428 , 432 , 436 of container 404 is of class Sibling_Childless_Container 316 and has the following contents:
- Container 420 (Class Sibling_Childless_Container 316 ) Field Contents container_id 3123 container_parent 404 container_lock_handle Null container_excluded_list_handle Null container_article 422 container_article_length 4323 bytes container_valid TRUE container_time_stamp June 19, 2001 : 17:35:14 list_previous_pointer Null list_next_pointer 424
- the list_previous pointer of container 420 is Null since it is the first container in the list of sibling child containers of parent container 404 .
- the list next pointer of container 420 points to container 424 .
- the container article 420 field points to article 422 , which has a length of 4323 bytes (as indicated by the container_article_length field).
- Article 422 is of class Paragraph Article 370 and has the following contents:
- Article 422 (Class Paragraph Article 370 ) Field Contents article_window Null character_data ⁇ Text of paragraph 192a> formatting_data offset 23: bold+italic on; offset 39: bold+italic off change_tracking_data offsets 17-35: rpw1, delete, 10-7-2001 14:22:16
- the article_window field of article 422 is Null, indicating the data in article 422 is part of the main body of text document 190 .
- the character_data field contains the text of paragraph 192 a . This text is initially presented in accordance with the text formatting set out in the text_attributes field of article 416 .
- the formatting_data field is used to modify the initial text and document formatting.
- the formatting_data indicates that, beginning with the 23 rd character from the beginning of the character_data, the text is to be bolded and italicized. These formatting attributes are to be turned off beginning with the 39 th character in the character_data.
- the change_tracking_data field indicates that text in the range between offsets of 17 and 35 characters from the beginning of the character_data was deleted by a user with the user_handle rpw1 on Jul. 10, 2001 at 14:22:16.
- the use of the formatting_data and change_tracking_data fields to specify formatting changes and to track editing changes in the character_data is optional. Alternatively, such information may be embedded within the character_data itself at the offsets specified in the formatting_data and change_tracking_data fields.
- Container 424 is of class Sibling_Array_Container 314 and has the following contents:
- Container 424 (Class Sibling_Array_Container 314 ) Field Contents container_id 3124 container_parent 404 container_lock_handle Null container_excluded_list_handle Null container_article 426 container_article_length 2326 bytes container_valid TRUE container_time_stamp June 26, 2001 : 14:22:16 list_previous_pointer 420 list_next_pointer 428 array_dimensions 1 ⁇ 1 child_array [440]
- paragraph 192 b is stored in article 426 , which is similar to article 422 .
- the contents of article 426 are set out in Appendix A.
- paragraph 192 b also contains a graphic image 194 .
- the present embodiment stores graphic images using an Array_Container 304 (FIG. 7) having one or more child containers to store the graphic image.
- Graphic image 192 is stored using container 440 and its child containers.
- Container 440 is the only child of container 424 and is of class Array_Container 304 (FIG.
- Container 440 (Class Array_Container 304) Field Contents container_id 4123 container_parent 428 container_lock_handle Null container_excluded_list_handle Null container_article 442 container_article_length 234 bytes container_valid TRUE container_time_stamp June 20, 2001: 08:14:09 array_dimensions 2 ⁇ 2 child_array [ 444 448 452 456 ]
- Container 440 contains an article 442 and the child_array defines a two by two array of pointers to child containers 444 , 448 , 452 , 456 .
- the article_window field of article 442 is used to define the position at which graphic image 194 is displayed relative to paragraph 192 b , in which graphic image 194 is embedded.
- the article_window field indicates that graphic image 194 is to be displayed in a 200 ⁇ 100 pixel window positioned 175 pixels right and 0 pixels down from a selected anchor point in paragraph 192 b .
- the anchor point will be the upper left corner of the paragraph, although any other anchor point may be used.
- the article_window field may also be used to define attributes of the window such as the anchor point, the color and thickness of a border for the window, the spacing between the edge of the window and the graphic image, etc.
- a skilled person will be capable of selecting appropriate attributes for any particular embodiment of the present invention and for any particular graphic image.
- the image_attributes field of the article 442 is used to define attributes of graphic image 194 .
- Graphic image 194 is defined as a 100 ⁇ 150 pixel image using a 24 bit RGB color model with horizontal and vertical resolutions of 300 pixels per inch.
- the image is stored using JPEG compression.
- the image thumbnail field stores the thumbnail image data which may be used as an icon for graphic image 194 or for other purposes.
- graphic image 194 When graphic image 194 is displayed, it may be shrunk or stretched horizontally and vertically to fit its dimensions into the window in which it is displayed.
- graphic image 194 has an actual size of 100 ⁇ 150 pixels and will be displayed in a window of 200 ⁇ 100 pixels. To accomplish this, graphic image 194 will have to be horizontally stretched and vertically compressed.
- Container 440 has four child containers 444 , 448 , 452 , 456 , each containing an article of class Pixel_Article 372 .
- Container 444 and its article 446 have the following contents:
- Container 444 (Class Childless_Container 306 ) Field Contents container_id 5890 container_parent 440 container_lock_handle Null container_excluded_list_handle Null container_article 446 container_article_length 11250 bytes container_valid TRUE container_time_stamp June 20, 2001 : 08:14:09
- Article 446 (Class Pixel_Article 372 ) Field Contents article_window Null pixel_data ⁇ 50 ⁇ 75 pixel image - upper left section of image 194>
- the pixel_data field of article 446 contains a 50 ⁇ 75 pixel image, which corresponds to the upper left section of graphic image 194 .
- the remainder of graphic image 194 is stored in articles 450 , 454 and 458 , the contents of which are set out in Appendix A.
- Graphic image 194 is thus divided into four sections which may be independently edited.
- a graphic image may be divided into layer sections rather (or possibly in addition to) pixel block sections. Each layer section would be stored in a separate container. If the graphic image is divided into layer sections which are then divided into pixel sections, the Image_Article 344 (or Image_Document_Article 358 ) would have a three-dimensional array of child containers, each of would contain a Pixel_Article 372 .
- Paragraph 192 c of the text document 190 is stored in container 428 which includes article 430 , the contents of which are set out in Appendix A.
- the contents of container 428 and article 430 are analogous to the contents of containers 420 and 424 and articles 422 and 426 .
- Paragraph 192 d (FIG. 2) has no text component and includes table 196 .
- Paragraph 192 d is stored in container 432 , container 460 and its child containers 464 , 468 , 472 , 476 , 480 and 484 .
- Paragraph 192 d is divided and stored in a manner similar to the manner in which graphic image 194 is divided and stored in container 424 and its child containers.
- the sub-tree headed by container 432 is set out in Appendix A.
- Article 434 which is part of container 432 , has the following structure:
- Article 434 (Class Paragraph_Article 370 ) Field Contents article_window Null character_data Null (Paragraph 192d contains no text, although text may be added in the future) formatting_data Null change_tracking_data Null
- paragraph 192 d contains no text
- the character_data field of article 434 is Null. If any text is subsequently added to the paragraph, it will be added to the character_data field and the change tracking data field will be updated accordingly if change tracking is enabled.
- Table 196 has a 2 ⁇ 3 cell array, and is naturally divided into six sections, each of which corresponds to one cell.
- Container 432 has a single child container 460 of class Array_Container 304 , which has the following contents: Container 460 (Class Array_Container 304) Field Contents container_id 4124 container_parent 432 container_lock_handle Null container_excluded_list_handle Null container_article 462 container_article_length 234 bytes container_valid TRUE container_time_stamp June 25, 2001: 10:58:51 array_dimensions 2 ⁇ 3 child_array [ 464 468 472 476 480 484 ]
- Container 460 has 6 child containers 464 , 468 , 472 , 476 , 480 , 484 , each of which corresponds to one cell of table 196 .
- the appearance of table 196 within document 190 is defined in article 462 , which has the following contents:
- the article_window field of article 462 indicates that table 196 is to be displayed in a 200 ⁇ 375 pixel window positioned 12 pixels right and 0 pixels down from the anchor point of paragraphs 192 d .
- the table_attributes field indicates that the 200 ⁇ 375 pixel window is to be divided in a 2 column by 3 row array with each cell preferably having dimensions of 100 pixels by 125 pixels.
- Each cell of table 196 is stored in one of the child containers 464 , 468 , 472 , 476 , 480 , 484 of container 460 .
- Container 464 and its article 466 correspond to the cell at the (1,1) position of table 196 and have the following contents:
- Container 464 (Class Childless_Container 306 ) Field Contents container_id 5894 container_parent 460 container_lock_handle Null container_excluded_list_handle Null container_article 466 container_article_length 32 bytes container_valid TRUE container_time_stamp June 25, 2001 : 10:54:16
- Article 466 (Class Cell_Article 374 ) Field Contents article_window Null cell_data ⁇ contents of cell (1, 1) of table 196>
- the cell_data field of article 466 contains the contents of cell (1,1) of table 196 . These contents may be text, numeric, a formula that utilizes the contents of other cells in table 196 , or any other type of data object, including a reference to a data object stored in another location (for example, on the Internet at another location).
- a cell of a table may also include data such as a graphic image, which will be stored in the same manner as graphic image 194 : a container such as container 440 will be used to record the structure and display attributes of the graphic image and one or more child containers, such as containers 444 , 448 , 452 , 456 , will be used to store the graphic image.
- Paragraph 192 e of text document 190 is stored in container 436 and article 438 in a manner analogous to the storage of paragraph 192 a in container 420 and article 422 .
- Container 436 and article 438 are set out in Appendix A. Since paragraph 192 e is the last paragraph of text document 190 , the list_next_pointer of container 436 is Null.
- text document 190 is stored within document sub-tree 412 .
- the structure described here for the storage of a text document is only exemplary, and may be modified depending on the specific requirement of another embodiment of the present invention.
- an alternative embodiment may store a text document using a document sub-tree with higher or lower granularity, depending the desired degree of simultaneous editing by different users, while taking into account the potential efficiency trade-offs mentioned above.
- document 190 has been divided into paragraph sized sections, and non-text data embedded within a paragraph is stored in a set of child containers below the primary container for the paragraph (i.e. graphic image 194 is stored in container 440 and its children below container 424 ).
- This method of embedding data within a paragraph is not limited to data having a different data type than the main data type of a document.
- a text document may have a paragraph with primary text and embedded text which is to be displayed in a window.
- Such embedded text may be stored below the primary container for the paragraph using a List_Container 302 (since the embedded data is text, which has a natural next and previous relationship between its sections) which may have one or more child sibling containers connected in a list to store the sections of the embedded text.
- Such embedded text may be displayed in a window, the attributes of which will be defined in the article_window field of a Text_Article 342 within the List_Container 302 .
- FIG. 6 illustrates the storage of presentation document 200 in document sub-tree 414 .
- the parent container 410 of document sub-tree is container 406 , which has the following contents:
- Container 406 (Class Array Container 304 ) Field Contents container_id 2124 container_parent 400 container_lock_handle Null container_excluded_list_handle Null container_article 418 container_article_length 234 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:12:41 array_dimensions 3 ⁇ 1 child_array [490 494 498]
- Container 406 has one child container for each slide 202 , 204 , 206 in presentation document 200 : containers 490 , 494 , 498 .
- Container 406 contains an article 418 of class
- the slide_order_table field defines the display order of the slides in the presentation document, using the slide_identifier of each slide's associated Slide_Article. This allows the order of slides in the presentation to be changed by simply modifying the slide_order_table field.
- the order of slides in a presentation document could be defined by the order in which the container for each slide appears in the child_array field of the parent container for the document sub-tree (i.e. container 406 ).
- a List_Container 302 could be used as the parent container of the document sub-tree for a presentation document and the order of slides could be defined by the position of each slide's associated sibling container in the list of child sibling containers for the List_Container.
- the default_background, default_title_properties, default_text_properties and default_shapes fields define default properties for the display of the slides of document presentation 200 .
- the current_slide field indicates that a live presentation is not currently being conducted using presentation 200 .
- Slide 202 is stored in container 490 and its children.
- Container 490 is of class Array_Container and contains an article 492 of class Slide_Article 366 .
- Container 490 and Article 492 have the following contents:
- Container 490 (Class Array_Container 304 ) Field Contents container_id 3132 container_parent 406 container_lock_handle Null container_excluded_list_handle Null container_article 492 container_article_length 1364 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:16:11 array_dimensions 1 ⁇ 1 child_array [502]
- Article 492 (Class Slide_Article 366) Field Contents article_window Null slide_identifier 3132 slide_type Text slide slide_background Null (use default background) default_shapes_flag TRUE (display default shapes) advancement_effect Fade through black advancement_interval 3 seconds
- Container 490 has a single child container 502 .
- Article 492 defines the slide_identifier of slide 202 as 01 and indicates that slide 202 is a Text slide.
- the slide_background field indicates that the default_background set out in article 418 is to be displayed on slide 202 .
- the default_shapes_flag indicates that the default shapes defined in article 418 are to be displayed on slide 202 .
- the advancement_effect defines the visual effect used to display slide 202 during a presentation.
- the advancement_interval field defines the time interval for display of slide 202 during an automatically advancing presentation.
- Container 502 is of class List_Container 302 and contains an article 504 of class Text_Article 342 .
- Container 502 and Article 504 have the following contents:
- Container 502 (Class List_Container 302 ) Field Contents container_id 4125 container_parent 490 container_lock_handle Null container_excluded_list_handle Null container_article 504 container_article_length 786 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:16:11 list_head_pointer 506 list_tail_pointer 514
- Container 502 has a list of three child sibling containers: containers 506 , 510 , 514 , which are linked together in a list.
- the article_window field of article 504 defines the window in which the text sections of slide 202 are to be displayed relative to an anchor point of slide 202 .
- the anchor point will be the upper left corner of the slide, although any other anchor point may be used.
- the text_attributes field of article 504 defines the default attributes of the text sections of slide 202 .
- Container 506 is of class Sibling_Childless_Container 316 and contains an article 508 of class Paragraph_Article 370 .
- the contents of the container 506 are set out in Appendix A.
- Article 508 has the following contents:
- Article 508 (Class Paragraph_Article 370 ) Field Contents article_window Null character_data ⁇ Text of paragraph 214a> formatting_data bullet style: square change_tracking_data Null
- the article_window field of article 508 is Null, so the text of paragraph 214 a (stored in the character_data field) will be displayed in the article_window defined in article 504 .
- the formatting_data field modifies the default bullet style defined in the default_text_properties in article 418 .
- Containers 510 and 514 and their associated articles 512 and 516 are set out in Appendix A.
- Slide 204 is stored in container 494 and its children.
- Container 494 is of class Array_Container 304 , which has the following contents:
- Container 494 (Class Array_Container 304 ) Field Contents container_id 3133 container_parent 406 container_lock_handle Null container_excluded_list_handle Null container_article 496 container_article_length 345 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:24:44 array_dimensions 2 ⁇ 1 child_array [518 522]
- Container 494 has two child containers 518 , 522 to store the two elements of slide 204 (arrow 216 and audio/video clip 218 ) that are not defined as default shapes in article 418 .
- Container 494 contains an article 496 of class Slide_Article 366 , which has the following contents:
- Article 496 (Class Slide_Article 366 ) Field Contents article_window Null slide_identifier 3133 slide_type Blank slide slide_background Null (use default background) default_shapes_flag TRUE (display default shapes) advancement_effect Fade through black advancement_interval 3 seconds
- the slide_type field article 496 designates slide 204 as a blank slide, on which the elements defined in the child containers of container 494 are displayed.
- Arrow shape 216 is stored in container 518 which is of class Childless_Container 306 and article 520 which is of class Shape_Article 368 .
- Container 518 is set out in Appendix A.
- Article 520 defines arrow shape 216 as an arrow positioned 500 pixels right and 80 pixels down from the anchor point of slide 204 , and having a width of 100 pixels, a height of 200 pixels as well as the other attributes listed in the shape_attributes field.
- Audio/video clip 218 is stored in containers 522 , 526 .
- Container 522 is of type Array Container 304 and contains an article 524 of type AV_Clip_Article.
- Container 522 is set out in Appendix A.
- Article 524 defines audio/video clip 218 as an MPEG format audio/video clip having 12800 frames that will be displayed in a 320 ⁇ 200 pixel window positioned 300 pixels right and 280 pixels down from the anchor point of slide 204 .
- the data of audio/video clip 218 is stored in article 528 of container 526 .
- Container 526 is of class Childless_Container and is set out in Appendix A.
- Article 528 is of class AV_Data_Article 376 and has the following contents:
- Article 528 (Class AV_Data_Article 376 ) Field Contents article_window Null av_data ⁇ encoded audio/visual data of clip 218>
- the av_data field of article 528 contains audio/video clip 218 .
- Slide 206 is stored in container 498 , container 530 , and its child containers 534 , 538 , 542 , 546 and their associated articles 500 , 532 , 536 , 540 , 544 , 548 .
- Slide 206 has a single element: graphic image 220 .
- Graphic image 220 is divided into four sections, which are stored in containers 534 , 538 , 542 , 546 in a manner analogous to the storage of graphic image 194 of text document 190 (FIG. 2) in container 440 and its child containers (FIG. 5).
- Containers 498 , 530 , 534 , 538 , 542 , 546 are set out in Appendix A.
- the structure of container tree 124 is directly related to the types of documents (text document 190 and presentation document 200 ) stored in container tree 124 , and to the contents of the documents.
- the structure of container tree 124 depends on the specific containers and articles selected for a specific embodiment of the present invention. For example, text documents may be divided into differently sized sections. Similarly, other types of documents may divided into differently sized independently editable sections with greater or lesser granularity.
- Many different kinds of container 140 are possible. For example, a List_And_Array_Container class (not shown) maintains a list of child sibling containers and also maintains a separate array of child containers.
- List_And_Array_Container class could be used to as the parent container 410 for documents that may be partially broken down into sections that have a natural “next” and “previous” relationship between them, and partially broken down into sections that may or may not have an ordered relationship between them.
- the List_And_Array_Container class could be used as the parent container 410 of a document sub-tree storing a “game” document.
- the List_And_Array_Container's child sibling containers could include articles storing the sequential levels presented by a game viewer in client 116 that a player must proceed through in order to complete the game. Its array of child containers could include articles storing environments or animated characters that may be randomly applied to each level in the game by game viewer in client 116 .
- system 100 includes a user database 106 .
- User database 106 includes a record for each user 102 , each of whom may be a member of any of the workspaces 122 stored in file system 104 .
- the record for each user 102 includes the following information: Field Contents user_name Identifies the name of the user user_password A password used to authorize or authenticate access to system 100 by the user. This password will typically, but not necessarily be stored in an encrypted format.
- user_contact_info Record the address, telephone number, fax number, etc. that may be used to contact the user.
- user_e_mail Records the user's e-mail address.
- user_handle Record a unique handle that is used to identify the user internally within system 100.
- the user_handle is used to identify the user when he or she has locked a container 140 and in logs, transaction histories and change tracking information for various containers 140;
- a user's user_handle is permanent once assigned.
- the user_handle may be changeable.
- user_screen_name Record a screen name that is used to identify the user externally by system 100.
- the user_screen_name may be displayed by clients to users 102 to identify the user that has locked a section of a document (which corresponds to a container).
- a user is permitted to change his user_screen_name using a typical method, which is not described further.
- user_workspace_list A list of workspaces of which the user is a member.
- a workspace 122 is considered “active” if it is currently being used by at least one of its members.
- An active workspace will be hosted by a workspace server 112 .
- System 100 includes a workspace database 108 , which includes one record for each workspace 122 .
- the record for each workspace has the following structure: Field Contents workspace_id Unique identifier for each workspace. In the exemplary embodiment of the present invention, this field is identical to the container_id of the root container of the workspace. In an another embodiment, any other unique value may be used.
- workspace_title The title of the workspace set out in the summary_title field of the root container 400 of the workspace's container tree 124.
- workspace_host If the workspace is currently active, this field identifies the workspace server 112 that is currently hosting the workspace 122.
- workspace_owner The user_handle(s) of the owner(s) of the workspace.
- One of more members of a workspace may be designated as having ownership privileges, allowing the member to modify the privileges of other members to view or edit documents in the workspace and to edit the contents of the root article 402 of the workspace.
- workspace_size The size of the workspace, typically in bytes.
- workspace_location The location at which the data files associated with the workspace are stored in file system 104.
- each workspace includes a member list 143 .
- Member list 143 includes a list of member records 144 , which have the following structure: Field Contents user_handle User_handle of the member from user database 106.
- user_screen_name User_screen name of the member from user database 106. This field is optional and in an alternative embodiment, the user_screen_name may be stored only in the user database 106.
- user_email User_e_mail of the member from user database 106.
- a member may have one of three privilege levels with respect to any document: an “owner” may modify the document in any way, including the contents of the root article of the workspace and may control the membership of other users in the workspace and their privilege levels; a “worker” is permitted to edit the documents stored in the workspace and associated summary information, but may not control the membership and privilege levels of other users; a “viewer” is permitted only to view the documents contents, log and transaction history.
- a member's privilege level is uniform for all documents in a workspace.
- a member's privilege may be set for each document in the workspace and for the authority to control membership and privilege levels of other members.
- the container_excluded_handle_list field in each container overrides a member's access privileges set in this field.
- any member will not be able to view or edit the article stored in a container if the member's handle has been entered into the container_excluded_handle_list field for the container.
- the specific privilege levels set out here are only exemplary, In another embodiment of the present invention, a member's privileges may be defined with any number and type of access privilege levels.
- member_status The member's current status with respect to the workspace 122. This field may have several values: “Invited”: - the member has been invited to join the workspace 122 but has yet to connect to the workspace.
- Connected - the member is currently connected to the workspace 122. “Not Connected” - the member is currently not connected to the workspace 122. “Connecting” - the member is in the process of connecting to the workspace 122. This field is used to ensure that a workspace 122 is not de-activated while a member is attempting to connect to it.
- Appendix D illustrates an exemplary set of member records 144 for the exemplary workspace 122 a illustrated in FIG. 4 and Appendix D.
- a master copy of each workspace 122 is stored in file system 104 using three types of data files:
- the parent container for each document sub-tree is stored in both the header file for the entire workspace and in the document file for the associated document.
- the stored data in header files, document files and membership file may be manipulated by any master server 110 or any workspace server 112 .
- each workspace 122 is accessed directly by master servers 110 and workspace server 112 and is updated based on changes in membership in the workspace and changes in the documents stored in the workspace.
- a workspace server will update the structure and contents of the master copy of the container tree 124 stored in header file 660 and document files 662 based on Lock requests and Post requests from clients 116 , as described below.
- FIG. 10 illustrates the structure of an exemplary header file 660 and an exemplary document file 662 .
- Header file 660 stores the root container 400 and parent container 404 and 406 of container tree 124 as follows. Each container 140 is stored sequentially with three fields for each container: the container_id field, the container_article_length field, and the byte buffer representing the container_article field. At the end of header file 660 , a directory 664 is stored with seven fields for each container: an index representing the type of container (List_Container, Array_Container etc.), the container_id field, the container_article_length field, the container_lock_handle field, the container_excluded_handle_list field, container_time_stamp field and an index value. The index value indicates the position of the main portion of the container within header file 660 .
- the index value for each container 140 will be an offset from the beginning of header file 660 indicating where the first byte of the container is stored.
- the record for each parent container 410 in directory 664 contains a field for the location of the corresponding document file 662 in file system 104 .
- This file structure allows containers 140 to be locked and unlocked efficiently, and also allows individual containers 140 to be accessed quickly.
- a request is received to lock a container 140 for a member with owner or worker privileges (for example, in accordance with step 1218 of Method 1200 on FIG. 14 b , described below) it is only necessary to (i) check whether the member's user_handle is listed in the container_excluded_handle_list and, if permitted, (ii) enter the user_handle in the container_lock_handle field. Since these steps can be taken by looking only at the directory of the header file, it is not necessary to read or parse the entire header file (or a large part of it) to find the required fields. If a get request is received for a container 140 , the index_value of the directory allows the container to be quickly accessed for transmission to a client (along with the container_lock_handle and container_excluded_handle list from the directory).
- FIG. 11 illustrates that document files 662 are organized in the same way.
- Each container 140 is stored sequentially without its container_lock_handle and container_excluded_handle_list fields, which are stored in a directory 668 along with an index_value specifying the position of the container within the document file 662 .
- document files 662 will be larger than header files and may receive more get/post activity. As a result, the benefit of efficient locking and unlocking and rapid access to an entire container may be even greater in respect of document files.
- header files 660 and document files 662 and directories 664 , 668 is not necessary to the present invention.
- a container tree 124 may be stored in any format suitable for a specific embodiment. For example, an alternative embodiment may store each container 140 in a separate data file. Another alternative embodiment may use a single flat file for all containers 140 .
- Each client 116 is a software application or package that is executed on a client computer 119 .
- a client 116 has several functions:
- a client software package 116 may be installed on a client computer 119 in various ways.
- client software package 116 may be installed from a computer readable medium such as a floppy disc, compact disc (CD), digital versatile disc (DVD) or a solid state memory device.
- a client software package 116 may also be downloaded over the Internet and installed on a client computer 119 .
- a client software package 116 may be installed or updated during step 1005 of method 1000 described below.
- Text document 190 and presentation document 200 are only exemplary of the many types of documents that can be stored in a workspace 122 .
- table documents or spreadsheet documents
- graphic documents which will typically comprise one or more graphic images
- audio/video documents which will typically comprise one or more audio/video clips
- Any of these documents may include embedded elements of a different data type than their primary data type.
- Clients 116 include editing software, or editors, for each type of document supported by any particular embodiment of the present invention, with the exception of generic documents.
- clients 116 include a text editor 800 for editing text documents, spreadsheet editor 808 for editing table documents, a graphic image editor 802 for editing graphic images, a video editor 806 for editing AV clip documents, a presentation editor 804 for editing presentations.
- the presentation editor 804 is principally used to edit the sequence of slides in presentations and incorporates a slide editor 810 for editing slides within presentations.
- Each editor built into a client 116 is configured to maintain the structure of a document sub-tree in which a document of the associated type is stored.
- the text editor 800 in the clients 116 of the present embodiment is configured to allow a user to view and edit text document 190 and to maintain the structure of document sub-tree 412 to contain text document 190 as it is edited.
- Each editor is also configured to create a document sub-tree for a new document and to delete document sub-trees when a document is deleted.
- each editor may be executed within any other editor for editing embedded sections of documents.
- the graphic image editor 802 may be invoked by the text editor 800 to allow a user editing a text document to edit an embedded graphic image.
- the present embodiment also supports the storage of generic documents of a data type for which an editor is not provided, within a container tree 124 .
- FIG. 9 illustrates the storage of an exemplary generic document in a document sub_tree 648 .
- Document sub-tree 648 has a parent container 650 of class Array_Container 304 which has the following contents:
- Container 650 (Class Array_Container 304 ) Field Contents container_id 2987 container parent ⁇ Root Container of container tree> container_lock_handle Null container_excluded_handle_list Null container_article 652 container_article length 624 bytes container_valid TRUE container_time stamp July 30, 2001, 3:38:14 array_dimensions 1x1 child_array [654]
- Container 650 is a parent container 410 having the root container of a container tree (such as root container 400 ) as its parent.
- Container 650 has a single child container identified in its child_array field.
- the generic document stored in the document sub-tree 648 is identified in the article 652 of container 650 .
- Article 652 is of class Generic_Document_Article 352 and has the following contents:
- Article 652 (Class Generic_Document_Article 352 ) Field Contents article_window Null summary_title Exemplary generic document summary_description Exemplary generic document for patent application summary_keywords Exemplary, generic summary_log July 30, 2001, 3:38:14 br1: Created this document as an example of a generic document summary_history July 30, 2001, 3:38:34 br1: CREATE
- Container 654 is of class Childless_Container 306 having the following contents:
- Container 654 (Class Childless_Container 306 ) Field Contents container_Id 3985 container_parent 650 container_lock_handle Null container_excluded_list_handle Null container_article 656 container_article length 32424 bytes container_valid TRUE container_time_stamp July 30, 2001, 3:38:14
- the article 656 of container 654 is of class Data_Article 378 and has the following contents:
- Article 656 (Class Data_Article 378 ) Field Contents article_window Null generic_data ⁇ Contents of generic document>
- the article_window field of article 656 is Null, since the generic document will not be displayed by a client 116 (since the client does not have an editor capable of displaying the generic document).
- the generic document is stored in its entirety in the generic_data field of Article 656 .
- Generic documents may be edited by a user with an editor not included with a client 116 .
- a text editor is not provided in the clients 116 , then text documents may be stored in a workspace as a generic document and may be edited using a third party word processor.
- the current client 116 of system 100 may evolve over time as changes and improvements are made to the different pieces of editing software and other parts of the client 116 . This can cause the client 116 installed on any client computer 119 to become out-of-date.
- An out-of-date client installed on a client computer is updated in step 1005 of method 1000 . To facilitate such updates, each version of the client is assigned a version number and is time stamped.
- System 100 contains a number of transactions which a skilled person will be able to understand from the description of methods 1000 - 1600 , below, including:
- FIG. 12 illustrates a method 1000 for a Login Transaction by which an exemplary user 102 may login to system 100 and gain access to a workspace of which the user 102 a is a member.
- Method 1000 (and methods 1100 , 1200 , 1300 , 1400 , 1500 , 1600 and 1700 set out below) is described here in the context of a specific user 102 a (FIG. 1), who is the user Chris Sonnenberg described in Appendix B.
- Method 1000 begins at step 1002 , in which user 102 a accesses a login screen 700 of system 100 .
- Login screen 700 may be a web page that may be accessed by user 102 a using a web browser operating on a client computer 119 a .
- the web page may be displayed by a master server 110 (possibly through a web server operated as part of system 100 ), or by another process.
- user 102 a enters his name and password.
- the user 102 a may be permitted to enter his or her screen name or user handle, in addition to his or her password.
- a previously installed “cookie” on client computer 119 a may identify the user's name and possibly his password.
- Method 1000 next proceeds to decision step 1004 . If the combination of the name and password entered by user 102 a in step 1002 is authentic (i.e. the name and password are found in a single record in the user database 106 ), then method 1000 proceeds to step 1005 . Otherwise, method 1000 ends.
- step 1005 a complete and current version of client 116 is installed on client computer 119 a .
- This may require a completely new client software package to be transmitted to client computer 119 a , along with software for installing the client 116 (if no client 116 has ever been installed on client computer 119 a or if the client 116 installed on client computer 119 a is so out-of-date that it cannot be efficiently updated).
- this may involve the transmission of only a part of the current client, which is then combined with components of a previously installed client to fully update the installed client 116 .
- This updating process may be performed by various known techniques.
- the login screen 700 described in step 1002 may check the version, if any, of a previously installed client on client computer 119 a .
- Login screen 700 may then update the previously installed client. If login screen 700 is a web page as described above, then this function may be programmed in the web page. Such an operation will be well understood by skilled persons.
- any previously installed version of a client may be executed on client computer 119 a and may download any required components any may update itself.
- Client 116 may be installed or updated on client computer 119 a using any other method, and any combination of methods may be used.
- a master server 110 is selected to communicate with client computer 119 a .
- the selection of the master server 110 s may be based on load balancing criteria to ensure that all master servers 110 have similar loads, or may be based on any other rule or criteria, including a random selection criteria.
- the selected master server is referred to with the reference numeral 110 s.
- Method 1000 next proceeds to step 1008 , in which the client 116 a installed on client computer 119 a is executed and the address of selected master server 110 s and the user 102 a 's user_handle, user_screen_name, and user_e_mail are passed to client 116 a .
- client 116 a is executed within a web browser installed on client computer 119 a .
- client 116 a may be executed as an independent application.
- master server 110 s may provide client 116 a with the current system time for system 100 and client 116 a may update the system clock of client computer 119 a so that it is synchronized with the system clock.
- the current system time of system 100 may be synchronized to a selected network time server and client 116 a may synchronize the system clock of client computer 119 a to the same network time server.
- Method 1000 next proceeds to step 1010 , in which the client 116 a connects to master server 110 s and master server 110 s transmits the list of workspaces stored in the user_workspace_list field of the user's record in the user database 106 to the client 116 a , which displays the list to the user 102 a . If the user 102 a is not a member of any workspace 122 , then the master server 110 s indicates this to the client 116 a , and the client 116 a displays an appropriate message, such as “You are not a member of any workspace.”
- Method 1000 next proceeds to step 1012 , in which the user 102 a is offered a choice of:
- step 1020 Deleting an existing workspace 122 . If the user selects this option, the user is permitted to select a workspace 122 for which he has owner privileges and the workspace is deleted from system 100 in step 1020 .
- a workspace may be “deleted” by identifying it as such, but without actually removing it from file system 104 . This allows the “deleted” workspace to be subsequently restored.
- system 100 may optionally be configured to permit a workspace to be deleted only if no member (or no member with a selected privilege level) of the workspace is connected to it. After step 1020 , method 1000 returns to step 1010 .
- step 1018 Logging out of system 100 . If the user selects this option, method 1000 proceeds to step 1018 .
- step 1018 client 1018 stops executing and method 1000 ends.
- FIG. 13 illustrates a method 1100 for a “Create Workspace” transaction, which is used to create a new workspace 122 n.
- Method 1100 begins in step 1102 , in which client 116 a creates a new root container 400 for the new workspace 122 n .
- the new root container 400 is an Array_Container 304 .
- Client 116 a selects the values for the fields of the new root container 400 as follows:
- a value is chosen for the container_id field. This value may be chosen randomly, or may be chosen using a selected mechanism. In the present embodiment, the value chosen for this field is based on the current time, which is provided by the system clock. In any case, the container id chosen by the client 116 a is considered a preliminary value.
- the new root container 400 is created with the most current structure of an Array_Container 304 . If, in a different embodiment of the present invention, another type of container is used as the root container 400 , the current version of that container type is used.
- Client 116 a creates a new root article 402 of type Workspace_Article 354 and sets the container_article field to point to the new root article 402 .
- the container_article_length field is initially set to 0 bytes.
- the child_array field is set to Null, indicating that the new root container 400 has no child containers.
- Method 1100 next proceeds to step 1104 , in which client 116 a creates a new member list 144 for the new workspace 122 n .
- client 116 a creates a single member record 143 and selects the value of its fields as follows:
- Method 1100 next proceeds to step 1106 , in which client 116 a displays a dialog box allowing user 102 a to define the following fields of the new root article 402 :
- Client 116 a adds a “CREATE” entry to the summary history field of the new root article 402 , indicating the handle of user 102 a , and the date and time at which the new workspace 122 n was created.
- the container_article_length field of the root container 402 is updated to reflect the length of the root article 402 .
- Method 1100 next proceeds to step 1108 , in which client 116 a transmits the new workspace 122 n to master server 110 s .
- the new workspace 122 n comprises the new root container 400 , which includes the new root article 402 , and the new member list 144 .
- Method 1100 next proceeds to step 1110 , in which master server 110 s checks the container_id of the new root container 400 . If the container_id is not unique compared to that of all other containers 140 stored in any workspace 122 in system 100 , master server 110 s modifies it so that it is unique.
- Method 1100 next proceeds to step 1112 , in which the new workspace 122 n is stored in file system 104 .
- Master server 110 s communicates with user database 106 to add the newly created workspace 122 n to the user 102 a 's list of workspaces.
- Master server 110 s also communicates with workspace database 108 to add a new workspace record for the newly created workspace 122 .
- Method 1100 then returns to step 1012 , and the new workspace 122 n is treated as the selected workspace 122 s.
- the user 102 a has created a new workspace 122 n , defined the contents of the root article 402 of the workspace 122 n and is the only member of the workspace 122 n.
- FIGS. 14 a and 14 b illustrate a method 1200 for an “Open Workspace” transaction.
- An Open Workspace transaction is initiated in accordance with step 1012 described above.
- Method 1200 begins in step 1201 in which master server 110 s first freezes the record corresponding to the selected workspace 122 s in workspace database 108 so that no process other than master server 110 s may modify that entry. If the record corresponding to the selected workspace 122 s in workspace database 108 is already frozen by another process, master server 110 s waits until the entry is not frozen.
- freeze and “frozen” are used in this description to refer to data elements that have been locked by a particular process, entity or thread (such as a master server 110 or a workspace server 112 ) for synchronization purposes.
- the terms are used to avoid confusion with the word “lock”, which is generally used to refer to containers 140 that have been locked by a user to allow the contents of the container to be edited exclusively by that user.
- the synchronization locks referred to with the terms “freeze” and “frozen” may be implemented in various computing environments using semaphores, shared memory space, message passing and other known techniques.
- Method 1200 next proceeds to step 1202 , in which master server 110 s determines whether the selected workspace 122 s is active. Master server 110 s checks the workspace_host field of the record for workspace 122 s in the workspace database 108 .
- the workspace_host field will contain the address of a workspace_server 110 , which is then identified as the host workspace server 112 h of the workspace 122 s .
- the presence of an address in the workspace_host field indicates that the selected workspace 122 s is currently active and initialized. In this case, method 1200 proceeds directly to step 1206 .
- master server 110 s selects a workspace server 112 to host the selected workspace 122 s .
- a workspace server 112 will be capable of hosting more than one workspace 122 .
- master server 110 s selects the workspace server 112 in order to keep the workload of different workspace servers 112 generally equal.
- master server 110 s may select the workspace server 112 based on a rule that a specific workspace 122 is always hosted by a specific workspace server 112 , based on a random selection or based on any other method or rule.
- the workspace server 112 is designated as the host workspace server 112 h for the selected workspace 122 s.
- Master server 110 s sends a message to host workspace server 112 h indicating the workspace server 112 h is to start hosting workspace 122 s .
- workspace server 112 h “initializes” the workspace 122 s by loading the directory 664 from the header file 660 and the member list 143 from the membership file.
- workspace server 112 h sends a confirmation message to master server 110 s , which updates the workspace_host field of the record for workspace 122 s in the workspace database 108 .
- step 1206 master server 110 s sends a message to host workspace server 112 h indicating the connecting user 102 a 's user_handle and user_e_mail.
- Workspace server 112 h sets the member_status field of user 102 a 's member record in member list 143 of selected workspace 122 s to “Connecting”.
- Master server 110 s transmits the address of the host workspace server 112 h to the client 116 a.
- Method 1200 next proceeds to step 1207 , in which master server 110 s unfreezes the record corresponding to the selected workspace 122 s in workspace database 108 .
- step 1208 client 16 a contacts host workspace server 12 h .
- client 116 a transmits a “Connect” message to the host workspace server 112 h , and opens a persistent bi-directional communication link with the host workspace server 112 h .
- the persistent bidirectional communication link is used by the client 116 a to communicate with workspace server 112 h .
- client 116 a is considered to be connected to workspace 122 s.
- workspace server 112 h instantiates a separate process to communicate with client 116 a . Similarly every other client that connects with workspace server 112 h will communicate with a separate process operating within workspace server 112 h . In the remainder of this description, the separate process will be treated as a part of workspace server 112 h and will not be referred to separately.
- Method 1200 next proceeds to step 1209 in which workspace server 112 h retrieves the member_privileges field from user 102 a 's entry in the member list 143 for the selected workspace 122 s and sets the member_status field of the same entry to “Connected”.
- a workspace member's member_status field may have one of four settings in the present embodiment (although additional settings may be used in other embodiments): Invited, Connected, Connecting and Not Connected.
- Invited When an owner of a workspace 122 (or a worker, if workers are permitted to do so) initially adds a member record 144 to the member list 143 , the new member may or may not be a user of system 100 . If the new member is not a user of system 100 , then the member will not have a user_handle, which is defined in the user's entry in the user database 106 .
- the owner of the workspace identifies the new member by entering the e-mail address into the user_e_mail field of the new member record.
- the member_handle field is left blank.
- Client 116 sets the member_status field of the new member record to “Invited”.
- the new member may register with system 100 , at which time a user_handle will be assigned for the new user.
- master server 110 s transmits the new user's user_handle, and user_e_mail fields to the workspace server 112 h in step 1206 .
- workspace server 112 h may then find the corresponding member record using the user_e_mail field.
- Workspace server 112 h then enters the user_handle received from the master server into the user_handle field of the member record. Workspace server 112 h subsequently may use the user_handle to find the member's member record 144 .
- the new member record 144 may be completed by the owner of the workspace 122 .
- the user_handle or user_e_mail fields may be used to find the member's member record 144 in this step.
- Workspace server 112 h then transmits a Confirm Connect message and the member_privileges back to client 116 a .
- Workspace server 112 h also broadcasts a Connect Update message to all clients 116 connected with the workspace 122 s to advise them of the screen name of the of the newly connected user 102 a .
- Client 116 a which transmitted the originating Connect message, ignores the Connect Update message after determining that it relates to its own connection. Every other connected client 116 displays an appropriate message to its corresponding user 102 , such as “Chris has connected to the workspace”. In this way, every client 116 that is currently connected to workspace 122 s is advised of the connection of every other client 116 as it occurs.
- workspace server 112 h broadcasts a Disconnect Update message advising all clients when a user 102 disconnects from a workspace.
- Method 1200 next proceeds to step 1210 in which client 116 a gets the following components of workspace 122 from workspace server 112 h:
- client 116 a would get the root container 400 and containers 404 and 406 .
- Client 116 a requests the root container 400 and all parent containers 410 from workspace server 112 h and in response workspace server 112 h transmits all of the containers stored in the header file 660 for the workspace 122 s .
- the location of the header file 660 is stored in the workspace_location field of the workspace's entry in the workspace database 108 .
- workspace server 112 s While workspace 122 s is active, workspace server 112 s preferably keeps the header file directory 664 , comprising the root container 400 and parent containers 410 , and member list 143 in memory to facilitate rapid access. However, this may not be practical or possible depending on the number of workspaces 122 being hosted by workspace server 112 h and the size of its local memory space. In any case, workspace server 112 h preferably keeps header file 660 , document files 662 and membership file stored in file system 104 updated at all times to reduce the chance of data being lost due to a breakdown or crash of workspace server 112 h.
- Method 1200 next proceeds to step 1211 , in which client 116 a displays the title (from summary_title field of the parent article stored in parent container 410 of each document's document sub-tree) and/or an icon or thumbnail image representing each document stored in the workspace 122 s except those in which the user 102 a 's user handle has been entered in the parent container 410 's container_excluded_handle_list field.
- client 116 a displays the title and an icon for text document 190 and for presentation document 200 .
- Method 1200 next proceeds to step 1212 , in which client 116 a offers user 102 a the following choices:
- step 1230 If the user 102 a has owner or worker privileges for the workspace 122 s , he may choose to edit the contents of the root article of the workspace. If the user 102 a selects this option, then method 1200 proceeds to step 1230 .
- step 1214 client 116 a displays the contents of the parent article (i.e. article 416 , if text document 190 is selected) contained in the parent container 410 of the selected document.
- the parent article i.e. article 416 , if text document 190 is selected
- Method 1200 next proceeds to step 1216 , in which the user 102 a is offered the following choices:
- step 1218 If the user 102 a has owner or worker privileges for the workspace 122 s , the user 102 a may choose to edit the contents of the parent article contained in the parent container 410 of the selected document. If the user 102 a chooses this option, method 1200 proceeds to step 1218 .
- step 1218 client 116 a transmits a Lock Request message for the parent container 410 of the selected workspace 122 s to workspace server 112 h .
- workspace server 112 h determines whether the parent container 410 is already locked by another user 102 (i.e. the container_lock_handle field of the parent container 410 contains the user_handle of the other user 102 ). If so, then workspace server 112 h transmits a Refused Lock message to client 116 a .
- Client 116 a displays a message indicating the parent article cannot currently be edited (and possibly an explanation that the parent container 410 is currently be edited by another member of the workspace) and method 1200 returns to step 1212 .
- workspace server 112 h locks the parent container for user 102 a by setting the container_lock_handle field to user 102 a 's user_handle (in both the header file 660 for the selected workspace 122 s and the document file 662 for the selected document). Workspace server 112 h then transmits a Confirmed Lock message to client 116 a.
- Client 116 a then displays a dialog box allowing the user 102 a to edit the summary_title, summary_description, summary_keywords, summary_log fields and possibly additional fields, depending on the document type (i.e. the text_attributes and text_document information fields for text documents) of the parent article for the selected document.
- the user 102 a will not be able to directly edit the article_window, summary_history and other fields that are updated automatically by editors in client 116 a (such as the text_document_statistics field for text documents).
- client 116 a posts the revised parent container 410 (of which the revised parent article is a part) to the workspace server 112 h for storage in file system 104 .
- System 100 supports several different types of Post requests, which are used by a client 116 to transmit changes in a workspace 122 to a workspace server 112 . More specifically, Post requests are used to add, modify and delete entire documents as well as sections of documents. Typically, a client 116 makes a Post request by transmitting three pieces of information to a workspace server 112 h that is hosting the relevant workspace 122 :
- a provisional container is a container 140 that has been prepared by a client for incorporation in container tree 124 .
- a workspace server 112 either confirms or refuses the Post request. If the Post request is confirmed, the client 116 incorporates the provisional containers into its local container tree 124 . If the Post request is refused, then the client 116 does not incorporate the provisional containers into its local container tree 124 . The client 116 may re-attempt the Post request, or it may discard the provisional containers, or it may display a message to its user 102 and allow the user to select a course of action.
- the host workspace server 112 h takes the requested action by modifying the workspace's header file 660 and document files 662 in file system 104 .
- step 1218 client 116 a sends the following information to workspace server 112 h:
- workspace server 112 h replaces the parent container 410 stored in both the header file 660 for the selected workspace 122 s and the document file 662 for the selected document.
- Workspace server 112 h also sets the container lock handle field for the parent container 410 (in both the header and document files) to Null, thereby unlocking the parent container 410 .
- Workspace server 112 h then transmits a Confirm Post and Unlock message to client 116 a .
- Workspace server 112 h also broadcasts a Post and Unlock Update message to all clients 116 connected with the workspace 122 s to advise them of the newly posted parent container.
- Client 116 a which transmitted the original request, ignores the broadcasted message after determining that it relates to its own connection.
- Method 1200 then returns to step 1212 .
- step 1220 client 116 a transmits a Disconnect message to workspace server 112 h .
- Workspace server 112 h responds to the Disconnect message by:
- workspace server 112 h de-activates the workspace 122 s as follows. Workspace server 112 h freezes the record corresponding to the selected workspace 122 s in workspace database 108 . If the record corresponding to the selected workspace 122 s in workspace database 108 is already frozen by another process, then workspace server 112 h waits until the entry becomes unfrozen and then attempts to freeze it.
- workspace server 112 h abandons the attempt to de-activate workspace 122 s and method 1200 returns to step S 1010 of method 1000 , in respect of user 102 a .
- system 100 continues at step 1208 .
- workspace 112 h When workspace 112 h is able to freeze the record corresponding to the selected workspace 122 s in workspace database 108 , it deactivates workspace 122 s by ensuring that its header file 660 and document files 662 are stored in file system 104 . Workspace server 112 h then sets the workspace_host field in the record for workspace 122 s in the workspace database to Null, indicating the workspace 122 s is inactive. Method 1200 then returns to step 1010 of method 1000 .
- step 1230 client 116 a transmits a Lock Request for the root container 400 of the selected workspace 122 s to workspace server 112 h .
- workspace server 112 h determines whether the root container 400 is already locked by another user 102 (i.e. the container_lock_handle field of the root container 400 contains the user_handle of the other user 102 ). If so, then workspace server 112 h transmits a Refused Lock message to client 116 a .
- Client 116 a displays a message indicating the root article cannot currently be edited (and possibly an explanation that the root container 400 is currently being edited by another member of the workspace) and method 1200 returns to step 1212 .
- workspace server locks the root container 410 for user 102 a by setting the container_lock_handle field to user 102 a 's user_handle.
- Workspace server 112 h then transmits a Confirmed Lock message to client 116 a.
- Client 116 a then displays a dialog box allowing the user 102 a to edit certain fields of the root article 402 for the workspace 122 s . If the user 102 a has owner privileges in workspace 122 s , he may edit the summary_title, summary_description, summary_keywords and summary_log fields of the root article 402 for the workspace 122 s . If the user 102 a has worker privileges in workspace 122 s , he may edit only the summary_log field of the root article 402 for the workspace 122 s . Typically, the user 102 a will not be able to directly edit the summary_history and document_count fields, which are updated automatically by client 116 a .
- client 116 a sends a Post and Unlock message containing the root container 400 , including the revised root article 402 , to workspace server 112 h .
- Workspace server 112 h replaces the root container 400 in the header file 660 for the selected workspace 122 s .
- Workspace server 112 h also sets the container lock handle field for the root container 400 (in the header file 660 ) to Null, thereby unlocking the root container 400 .
- Workspace server 112 h then transmits a Confirm Post and Unlock message to client 116 a .
- Workspace server 112 h also broadcasts a Post and Unlock Update message to all clients 116 connected with the workspace 122 s to advise them of the newly updated root container 400 .
- Client 116 a which transmitted the original request, ignores the broadcasted message after determining that it relates to its own connection. The nature of the broadcasted message and the response of every other connected client 116 is described below in method 1500 (FIG. 17) and method 1600 (FIG. 18). Method 1200 then returns to step 1212 .
- FIG. 15 illustrates a method 1300 by which a new document is added to the workspace 122 s.
- Method 1300 begins in step 1302 , in which the user 102 a specifies the type of the new document to be added to the workspace 122 s .
- client 116 a displays a menu of document types that are supported by system 100 (or another embodiment of the present invention).
- the type of the parent container 410 for the document sub-tree for the new document will depend on the document type.
- the document type and associated type of the parent container are related as shown in Table 1 : TABLE 1 Relationship between document type, parent container type and initial document section in the present exemplary embodiment.
- Parent Container Document Type Type 410 Initial Document Section Text Document List_Container Empty paragraph Table Array_Container Empty cell Image Array_Container Entire image Presentation Array_Container Initial blank slide Generic Document Array_Container Entire Generic Document
- step 1300 When user 102 a selects a document type, method 1300 proceeds to step 1304 .
- step 1304 client 116 a creates a parent container 410 n for the new document, in accordance with Table 1.
- Client 116 a creates the new parent container 410 n as follows:
- a value is chosen for the container_id field. This value may be chosen randomly, or may be chosen using a selected mechanism. In the present embodiment, the value chosen for this field is based on the current time, which is provided by the system clock. In any case, the container_id chosen by the client 116 a is considered a preliminary value.
- the new parent container 410 n is created with the structure of the appropriate container class (i.e. a List_Container 302 or Array_Container 304 ).
- a provisional copy of the root container 400 p is made, including a provisional copy of its root article 402 p .
- the container_parent field of new parent container 410 n is set to point to the provisional root container 400 p.
- Client 116 a creates a new parent article for the new parent container 410 n of the appropriate type for the selected document type. For example, if a text document is selected, the parent article will be a Text_Document_Article 356 ; if a presentation document is selected, the parent article will be a Presentation_Document_Article 364 .
- the container_article field of new parent container 410 n is set to point to the new parent article.
- the container_articie_length field of new parent container 410 n is initially set to the length of the new parent article.
- Client 116 a may create a child container or containers for the new parent container to provide an initial document section, as set out in Table 1.
- client 116 a creates a new Sibling_Childless_Container 316 (identified as a container 140 n ) and sets its fields in a manner analogous to that set out above for the new parent container.
- the container_parent of the new container 140 n is set to point to the new parent container 410 n and the list_head_pointer and list_tail_pointer fields of the new parent container 410 n are set to point to the new child container 140 n .
- client 116 a creates a new Paragraph_Article 370 for the new container 140 n and sets its fields so that it has an empty character_data field and no formatting or change tracking information.
- client 116 a creates a new Presentation document is provided with an initial blank slide and a new table document is provided with an initial empty cell.
- Image and generic documents are generally, although not necessarily, created only when an image or generic data file already exists.
- client 116 a creates a new parent container 410 n of class Array_Container 304 having an article of class Image_Document_Article 358 .
- Client 116 a then loads the image data for the new image document from a data device specified by user 102 a such as a floppy disk, CD-ROM or other storage device, which may be coupled to client computer 119 a or which may be accessible via a network (including network 114 ).
- Client 116 a displays a dialog box allowing user 102 a to specify how the new image document should be divided into mutually exclusive sections.
- Client 116 a then creates one or more child containers (one child container for each section), including articles of class pixel_article 372 , for the new image document and stores the image data in the new child containers.
- the fields of the new child containers are set in a manner analogous to those of containers 444 , 448 , 452 and 456 (FIG. 5) used to store graphic image 194 (FIG. 2).
- client 116 a similarly creates a new parent container 410 n of type Array_Container 304 with an article of class Generic Document Article 352 .
- Client 116 a also creates a child container 140 n for the new parent container 410 n with an article of class Data_Article 378 .
- Client 116 a then loads the generic data from a data device specified by user 102 a and stores the generic data in the article of the new child container 140 n .
- the remaining fields of the new parent container 410 n and the new child container 140 n are set in a manner analogous to those of containers 650 and 654 (FIG. 9) used to store the exemplary generic document described above.
- Method 1300 next proceeds to step 1306 , in which client 116 a transmits a Lock Request message for the root container 400 of the selected workspace 122 s to workspace server 112 h as described above in step 1230 .
- client 116 a Upon receipt of a Confirmed Lock message from workspace server 112 h , client 116 a adds a NEW DOCUMENT entry to the summary_history field of its provisional copy of the root article 402 p , indicating the handle of user 102 a , the date and time at which the new document was added, and adjunctive information identifying the type and source of the document.
- the container_article_length field of the provisional root container 400 p is updated to reflect the modified length of the provisional root article 402 p .
- Client 116 a then links the provisional root container 400 p to the new parent container 410 n .
- Client 116 a does this by adding a pointer to the new parent container 410 n to the child_array of the provisional root container (which is an Array_Container 304 in the present embodiment).
- Method 1300 next proceeds to step 1308 , in which the new document is then posted to workspace server 112 h .
- Client 116 a sends the following to workspace server 112 h to post the new document:
- Method 1300 next proceeds to step 1310 , in which client 116 a waits for a Confirm Post and Unlock message from workspace server 112 h . This message is sent by workspace server 112 h to confirm that it has received the Post request from client 116 a , that the workspace's header file 660 has been modified and a new document file 662 created, and that the root container 400 has been unlocked.
- client 116 a may be configured to re-transmit the Post request or to discard the newly added document or take another corrective action, such as informing user 102 a of the missing confirmation message and allowing the user to choose a course of action.
- Workspace server 112 h broadcasts a Post and Unlock Update message to all clients 116 connected with the workspace 122 s to advise them of the newly updated root container 400 and the newly added document sub-tree. The nature of the broadcasted message and the response of every other connected client 116 is described below in method 1500 of FIG. 17 and method 1600 of FIG. 18.
- client 116 a Upon receipt of a Confirm Post and Unlock message from workspace server 112 h , client 116 a freezes its copy of container tree 124 , replaces the root container 400 with the provisional root container 400 p (including its provisional root article 402 p ), and adds the new parent container 410 n to the root container 400 's array of children. Client 116 a then unfreezes its local copy of container tree 124 . In this way, client 116 a 's local copy of container tree 124 is synchronized with workspace server 112 h 's master copy of container tree 124 .
- Method 1300 then ends.
- FIG. 16 illustrates a method 1400 for a View/Edit Document transaction.
- Method 1400 is described above as following step 1216 if the user 102 a chooses to view or edit the selected document.
- method 1400 may also be initiated directly from step 1212 by providing user 102 a with an option to select a document and directly view or edit it.
- Method 1400 begins in decision step 1402 , in which client 116 a determines whether it has previously gotten the document sub-tree (which is stored in a document file 662 in file system 104 ) in which the selected document is stored. As described in relation to step 1210 of method 1200 , when client 116 a initially opens a workspace, it gets the root container 400 for the container tree and the parent containers 410 for each document sub-tree. Client 116 a does not get the entire document sub-tree for each document stored in the workspace. Accordingly, client a must get the document sub-tree (or at least a part of it) in order to display the document for user 102 a to view and/or edit.
- method 1400 proceeds to step 1404 . Otherwise, method 1400 proceeds to step 1408 .
- step 1404 client 116 a checks each container 140 in its local copy of the document sub-tree (i.e. the copy stored by client 116 a in client computer 119 a ) for the selected document to determine if any such container 140 , including the parent container 410 , has its container_valid field set to FALSE. Such a container 140 is referred to as an invalid container.
- a container's container_valid field may be set to FALSE in accordance with method 1600 (FIG. 18), described below, when the copy of the container 140 stored by a client is not consistent with the copy of the same container 140 stored by workspace server 112 h in file system 104 . Should any container 140 in a document sub-tree be invalid, a client 116 must get a new, valid copy of the container 140 from workspace server 112 h before subsequently displaying its contents to a user 102 .
- method 1400 proceeds to step 1406 . Otherwise method 1400 proceeds to step 1410 .
- step 1406 client 116 a gets all invalid containers in its document sub-tree for the selected document from workspace server 112 h .
- client 116 a does this by making a Get Flagged Containers request.
- Client 116 a transmits the following information to workspace server 112 h:
- each node contains the container_id of the container 140 at that node and a “get_flag”, which is marked FALSE if the client does not require a new valid copy of the container (i.e. the container_valid field of the container is marked as TRUE in the local copy of the container tree 124 ) or is marked as TRUE if the client does require a new valid copy of the container.
- Workspace server 112 h responds to the Get Flagged Containers request by transmitting a portion of the document sub-tree beginning with the identified parent container 410 and then transmitting each child (including grandchildren, etc.) of the parent container 410 .
- Any container for which the get_flag was marked as TRUE is transmitted in full.
- any container for which the get_flag was marked as FALSE is transmitted in an abridged format which does not include the container's article 142 and may not include other fields of the container.
- the abridged form of a container may consist only of the container's container_id field.
- containers for which the get_flag was FALSE may be omitted by the workspace server 112 h in its return transmission to client 116 a.
- the Get Flagged Containers request described is used to allow a client to get any number of containers that have a common parent (or grandparent, etc.) container, simply by identifying the common parent and flagging each container to be gotten.
- branches of the container sub-tree for which the container_valid field is TRUE in all children (including grandchildren, etc) may be omitted from the sub-tree transmitted by client 116 a to workspace server 112 h .
- client 116 a may simply send a list of containers that it wishes to get and workspace server 112 h may simply transmit up-to-date versions of only those containers. Any mechanism by which client 116 a can request and receive an updated copy of every invalid container in the document sub-tree for the selected document may be used in this step.
- method 1400 proceeds to step 1410 .
- step 1408 client 116 a gets the entire document sub-tree for the selected document by sending the following information to workspace server 112 h:
- Workspace server 112 h responds by transmitting the entire document sub-tree for the selected document, including the parent container 410 .
- Workspace server 112 h sends all of the containers stored in the document file 662 for the selected document to client 116 a .
- the location of the document file 662 is set out in the directory 664 of the workspace's header file 660 .
- Method 1400 next proceeds to step 1410 .
- step 1410 client 116 a freezes its local copy of the container tree 124 to ensure that no other process modifies the container tree. Client 116 a then updates its local copy of container tree 124 . If client 116 a executed step 1406 above, client 116 a replaces the invalid containers 140 with the up-to-date versions transmitted by workspace server 112 h , thereby rendering each container in the document sub-tree for the selected document valid (each new container will have its container_valid field set as TRUE when the container is transmitted by workspace server 112 h ). If client 116 a executed step 1408 above, client 116 a adds the complete document sub-tree retrieved in step 1408 to its local copy of container tree 124 .
- client 116 a synchronizes its local copy of the selected document's sub-tree with workspace server 112 h 's master copy of the sub-tree prior to viewing and/or editing the selected document.
- Client 116 a then unfreezes container tree 124 and method 1400 proceeds to step 1412 .
- step 1412 client 116 a has a fully updated copy of the document sub-tree for the selected document.
- one of the editors included in client 116 a is invoked to display the selected document to user 102 a and, if user 102 a has owner or worker privileges in the selected workspace 122 s , to allow the user 102 a to edit the selected document.
- Client 116 a is able to determine the data type of the selected document based on the class of the parent article of the document sub-tree.
- Client 116 a invokes the appropriate editor to display the document and to allow user 102 a to edit it. Method 1400 then terminates.
- the selected document is a text document, such as text document 190 , which is stored in document sub-tree 412 of container tree 124 (FIG. 5), then client 116 a will initiate text editor 800 .
- text editor 800 is explained below in the context of text document 190 .
- a text document is divided into sections which, in the present embodiment, correspond to the text document's paragraphs.
- Each paragraph is stored in a Paragraph_Article 370 , which is contained in a sibling container.
- the sibling containers form a linked list in an order corresponding to the order of the associated paragraphs in the text document.
- the specific sibling container used for any particular paragraph depends on whether the paragraph contains elements other than text.
- the sibling containers have a common parent container 410 .
- Text editor 800 is configured to display a text document to user 102 by progressively extracting, from the linked list of sibling containers, the text of each paragraph as well as any associated elements and displaying the extracted information.
- text editor 800 will display text document 190 in a window on the display screen of client computer 119 a .
- text editor 800 When text editor 800 is initially invoked to edit text document 190 , it begins extracting and displaying the text of the first paragraph of document 190 from article 426 in container 424 , and progressively extracts and displays text and other elements (such as graphic image 193 stored in containers 444 , 448 , 452 and 456 ) from successive sibling containers and their children to fill the display window in which document 190 is displayed.
- text editor 800 provides a caret which may be moved in the display window by user 102 a using typical caret navigation keys.
- text editor 800 When the caret is moved out of the portion of text document 190 displayed in the window, or when user 102 a scrolls up or down through the text document 190 , text editor 800 extracts additional text and other elements of the text document 190 from document sub-tree 412 and displays these elements. In this fashion, text editor 800 allows a user 102 to view any part of text document 190 .
- text editor 800 In addition to allowing a user 102 to view text document 190 , text editor 800 also permits users 102 with owner or worker privileges in workspace 122 to edit the contents of the selected document, except for sections of the document stored in containers in which the user's user_handle has been entered in the container_excluded_handle_list field. Before allowing a user 102 , such as user 102 a , to edit a section of text document 190 (or in conjunction with allowing a user 102 to do so), client 116 obtains a lock for the corresponding container as described below.
- the term “edit a document” refers to any activity or operation that may modify the contents of the document or any section of it.
- this includes any change in the character_data field of a Paragraph_Article 370 in the document's sub-tree. Editing also includes any activity that may result in the addition of new sections to a document or the deletion of existing sections.
- client 116 checks the container_lock_handle field of its local copy of the associated container. If it is Null or if it the user_handle of user 102 a , transmits a Lock request to workspace server 112 h to lock the corresponding container, 140 . If the container_lock_handle field is not Null, then text editor 800 provides an indication (such as a message on the screen of client computer 119 a or an audio indication) that the container is locked by another user 102 . Text editor is configured to interpret any of the following actions by a user 102 as an indication that the user wishes to edit a section of a text document:
- some of these actions may not automatically be interpreted as an indication that a user 102 wishes to edit a section of a document and/or additional actions may be interpreted as such an indication.
- text document 190 is displayed on the screen of client computer 119 a
- user 102 a may edit paragraph 192 c by positioning the caret in paragraph 192 c and then pressing a Lock button displayed by text editor 800 or by pressing certain character keys on the attached keyboard or by deleting any portion of the text.
- Text editor 800 is configured to allow a user 102 to simultaneously lock more than one section of a text document to facilitate editing of a portion of the text document longer than a paragraph.
- a user 102 may lock multiple sections of a text document by selecting, either via mouse or keyboard commands, some or all of the sections and pressing the Lock button. After locking one section of a text document, a user 102 may also lock additional sections of the document by moving the caret to another paragraph of the text document and pressing a character key or deleting one or more characters.
- text editor 800 is configured to allow only contiguous parts of a text document to be locked by one user 102 .
- a user 102 may only obtain locks for paragraphs that are adjacent to one another in the list of child sibling containers of the parent container 410 of a text document (i.e containers 420 , 424 , 428 , 432 , 436 (FIG. 5) in the case of text document 190 (FIG. 2)).
- workspace server 112 h checks the container_lock_handle field of each indicated container. If all of the indicated containers 140 are unlocked, workspace server 112 h locks all of them by setting their container_lock_handle field to the requesting user's user handle. Workspace server 112 h then transmits a Confirm Lock message to text editor 800 . Text editor 800 may then display the locked sections of the text document in a selected color to indicate that they have been locked. (Text editor 800 is a part of client 116 and is able to communicate with workspace server and other entities using the communication link established in step 1208 ). If one or more of the identified containers is already locked by another user 102 (i.e. the container_lock_handle field records the user_handle of the other user 102 ), workspace server 112 h transmits a Refused Lock message to text editor 800 .
- text editor 800 may optionally be configured to display a message indicating that the paragraph (or, more precisely, its corresponding container 140 ) is locked by another user and therefore cannot be edited. The other user may or may not be identified in the message.
- text editor 802 may optionally be configured to allow a user to begin editing a paragraph after first indicating that he wishes to do so, but before a Confirm Lock message is received. This allows the user to edit paragraphs without delays resulting from communication delays between text editor 800 and workspace server 112 h . If a Refused Lock message is received, any editing performed on the paragraph (or any formatting change) is discarded.
- workspace server 112 h When workspace server 112 h transmits a Confirm Lock message to a client 116 , it also broadcasts a Lock Update message to all clients 116 connected with the workspace to advise them of the newly granted lock(s) and the user_handle of the user 102 that obtained the lock(s). For example, if user 102 a locks containers 424 and 428 , workspace server 112 h will transmit a Lock Update message to all clients indicating both user 102 a 's user_handle and identifying the locked containers. Client 116 a , which transmitted the Lock Request message, ignores the Lock Update message after determining that it relates to a lock obtained by client 116 a .
- workspace server 112 h may transmit a Lock Update message to all clients with the exception of the originating client 116 a . Every other connected client 116 modifies the container_lock_handle field of the indicated containers 140 , if those containers have been previously downloaded by the particular client 116 . In this way, every client 116 that is currently displaying a document (through one of the editors built into the client 116 ) is advised of every lock granted for any section of the document. Similarly, workspace server 112 h transmits an Unlock Update message advising all clients when a container is unlocked (See step 1511 (FIG. 17)).
- While one user 102 a is editing one locked portion (consisting of one or a more contiguous sections) of a text document, another user (i.e. user 102 b ) may lock and edit another portion of the text document.
- Workspace server 112 h will accept and confirm Lock Requests from different clients 116 (or, more precisely, from their text editors) at the same time.
- Each text editor 800 may display unlocked sections, sections locked by the local user (i.e. user 102 a of the client 116 a ) and sections locked by other users 102 in different colors to identify their status.
- Text editor 800 may be configured to display sections locked by all different users in different colors, or may display the user_screen_name of the user 102 that has locked each section adjacent to or over the section. In this way, a user 102 is kept informed about any locked sections of the document that he is viewing, even if the user has no sections of the document locked.
- text editor 800 posts the edited sections by transmitting the following to workspace server 112 h:
- text editor 800 transmits the container_id of the parent container of the containers so that a single Post request may be used to identify the location in the container tree 124 under which the modified containers are to be posted.
- text editor 800 may post the new or updated container(s) by simply transmitting the Post request and the container(s) themselves.
- workspace server 112 h will transmit either a Confirm Post message or a Refuse Post message. If a Confirm Post message is received from workspace server 112 h , then the provisionally posted containers are made permanent. If a Refuse Post message is received, then text editor 800 may be configured to discard the previously provisionally posted edits and restore the container sub-tree to the condition prior to obtaining the locks on the posted containers, or it may be configured to re-transmit the Post message one or more times, or it may be configured to display a message to user 102 a and allow him to select a course of action, or a combination of these actions.
- Text editor 800 may make various types of Post requests. The simple Post request above does not result in the containers that are being posted becoming unlocked. If the user 102 a indicates that a lock is to be released, or if text editor 800 determines that a lock must be released, text editor 800 will transmit a Post and Unlock request, which is otherwise the same as a Post request.
- text editor 800 automatically adds and deletes containers in a provisional list of child sibling containers of the parent container 410 of the document sub-tree as new sections (paragraphs) are added and deleted. Text editor 800 also permits the user 102 a to add, edit or delete embedded elements within paragraphs. When the user 102 attempts to edit or delete an element embedded within a paragraph, text editor 800 requests a lock, as described above, for the associated child container of the sibling container in which the paragraph text is stored. Text editor 800 then invokes the appropriate editor for the type of embedded data. If the embedded data is text, then text editor 800 may control the editing of the embedded text itself or may invoke another instance of a text editor 800 to control the editing of the embedded text.
- the user 102 typically presses the Enter key while the caret is positioned in a paragraph (“the current paragraph”) which is either unlocked or is locked by the user 102 . If the user presses the Enter key while the caret lies in an unlocked paragraph, client 116 transmits a Lock request to gain a lock on the unlocked paragraph.
- a new paragraph is created and inserted into the text document either before or after the current paragraph depending on the position of the caret when the Enter key is pressed. If the caret lies prior to the first character in the current paragraph, a new empty paragraph is inserted into the document prior to the current paragraph.
- the current paragraph is truncated at the caret location and the remaining character data is used to initialize a new paragraph which is inserted after the current paragraph. If the caret lies after the final character in the current paragraph, a new empty paragraph is inserted into the document after the current paragraph.
- User 102 a may similarly add new paragraphs immediately prior to, within, between, or immediately after paragraphs locked by the user 102 a .
- text editor 800 creates a new Sibling_Childless_Container 316 (FIG. 7) for the new paragraph and links it into the provisional list of child sibling containers of the parent container for the document sub-tree. If an embedded element is subsequently added to the paragraph, the Sibling_Childless_Container 316 may be replaced with a Sibling_Array_Container 314 or a Sibling_List_Container 312 (FIG. 7).
- Text editor 800 manages merging of adjacent paragraphs in a similar manner. If the user 102 presses the Backspace key while the caret is positioned prior to the first character in a paragraph, an attempt is made to merge the current paragraph with the previous paragraph. If the user 102 presses the Delete key while the caret is positioned after the final character in a paragraph, an attempt is made to merge the current paragraph with the next paragraph. If either of the paragraphs to be merged is not locked by user 102 a , text editor 800 makes a Lock request for unlocked paragraph(s).
- text editor 800 combines the paragraphs by extracting the character data from one paragraph (or more precisely, from the Paragraph_Article field of the article 142 contained within the container 140 corresponding to the paragraph) and adding it to the character data in the other paragraph.
- Text editor 800 removes the empty paragraph from the document and removes its corresponding sibling container from the provisonal list of sibling containers in the document sub-tree, updating the list_next_pointer and list_previous_pointer fields of the adjacent containers in the provisional list.
- workspace server 112 h replaces the two locked containers 140 with the single container containing the merged Paragraph_Article.
- text editor 800 (or another editor invoked to control editing of an embedded element) provisionally creates new containers and/or modifies existing containers and posts them to workspace server 112 h .
- a new container typically a Sibling_Childless_Container 316
- a new Paragraph_Article 370 (with character_data field set to new text)
- the remaining fields of the new containers are also appropriately initialized.
- text editor 800 Upon receiving a Confirm Post message from workspace server 112 h , text editor 800 (or another editor invoked to control editing of an embedded element) freezes its local copy of container tree 124 , updates the document sub-tree (making provisional containers permanent), and unfreezes container tree 124 .
- Text editor 800 (and any other editor that is invoked by text editor 800 ) also modifies the contents of the parent article of a document sub-tree to update the summary_history field to track major events in the history of a document, the text_format and text_document_format fields to modify the default text and document formats, as well as the formatting_data and change_tracking_data fields to track subsequent format changes and the editing history of the document.
- Some fields of the parent article, such as the text_document_statistics field may not be calculable until child containers are ready to be posted.
- an alternative form of a Post request may be used to post the unlocked parent container 410 at the same time as the child containers are posted.
- text editor 800 updates the calculated fields in a provisional copy of the parent article in anticipation of workspace server 112 h successfully replacing the 2 . unlocked parent container 410 .
- the parent container and new or modified child containers are posted to workspace server 112 h using a Blind Post request as described below in step 1506 of method 1500 in FIG. 17.
- text editor 800 updates the structure and contents of its local copy of container sub-tree 412 . If user 102 a is editing paragraph 192 a , then text editor 800 will have obtained a lock for container 420 for user 102 a . If user 102 a then moves the caret into paragraph 192 b and begins to edit it, text editor 800 will obtain a lock on container 424 . If user 102 a then moves the caret into graphic image 194 and indicates that he wishes to edit it (for example, by double clicking on graphic image 194 ), then text editor 800 will invoke a graphic image editor 802 to control the editing of graphic image 194 .
- text editor 800 posts and unlocks all containers that it currently has locked before allowing the embedded element to be edited.
- Graphic image editor 802 is then invoked and allows user 102 a to identify one or more sections of graphic image 194 that he wishes to edit.
- graphic image editor 802 obtains a lock on the corresponding container. For example, if user 102 a wishes to edit the upper right corner of graphic image 194 , then graphic image editor 802 will obtain a lock on container 450 .
- another user 102 may lock another section of graphic image 194 by locking one or more of containers 444 , 452 and 456 .
- Graphic image editor 802 may display the boundaries of locked sections of graphic image 194 in different colors to identify users 102 that have locked those sections, based on the locks that graphic image editor 802 has obtained and based on Lock Update messages received from workspace server 112 h.
- the text editor may allow embedded elements to be edited without releasing its locked containers.
- Such a text editor may be configured to lock non-embedded and embedded sections of a document, either contiguously (based on their appearance in the document) or non-contiguously.
- graphic image editor 802 will obtain a lock on container 440 and display a dialog box which allows the editable attributes recorded in the image_attributes field to be edited. Graphic image editor 802 will then post container 440 .
- the graphic image editor 802 will obtain a lock on container 440 and all of its child containers 444 , 448 , 452 , 456 that are used to store graphic image 194 and then display a dialog box allowing user 102 to specify the new division of image 194 into sections.
- Graphic image editor 802 will then modify the child containers (including adding and/or deleting containers) as well as modifying container 444 (the array_dimensions and child_array fields).
- Graphic image editor 802 will then post all of the locked containers.
- text editor 800 and graphic image editor 802 Prior to posting any container, text editor 800 and graphic image editor 802 (and all other parts of client 116 ) recalculate the container_article_length field of the container.
- the presentation editor 804 is configured to allow a user 102 to edit the structure and content of a presentation document, such as presentation document 200 .
- a slide editor 810 that is invoked to allow a user 102 to edit an individual slide.
- a slide may comprise various types of data such as text (i.e. paragraphs 214 on slide 202 ), images (i.e. graphic image 220 on slide 206 ), shapes (i.e. vertical line 210 on slide 202 and arrow 216 on slide 204 ), windows for displaying audio/video clips (i.e. audio/video clip 218 on slide 204 ) and other elements.
- slide editor 810 invokes an appropriate editor that is configured to lock the associated containers 140 , allow a user 102 to edit the articles of the containers, update the container fields and then post the revised containers 140 .
- a user may wish to make a common change to one or more elements on a slide. For example, a user may wish to select a number of elements and move them all 20 pixels to the left.
- Slide editor 810 allows this by obtaining a lock for the containers corresponding to all of the selected elements, allowing the user to specify the change desired and then modifying the articles of all of the locked containers before posting them. In this example, the article_window field of the associated article for each element would be modified.
- slide editor 810 is configured to transmit a Lock Request to obtain a lock for the container associated with the article, and then to transmit a Post and Unlock request after the Lock is obtained and after the user 102 is finished moving the element. It is possible that due to communication speed limitations, the user may be finished moving the element before the lock is obtained. In this case, slide editor waits until after the lock is obtained to modify the locked container and then posts it.
- slide editor 810 may be configured to allow a user to move or edit a slide element without locking it.
- the container corresponding to the element is posted using a Blind Post request described below in step 1506 of method 1500 in FIG. 17.
- Changes to the default properties of the presentation are controlled by the presentation editor 804 in a similar way by locking the parent container of the presentation document's document sub-tree, allowing the default_background, default_title_properties, default_text_properties and default_shapes of its article to be edited, then transmitting a Post and Unlock message to update the parent container and its article.
- the other editors of clients 116 are similarly configured to allow documents and embedded elements within documents to be edited by a user by locking the containers associated with one or more sections of the document or element, allowing the user to edit the selected sections, updating the articles of the locked containers and posting the locked containers.
- the child containers of an Array_Container 304 may have an order relationship.
- the “z-order” of elements the order in which elements are drawn on a slide, so that elements drawn later overlap or obscure elements drawn earlier
- the “z-order” of elements in a slide may be determined by the order in which the pointer to the child container associated with each element appears in the child_array field of their common parent Array Container 304 . If a user edits the z-order of elements in a slide, slide editor 810 will lock the Array Container 304 , edit its child_array field, and post the container. This allows the z-order of elements to be changed without locking all containers for each element being reordered and may reduce the amount of data that must be transferred if the elements being reordered are large.
- FIG. 17 illustrates a method 1500 by which a workspace server 112 h responds to a Post or a Post and Unlock message from a client 116 , such as client 116 a .
- Method 1500 begins in step 1502 , in which workspace server 112 h receives a Post request from client 116 a.
- Method 1500 next proceeds to step 1504 in which workspace server 112 h freezes its master copy of the container tree 124 , effectively freezing the header file 660 and the document files 662 .
- workspace server 112 h freezes its master copy of the container tree 124 , effectively freezing the header file 660 and the document files 662 .
- a separate process is instantiated within workspace server 112 h to handle every client that connects to workspace 122 s . Freezing the master copy of the container tree 124 ensures that none of these other processes modifies shared structures while the Post request is being handled.
- Method 1500 next proceeds to step 1506 , in which workspace server 112 h checks its master copy of the container tree 124 to ensure that the Post request may be completely accepted.
- the Post request received in step 1502 may include containers that are being blindly posted by client 116 a (i.e. which are being posted without having been previously locked by client 116 a ) and containers 140 which are being posted after having previously being locked by client 116 a (i.e a regular Post request).
- Workspace server 112 h will accept a Blind Post request for a container 140 if:
- the time stamp of the container received from in the Post request matches the time stamp of the container in the master copy of the container tree 124 .
- Workspace server 112 h will accept a regular Post request if the container is locked in the master copy of container tree 124 by user 102 a (i.e. the container_lock_handle field of the container contains user 102 a 's user_handle).
- a Post Refused message may include an explanation of the reason that a Post request was refused, allowing the client 116 that originated the Post request to display an appropriate message to its user 102 proceeds to step 1508 .
- workspace server 112 h modifies the container tree 124 to include the containers posted by client 116 a . This may involve editing header file 660 and/or document files 662 . Any out-dated containers 140 are discarded. In another embodiment, such out-dated containers may be stored temporarily or permanently to allow older versions of documents stored in a workspace 122 to be recreated. If a new container 140 is posted (i.e. a container 140 that did not exist in the container tree 124 previously), it is added to the container tree 124 and header file 660 and document files 662 are updated accordingly.
- System 100 supports several different types of Post requests, which may be specific to the kind of parent container 410 involved.
- the response of workspace server 112 h to the Post request received in step 1502 may depend on the type of containers 410 involved.
- text document 190 is stored using a List_Container 302 as the parent container 410 of document sub-tree 412 and using sibling containers 420 , 424 , 428 , 432 and 436 to store paragraphs 192 a , 192 b , 192 c , 192 d and 192 e .
- user 102 a may perform any editing operation that adds paragraphs before paragraphs 192 c , between paragraphs 192 c and 192 d or after paragraph 192 d .
- workspace server 112 h processes them by splicing all of the posted containers into the sibling list, in the place of the previously locked containers 428 and 432 .
- workspace server 112 h updates the list_next_pointer and list_previous_pointer fields of any containers adjacent to the newly spliced containers in the sibling list.
- post transactions relating to Array_Container 304 and its children may be handled using an add children operation, which adds one or more posted containers to the Array_Container's list of child of containers 140 , a replace children operation, which allows some or all of the containers 140 locked by a client 116 a to be replaced in one Post request or delete children operation, which allows some or all of the containers 140 locked by a client 116 a to be deleted.
- an add children operation which adds one or more posted containers to the Array_Container's list of child of containers 140
- a replace children operation which allows some or all of the containers 140 locked by a client 116 a to be replaced in one Post request or delete children operation, which allows some or all of the containers 140 locked by a client 116 a to be deleted.
- All containers 140 successfully posted by a client will be valid containers and will accordingly have their container_valid flags set to TRUE. All containers that are stored in the header file 660 and document file 662 at any time are considered valid containers, even if they are locked and are currently being edited by a user 102 .
- Method 1500 next proceeds to decision step 1510 . If the Post request received from client 116 a includes an Unlock request, method 1500 proceeds to step 1511 . Otherwise, the request is merely a Post request and method 1500 proceeds to step 1512 .
- step 1511 workspace server 112 h unlocks all containers included in the current Post and Unlock request (other than those containers deleted in step 1508 ) by setting their respective container_lock_handle fields to Null.
- Method 1500 next proceeds to step 1512 , in which the workspace is unfrozen.
- Workspace 112 h returns a Confirm Post message to client 116 .
- client 116 freezes its local copy of container tree 124 , updates container tree 124 , then unfreezes container tree 124 .
- New containers 140 which were provisionally created by client 116 prior to the Post request are added to container tree 124 .
- Existing containers for which provisional copies were made by client 116 prior to the Post request are replaced in container tree 124 .
- client 116 's local copy of container tree 124 is synchronized with workspace server 112 h 's master copy of container tree 124 .
- Method 1500 next proceeds to decision step 1514 , in which workspace server 112 h determines the method in which all clients 116 that are connected to the workspace 122 are to be advised of the changes to the container tree 124 .
- Workspace server 112 h determines the size of an Update Message corresponding to the Post request received in step 1502 , including, if applicable, an Unlock message. Workspace server 112 h may do this by summing the sizes of all posted containers and any additional information that may have to be sent, such as the identify of the originating client 116 a . The size of such an Update message is compared to a selected Push Update Threshold. In the present embodiment, the Push Update Threshold is 32 kilobytes, although a different threshold may be chosen based on the speed of the communication network 114 and other factors. If the Update Message exceeds the Push Update Threshold, method 1500 proceeds to step 1518 . Otherwise, method 1500 proceeds to step 1516 .
- step 1516 workspace server 112 h prepares an Update Message containing the entire posted sub-tree, including the contents of every container 140 that was posted, and identifies containers that have been unlocked as part of the Post request.
- the Update Message also identifies the client 116 (the “originating client”) from which the Post request was received in step 1502 .
- Each posted container is set out in its current valid form as it is recorded in the header file 660 or the document files 662 .
- This Update Message is referred to as a “Chubby Update Message”, since it includes the entire posted sub-tree and the full contents of the containers updated in step 1508 .
- Workspace server 112 h then transmits the Update Message to all clients connected to the workspace. Method 1500 then ends.
- step 1518 workspace server 112 h creates a “Skinny Update Message” which comprises the entire posted container sub-tree with the container_article field set to Null for all containers.
- Each container in the sub-tree is transmitted in a special format in which each node contains the container_id of the container 140 at that node and a “post_flag”, which is marked TRUE if the container was posted, and FALSE if it was not posted in step 1508 .
- the Skinny Update Message also identifies the originating client 116 from which the Post request was received in step 1502 .
- Workspace server 112 h transmits the Skinny Update Message to all clients 116 connected to the workspace 122 .
- Method 1500 then ends.
- Workspace server 112 h broadcasts Update messages to all clients 116 connected with an active workspace 122 in response to various client-server transactions. In this way, every client 116 that is currently connected to workspace 122 s is advised of the activities of every other client 116 as they are posted. A client 116 a which performs the originating transaction ignores all Update messages that relate to its own connection. Clients 116 respond to an Update message in a manner that is appropriate to the kind of Update message being broadcasted.
- System 100 supports several different kinds of Update messages, including Connect Update, Disconnect Update, Lock Update, Unlock Update, Post Update, Post and Unlock Update, etc.
- the Update message corresponds to the originating transaction and additionally includes the user_handle of the originating user.
- FIG. 18 illustrates a method 1600 by which a client 116 processes an Post Update message (which may be Chubby or Skinny) from a workspace server 112 h.
- Post Update message which may be Chubby or Skinny
- Method 1600 begins in step 1602 in which the client 116 receives the Update Message.
- Method 1600 next proceeds to decision step 1603 , in which the originating user 102 of the Post which resulted in the Update Message is identified. If the originating user 102 is the same user operating the client 116 , then the Update Message is discarded and method 1600 ends. Otherwise, method 1600 proceeds to step 1604 .
- step 1604 the client 116 freezes its local copy of the container tree 124 to ensure that no editor or other process modifies the container tree.
- Method 1600 next proceeds to decision step 1606 . If the received Update Message is Chubby, then method 1600 proceeds to step 1608 . Otherwise, method 1600 proceeds to step 1612 .
- step 1608 client 116 updates its local copy of the container tree 124 to include the updated containers 140 .
- the Chubby Update Message relates to a document for which client 116 has never done a View/Edit transaction (Method 1400 , FIG. 16) during the current session, then only the parent container 410 of the document is updated. The remaining containers in the Chubby Update Message are discarded. If, within the document sub-tree for a document for which a View/Edit transaction has been performed, client 116 has not previously gotten a container that is indicated in the Chubby Update Message, the container is added to the client's local copy of container tree 124 and is updated. If the Chubby Update Message indicates that a container 140 has been deleted from container tree 124 , client 116 deletes the container 140 from its local copy of container tree 124 .
- Method 1600 next proceeds to step 1610 , in which client 116 unfreezes its local copy of container tree 124 .
- Method 1600 next proceeds to step 1620 .
- step 1612 client 116 marks its local copy of each container 140 indicated in the Skinny Update Message as invalid by setting the container's container_valid flag to FALSE. If the Skinny Update Message relates to a document for which client 116 has never done a View/Edit transaction (Method 1400 , FIG. 16) during the current session, then only the parent container 410 of the document is marked as invalid. The remaining containers in the Skinny Update Message are discarded. If, within the document sub-tree for a document for which a View/Edit transaction has been performed, client 116 has not previously gotten a container that is indicated in the Skinny Update Message, the container is added to the client's local copy of container tree 124 and marked as invalid.
- Method 1600 next proceeds to step 1614 , in which client 116 unfreezes the container tree 124 .
- Method 1600 next proceeds to step 1616 , in which client 116 determines if any container in the document sub-tree of the document it is currently displaying has been marked as invalid. If not, method 1600 proceeds to step 1620 . Otherwise, method 1600 proceeds to step 1618 .
- step 1618 client 116 gets all invalid containers in the document sub-tree for the document that it is currently displaying. This is done in the same manner as in step 1406 .
- Method 1600 next proceeds to step 1620 .
- step 1620 client 116 updates its display if required. For example, during text editing, this may result in some paragraphs that are currently being displayed being modified due to edits originated in other clients 116 .
- the associated user 102 i.e. user 102 a of client 116 a
- method 1600 may operate differently.
- all Update Messages may be Chubby. This may require substantially more data to be transmitted to all clients, but eliminates the need to update invalid containers as in step 1618 .
- all Update Messages may be Skinny, so that a document which was previously viewed, but is not currently being viewed by a user 102 is not kept up to date, potentially reducing the memory requirements for container tree 124 .
- clients 116 may be configured to update their document sub-trees for a document that is not currently being displayed when a Chubby Update Message is received only if it is smaller than a selected threshold. If the Chubby Update Message exceeds the threshold, all containers in the client's local copy of the document sub-tree are deleted, and if the associated user decides to view or edit the document again, the client gets it in step 1408 .
- One embodiment of the present invention is implemented using JavaTM, a non-platform specific programming language that operates within network browsers. This has the advantage that system 100 may be used on any platform that supports Java. This is not necessary, however, and any particular embodiment of present invention may operate only on one or more selected platforms and specific versions of clients 116 may be developed for each platform.
- Java does not support multiple inheritance, which is used to describe the definition of container and article classes. A skilled person will be capable of defining equivalent container and article classes without using multiple inheritance.
- the present invention may be implemented using a programming environment such as MicrosoftTM C# and .NETTM.
- a presence table may be used.
- a presence table includes one record for each user 102 who is presently logged into the system.
- the record for each user has the following structure: Field Contents presence_handle Unique identifier identical to the user_handle field of the user 102's user record in user database 106 presence_id Unique identifier identical to the workspace_id field for the workspace 122 to which user 102 is presently connected, or Null in the event user 102 is not presently connected to a workspace 122 presence_time_stamp Records the last time at which the user 102 communicated with a master server 110. This field is kept up to date by the master servers 110.
- the presence table is used to measure overall user load on the system and to prevent duplicate logins. It is also used to timeout and disconnect inactive users 102 .
- a user 102 performs a Login transaction as described above in method 1000 (FIG. 12)
- a record is added to the presence table with its presence_handle field set to the user_handle of the user 102 and the presence_id field set to Null.
- the presence_id field of user 102 's record in presence table 109 is updated to record the workspace_id of the newly opened workspace 122 .
- the presence_id field of user 102 's record in presence table 109 is reset to Null.
- the user 102 logs out of system 100 the user 102 's record is removed from presence table 109 .
- a master server 110 may forcibly log out users who are not actively using the system. If a user's record in the presence table indicates that the user is not connected to a workspace (i.e. the presence_id field is Null) and the presence_time_stamp field has not been updated for a selected time_out_threshold, the user may be forcibly logged out.
- workspaces servers 112 may use a separate presence table to track the activity of each user connected to a workspace.
- a user who has not communicated with a workspace server 112 for a selected timeout threshold may be forcibly disconnected from the workspace.
- the environment may provide a facility for timing out inactive connections between workspace servers 112 and clients 116 .
- System 100 has been described using a single container tree for storing all documents within a workspace 122 .
- different data structures may be used to store the document sub-tree for each document within a workspace.
- each workspace may be stored within a single folder or directory within file system 104 .
- each document sub-tree may stored in a separate file.
- the member list 143 may be stored in a separate file, which may have a pre-selected name and the contents of the root container 400 of the workspace 122 may be set out in a separate file, which may also have a pre-selected name.
- Update messages transmitted by a workspace server 112 to update clients 116 regarding locks, posts, membership changes, etc. have been described as being sent to all clients 116 , including the client 116 that originated a Post message that then resulted in the Update message.
- the originating client has been described as ignoring such Update messages. In an alternative embodiment, the originating client may be excluded from the broadcast of such Update messages.
- the workspace server initiates a separate process to communicate with the client 116 .
- Client 116 initiates two separate threads to communicate with the separate process created for the client 116 : a primary communication thread and a listener thread.
- the primary communication thread is used to perform Lock requests, Get Requests, Post Requests and other communications with the workspace server.
- the listener thread is intended only to receive Update messages from the workspace server 112 .
- the workspace server 112 may initiate a single broadcast thread which communicates with the listener threads of all clients 116 connected to a workspace 122 .
- the contents of some or all of the articles 142 contained within the containers 140 may be encrypted.
- the containers 140 will not be encrypted to allow the other container fields to be read.
- the contents of the stored document may be concealed. Every member of a workspace, or at least every connected member of a workspace 122 may be provided with a key for decrypting the encrypted articles.
- clients 116 create provisional containers to store modified versions of containers 140 which are then posted to workspace server 112 h . If the Post request is confirmed, the provisional containers are made permanent by adding them to the client's local copy of the container tree 124 . Alternatively, the client 116 may be configured to modify its local copy of container tree 124 and to store the original version of modified containers in provisional containers, which would then be re-inserted into the client's local container tree 124 , if a related Post request is refused.
- header file 660 and document files 662 are kept up-to-date at all times by workspace server 112 h .
- the parent container 410 for each document sub-tree is stored in both the header file 660 and one document file 662 .
- the directory 664 record for each parent container 410 in the header file 660 may include a field for indicating that the parent container 410 has been modified, but that the modification has not been made in the corresponding document file 662 . Subsequently, when the document file 662 is accessed, the parent container 410 may be updated in conjunction with another change to it.
- System 100 has been described with an Array_Container 304 as its root container 400 .
- a List_Container 302 may be used as the root container 400 for a workspace 122 .
- Sibling_List_Containers 312 and Sibling_Array_Containers 314 may be used in the place of List_Containers 302 and Array_Containers 304 as the parent containers 410 for document sub-trees.
- embedded data is defined in direct or indirect child containers of another container.
- data may be embedded in a document by reference.
- An “Embed_By Reference_Article” may be used to refer to a container at the head a sub-tree that stores the embedded data.
- An editor included in client 116 may be configured to treat the embedded data as if it was linked directly in the document sub-tree.
- a complete up-to-date client is installed on the user's client computer 119 a in step 1005 , if necessary.
- client computer 119 only those portions of client 116 that are needed by a user 102 may be transmitted to the client computer 119 .
- the user may be provided with a list of out-of-date components in his installed client 116 and may be permitted to select the components that he wishes to update. If any other component becomes necessary for client 116 , that additional component may be subsequently updated.
- each component of client 116 may be updated automatically every time it is invoked by first checking to see if the latest version of the component is included in a user's installed client 116 and automatically updating it if the installed version is out-of-date.
- a member's privileges within a workspace are defined in the member's record 144 in the workspace's member list 143 and are constant for all documents in the workspace 122 .
- a member's privileges may be defined for each document in a workspace, as mentioned above.
- various editing operations for each document may be restricted to certain members. For example, an owner of a text document may be permitted to change its default text_attributes, but workers may not be permitted to modify this field or the formatting_data field of any Paragraph_Article 370 . This allows only the owner to modify the text_attributes of the entire document. At the same time, another document may have different restrictions for the members permitted to access it.
- System 100 has been described as permitting a user 102 to edit a document in a window using an editor incorporated into client 116 .
- An editor may be configured to allow a user to open multiple windows for a single document. Each window independently displays one or more sections of the document.
- two or more different editors, or two or more instances of the same editor may be instantiated to allow a user 102 to simultaneously edit two or more documents within a workspace 122 .
- FIG. 19 illustrates a method 1700 for conducting a “live” presentation of a presentation document.
- a user 102 with owner or worker privileges in a workspace 122 may conduct a live presentation using a presentation document, such as presentation document 200 .
- the user 102 who conducts the presentation is the “presenter” and all other users 102 who are connected to workspace server 112 h and who observe the presentation are “observers”. More than one presentation may be conducted at the same time in a workspace 122 . While a presenter is conducting a presentation and observers are observing it, other non-observing users 102 who are connected to workspace 122 may simultaneously view or edit any document in the workspace 122 , including the presentation document being presented.
- Method 1700 begins in step 1702 , in which a presenter 102 a 's client 116 a sends a Get Document request to workspace server 112 h as described above in step 1216 of method 1200 to retrieve a presentation document.
- Method 1700 proceeds to step 1704 , in which presenter 102 a starts a presentation.
- client 116 a sets the current_slide field of the parent Presentation_Document_Article 364 to the value of the slide_identifier field of a selected initial Slide_Article 366 , and then blindly posts the parent container 410 as described above in method 1500 .
- Every other client 116 that receives the Post Update message determines that the Post Update message relates to the start of a presentation.
- the other clients 116 which may be referred to as observer clients, may make this determination by observing that the current_slide field of the parent article has changed from ⁇ 1 to another value, or based on a “Begin Presentation” indicator included with the Post Update message.
- Method 1700 next proceeds to decision step 1706 .
- Each observer client displays a message to its associated user 102 indicating that the presentation is starting. The associated user 102 may choose to observe the presentation or ignore it. If the user 102 chooses to observe the presentation, method 1700 proceeds to step 1708 . Otherwise, method 1700 terminates. A user 102 may choose to later observe an active presentation, in which case, method 1700 is entered at step 1708 .
- step 1708 the observer client automatically activates a presentation viewer and gets the presentation document if it has not already been gotten.
- the presentation viewer displays the slide corresponding to the current_slide field of the parent article.
- the presentation viewer responds to subsequent Update Post messages, generated by workspace server 112 in response to presenter 102 a re-posting the parent container, by displaying the slide corresponding to the current_slide field of the parent Presentation_Document_Article 364 . If the current_slide field is set to ⁇ 1, the presentation is complete and client 116 b goes to step 1210 .
- presentation editor 804 prompts the user 102 with a suitable message such as “This presentation is in progress. Do you wish to observe?”. If the user 102 chooses to observe the presentation, his presentation viewer is activated and the current slide is extracted and displayed as described above. If the user 102 chooses not to observe, he may later press a “Join Presentation” button, which is displayed by presentation editor 804 and slide editor 810 during an active presentation, to later observe.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Strategic Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Human Resources & Organizations (AREA)
- Bioethics (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Marketing (AREA)
- General Business, Economics & Management (AREA)
- Operations Research (AREA)
- Tourism & Hospitality (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
Description
- This invention relates to a system and methods for storing and simultaneous multi-user editing of documents, including text documents, presentation documents, graphic image documents, audio/visual clips and other types of documents.
- People often work together in groups to achieve common goals. Members of a workgroup should have convenient access to all of the documents relating to a topic or project. In contemporary workplaces, shared documents are usually stored on a file server connected to a network and accessible through networked computers. However, this arrangement proves restrictive when team members are situated in widely disparate locations.
- Most software applications are single-user systems. For example, with an image editing application such as Adobe Photoshop™, a user opens an image file and edits it. While one user works on an image file, other users may not simultaneously open and edit the same file. Similarly, most word processors are single-user systems. While one user has a file open and in use, other users may not simultaneously open and edit the file.
- When workers collaborate on a project, situations may arise in which two or more workers attempt to simultaneously access a shared document. Most collaborative groupware or computing environments offer limited or no support for such activity.
- A common approach to collaboration is to circulate documents, often as email attachments, among members of a team. In this arrangement, all team members agree to let one member (“ball carrier”) have exclusive control of a document until he or she finishes editing it and emails it to another team member. There can be only one ball carrier at a time, and only the ball carrier may edit the document. If other workgroup members edit separate copies of the document while the ball carrier has control of it, the multiple versions of the document must later be merged and conflicting co-edited sections resolved.
- Document type incompatibilities may arise when circulating a document in this manner. For example, a text document may become unreadable if different team members edit it using different word processors or even using different versions of the same word processor. Additionally, technical problems may arise with the transmission of email attachments. Some email servers arbitrarily restrict the size of attachments. Those that exceed a certain threshold size are not accepted. A large document, such as a large slide presentation document, may not be circulable to all workgroup members.
- Some applications achieve limited collaboration. For example, Microsoft NetMeeting™ provides application sharing. During a NetMeeting session, a user may share an application running on his or her machine with others. The various session participants take turns controlling the application. While one participant has control of the application, the others can watch his or her activity, such as editing or scrolling through a document, on their screens. However, as with document circulation, only one user may edit a document at any given time.
- Lotus Notes™, another widely used groupware system, uses a special database to store shared information. Replicas of the database are distributed to several network servers or client machines. A workgroup member with appropriate access privileges may make modifications to information stored in his or her local copy of a replicated database. All active replicas are periodically reconciled. However, if conflicts arise as replicas are compared and merged, Notes is limited in its ability to automatically resolve the conflicts.
- Several online services provide subscribers with a “virtual hard drive” for their documents. Subscribers may upload shared documents through a Web-based interface to a remote storage server accessible by all workgroup members. Documents may later be downloaded to any computer with Web access. This arrangement is a modest improvement over circulating documents via email attachments. However, while one team member has a document signed out of the service, others may not work on it.
- Thus, there is a need in the art for a system that facilitates simultaneous multi-user editing of shared documents. The system is preferably platform independent to allow users with different computing platform to utilize it.
- The present invention provides a system and methods for simultaneous editing of a document by two or more distinct users. The system will typically include one or more workspace servers and a number of client computers. Users access the system by using client software (or “clients”) which execute on the client computers.
- The system includes a file system in which a number of workspaces are stored.
- One or more documents are stored in each workspace. A master copy of each workspace is stored in the file system, which is accessible to the workspace servers. A user may login to the system and connect to a workspace using his client. Each client that is currently connected to a workspace also maintains a local copy of a part or all of the workspace in its client computer. Each workspace contains a container tree data structure and a membership list.
- The container tree data structure has a root container at its head and includes a document sub-tree for each document in the workspace. Each document sub-tree has a parent container at its head and each parent container is a child container of the root container. The root container is used to store information about the entire workspace, including the name of the workspace, a description of the workspace, pointers to each parent container, etc. Similarly, each parent container is used to store information relating to its associated document, such as the title of the document.
- Each document sub-tree includes one or more primary data containers, which are children of the parent container of the document sub-tree. The data of a document (i.e. the text of a text document) is divided into a number of sections, each of which is stored in one primary data container. Each container in the container tree may be independently locked by a user of the system.
- While a user has a container locked, he or she may exclusively edit the section of data stored in the container. The user may also delete the data in the container, in which case the container may also be deleted. The user may also add additional sections to the document, in which case additional containers may be created. Initially, all such editing changes are stored in provisional copies of the affected containers locally on the client computer. When the user has completed editing a locked section of a document, the user posts all of the provisional locked and new containers to a workspace server.
- A workspace server receives the locked and new containers, and incorporates them into the master copy of the container tree. In addition to modifying containers that he has locked, a user may attempt to modify unlocked containers using a Blind Post operation. The workspace server updates the blindly posted container, unless the blindly posted container is out-of-date or locked by another user.
- While one user has a section of a document locked, another user may have other sections of the same document locked. Each of the users may simultaneously edit his or her respective locked sections of the document. In this way, multiple users may simultaneously lock and edit different sections of the same document. Locking, editing and posting operations are done by each user using document editors built into the client software. In addition, the document editors allow a user to simply view a document by downloading sections of it and displaying them on a screen connected to a client computer.
- After updating the master copy of the container tree in response to a Post request, the workspace server broadcasts the updated containers to all other users (and possibly also to the user that originated the Post request) in an Update message. Each client modifies the user's local copy of the container tree, at least to the extent necessary to update any section of a document that is currently being displayed to a user. Update messages may be Chubby, in which case all information required to fully update a container is transmitted to a client, or they may be Skinny, in which case the client is only advised that a container has changed, but is not fully advised as to the change. The client may mark the container as invalid and subsequently obtain an up-to-date copy of it from the workspace server.
- Similarly, Update messages may be broadcasted to advise clients when containers are locked and unlocked. A client may be configured to indicate whether a container is locked by using an indicator on the screen of the client computer.
- The Update messages allow each user to see the changes being made to the workspace soon after they are posted to the workspace server.
- The system may also include a master server which regulates the registration of users, allows users to log into the system and other tasks. Access to each workspace may be restricted to members of the workspace, each of whom must be or become a user of the system prior to connecting to the workspace. Typically, a workspace is used to aggregate related documents. For example, all documents in a workspace may relate to a specific project, company or patient. The membership in the workspace may be limited to people who have an interest in the documents. Alternatively, a workspace may be used to aggregate any group of documents, which may not have any relationship between them.
- Members of a workspace may have different access privileges. For example, members with owner privileges may be allowed to perform any action in the workspace, including inviting new members to join the workspace. Members with worker privileges may be permitted only to edit documents stored within the workspace. Members with only viewer privileges may be permitted to view documents but may not be permitted to edit them.
- The division of each document into sections affects the granularity with which different users may edit adjacent sections of a document. In one embodiment, text documents are broken into paragraph sections, although this is not necessary. In other embodiments, sentence or character sections may be used to provide finer granularity.
- The documents stored in a workspace may be of many different types. Several container classes are defined to store documents of different types. In addition, a series of article classes are defined to store document sections of different data types. Each container contains an article. Actual section data is stored in the articles. The structural arrangement of the containers in the container tree corresponds to the structural arrangement of the sections in a document. The selection of the article within each container corresponds to the data type of the section stored in the article. For example, in one embodiment, data sections which have a natural “next” and “previous” relationship between them, such as paragraphs in a text document, are stored in a series of containers connected as a linked list. In the same embodiment, data sections within a document which do not have such a natural relationship are stored as independent children of a common parent container. For example, text and shape elements on a slide presentation are stored in separate containers which are not linked to one another.
- Documents may have many different types of data within them. In one embodiment of the present invention, a primary data type is selected for each document and the primary container structure corresponds to the primary data type. Data of other types may be embedded in the document and are stored using a container structure that corresponds to the data type and structure of the embedded data. Similarly, the articles used to store the data sections of the embedded data will depend on the data type of those sections.
- A particular embodiment of the present invention may be configured to support documents having various types of data. In one embodiment, documents of an unsupported data type may be stored within the container tree as generic documents. A parent container is created to store information about the generic document. The parent container has a single child container that includes a data buffer article. The generic document is stored within the data buffer article. A user may lock the child container and then download and edit the document using an editor not provided with the embodiment. The edited document may then be uploaded and stored within the data buffer and the lock may be released. This allows users to store and access generic documents as part of the embodiment.
- In another embodiment, a generic document may be divided into separate parts, each of which may be stored in a separate child container of the parent article, and each of which may be independently locked for editing by different users.
- Additional aspects of the present are described in the following description of several embodiments of it.
- A preferred embodiment of the present invention will now be described in detail with reference to the drawings, in which:
- FIG. 1 is block diagram of an embodiment of a simultaneous multi-user document editing system according to the present invention;
- FIG. 2 illustrates a text document used to illustrate the structure and operation of the embodiment of FIG. 1;
- FIG. 3 illustrates a presentation document used to illustrate the structure and operation of the embodiment of FIG. 1;
- FIGS. 4, 5 and6 illustrate a workspace of the embodiment of FIG. 1;
- FIG. 7 illustrates a hierarchy of container classes of the embodiment of FIG. 1;
- FIG. 8 illustrates a hierarchy of article classes of the embodiment of FIG. 1;
- FIG. 9 illustrates the storage of a generic document in accordance with the present invention;
- FIG. 10 illustrates a header file of the present invention;
- FIG. 11 illustrates a document file of the present invention;
- FIG. 12 illustrates a login transaction according to the present invention;
- FIG. 13 illustrates a Create Workspace transaction according to the present invention;
- FIGS. 14a and 14 b illustrates a method of connecting to a workspace according to the present invention;
- FIG. 15 illustrates a method of creating a new document in a workspace according to the present invention;
- FIG. 16 illustrates a View/Edit Document transaction according to the present invention;
- FIG. 17 illustrates a Post transaction according to the present invention;
- FIG. 18 illustrates a method for processing an Update message according to the present invention;
- FIG. 19 illustrates a method for conducting a presentation according to the present invention; and
- FIG. 20 illustrates a client of FIG. 1.
- Reference is first made to FIG. 1, which illustrates one exemplary embodiment of a collaborative
document editing system 100 according to the present invention.System 100 includes afile system 104, auser database 106, aworkspace database 108, one ormore master servers more workspace servers communication network 114 and one ormore clients -
Master servers 110 and workspace servers 112 are software processes (or tasks) that may operate on a single computer or may be distributed among various computers. For example, onemaster server 110 a and oneworkspace server 112 a may operate on afirst server computer 118 a, while anotherworkspace server 112 b operates on asecond server computer 118 b.Master servers 110 and workspace servers 112 are coupled tocommunication network 114.System 100 may include any number ofmaster servers 110 and workspace servers 112. Eachmaster server 110 and workspace server 112 will operate on a server computer 118. More than onemaster server 110 and workspace server 112 may operate on a particular server computer 118. -
Clients 116 are computer processes that will typically operate onseparate client computers 119, although one or more clients may operate on asingle computer 119.Clients 116 may also operate on one or more server computers 118, although this is not illustrated in FIG. 1. Eachclient 116 is coupled tocommunication network 114, allowing theclient 116 to communicate with anymaster server 110 and any workspace server 112. -
File system 104 is used to store one ormore workspaces -
Workspace database 108 is used to store information about each workspace 122 stored infile system 104. -
Master server 110 a andworkspace server 112 a communicate withfile system 104 andworkspace database 108 using aninternal communication link 120 withinserver computer 118 a.File system 104 andworkspace database 108 are also coupled tonetwork 114 allowingmaster servers 110 and workspace servers 112 located on other server computers 118, such asworkspace server 112 b located onserver computer 118 b, to communicate withfile system 104. -
User database 106 is used to store information about users 102, who are typically people that useclients 116 to access data stored in workspaces 122. The structure ofuser database 106 is described further below. -
File system 104,user database 106 andworkspace server 108 may be stored on adata storage device 121, which may be a magnetic or optical data storage device or any other type of data storage device or system. In the present exemplary embodiment, this data storage device is located withinserver computer 118 a. In another embodiment of a system according to the present invention, the data storage device may be located in any server computer and infact file system 104 anduser database 106 may be located in separated data storage devices ondifferent server computers 118 a. Server computers 118 other than the specific server computer 118 on which the data storage device is located may access it as an external device throughnetwork 114. - Several exemplary documents that will be used to explain the structure and operation of the present invention will now be described.
- FIG. 2 illustrates an
exemplary text document 190.Text document 190 has fiveparagraphs Paragraphs Paragraph 192 b comprises text and an embeddedgraphic image 194.Paragraph 192 d comprises no text and an embedded table 196.Graphic image 194 is a rectangular image with a size of 100×150 pixels. Table 196 has a 2×3 array of cells which contain text (including numerical text) and other data, including formulae used to calculate the value of cells based on the content of other cells. - FIG. 3 illustrates an
exemplary presentation document 200. In this description, a presentation document refers to a collection of slides or screens which may be displayed sequentially or in any order. Some or all of the slides may share some common elements, such as a background image or shading and default shapes. Each slide will typically also have some unique content, such as text, images, video, sounds, etc.Presentation document 200 has threeslides Slides corporate logo 208 andvertical line 210.Slide 202 has sometext 212, consisting ofparagraphs Slide 204 has anarrow shape 216 and an audio/video clip 218.Slide 206 has agraphic image 220. - The present invention utilizes a concept of breaking down documents into smaller, independently editable sections. For example, a text document may be broken down into paragraphs. Similarly, an image document may be broken down into blocks of pixels, a table document may be broken down into cells, and a presentation document may be broken down into slides, which may be broken down further into constituent components such as text, image, video, sound, table, shape and other elements. Depending on the size or structure of a document, it may treated as having as single editable section. For example, a text document that includes a single paragraph may have only one editable section.
- The method by which a particular document is broken down depends on the nature of the document and on the desired degree of “granularity”, which regulates the fineness of independent multi-user editing. For example, a text document in the present embodiment is broken down into independently editable paragraph sections. If, in an alternative embodiment, increased granularity is desired, a text document could be broken down into independently editable sentence, word or even character sections. The use of smaller sections may decrease the efficiency of
system 100, depending on the amount of data which must be communicated between aclient 116 and a workspace server 112 to allow a user to view and edit each section (in methods 1000-1700, FIGS. 13 to 19). For example, depending on the selection ofnetwork 114, a larger or smaller packet of data may have to be communicated for each section. If the section size is selected to be very small (i.e. a character in a text document), then the network communication overhead may become a bottleneck, preventing efficient use of the system. Insystem 100, paragraph sized sections have been selected as an efficient compromise for a text document. - Each section of a document may be independently locked by a user102. Different users may lock adjacent (or separated) sections, and independently edit them.
- Reference is next made to FIGS. 4, 5 and6, which illustrate a
specific workspace 122 a, which is exemplary of the structure of all workspaces 122 according to the present invention.Workspace 122 a includes acontainer tree 124 and amember list 143. -
Container tree 124 is a tree data structure with aroot node 126 at its head. Each node inworkspace 122 a consists of acontainer 140, which is a data structure.Containers 140 at different nodes may have different structures, depending on the relationship between thecontainer 140 and its parent, siblings, and children. - Each
container 140 stores anarticle 142, which in turn stores independently editable data.Articles 142 stored indifferent containers 140 may also have different structures, depending on their specific contents. (In FIGS. 4, 5 and 6,many containers 140 andarticles 142 are not identified with these reference numerals to avoid cluttering the Figures.) - The
root node 126 of thecontainer tree 124 comprises aroot container 400 that stores aroot article 402. Theroot node 126 ofcontainer tree 124 has two child nodes, which comprisecontainers root container 400 are the “parent containers” 410 of document sub-trees 412 and 414. Each document sub-tree stores all of the information for a particular document. In the present example, document sub-tree 412stores text document 190 and document sub-tree 414stores presentation document 200. -
Member list 143 includes a linked list of member records 144. Eachmember record 144 relates to a person who has been given access privileges to workspace 122. The person may be a user 102 ofsystem 100 or may have been invited to join the workspace 122, but has not yet registered as a user ofsystem 100. - Reference is next made to FIG. 7, which illustrates a hierarchy of container data structures. In this exemplary embodiment of the present invention, each container data structure is defined using object oriented concepts.
- A
Container class 300 includes the following fields:Field Usage container_id Record an identifier for the container 140. This identifier is unique with respect to all containers in the work- space 122 and may be unique with respect to all workspaces 122. container_parent A pointer to the parent container of the container 140. Theroot container 400 of a container tree 124 does nothave a parent container, and this field may be Null. container_lock_handle Used to lock the container 140 and toidentify a user 102, if any, that has locked the container 140.container_excluded_handle_list Used to identify users 102 that are not permitted to access the container 140 or the article 142 containedwithin it. container_article A pointer to the article 142 containedwithin the container. Typically, the article 142 will be a separate datastructure that is associated with the container through this pointer. Alternatively, this field may be de- fined as a data buffer of any data type or structure. container_article_length Used to record the length of the arti- cle 142 associated with thecontainer 140. This will typically be measured in bytes or another measure associ- ated with the article. container_valid Used by a client 116 to identifywhether the container 140 and/or arti-cle 142 associated with thecontainer 140 has been modified by a different client 116, requiring the first client to download an updated version of the container 140 before displayingits contents. container_time_stamp Used to record the last time that the container 140 was updated infile system 104. - A number of container classes inherit the structure of
Container class 300 and add additional fields to it. AList_Container class 302 maintains a list of child containers and is used to store documents (or parts of documents) that may be broken down into sections that have a natural “next” and “previous” relationship between them.List_Container class 302 inherits the structure ofContainer class 300 and adds the following data fields:Field Usage list_head_pointer A pointer to a container 140 at the head of the listof child containers 140.list_tail_pointer A pointer to the container 140 at the tail of the listof child containers 140. - An
Array_Container class 304 maintains an array of child containers and is used to store documents (or parts of documents) that may be broken down into sections that may or may not have an ordered relationship between them. The array of child containers may have any number of dimensions and each dimension may have any size.Array_Container class 304 inherits the structure ofContainer class 300 and adds the following fields:Field Usage array_dimensions Record the number of dimensions and the size of each dimension in the array of pointers to child containers. child_array Record an array of pointers to child containers 140.In the present exemplary embodiment of the present invention, this array is stored in a growable array, which may be expanded in any dimension, or by add- ing additional dimensions. Alternatively, a reference to each child container may be stored in a fixed length array of pointers or it may be a linked list of pointers. - A
Childless_Container class 306 inherits the structure ofContainer class 300. AChildless_Container class 306 does not have any child containers. - A group of container classes, which are collectively referred to as sibling containers, are used to form the list of child containers of a
List_Container class 302. ASibling class 310 is defined to store information common to child containers of aList_Container class 302 and has the following fields:Field Usage list_previous_pointer Points to the previous sibling container in the doubly linked list. In the head sibling container in the doubly linked list this field will typically be Null. list_next_pointer Points to the next sibling container in the doubly linked list In the tail sibling container in the doubly linked list this field will typically be Null. - A document that is desirably stored using sibling containers may include a portion that is best represented using one or more List_Containers302 that also have a sibling relationship between them. A sibling relationship is a natural “next” and “previous” relationship between sections of a document. For example, successive paragraphs in a text document have a sibling relationship based on their order within the text document. A sibling
container Sibling_List_Container class 312 is defined which may be used as part of a list of sibling containers, and which may also have its own list of child sibling containers. TheSibling List_Container class 312 inherits the structure of both theSibling class 310 andList_Container class 302. - A document that is desirably stored using sibling containers may also include a portion that is best represented using one or
more Array_Containers 304. A siblingcontainer Sibling_Array_Container class 314 is defined for this purpose that inherits the structure of bothSibling class 310 andArray_Container class 304. - A
Sibling_Childless_Container class 316 is defined that inherits the structure of bothSibling class 310 andChildless_Container class 306. TheSibling_Childless_Container class 316 may be used as part of a list of sibling containers but has no child containers. -
Container classes List_Container 302 and all containers that inherit the structure ofSibling class 310 may be used to store documents (or parts of documents) that can be divided into portions with a linear relationship between them. These sibling container classes have been described as part of a doubly linked list. The present invention is not limited to the use of a doubly linked list and any other data structure for maintaining a list of elements may be used. For example, the relationship between sibling containers may be represented as a singly linked list or an array of elements. The particular structure ofcontainers 140 used to construct a particular workspace 122 will depend on the type and structure of the documents to be stored in the workspace 122. - Reference is next made to FIG. 8, which illustrates a hierarchy of article data structures.
Articles 142 are used to store sections of documents. In this exemplary embodiment, the structure of eacharticle 142 is defined using object oriented principles. - An
Article class 340 includes the following fields which enables all article types that inherit its structure to be embedded in other elements:Field Usage article_window Used to record the position and dimensions, relative to another element, of the window in which the article is displayed, if the article describes data that is embed- ded in a document, in contrast to data which is part of the main data of a document; If the article is not embedded within a document of a different type, this field will typically be Null. - Several article classes are defined to store the different data types to be included within a
container tree 124. - A
Text_Article class 342 is used to record information about text data.Text_Article class 342 inherits the structure ofArticle class 340 and adds the following field:Field Usage text_attributes Record default text attributes for text data such as type- face, font size and color, style (such as bold, italic and underline), alignment, line spacing and bullet style (if any). - An
Image_Article class 344 is used to record information about graphic image data.Image Article class 344 inherits the structure ofArticle class 340 and adds the following fields:Field Usage image_attributes Record image information such as the width and height in pixels, color model, number of bits per pixel, hori- zontal and vertical resolution, compression informa- tion. image_thumbnail Record a thumbnail version (i.e. a smaller version) of the entire graphic image. - A
Table_Article class 346 is used to record information about table type data.Table_Article class 346 inherits the structure ofArticle class 340 and adds the following field:Field Usage table_attributes Record table information such as the number of rows and columns and the preferred cell sizes. - An
AV_Clip_Article class 348 is used to record information about audio/video clips. An audio/video clip may be composed of only audio data, only video data or a combination of audio and video data.AV_Clip_Article class 348 inherits the structure ofArticle class 340 and adds the following fields:Field Usage AV_format Record the format in which the audio/video data is stored, including compression/decompression method, sample depth and rate. AV_length Record the length of the audio/video clip in seconds (or alternatively using another measure, such as the number of frames in the audio/video clip). - Referring briefly to FIG. 4, each document sub-tree is headed by a parent container410 (i.e.
containers 404 and 406). The structure of each sub-tree will depend on the type and contents of the document stored in the sub-tree. A single document may contain many types of data. For example,text document 190 includes animage 194 and a table 196 (FIG. 2). The primary data type oftext document 190 is text, and it includes “image” and “table” type data within it.Text_Article class 342,Image_Article class 344,Table_Article class 346 andAV_Clip Article class 348 may be used to include, respectively, text, image, table, and audio/visual type data within a document sub-tree for a document that has been identified has having a different primary data type. Another embodiment of the present invention may incorporate additional article classes to store other types of data. - A number of article classes are defined to store summary information relating to a workspace or an entire document (depending on the primary data type of the document). A
Summary class 350 is defined to store information common to such article classes and has the following fields:Field Usage summary_title Record the title or caption of the workspace 122 or document. summary_description Record a description of the workspace 122 or document. summary_keywords Record searchable keywords pertaining to the workspace 122 or document. summary_log Record log entries made by workspace members over the lifetime of the workspace 122 or document. summary_history Record the date, time and user handle for impor- tant events in the lifetime of the workspace 122 or document, including its creation. In another embodiment, other information may be stored in this information. - To record information about a workspace122, a
Workspace_Article class 354 is defined that inherits the structure of bothArticle class 340 andSummary class 350 and adds the following fields:Field Usage document_count Record the number of documents in the workspace 122. This field is optional and in another embodiment, it may be omitted. The number of documents in a workspace may be determined by counting the number of child containers 140 of root container 400 (FIG. 4)of the workspace 122. - To record information about primarily text type documents, a
Text_Document_Article class 356 is defined that inherits the structure of bothText_Article class 342 andSummary class 350 and adds the following fields:Field Usage text_document_format Record formatting information such as page size and orientation, margins. text_document_statistics Record statistics such as paragraph and word count. - To record information about primarily image type documents, an
Image_Document_Article class 358 is defined that inherits the structure of bothImage_Article class 344 andSummary class 350. - To record information about primarily table type documents (which may be referred to as spreadsheet documents), a
Table_Document_Article class 360 is defined that inherits the structure of bothTable_Article class 346 andSummary class 350. - To record information about primarily audio/visual type documents, an
AV_Clip Document_Article class 362 is defined that inherits the structure of bothAV_Clip Article class 348 andSummary class 350. - Additional document article classes may be defined in accordance with the present invention for data types that will typically not be found within a document that is of another data type. For example, a
Presentation_Document_Article class 364 is defined in the instant embodiment to record information about entire presentation documents.Presentation_Document_Article class 364 inherits the structure of bothArticle class 340 andSummary class 350 and adds the following fields:Field Usage slide_order_table Record the display order of slides in the presen- tation using the slide_identifier of each slide in a container of class Slide_Article 366 (described below). default_background Record default background color or gradient to be displayed on newly created slides. default_title_properties Record default position and font attributes of text to be displayed on newly created title slides. default_text_properties Record default position and font attributes of text to be displayed on newly created text slides. default_shapes Record a collection of graphical elements to be displayed by default on newly created slides. current_slide Record the slide currently being displayed in an active presentation (i.e. it is currently being presented); when the presentation is not active, this field will be −1. The operation of an active presentation is described below in relation to method 1700 on FIG. 19. - The present exemplary embodiment supports the storage of generic documents which are of a data type that is not otherwise supported by the embodiment. A
Generic_Document_Article class 352 is defined to store information about generic documents.Generic_Document_Article class 352 inherits the structure ofArticle class 340 andSummary class 350. - If in a particular embodiment of the present invention, it is desirable to allow presentation type data to be embedded within a document of a different primary data type, then a Presentation_Article class having the fields described above for
Presentation_Document_Article class 364 with the structure ofArticle class 340 and without the structure ofSummary class 350 could be defined. - A number of article classes are defined for data types that, in the present embodiment of the invention, appear only within documents that have a different primary data type.
- A
Slide_Article class 366 is defined to store the information relating to slides in a presentation document.Slide_Article class 366 inherits the structure ofArticle class 340 and adds the following fields:Field Usage slide_identifier Record the unique identifier of the slide within the presentation. In this exemplary embodiment, the unique container_id of the of the container within which the Slide_Article is contained. In another embodiment, this field may be set in a different manner. In another embodiment where the container_id is used for this field, the field may be omitted and the container_id field of the container may be used in an equivalent manner. slide_type Record the type of slide (such as title, text slide or blank) to guide the default display and attributes of slide-specific elements. In the present exem- plary embodiment, several standard slide types are defined, including text, title and blank slides. The format of all slides of a particular type may be modified by modifying an associated default slide format. slide_background Record the background color or gradient if it differs from the default stored in the default_background field of an associated Presentation_Document_Article class 364.default_shapes_flag Record a flag indicating whether or not the default shapes stored in the default_shapes field of an associated Presentation_Document_Article class 364 are to be displayed. advancement_effect Record the type of graphical effect to be used as the slide is advanced during a presentation. advancement_interval Record the time interval for automatic slide advancement. - To record information about graphical shapes that are embeddable in slides, a
Shape_Article class 368 is defined that inherits the structure ofArticle class 340 and adds the following fields:Field Usage shape_type Record the type of shape (line, rectangle, ellipse, arrow etc). shape_attributes Record shape-specific information, such as major and minor semiaxis in the case of an ellipse, required to create an instance of the shape. - A
Paragraph_Article class 370 is used to store character and formatting information for a paragraph of text.Paragraph_Article class 370 inherits the structure ofArticle class 340 and adds the following fields:Field Usage character_data Record an array of character data for the para- graph. formatting_data Record differences in the character formatting between the data in the character_data field and the default attributes set out in the text_attributes field of an associated Text_Article 342. In thepresent embodiment, this is done by recording the type of formatting change and the offset from the beginning of the character_data field at which the change occurs. For example, a formatting attribute that applies to all data in the character_data field begins at offset 0. In an alternative embodiment, this field may be omitted and formatting data may be embedded within the character_data field. change_tracking_data Record array offsets, member handles and time stamps of editing changes. - A
Pixel_Article class 372 is used to store pixel data for graphic images.Pixel_Article class 372 inherits the structure ofArticle class 340 and adds the following field:Field Usage pixel_data Record pixel data for a graphic image. - A
Cell_Article class 374 is defined to store data for cells within tables (or spreadsheets).Cell_Article class 374 inherits the structure ofArticle class 340 and adds the following field:Field Usage cell_data contains a data value for the cell, which may be alphanumeric or a formula for calculating a value for the cell, which may be based on the value of other cells. - An
AV_Data_Article class 376 is used to store segments of audio/video clips or movies.AV_Data_Article class 376 inherits the structure ofArticle class 340 and adds the following field:Field Usage av_data Record the audio/video data for the segment. - A
Data_Article class 378 is used to store data associated with generic documents.Data_Article class 378 inherits the structure ofArticle class 340. - The present invention is not limited to the use of objected oriented techniques to define the structure of
containers 140 andarticles 142 and any mechanism for defining data structures having the same operation and function as those described above may be used. For example, independent data structures may be defined for each container and article subclass. Alternatively, independent variables may be defined for each field in a data structure, without formally defining the structural relationship of the fields. - The data of a document may be divided between different types of
articles 142. For example, the appearance of a slide in a presentation document may depend on the contents of a Presentation_Document_Article 364 (in particular, the default_background field, default_text_properties field, and default_shapes field), a Slide_Article 366 (in particular, the slide_background field and default_shapes field), andseveral Shape_Articles 368. - The data of a document may alternately be stored within a
single article 142.Articles articles single Paragraph_Article 370. - Reference is again made to FIGS. 4, 5 and6, which illustrate
exemplary workspace 122 a.Workspace 122 a is used to storeexemplary text document 190 andexemplary presentation document 200. Theroot node 126 ofworkspace 122 a comprisesroot container 400 of class Array_Container 304 (FIG. 7). The container_article field ofcontainer 400 contains (or includes a pointer that points to) aroot article 402 of class Workspace_Article 354 (FIG. 8).Container 400 has the following contents:Field Contents container_id 1234 container_parent Null container_lock_handle Null container_excluded_list_handle Null container_article 402 container_article_length 724 bytes container_valid TRUE container_time_stamp June 10, 2001 : 13:36:43 array_dimensions 2 × 1 child_array [404 406] -
Root container 400 has a unique container_id of 1234. The unique container_id is assigned to eachcontainer 140 when thecontainer 140 is created, as is described below. The container_parent field ofcontainer 400 has a value of Null, sinceroot container 400 is at theroot node 126 ofcontainer tree 124 and accordingly has no parent container. The container_lock_handle ofroot container 400 also has a value of Null, indicating thatcontainer 400 is not locked by any user 102. The container_excluded_handle_list also has a value of Null, indicating that no user 102 is excluded from accessingroot container 400. (Access to rootcontainer 400 and the remainder ofcontainer tree 124 is also regulated by membership in workspace 122, which is described below.) The container_article field ofroot container 400 points toarticle 402, which has a length of 724 bytes (as indicated by the container_article_length field). The container_valid field has a value of TRUE, indicating that the contents of thecontainer 400, and the associatedarticle 402 have not been changed by aclient 116. The container_time_stamp field records that thecontainer 400 was last updated infile system 104 on Jun. 10, 2001 at 13:36:43. The array_dimensions field indicates that the array ofchild containers 140 is one dimensional and contains two elements in its sole dimension. The child_array field contains a one dimensional array storing pointers tocontainers container 400. -
Root article 402 is ofclass Workspace_Article 354 and has the following contents:Field Contents article_window Null summary_title Exemplary workspace summary_description Exemplary workspace for patent application summary_keywords exemplary, patent summary_log June 7, 2001, 11:06:14 rpw1: I created this work- space to store documents relating to my patent application summary_history June 7, 2001: 11:04:27, rpw1, CREATE document_count 2 - The article_window field of
root article 402 is Null, indicating that theroot article 402 is not embedded within a document having a data type different from data of theroot article 402.Root article 402 identifies the name of workspace 122 as “Exemplary workspace” (in the summary_title field), describes the workspace as “Exemplary workspace for patent application” (in the description field). The keywords field ofroot article 402 indicate thatworkspace 122 b can be searched for by using the keywords “exemplary” and “patent” using a workspace searching engine built intomaster server 110. (The structure and operation of the workspace searching engine is typical and will be understood by skilled persons and are not described in detail. Typically, workspace searching engine may be activated from any screen of aclient 116, which is described in greater detail below.) The summary_log field records the first entry in the log. The summary_history field records the date and time of the “CREATE” event and the workspace creator's handle. The document_count field indicates that there are two documents in the workspace. - The
root container 400 of acontainer tree 124 has one child container for each document that is stored in the workspace 122. Each of the child containers of the root container is aparent container 410 of a document sub-tree that stores the contents of the associated document. Inworkspace 122 a,root container 400 has twochild containers Containers parent containers 410, respectively, fordocument sub-tree 412, in whichtext document 190 is stored, and fordocument sub-tree 414, in whichpresentation document 200 is stored. The article contained within eachparent container 410 is referred to as a parent article. - In the present embodiment, text documents, such as
document 190 are broken down into paragraph sections. The order of paragraphs in a text document is defined by their order of appearance in the document, and each paragraph may be said to have a “previous” and “next” relationship with its adjacent paragraphs. (The first paragraph has no “previous” paragraph and the last paragraph has no “next’ paragraph.) The previous and next ordering of paragraphs is maintained indocument sub-tree 412 by storing the paragraph sections in a linked list formed ofsibling containers 140. The storage oftext document 190 indocument sub-tree 412 will now be explained with reference to FIG. 5. -
Parent container 404 is ofclass List_Container 302 and has the following contents: - Container404 (Class List_Container 302)
Field Contents container_id 2123 container_parent 400 container_lock_handle Null container_excluded_handle_list Null container_article 416 container_article_length 786 bytes container_valid TRUE container_time_stamp June 20, 2001 : 08:54:17 list_head_pointer 420 list_tail_pointer 436 - The container_id, container_parent, container_lock_handle, container_excluded_handle_list, container_article_length, container_valid and container_time_stamp fields are analogous to the corresponding fields of
root container 400. The container_article field points toarticle 416, which is ofclass Text_Document_Article 356. As illustrated in FIG. 5,container 404 has five child containers:containers container 404 points tocontainer 420, the first container in the list and the list tail pointer field ofcontainer 404 points tocontainer 436, the last container in the list. -
Parent article 416 is ofclass Text_Document_Article 356, indicating that the document stored insub-tree 412 is a text document.Parent article 416 has the following contents: - Article416 (Class Text_Document_Article 356)
Field Contents article_window Null text_attributes Arial, 12 point, black, left justification, single spacing summary_title Patent Description summary_description Description of Thoughtslinger collaborative editing system summary_keywords collaborative, editing summary_log June 10, 2001, 16:52:33 cs1: Began writing description of system June 15, 2001, 04:23:12 cs1: Finished first draft summary_history June 10, 2001, 16:50:32 cs1: CREATE text_document_format 8.5 × 11 paper, portrait orientation, top margin: 1 inch; left margin: 1 inch; right margin 0.5 inches; bottom margin: 1.5 inches; page number: (format: “-#-”, position bottom center) text_document_statistics 7234 words; 511 lines; 103 paragraphs - The text_attributes field indicates the default format for each section of the
text document 190. The text_document_format indicates the document format ofdocument 190. The text attributes of text data withindocument 190 may be changed and any such changes are stored incontainers document 190. The summary_title field sets out the title ofdocument 190. The remaining fields ofarticle 416 are analogous to those ofarticle 404. - As described above, the present exemplary embodiment divides
text document 190 into paragraph sections for storage in itsdocument sub-tree 412.Text document 190 contains 5 paragraphs 192 a-192 e. Accordingly, the text oftext document 190 is stored in the 5 child containers of container 404: 420, 424, 428, 432, 436. -
Container 420, which is at the head of the list ofchild containers container 404 is ofclass Sibling_Childless_Container 316 and has the following contents: - Container420 (Class Sibling_Childless_Container 316)
Field Contents container_id 3123 container_parent 404 container_lock_handle Null container_excluded_list_handle Null container_article 422 container_article_length 4323 bytes container_valid TRUE container_time_stamp June 19, 2001 : 17:35:14 list_previous_pointer Null list_next_pointer 424 - The list_previous pointer of
container 420 is Null since it is the first container in the list of sibling child containers ofparent container 404. The list next pointer ofcontainer 420 points tocontainer 424. Thecontainer article 420 field points toarticle 422, which has a length of 4323 bytes (as indicated by the container_article_length field).Article 422 is ofclass Paragraph Article 370 and has the following contents: - Article422 (Class Paragraph Article 370)
Field Contents article_window Null character_data <Text of paragraph 192a>formatting_data offset 23: bold+italic on; offset 39: bold+italic off change_tracking_data offsets 17-35: rpw1, delete, 10-7-2001 14:22:16 - The article_window field of
article 422 is Null, indicating the data inarticle 422 is part of the main body oftext document 190. The character_data field contains the text ofparagraph 192 a. This text is initially presented in accordance with the text formatting set out in the text_attributes field ofarticle 416. - The formatting_data field is used to modify the initial text and document formatting. The formatting_data indicates that, beginning with the 23rd character from the beginning of the character_data, the text is to be bolded and italicized. These formatting attributes are to be turned off beginning with the 39th character in the character_data. The change_tracking_data field indicates that text in the range between offsets of 17 and 35 characters from the beginning of the character_data was deleted by a user with the user_handle rpw1 on Jul. 10, 2001 at 14:22:16. The use of the formatting_data and change_tracking_data fields to specify formatting changes and to track editing changes in the character_data is optional. Alternatively, such information may be embedded within the character_data itself at the offsets specified in the formatting_data and change_tracking_data fields.
- The second paragraph of
text document 190,paragraph 192 b (FIG. 2), is stored in container 424 (and its children).Container 424 is ofclass Sibling_Array_Container 314 and has the following contents: - Container424 (Class Sibling_Array_Container 314)
Field Contents container_id 3124 container_parent 404 container_lock_handle Null container_excluded_list_handle Null container_article 426 container_article_length 2326 bytes container_valid TRUE container_time_stamp June 26, 2001 : 14:22:16 list_previous_pointer 420 list_next_pointer 428 array_dimensions 1 × 1 child_array [440] - The text of
paragraph 192 b is stored inarticle 426, which is similar toarticle 422. The contents ofarticle 426 are set out in Appendix A. In addition to text,paragraph 192 b also contains agraphic image 194. The present embodiment stores graphic images using an Array_Container 304 (FIG. 7) having one or more child containers to store the graphic image. Graphic image 192 is stored usingcontainer 440 and its child containers.Container 440 is the only child ofcontainer 424 and is of class Array_Container 304 (FIG. 7) and has the following contents:Container 440 (Class Array_Container 304) Field Contents container_id 4123 container_parent 428 container_lock_handle Null container_excluded_list_handle Null container_article 442 container_article_length 234 bytes container_valid TRUE container_time_stamp June 20, 2001: 08:14:09 array_dimensions 2 × 2 child_array -
Container 440 contains anarticle 442 and the child_array defines a two by two array of pointers tochild containers Article 442 is of class Image_Article 344 (FIG. 8) and has the following contents:Field Contents article_window x=175, y=0, width=200, height=100 image_attributes width: 100; height: 150; model: RGB color; bits per pixel: 24; horizontal resolution: 300 pixels per inch; vertical resolution: 300 pixels per inch; compression: JPEG image_thumbnail JPEG Thumbnail data - The article_window field of
article 442 is used to define the position at whichgraphic image 194 is displayed relative toparagraph 192 b, in whichgraphic image 194 is embedded. The article_window field indicates thatgraphic image 194 is to be displayed in a 200×100 pixel window positioned 175 pixels right and 0 pixels down from a selected anchor point inparagraph 192 b. Typically, the anchor point will be the upper left corner of the paragraph, although any other anchor point may be used. The article_window field may also be used to define attributes of the window such as the anchor point, the color and thickness of a border for the window, the spacing between the edge of the window and the graphic image, etc. A skilled person will be capable of selecting appropriate attributes for any particular embodiment of the present invention and for any particular graphic image. - The image_attributes field of the
article 442 is used to define attributes ofgraphic image 194.Graphic image 194 is defined as a 100×150 pixel image using a 24 bit RGB color model with horizontal and vertical resolutions of 300 pixels per inch. The image is stored using JPEG compression. The image thumbnail field stores the thumbnail image data which may be used as an icon forgraphic image 194 or for other purposes. - When
graphic image 194 is displayed, it may be shrunk or stretched horizontally and vertically to fit its dimensions into the window in which it is displayed. In this example,graphic image 194 has an actual size of 100×150 pixels and will be displayed in a window of 200×100 pixels. To accomplish this,graphic image 194 will have to be horizontally stretched and vertically compressed. -
Container 440 has fourchild containers class Pixel_Article 372.Container 444 and itsarticle 446 have the following contents: - Container444 (Class Childless_Container 306)
Field Contents container_id 5890 container_parent 440 container_lock_handle Null container_excluded_list_handle Null container_article 446 container_article_length 11250 bytes container_valid TRUE container_time_stamp June 20, 2001 : 08:14:09 - Article446 (Class Pixel_Article 372)
Field Contents article_window Null pixel_data <50 × 75 pixel image - upper left section of image 194> - The pixel_data field of
article 446 contains a 50×75 pixel image, which corresponds to the upper left section ofgraphic image 194. The remainder ofgraphic image 194 is stored inarticles A. Graphic image 194 is thus divided into four sections which may be independently edited. - In an alternative embodiment, a graphic image may be divided into layer sections rather (or possibly in addition to) pixel block sections. Each layer section would be stored in a separate container. If the graphic image is divided into layer sections which are then divided into pixel sections, the Image_Article344 (or Image_Document_Article 358) would have a three-dimensional array of child containers, each of would contain a
Pixel_Article 372. -
Paragraph 192 c of thetext document 190 is stored incontainer 428 which includesarticle 430, the contents of which are set out in Appendix A. The contents ofcontainer 428 andarticle 430 are analogous to the contents ofcontainers articles -
Paragraph 192 d (FIG. 2) has no text component and includes table 196.Paragraph 192 d is stored incontainer 432,container 460 and itschild containers Paragraph 192 d is divided and stored in a manner similar to the manner in whichgraphic image 194 is divided and stored incontainer 424 and its child containers. The sub-tree headed bycontainer 432 is set out in Appendix A. -
Article 434, which is part ofcontainer 432, has the following structure: - Article434 (Class Paragraph_Article 370)
Field Contents article_window Null character_data Null ( Paragraph 192d contains no text,although text may be added in the future) formatting_data Null change_tracking_data Null - Since
paragraph 192 d contains no text, the character_data field ofarticle 434 is Null. If any text is subsequently added to the paragraph, it will be added to the character_data field and the change tracking data field will be updated accordingly if change tracking is enabled. - Table196 has a 2×3 cell array, and is naturally divided into six sections, each of which corresponds to one cell.
Container 432 has asingle child container 460 ofclass Array_Container 304, which has the following contents:Container 460 (Class Array_Container 304) Field Contents container_id 4124 container_parent 432 container_lock_handle Null container_excluded_list_handle Null container_article 462 container_article_length 234 bytes container_valid TRUE container_time_stamp June 25, 2001: 10:58:51 array_dimensions 2 × 3 child_array -
Container 460 has 6child containers document 190 is defined inarticle 462, which has the following contents: - Article462 (Class Table_Article 346)
Field Contents article_window x=12, y=0, width=200, height=375 table_attributes 3 rows, 2 columns; preferred cell size 100 × 125 pixels - The article_window field of
article 462 indicates that table 196 is to be displayed in a 200×375 pixel window positioned 12 pixels right and 0 pixels down from the anchor point ofparagraphs 192 d. The table_attributes field indicates that the 200×375 pixel window is to be divided in a 2 column by 3 row array with each cell preferably having dimensions of 100 pixels by 125 pixels. - Each cell of table196 is stored in one of the
child containers container 460.Container 464 and itsarticle 466 correspond to the cell at the (1,1) position of table 196 and have the following contents: - Container464 (Class Childless_Container 306)
Field Contents container_id 5894 container_parent 460 container_lock_handle Null container_excluded_list_handle Null container_article 466 container_article_length 32 bytes container_valid TRUE container_time_stamp June 25, 2001 : 10:54:16 - Article466 (Class Cell_Article 374)
Field Contents article_window Null cell_data <contents of cell (1, 1) of table 196> - The cell_data field of
article 466 contains the contents of cell (1,1) of table 196. These contents may be text, numeric, a formula that utilizes the contents of other cells in table 196, or any other type of data object, including a reference to a data object stored in another location (for example, on the Internet at another location). A cell of a table may also include data such as a graphic image, which will be stored in the same manner as graphic image 194: a container such ascontainer 440 will be used to record the structure and display attributes of the graphic image and one or more child containers, such ascontainers - The remaining cells of table196 are stored in
articles -
Paragraph 192 e oftext document 190 is stored incontainer 436 andarticle 438 in a manner analogous to the storage ofparagraph 192 a incontainer 420 andarticle 422.Container 436 andarticle 438 are set out in Appendix A. Sinceparagraph 192 e is the last paragraph oftext document 190, the list_next_pointer ofcontainer 436 is Null. - In this manner,
text document 190 is stored withindocument sub-tree 412. The structure described here for the storage of a text document is only exemplary, and may be modified depending on the specific requirement of another embodiment of the present invention. In particular, an alternative embodiment may store a text document using a document sub-tree with higher or lower granularity, depending the desired degree of simultaneous editing by different users, while taking into account the potential efficiency trade-offs mentioned above. - The particular rules by which a document is stored in a sub-tree are predetermined for each document type in any embodiment of present invention. In the
exemplary document sub-tree 412,document 190 has been divided into paragraph sized sections, and non-text data embedded within a paragraph is stored in a set of child containers below the primary container for the paragraph (i.e.graphic image 194 is stored incontainer 440 and its children below container 424). This method of embedding data within a paragraph is not limited to data having a different data type than the main data type of a document. A text document may have a paragraph with primary text and embedded text which is to be displayed in a window. Such embedded text may be stored below the primary container for the paragraph using a List_Container 302 (since the embedded data is text, which has a natural next and previous relationship between its sections) which may have one or more child sibling containers connected in a list to store the sections of the embedded text. Such embedded text may be displayed in a window, the attributes of which will be defined in the article_window field of aText_Article 342 within theList_Container 302. - Reference is next made to FIG. 6, which illustrates the storage of
presentation document 200 indocument sub-tree 414. Theparent container 410 of document sub-tree iscontainer 406, which has the following contents: - Container406 (Class Array Container 304)
Field Contents container_id 2124 container_parent 400 container_lock_handle Null container_excluded_list_handle Null container_article 418 container_article_length 234 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:12:41 array_dimensions 3 × 1 child_array [490 494 498] -
Container 406 has one child container for eachslide containers -
Container 406 contains anarticle 418 of class -
Presentation_Document_Article 364 and having the following contents: - Article418 (Class Presentation_Document_Article 364)
Field Contents article_window Null summary_title Intellectual Property Presentation summary_description Presentation relating to patent application summary_keywords patent summary_log July 5, 2001, 16:52:33 cs1: Started first draft of presentation using provisional application summary_history July 5, 2001, 16:55:00 cs1: CREATE slide_order_table [3134, 3132, 3133] default_background vertical gradient, blue (top) to black (bottom) default_title_properties Helvetica, 16 point, bold, x=20 pixels, y=30 pixels, width=300 pixels, height=100 pixels default_text_properties Times Roman, 14 point, round bullet, x=20 pixels, y=100 pixels, width=200 pixels, height=200 pixels default_shapes line: p1.x=30, p1.y=0, p2.x=30, p2.y=400, thickness=5, color=red logo text: “Thoughtslinger”, font=Garamond, 9 point, normal, x=720, y=540, width=40, height=10 current_slide −1 (live presentation not presently underway) - The slide_order_table field defines the display order of the slides in the presentation document, using the slide_identifier of each slide's associated Slide_Article. This allows the order of slides in the presentation to be changed by simply modifying the slide_order_table field. In another embodiment of the present invention, the order of slides in a presentation document could be defined by the order in which the container for each slide appears in the child_array field of the parent container for the document sub-tree (i.e. container406). In another alternative embodiment of the present invention, a
List_Container 302 could be used as the parent container of the document sub-tree for a presentation document and the order of slides could be defined by the position of each slide's associated sibling container in the list of child sibling containers for the List_Container. - The default_background, default_title_properties, default_text_properties and default_shapes fields define default properties for the display of the slides of
document presentation 200. The current_slide field indicates that a live presentation is not currently being conducted usingpresentation 200. -
Slide 202 is stored incontainer 490 and its children.Container 490 is of class Array_Container and contains anarticle 492 ofclass Slide_Article 366.Container 490 andArticle 492 have the following contents: - Container490 (Class Array_Container 304)
Field Contents container_id 3132 container_parent 406 container_lock_handle Null container_excluded_list_handle Null container_article 492 container_article_length 1364 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:16:11 array_dimensions 1 × 1 child_array [502] -
Article 492 (Class Slide_Article 366) Field Contents article_window Null slide_identifier 3132 slide_type Text slide slide_background Null (use default background) default_shapes_flag TRUE (display default shapes) advancement_effect Fade through black advancement_interval 3 seconds -
Container 490 has asingle child container 502.Article 492 defines the slide_identifier ofslide 202 as 01 and indicates thatslide 202 is a Text slide. The slide_background field indicates that the default_background set out inarticle 418 is to be displayed onslide 202. The default_shapes_flag indicates that the default shapes defined inarticle 418 are to be displayed onslide 202. The advancement_effect defines the visual effect used to displayslide 202 during a presentation. The advancement_interval field defines the time interval for display ofslide 202 during an automatically advancing presentation. -
Container 502 is ofclass List_Container 302 and contains anarticle 504 ofclass Text_Article 342.Container 502 andArticle 504 have the following contents: - Container502 (Class List_Container 302)
Field Contents container_id 4125 container_parent 490 container_lock_handle Null container_excluded_list_handle Null container_article 504 container_article_length 786 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:16:11 list_head_pointer 506 list_tail_pointer 514 - Article504 (Class Text_Article 342)
Field Contents article_window x = 100, y = 75, width = 430, height = 300 text_attributes Helvetica, 18 point, yellow, left justification, single spacing -
Container 502 has a list of three child sibling containers:containers article 504 defines the window in which the text sections ofslide 202 are to be displayed relative to an anchor point ofslide 202. Typically, the anchor point will be the upper left corner of the slide, although any other anchor point may be used. The text_attributes field ofarticle 504 defines the default attributes of the text sections ofslide 202. - The
text sections slide 202 are stored incontainers Container 506 is ofclass Sibling_Childless_Container 316 and contains anarticle 508 ofclass Paragraph_Article 370. The contents of thecontainer 506 are set out inAppendix A. Article 508 has the following contents: - Article508 (Class Paragraph_Article 370)
Field Contents article_window Null character_data <Text of paragraph 214a>formatting_data bullet style: square change_tracking_data Null - The article_window field of
article 508 is Null, so the text ofparagraph 214 a (stored in the character_data field) will be displayed in the article_window defined inarticle 504. The formatting_data field modifies the default bullet style defined in the default_text_properties inarticle 418. -
Containers articles -
Slide 204 is stored incontainer 494 and its children.Container 494 is ofclass Array_Container 304, which has the following contents: - Container494 (Class Array_Container 304)
Field Contents container_id 3133 container_parent 406 container_lock_handle Null container_excluded_list_handle Null container_article 496 container_article_length 345 bytes container_valid TRUE container_time_stamp July 5, 2001 : 17:24:44 array_dimensions 2×1 child_array [518 522] -
Container 494 has twochild containers arrow 216 and audio/video clip 218) that are not defined as default shapes inarticle 418.Container 494 contains anarticle 496 ofclass Slide_Article 366, which has the following contents: - Article496 (Class Slide_Article 366)
Field Contents article_window Null slide_identifier 3133 slide_type Blank slide slide_background Null (use default background) default_shapes_flag TRUE (display default shapes) advancement_effect Fade through black advancement_interval 3 seconds - The
slide_type field article 496 designates slide 204 as a blank slide, on which the elements defined in the child containers ofcontainer 494 are displayed. -
Arrow shape 216 is stored incontainer 518 which is ofclass Childless_Container 306 andarticle 520 which is ofclass Shape_Article 368.Container 518 is set out inAppendix A. Article 520 has the following contents: Article 520 (Class Shape_Article 368)Field Contents article_window Null shape_type Arrow shape_attributes x = 500, y = 80, width = 100, height = 200, color = blue, line thickness = 2, fill = none, direction = down -
Article 520 definesarrow shape 216 as an arrow positioned 500 pixels right and 80 pixels down from the anchor point ofslide 204, and having a width of 100 pixels, a height of 200 pixels as well as the other attributes listed in the shape_attributes field. - Audio/
video clip 218 is stored incontainers Container 522 is oftype Array Container 304 and contains anarticle 524 of type AV_Clip_Article.Container 522 is set out inAppendix A. Article 524 has the following contents: Article 524 (Class AV_Clip_Article 348)Field Contents article_window x = 300, y = 280, width = 320, height = 200 AV_format MPEG AV_length 12800 frames -
Article 524 defines audio/video clip 218 as an MPEG format audio/video clip having 12800 frames that will be displayed in a 320×200 pixel window positioned 300 pixels right and 280 pixels down from the anchor point ofslide 204. The data of audio/video clip 218 is stored inarticle 528 ofcontainer 526.Container 526 is of class Childless_Container and is set out inAppendix A. Article 528 is ofclass AV_Data_Article 376 and has the following contents: - Article528 (Class AV_Data_Article 376)
Field Contents article_window Null av_data <encoded audio/visual data of clip 218> - The av_data field of
article 528 contains audio/video clip 218. -
Slide 206 is stored incontainer 498,container 530, and itschild containers articles Slide 206 has a single element:graphic image 220.Graphic image 220 is divided into four sections, which are stored incontainers graphic image 194 of text document 190 (FIG. 2) incontainer 440 and its child containers (FIG. 5).Containers - The structure of
container tree 124 is directly related to the types of documents (text document 190 and presentation document 200) stored incontainer tree 124, and to the contents of the documents. In addition, the structure ofcontainer tree 124 depends on the specific containers and articles selected for a specific embodiment of the present invention. For example, text documents may be divided into differently sized sections. Similarly, other types of documents may divided into differently sized independently editable sections with greater or lesser granularity. Many different kinds ofcontainer 140 are possible. For example, a List_And_Array_Container class (not shown) maintains a list of child sibling containers and also maintains a separate array of child containers. List_And_Array_Container class could be used to as theparent container 410 for documents that may be partially broken down into sections that have a natural “next” and “previous” relationship between them, and partially broken down into sections that may or may not have an ordered relationship between them. The List_And_Array_Container class could be used as theparent container 410 of a document sub-tree storing a “game” document. The List_And_Array_Container's child sibling containers could include articles storing the sequential levels presented by a game viewer inclient 116 that a player must proceed through in order to complete the game. Its array of child containers could include articles storing environments or animated characters that may be randomly applied to each level in the game by game viewer inclient 116. - Referring again to FIG. 1,
system 100 includes auser database 106.User database 106 includes a record for each user 102, each of whom may be a member of any of the workspaces 122 stored infile system 104. The record for each user 102 includes the following information:Field Contents user_name Identifies the name of the user user_password A password used to authorize or authenticate access to system 100 by the user. Thispassword will typically, but not necessarily be stored in an encrypted format. user_contact_info Record the address, telephone number, fax number, etc. that may be used to contact the user. user_e_mail Records the user's e-mail address. user_handle Record a unique handle that is used to identify the user internally within system 100.As an example, the user_handle is used to identify the user when he or she has locked a container 140 and in logs, transactionhistories and change tracking information for various containers 140; In this exemplaryembodiment, a user's user_handle is permanent once assigned. In another embodiment, the user_handle may be changeable. user_screen_name Record a screen name that is used to identify the user externally by system 100. Theuser_screen_name may be displayed by clients to users 102 to identify the user that has locked a section of a document (which corresponds to a container). In this exemplary embodiment, a user is permitted to change his user_screen_name using a typical method, which is not described further. user_workspace_list A list of workspaces of which the user is a member. - Several exemplary records from an
exemplary user database 106 are set out in Appendix B. - A workspace122 is considered “active” if it is currently being used by at least one of its members. An active workspace will be hosted by a workspace server 112.
System 100 includes aworkspace database 108, which includes one record for each workspace 122. The record for each workspace has the following structure:Field Contents workspace_id Unique identifier for each workspace. In the exemplary embodiment of the present invention, this field is identical to the container_id of the root container of the workspace. In an another embodiment, any other unique value may be used. workspace_title The title of the workspace set out in the summary_title field of the root container 400of the workspace's container tree 124.workspace_host If the workspace is currently active, this field identifies the workspace server 112 that is currently hosting the workspace 122. If the workspace 122 is inactive, this field is Null. workspace_owner The user_handle(s) of the owner(s) of the workspace. One of more members of a workspace may be designated as having ownership privileges, allowing the member to modify the privileges of other members to view or edit documents in the workspace and to edit the contents of the root article 402 ofthe workspace. workspace_size The size of the workspace, typically in bytes. workspace_location The location at which the data files associated with the workspace are stored in file system 104. - Several exemplary records from an
exemplary workspace database 108 are set out in Appendix C. - In addition to
container tree 124, each workspace includes amember list 143.Member list 143 includes a list ofmember records 144, which have the following structure:Field Contents user_handle User_handle of the member from user database 106. user_screen_name User_screen name of the member from user database 106. This field is optional and in an alternative embodiment, the user_screen_name may be stored only in the user database 106.user_email User_e_mail of the member from user database 106. member_privileges List of the member's privilege levels. In this exemplary embodiment of the present invention, a member may have one of three privilege levels with respect to any document: an “owner” may modify the document in any way, including the contents of the root article of the workspace and may control the membership of other users in the workspace and their privilege levels; a “worker” is permitted to edit the documents stored in the workspace and associated summary information, but may not control the membership and privilege levels of other users; a “viewer” is permitted only to view the documents contents, log and transaction history. In this exemplary embodiment, a member's privilege level is uniform for all documents in a workspace. In an alternative embodiment, a member's privilege may be set for each document in the workspace and for the authority to control membership and privilege levels of other members. In the present embodiment, the container_excluded_handle_list field in each container overrides a member's access privileges set in this field. As a result, any member will not be able to view or edit the article stored in a container if the member's handle has been entered into the container_excluded_handle_list field for the container. The specific privilege levels set out here are only exemplary, In another embodiment of the present invention, a member's privileges may be defined with any number and type of access privilege levels. member_status The member's current status with respect to the workspace 122. This field may have several values: “Invited”: - the member has been invited to join the workspace 122 but has yet to connect to the workspace. “Connected” - the member is currently connected to the workspace 122. “Not Connected” - the member is currently not connected to the workspace 122. “Connecting” - the member is in the process of connecting to the workspace 122. This field is used to ensure that a workspace 122 is not de-activated while a member is attempting to connect to it. - Appendix D illustrates an exemplary set of
member records 144 for theexemplary workspace 122 a illustrated in FIG. 4 and Appendix D. - Reference is again made to FIGS. 4, 5 and6. A master copy of each workspace 122 is stored in
file system 104 using three types of data files: - (a) a header file, which stores the
root container 400 at the root node 126 (i.e.container 400 in exemplary container tree 124) and a copy of theparent container 410 of each document sub-tree (i.e.containers - (b) for each document stored in the workspace, a document file containing all of the containers in the document's sub-tree including the
parent container 410 of the document sub-tree; and - (c) a membership file for the
entire member list 143 of the workspace. - The parent container for each document sub-tree is stored in both the header file for the entire workspace and in the document file for the associated document. The stored data in header files, document files and membership file may be manipulated by any
master server 110 or any workspace server 112. - The master copy of each workspace122 is accessed directly by
master servers 110 and workspace server 112 and is updated based on changes in membership in the workspace and changes in the documents stored in the workspace. A workspace server will update the structure and contents of the master copy of thecontainer tree 124 stored inheader file 660 and document files 662 based on Lock requests and Post requests fromclients 116, as described below. - Reference is next made to FIG. 10, which illustrates the structure of an
exemplary header file 660 and anexemplary document file 662. -
Header file 660 stores theroot container 400 andparent container container tree 124 as follows. Eachcontainer 140 is stored sequentially with three fields for each container: the container_id field, the container_article_length field, and the byte buffer representing the container_article field. At the end ofheader file 660, adirectory 664 is stored with seven fields for each container: an index representing the type of container (List_Container, Array_Container etc.), the container_id field, the container_article_length field, the container_lock_handle field, the container_excluded_handle_list field, container_time_stamp field and an index value. The index value indicates the position of the main portion of the container withinheader file 660. Typically, the index value for eachcontainer 140 will be an offset from the beginning ofheader file 660 indicating where the first byte of the container is stored. In addition, the record for eachparent container 410 indirectory 664 contains a field for the location of thecorresponding document file 662 infile system 104. - This file structure allows
containers 140 to be locked and unlocked efficiently, and also allowsindividual containers 140 to be accessed quickly. When a request is received to lock acontainer 140 for a member with owner or worker privileges (for example, in accordance withstep 1218 ofMethod 1200 on FIG. 14b, described below) it is only necessary to (i) check whether the member's user_handle is listed in the container_excluded_handle_list and, if permitted, (ii) enter the user_handle in the container_lock_handle field. Since these steps can be taken by looking only at the directory of the header file, it is not necessary to read or parse the entire header file (or a large part of it) to find the required fields. If a get request is received for acontainer 140, the index_value of the directory allows the container to be quickly accessed for transmission to a client (along with the container_lock_handle and container_excluded_handle list from the directory). - FIG. 11 illustrates that document files662 are organized in the same way. Each
container 140 is stored sequentially without its container_lock_handle and container_excluded_handle_list fields, which are stored in adirectory 668 along with an index_value specifying the position of the container within thedocument file 662. Typically, document files 662 will be larger than header files and may receive more get/post activity. As a result, the benefit of efficient locking and unlocking and rapid access to an entire container may be even greater in respect of document files. - The use of
header files 660 and document files 662 anddirectories container tree 124 may be stored in any format suitable for a specific embodiment. For example, an alternative embodiment may store eachcontainer 140 in a separate data file. Another alternative embodiment may use a single flat file for allcontainers 140. - Each
client 116 is a software application or package that is executed on aclient computer 119. Aclient 116 has several functions: - (a) communicating with
master servers 110 and workspace servers 112 to report changes to the workspace 122 made by the user 102 of theclient 116 and to receive changes made by other users 102, in addition to other information; - (b) managing the structure of workspace122 based on changes in the workspace's
container tree 124 made by the client's user 102 or based on Update Messages received from a workspace server 112; - (c) editing features for the documents recorded in
container tree 124. - A
client software package 116 may be installed on aclient computer 119 in various ways. For example,client software package 116 may be installed from a computer readable medium such as a floppy disc, compact disc (CD), digital versatile disc (DVD) or a solid state memory device. Aclient software package 116 may also be downloaded over the Internet and installed on aclient computer 119. In addition, aclient software package 116 may be installed or updated duringstep 1005 ofmethod 1000 described below. - Many different types of documents may be stored in a workspace122.
Text document 190 andpresentation document 200 are only exemplary of the many types of documents that can be stored in a workspace 122. For example, table documents (or spreadsheet documents), graphic documents (which will typically comprise one or more graphic images), audio/video documents (which will typically comprise one or more audio/video clips) may also be stored in a workspace 122. Any of these documents may include embedded elements of a different data type than their primary data type. - Reference is made to FIG. 20.
Clients 116 include editing software, or editors, for each type of document supported by any particular embodiment of the present invention, with the exception of generic documents. In the present exemplary embodiment,clients 116 include atext editor 800 for editing text documents,spreadsheet editor 808 for editing table documents, agraphic image editor 802 for editing graphic images, avideo editor 806 for editing AV clip documents, apresentation editor 804 for editing presentations. Thepresentation editor 804 is principally used to edit the sequence of slides in presentations and incorporates aslide editor 810 for editing slides within presentations. - Each editor built into a
client 116 is configured to maintain the structure of a document sub-tree in which a document of the associated type is stored. For example, thetext editor 800 in theclients 116 of the present embodiment is configured to allow a user to view and edittext document 190 and to maintain the structure ofdocument sub-tree 412 to containtext document 190 as it is edited. Each editor is also configured to create a document sub-tree for a new document and to delete document sub-trees when a document is deleted. - In addition to editing entire documents, each editor may be executed within any other editor for editing embedded sections of documents. For example, the
graphic image editor 802 may be invoked by thetext editor 800 to allow a user editing a text document to edit an embedded graphic image. - The present embodiment also supports the storage of generic documents of a data type for which an editor is not provided, within a
container tree 124. Reference is made to FIG. 9, which illustrates the storage of an exemplary generic document in adocument sub_tree 648.Document sub-tree 648 has aparent container 650 ofclass Array_Container 304 which has the following contents: - Container650 (Class Array_Container 304)
Field Contents container_id 2987 container parent <Root Container of container tree> container_lock_handle Null container_excluded_handle_list Null container_article 652 container_article length 624 bytes container_valid TRUE container_time stamp July 30, 2001, 3:38:14 array_dimensions 1x1 child_array [654] -
Container 650 is aparent container 410 having the root container of a container tree (such as root container 400) as its parent.Container 650 has a single child container identified in its child_array field. The generic document stored in thedocument sub-tree 648 is identified in thearticle 652 ofcontainer 650.Article 652 is ofclass Generic_Document_Article 352 and has the following contents: - Article652 (Class Generic_Document_Article 352)
Field Contents article_window Null summary_title Exemplary generic document summary_description Exemplary generic document for patent application summary_keywords Exemplary, generic summary_log July 30, 2001, 3:38:14 br1: Created this document as an example of a generic document summary_history July 30, 2001, 3:38:34 br1: CREATE -
Container 654 is ofclass Childless_Container 306 having the following contents: - Container654 (Class Childless_Container 306)
Field Contents container_Id 3985 container_parent 650 container_lock_handle Null container_excluded_list_handle Null container_article 656 container_article length 32424 bytes container_valid TRUE container_time_stamp July 30, 2001, 3:38:14 - The
article 656 ofcontainer 654 is ofclass Data_Article 378 and has the following contents: - Article656 (Class Data_Article 378)
Field Contents article_window Null generic_data <Contents of generic document> - The article_window field of
article 656 is Null, since the generic document will not be displayed by a client 116 (since the client does not have an editor capable of displaying the generic document). The generic document is stored in its entirety in the generic_data field ofArticle 656. - Generic documents may be edited by a user with an editor not included with a
client 116. For example, if in a particular embodiment of the present invention, a text editor is not provided in theclients 116, then text documents may be stored in a workspace as a generic document and may be edited using a third party word processor. - The
current client 116 ofsystem 100 may evolve over time as changes and improvements are made to the different pieces of editing software and other parts of theclient 116. This can cause theclient 116 installed on anyclient computer 119 to become out-of-date. An out-of-date client installed on a client computer is updated instep 1005 ofmethod 1000. To facilitate such updates, each version of the client is assigned a version number and is time stamped. - A number of transactions by which a user102 may use
system 100 will now be described.System 100 contains a number of transactions which a skilled person will be able to understand from the description of methods 1000-1600, below, including: - registration of a user
- inviting a user to become a member of a workspace
- modifying the privileges of a member in a workspace
- deleting a member from a workspace
- deleting a workspace
- deleting a document from a workspace.
- Reference is next made to FIG. 12, which illustrates a
method 1000 for a Login Transaction by which an exemplary user 102 may login tosystem 100 and gain access to a workspace of which theuser 102 a is a member. Method 1000 (andmethods specific user 102 a (FIG. 1), who is the user Chris Sonnenberg described in Appendix B. -
Method 1000 begins at step 1002, in whichuser 102 a accesses a login screen 700 ofsystem 100. Login screen 700 may be a web page that may be accessed byuser 102 a using a web browser operating on aclient computer 119 a. The web page may be displayed by a master server 110 (possibly through a web server operated as part of system 100), or by another process. On login screen 700,user 102 a enters his name and password. Alternatively, theuser 102 a may be permitted to enter his or her screen name or user handle, in addition to his or her password. Alternatively, a previously installed “cookie” onclient computer 119 a may identify the user's name and possibly his password. -
Method 1000 next proceeds todecision step 1004. If the combination of the name and password entered byuser 102 a in step 1002 is authentic (i.e. the name and password are found in a single record in the user database 106), thenmethod 1000 proceeds to step 1005. Otherwise,method 1000 ends. - In
step 1005, a complete and current version ofclient 116 is installed onclient computer 119 a. This may require a completely new client software package to be transmitted toclient computer 119 a, along with software for installing the client 116 (if noclient 116 has ever been installed onclient computer 119 a or if theclient 116 installed onclient computer 119 a is so out-of-date that it cannot be efficiently updated). Alternatively, this may involve the transmission of only a part of the current client, which is then combined with components of a previously installed client to fully update the installedclient 116. - This updating process may be performed by various known techniques. For example, the login screen700 described in step 1002 may check the version, if any, of a previously installed client on
client computer 119 a. Login screen 700 may then update the previously installed client. If login screen 700 is a web page as described above, then this function may be programmed in the web page. Such an operation will be well understood by skilled persons. Alternatively, any previously installed version of a client may be executed onclient computer 119 a and may download any required components any may update itself.Client 116 may be installed or updated onclient computer 119 a using any other method, and any combination of methods may be used. - In
step 1006, amaster server 110 is selected to communicate withclient computer 119 a. The selection of the master server 110 s may be based on load balancing criteria to ensure that allmaster servers 110 have similar loads, or may be based on any other rule or criteria, including a random selection criteria. The selected master server is referred to with the reference numeral 110 s. -
Method 1000 next proceeds to step 1008, in which theclient 116 a installed onclient computer 119 a is executed and the address of selected master server 110 s and theuser 102 a's user_handle, user_screen_name, and user_e_mail are passed toclient 116 a. In the present exemplary embodiment,client 116 a is executed within a web browser installed onclient computer 119 a. Alternatively,client 116 a may be executed as an independent application. In the current embodiment, master server 110 s may provideclient 116 a with the current system time forsystem 100 andclient 116 a may update the system clock ofclient computer 119 a so that it is synchronized with the system clock. Alternatively, the current system time ofsystem 100 may be synchronized to a selected network time server andclient 116 a may synchronize the system clock ofclient computer 119 a to the same network time server. -
Method 1000 next proceeds to step 1010, in which theclient 116 a connects to master server 110 s and master server 110 s transmits the list of workspaces stored in the user_workspace_list field of the user's record in theuser database 106 to theclient 116 a, which displays the list to theuser 102 a. If theuser 102 a is not a member of any workspace 122, then the master server 110 s indicates this to theclient 116 a, and theclient 116 a displays an appropriate message, such as “You are not a member of any workspace.” -
Method 1000 next proceeds to step 1012, in which theuser 102 a is offered a choice of: - (a) Creating a new workspace122. If the user selects this option, a Create Workspace transaction, described below as
method 1100, is performed. - (b) Deleting an existing workspace122. If the user selects this option, the user is permitted to select a workspace 122 for which he has owner privileges and the workspace is deleted from
system 100 instep 1020. A skilled person will understand how a workspace may be deleted and accordingly, a detailed method for doing so is not set out here. In a particular embodiment, a workspace may be “deleted” by identifying it as such, but without actually removing it fromfile system 104. This allows the “deleted” workspace to be subsequently restored. In addition,system 100 may optionally be configured to permit a workspace to be deleted only if no member (or no member with a selected privilege level) of the workspace is connected to it. Afterstep 1020,method 1000 returns to step 1010. - (c) Selecting one of the workspaces122 of which he is a member. If the
user 102 a selects a workspace 122, the workspace 122 is opened in accordance with an “Open Workspace” transaction, described below asmethod 1200. The selected workspace is identified with thereference numeral 122 s. - (d) Logging out of
system 100. If the user selects this option,method 1000 proceeds to step 1018. - In
step 1018,client 1018 stops executing andmethod 1000 ends. - Reference is next made to FIG. 13, which illustrates a
method 1100 for a “Create Workspace” transaction, which is used to create anew workspace 122 n. -
Method 1100 begins instep 1102, in whichclient 116 a creates anew root container 400 for thenew workspace 122 n. In the present exemplary embodiment, thenew root container 400 is anArray_Container 304.Client 116 a selects the values for the fields of thenew root container 400 as follows: - (i) A value is chosen for the container_id field. This value may be chosen randomly, or may be chosen using a selected mechanism. In the present embodiment, the value chosen for this field is based on the current time, which is provided by the system clock. In any case, the container id chosen by the
client 116 a is considered a preliminary value. - (ii) The
new root container 400 is created with the most current structure of anArray_Container 304. If, in a different embodiment of the present invention, another type of container is used as theroot container 400, the current version of that container type is used. - (iii) The container_parent field is set to Null.
- (iv) The container_lock_handle field is set to Null.
- (v) The container_excluded_handle_list is set to Null.
- (vi)
Client 116 a creates anew root article 402 oftype Workspace_Article 354 and sets the container_article field to point to thenew root article 402. - (vii) The container_article_length field is initially set to 0 bytes.
- (viii) The container_valid field is set to TRUE.
- (ix) The container_time_stamp field is set to Null.
- (x) The child_array field is set to Null, indicating that the
new root container 400 has no child containers. -
Method 1100 next proceeds to step 1104, in whichclient 116 a creates anew member list 144 for thenew workspace 122 n.Client 116 a creates asingle member record 143 and selects the value of its fields as follows: - (i)
user 102 a's user_handle, user_screen_name and user_e_mail fields are set to the values provided toclient 116 a as described above instep 1008 ofmethod 1000; - (ii)
user 102 a's member_privileges are set to Owner; and - (iii)
user 102 a's member_status is set to Not Connected. -
Method 1100 next proceeds to step 1106, in whichclient 116 a displays a dialogbox allowing user 102 a to define the following fields of the new root article 402: - (i) summary_title;
- (ii) summary_description;
- (iii) summary_keywords; and
- (iv) summary_log.
-
Client 116 a adds a “CREATE” entry to the summary history field of thenew root article 402, indicating the handle ofuser 102 a, and the date and time at which thenew workspace 122 n was created. The container_article_length field of theroot container 402 is updated to reflect the length of theroot article 402. -
Method 1100 next proceeds to step 1108, in whichclient 116 a transmits thenew workspace 122 n to master server 110 s. At this step, thenew workspace 122 n comprises thenew root container 400, which includes thenew root article 402, and thenew member list 144. -
Method 1100 next proceeds to step 1110, in which master server 110 s checks the container_id of thenew root container 400. If the container_id is not unique compared to that of allother containers 140 stored in any workspace 122 insystem 100, master server 110 s modifies it so that it is unique. -
Method 1100 next proceeds to step 1112, in which thenew workspace 122 n is stored infile system 104. Master server 110 s communicates withuser database 106 to add the newly createdworkspace 122 n to theuser 102 a's list of workspaces. Master server 110 s also communicates withworkspace database 108 to add a new workspace record for the newly created workspace 122. -
Method 1100 then returns to step 1012, and thenew workspace 122 n is treated as the selectedworkspace 122 s. - At the end of
method 1100, theuser 102 a has created anew workspace 122 n, defined the contents of theroot article 402 of theworkspace 122 n and is the only member of theworkspace 122 n. - Reference is next made to FIGS. 14a and 14 b, which illustrate a
method 1200 for an “Open Workspace” transaction. An Open Workspace transaction is initiated in accordance withstep 1012 described above. -
Method 1200 begins instep 1201 in which master server 110 s first freezes the record corresponding to the selectedworkspace 122 s inworkspace database 108 so that no process other than master server 110 s may modify that entry. If the record corresponding to the selectedworkspace 122 s inworkspace database 108 is already frozen by another process, master server 110 s waits until the entry is not frozen. - The terms “freeze” and “frozen” are used in this description to refer to data elements that have been locked by a particular process, entity or thread (such as a
master server 110 or a workspace server 112) for synchronization purposes. The terms are used to avoid confusion with the word “lock”, which is generally used to refer tocontainers 140 that have been locked by a user to allow the contents of the container to be edited exclusively by that user. The synchronization locks referred to with the terms “freeze” and “frozen” may be implemented in various computing environments using semaphores, shared memory space, message passing and other known techniques. -
Method 1200 next proceeds to step 1202, in which master server 110 s determines whether the selectedworkspace 122 s is active. Master server 110 s checks the workspace_host field of the record forworkspace 122 s in theworkspace database 108. - If the workspace_host field is Null, then the workspace is currently inactive, and
method 1200 proceeds to step 1204. - Otherwise, the workspace_host field will contain the address of a
workspace_server 110, which is then identified as thehost workspace server 112 h of theworkspace 122 s. The presence of an address in the workspace_host field indicates that the selectedworkspace 122 s is currently active and initialized. In this case,method 1200 proceeds directly to step 1206. - In
step 1204, master server 110 s selects a workspace server 112 to host the selectedworkspace 122 s. Typically, a workspace server 112 will be capable of hosting more than one workspace 122. In the present embodiment, master server 110 s selects the workspace server 112 in order to keep the workload of different workspace servers 112 generally equal. Alternatively, master server 110 s may select the workspace server 112 based on a rule that a specific workspace 122 is always hosted by a specific workspace server 112, based on a random selection or based on any other method or rule. The workspace server 112 is designated as thehost workspace server 112 h for the selectedworkspace 122 s. - Master server110 s sends a message to host
workspace server 112 h indicating theworkspace server 112 h is to start hostingworkspace 122 s. In response,workspace server 112 h “initializes” theworkspace 122 s by loading thedirectory 664 from theheader file 660 and themember list 143 from the membership file. - When the
workspace 122 s has been initialized,workspace server 112 h sends a confirmation message to master server 110 s, which updates the workspace_host field of the record forworkspace 122 s in theworkspace database 108. - In
step 1206, master server 110 s sends a message to hostworkspace server 112 h indicating the connectinguser 102 a's user_handle and user_e_mail.Workspace server 112 h sets the member_status field ofuser 102 a's member record inmember list 143 of selectedworkspace 122 s to “Connecting”. Master server 110 s transmits the address of thehost workspace server 112 h to theclient 116 a. -
Method 1200 next proceeds to step 1207, in which master server 110 s unfreezes the record corresponding to the selectedworkspace 122 s inworkspace database 108. - In
step 1208, client 16 a contacts host workspace server 12 h. In the present embodiment,client 116 a transmits a “Connect” message to thehost workspace server 112 h, and opens a persistent bi-directional communication link with thehost workspace server 112 h. The persistent bidirectional communication link is used by theclient 116 a to communicate withworkspace server 112 h. When this communication link has been established,client 116 a is considered to be connected toworkspace 122 s. - In the present embodiment,
workspace server 112 h instantiates a separate process to communicate withclient 116 a. Similarly every other client that connects withworkspace server 112 h will communicate with a separate process operating withinworkspace server 112 h. In the remainder of this description, the separate process will be treated as a part ofworkspace server 112 h and will not be referred to separately. -
Method 1200 next proceeds to step 1209 in whichworkspace server 112 h retrieves the member_privileges field fromuser 102 a's entry in themember list 143 for the selectedworkspace 122 s and sets the member_status field of the same entry to “Connected”. - As indicated above, a workspace member's member_status field may have one of four settings in the present embodiment (although additional settings may be used in other embodiments): Invited, Connected, Connecting and Not Connected. When an owner of a workspace122 (or a worker, if workers are permitted to do so) initially adds a
member record 144 to themember list 143, the new member may or may not be a user ofsystem 100. If the new member is not a user ofsystem 100, then the member will not have a user_handle, which is defined in the user's entry in theuser database 106. The owner of the workspace identifies the new member by entering the e-mail address into the user_e_mail field of the new member record. The member_handle field is left blank.Client 116 sets the member_status field of the new member record to “Invited”. - Subsequently, the new member may register with
system 100, at which time a user_handle will be assigned for the new user. When the new user attempts to connect to the workspace 122 for the first time, master server 110 s transmits the new user's user_handle, and user_e_mail fields to theworkspace server 112 h instep 1206. In this step,workspace server 112 h may then find the corresponding member record using the user_e_mail field.Workspace server 112 h then enters the user_handle received from the master server into the user_handle field of the member record.Workspace server 112 h subsequently may use the user_handle to find the member'smember record 144. - In the case where a registered user is added as a new member to a workspace122, the
new member record 144 may be completed by the owner of the workspace 122. In this case, the user_handle or user_e_mail fields may be used to find the member'smember record 144 in this step. -
Workspace server 112 h then transmits a Confirm Connect message and the member_privileges back toclient 116 a.Workspace server 112 h also broadcasts a Connect Update message to allclients 116 connected with theworkspace 122 s to advise them of the screen name of the of the newly connecteduser 102 a.Client 116 a, which transmitted the originating Connect message, ignores the Connect Update message after determining that it relates to its own connection. Every otherconnected client 116 displays an appropriate message to its corresponding user 102, such as “Chris has connected to the workspace”. In this way, everyclient 116 that is currently connected toworkspace 122 s is advised of the connection of everyother client 116 as it occurs. Similarly,workspace server 112 h broadcasts a Disconnect Update message advising all clients when a user 102 disconnects from a workspace. -
Method 1200 next proceeds to step 1210 in whichclient 116 a gets the following components of workspace 122 fromworkspace server 112 h: - (i) The
root container 400 and allparent containers 410 of each document sub-tree in thecontainer tree 124. In the case of the exemplary container tree illustrated in FIGS. 4, 5 and 6,client 116 a would get theroot container 400 andcontainers Client 116 a requests theroot container 400 and allparent containers 410 fromworkspace server 112 h and inresponse workspace server 112 h transmits all of the containers stored in theheader file 660 for theworkspace 122 s. The location of theheader file 660 is stored in the workspace_location field of the workspace's entry in theworkspace database 108. - (ii) The
member list 143.Client 116 a requests themember list 143 fromworkspace server 112 h. In response,workspace server 112 h transmits themember list 143. - While
workspace 122 s is active, workspace server 112 s preferably keeps theheader file directory 664, comprising theroot container 400 andparent containers 410, andmember list 143 in memory to facilitate rapid access. However, this may not be practical or possible depending on the number of workspaces 122 being hosted byworkspace server 112 h and the size of its local memory space. In any case,workspace server 112 h preferably keepsheader file 660, document files 662 and membership file stored infile system 104 updated at all times to reduce the chance of data being lost due to a breakdown or crash ofworkspace server 112 h. -
Method 1200 next proceeds to step 1211, in whichclient 116 a displays the title (from summary_title field of the parent article stored inparent container 410 of each document's document sub-tree) and/or an icon or thumbnail image representing each document stored in theworkspace 122 s except those in which theuser 102 a's user handle has been entered in theparent container 410's container_excluded_handle_list field. In the present exemplary case,client 116 a displays the title and an icon fortext document 190 and forpresentation document 200. -
Method 1200 next proceeds to step 1212, in whichclient 116 aoffers user 102 a the following choices: - (i) Select one of the documents in the
workspace 122 s. If theuser 102 a selects this option,method 1200 proceeds to step 1214. - (ii) If the
user 102 a has owner or worker privileges for theworkspace 122 s, he may choose to edit the contents of the root article of the workspace. If theuser 102 a selects this option, thenmethod 1200 proceeds to step 1230. - (iii) If the
user 102 a has owner or worker privileges for the workspace, he may choose to create a new document in theworkspace 122 s. If theuser 102 a selects this option, then a “Create Document” transaction, described below asmethod 1300, is performed. - (iv) Exit from the workspace. If the
user 102 a selects this option, thenmethod 1200 proceeds to step 1220. - In
step 1214,client 116 a displays the contents of the parent article (i.e.article 416, iftext document 190 is selected) contained in theparent container 410 of the selected document. -
Method 1200 next proceeds to step 1216, in which theuser 102 a is offered the following choices: - (i) If the
user 102 a has owner or worker privileges for theworkspace 122 s, theuser 102 a may choose to edit the contents of the parent article contained in theparent container 410 of the selected document. If theuser 102 a chooses this option,method 1200 proceeds to step 1218. - (ii) View or edit the contents of the selected document. If the user chooses this option, then a View/Edit Document transaction, described below as
method 1400, is performed. - In
step 1218,client 116 a transmits a Lock Request message for theparent container 410 of the selectedworkspace 122 s toworkspace server 112 h. In response,workspace server 112 h determines whether theparent container 410 is already locked by another user 102 (i.e. the container_lock_handle field of theparent container 410 contains the user_handle of the other user 102). If so, thenworkspace server 112 h transmits a Refused Lock message toclient 116 a.Client 116 a displays a message indicating the parent article cannot currently be edited (and possibly an explanation that theparent container 410 is currently be edited by another member of the workspace) andmethod 1200 returns to step 1212. - If the
parent container 410 is not locked (i.e. the container_lock_handle field of theparent container 410 is Null), thenworkspace server 112 h locks the parent container foruser 102 a by setting the container_lock_handle field touser 102 a's user_handle (in both theheader file 660 for the selectedworkspace 122 s and thedocument file 662 for the selected document).Workspace server 112 h then transmits a Confirmed Lock message toclient 116 a. -
Client 116 a then displays a dialog box allowing theuser 102 a to edit the summary_title, summary_description, summary_keywords, summary_log fields and possibly additional fields, depending on the document type (i.e. the text_attributes and text_document information fields for text documents) of the parent article for the selected document. Typically, theuser 102 a will not be able to directly edit the article_window, summary_history and other fields that are updated automatically by editors inclient 116 a (such as the text_document_statistics field for text documents). - When
user 102 a has finished editing the parent article,client 116 a posts the revised parent container 410 (of which the revised parent article is a part) to theworkspace server 112 h for storage infile system 104. -
System 100 supports several different types of Post requests, which are used by aclient 116 to transmit changes in a workspace 122 to a workspace server 112. More specifically, Post requests are used to add, modify and delete entire documents as well as sections of documents. Typically, aclient 116 makes a Post request by transmitting three pieces of information to aworkspace server 112 h that is hosting the relevant workspace 122: - (i) a specific action to take;
- (ii) the identity of a
container 140 on which to take the action; and - (iii) zero or more provisional containers with which to take the action.
- A provisional container is a
container 140 that has been prepared by a client for incorporation incontainer tree 124. In response to a Post request, a workspace server 112 either confirms or refuses the Post request. If the Post request is confirmed, theclient 116 incorporates the provisional containers into itslocal container tree 124. If the Post request is refused, then theclient 116 does not incorporate the provisional containers into itslocal container tree 124. Theclient 116 may re-attempt the Post request, or it may discard the provisional containers, or it may display a message to its user 102 and allow the user to select a course of action. - For some Post requests, only some of this information is required and in others, additional information is required. In response to the Post requests from a
client 116, thehost workspace server 112 h takes the requested action by modifying the workspace'sheader file 660 and document files 662 infile system 104. - In
step 1218,client 116 a sends the following information toworkspace server 112 h: - (i) Post and Unlock request;
- (ii) the revised
parent container 410, including the revised parent article. - In response,
workspace server 112 h replaces theparent container 410 stored in both theheader file 660 for the selectedworkspace 122 s and thedocument file 662 for the selected document.Workspace server 112 h also sets the container lock handle field for the parent container 410 (in both the header and document files) to Null, thereby unlocking theparent container 410.Workspace server 112 h then transmits a Confirm Post and Unlock message toclient 116 a.Workspace server 112 h also broadcasts a Post and Unlock Update message to allclients 116 connected with theworkspace 122 s to advise them of the newly posted parent container.Client 116 a, which transmitted the original request, ignores the broadcasted message after determining that it relates to its own connection. The nature of the broadcasted message (which may be “skinny” or “chubby”) and the response of every otherconnected client 116 is described below in method 1500 (FIG. 17) and method 1600 (FIG. 18).Method 1200 then returns to step 1212. - In
step 1220,client 116 a transmits a Disconnect message toworkspace server 112 h.Workspace server 112 h responds to the Disconnect message by: - (i) Setting the member_status field for the
user 102 a to “Disconnected”. - (ii) Broadcasting a Disconnect Update message to all
clients 116 connected with theworkspace 122 s as described above instep 1209. - (iii) If
client 116 a is theonly client 116 currently connected toworkspace 122 s, thenworkspace server 112 h de-activates theworkspace 122 s as follows.Workspace server 112 h freezes the record corresponding to the selectedworkspace 122 s inworkspace database 108. If the record corresponding to the selectedworkspace 122 s inworkspace database 108 is already frozen by another process, thenworkspace server 112 h waits until the entry becomes unfrozen and then attempts to freeze it. If during this waiting period, another client (say,client 116 b, in use byuser 102 b) attempts to connect toworkspace 122 s, thenworkspace server 112 h abandons the attempt to de-activateworkspace 122 s andmethod 1200 returns to step S1010 ofmethod 1000, in respect ofuser 102 a. (In respect of theother client 116 b anduser 102 b,system 100 continues atstep 1208.) - When
workspace 112 h is able to freeze the record corresponding to the selectedworkspace 122 s inworkspace database 108, it deactivatesworkspace 122 s by ensuring that itsheader file 660 and document files 662 are stored infile system 104.Workspace server 112 h then sets the workspace_host field in the record forworkspace 122 s in the workspace database to Null, indicating theworkspace 122 s is inactive.Method 1200 then returns to step 1010 ofmethod 1000. - In
step 1230,client 116 a transmits a Lock Request for theroot container 400 of the selectedworkspace 122 s toworkspace server 112 h. In response,workspace server 112 h determines whether theroot container 400 is already locked by another user 102 (i.e. the container_lock_handle field of theroot container 400 contains the user_handle of the other user 102). If so, thenworkspace server 112 h transmits a Refused Lock message toclient 116 a.Client 116 a displays a message indicating the root article cannot currently be edited (and possibly an explanation that theroot container 400 is currently being edited by another member of the workspace) andmethod 1200 returns to step 1212. - If the
root container 410 is not locked (i.e. its container_lock_handle field is Null), then workspace server locks theroot container 410 foruser 102 a by setting the container_lock_handle field touser 102 a's user_handle.Workspace server 112 h then transmits a Confirmed Lock message toclient 116 a. -
Client 116 a then displays a dialog box allowing theuser 102 a to edit certain fields of theroot article 402 for theworkspace 122 s. If theuser 102 a has owner privileges inworkspace 122 s, he may edit the summary_title, summary_description, summary_keywords and summary_log fields of theroot article 402 for theworkspace 122 s. If theuser 102 a has worker privileges inworkspace 122 s, he may edit only the summary_log field of theroot article 402 for theworkspace 122 s. Typically, theuser 102 a will not be able to directly edit the summary_history and document_count fields, which are updated automatically byclient 116 a. Whenuser 102 a has finished editing theroot article 402,client 116 a sends a Post and Unlock message containing theroot container 400, including the revisedroot article 402, toworkspace server 112 h.Workspace server 112 h replaces theroot container 400 in theheader file 660 for the selectedworkspace 122 s.Workspace server 112 h also sets the container lock handle field for the root container 400 (in the header file 660) to Null, thereby unlocking theroot container 400.Workspace server 112 h then transmits a Confirm Post and Unlock message toclient 116 a.Workspace server 112 h also broadcasts a Post and Unlock Update message to allclients 116 connected with theworkspace 122 s to advise them of the newly updatedroot container 400.Client 116 a, which transmitted the original request, ignores the broadcasted message after determining that it relates to its own connection. The nature of the broadcasted message and the response of every otherconnected client 116 is described below in method 1500 (FIG. 17) and method 1600 (FIG. 18).Method 1200 then returns to step 1212. - Reference is next made to FIG. 15, which illustrates a
method 1300 by which a new document is added to theworkspace 122 s. -
Method 1300 begins instep 1302, in which theuser 102 a specifies the type of the new document to be added to theworkspace 122 s. Typically,client 116 a displays a menu of document types that are supported by system 100 (or another embodiment of the present invention). The type of theparent container 410 for the document sub-tree for the new document will depend on the document type. In the present embodiment, the document type and associated type of the parent container are related as shown in Table 1:TABLE 1 Relationship between document type, parent container type and initial document section in the present exemplary embodiment. Parent Container Document Type Type 410 Initial Document Section Text Document List_Container Empty paragraph Table Array_Container Empty cell Image Array_Container Entire image Presentation Array_Container Initial blank slide Generic Document Array_Container Entire Generic Document - When
user 102 a selects a document type,method 1300 proceeds to step 1304. - In
step 1304,client 116 a creates a parent container 410 n for the new document, in accordance with Table 1.Client 116 a creates the new parent container 410 n as follows: - (i) A value is chosen for the container_id field. This value may be chosen randomly, or may be chosen using a selected mechanism. In the present embodiment, the value chosen for this field is based on the current time, which is provided by the system clock. In any case, the container_id chosen by the
client 116 a is considered a preliminary value. - (ii) The new parent container410 n is created with the structure of the appropriate container class (i.e. a
List_Container 302 or Array_Container 304). - (iii) A provisional copy of the root container400 p is made, including a provisional copy of its root article 402 p. The container_parent field of new parent container 410 n is set to point to the provisional root container 400 p.
- (iv) The container_lock_handle field of new parent container410 n is set to Null.
- (v) The container_excluded_handle_list of new parent container410 n is set to Null.
- (vi)
Client 116 a creates a new parent article for the new parent container 410 n of the appropriate type for the selected document type. For example, if a text document is selected, the parent article will be aText_Document_Article 356; if a presentation document is selected, the parent article will be aPresentation_Document_Article 364. The container_article field of new parent container 410 n is set to point to the new parent article. - (vii) The container_articie_length field of new parent container410 n is initially set to the length of the new parent article.
- (viii) The container_valid field of new parent container410 n is set to TRUE.
- (ix) The container time stamp field is set to Null.
-
Client 116 a may create a child container or containers for the new parent container to provide an initial document section, as set out in Table 1. For example, in the case of a new text document,client 116 a creates a new Sibling_Childless_Container 316 (identified as a container 140 n) and sets its fields in a manner analogous to that set out above for the new parent container. The container_parent of the new container 140 n is set to point to the new parent container 410 n and the list_head_pointer and list_tail_pointer fields of the new parent container 410 n are set to point to the new child container 140 n. In addition,client 116 a creates anew Paragraph_Article 370 for the new container 140 n and sets its fields so that it has an empty character_data field and no formatting or change tracking information. In a similar way, a new presentation document is provided with an initial blank slide and a new table document is provided with an initial empty cell. - Image and generic documents are generally, although not necessarily, created only when an image or generic data file already exists. To create a new image document,
client 116 a creates a new parent container 410 n ofclass Array_Container 304 having an article ofclass Image_Document_Article 358.Client 116 a then loads the image data for the new image document from a data device specified byuser 102 a such as a floppy disk, CD-ROM or other storage device, which may be coupled toclient computer 119 a or which may be accessible via a network (including network 114).Client 116 a then displays a dialogbox allowing user 102 a to specify how the new image document should be divided into mutually exclusive sections. Typically an image document is divided into rectangular sections, which may have the same or different dimensions.Client 116 a then creates one or more child containers (one child container for each section), including articles ofclass pixel_article 372, for the new image document and stores the image data in the new child containers. The fields of the new child containers are set in a manner analogous to those ofcontainers - To create a new generic document,
client 116 a similarly creates a new parent container 410 n oftype Array_Container 304 with an article of classGeneric Document Article 352.Client 116 a also creates a child container 140 n for the new parent container 410 n with an article ofclass Data_Article 378.Client 116 a then loads the generic data from a data device specified byuser 102 a and stores the generic data in the article of the new child container 140 n. The remaining fields of the new parent container 410 n and the new child container 140 n are set in a manner analogous to those ofcontainers 650 and 654 (FIG. 9) used to store the exemplary generic document described above. -
Method 1300 next proceeds to step 1306, in whichclient 116 a transmits a Lock Request message for theroot container 400 of the selectedworkspace 122 s toworkspace server 112 h as described above instep 1230. Upon receipt of a Confirmed Lock message fromworkspace server 112 h,client 116 a adds a NEW DOCUMENT entry to the summary_history field of its provisional copy of the root article 402 p, indicating the handle ofuser 102 a, the date and time at which the new document was added, and adjunctive information identifying the type and source of the document. - The container_article_length field of the provisional root container400 p is updated to reflect the modified length of the provisional root article 402 p.
Client 116 a then links the provisional root container 400 p to the new parent container 410 n.Client 116 a does this by adding a pointer to the new parent container 410 n to the child_array of the provisional root container (which is anArray_Container 304 in the present embodiment). -
Method 1300 next proceeds to step 1308, in which the new document is then posted toworkspace server 112 h.Client 116 a sends the following toworkspace server 112 h to post the new document: - (i) a Post New Document request; and
- (ii) a branch of the
container tree 124 including the provisional root container 400 p and the entire new document sub-tree, including the new parent container 410 n and all of its child containers. - The identity of the container on which to take the action, namely the
root container 400, is implicit in the request.Method 1300 next proceeds to step 1310, in whichclient 116 a waits for a Confirm Post and Unlock message fromworkspace server 112 h. This message is sent byworkspace server 112 h to confirm that it has received the Post request fromclient 116 a, that the workspace'sheader file 660 has been modified and anew document file 662 created, and that theroot container 400 has been unlocked. If a Confirm Post and Unlock message is not received within a selected time out period,client 116 a may be configured to re-transmit the Post request or to discard the newly added document or take another corrective action, such as informinguser 102 a of the missing confirmation message and allowing the user to choose a course of action.Workspace server 112 h broadcasts a Post and Unlock Update message to allclients 116 connected with theworkspace 122 s to advise them of the newly updatedroot container 400 and the newly added document sub-tree. The nature of the broadcasted message and the response of every otherconnected client 116 is described below inmethod 1500 of FIG. 17 andmethod 1600 of FIG. 18. Upon receipt of a Confirm Post and Unlock message fromworkspace server 112 h,client 116 a freezes its copy ofcontainer tree 124, replaces theroot container 400 with the provisional root container 400 p (including its provisional root article 402 p), and adds the new parent container 410 n to theroot container 400's array of children.Client 116 a then unfreezes its local copy ofcontainer tree 124. In this way,client 116 a's local copy ofcontainer tree 124 is synchronized withworkspace server 112 h's master copy ofcontainer tree 124. -
Method 1300 then ends. - Reference is next made to FIG. 16, which illustrates a
method 1400 for a View/Edit Document transaction.Method 1400 is described above as followingstep 1216 if theuser 102 a chooses to view or edit the selected document. In another embodiment,method 1400 may also be initiated directly fromstep 1212 by providinguser 102 a with an option to select a document and directly view or edit it. -
Method 1400 begins indecision step 1402, in whichclient 116 a determines whether it has previously gotten the document sub-tree (which is stored in adocument file 662 in file system 104) in which the selected document is stored. As described in relation to step 1210 ofmethod 1200, whenclient 116 a initially opens a workspace, it gets theroot container 400 for the container tree and theparent containers 410 for each document sub-tree.Client 116 a does not get the entire document sub-tree for each document stored in the workspace. Accordingly, client a must get the document sub-tree (or at least a part of it) in order to display the document foruser 102 a to view and/or edit. - If the client has previously downloaded the document sub-tree during the current connect session,
method 1400 proceeds to step 1404. Otherwise,method 1400 proceeds to step 1408. - In
step 1404,client 116 a checks eachcontainer 140 in its local copy of the document sub-tree (i.e. the copy stored byclient 116 a inclient computer 119 a) for the selected document to determine if anysuch container 140, including theparent container 410, has its container_valid field set to FALSE. Such acontainer 140 is referred to as an invalid container. - A container's container_valid field may be set to FALSE in accordance with method1600 (FIG. 18), described below, when the copy of the
container 140 stored by a client is not consistent with the copy of thesame container 140 stored byworkspace server 112 h infile system 104. Should anycontainer 140 in a document sub-tree be invalid, aclient 116 must get a new, valid copy of thecontainer 140 fromworkspace server 112 h before subsequently displaying its contents to a user 102. - If any
container 140 in the document sub-tree for the selected document has had its container_valid field set to FALSE, thenmethod 1400 proceeds to step 1406. Otherwisemethod 1400 proceeds to step 1410. - In
step 1406,client 116 a gets all invalid containers in its document sub-tree for the selected document fromworkspace server 112 h. In the present embodiment,client 116 a does this by making a Get Flagged Containers request.Client 116 a transmits the following information toworkspace server 112 h: - (i) a Get Flagged Containers request;
- (ii) the container_id of the
parent container 410 of the document sub-tree; - (iii) a portion of the
container tree 124, which includesparent container 410 and all of its children (and their children, recursively), in a special format in which each node contains the container_id of thecontainer 140 at that node and a “get_flag”, which is marked FALSE if the client does not require a new valid copy of the container (i.e. the container_valid field of the container is marked as TRUE in the local copy of the container tree 124) or is marked as TRUE if the client does require a new valid copy of the container. -
Workspace server 112 h responds to the Get Flagged Containers request by transmitting a portion of the document sub-tree beginning with the identifiedparent container 410 and then transmitting each child (including grandchildren, etc.) of theparent container 410. Any container for which the get_flag was marked as TRUE is transmitted in full. In contrast, any container for which the get_flag was marked as FALSE is transmitted in an abridged format which does not include the container'sarticle 142 and may not include other fields of the container. The abridged form of a container may consist only of the container's container_id field. Alternatively, containers for which the get_flag was FALSE may be omitted by theworkspace server 112 h in its return transmission toclient 116 a. - The Get Flagged Containers request described is used to allow a client to get any number of containers that have a common parent (or grandparent, etc.) container, simply by identifying the common parent and flagging each container to be gotten. Alternatively, branches of the container sub-tree for which the container_valid field is TRUE in all children (including grandchildren, etc) may be omitted from the sub-tree transmitted by
client 116 a toworkspace server 112 h. In another alternative embodiment,client 116 a may simply send a list of containers that it wishes to get andworkspace server 112 h may simply transmit up-to-date versions of only those containers. Any mechanism by whichclient 116 a can request and receive an updated copy of every invalid container in the document sub-tree for the selected document may be used in this step. Afterstep 1406,method 1400 proceeds to step 1410. - In
step 1408,client 116 a gets the entire document sub-tree for the selected document by sending the following information toworkspace server 112 h: - (i) a Get Document request;
- (ii) the container_id of the
parent container 410 of the document sub-tree. -
Workspace server 112 h responds by transmitting the entire document sub-tree for the selected document, including theparent container 410.Workspace server 112 h sends all of the containers stored in thedocument file 662 for the selected document toclient 116 a. The location of thedocument file 662 is set out in thedirectory 664 of the workspace'sheader file 660.Method 1400 next proceeds to step 1410. - In
step 1410client 116 a freezes its local copy of thecontainer tree 124 to ensure that no other process modifies the container tree.Client 116 a then updates its local copy ofcontainer tree 124. Ifclient 116 a executedstep 1406 above,client 116 a replaces theinvalid containers 140 with the up-to-date versions transmitted byworkspace server 112 h, thereby rendering each container in the document sub-tree for the selected document valid (each new container will have its container_valid field set as TRUE when the container is transmitted byworkspace server 112 h). Ifclient 116 a executedstep 1408 above,client 116 a adds the complete document sub-tree retrieved instep 1408 to its local copy ofcontainer tree 124. In this way,client 116 a synchronizes its local copy of the selected document's sub-tree withworkspace server 112 h's master copy of the sub-tree prior to viewing and/or editing the selected document.Client 116 a then unfreezescontainer tree 124 andmethod 1400 proceeds to step 1412. - When
step 1412 begins,client 116 a has a fully updated copy of the document sub-tree for the selected document. Instep 1412, one of the editors included inclient 116 a is invoked to display the selected document touser 102 a and, ifuser 102 a has owner or worker privileges in the selectedworkspace 122 s, to allow theuser 102 a to edit the selected document.Client 116 a is able to determine the data type of the selected document based on the class of the parent article of the document sub-tree.Client 116 a invokes the appropriate editor to display the document and to allowuser 102 a to edit it.Method 1400 then terminates. - If the selected document is a text document, such as
text document 190, which is stored indocument sub-tree 412 of container tree 124 (FIG. 5), thenclient 116 a will initiatetext editor 800. The operation oftext editor 800 is explained below in the context oftext document 190. - As described above, a text document is divided into sections which, in the present embodiment, correspond to the text document's paragraphs. Each paragraph is stored in a
Paragraph_Article 370, which is contained in a sibling container. The sibling containers form a linked list in an order corresponding to the order of the associated paragraphs in the text document. The specific sibling container used for any particular paragraph depends on whether the paragraph contains elements other than text. The sibling containers have acommon parent container 410.Text editor 800 is configured to display a text document to user 102 by progressively extracting, from the linked list of sibling containers, the text of each paragraph as well as any associated elements and displaying the extracted information. - Typically,
text editor 800 will displaytext document 190 in a window on the display screen ofclient computer 119 a. Whentext editor 800 is initially invoked to edittext document 190, it begins extracting and displaying the text of the first paragraph ofdocument 190 fromarticle 426 incontainer 424, and progressively extracts and displays text and other elements (such as graphic image 193 stored incontainers text editor 800 provides a caret which may be moved in the display window byuser 102 a using typical caret navigation keys. When the caret is moved out of the portion oftext document 190 displayed in the window, or whenuser 102 a scrolls up or down through thetext document 190,text editor 800 extracts additional text and other elements of thetext document 190 fromdocument sub-tree 412 and displays these elements. In this fashion,text editor 800 allows a user 102 to view any part oftext document 190. - In addition to allowing a user102 to view
text document 190,text editor 800 also permits users 102 with owner or worker privileges in workspace 122 to edit the contents of the selected document, except for sections of the document stored in containers in which the user's user_handle has been entered in the container_excluded_handle_list field. Before allowing a user 102, such asuser 102 a, to edit a section of text document 190 (or in conjunction with allowing a user 102 to do so),client 116 obtains a lock for the corresponding container as described below. In this document, the term “edit a document” refers to any activity or operation that may modify the contents of the document or any section of it. In the case of a text document, this includes any change in the character_data field of aParagraph_Article 370 in the document's sub-tree. Editing also includes any activity that may result in the addition of new sections to a document or the deletion of existing sections. - When a user102 indicates that he wishes to edit a section of a document,
client 116 checks the container_lock_handle field of its local copy of the associated container. If it is Null or if it the user_handle ofuser 102 a, transmits a Lock request toworkspace server 112 h to lock the corresponding container, 140. If the container_lock_handle field is not Null, thentext editor 800 provides an indication (such as a message on the screen ofclient computer 119 a or an audio indication) that the container is locked by another user 102. Text editor is configured to interpret any of the following actions by a user 102 as an indication that the user wishes to edit a section of a text document: - (i) selecting the section of the document, or positioning the caret in a section and then pressing a “Lock” button; or
- (ii) positioning the caret in a section and then modifying the section by typing or deleting a character; or
- (iii) selecting the section of the document and pressing a tool button which modifies any attributes (such as bold, italic, underline, justification) of the selected text; or
- (iv) selecting the section of the document and pressing a “Cut” button to delete the selected section and place the contents in an internal clipboard; or
- (v) selecting the section of the document, or positioning the caret in a section and then pressing a “Paste” button to replace the selected section with the contents of the internal clipboard or insert the clipboard contents at the caret location respectively; or
- (vi) selecting the section of the document, or positioning the caret in a section and then pressing a tool button to replace the selected section with an embedded object or insert the embedded object at the caret location respectively.
- In another embodiment of the present invention, some of these actions may not automatically be interpreted as an indication that a user102 wishes to edit a section of a document and/or additional actions may be interpreted as such an indication.
- For example, if
text document 190 is displayed on the screen ofclient computer 119 a,user 102 a may editparagraph 192 c by positioning the caret inparagraph 192 c and then pressing a Lock button displayed bytext editor 800 or by pressing certain character keys on the attached keyboard or by deleting any portion of the text. -
Text editor 800 is configured to allow a user 102 to simultaneously lock more than one section of a text document to facilitate editing of a portion of the text document longer than a paragraph. A user 102 may lock multiple sections of a text document by selecting, either via mouse or keyboard commands, some or all of the sections and pressing the Lock button. After locking one section of a text document, a user 102 may also lock additional sections of the document by moving the caret to another paragraph of the text document and pressing a character key or deleting one or more characters. In the present embodiment,text editor 800 is configured to allow only contiguous parts of a text document to be locked by one user 102. Accordingly, a user 102 may only obtain locks for paragraphs that are adjacent to one another in the list of child sibling containers of theparent container 410 of a text document (i.e containers - When
text editor 800 transmits a Lock Request message identifying one ormore containers 140,workspace server 112 h checks the container_lock_handle field of each indicated container. If all of the indicatedcontainers 140 are unlocked,workspace server 112 h locks all of them by setting their container_lock_handle field to the requesting user's user handle.Workspace server 112 h then transmits a Confirm Lock message totext editor 800.Text editor 800 may then display the locked sections of the text document in a selected color to indicate that they have been locked. (Text editor 800 is a part ofclient 116 and is able to communicate with workspace server and other entities using the communication link established in step 1208). If one or more of the identified containers is already locked by another user 102 (i.e. the container_lock_handle field records the user_handle of the other user 102),workspace server 112 h transmits a Refused Lock message totext editor 800. - In response to a Refused Lock message,
text editor 800 may optionally be configured to display a message indicating that the paragraph (or, more precisely, its corresponding container 140) is locked by another user and therefore cannot be edited. The other user may or may not be identified in the message. For efficiency,text editor 802 may optionally be configured to allow a user to begin editing a paragraph after first indicating that he wishes to do so, but before a Confirm Lock message is received. This allows the user to edit paragraphs without delays resulting from communication delays betweentext editor 800 andworkspace server 112 h. If a Refused Lock message is received, any editing performed on the paragraph (or any formatting change) is discarded. - When
workspace server 112 h transmits a Confirm Lock message to aclient 116, it also broadcasts a Lock Update message to allclients 116 connected with the workspace to advise them of the newly granted lock(s) and the user_handle of the user 102 that obtained the lock(s). For example, ifuser 102 alocks containers workspace server 112 h will transmit a Lock Update message to all clients indicating bothuser 102 a's user_handle and identifying the locked containers.Client 116 a, which transmitted the Lock Request message, ignores the Lock Update message after determining that it relates to a lock obtained byclient 116 a. Alternatively,workspace server 112 h may transmit a Lock Update message to all clients with the exception of the originatingclient 116 a. Every otherconnected client 116 modifies the container_lock_handle field of the indicatedcontainers 140, if those containers have been previously downloaded by theparticular client 116. In this way, everyclient 116 that is currently displaying a document (through one of the editors built into the client 116) is advised of every lock granted for any section of the document. Similarly,workspace server 112 h transmits an Unlock Update message advising all clients when a container is unlocked (See step 1511 (FIG. 17)). - While one
user 102 a is editing one locked portion (consisting of one or a more contiguous sections) of a text document, another user (i.e.user 102 b) may lock and edit another portion of the text document.Workspace server 112 h will accept and confirm Lock Requests from different clients 116 (or, more precisely, from their text editors) at the same time. - Each
text editor 800 may display unlocked sections, sections locked by the local user (i.e.user 102 a of theclient 116 a) and sections locked by other users 102 in different colors to identify their status.Text editor 800 may be configured to display sections locked by all different users in different colors, or may display the user_screen_name of the user 102 that has locked each section adjacent to or over the section. In this way, a user 102 is kept informed about any locked sections of the document that he is viewing, even if the user has no sections of the document locked. - When the user102 has finished editing a part of a text document (which may be one or more contiguous sections) that he has previously locked,
text editor 800 posts the edited sections by transmitting the following toworkspace server 112 h: - (i) a Post request;
- (ii) the container_id of the parent container of the container (or containers) that are being posted; and
- (iii) the modified containers140 (including their
articles 142 with their edited character_data fields) to be posted. If all sections associated with the locked containers have been provisionally removed fromdocument sub-tree 412, there will be no modifiedcontainers 140 to be posted, and the Post request will be interpreted byworkspace server 112 h as a request to remove the locked containers from the master copy ofcontainer tree 124. - In the present exemplary embodiment,
text editor 800 transmits the container_id of the parent container of the containers so that a single Post request may be used to identify the location in thecontainer tree 124 under which the modified containers are to be posted. In an alternative embodiment,text editor 800 may post the new or updated container(s) by simply transmitting the Post request and the container(s) themselves. - The operation of the
workspace server 112 h when it receives the Post request is described below asmethod 1500. - In response to the Post request,
workspace server 112 h will transmit either a Confirm Post message or a Refuse Post message. If a Confirm Post message is received fromworkspace server 112 h, then the provisionally posted containers are made permanent. If a Refuse Post message is received, thentext editor 800 may be configured to discard the previously provisionally posted edits and restore the container sub-tree to the condition prior to obtaining the locks on the posted containers, or it may be configured to re-transmit the Post message one or more times, or it may be configured to display a message touser 102 a and allow him to select a course of action, or a combination of these actions. -
Text editor 800 may make various types of Post requests. The simple Post request above does not result in the containers that are being posted becoming unlocked. If theuser 102 a indicates that a lock is to be released, or iftext editor 800 determines that a lock must be released,text editor 800 will transmit a Post and Unlock request, which is otherwise the same as a Post request. - As
user 102 a edits a text document,text editor 800 automatically adds and deletes containers in a provisional list of child sibling containers of theparent container 410 of the document sub-tree as new sections (paragraphs) are added and deleted.Text editor 800 also permits theuser 102 a to add, edit or delete embedded elements within paragraphs. When the user 102 attempts to edit or delete an element embedded within a paragraph,text editor 800 requests a lock, as described above, for the associated child container of the sibling container in which the paragraph text is stored.Text editor 800 then invokes the appropriate editor for the type of embedded data. If the embedded data is text, thentext editor 800 may control the editing of the embedded text itself or may invoke another instance of atext editor 800 to control the editing of the embedded text. - To create a new paragraph and add it to a text document, the user102 typically presses the Enter key while the caret is positioned in a paragraph (“the current paragraph”) which is either unlocked or is locked by the user 102. If the user presses the Enter key while the caret lies in an unlocked paragraph,
client 116 transmits a Lock request to gain a lock on the unlocked paragraph. A new paragraph is created and inserted into the text document either before or after the current paragraph depending on the position of the caret when the Enter key is pressed. If the caret lies prior to the first character in the current paragraph, a new empty paragraph is inserted into the document prior to the current paragraph. If the caret lies within the current paragraph, the current paragraph is truncated at the caret location and the remaining character data is used to initialize a new paragraph which is inserted after the current paragraph. If the caret lies after the final character in the current paragraph, a new empty paragraph is inserted into the document after the current paragraph.User 102 a may similarly add new paragraphs immediately prior to, within, between, or immediately after paragraphs locked by theuser 102 a. Whenever a new paragraph is created,text editor 800 creates a new Sibling_Childless_Container 316 (FIG. 7) for the new paragraph and links it into the provisional list of child sibling containers of the parent container for the document sub-tree. If an embedded element is subsequently added to the paragraph, theSibling_Childless_Container 316 may be replaced with aSibling_Array_Container 314 or a Sibling_List_Container 312 (FIG. 7). -
Text editor 800 manages merging of adjacent paragraphs in a similar manner. If the user 102 presses the Backspace key while the caret is positioned prior to the first character in a paragraph, an attempt is made to merge the current paragraph with the previous paragraph. If the user 102 presses the Delete key while the caret is positioned after the final character in a paragraph, an attempt is made to merge the current paragraph with the next paragraph. If either of the paragraphs to be merged is not locked byuser 102 a,text editor 800 makes a Lock request for unlocked paragraph(s). If the lock(s) are confirmed by theworkspace server 112 h, thentext editor 800 combines the paragraphs by extracting the character data from one paragraph (or more precisely, from the Paragraph_Article field of thearticle 142 contained within thecontainer 140 corresponding to the paragraph) and adding it to the character data in the other paragraph.Text editor 800 removes the empty paragraph from the document and removes its corresponding sibling container from the provisonal list of sibling containers in the document sub-tree, updating the list_next_pointer and list_previous_pointer fields of the adjacent containers in the provisional list. During a later Post request,workspace server 112 h replaces the two lockedcontainers 140 with the single container containing the merged Paragraph_Article. - When the user102 has completed editing a contiguous portion of the document (which may include embedded elements, or may comprise an entire embedded element or contiguous sections of an embedded element or a single section of an embedded element), text editor 800 (or another editor invoked to control editing of an embedded element) provisionally creates new containers and/or modifies existing containers and posts them to
workspace server 112 h. For each new paragraph in the text document, a new container (typically a Sibling_Childless_Container 316) and a new Paragraph_Article 370 (with character_data field set to new text), is provisionally created. The remaining fields of the new containers are also appropriately initialized. Upon receiving a Confirm Post message fromworkspace server 112 h, text editor 800 (or another editor invoked to control editing of an embedded element) freezes its local copy ofcontainer tree 124, updates the document sub-tree (making provisional containers permanent), and unfreezescontainer tree 124. - Text editor800 (and any other editor that is invoked by text editor 800) also modifies the contents of the parent article of a document sub-tree to update the summary_history field to track major events in the history of a document, the text_format and text_document_format fields to modify the default text and document formats, as well as the formatting_data and change_tracking_data fields to track subsequent format changes and the editing history of the document. Some fields of the parent article, such as the text_document_statistics field, may not be calculable until child containers are ready to be posted. To avoid persistently locking the parent container during multi-user editing sessions so that calculated fields in its parent article may be updated, an alternative form of a Post request may be used to post the
unlocked parent container 410 at the same time as the child containers are posted. In this form,text editor 800 updates the calculated fields in a provisional copy of the parent article in anticipation ofworkspace server 112 h successfully replacing the 2.unlocked parent container 410. The parent container and new or modified child containers are posted toworkspace server 112 h using a Blind Post request as described below instep 1506 ofmethod 1500 in FIG. 17. - Reference is made to FIGS. 2 and 4. For example, as
user 102 a is editingtext document 190,text editor 800 updates the structure and contents of its local copy ofcontainer sub-tree 412. Ifuser 102 a is editingparagraph 192 a, thentext editor 800 will have obtained a lock forcontainer 420 foruser 102 a. Ifuser 102 a then moves the caret intoparagraph 192 b and begins to edit it,text editor 800 will obtain a lock oncontainer 424. Ifuser 102 a then moves the caret intographic image 194 and indicates that he wishes to edit it (for example, by double clicking on graphic image 194), thentext editor 800 will invoke agraphic image editor 802 to control the editing ofgraphic image 194. In the present embodiment, whenuser 102 a initiates editing of an embedded element,text editor 800 posts and unlocks all containers that it currently has locked before allowing the embedded element to be edited.Graphic image editor 802 is then invoked and allowsuser 102 a to identify one or more sections ofgraphic image 194 that he wishes to edit. Whenuser 102 a identifies a section,graphic image editor 802 obtains a lock on the corresponding container. For example, ifuser 102 a wishes to edit the upper right corner ofgraphic image 194, thengraphic image editor 802 will obtain a lock oncontainer 450. Simultaneously, another user 102 may lock another section ofgraphic image 194 by locking one or more ofcontainers users 102 a may simultaneously edit different sections of an embedded element in a text document.Graphic image editor 802 may display the boundaries of locked sections ofgraphic image 194 in different colors to identify users 102 that have locked those sections, based on the locks thatgraphic image editor 802 has obtained and based on Lock Update messages received fromworkspace server 112 h. - In another embodiment, the text editor may allow embedded elements to be edited without releasing its locked containers. Such a text editor may be configured to lock non-embedded and embedded sections of a document, either contiguously (based on their appearance in the document) or non-contiguously.
- If a user102 wishes to edit the overall image attributes of
graphic image 194, thengraphic image editor 802 will obtain a lock oncontainer 440 and display a dialog box which allows the editable attributes recorded in the image_attributes field to be edited.Graphic image editor 802 will then postcontainer 440. - If a user102 wishes to modify the way in which
graphic image 194 is divided into sections, thegraphic image editor 802 will obtain a lock oncontainer 440 and all of itschild containers graphic image 194 and then display a dialog box allowing user 102 to specify the new division ofimage 194 into sections.Graphic image editor 802 will then modify the child containers (including adding and/or deleting containers) as well as modifying container 444 (the array_dimensions and child_array fields).Graphic image editor 802 will then post all of the locked containers. - Prior to posting any container,
text editor 800 and graphic image editor 802 (and all other parts of client 116) recalculate the container_article_length field of the container. - The operation of other editors built into
client 116 in the present embodiment is analogous to the operation oftext editor 800. Each particular editor has some operational differences based on the type of document that the editor is intended for. - The
presentation editor 804 is configured to allow a user 102 to edit the structure and content of a presentation document, such aspresentation document 200. Incorporated withinpresentation editor 804 is aslide editor 810 that is invoked to allow a user 102 to edit an individual slide. A slide may comprise various types of data such as text (i.e. paragraphs 214 on slide 202), images (i.e.graphic image 220 on slide 206), shapes (i.e.vertical line 210 onslide 202 andarrow 216 on slide 204), windows for displaying audio/video clips (i.e. audio/video clip 218 on slide 204) and other elements. - To edit the contents of these individual elements,
slide editor 810 invokes an appropriate editor that is configured to lock the associatedcontainers 140, allow a user 102 to edit the articles of the containers, update the container fields and then post the revisedcontainers 140. In some cases, a user may wish to make a common change to one or more elements on a slide. For example, a user may wish to select a number of elements and move them all 20 pixels to the left.Slide editor 810 allows this by obtaining a lock for the containers corresponding to all of the selected elements, allowing the user to specify the change desired and then modifying the articles of all of the locked containers before posting them. In this example, the article_window field of the associated article for each element would be modified. (Child containers used to store parts of elements, such as pixel blocks, may not need to be modified. For example, to move and/or resizegraphic image 206, only the article_window field ofarticle 532, incontainer 530, must be changed.) - If a user102 attempts to move a single element in a slide, it may be desirable to allow the user to do so by simply clicking and holding on the element, dragging it to a new location and unclicking. To facilitate this,
slide editor 810 is configured to transmit a Lock Request to obtain a lock for the container associated with the article, and then to transmit a Post and Unlock request after the Lock is obtained and after the user 102 is finished moving the element. It is possible that due to communication speed limitations, the user may be finished moving the element before the lock is obtained. In this case, slide editor waits until after the lock is obtained to modify the locked container and then posts it. If the Lock request or the Post request is refused by theworkspace server 112 h, the element is returned to its original position prior to the user clicking on it, and an explanatory message is displayed to the user 102. Alternatively,slide editor 810 may be configured to allow a user to move or edit a slide element without locking it. When the user has completed the move or editing operation, the container corresponding to the element is posted using a Blind Post request described below instep 1506 ofmethod 1500 in FIG. 17. - Changes to the default properties of the presentation are controlled by the
presentation editor 804 in a similar way by locking the parent container of the presentation document's document sub-tree, allowing the default_background, default_title_properties, default_text_properties and default_shapes of its article to be edited, then transmitting a Post and Unlock message to update the parent container and its article. - The other editors of
clients 116 are similarly configured to allow documents and embedded elements within documents to be edited by a user by locking the containers associated with one or more sections of the document or element, allowing the user to edit the selected sections, updating the articles of the locked containers and posting the locked containers. - The contiguity rule described above in relation to
text editor 800 is not applied bygraphic image editor 802,presentation editor 804,table editor 806, audio/video clip editor 808 orslide editor 810. Documents typically edited by theseeditors Array_Container 304 at the head of the document sub-tree. In addition, embedded elements (such as graphic image 194 (FIG. 2) edited by these editors are typically stored in a portion of a document sub-tree that has anArray_Container 304 as a parent (typically the Array_Container will be a child of another container, such as a List container (for example,Array_Container 440, which is the parent of a part ofdocument sub-tree 412 is itself the child of container 424)). In both cases, the child containers of anArray_Container 304 typically do not have any inherent or necessary “next” or “previous” relationship between them, and accordingly the concept of contiguity does not apply. - The child containers of an Array_Container304 (such as container 494 (FIG. 6)) may have an order relationship. For example, the “z-order” of elements (the order in which elements are drawn on a slide, so that elements drawn later overlap or obscure elements drawn earlier) in a slide may be determined by the order in which the pointer to the child container associated with each element appears in the child_array field of their common
parent Array Container 304. If a user edits the z-order of elements in a slide,slide editor 810 will lock theArray Container 304, edit its child_array field, and post the container. This allows the z-order of elements to be changed without locking all containers for each element being reordered and may reduce the amount of data that must be transferred if the elements being reordered are large. - Reference is next made to FIG. 17 which illustrates a
method 1500 by which aworkspace server 112 h responds to a Post or a Post and Unlock message from aclient 116, such asclient 116 a.Method 1500 begins instep 1502, in whichworkspace server 112 h receives a Post request fromclient 116 a. -
Method 1500 next proceeds to step 1504 in whichworkspace server 112 h freezes its master copy of thecontainer tree 124, effectively freezing theheader file 660 and the document files 662. As described above in relation to step 1208 (FIG. 14a), a separate process is instantiated withinworkspace server 112 h to handle every client that connects toworkspace 122 s. Freezing the master copy of thecontainer tree 124 ensures that none of these other processes modifies shared structures while the Post request is being handled. -
Method 1500 next proceeds to step 1506, in whichworkspace server 112 h checks its master copy of thecontainer tree 124 to ensure that the Post request may be completely accepted. The Post request received instep 1502 may include containers that are being blindly posted byclient 116 a (i.e. which are being posted without having been previously locked byclient 116 a) andcontainers 140 which are being posted after having previously being locked byclient 116 a (i.e a regular Post request). -
Workspace server 112 h will accept a Blind Post request for acontainer 140 if: - i. the container is not currently locked by any user102 other than
user 102 a; - ii. the time stamp of the container received from in the Post request matches the time stamp of the container in the master copy of the
container tree 124. - Every time that
workspace server 112 h modifies acontainer 140 in the master copy ofcontainer tree 124, it updates the time stamp of the container (in step 1508). If the time stamp of a blindly postedcontainer 140 is different from the time stamp of thesame container 140 in master copy ofcontainer tree 124, then thecontainer 140 in the master copy ofcontainer tree 124 has been modified after thecontainer 140 was last received byclient 116 a, (either as part of an Update message or at the request ofclient 116 a). This may occur if thecontainer 140 has just been posted by anotherclient 116, but an Update message relating to the Post request has not yet been processed byclient 116 a. If thecontainer 140 in the master copy of the container tree was to be replaced with the postedcontainer 140, any such modification would likely be lost. Accordingly, if the two time stamps do not match, the Blind Post request is refused. -
Workspace server 112 h will accept a regular Post request if the container is locked in the master copy ofcontainer tree 124 byuser 102 a (i.e. the container_lock_handle field of the container containsuser 102 a's user_handle). - If any of the conditions for posting any container in the Post request are not met, whether the container is being blindly posted or regularly posted, then
workspace server 112 h returns a Post Refused message toclient 116 andmethod 1500 ends. A Post Refused message may include an explanation of the reason that a Post request was refused, allowing theclient 116 that originated the Post request to display an appropriate message to its user 102 proceeds to step 1508. - In
step 1508,workspace server 112 h modifies thecontainer tree 124 to include the containers posted byclient 116 a. This may involve editingheader file 660 and/or document files 662. Any out-datedcontainers 140 are discarded. In another embodiment, such out-dated containers may be stored temporarily or permanently to allow older versions of documents stored in a workspace 122 to be recreated. If anew container 140 is posted (i.e. acontainer 140 that did not exist in thecontainer tree 124 previously), it is added to thecontainer tree 124 andheader file 660 and document files 662 are updated accordingly. -
System 100 supports several different types of Post requests, which may be specific to the kind ofparent container 410 involved. The response ofworkspace server 112 h to the Post request received instep 1502 may depend on the type ofcontainers 410 involved. - For example, in the present embodiment,
text document 190 is stored using aList_Container 302 as theparent container 410 ofdocument sub-tree 412 and usingsibling containers paragraphs user 102 a hascontainers 428 and 432 (which correspond toparagraphs user 102 a may perform any editing operation that adds paragraphs beforeparagraphs 192 c, betweenparagraphs paragraph 192 d. Similarly,user 102 a may delete either or both ofparagraphs workspace server 112 h than were initially locked. To simplify such post operations with respect to sibling lists,workspace server 112 h processes them by splicing all of the posted containers into the sibling list, in the place of the previously lockedcontainers workspace server 112 h updates the list_next_pointer and list_previous_pointer fields of any containers adjacent to the newly spliced containers in the sibling list. - Similarly, post transactions relating to
Array_Container 304 and its children may be handled using an add children operation, which adds one or more posted containers to the Array_Container's list of child ofcontainers 140, a replace children operation, which allows some or all of thecontainers 140 locked by aclient 116 a to be replaced in one Post request or delete children operation, which allows some or all of thecontainers 140 locked by aclient 116 a to be deleted. - All
containers 140 successfully posted by a client will be valid containers and will accordingly have their container_valid flags set to TRUE. All containers that are stored in theheader file 660 anddocument file 662 at any time are considered valid containers, even if they are locked and are currently being edited by a user 102. -
Method 1500 next proceeds todecision step 1510. If the Post request received fromclient 116 a includes an Unlock request,method 1500 proceeds to step 1511. Otherwise, the request is merely a Post request andmethod 1500 proceeds to step 1512. - In
step 1511,workspace server 112 h unlocks all containers included in the current Post and Unlock request (other than those containers deleted in step 1508) by setting their respective container_lock_handle fields to Null. -
Method 1500 next proceeds to step 1512, in which the workspace is unfrozen.Workspace 112 h returns a Confirm Post message toclient 116. In response,client 116 freezes its local copy ofcontainer tree 124,updates container tree 124, then unfreezescontainer tree 124.New containers 140 which were provisionally created byclient 116 prior to the Post request are added tocontainer tree 124. Existing containers for which provisional copies were made byclient 116 prior to the Post request are replaced incontainer tree 124. In this way,client 116's local copy ofcontainer tree 124 is synchronized withworkspace server 112 h's master copy ofcontainer tree 124. -
Method 1500 next proceeds todecision step 1514, in whichworkspace server 112 h determines the method in which allclients 116 that are connected to the workspace 122 are to be advised of the changes to thecontainer tree 124. -
Workspace server 112 h determines the size of an Update Message corresponding to the Post request received instep 1502, including, if applicable, an Unlock message.Workspace server 112 h may do this by summing the sizes of all posted containers and any additional information that may have to be sent, such as the identify of the originatingclient 116 a. The size of such an Update message is compared to a selected Push Update Threshold. In the present embodiment, the Push Update Threshold is 32 kilobytes, although a different threshold may be chosen based on the speed of thecommunication network 114 and other factors. If the Update Message exceeds the Push Update Threshold,method 1500 proceeds to step 1518. Otherwise,method 1500 proceeds to step 1516. - In
step 1516,workspace server 112 h prepares an Update Message containing the entire posted sub-tree, including the contents of everycontainer 140 that was posted, and identifies containers that have been unlocked as part of the Post request. The Update Message also identifies the client 116 (the “originating client”) from which the Post request was received instep 1502. Each posted container is set out in its current valid form as it is recorded in theheader file 660 or the document files 662. This Update Message is referred to as a “Chubby Update Message”, since it includes the entire posted sub-tree and the full contents of the containers updated instep 1508.Workspace server 112 h then transmits the Update Message to all clients connected to the workspace.Method 1500 then ends. - In
step 1518,workspace server 112 h creates a “Skinny Update Message” which comprises the entire posted container sub-tree with the container_article field set to Null for all containers. Each container in the sub-tree is transmitted in a special format in which each node contains the container_id of thecontainer 140 at that node and a “post_flag”, which is marked TRUE if the container was posted, and FALSE if it was not posted instep 1508. The Skinny Update Message also identifies the originatingclient 116 from which the Post request was received instep 1502.Workspace server 112 h transmits the Skinny Update Message to allclients 116 connected to the workspace 122.Method 1500 then ends. -
Workspace server 112 h broadcasts Update messages to allclients 116 connected with an active workspace 122 in response to various client-server transactions. In this way, everyclient 116 that is currently connected toworkspace 122 s is advised of the activities of everyother client 116 as they are posted. Aclient 116 a which performs the originating transaction ignores all Update messages that relate to its own connection.Clients 116 respond to an Update message in a manner that is appropriate to the kind of Update message being broadcasted.System 100 supports several different kinds of Update messages, including Connect Update, Disconnect Update, Lock Update, Unlock Update, Post Update, Post and Unlock Update, etc. The Update message corresponds to the originating transaction and additionally includes the user_handle of the originating user. - Reference is next made to FIG. 18, which illustrates a
method 1600 by which aclient 116 processes an Post Update message (which may be Chubby or Skinny) from aworkspace server 112 h. -
Method 1600 begins instep 1602 in which theclient 116 receives the Update Message. -
Method 1600 next proceeds todecision step 1603, in which the originating user 102 of the Post which resulted in the Update Message is identified. If the originating user 102 is the same user operating theclient 116, then the Update Message is discarded andmethod 1600 ends. Otherwise,method 1600 proceeds to step 1604. - In
step 1604, theclient 116 freezes its local copy of thecontainer tree 124 to ensure that no editor or other process modifies the container tree. -
Method 1600 next proceeds todecision step 1606. If the received Update Message is Chubby, thenmethod 1600 proceeds to step 1608. Otherwise,method 1600 proceeds to step 1612. - In
step 1608,client 116 updates its local copy of thecontainer tree 124 to include the updatedcontainers 140. If the Chubby Update Message relates to a document for whichclient 116 has never done a View/Edit transaction (Method 1400, FIG. 16) during the current session, then only theparent container 410 of the document is updated. The remaining containers in the Chubby Update Message are discarded. If, within the document sub-tree for a document for which a View/Edit transaction has been performed,client 116 has not previously gotten a container that is indicated in the Chubby Update Message, the container is added to the client's local copy ofcontainer tree 124 and is updated. If the Chubby Update Message indicates that acontainer 140 has been deleted fromcontainer tree 124,client 116 deletes thecontainer 140 from its local copy ofcontainer tree 124. -
Method 1600 next proceeds to step 1610, in whichclient 116 unfreezes its local copy ofcontainer tree 124.Method 1600 next proceeds to step 1620. - In
step 1612,client 116 marks its local copy of eachcontainer 140 indicated in the Skinny Update Message as invalid by setting the container's container_valid flag to FALSE. If the Skinny Update Message relates to a document for whichclient 116 has never done a View/Edit transaction (Method 1400, FIG. 16) during the current session, then only theparent container 410 of the document is marked as invalid. The remaining containers in the Skinny Update Message are discarded. If, within the document sub-tree for a document for which a View/Edit transaction has been performed,client 116 has not previously gotten a container that is indicated in the Skinny Update Message, the container is added to the client's local copy ofcontainer tree 124 and marked as invalid. Fields of thenew container 140 that are not included in the Skinny Update Message (i.e. the container_article field) are left blank. If the Skinny Update Message indicates that acontainer 140 has been deleted fromcontainer tree 124,client 116 deletes thecontainer 140 from its local copy ofcontainer tree 124. -
Method 1600 next proceeds to step 1614, in whichclient 116 unfreezes thecontainer tree 124. -
Method 1600 next proceeds to step 1616, in whichclient 116 determines if any container in the document sub-tree of the document it is currently displaying has been marked as invalid. If not,method 1600 proceeds to step 1620. Otherwise,method 1600 proceeds to step 1618. - In
step 1618,client 116 gets all invalid containers in the document sub-tree for the document that it is currently displaying. This is done in the same manner as instep 1406.Method 1600 next proceeds to step 1620. - In
step 1620,client 116 updates its display if required. For example, during text editing, this may result in some paragraphs that are currently being displayed being modified due to edits originated inother clients 116. The associated user 102 (i.e.user 102 a ofclient 116 a) will then be able to see any edits made by any other user, soon after the edits were posted toworkspace server 112 h. - In this way, changes made by any user102 to a document in a workspace 122 are transmitted to all other connected clients to be displayed to their associated users 102. The use of Skinny Update Messages to simply indicate that a change has been made to a container rendering the copy stored by a client invalid has the advantage that a comparatively small Skinny Update Message suffices to ensure that a client does not erroneously display an out-of-date section of a document, without requiring a possibly lengthy Chubby Update Message, which may simply be discarded by
client 116 instep 1608, to be transmitted. - In other embodiments,
method 1600 may operate differently. For example, in an alternative embodiment, all Update Messages may be Chubby. This may require substantially more data to be transmitted to all clients, but eliminates the need to update invalid containers as instep 1618. In another embodiment, all Update Messages may be Skinny, so that a document which was previously viewed, but is not currently being viewed by a user 102 is not kept up to date, potentially reducing the memory requirements forcontainer tree 124. - In another embodiment,
clients 116 may be configured to update their document sub-trees for a document that is not currently being displayed when a Chubby Update Message is received only if it is smaller than a selected threshold. If the Chubby Update Message exceeds the threshold, all containers in the client's local copy of the document sub-tree are deleted, and if the associated user decides to view or edit the document again, the client gets it instep 1408. - One embodiment of the present invention is implemented using Java™, a non-platform specific programming language that operates within network browsers. This has the advantage that
system 100 may be used on any platform that supports Java. This is not necessary, however, and any particular embodiment of present invention may operate only on one or more selected platforms and specific versions ofclients 116 may be developed for each platform. A skilled person will recognize that Java does not support multiple inheritance, which is used to describe the definition of container and article classes. A skilled person will be capable of defining equivalent container and article classes without using multiple inheritance. Alternatively, the present invention may be implemented using a programming environment such as Microsoft™ C# and .NET™. - In another embodiment of the present invention, it may be desirable to limit users102 from having multiple simultaneous logins to the system, or from connecting to more than one workspace at a time. In such an embodiment, a presence table may be used. A presence table includes one record for each user 102 who is presently logged into the system. The record for each user has the following structure:
Field Contents presence_handle Unique identifier identical to the user_handle field of the user 102's user record in user database 106 presence_id Unique identifier identical to the workspace_id field for the workspace 122 to which user 102 is presently connected, or Null in the event user 102 is not presently connected to a workspace 122 presence_time_stamp Records the last time at which the user 102 communicated with a master server 110.This field is kept up to date by the master servers 110. - The presence table is used to measure overall user load on the system and to prevent duplicate logins. It is also used to timeout and disconnect inactive users102. When a user 102 performs a Login transaction as described above in method 1000 (FIG. 12), a record is added to the presence table with its presence_handle field set to the user_handle of the user 102 and the presence_id field set to Null. When the user 102 performs a Connect transaction and opens a workspace 122 as described above in method 1200 (FIGS. 14a and 14 b), the presence_id field of user 102's record in presence table 109 is updated to record the workspace_id of the newly opened workspace 122. When the user 102 disconnects from a workspace 122, the presence_id field of user 102's record in presence table 109 is reset to Null. When the user 102 logs out of
system 100, the user 102's record is removed from presence table 109. - Using the presence table, a
master server 110 may forcibly log out users who are not actively using the system. If a user's record in the presence table indicates that the user is not connected to a workspace (i.e. the presence_id field is Null) and the presence_time_stamp field has not been updated for a selected time_out_threshold, the user may be forcibly logged out. - Similarly, workspaces servers112 may use a separate presence table to track the activity of each user connected to a workspace. A user who has not communicated with a workspace server 112 for a selected timeout threshold may be forcibly disconnected from the workspace. Depending on the environment in which a particular embodiment is implemented, the environment may provide a facility for timing out inactive connections between workspace servers 112 and
clients 116. -
System 100 has been described using a single container tree for storing all documents within a workspace 122. In an alternative embodiment, different data structures may be used to store the document sub-tree for each document within a workspace. As an example of such an embodiment, each workspace may be stored within a single folder or directory withinfile system 104. Within the single directory, each document sub-tree may stored in a separate file. Themember list 143 may be stored in a separate file, which may have a pre-selected name and the contents of theroot container 400 of the workspace 122 may be set out in a separate file, which may also have a pre-selected name. - The Update messages transmitted by a workspace server112 to update
clients 116 regarding locks, posts, membership changes, etc. have been described as being sent to allclients 116, including theclient 116 that originated a Post message that then resulted in the Update message. The originating client has been described as ignoring such Update messages. In an alternative embodiment, the originating client may be excluded from the broadcast of such Update messages. - As mentioned above in relation to step1208, when a
client 116 connects to a workspace server 112, the workspace server initiates a separate process to communicate with theclient 116.Client 116 initiates two separate threads to communicate with the separate process created for the client 116: a primary communication thread and a listener thread. The primary communication thread is used to perform Lock requests, Get Requests, Post Requests and other communications with the workspace server. The listener thread is intended only to receive Update messages from the workspace server 112. In another embodiment, the workspace server 112 may initiate a single broadcast thread which communicates with the listener threads of allclients 116 connected to a workspace 122. - In another embodiment of a system according to the present invention, the contents of some or all of the
articles 142 contained within thecontainers 140 may be encrypted. Typically, thecontainers 140 will not be encrypted to allow the other container fields to be read. By encrypting only the contents ofarticles 142, the contents of the stored document may be concealed. Every member of a workspace, or at least every connected member of a workspace 122 may be provided with a key for decrypting the encrypted articles. - In
system 100,clients 116 create provisional containers to store modified versions ofcontainers 140 which are then posted toworkspace server 112 h. If the Post request is confirmed, the provisional containers are made permanent by adding them to the client's local copy of thecontainer tree 124. Alternatively, theclient 116 may be configured to modify its local copy ofcontainer tree 124 and to store the original version of modified containers in provisional containers, which would then be re-inserted into the client'slocal container tree 124, if a related Post request is refused. - In
system 100,header file 660 and document files 662 are kept up-to-date at all times byworkspace server 112 h. Theparent container 410 for each document sub-tree is stored in both theheader file 660 and onedocument file 662. To improve the efficiency of updating aparent container 410, thedirectory 664 record for eachparent container 410 in theheader file 660 may include a field for indicating that theparent container 410 has been modified, but that the modification has not been made in thecorresponding document file 662. Subsequently, when thedocument file 662 is accessed, theparent container 410 may be updated in conjunction with another change to it. -
System 100 has been described with anArray_Container 304 as itsroot container 400. In an alternative embodiment, aList_Container 302 may be used as theroot container 400 for a workspace 122. In this case,Sibling_List_Containers 312 andSibling_Array_Containers 314 may be used in the place ofList_Containers 302 andArray_Containers 304 as theparent containers 410 for document sub-trees. - In
system 100, embedded data is defined in direct or indirect child containers of another container. In an alternative embodiment, data may be embedded in a document by reference. An “Embed_By Reference_Article” may be used to refer to a container at the head a sub-tree that stores the embedded data. An editor included inclient 116 may be configured to treat the embedded data as if it was linked directly in the document sub-tree. - When a user logs in to
system 100, a complete up-to-date client is installed on the user'sclient computer 119 a instep 1005, if necessary. In an alternative embodiment, only those portions ofclient 116 that are needed by a user 102 may be transmitted to theclient computer 119. For example, the user may be provided with a list of out-of-date components in hisinstalled client 116 and may be permitted to select the components that he wishes to update. If any other component becomes necessary forclient 116, that additional component may be subsequently updated. Alternatively, each component ofclient 116 may be updated automatically every time it is invoked by first checking to see if the latest version of the component is included in a user's installedclient 116 and automatically updating it if the installed version is out-of-date. These alternatives allow a user 102 to login to the system without obtaining an update for many components that the user 102 may not use during a particular session or at all. - In
system 100, a member's privileges within a workspace are defined in the member'srecord 144 in the workspace'smember list 143 and are constant for all documents in the workspace 122. Alternatively, a member's privileges may be defined for each document in a workspace, as mentioned above. In addition, various editing operations for each document may be restricted to certain members. For example, an owner of a text document may be permitted to change its default text_attributes, but workers may not be permitted to modify this field or the formatting_data field of anyParagraph_Article 370. This allows only the owner to modify the text_attributes of the entire document. At the same time, another document may have different restrictions for the members permitted to access it. -
System 100 has been described as permitting a user 102 to edit a document in a window using an editor incorporated intoclient 116. An editor may be configured to allow a user to open multiple windows for a single document. Each window independently displays one or more sections of the document. Similarly, two or more different editors, or two or more instances of the same editor, may be instantiated to allow a user 102 to simultaneously edit two or more documents within a workspace 122. - Reference is next made to FIG. 19, which illustrates a
method 1700 for conducting a “live” presentation of a presentation document. A user 102 with owner or worker privileges in a workspace 122 may conduct a live presentation using a presentation document, such aspresentation document 200. The user 102 who conducts the presentation is the “presenter” and all other users 102 who are connected toworkspace server 112 h and who observe the presentation are “observers”. More than one presentation may be conducted at the same time in a workspace 122. While a presenter is conducting a presentation and observers are observing it, other non-observing users 102 who are connected to workspace 122 may simultaneously view or edit any document in the workspace 122, including the presentation document being presented. -
Method 1700 begins instep 1702, in which apresenter 102 a'sclient 116 a sends a Get Document request toworkspace server 112 h as described above instep 1216 ofmethod 1200 to retrieve a presentation document. -
Method 1700 proceeds to step 1704, in whichpresenter 102 a starts a presentation. To start a presentation,client 116 a sets the current_slide field of theparent Presentation_Document_Article 364 to the value of the slide_identifier field of a selectedinitial Slide_Article 366, and then blindly posts theparent container 410 as described above inmethod 1500. - Every
other client 116 that receives the Post Update message determines that the Post Update message relates to the start of a presentation. Theother clients 116, which may be referred to as observer clients, may make this determination by observing that the current_slide field of the parent article has changed from −1 to another value, or based on a “Begin Presentation” indicator included with the Post Update message. -
Method 1700 next proceeds todecision step 1706. Each observer client displays a message to its associated user 102 indicating that the presentation is starting. The associated user 102 may choose to observe the presentation or ignore it. If the user 102 chooses to observe the presentation,method 1700 proceeds to step 1708. Otherwise,method 1700 terminates. A user 102 may choose to later observe an active presentation, in which case,method 1700 is entered atstep 1708. - In
step 1708, the observer client automatically activates a presentation viewer and gets the presentation document if it has not already been gotten. The presentation viewer displays the slide corresponding to the current_slide field of the parent article. The presentation viewer responds to subsequent Update Post messages, generated by workspace server 112 in response topresenter 102 a re-posting the parent container, by displaying the slide corresponding to the current_slide field of theparent Presentation_Document_Article 364. If the current_slide field is set to −1, the presentation is complete andclient 116 b goes to step 1210. - If a user102 who is not observing a presentation chooses to perform a View/Edit Transaction for the associated presentation document,
presentation editor 804 prompts the user 102 with a suitable message such as “This presentation is in progress. Do you wish to observe?”. If the user 102 chooses to observe the presentation, his presentation viewer is activated and the current slide is extracted and displayed as described above. If the user 102 chooses not to observe, he may later press a “Join Presentation” button, which is displayed bypresentation editor 804 andslide editor 810 during an active presentation, to later observe. - An exemplary embodiment of the present invention has been described in detail and several alternatives for some aspects of the invention have been described. Many other variations may be made within the scope of the present invention, which is limited only by the appended claims.
Claims (40)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/933,012 US7249314B2 (en) | 2000-08-21 | 2001-08-21 | Simultaneous multi-user document editing system |
US11/686,652 US20070186157A1 (en) | 2000-08-21 | 2007-03-15 | Simultaneous multi-user document editing system |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US22657200P | 2000-08-21 | 2000-08-21 | |
US09/933,012 US7249314B2 (en) | 2000-08-21 | 2001-08-21 | Simultaneous multi-user document editing system |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/686,652 Continuation US20070186157A1 (en) | 2000-08-21 | 2007-03-15 | Simultaneous multi-user document editing system |
Publications (2)
Publication Number | Publication Date |
---|---|
US20020065848A1 true US20020065848A1 (en) | 2002-05-30 |
US7249314B2 US7249314B2 (en) | 2007-07-24 |
Family
ID=22849452
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/933,012 Expired - Lifetime US7249314B2 (en) | 2000-08-21 | 2001-08-21 | Simultaneous multi-user document editing system |
US11/686,652 Abandoned US20070186157A1 (en) | 2000-08-21 | 2007-03-15 | Simultaneous multi-user document editing system |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/686,652 Abandoned US20070186157A1 (en) | 2000-08-21 | 2007-03-15 | Simultaneous multi-user document editing system |
Country Status (4)
Country | Link |
---|---|
US (2) | US7249314B2 (en) |
AU (1) | AU2001287421A1 (en) |
CA (1) | CA2424713C (en) |
WO (1) | WO2002017115A2 (en) |
Cited By (311)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020049784A1 (en) * | 2000-10-24 | 2002-04-25 | Internatonal Business Machines Corporation | Method and system in an electronic spreadsheet for persistently copy-pasting a source range of cells onto one or more destination ranges of cells |
US20020188500A1 (en) * | 2000-10-30 | 2002-12-12 | Kwok Shui Hung | System for managing oil and gas exploration and production data and related transactions |
US20020199175A1 (en) * | 2001-06-26 | 2002-12-26 | Sun Microsystems, Inc. | Detecting and mitigating soft errors using duplicative instructions |
US20030000192A1 (en) * | 2001-06-27 | 2003-01-02 | Exmark Manufacturing Company, Incorporated | Operator control system for self-propelled vehicles |
US20030004882A1 (en) * | 2000-11-06 | 2003-01-02 | Holler Anne Marie | Optimized server for streamed applications |
US20030028585A1 (en) * | 2001-07-31 | 2003-02-06 | Yeager William J. | Distributed trust mechanism for decentralized networks |
US20030051213A1 (en) * | 2001-09-07 | 2003-03-13 | Hidetsugu Mitsui | Document passing system, document updating controller, client device, document management server, method of controlling updating of document, recording medium and program |
US20030050937A1 (en) * | 2001-09-08 | 2003-03-13 | Lusen William D. | System for adaptively identifying data for storage |
US20030061229A1 (en) * | 2001-09-08 | 2003-03-27 | Lusen William D. | System for processing objects for storage in a document or other storage system |
US20030110219A1 (en) * | 2001-12-11 | 2003-06-12 | Chih-Hao Hsu | Collaboration system and data structure thereof |
US20030115172A1 (en) * | 2001-12-13 | 2003-06-19 | Mangalvedhekar Sunit B. | Electronic file management |
US20030115171A1 (en) * | 2001-12-13 | 2003-06-19 | Mangalvedhekar Sunit B. | Electronic files preparation for storage in a server |
US20030112273A1 (en) * | 2001-12-17 | 2003-06-19 | Workshare Technology, Ltd. | Document collaboration suite using a common database |
US20030145055A1 (en) * | 2001-12-12 | 2003-07-31 | Michael Henke | Method for delivering data to, and processing data in, a data processing unit |
US20030163697A1 (en) * | 2002-02-25 | 2003-08-28 | Pabla Kuldip Singh | Secured peer-to-peer network data exchange |
US20030200503A1 (en) * | 2002-04-19 | 2003-10-23 | George Koppich | Document management system for transferring a plurality of documents |
US20040039995A1 (en) * | 2002-03-08 | 2004-02-26 | Katie Kuwata | Method and system for implementing a clipboard |
US20040050237A1 (en) * | 2002-09-14 | 2004-03-18 | Samsung Electronics Co., Ltd. | Apparatus and method for storing and reproducing music file |
US20040088369A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Peer trust evaluation using mobile agents in peer-to-peer networks |
US20040085354A1 (en) * | 2002-10-31 | 2004-05-06 | Deepak Massand | Collaborative document development and review system |
US20040088646A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Collaborative content coherence using mobile agents in peer-to-peer networks |
US20040088347A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Mobile agents in peer-to-peer networks |
US20040107224A1 (en) * | 2002-12-02 | 2004-06-03 | International Business Machines Corporation | Concurrent editing of a file by multiple authors |
US20040133640A1 (en) * | 2002-10-31 | 2004-07-08 | Yeager William J. | Presence detection using mobile agents in peer-to-peer networks |
US20050149861A1 (en) * | 2003-12-09 | 2005-07-07 | Microsoft Corporation | Context-free document portions with alternate formats |
FR2867875A1 (en) * | 2004-03-22 | 2005-09-23 | Christophe Cadic | CLIENT-SERVER COMPUTER SYSTEM (INTRANET, EXTRANET, AND INTERNET) WHICH ALLOWS THE CREATION OF ANIMATED MULTIMEDIA PRESENTATIONS AND THE MANAGEMENT OF USER PRIVILEGES |
US20050216431A1 (en) * | 2004-03-29 | 2005-09-29 | John Baker | Dynamic presentation generator |
US20050223336A1 (en) * | 2004-04-02 | 2005-10-06 | International Business Machines Corporation | Multicast file viewing and editing |
FR2869433A1 (en) * | 2004-04-21 | 2005-10-28 | Marwan Boudouma | Electronic document e.g. product catalogue, managing method for e.g. goods provider, involves constructing presentation models from imported documents, applying models to documents, and exporting stored models for user provider |
US20050243346A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Planar mapping of graphical elements |
US20050243368A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Hierarchical spooling data structure |
US20050246710A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Sharing of downloaded resources |
US20050243355A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Systems and methods for support of various processing capabilities |
US20050243345A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Systems and methods for handling a file with complex elements |
US20050249536A1 (en) * | 2004-05-03 | 2005-11-10 | Microsoft Corporation | Spooling strategies using structured job information |
US20050251740A1 (en) * | 2004-04-30 | 2005-11-10 | Microsoft Corporation | Methods and systems for building packages that contain pre-paginated documents |
US20050262432A1 (en) * | 2004-05-22 | 2005-11-24 | Bea Systems, Inc. | Systems and methods for providing simultaneous access to documents |
US20050273704A1 (en) * | 2004-04-30 | 2005-12-08 | Microsoft Corporation | Method and apparatus for document processing |
US20050278272A1 (en) * | 2004-04-30 | 2005-12-15 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US20050289512A1 (en) * | 2004-06-28 | 2005-12-29 | Konica Minolta Business Technologies, Inc. | System and server for managing shared files |
US20060015658A1 (en) * | 2004-07-14 | 2006-01-19 | Matsushita Electric Industrial Co., Ltd | Multimedia processing system |
US20060034330A1 (en) * | 2003-03-17 | 2006-02-16 | Ryuichi Iwamura | Bandwidth management of virtual networks on a shared network |
US20060064362A1 (en) * | 2004-09-23 | 2006-03-23 | Andrea Politi | Distributed publishing system integrating internal and external editorial means |
US20060069983A1 (en) * | 2004-09-30 | 2006-03-30 | Microsoft Corporation | Method and apparatus for utilizing an extensible markup language schema to define document parts for use in an electronic document |
US20060101279A1 (en) * | 2004-11-09 | 2006-05-11 | Konica Minolta Business Technologies, Inc. | Image processor |
US20060111951A1 (en) * | 2004-11-19 | 2006-05-25 | Microsoft Corporation | Time polynomial arrow-debreu market equilibrium |
US20060117249A1 (en) * | 2004-11-29 | 2006-06-01 | Hu Xiao W | Document editor and method for editing document |
EP1672543A2 (en) * | 2004-12-20 | 2006-06-21 | Microsoft Corporation | File formats, methods, and computer program products for representing presentations |
US20060136553A1 (en) * | 2004-12-21 | 2006-06-22 | Microsoft Corporation | Method and system for exposing nested data in a computer-generated document in a transparent manner |
US20060136433A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | File formats, methods, and computer program products for representing workbooks |
US20060136816A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | File formats, methods, and computer program products for representing documents |
US20060136812A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Method and system for linking data ranges of a computer-generated document with associated extensible markup language elements |
US20060136477A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Management and use of data in a computer-generated document |
US20060168528A1 (en) * | 2005-01-27 | 2006-07-27 | Microsoft Corporation | Method for arranging user interface glyphs on displays |
US20060168294A1 (en) * | 2004-11-13 | 2006-07-27 | De Vries Jeff | Hybrid local/remote streaming |
US20060167954A1 (en) * | 2003-03-03 | 2006-07-27 | Canon Kabushiki Kaisha | Information processing method, information processing apparatus, method of controlling server apparatus, and server apparatus |
US20060190815A1 (en) * | 2004-12-20 | 2006-08-24 | Microsoft Corporation | Structuring data for word processing documents |
US20060200756A1 (en) * | 2003-03-25 | 2006-09-07 | Unisys Corporation | Publishing system including front-end client links to workflow engine and communication protocol schema |
WO2006102621A2 (en) * | 2005-03-23 | 2006-09-28 | Stream Theory, Inc. | System and method for tracking changes to files in streaming applications |
US20060218442A1 (en) * | 2005-03-24 | 2006-09-28 | Xerox Corporation | System and method for autonomous correction of defective documents |
US20060265639A1 (en) * | 2005-05-18 | 2006-11-23 | Microsoft Corporation | Memory optimizing fo re-ordering user edits |
US20060271574A1 (en) * | 2004-12-21 | 2006-11-30 | Microsoft Corporation | Exposing embedded data in a computer-generated document |
US20060277452A1 (en) * | 2005-06-03 | 2006-12-07 | Microsoft Corporation | Structuring data for presentation documents |
US20070016650A1 (en) * | 2005-04-01 | 2007-01-18 | Gilbert Gary J | System and methods for collaborative development of content over an electronic network |
US20070022128A1 (en) * | 2005-06-03 | 2007-01-25 | Microsoft Corporation | Structuring data for spreadsheet documents |
US20070138288A1 (en) * | 1999-05-21 | 2007-06-21 | Sony Corporation | Information processing method and apparatus |
US20070150964A1 (en) * | 2002-02-21 | 2007-06-28 | Adobe Systems Incorporated | Application Rights Enabling |
US20070157203A1 (en) * | 2005-12-29 | 2007-07-05 | Blue Jungle | Information Management System with Two or More Interactive Enforcement Points |
US20070156727A1 (en) * | 2005-12-29 | 2007-07-05 | Blue Jungle | Associating Code To a Target Through Code Inspection |
WO2007082171A2 (en) * | 2006-01-05 | 2007-07-19 | Eyespot Corporation | System and methods for online collaborative video creation |
US20070226687A1 (en) * | 2002-06-25 | 2007-09-27 | Tim Fallen-Bailey | Method and apparatus to control translatable properties of metadata |
US7278168B1 (en) | 2002-11-27 | 2007-10-02 | Adobe Systems Incorporated | Dynamic enabling of functionality in electronic document readers |
US20070236742A1 (en) * | 2006-03-28 | 2007-10-11 | Microsoft Corporation | Document processor and re-aggregator |
US20070288835A1 (en) * | 2006-06-07 | 2007-12-13 | Fuji Xerox Co., Ltd. | Apparatus, computer readable medium, data signal, and method for document management |
US20080059629A1 (en) * | 2006-09-06 | 2008-03-06 | Freeman David S | Dynamic determination of master servers for branches in distributed directories |
US20080072225A1 (en) * | 2006-09-19 | 2008-03-20 | Tetsuro Nagatsuka | Information processing apparatus, information processing method, program, and recording medium |
US20080086692A1 (en) * | 2005-01-11 | 2008-04-10 | Viktors Berstis | Systems, Methods, and Media for Aggregating Electronic Document Usage Information |
US20080091693A1 (en) * | 2006-10-16 | 2008-04-17 | Oracle International Corporation | Managing compound XML documents in a repository |
US20080103860A1 (en) * | 2006-10-17 | 2008-05-01 | Microsoft Corporation | Executing Pages of a Guided Process Application in Parallel |
US20080109876A1 (en) * | 2006-10-23 | 2008-05-08 | Endeavors Technologies, Inc. | Rule-based application access management |
US7376743B1 (en) * | 2002-04-02 | 2008-05-20 | Cisco Technology, Inc. | Method and apparatus for load balancing in a virtual private network |
US20080178298A1 (en) * | 2001-02-14 | 2008-07-24 | Endeavors Technology, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US7418652B2 (en) | 2004-04-30 | 2008-08-26 | Microsoft Corporation | Method and apparatus for interleaving parts of a document |
US20080222000A1 (en) * | 2005-01-11 | 2008-09-11 | Viktors Berstis | Systems and Media for Awarding Credits Based on Provided Usage Information |
US20080250149A1 (en) * | 2007-04-09 | 2008-10-09 | Morris Robert P | Methods And System For Providing Concurrent Access To A Resource In A Communication Session |
US20080256188A1 (en) * | 2007-01-29 | 2008-10-16 | Deepak Massand | Method of removing metadata from email attachments |
US20080263155A1 (en) * | 2003-08-07 | 2008-10-23 | International Business Machines Corporation | Collaborative Email With Delegable Authorities |
US7447742B1 (en) * | 2001-03-30 | 2008-11-04 | Mirapoint Software, Inc. | Dual-frame user interface on generic client software |
US20080275871A1 (en) * | 2005-01-11 | 2008-11-06 | International Business Machines Corporation | Systems and media for utilizing electronic document usage information with search engines |
US20080301193A1 (en) * | 2006-01-29 | 2008-12-04 | Deepak Massand | Method of compound document comparison |
US20090006946A1 (en) * | 2007-06-26 | 2009-01-01 | Mark Hanson | Multi-user document editing system and method |
US7487448B2 (en) | 2004-04-30 | 2009-02-03 | Microsoft Corporation | Document mark up methods and systems |
US20090037803A1 (en) * | 2000-10-24 | 2009-02-05 | International Business Machines Corporation | System in an electronic spreadsheet for persistently self-replicating multiple ranges of cells through a copy-paste operation and a self-replication table |
US20090059267A1 (en) * | 2007-08-29 | 2009-03-05 | Canon Kabushiki Kaisha | Image forming system, management apparatus, and control methods thereof |
US20090083314A1 (en) * | 2003-10-24 | 2009-03-26 | Enrico Maim | Method of Manipulating Information Objects and of Accessing Such Objects in a Computer Environment |
US7512878B2 (en) | 2004-04-30 | 2009-03-31 | Microsoft Corporation | Modular document format |
WO2009043029A2 (en) * | 2007-09-28 | 2009-04-02 | Xcerion Aktiebolag | Network operating system |
US20090106247A1 (en) * | 2007-10-23 | 2009-04-23 | Daughtry Chenita D | Method and system for allowing multiple users to access and unlock shared electronic documents in a computer system |
US20090105882A1 (en) * | 2002-07-25 | 2009-04-23 | Intouch Technologies, Inc. | Medical Tele-Robotic System |
US7526504B2 (en) | 2004-05-03 | 2009-04-28 | Microsoft Corporation | Spooling strategies using structured job information |
US20090112937A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Spreadsheet collaboration between rich and browser clients |
US20090119458A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US20090125518A1 (en) * | 2007-11-09 | 2009-05-14 | Microsoft Corporation | Collaborative Authoring |
US20090150761A1 (en) * | 2003-06-11 | 2009-06-11 | Microsoft Corporation | Method and apparatus for protecting regions of an electronic document |
US20090150394A1 (en) * | 2007-12-06 | 2009-06-11 | Microsoft Corporation | Document Merge |
US7549118B2 (en) | 2004-04-30 | 2009-06-16 | Microsoft Corporation | Methods and systems for defining documents with selectable and/or sequenceable parts |
US20090157811A1 (en) * | 2007-12-14 | 2009-06-18 | Microsoft Corporation | Collaborative Authoring Modes |
US20090172558A1 (en) * | 2007-12-27 | 2009-07-02 | Fuji Xerox Co., Ltd. | System and method for personalized change tracking for collaborative authoring environments |
US7577751B2 (en) | 1997-06-16 | 2009-08-18 | Stream Theory, Inc./Endeavors Technologies, Inc. | Software streaming system and method |
US20090228473A1 (en) * | 2008-03-07 | 2009-09-10 | Microsoft Corporation | Data storage for file updates |
US20090235181A1 (en) * | 2008-03-14 | 2009-09-17 | Microsoft Corporation | Web-based multiuser collaboration |
US20090234894A1 (en) * | 2008-03-12 | 2009-09-17 | International Business Machines Corporation | Method and system for collaborative learning |
US7607141B2 (en) | 2004-05-03 | 2009-10-20 | Microsoft Corporation | Systems and methods for support of various processing capabilities |
US20090271696A1 (en) * | 2008-04-28 | 2009-10-29 | Microsoft Corporation | Conflict Resolution |
US7617447B1 (en) | 2003-12-09 | 2009-11-10 | Microsoft Corporation | Context free document portions |
US20090282041A1 (en) * | 2008-05-08 | 2009-11-12 | Microsoft Corporation | Caching Infrastructure |
US20090282462A1 (en) * | 2008-05-08 | 2009-11-12 | Microsoft Corporation | Controlling Access to Documents Using File Locks |
US7640347B1 (en) * | 2002-05-02 | 2009-12-29 | F5 Networks, Inc. | Method and system for inserting POST data into the GET request to apply normal caching rules |
US20090327294A1 (en) * | 2008-06-25 | 2009-12-31 | Microsoft Corporation | Structured Coauthoring |
US20100017850A1 (en) * | 2008-07-21 | 2010-01-21 | Workshare Technology, Inc. | Methods and systems to fingerprint textual information using word runs |
US20100023753A1 (en) * | 2008-07-28 | 2010-01-28 | Robert Evans Wetmore | System and method of generating subtitling for media |
US20100030752A1 (en) * | 2008-07-30 | 2010-02-04 | Lev Goldentouch | System, methods and applications for structured document indexing |
EP2151767A1 (en) * | 2007-05-29 | 2010-02-10 | Sursen Corp. | Method and apparatus for realizing sharing edit of document |
US20100064347A1 (en) * | 2008-09-11 | 2010-03-11 | Workshare Technology, Inc. | Methods and systems for protect agents using distributed lightweight fingerprints |
EP2163983A1 (en) | 2008-09-15 | 2010-03-17 | Deutsche Post AG | Method for producing a printed file from data objects in a memory |
US20100100812A1 (en) * | 2008-10-20 | 2010-04-22 | Canon Kabushiki Kaisha | Document generation method and document generation apparatus |
US20100124354A1 (en) * | 2008-11-20 | 2010-05-20 | Workshare Technology, Inc. | Methods and systems for image fingerprinting |
US20100131836A1 (en) * | 2008-11-24 | 2010-05-27 | Microsoft Corporation | User-authored notes on shared documents |
US7735144B2 (en) | 2003-05-16 | 2010-06-08 | Adobe Systems Incorporated | Document modification detection and prevention |
US20100174678A1 (en) * | 2009-01-07 | 2010-07-08 | Deepak Massand | System and method for comparing digital data in spreadsheets or database tables |
US7769810B1 (en) * | 2007-04-26 | 2010-08-03 | Adobe Systems Incorporated | Method and system for collaborative editing |
US20100241943A1 (en) * | 2009-03-17 | 2010-09-23 | Litera Technology Llc. | System and method for the comparison of content within tables separate from form and structure |
US20100281362A1 (en) * | 2009-04-29 | 2010-11-04 | Microsoft Corporation | Maintaining Undo and Redo Capability across Metadata Merges |
US20100281007A1 (en) * | 2009-05-01 | 2010-11-04 | Microsoft Corporation | Cross-Channel Coauthoring Consistency |
US20100281074A1 (en) * | 2009-04-30 | 2010-11-04 | Microsoft Corporation | Fast Merge Support for Legacy Documents |
US20100299727A1 (en) * | 2008-11-18 | 2010-11-25 | Workshare Technology, Inc. | Methods and systems for exact data match filtering |
US20100306676A1 (en) * | 2009-05-27 | 2010-12-02 | Haripriya Srinivasaraghavan | Dynamic collaborative techniques |
US20110016387A1 (en) * | 2009-07-16 | 2011-01-20 | Oracle International Corporation | Document collaboration system with alternative views |
US20110022960A1 (en) * | 2009-07-27 | 2011-01-27 | Workshare Technology, Inc. | Methods and systems for comparing presentation slide decks |
US20110106880A1 (en) * | 2004-11-08 | 2011-05-05 | Strong Jack B | Method and apparatus for a file sharing and synchronization system |
US20110219036A1 (en) * | 2007-09-11 | 2011-09-08 | Yahoo! Inc. | Social network site including contact-based recommendation functionality |
US8019900B1 (en) | 2008-03-25 | 2011-09-13 | SugarSync, Inc. | Opportunistic peer-to-peer synchronization in a synchronization system |
US8051038B1 (en) * | 2002-11-07 | 2011-11-01 | Siemens Industry, Inc. | Method and system for information distribution |
US20110289120A1 (en) * | 2009-03-18 | 2011-11-24 | Leon Gorbaty | Specifications automation system and method |
US8095575B1 (en) * | 2007-01-31 | 2012-01-10 | Google Inc. | Word processor data organization |
US20120016999A1 (en) * | 2010-07-14 | 2012-01-19 | Sap Ag | Context for Sharing Data Objects |
US20120042354A1 (en) * | 2010-08-13 | 2012-02-16 | Morgan Stanley | Entitlement conflict enforcement |
US8127217B2 (en) | 2002-04-19 | 2012-02-28 | Kabushiki Kaisha Toshiba | Document management system for transferring a plurality of documents |
US20120101980A1 (en) * | 2010-10-26 | 2012-04-26 | Microsoft Corporation | Synchronizing online document edits |
US20120109915A1 (en) * | 2010-11-02 | 2012-05-03 | Canon Kabushiki Kaisha | Document management system, method for controlling the same, and storage medium |
US20120137217A1 (en) * | 2010-11-29 | 2012-05-31 | International Business Machines Corporation | System and method for adjusting inactivity timeout settings on a display device |
WO2012125338A1 (en) * | 2011-03-15 | 2012-09-20 | Google Inc. | Inline user addressing in chat and document editing sessions |
US8396836B1 (en) | 2011-06-30 | 2013-03-12 | F5 Networks, Inc. | System for mitigating file virtualization storage import latency |
US20130097234A1 (en) * | 2011-10-13 | 2013-04-18 | Dassault Systemes | Collaborative design using duplicated workspaces |
US20130110796A1 (en) * | 2011-10-26 | 2013-05-02 | David G. Butler | Receiving a document update to transmit a change |
US8447731B1 (en) | 2006-07-26 | 2013-05-21 | Nextpoint, Inc | Method and system for information management |
US8453052B1 (en) * | 2006-08-16 | 2013-05-28 | Google Inc. | Real-time document sharing and editing |
US8463850B1 (en) | 2011-10-26 | 2013-06-11 | F5 Networks, Inc. | System and method of algorithmically generating a server side transaction identifier |
US20130212485A1 (en) * | 2008-10-10 | 2013-08-15 | Adobe Systems Incorporated | Collaborative and non-collaborative workspace application container with application persistence |
US20130219451A1 (en) * | 2002-11-27 | 2013-08-22 | Krish Chaudhury | Document digest allowing selective changes to a document |
US8543929B1 (en) * | 2008-05-14 | 2013-09-24 | Adobe Systems Incorporated | User ratings allowing access to features for modifying content |
US20130254644A1 (en) * | 2006-03-31 | 2013-09-26 | Google Inc. | Collaborative online spreadsheet application |
US20130262986A1 (en) * | 2012-03-30 | 2013-10-03 | D.A.P. Leblond | Systems, Methods, and Media for Managing Editable Previews of Webpages |
US20130311897A1 (en) * | 2008-09-30 | 2013-11-21 | Facebook, Inc. | Image editing method, image editing device, and computer readable medium for storing image editing program |
US20130326330A1 (en) * | 2012-06-01 | 2013-12-05 | Google Inc. | Integrating collaboratively proposed changes and publishing |
US20130332213A1 (en) * | 2012-06-07 | 2013-12-12 | Jayne Heggen | Virtual Outsourcing Agency System and Method |
US8650498B1 (en) | 2009-05-04 | 2014-02-11 | SugarSync, Inc. | User interface for managing and viewing synchronization settings in a synchronization system |
US8806056B1 (en) | 2009-11-20 | 2014-08-12 | F5 Networks, Inc. | Method for optimizing remote file saves in a failsafe way |
US20140229507A1 (en) * | 2003-02-28 | 2014-08-14 | Microsoft Corporation | Method To Delay Locking Of Server Files On Edit |
US8879431B2 (en) | 2011-05-16 | 2014-11-04 | F5 Networks, Inc. | Method for load balancing of requests' processing of diameter servers |
US20140337279A1 (en) * | 2011-12-29 | 2014-11-13 | Stanley Mo | Management of collaborative teams |
US8892738B2 (en) | 2007-11-07 | 2014-11-18 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US20150006473A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Multicultural Collaborative Editing Method, Apparatus and Program Product |
US20150019947A1 (en) * | 2008-01-15 | 2015-01-15 | Microsoft Corporation | Multi-Client Collaboration to Access and Update Structured Data Elements |
US8938669B1 (en) | 2011-03-15 | 2015-01-20 | Google Inc. | Inline user addressing in chat and document editing sessions |
US8965940B2 (en) * | 2012-07-20 | 2015-02-24 | Microsoft Technology Licensing, Llc | Imitation of file embedding in a document |
US20150055170A1 (en) * | 2013-08-23 | 2015-02-26 | Fuji Xerox Co., Ltd. | Information processing apparatus and information processing system |
US20150081573A1 (en) * | 2009-01-30 | 2015-03-19 | International Business Machines Corporation | System and method for avoiding duplication of effort in drafting documents |
US9032295B1 (en) | 2008-03-19 | 2015-05-12 | Dropbox, Inc. | Method for displaying files from a plurality of devices in a multi-view interface and for enabling operations to be performed on such files through such interface |
US20150253941A1 (en) * | 2008-08-11 | 2015-09-10 | Microsoft Technology Licensing, Llc | Sections of a presentation having user-definable properties |
US9143451B2 (en) | 2007-10-01 | 2015-09-22 | F5 Networks, Inc. | Application layer network traffic prioritization |
US9141483B1 (en) | 2008-03-27 | 2015-09-22 | Dropbox, Inc. | System and method for multi-tier synchronization |
CN104933088A (en) * | 2015-05-13 | 2015-09-23 | 深圳市中幼国际教育科技有限公司 | Remote editing method and system |
US20150269033A1 (en) * | 2011-12-12 | 2015-09-24 | Microsoft Technology Licensing, Llc | Techniques to manage collaborative documents |
US9146913B2 (en) | 2010-03-29 | 2015-09-29 | Bentley Systems, Incorporated | Specifications automation system and method |
US9170990B2 (en) | 2013-03-14 | 2015-10-27 | Workshare Limited | Method and system for document retrieval with selective document comparison |
US9244843B1 (en) | 2012-02-20 | 2016-01-26 | F5 Networks, Inc. | Methods for improving flow cache bandwidth utilization and devices thereof |
WO2016032548A1 (en) * | 2014-08-25 | 2016-03-03 | Hewlett Packard Enterprise Development Lp | Providing transactional support to a data storage system |
US9292482B1 (en) * | 2015-04-30 | 2016-03-22 | Workiva Inc. | System and method for convergent document collaboration |
US9348803B2 (en) | 2013-10-22 | 2016-05-24 | Google Inc. | Systems and methods for providing just-in-time preview of suggestion resolutions |
US20160232143A1 (en) * | 2015-02-10 | 2016-08-11 | Researchgate Gmbh | Online publication system and method |
US9420049B1 (en) | 2010-06-30 | 2016-08-16 | F5 Networks, Inc. | Client side human user indicator |
US9430219B2 (en) * | 2014-12-16 | 2016-08-30 | Sap Se | Revision safe upgrade in a hybrid cloud landscape |
WO2016154476A1 (en) * | 2015-03-25 | 2016-09-29 | Intel Corporation | Techniques for securing and controlling access to data |
US9483451B2 (en) | 2013-03-14 | 2016-11-01 | Scribestar Ltd. | System and method for handling user editing history based on spawning, merging data structures of directed acyclic graph |
US20160321226A1 (en) * | 2015-05-01 | 2016-11-03 | Microsoft Technology Licensing, Llc | Insertion of unsaved content via content channel |
US20160328368A1 (en) * | 2015-05-04 | 2016-11-10 | Microsoft Technology Licensing, Llc. | Real-time sharing of document edits |
US9497614B1 (en) | 2013-02-28 | 2016-11-15 | F5 Networks, Inc. | National traffic steering device for a better control of a specific wireless/LTE network |
US9503375B1 (en) | 2010-06-30 | 2016-11-22 | F5 Networks, Inc. | Methods for managing traffic in a multi-service environment and devices thereof |
US9529785B2 (en) | 2012-11-27 | 2016-12-27 | Google Inc. | Detecting relationships between edits and acting on a subset of edits |
US9547626B2 (en) | 2011-01-29 | 2017-01-17 | Sdl Plc | Systems, methods, and media for managing ambient adaptability of web applications and web services |
US9578090B1 (en) | 2012-11-07 | 2017-02-21 | F5 Networks, Inc. | Methods for provisioning application delivery service and devices thereof |
US20170068659A1 (en) * | 2015-09-07 | 2017-03-09 | Voicebox Technologies Corporation | System and method for eliciting open-ended natural language responses to questions to train natural language processors |
US9596188B2 (en) | 2001-01-18 | 2017-03-14 | Sdl Inc. | Globalization management system and method therefor |
US9613340B2 (en) | 2011-06-14 | 2017-04-04 | Workshare Ltd. | Method and system for shared document approval |
US9633125B1 (en) | 2012-08-10 | 2017-04-25 | Dropbox, Inc. | System, method, and computer program for enabling a user to synchronize, manage, and share folders across a plurality of client devices and a synchronization server |
US20170123762A1 (en) * | 2015-10-28 | 2017-05-04 | Apple Inc. | Graphical representation of data in a program code editor |
US9665413B2 (en) | 2009-05-01 | 2017-05-30 | Microsoft Technology Licensing, Llc | Shared job scheduling in electronic notebook |
US20170177616A1 (en) * | 2012-12-06 | 2017-06-22 | Empire Technology Development Llc | Decentralizing a hadoop cluster |
US20170177610A1 (en) * | 2015-12-17 | 2017-06-22 | Box, Inc. | Adaptive tool selection for conflict resolution in a multi-session collaboration setting |
US9734138B2 (en) | 2015-09-07 | 2017-08-15 | Voicebox Technologies Corporation | System and method of annotating utterances based on tags assigned by unmanaged crowds |
US9756002B2 (en) | 2014-03-21 | 2017-09-05 | Litera Technologies, LLC | Systems and methods for email attachments management |
US9772993B2 (en) | 2015-09-07 | 2017-09-26 | Voicebox Technologies Corporation | System and method of recording utterances using unmanaged crowds for natural language processing |
US9773270B2 (en) | 2012-05-11 | 2017-09-26 | Fredhopper B.V. | Method and system for recommending products based on a ranking cocktail |
US20170344526A1 (en) * | 2016-05-27 | 2017-11-30 | Open Text Sa Ulc | Document architecture with smart rendering |
US9922653B2 (en) | 2015-09-07 | 2018-03-20 | Voicebox Technologies Corporation | System and method for validating natural language content using crowdsourced validation jobs |
US9948676B2 (en) | 2013-07-25 | 2018-04-17 | Workshare, Ltd. | System and method for securing documents prior to transmission |
US9971752B2 (en) | 2013-08-19 | 2018-05-15 | Google Llc | Systems and methods for resolving privileged edits within suggested edits |
US10025759B2 (en) | 2010-11-29 | 2018-07-17 | Workshare Technology, Inc. | Methods and systems for monitoring documents exchanged over email applications |
US10025782B2 (en) | 2013-06-18 | 2018-07-17 | Litera Corporation | Systems and methods for multiple document version collaboration and management |
US10033837B1 (en) | 2012-09-29 | 2018-07-24 | F5 Networks, Inc. | System and method for utilizing a data reducing module for dictionary compression of encoded data |
US10057318B1 (en) | 2012-08-10 | 2018-08-21 | Dropbox, Inc. | System, method, and computer program for enabling a user to access and edit via a virtual drive objects synchronized to a plurality of synchronization clients |
USRE47019E1 (en) | 2010-07-14 | 2018-08-28 | F5 Networks, Inc. | Methods for DNSSEC proxying and deployment amelioration and systems thereof |
US20180285323A1 (en) * | 2006-03-31 | 2018-10-04 | Google Llc | Collaborative workflow through messaging conversations |
US10097616B2 (en) | 2012-04-27 | 2018-10-09 | F5 Networks, Inc. | Methods for optimizing service of content requests and devices thereof |
US10108931B2 (en) * | 2014-09-26 | 2018-10-23 | Oracle International Corporation | Lock-based updating of a document |
US10133723B2 (en) | 2014-12-29 | 2018-11-20 | Workshare Ltd. | System and method for determining document version geneology |
US10152585B2 (en) | 2015-09-07 | 2018-12-11 | Voicebox Technologies Corporation | System and method of providing and validating enhanced CAPTCHAs |
US10182013B1 (en) | 2014-12-01 | 2019-01-15 | F5 Networks, Inc. | Methods for managing progressive image delivery and devices thereof |
US10187317B1 (en) | 2013-11-15 | 2019-01-22 | F5 Networks, Inc. | Methods for traffic rate control and devices thereof |
CN109299046A (en) * | 2018-08-30 | 2019-02-01 | 湖北工业大学 | A Collaborative Editing Method Based on TCP WebSocket Protocol |
US10230566B1 (en) | 2012-02-17 | 2019-03-12 | F5 Networks, Inc. | Methods for dynamically constructing a service principal name and devices thereof |
US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
US10339209B2 (en) * | 2013-11-29 | 2019-07-02 | Uc Mobile Co., Ltd. | Webpage display method and device |
US10375155B1 (en) | 2013-02-19 | 2019-08-06 | F5 Networks, Inc. | System and method for achieving hardware acceleration for asymmetric flow connections |
US10404698B1 (en) | 2016-01-15 | 2019-09-03 | F5 Networks, Inc. | Methods for adaptive organization of web application access points in webtops and devices thereof |
US10412198B1 (en) | 2016-10-27 | 2019-09-10 | F5 Networks, Inc. | Methods for improved transmission control protocol (TCP) performance visibility and devices thereof |
US10452740B2 (en) | 2012-09-14 | 2019-10-22 | Sdl Netherlands B.V. | External content libraries |
US10467198B2 (en) * | 2016-09-15 | 2019-11-05 | Oracle International Corporation | Network partition tolerance in a high available centralized VCS implementation |
WO2019221949A1 (en) * | 2018-05-18 | 2019-11-21 | Microsoft Technology Licensing, Llc | Multiple users dynamically editing a scene in a three-dimensional immersive environment |
US10505818B1 (en) | 2015-05-05 | 2019-12-10 | F5 Networks. Inc. | Methods for analyzing and load balancing based on server health and devices thereof |
US10505792B1 (en) | 2016-11-02 | 2019-12-10 | F5 Networks, Inc. | Methods for facilitating network traffic analytics and devices thereof |
US10536408B2 (en) | 2015-09-16 | 2020-01-14 | Litéra Corporation | Systems and methods for detecting, reporting and cleaning metadata from inbound attachments |
US10558712B2 (en) | 2015-05-19 | 2020-02-11 | Researchgate Gmbh | Enhanced online user-interaction tracking and document rendition |
US10574729B2 (en) | 2011-06-08 | 2020-02-25 | Workshare Ltd. | System and method for cross platform document sharing |
US10580015B2 (en) | 2011-02-25 | 2020-03-03 | Sdl Netherlands B.V. | Systems, methods, and media for executing and optimizing online marketing initiatives |
US10614167B2 (en) | 2015-10-30 | 2020-04-07 | Sdl Plc | Translation review workflow systems and methods |
US10657540B2 (en) | 2011-01-29 | 2020-05-19 | Sdl Netherlands B.V. | Systems, methods, and media for web content management |
US10721269B1 (en) | 2009-11-06 | 2020-07-21 | F5 Networks, Inc. | Methods and system for returning requests with javascript for clients before passing a request to a server |
US10733151B2 (en) | 2011-10-27 | 2020-08-04 | Microsoft Technology Licensing, Llc | Techniques to share media files |
US10783326B2 (en) | 2013-03-14 | 2020-09-22 | Workshare, Ltd. | System for tracking changes in a collaborative document editing environment |
US10797888B1 (en) | 2016-01-20 | 2020-10-06 | F5 Networks, Inc. | Methods for secured SCEP enrollment for client devices and devices thereof |
US10812266B1 (en) | 2017-03-17 | 2020-10-20 | F5 Networks, Inc. | Methods for managing security tokens based on security violations and devices thereof |
US10834065B1 (en) | 2015-03-31 | 2020-11-10 | F5 Networks, Inc. | Methods for SSL protected NTLM re-authentication and devices thereof |
US10880359B2 (en) | 2011-12-21 | 2020-12-29 | Workshare, Ltd. | System and method for cross platform document sharing |
US10911492B2 (en) | 2013-07-25 | 2021-02-02 | Workshare Ltd. | System and method for securing documents prior to transmission |
US10922158B2 (en) | 2002-06-28 | 2021-02-16 | Open Text Sa Ulc | Method and system for transforming input data streams |
US10963584B2 (en) | 2011-06-08 | 2021-03-30 | Workshare Ltd. | Method and system for collaborative editing of a remotely stored document |
US10970471B2 (en) * | 2018-04-23 | 2021-04-06 | International Business Machines Corporation | Phased collaborative editing |
US11017594B2 (en) * | 2019-05-06 | 2021-05-25 | Bentley Systems, Incorporated | Locking of spatial regions of large-scale fully-connected multi-dimensional spatial data for collaborative updating |
US11030163B2 (en) | 2011-11-29 | 2021-06-08 | Workshare, Ltd. | System for tracking and displaying changes in a set of related electronic documents |
US11030273B2 (en) | 2004-11-19 | 2021-06-08 | Google Llc | Converting spreadsheet applications to web-based applications using a data file that includes interactivity attributes of cells for the web-based applications |
US11063758B1 (en) | 2016-11-01 | 2021-07-13 | F5 Networks, Inc. | Methods for facilitating cipher selection and devices thereof |
US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
USRE48725E1 (en) | 2012-02-20 | 2021-09-07 | F5 Networks, Inc. | Methods for accessing data in a compressed file system and devices thereof |
CN113535434A (en) * | 2021-07-22 | 2021-10-22 | 北京字跳网络技术有限公司 | Collaborative editing method and device for data nodes, storage medium and equipment |
US11178150B1 (en) | 2016-01-20 | 2021-11-16 | F5 Networks, Inc. | Methods for enforcing access control list based on managed application and devices thereof |
US11182551B2 (en) | 2014-12-29 | 2021-11-23 | Workshare Ltd. | System and method for determining document version geneology |
US11210816B1 (en) * | 2018-08-28 | 2021-12-28 | Apple Inc. | Transitional effects in real-time rendering applications |
US11223689B1 (en) | 2018-01-05 | 2022-01-11 | F5 Networks, Inc. | Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof |
US11256854B2 (en) | 2012-03-19 | 2022-02-22 | Litera Corporation | Methods and systems for integrating multiple document versions |
US11256402B1 (en) * | 2020-08-12 | 2022-02-22 | Facebook, Inc. | Systems and methods for generating and broadcasting digital trails of visual media |
US11294958B2 (en) * | 2018-03-23 | 2022-04-05 | Kyndryl, Inc. | Managing a distributed knowledge graph |
US11308528B2 (en) | 2012-09-14 | 2022-04-19 | Sdl Netherlands B.V. | Blueprinting of multimedia assets |
US11334596B2 (en) | 2018-04-27 | 2022-05-17 | Dropbox, Inc. | Selectively identifying and recommending digital content items for synchronization |
US11343237B1 (en) | 2017-05-12 | 2022-05-24 | F5, Inc. | Methods for managing a federated identity environment using security and access control data and devices thereof |
US11350254B1 (en) | 2015-05-05 | 2022-05-31 | F5, Inc. | Methods for enforcing compliance policies and devices thereof |
US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
US11385774B2 (en) * | 2014-01-06 | 2022-07-12 | Red Hat, Inc. | Intuitive workspace management |
US11386186B2 (en) | 2012-09-14 | 2022-07-12 | Sdl Netherlands B.V. | External content library connector systems and methods |
US11425116B2 (en) | 2005-04-21 | 2022-08-23 | Justservice.Net Llc | Data backup and transfer system, method and computer program product |
US11436095B2 (en) * | 2005-04-21 | 2022-09-06 | Justservice.Net Llc | Data backup, storage, transfer and retrieval system, method and computer program product |
US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
US20220405464A1 (en) * | 2021-06-18 | 2022-12-22 | Fujifilm Business Innovation Corp. | Information processing apparatus, non-transitory computer readable medium storing program, and information processing method |
US11567907B2 (en) | 2013-03-14 | 2023-01-31 | Workshare, Ltd. | Method and system for comparing document versions encoded in a hierarchical representation |
US20230055241A1 (en) * | 2021-08-17 | 2023-02-23 | Monday.com Ltd. | Digital processing systems and methods for external events trigger automatic text-based document alterations in collaborative work systems |
US20230115858A1 (en) * | 2020-05-14 | 2023-04-13 | Leonard L. Drey | Method of Selective Online Dissemination of Digital Assets |
US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
US11687706B2 (en) | 2020-05-01 | 2023-06-27 | Monday.com Ltd. | Digital processing systems and methods for automatic display of value types based on custom heading in collaborative work systems |
US11741071B1 (en) | 2022-12-28 | 2023-08-29 | Monday.com Ltd. | Digital processing systems and methods for navigating and viewing displayed content |
US11757946B1 (en) | 2015-12-22 | 2023-09-12 | F5, Inc. | Methods for analyzing network traffic and enforcing network policies and devices thereof |
US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
US11763013B2 (en) | 2015-08-07 | 2023-09-19 | Workshare, Ltd. | Transaction document management system and method |
US20230328122A1 (en) * | 2022-04-07 | 2023-10-12 | Sigma Computing, Inc. | Live editing a workbook with multiple clients |
US11829953B1 (en) | 2020-05-01 | 2023-11-28 | Monday.com Ltd. | Digital processing systems and methods for managing sprints using linked electronic boards |
US11838851B1 (en) | 2014-07-15 | 2023-12-05 | F5, Inc. | Methods for managing L7 traffic classification and devices thereof |
US11868706B1 (en) * | 2021-12-13 | 2024-01-09 | Notion Labs, Inc. | System, method, and computer program for syncing content across workspace pages |
US11888793B2 (en) | 2022-02-22 | 2024-01-30 | Open Text Holdings, Inc. | Systems and methods for intelligent delivery of communications |
US11886683B1 (en) | 2022-12-30 | 2024-01-30 | Monday.com Ltd | Digital processing systems and methods for presenting board graphics |
US11893381B1 (en) | 2023-02-21 | 2024-02-06 | Monday.com Ltd | Digital processing systems and methods for reducing file bundle sizes |
US11893213B2 (en) | 2021-01-14 | 2024-02-06 | Monday.com Ltd. | Digital processing systems and methods for embedded live application in-line in a word processing document in collaborative work systems |
US11895138B1 (en) | 2015-02-02 | 2024-02-06 | F5, Inc. | Methods for improving web scanner accuracy and devices thereof |
US11941347B2 (en) * | 2022-07-01 | 2024-03-26 | Docusign, Inc. | Clause control in synchronous multi-party editing system |
US12003422B1 (en) | 2018-09-28 | 2024-06-04 | F5, Inc. | Methods for switching network packets based on packet data and devices |
US12056255B1 (en) | 2023-11-28 | 2024-08-06 | Monday.com Ltd. | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
US12105948B2 (en) | 2021-10-29 | 2024-10-01 | Monday.com Ltd. | Digital processing systems and methods for display navigation mini maps |
US12141722B2 (en) | 2019-11-18 | 2024-11-12 | Monday.Com | Digital processing systems and methods for mechanisms for sharing responsibility in collaborative work systems |
US12169802B1 (en) | 2023-11-28 | 2024-12-17 | Monday.com Ltd. | Digital processing systems and methods for managing workflows |
US12236188B2 (en) | 2022-04-07 | 2025-02-25 | Sigma Computing, Inc. | Resolving live edit conflicts |
US12273310B2 (en) | 2022-02-22 | 2025-04-08 | Open Text Holdings, Inc. | Systems and methods for intelligent delivery of communications |
Families Citing this family (194)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6883168B1 (en) | 2000-06-21 | 2005-04-19 | Microsoft Corporation | Methods, systems, architectures and data structures for delivering software via a network |
US7191394B1 (en) | 2000-06-21 | 2007-03-13 | Microsoft Corporation | Authoring arbitrary XML documents using DHTML and XSLT |
US7000230B1 (en) | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
AU2001264895A1 (en) | 2000-06-21 | 2002-01-02 | Microsoft Corporation | System and method for integrating spreadsheets and word processing tables |
US7624356B1 (en) | 2000-06-21 | 2009-11-24 | Microsoft Corporation | Task-sensitive methods and systems for displaying command sets |
US7346848B1 (en) | 2000-06-21 | 2008-03-18 | Microsoft Corporation | Single window navigation methods and systems |
US7155667B1 (en) | 2000-06-21 | 2006-12-26 | Microsoft Corporation | User interface for integrated spreadsheets and word processing tables |
US6948135B1 (en) | 2000-06-21 | 2005-09-20 | Microsoft Corporation | Method and systems of providing information to computer users |
US8255791B2 (en) | 2000-11-29 | 2012-08-28 | Dov Koren | Collaborative, flexible, interactive real-time displays |
US7096223B2 (en) * | 2001-09-20 | 2006-08-22 | Wellogix Inc. | Process and system for managing and reconciling field documentation data within a complex project workflow system |
US20040019640A1 (en) * | 2002-07-25 | 2004-01-29 | Bartram Linda Ruth | System and method for distributing shared storage for collaboration across multiple devices |
US7028031B1 (en) * | 2002-11-27 | 2006-04-11 | Adobe Systems Incorporated | Repairing links in deactivated files |
US7072893B1 (en) * | 2002-11-27 | 2006-07-04 | Adobe Systems Incorporated | Repairing links in locked files |
JP4144864B2 (en) * | 2003-02-28 | 2008-09-03 | キヤノン株式会社 | Information processing method and apparatus |
US7415672B1 (en) | 2003-03-24 | 2008-08-19 | Microsoft Corporation | System and method for designing electronic forms |
US7370066B1 (en) | 2003-03-24 | 2008-05-06 | Microsoft Corporation | System and method for offline editing of data files |
US7275216B2 (en) | 2003-03-24 | 2007-09-25 | Microsoft Corporation | System and method for designing electronic forms and hierarchical schemas |
US7296017B2 (en) | 2003-03-28 | 2007-11-13 | Microsoft Corporation | Validation of XML data files |
US7913159B2 (en) | 2003-03-28 | 2011-03-22 | Microsoft Corporation | System and method for real-time validation of structured data files |
US7516145B2 (en) | 2003-03-31 | 2009-04-07 | Microsoft Corporation | System and method for incrementally transforming and rendering hierarchical data files |
US20040230903A1 (en) * | 2003-05-16 | 2004-11-18 | Dethe Elza | Method and system for enabling collaborative authoring of hierarchical documents with associated business logic |
US7451392B1 (en) | 2003-06-30 | 2008-11-11 | Microsoft Corporation | Rendering an HTML electronic form by applying XSLT to XML using a solution |
JP4193611B2 (en) * | 2003-06-30 | 2008-12-10 | コニカミノルタビジネステクノロジーズ株式会社 | Image forming apparatus |
US7406660B1 (en) | 2003-08-01 | 2008-07-29 | Microsoft Corporation | Mapping between structured data and a visual surface |
US7334187B1 (en) | 2003-08-06 | 2008-02-19 | Microsoft Corporation | Electronic form aggregation |
JP4449445B2 (en) * | 2003-12-17 | 2010-04-14 | コニカミノルタビジネステクノロジーズ株式会社 | Image forming apparatus |
GB2409541A (en) * | 2003-12-23 | 2005-06-29 | Mandorla Technology Ltd | Editable information management system and method |
JP4165403B2 (en) * | 2004-01-13 | 2008-10-15 | ソニー株式会社 | Information processing apparatus and method, and program |
US8819072B1 (en) | 2004-02-02 | 2014-08-26 | Microsoft Corporation | Promoting data from structured data files |
US20050234838A1 (en) * | 2004-04-14 | 2005-10-20 | Manousos Nicholas H | Method and apparatus for providing in place editing within static documents |
US8250034B2 (en) * | 2004-04-14 | 2012-08-21 | Verisign, Inc. | Method and apparatus to provide visual editing |
US7739306B2 (en) * | 2004-04-14 | 2010-06-15 | Verisign, Inc. | Method and apparatus for creating, assembling, and organizing compound media objects |
US7568101B1 (en) | 2004-05-13 | 2009-07-28 | Microsoft Corporation | Digital signatures with an embedded view |
US7774620B1 (en) | 2004-05-27 | 2010-08-10 | Microsoft Corporation | Executing applications at appropriate trust levels |
JP4309818B2 (en) * | 2004-07-15 | 2009-08-05 | 株式会社東芝 | Structured document management device, search device, storage method, search method, and program |
US7707642B1 (en) * | 2004-08-31 | 2010-04-27 | Adobe Systems Incorporated | Document access auditing |
US7707249B2 (en) * | 2004-09-03 | 2010-04-27 | Open Text Corporation | Systems and methods for collaboration |
US7702730B2 (en) * | 2004-09-03 | 2010-04-20 | Open Text Corporation | Systems and methods for collaboration |
US7516399B2 (en) | 2004-09-30 | 2009-04-07 | Microsoft Corporation | Structured-document path-language expression methods and systems |
US7692636B2 (en) | 2004-09-30 | 2010-04-06 | Microsoft Corporation | Systems and methods for handwriting to a screen |
US8487879B2 (en) | 2004-10-29 | 2013-07-16 | Microsoft Corporation | Systems and methods for interacting with a computer through handwriting to a screen |
US7712022B2 (en) | 2004-11-15 | 2010-05-04 | Microsoft Corporation | Mutually exclusive options in electronic forms |
US7721190B2 (en) | 2004-11-16 | 2010-05-18 | Microsoft Corporation | Methods and systems for server side form processing |
US7509353B2 (en) | 2004-11-16 | 2009-03-24 | Microsoft Corporation | Methods and systems for exchanging and rendering forms |
US7904801B2 (en) | 2004-12-15 | 2011-03-08 | Microsoft Corporation | Recursive sections in electronic forms |
US7437376B2 (en) * | 2004-12-20 | 2008-10-14 | Microsoft Corporation | Scalable object model |
US7937651B2 (en) | 2005-01-14 | 2011-05-03 | Microsoft Corporation | Structural editing operations for network forms |
US7725834B2 (en) | 2005-03-04 | 2010-05-25 | Microsoft Corporation | Designer-created aspect for an electronic form template |
US7792788B2 (en) * | 2005-03-04 | 2010-09-07 | Microsoft Corporation | Method and system for resolving conflicts operations in a collaborative editing environment |
JP2006277585A (en) * | 2005-03-30 | 2006-10-12 | Konica Minolta Business Technologies Inc | Server system, server device and terminal device |
US8086963B2 (en) * | 2005-05-19 | 2011-12-27 | Microsoft Corporation | Inheritance model between masters, layouts and slides |
US7543228B2 (en) | 2005-06-27 | 2009-06-02 | Microsoft Corporation | Template for rendering an electronic form |
US8200975B2 (en) | 2005-06-29 | 2012-06-12 | Microsoft Corporation | Digital signatures for network forms |
RU2005124030A (en) * | 2005-07-28 | 2007-02-10 | Александр Михайлович Юров (RU) | METHOD OF VISUAL ADDRESSING TEAMS IN TREE |
US7613996B2 (en) | 2005-08-15 | 2009-11-03 | Microsoft Corporation | Enabling selection of an inferred schema part |
US20070101256A1 (en) * | 2005-11-01 | 2007-05-03 | Charles Simonyi | Perfect source control |
CN100438416C (en) * | 2005-12-02 | 2008-11-26 | 无锡永中科技有限公司 | Method for realizing file coordination processing |
US8001459B2 (en) | 2005-12-05 | 2011-08-16 | Microsoft Corporation | Enabling electronic documents for limited-capability computing devices |
WO2007074697A1 (en) * | 2005-12-26 | 2007-07-05 | Ibm Japan, Ltd. | Method, program, and data processing system for operating display of display objects |
US20070226604A1 (en) * | 2006-03-22 | 2007-09-27 | Chalasani Nanchariah R | System and method for merging a sub-document into a collaboratively authored master document |
US20080028302A1 (en) * | 2006-07-31 | 2008-01-31 | Steffen Meschkat | Method and apparatus for incrementally updating a web page |
US8108763B2 (en) * | 2007-01-19 | 2012-01-31 | Constant Contact, Inc. | Visual editor for electronic mail |
EP2137645A1 (en) * | 2007-04-13 | 2009-12-30 | Thomson Licensing | System and method for mapping logical and physical assets in a user interface |
JP5098424B2 (en) * | 2007-05-02 | 2012-12-12 | 富士ゼロックス株式会社 | Document management apparatus and document processing program |
US8266534B2 (en) * | 2007-06-28 | 2012-09-11 | Microsoft Corporation | Collaborative generation of meeting minutes and agenda confirmation |
US7937663B2 (en) | 2007-06-29 | 2011-05-03 | Microsoft Corporation | Integrated collaborative user interface for a document editor program |
US7991790B2 (en) | 2007-07-20 | 2011-08-02 | Salesforce.Com, Inc. | System and method for storing documents accessed by multiple users in an on-demand service |
US7889210B2 (en) * | 2007-07-31 | 2011-02-15 | International Business Machines Corporation | Visual integration hub |
CN101796526A (en) * | 2007-09-04 | 2010-08-04 | 国际商业机器公司 | The system and method that is used for authenticating electronic documents |
JP5349778B2 (en) * | 2007-09-20 | 2013-11-20 | キヤノン株式会社 | Information processing apparatus, information processing method, program thereof, and storage medium |
US9178957B2 (en) * | 2007-09-27 | 2015-11-03 | Adobe Systems Incorporated | Application and data agnostic collaboration services |
US8161389B1 (en) * | 2007-10-31 | 2012-04-17 | Adobe Systems Incorporated | Authoring tool sharable file format |
US9756004B2 (en) | 2007-11-08 | 2017-09-05 | Skype | Message delivery system and method |
US9420014B2 (en) | 2007-11-15 | 2016-08-16 | Adobe Systems Incorporated | Saving state of a collaborative session in an editable format |
JP4518168B2 (en) * | 2008-03-21 | 2010-08-04 | 富士ゼロックス株式会社 | Related document presentation system and program |
US20090249224A1 (en) * | 2008-03-31 | 2009-10-01 | Microsoft Corporation | Simultaneous collaborative review of a document |
US8202166B2 (en) * | 2008-05-05 | 2012-06-19 | Microsoft Corporation | Multiple-player collaborative content editing |
US7949633B1 (en) | 2008-05-12 | 2011-05-24 | Adobe Systems Incorporated | Shared edit access of electronic content |
US8996621B2 (en) | 2008-05-12 | 2015-03-31 | Adobe Systems Incorporated | Asynchronous comment updates |
US7945595B1 (en) | 2008-05-12 | 2011-05-17 | Adobe Systems Incorporated | System and method for generating an item list in electronic content |
US9329744B2 (en) | 2008-05-12 | 2016-05-03 | Adobe Systems Incorporated | Segmented scroll bar |
US10055392B2 (en) | 2008-05-12 | 2018-08-21 | Adobe Systems Incorporated | History-based archive management |
US9176943B2 (en) | 2008-05-12 | 2015-11-03 | Adobe Systems Incorporated | Comment presentation in electronic documents |
US9418054B2 (en) | 2008-05-12 | 2016-08-16 | Adobe Systems Incorporated | Document comment management |
US8893017B2 (en) | 2008-05-29 | 2014-11-18 | Adobe Systems Incorporated | Tracking changes in a database tool |
JP5153464B2 (en) * | 2008-06-06 | 2013-02-27 | キヤノン株式会社 | Document management system, document management method, and computer program |
US20090307274A1 (en) * | 2008-06-06 | 2009-12-10 | Microsoft Corporation | Delayed merge |
US8341532B2 (en) * | 2008-06-10 | 2012-12-25 | Microsoft Corporation | Automated set-up of a collaborative workspace |
US8010487B2 (en) | 2008-06-27 | 2011-08-30 | Microsoft Corporation | Synchronization and collaboration within peer-to-peer and client/server environments |
JP5344460B2 (en) * | 2008-09-29 | 2013-11-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | EDITING DEVICE, EDITING PROGRAM, AND EDITING METHOD |
US7930447B2 (en) * | 2008-10-17 | 2011-04-19 | International Business Machines Corporation | Listing windows of active applications of computing devices sharing a keyboard based upon requests for attention |
US9294291B2 (en) | 2008-11-12 | 2016-03-22 | Adobe Systems Incorporated | Adaptive connectivity in network-based collaboration |
US9396279B1 (en) * | 2009-02-17 | 2016-07-19 | Jpmorgan Chase Bank, Na | Collaborative virtual markup |
US8346869B2 (en) * | 2009-04-13 | 2013-01-01 | Microsoft Corporation | Granular data synchronization for editing multiple data objects |
US8612380B2 (en) * | 2009-05-26 | 2013-12-17 | Adobe Systems Incorporated | Web-based collaboration for editing electronic documents |
US9298834B2 (en) | 2009-05-26 | 2016-03-29 | Adobe Systems Incorporated | User presence data for web-based document collaboration |
US9088414B2 (en) * | 2009-06-01 | 2015-07-21 | Microsoft Technology Licensing, Llc | Asynchronous identity establishment through a web-based application |
US10198523B2 (en) * | 2009-06-03 | 2019-02-05 | Microsoft Technology Licensing, Llc | Utilizing server pre-processing to deploy renditions of electronic documents in a computer network |
JP2011039997A (en) * | 2009-08-18 | 2011-02-24 | Fuji Xerox Co Ltd | Information processor and computer program |
US20110055677A1 (en) * | 2009-08-25 | 2011-03-03 | Thomas Lima | Systems and methods for associating and organizing digital files |
US8495044B2 (en) * | 2009-09-02 | 2013-07-23 | Microsoft Corporation | File system node updates |
CA2684540A1 (en) * | 2009-11-05 | 2011-05-05 | Ibm Canada Limited - Ibm Canada Limitee | Navigation through historical stored interactions associated with a multi-user view |
US20110145725A1 (en) * | 2009-12-11 | 2011-06-16 | Richard John Campbell | Methods and Systems for Attaching Semantics to a Collaborative Writing Surface |
FR2955688B1 (en) * | 2010-01-28 | 2012-02-24 | Somfy Sas | METHOD FOR CONFIGURING A DOMOTIC INSTALLATION |
US20110252312A1 (en) | 2010-04-12 | 2011-10-13 | Google Inc. | Real-Time Collaboration in a Hosted Word Processor |
WO2011130286A1 (en) | 2010-04-12 | 2011-10-20 | Google Inc. | Collaborative cursors in a hosted word processor |
US20110265005A1 (en) * | 2010-04-22 | 2011-10-27 | Research In Motion Limited | Method, system and apparatus for managing message attachments |
JP2012038210A (en) * | 2010-08-10 | 2012-02-23 | Sony Corp | Information processing unit, information processing method, computer program, and content display system |
CN102375866B (en) * | 2010-08-24 | 2013-04-03 | 腾讯科技(深圳)有限公司 | Rebroadcasting message presenting method and system |
US9240965B2 (en) | 2010-08-31 | 2016-01-19 | Sap Se | Methods and systems for business interaction monitoring for networked business process |
US8773464B2 (en) | 2010-09-15 | 2014-07-08 | Sharp Laboratories Of America, Inc. | Methods and systems for collaborative-writing-surface image formation |
US20120078597A1 (en) * | 2010-09-27 | 2012-03-29 | Infosys Technologies Limited | Mobile device with a modeling platform |
CN101968804B (en) * | 2010-10-14 | 2012-05-02 | 传神联合(北京)信息技术有限公司 | Method for realizing cooperative translation |
US20120150801A1 (en) * | 2010-12-08 | 2012-06-14 | Microsoft Corporation | Platform agnostic file attribute synchronization |
US8856230B2 (en) | 2010-12-14 | 2014-10-07 | Microsoft Corporation | In browser real time collaboration lists and forms |
US10503817B2 (en) * | 2011-01-12 | 2019-12-10 | Crucs Holdings, Llc | System and method for multi-party document revision |
US8560846B2 (en) | 2011-01-13 | 2013-10-15 | Hewlett-Packard Development Company, L.P. | Document security system and method |
US20120185759A1 (en) * | 2011-01-13 | 2012-07-19 | Helen Balinsky | System and method for collaboratively editing a composite document |
US9002139B2 (en) | 2011-02-16 | 2015-04-07 | Adobe Systems Incorporated | Methods and systems for automated image slicing |
US9413811B2 (en) * | 2011-02-28 | 2016-08-09 | Red Hat, Inc. | Establishing upload channels to a cloud data distribution service |
WO2012119250A1 (en) * | 2011-03-04 | 2012-09-13 | Scribble Technologies Inc. | System and methods for facilitating the synchronization of data |
US8996985B1 (en) | 2011-03-16 | 2015-03-31 | Google Inc. | Online document processing service for displaying comments |
US8533595B2 (en) * | 2011-04-19 | 2013-09-10 | Autodesk, Inc | Hierarchical display and navigation of document revision histories |
US11611595B2 (en) | 2011-05-06 | 2023-03-21 | David H. Sitrick | Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input |
US10402485B2 (en) | 2011-05-06 | 2019-09-03 | David H. Sitrick | Systems and methodologies providing controlled collaboration among a plurality of users |
US8959654B2 (en) | 2011-05-23 | 2015-02-17 | International Business Machines Corporation | Minimizing sensitive data exposure during preparation of redacted documents |
US8656181B2 (en) | 2011-05-26 | 2014-02-18 | Hewlett-Packard Development Company, L.P. | Method and system for business workflow cycle of a composite document |
US11720695B2 (en) * | 2011-09-01 | 2023-08-08 | Websistant, L.L.C. | Server-based electronic publication management |
US9336137B2 (en) | 2011-09-02 | 2016-05-10 | Google Inc. | System and method for performing data management in a collaborative development environment |
US20130080883A1 (en) * | 2011-09-22 | 2013-03-28 | Arun Kishore Narasani | Patent Specification Development |
US10430388B1 (en) | 2011-10-17 | 2019-10-01 | Google Llc | Systems and methods for incremental loading of collaboratively generated presentations |
US8812946B1 (en) | 2011-10-17 | 2014-08-19 | Google Inc. | Systems and methods for rendering documents |
US20150199308A1 (en) | 2011-10-17 | 2015-07-16 | Google Inc. | Systems and methods for controlling the display of online documents |
US8266245B1 (en) | 2011-10-17 | 2012-09-11 | Google Inc. | Systems and methods for incremental loading of collaboratively generated presentations |
US8434002B1 (en) | 2011-10-17 | 2013-04-30 | Google Inc. | Systems and methods for collaborative editing of elements in a presentation document |
US8471871B1 (en) | 2011-10-17 | 2013-06-25 | Google Inc. | Authoritative text size measuring |
US8397153B1 (en) | 2011-10-17 | 2013-03-12 | Google Inc. | Systems and methods for rich presentation overlays |
WO2013058846A1 (en) | 2011-10-18 | 2013-04-25 | Dotloop, Llc | Systems, methods and apparatus for form building |
CN108762577A (en) | 2011-10-18 | 2018-11-06 | 卡内基梅隆大学 | Method and apparatus for the touch event on touch sensitive surface of classifying |
US8738706B1 (en) | 2011-11-16 | 2014-05-27 | Google Inc. | Systems and methods for collaborative document editing |
US9286597B2 (en) | 2012-03-30 | 2016-03-15 | Microsoft Technology Licensing, Llc | Tracking co-authoring conflicts using document comments |
US9367522B2 (en) | 2012-04-13 | 2016-06-14 | Google Inc. | Time-based presentation editing |
US9158746B2 (en) * | 2012-06-13 | 2015-10-13 | International Business Machines Corporation | Managing concurrent editing in a collaborative editing environment using cursor proximity and a delay |
WO2014039709A2 (en) * | 2012-09-05 | 2014-03-13 | Dorsata, Inc. | Methods and systems for the implementation of web based collaborative clinical pathways |
US9372833B2 (en) * | 2012-09-14 | 2016-06-21 | David H. Sitrick | Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data |
US9438546B2 (en) | 2012-12-15 | 2016-09-06 | Microsoft Technology Licensing, Llc | Attachment collaboration within message environments |
US9462037B2 (en) | 2013-01-07 | 2016-10-04 | Google Inc. | Dynamically sizing chunks in a partially loaded spreadsheet model |
US10956667B2 (en) | 2013-01-07 | 2021-03-23 | Google Llc | Operational transformations proxy for thin clients |
US9311622B2 (en) | 2013-01-15 | 2016-04-12 | Google Inc. | Resolving mutations in a partially-loaded spreadsheet model |
US9529816B2 (en) * | 2013-01-25 | 2016-12-27 | Konica Minolta Laboratory U.S.A., Inc. | Arbitrating among concurrent editors of shared documents |
US10826951B2 (en) | 2013-02-11 | 2020-11-03 | Dotloop, Llc | Electronic content sharing |
US10037352B1 (en) | 2013-03-18 | 2018-07-31 | The Boston Consulting Group, Inc. | Methods for editing hierarchical data |
KR20140114766A (en) | 2013-03-19 | 2014-09-29 | 퀵소 코 | Method and device for sensing touch inputs |
US9612689B2 (en) | 2015-02-02 | 2017-04-04 | Qeexo, Co. | Method and apparatus for classifying a touch event on a touchscreen as related to one of multiple function generating interaction layers and activating a function in the selected interaction layer |
US9013452B2 (en) | 2013-03-25 | 2015-04-21 | Qeexo, Co. | Method and system for activating different interactive functions using different types of finger contacts |
US9575622B1 (en) | 2013-04-02 | 2017-02-21 | Dotloop, Llc | Systems and methods for electronic signature |
US9836549B2 (en) | 2013-05-12 | 2017-12-05 | Sap Se | Collaboration adapter to exploit single-user web applications for collaborative work |
US10133720B2 (en) | 2013-06-15 | 2018-11-20 | Microsoft Technology Licensing, Llc | Showing presence of multiple authors in a spreadsheet |
US9465784B1 (en) | 2013-06-20 | 2016-10-11 | Bulletin Intelligence LLC | Method and system for enabling real-time, collaborative generation of documents having overlapping subject matter |
US10049022B2 (en) * | 2013-06-24 | 2018-08-14 | Oracle International Corporation | Systems and methods to retain and reclaim resource locks and client states after server failures |
US10025464B1 (en) * | 2013-10-07 | 2018-07-17 | Google Llc | System and method for highlighting dependent slides while editing master slides of a presentation |
US10013262B2 (en) | 2013-12-16 | 2018-07-03 | Tencent Technology (Shenzhen) Company Limited | Method and device for adding indicative icon in interactive application |
US10552525B1 (en) | 2014-02-12 | 2020-02-04 | Dotloop, Llc | Systems, methods and apparatuses for automated form templating |
US9836194B2 (en) * | 2014-03-19 | 2017-12-05 | Toshiba Tec Kabushiki Kaisha | Desktop information processing apparatus and display method for the same |
US9659394B2 (en) | 2014-06-30 | 2017-05-23 | Microsoft Technology Licensing, Llc | Cinematization of output in compound device environment |
EP3161705B1 (en) | 2014-06-30 | 2020-03-04 | Hewlett-Packard Development Company, L.P. | Composite document referenced resources |
US9773070B2 (en) | 2014-06-30 | 2017-09-26 | Microsoft Technology Licensing, Llc | Compound transformation chain application across multiple devices |
US9356913B2 (en) | 2014-06-30 | 2016-05-31 | Microsoft Technology Licensing, Llc | Authorization of joining of transformation chain instances |
US9396698B2 (en) | 2014-06-30 | 2016-07-19 | Microsoft Technology Licensing, Llc | Compound application presentation across multiple devices |
US10733364B1 (en) | 2014-09-02 | 2020-08-04 | Dotloop, Llc | Simplified form interface system and method |
US9329715B2 (en) | 2014-09-11 | 2016-05-03 | Qeexo, Co. | Method and apparatus for differentiating touch screen users based on touch event analysis |
US11619983B2 (en) | 2014-09-15 | 2023-04-04 | Qeexo, Co. | Method and apparatus for resolving touch screen ambiguities |
US10606417B2 (en) | 2014-09-24 | 2020-03-31 | Qeexo, Co. | Method for improving accuracy of touch screen event analysis by use of spatiotemporal touch patterns |
US10282024B2 (en) | 2014-09-25 | 2019-05-07 | Qeexo, Co. | Classifying contacts or associations with a touch sensitive device |
CN104506650B (en) * | 2015-01-04 | 2018-07-03 | 华为技术有限公司 | A kind of user equipment cooperative control method, user equipment and communication system |
US10642404B2 (en) | 2015-08-24 | 2020-05-05 | Qeexo, Co. | Touch sensitive device with multi-sensor stream synchronized data |
US20170104796A1 (en) * | 2015-10-08 | 2017-04-13 | Armored Info, Llc | System, method and apparatus for simultaneous media collaboration |
EP3411807A1 (en) | 2016-02-02 | 2018-12-12 | Activewrite, Inc. | Document collaboration and consolidation tools and methods of use |
US20190146758A1 (en) * | 2017-11-14 | 2019-05-16 | Microsoft Technology Licensing, Llc | Collaborative editing of source code with intelligent operations |
US10970457B2 (en) * | 2017-11-22 | 2021-04-06 | Citta LLC | Collaboration mechanism |
US10671371B2 (en) | 2018-06-12 | 2020-06-02 | International Business Machines Corporation | Alerting an offline user of a predicted computer file update |
CN108874670A (en) * | 2018-06-20 | 2018-11-23 | 上海哔哩哔哩科技有限公司 | Product feature multi-user edit methods, server, system and storage medium |
US11009989B2 (en) | 2018-08-21 | 2021-05-18 | Qeexo, Co. | Recognizing and rejecting unintentional touch events associated with a touch sensitive device |
US11194964B2 (en) | 2019-03-22 | 2021-12-07 | International Business Machines Corporation | Real-time assessment of text consistency |
US10942603B2 (en) | 2019-05-06 | 2021-03-09 | Qeexo, Co. | Managing activity states of an application processor in relation to touch or hover interactions with a touch sensitive device |
US11231815B2 (en) | 2019-06-28 | 2022-01-25 | Qeexo, Co. | Detecting object proximity using touch sensitive surface sensing and ultrasonic sensing |
WO2021112773A1 (en) * | 2019-12-06 | 2021-06-10 | Gnowbe Group Ltd. | A one-touch authoring system and method for instantaneous content creation and visualization in apps and web browsers on mobile devices and web browsers on desktops via a communication network |
US20210234908A1 (en) * | 2019-12-20 | 2021-07-29 | Atlassian Pty Ltd. | Systems and methods for collaborative editing an electronic resource using client device designations |
US11592423B2 (en) | 2020-01-29 | 2023-02-28 | Qeexo, Co. | Adaptive ultrasonic sensing techniques and systems to mitigate interference |
US11544227B2 (en) | 2020-06-18 | 2023-01-03 | T-Mobile Usa, Inc. | Embedded reference object and interaction within a visual collaboration system |
US20210398079A1 (en) * | 2020-06-18 | 2021-12-23 | T-Mobile Usa, Inc. | Workflow management and interaction between reference software and visual collaboration software |
JP7639404B2 (en) * | 2021-03-02 | 2025-03-05 | 富士フイルムビジネスイノベーション株式会社 | Information processing device and information processing program |
US20220413688A1 (en) * | 2021-06-23 | 2022-12-29 | Scrollmotion, Inc. dba Ingage | Seamless Content Presentation |
JP2023104402A (en) * | 2022-01-17 | 2023-07-28 | トヨタ自動車株式会社 | Information processing device, information processing method, information processing program, and vehicle |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287521A (en) * | 1989-06-15 | 1994-02-15 | Hitachi, Ltd. | Method and apparatus for releasing and obtaining shared and exclusive locks |
US5526524A (en) * | 1993-12-23 | 1996-06-11 | International Business Machines Corporation | Method and system for management of locked objects in a computer supported cooperative work environment |
US5623659A (en) * | 1993-04-30 | 1997-04-22 | International Business Machines Corporation | Parent/child subset locking scheme for versioned objects |
US5781732A (en) * | 1996-06-20 | 1998-07-14 | Object Technology Licensing Corp. | Framework for constructing shared documents that can be collaboratively accessed by multiple users |
US6049334A (en) * | 1993-12-20 | 2000-04-11 | International Business Machines Corporation | Method and system for graphically indicating the activity of a plurality of users within a shared data collection |
US6067551A (en) * | 1997-11-14 | 2000-05-23 | Microsoft Corporation | Computer implemented method for simultaneous multi-user editing of a document |
US6088702A (en) * | 1998-02-25 | 2000-07-11 | Plantz; Scott H. | Group publishing system |
US6212534B1 (en) * | 1999-05-13 | 2001-04-03 | X-Collaboration Software Corp. | System and method for facilitating collaboration in connection with generating documents among a plurality of operators using networked computer systems |
US6275935B1 (en) * | 1998-04-17 | 2001-08-14 | Thingworld.Com, Llc | Systems and methods for locking interactive objects |
US6289460B1 (en) * | 1999-09-13 | 2001-09-11 | Astus Corporation | Document management system |
US6314425B1 (en) * | 1999-04-07 | 2001-11-06 | Critical Path, Inc. | Apparatus and methods for use of access tokens in an internet document management system |
US6446093B2 (en) * | 1997-02-14 | 2002-09-03 | Nec Corporation | Document sharing management method for a distributed system |
US6529905B1 (en) * | 2000-01-11 | 2003-03-04 | Frontline Solutions, Inc. | Method and system for allowing multiple users to edit a hierarchical data structure |
US6681371B1 (en) * | 1998-12-21 | 2004-01-20 | At&T Corp. | System and method for using container documents as multi-user domain clients |
US6757871B1 (en) * | 1999-08-10 | 2004-06-29 | Fuji Xerox Co., Ltd. | Common document editing apparatus |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5220657A (en) * | 1987-12-02 | 1993-06-15 | Xerox Corporation | Updating local copy of shared data in a collaborative system |
US5206934A (en) * | 1989-08-15 | 1993-04-27 | Group Technologies, Inc. | Method and apparatus for interactive computer conferencing |
US5649104A (en) * | 1993-03-19 | 1997-07-15 | Ncr Corporation | System for allowing user of any computer to draw image over that generated by the host computer and replicating the drawn image to other computers |
US5408470A (en) * | 1993-10-14 | 1995-04-18 | Intel Corporation | Deferred synchronization of distributed objects |
GB2284494B (en) * | 1993-11-26 | 1998-09-09 | Hitachi Ltd | Distributed shared memory management system |
US6199116B1 (en) * | 1996-05-24 | 2001-03-06 | Microsoft Corporation | Method and system for managing data while sharing application programs |
FR2758748B1 (en) * | 1997-01-30 | 1999-04-02 | Gec Alsthom Stein Ind | ENERGY RECOVERY PLANT FOR URBAN WASTE AND THE LIKE |
US5966512A (en) * | 1997-06-05 | 1999-10-12 | International Business Machines Corporation | Groupware save operation |
WO1999033007A1 (en) * | 1997-12-22 | 1999-07-01 | Rightworks Corporation | System and method for collaborative data sharing |
US6393437B1 (en) * | 1998-01-27 | 2002-05-21 | Microsoft Corporation | Web developer isolation techniques |
-
2001
- 2001-08-21 CA CA002424713A patent/CA2424713C/en not_active Expired - Lifetime
- 2001-08-21 WO PCT/CA2001/001207 patent/WO2002017115A2/en active Application Filing
- 2001-08-21 US US09/933,012 patent/US7249314B2/en not_active Expired - Lifetime
- 2001-08-21 AU AU2001287421A patent/AU2001287421A1/en not_active Abandoned
-
2007
- 2007-03-15 US US11/686,652 patent/US20070186157A1/en not_active Abandoned
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287521A (en) * | 1989-06-15 | 1994-02-15 | Hitachi, Ltd. | Method and apparatus for releasing and obtaining shared and exclusive locks |
US5623659A (en) * | 1993-04-30 | 1997-04-22 | International Business Machines Corporation | Parent/child subset locking scheme for versioned objects |
US6049334A (en) * | 1993-12-20 | 2000-04-11 | International Business Machines Corporation | Method and system for graphically indicating the activity of a plurality of users within a shared data collection |
US5526524A (en) * | 1993-12-23 | 1996-06-11 | International Business Machines Corporation | Method and system for management of locked objects in a computer supported cooperative work environment |
US5781732A (en) * | 1996-06-20 | 1998-07-14 | Object Technology Licensing Corp. | Framework for constructing shared documents that can be collaboratively accessed by multiple users |
US6446093B2 (en) * | 1997-02-14 | 2002-09-03 | Nec Corporation | Document sharing management method for a distributed system |
US6067551A (en) * | 1997-11-14 | 2000-05-23 | Microsoft Corporation | Computer implemented method for simultaneous multi-user editing of a document |
US6088702A (en) * | 1998-02-25 | 2000-07-11 | Plantz; Scott H. | Group publishing system |
US6275935B1 (en) * | 1998-04-17 | 2001-08-14 | Thingworld.Com, Llc | Systems and methods for locking interactive objects |
US6681371B1 (en) * | 1998-12-21 | 2004-01-20 | At&T Corp. | System and method for using container documents as multi-user domain clients |
US6314425B1 (en) * | 1999-04-07 | 2001-11-06 | Critical Path, Inc. | Apparatus and methods for use of access tokens in an internet document management system |
US6212534B1 (en) * | 1999-05-13 | 2001-04-03 | X-Collaboration Software Corp. | System and method for facilitating collaboration in connection with generating documents among a plurality of operators using networked computer systems |
US6757871B1 (en) * | 1999-08-10 | 2004-06-29 | Fuji Xerox Co., Ltd. | Common document editing apparatus |
US6289460B1 (en) * | 1999-09-13 | 2001-09-11 | Astus Corporation | Document management system |
US6529905B1 (en) * | 2000-01-11 | 2003-03-04 | Frontline Solutions, Inc. | Method and system for allowing multiple users to edit a hierarchical data structure |
Cited By (715)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8509230B2 (en) | 1997-06-16 | 2013-08-13 | Numecent Holdings, Inc. | Software streaming system and method |
US20100023640A1 (en) * | 1997-06-16 | 2010-01-28 | Stream Theory, Inc. | Software streaming system and method |
US7577751B2 (en) | 1997-06-16 | 2009-08-18 | Stream Theory, Inc./Endeavors Technologies, Inc. | Software streaming system and method |
US9094480B2 (en) | 1997-06-16 | 2015-07-28 | Numecent Holdings, Inc. | Software streaming system and method |
US8127218B2 (en) * | 1999-05-21 | 2012-02-28 | Sony Corporation | Information processing method and apparatus |
US20070138288A1 (en) * | 1999-05-21 | 2007-06-21 | Sony Corporation | Information processing method and apparatus |
US8250461B2 (en) | 2000-10-24 | 2012-08-21 | International Business Machines Corporation | Persistently self-replicating multiple ranges of cells through a table |
US20090037803A1 (en) * | 2000-10-24 | 2009-02-05 | International Business Machines Corporation | System in an electronic spreadsheet for persistently self-replicating multiple ranges of cells through a copy-paste operation and a self-replication table |
US9158751B2 (en) | 2000-10-24 | 2015-10-13 | International Business Machines Corporation | Persistently self-replicating multiple ranges of cells through a table |
US6912690B2 (en) * | 2000-10-24 | 2005-06-28 | International Business Machines Corporation | Method and system in an electronic spreadsheet for persistently copy-pasting a source range of cells onto one or more destination ranges of cells |
US9922019B2 (en) | 2000-10-24 | 2018-03-20 | International Business Machines Corporation | Persistently self-replicating cells |
US20020049784A1 (en) * | 2000-10-24 | 2002-04-25 | Internatonal Business Machines Corporation | Method and system in an electronic spreadsheet for persistently copy-pasting a source range of cells onto one or more destination ranges of cells |
US20020188500A1 (en) * | 2000-10-30 | 2002-12-12 | Kwok Shui Hung | System for managing oil and gas exploration and production data and related transactions |
US9130953B2 (en) | 2000-11-06 | 2015-09-08 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US8831995B2 (en) | 2000-11-06 | 2014-09-09 | Numecent Holdings, Inc. | Optimized server for streamed applications |
US9654548B2 (en) | 2000-11-06 | 2017-05-16 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US20030004882A1 (en) * | 2000-11-06 | 2003-01-02 | Holler Anne Marie | Optimized server for streamed applications |
US9781050B2 (en) | 2001-01-18 | 2017-10-03 | Sdl Inc. | Globalization management system and method therefor |
US9596188B2 (en) | 2001-01-18 | 2017-03-14 | Sdl Inc. | Globalization management system and method therefor |
US9954794B2 (en) | 2001-01-18 | 2018-04-24 | Sdl Inc. | Globalization management system and method therefor |
US8438298B2 (en) | 2001-02-14 | 2013-05-07 | Endeavors Technologies, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US20080178298A1 (en) * | 2001-02-14 | 2008-07-24 | Endeavors Technology, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US8893249B2 (en) | 2001-02-14 | 2014-11-18 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US7447742B1 (en) * | 2001-03-30 | 2008-11-04 | Mirapoint Software, Inc. | Dual-frame user interface on generic client software |
US20020199175A1 (en) * | 2001-06-26 | 2002-12-26 | Sun Microsystems, Inc. | Detecting and mitigating soft errors using duplicative instructions |
US20030000192A1 (en) * | 2001-06-27 | 2003-01-02 | Exmark Manufacturing Company, Incorporated | Operator control system for self-propelled vehicles |
US7222187B2 (en) | 2001-07-31 | 2007-05-22 | Sun Microsystems, Inc. | Distributed trust mechanism for decentralized networks |
US20030028585A1 (en) * | 2001-07-31 | 2003-02-06 | Yeager William J. | Distributed trust mechanism for decentralized networks |
US20030051213A1 (en) * | 2001-09-07 | 2003-03-13 | Hidetsugu Mitsui | Document passing system, document updating controller, client device, document management server, method of controlling updating of document, recording medium and program |
US7343385B2 (en) | 2001-09-08 | 2008-03-11 | Siemens Medical Solutions Usa, Inc. | System for processing objects for storage in a document or other storage system |
US20030050937A1 (en) * | 2001-09-08 | 2003-03-13 | Lusen William D. | System for adaptively identifying data for storage |
US20030061229A1 (en) * | 2001-09-08 | 2003-03-27 | Lusen William D. | System for processing objects for storage in a document or other storage system |
US7003529B2 (en) | 2001-09-08 | 2006-02-21 | Siemens Medical Solutions Health Services Corporation | System for adaptively identifying data for storage |
US6999972B2 (en) * | 2001-09-08 | 2006-02-14 | Siemens Medical Systems Health Services Inc. | System for processing objects for storage in a document or other storage system |
US20060010168A1 (en) * | 2001-09-08 | 2006-01-12 | Lusen William D | System for processing objects for storage in a document or other storage system |
US20030110219A1 (en) * | 2001-12-11 | 2003-06-12 | Chih-Hao Hsu | Collaboration system and data structure thereof |
US20030145055A1 (en) * | 2001-12-12 | 2003-07-31 | Michael Henke | Method for delivering data to, and processing data in, a data processing unit |
US7536404B2 (en) | 2001-12-13 | 2009-05-19 | Siemens Product Lifecycle Management Software, Inc. | Electronic files preparation for storage in a server |
US20030115171A1 (en) * | 2001-12-13 | 2003-06-19 | Mangalvedhekar Sunit B. | Electronic files preparation for storage in a server |
US20030115172A1 (en) * | 2001-12-13 | 2003-06-19 | Mangalvedhekar Sunit B. | Electronic file management |
US7660876B2 (en) * | 2001-12-13 | 2010-02-09 | Siemens Product Lifecycle Management Software Inc. | Electronic file management |
US20030112273A1 (en) * | 2001-12-17 | 2003-06-19 | Workshare Technology, Ltd. | Document collaboration suite using a common database |
US20070150964A1 (en) * | 2002-02-21 | 2007-06-28 | Adobe Systems Incorporated | Application Rights Enabling |
US8256016B2 (en) | 2002-02-21 | 2012-08-28 | Adobe Systems Incorporated | Application rights enabling |
US7913314B2 (en) | 2002-02-21 | 2011-03-22 | Adobe Systems Incorporated | Application rights enabling |
US7127613B2 (en) | 2002-02-25 | 2006-10-24 | Sun Microsystems, Inc. | Secured peer-to-peer network data exchange |
US20030163697A1 (en) * | 2002-02-25 | 2003-08-28 | Pabla Kuldip Singh | Secured peer-to-peer network data exchange |
US7509577B2 (en) * | 2002-03-08 | 2009-03-24 | Toshiba Corp Oration | Method and system for implementing a clipboard |
US20040039995A1 (en) * | 2002-03-08 | 2004-02-26 | Katie Kuwata | Method and system for implementing a clipboard |
US7376743B1 (en) * | 2002-04-02 | 2008-05-20 | Cisco Technology, Inc. | Method and apparatus for load balancing in a virtual private network |
US8127217B2 (en) | 2002-04-19 | 2012-02-28 | Kabushiki Kaisha Toshiba | Document management system for transferring a plurality of documents |
US20030200503A1 (en) * | 2002-04-19 | 2003-10-23 | George Koppich | Document management system for transferring a plurality of documents |
US7478316B2 (en) * | 2002-04-19 | 2009-01-13 | Toshiba Tec Kabushiki Kaisha | Document management system for transferring a plurality of documents |
US7640347B1 (en) * | 2002-05-02 | 2009-12-29 | F5 Networks, Inc. | Method and system for inserting POST data into the GET request to apply normal caching rules |
US7596777B2 (en) * | 2002-06-25 | 2009-09-29 | Siebel Systems, Inc. | Method and apparatus to control translatable properties of metadata |
US20070226687A1 (en) * | 2002-06-25 | 2007-09-27 | Tim Fallen-Bailey | Method and apparatus to control translatable properties of metadata |
US10922158B2 (en) | 2002-06-28 | 2021-02-16 | Open Text Sa Ulc | Method and system for transforming input data streams |
US11360833B2 (en) | 2002-06-28 | 2022-06-14 | Open Text Sa Ulc | Method and system for transforming input data streams |
US20090105882A1 (en) * | 2002-07-25 | 2009-04-23 | Intouch Technologies, Inc. | Medical Tele-Robotic System |
US20040050237A1 (en) * | 2002-09-14 | 2004-03-18 | Samsung Electronics Co., Ltd. | Apparatus and method for storing and reproducing music file |
US7213047B2 (en) | 2002-10-31 | 2007-05-01 | Sun Microsystems, Inc. | Peer trust evaluation using mobile agents in peer-to-peer networks |
US11263389B2 (en) | 2002-10-31 | 2022-03-01 | Litera Corporation | Collaborative hierarchical document development and review system |
US20100235763A1 (en) * | 2002-10-31 | 2010-09-16 | Litera Technology Llc. | Collaborative hierarchical document development and review system |
US7818678B2 (en) | 2002-10-31 | 2010-10-19 | Litera Technology Llc | Collaborative document development and review system |
US8108455B2 (en) | 2002-10-31 | 2012-01-31 | Oracle America, Inc. | Mobile agents in peer-to-peer networks |
US20040088347A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Mobile agents in peer-to-peer networks |
US20040088369A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Peer trust evaluation using mobile agents in peer-to-peer networks |
US20040133640A1 (en) * | 2002-10-31 | 2004-07-08 | Yeager William J. | Presence detection using mobile agents in peer-to-peer networks |
US8037202B2 (en) | 2002-10-31 | 2011-10-11 | Oracle America, Inc. | Presence detection using mobile agents in peer-to-peer networks |
US20040085354A1 (en) * | 2002-10-31 | 2004-05-06 | Deepak Massand | Collaborative document development and review system |
US7328243B2 (en) * | 2002-10-31 | 2008-02-05 | Sun Microsystems, Inc. | Collaborative content coherence using mobile agents in peer-to-peer networks |
US9105007B2 (en) | 2002-10-31 | 2015-08-11 | Litéra Technologies, LLC | Collaborative hierarchical document development and review system |
US20040088646A1 (en) * | 2002-10-31 | 2004-05-06 | Yeager William J. | Collaborative content coherence using mobile agents in peer-to-peer networks |
US8051038B1 (en) * | 2002-11-07 | 2011-11-01 | Siemens Industry, Inc. | Method and system for information distribution |
US7278168B1 (en) | 2002-11-27 | 2007-10-02 | Adobe Systems Incorporated | Dynamic enabling of functionality in electronic document readers |
US20130219451A1 (en) * | 2002-11-27 | 2013-08-22 | Krish Chaudhury | Document digest allowing selective changes to a document |
US8660960B2 (en) * | 2002-11-27 | 2014-02-25 | Adobe Systems Incorporated | Document digest allowing selective changes to a document |
US8151114B2 (en) | 2002-11-27 | 2012-04-03 | Adobe Systems Incorporated | Dynamic enabling of functionality in electronic document readers |
US7698559B1 (en) | 2002-11-27 | 2010-04-13 | Adobe Systems Incorporated | Dynamic enabling of functionality in electronic document readers |
US20040107224A1 (en) * | 2002-12-02 | 2004-06-03 | International Business Machines Corporation | Concurrent editing of a file by multiple authors |
US7954043B2 (en) * | 2002-12-02 | 2011-05-31 | International Business Machines Corporation | Concurrent editing of a file by multiple authors |
US9594925B2 (en) | 2003-02-28 | 2017-03-14 | Microsoft Technology Licensing, Llc | Method to delay locking of server files on edit |
US9280553B2 (en) * | 2003-02-28 | 2016-03-08 | Microsoft Technology Licensing, Llc | Method to delay locking of server files on edit |
US20140229507A1 (en) * | 2003-02-28 | 2014-08-14 | Microsoft Corporation | Method To Delay Locking Of Server Files On Edit |
US20060167954A1 (en) * | 2003-03-03 | 2006-07-27 | Canon Kabushiki Kaisha | Information processing method, information processing apparatus, method of controlling server apparatus, and server apparatus |
US20060034330A1 (en) * | 2003-03-17 | 2006-02-16 | Ryuichi Iwamura | Bandwidth management of virtual networks on a shared network |
US7633925B2 (en) * | 2003-03-17 | 2009-12-15 | Sony Corporation | Bandwidth management of virtual networks on a shared network |
US20060200756A1 (en) * | 2003-03-25 | 2006-09-07 | Unisys Corporation | Publishing system including front-end client links to workflow engine and communication protocol schema |
US8533480B2 (en) | 2003-05-16 | 2013-09-10 | Adobe Systems Incorporated | Document modification detection and prevention |
US7735144B2 (en) | 2003-05-16 | 2010-06-08 | Adobe Systems Incorporated | Document modification detection and prevention |
US9256753B2 (en) * | 2003-06-11 | 2016-02-09 | Microsoft Technology Licensing, Llc | Method and apparatus for protecting regions of an electronic document |
US10528747B2 (en) | 2003-06-11 | 2020-01-07 | Microsoft Technology Licensing, Llc | Method and apparatus for protecting regions of an electronic document |
US20090150761A1 (en) * | 2003-06-11 | 2009-06-11 | Microsoft Corporation | Method and apparatus for protecting regions of an electronic document |
US10860784B2 (en) | 2003-08-07 | 2020-12-08 | Paypal, Inc. | Collaborative email with hierarchical signature authority |
US9886428B2 (en) | 2003-08-07 | 2018-02-06 | Paypal, Inc. | Collaborative email with hierarchical signature authority |
US20090083384A1 (en) * | 2003-08-07 | 2009-03-26 | International Business Machines Corporation | Collaborative Email With Hierachical Signature Authority |
US8606855B2 (en) | 2003-08-07 | 2013-12-10 | Ebay Inc. | Collaborative email with hierachical signature authority |
US20080263155A1 (en) * | 2003-08-07 | 2008-10-23 | International Business Machines Corporation | Collaborative Email With Delegable Authorities |
US20090083314A1 (en) * | 2003-10-24 | 2009-03-26 | Enrico Maim | Method of Manipulating Information Objects and of Accessing Such Objects in a Computer Environment |
US8495099B2 (en) * | 2003-10-24 | 2013-07-23 | Enrico Maim | Method of manipulating information objects and of accessing such objects in a computer environment |
US7617447B1 (en) | 2003-12-09 | 2009-11-10 | Microsoft Corporation | Context free document portions |
US20050149861A1 (en) * | 2003-12-09 | 2005-07-07 | Microsoft Corporation | Context-free document portions with alternate formats |
US7464330B2 (en) | 2003-12-09 | 2008-12-09 | Microsoft Corporation | Context-free document portions with alternate formats |
FR2867875A1 (en) * | 2004-03-22 | 2005-09-23 | Christophe Cadic | CLIENT-SERVER COMPUTER SYSTEM (INTRANET, EXTRANET, AND INTERNET) WHICH ALLOWS THE CREATION OF ANIMATED MULTIMEDIA PRESENTATIONS AND THE MANAGEMENT OF USER PRIVILEGES |
US20080178089A1 (en) * | 2004-03-29 | 2008-07-24 | Lehman Brothers Holdings, Inc. | Dynamic presentation generator |
US7607089B2 (en) * | 2004-03-29 | 2009-10-20 | Barclays Capital Inc. | Dynamic presentation generator |
US7428704B2 (en) * | 2004-03-29 | 2008-09-23 | Lehman Brothers Holdings Inc. | Dynamic presentation generator |
WO2005098677A3 (en) * | 2004-03-29 | 2007-10-04 | Lehman Brothers Holdings Inc | Dynamic presentation generator |
US20050216431A1 (en) * | 2004-03-29 | 2005-09-29 | John Baker | Dynamic presentation generator |
US8683380B2 (en) * | 2004-04-02 | 2014-03-25 | International Business Machines Corporation | Multicast file viewing and editing |
US20050223336A1 (en) * | 2004-04-02 | 2005-10-06 | International Business Machines Corporation | Multicast file viewing and editing |
US20100017751A1 (en) * | 2004-04-02 | 2010-01-21 | International Business Machines Corporation | Multicast File Viewing and Editing |
US20100017752A1 (en) * | 2004-04-02 | 2010-01-21 | International Business Machines Corporation | Multicast File Viewing and Editing |
US8719728B2 (en) * | 2004-04-02 | 2014-05-06 | International Business Machines Corporation | Multicast file viewing and editing |
US8276096B2 (en) * | 2004-04-02 | 2012-09-25 | International Business Machines Corporation | Multicast file viewing and editing |
FR2869433A1 (en) * | 2004-04-21 | 2005-10-28 | Marwan Boudouma | Electronic document e.g. product catalogue, managing method for e.g. goods provider, involves constructing presentation models from imported documents, applying models to documents, and exporting stored models for user provider |
US7383502B2 (en) * | 2004-04-30 | 2008-06-03 | Microsoft Corporation | Packages that contain pre-paginated documents |
US20060149785A1 (en) * | 2004-04-30 | 2006-07-06 | Microsoft Corporation | Method and Apparatus for Maintaining Relationships Between Parts in a Package |
US7418652B2 (en) | 2004-04-30 | 2008-08-26 | Microsoft Corporation | Method and apparatus for interleaving parts of a document |
US20080168342A1 (en) * | 2004-04-30 | 2008-07-10 | Microsoft Corporation | Packages that Contain Pre-Paginated Documents |
US7451156B2 (en) | 2004-04-30 | 2008-11-11 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US20050278272A1 (en) * | 2004-04-30 | 2005-12-15 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US7383500B2 (en) * | 2004-04-30 | 2008-06-03 | Microsoft Corporation | Methods and systems for building packages that contain pre-paginated documents |
US20060010371A1 (en) * | 2004-04-30 | 2006-01-12 | Microsoft Corporation | Packages that contain pre-paginated documents |
US7366982B2 (en) | 2004-04-30 | 2008-04-29 | Microsoft Corporation | Packages that contain pre-paginated documents |
US20050273704A1 (en) * | 2004-04-30 | 2005-12-08 | Microsoft Corporation | Method and apparatus for document processing |
US7487448B2 (en) | 2004-04-30 | 2009-02-03 | Microsoft Corporation | Document mark up methods and systems |
US20060031758A1 (en) * | 2004-04-30 | 2006-02-09 | Microsoft Corporation | Packages that contain pre-paginated documents |
US7836094B2 (en) | 2004-04-30 | 2010-11-16 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US7359902B2 (en) | 2004-04-30 | 2008-04-15 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US20050251740A1 (en) * | 2004-04-30 | 2005-11-10 | Microsoft Corporation | Methods and systems for building packages that contain pre-paginated documents |
US8661332B2 (en) | 2004-04-30 | 2014-02-25 | Microsoft Corporation | Method and apparatus for document processing |
US7512878B2 (en) | 2004-04-30 | 2009-03-31 | Microsoft Corporation | Modular document format |
US8122350B2 (en) * | 2004-04-30 | 2012-02-21 | Microsoft Corporation | Packages that contain pre-paginated documents |
US7752235B2 (en) | 2004-04-30 | 2010-07-06 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US7620650B2 (en) | 2004-04-30 | 2009-11-17 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US20060143195A1 (en) * | 2004-04-30 | 2006-06-29 | Microsoft Corporation | Method and Apparatus for Maintaining Relationships Between Parts in a Package |
US7549118B2 (en) | 2004-04-30 | 2009-06-16 | Microsoft Corporation | Methods and systems for defining documents with selectable and/or sequenceable parts |
US20060149758A1 (en) * | 2004-04-30 | 2006-07-06 | Microsoft Corporation | Method and Apparatus for Maintaining Relationships Between Parts in a Package |
US20050243345A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Systems and methods for handling a file with complex elements |
US20090168105A1 (en) * | 2004-05-03 | 2009-07-02 | Microsoft Corporation | Spooling Strategies Using Structured Job Information |
US7580948B2 (en) | 2004-05-03 | 2009-08-25 | Microsoft Corporation | Spooling strategies using structured job information |
US7440132B2 (en) | 2004-05-03 | 2008-10-21 | Microsoft Corporation | Systems and methods for handling a file with complex elements |
US20090185222A1 (en) * | 2004-05-03 | 2009-07-23 | Microsoft Corporation | Planar Mapping of Graphical Elements |
US20050246710A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Sharing of downloaded resources |
US7526504B2 (en) | 2004-05-03 | 2009-04-28 | Microsoft Corporation | Spooling strategies using structured job information |
US7634775B2 (en) | 2004-05-03 | 2009-12-15 | Microsoft Corporation | Sharing of downloaded resources |
US8243317B2 (en) | 2004-05-03 | 2012-08-14 | Microsoft Corporation | Hierarchical arrangement for spooling job data |
US20050243355A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Systems and methods for support of various processing capabilities |
US8024648B2 (en) | 2004-05-03 | 2011-09-20 | Microsoft Corporation | Planar mapping of graphical elements |
US20050243346A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Planar mapping of graphical elements |
US7755786B2 (en) | 2004-05-03 | 2010-07-13 | Microsoft Corporation | Systems and methods for support of various processing capabilities |
US20050243368A1 (en) * | 2004-05-03 | 2005-11-03 | Microsoft Corporation | Hierarchical spooling data structure |
US7607141B2 (en) | 2004-05-03 | 2009-10-20 | Microsoft Corporation | Systems and methods for support of various processing capabilities |
US8639723B2 (en) | 2004-05-03 | 2014-01-28 | Microsoft Corporation | Spooling strategies using structured job information |
US7519899B2 (en) | 2004-05-03 | 2009-04-14 | Microsoft Corporation | Planar mapping of graphical elements |
US8363232B2 (en) | 2004-05-03 | 2013-01-29 | Microsoft Corporation | Strategies for simultaneous peripheral operations on-line using hierarchically structured job information |
US20050249536A1 (en) * | 2004-05-03 | 2005-11-10 | Microsoft Corporation | Spooling strategies using structured job information |
US20050262432A1 (en) * | 2004-05-22 | 2005-11-24 | Bea Systems, Inc. | Systems and methods for providing simultaneous access to documents |
US9026908B2 (en) * | 2004-05-22 | 2015-05-05 | Oracle International Corporation | Systems and methods for providing simultaneous access to documents |
US20050289512A1 (en) * | 2004-06-28 | 2005-12-29 | Konica Minolta Business Technologies, Inc. | System and server for managing shared files |
US7584199B2 (en) * | 2004-06-28 | 2009-09-01 | Konica Minolta Business Technologies, Inc. | System and server for managing shared files |
US20060015658A1 (en) * | 2004-07-14 | 2006-01-19 | Matsushita Electric Industrial Co., Ltd | Multimedia processing system |
EP1640874A1 (en) * | 2004-09-23 | 2006-03-29 | Unisys Corporation | Distributed publishing system integrating internal and external editorial means |
US20060064362A1 (en) * | 2004-09-23 | 2006-03-23 | Andrea Politi | Distributed publishing system integrating internal and external editorial means |
US20060069983A1 (en) * | 2004-09-30 | 2006-03-30 | Microsoft Corporation | Method and apparatus for utilizing an extensible markup language schema to define document parts for use in an electronic document |
US20060075337A1 (en) * | 2004-09-30 | 2006-04-06 | Microsoft Corporation | Method, system, and computer-readable medium for creating, inserting, and reusing document parts in an electronic document |
US7617450B2 (en) | 2004-09-30 | 2009-11-10 | Microsoft Corporation | Method, system, and computer-readable medium for creating, inserting, and reusing document parts in an electronic document |
US7673235B2 (en) | 2004-09-30 | 2010-03-02 | Microsoft Corporation | Method and apparatus for utilizing an object model to manage document parts for use in an electronic document |
US10380099B2 (en) | 2004-11-08 | 2019-08-13 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US11334555B2 (en) | 2004-11-08 | 2022-05-17 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US10769131B2 (en) | 2004-11-08 | 2020-09-08 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US11269852B2 (en) | 2004-11-08 | 2022-03-08 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US20110106880A1 (en) * | 2004-11-08 | 2011-05-05 | Strong Jack B | Method and apparatus for a file sharing and synchronization system |
US11789930B2 (en) | 2004-11-08 | 2023-10-17 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US8370298B2 (en) | 2004-11-08 | 2013-02-05 | SugarSync, Inc. | Method and apparatus for a file sharing and synchronization system |
US10515070B2 (en) | 2004-11-08 | 2019-12-24 | Dropbox, Inc. | Method and apparatus for a file sharing synchronization system |
US10956404B2 (en) | 2004-11-08 | 2021-03-23 | Dropbox, Inc. | Method and apparatus for a file sharing synchronization system |
US10423604B2 (en) | 2004-11-08 | 2019-09-24 | Dropbox, Inc. | Method and apparatus for a file sharing synchronization system |
US10158708B2 (en) | 2004-11-08 | 2018-12-18 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US10320904B2 (en) | 2004-11-08 | 2019-06-11 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US11341114B2 (en) | 2004-11-08 | 2022-05-24 | Dropbox, Inc. | Method and apparatus for a file sharing and synchronization system |
US8132230B2 (en) * | 2004-11-09 | 2012-03-06 | Konica Minolta Business Technologies, Inc. | Image processor |
US20060101279A1 (en) * | 2004-11-09 | 2006-05-11 | Konica Minolta Business Technologies, Inc. | Image processor |
US20060168294A1 (en) * | 2004-11-13 | 2006-07-27 | De Vries Jeff | Hybrid local/remote streaming |
US8359591B2 (en) | 2004-11-13 | 2013-01-22 | Streamtheory, Inc. | Streaming from a media device |
US8949820B2 (en) | 2004-11-13 | 2015-02-03 | Numecent Holdings, Inc. | Streaming from a media device |
US11030273B2 (en) | 2004-11-19 | 2021-06-08 | Google Llc | Converting spreadsheet applications to web-based applications using a data file that includes interactivity attributes of cells for the web-based applications |
US7584111B2 (en) | 2004-11-19 | 2009-09-01 | Microsoft Corporation | Time polynomial Arrow-Debreu market equilibrium |
US20060111951A1 (en) * | 2004-11-19 | 2006-05-25 | Microsoft Corporation | Time polynomial arrow-debreu market equilibrium |
US7668728B2 (en) | 2004-11-19 | 2010-02-23 | Microsoft Corporation | Time polynomial arrow-debreu market equilibrium |
US20060117249A1 (en) * | 2004-11-29 | 2006-06-01 | Hu Xiao W | Document editor and method for editing document |
US9430445B2 (en) | 2004-11-29 | 2016-08-30 | International Business Machines Corporation | Document editor and method for editing document |
US20060136816A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | File formats, methods, and computer program products for representing documents |
US20060190815A1 (en) * | 2004-12-20 | 2006-08-24 | Microsoft Corporation | Structuring data for word processing documents |
US7617444B2 (en) | 2004-12-20 | 2009-11-10 | Microsoft Corporation | File formats, methods, and computer program products for representing workbooks |
US7617451B2 (en) | 2004-12-20 | 2009-11-10 | Microsoft Corporation | Structuring data for word processing documents |
US7614000B2 (en) | 2004-12-20 | 2009-11-03 | Microsoft Corporation | File formats, methods, and computer program products for representing presentations |
TWI393051B (en) * | 2004-12-20 | 2013-04-11 | Microsoft Corp | Management and use of data in a computer-generated document |
EP1672543A2 (en) * | 2004-12-20 | 2006-06-21 | Microsoft Corporation | File formats, methods, and computer program products for representing presentations |
EP1672525A3 (en) * | 2004-12-20 | 2009-01-14 | Microsoft Corporation | Management and use of data in a computer-generated document |
US20060136433A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | File formats, methods, and computer program products for representing workbooks |
US7620889B2 (en) | 2004-12-20 | 2009-11-17 | Microsoft Corporation | Method and system for linking data ranges of a computer-generated document with associated extensible markup language elements |
US7617229B2 (en) * | 2004-12-20 | 2009-11-10 | Microsoft Corporation | Management and use of data in a computer-generated document |
AU2005225130B2 (en) * | 2004-12-20 | 2010-09-09 | Microsoft Corporation | Management and use of data in a computer-generated document |
US20060136812A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Method and system for linking data ranges of a computer-generated document with associated extensible markup language elements |
KR101159347B1 (en) | 2004-12-20 | 2012-06-25 | 마이크로소프트 코포레이션 | Management and use of data in a computer-generated document |
JP2006178945A (en) * | 2004-12-20 | 2006-07-06 | Microsoft Corp | File format for representing presentation, method and computer program product |
JP2006178949A (en) * | 2004-12-20 | 2006-07-06 | Microsoft Corp | Management and use of data in computer-generated document |
US20060136477A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Management and use of data in a computer-generated document |
US20060271574A1 (en) * | 2004-12-21 | 2006-11-30 | Microsoft Corporation | Exposing embedded data in a computer-generated document |
US7752632B2 (en) | 2004-12-21 | 2010-07-06 | Microsoft Corporation | Method and system for exposing nested data in a computer-generated document in a transparent manner |
US20060136553A1 (en) * | 2004-12-21 | 2006-06-22 | Microsoft Corporation | Method and system for exposing nested data in a computer-generated document in a transparent manner |
US7770180B2 (en) | 2004-12-21 | 2010-08-03 | Microsoft Corporation | Exposing embedded data in a computer-generated document |
US20080086692A1 (en) * | 2005-01-11 | 2008-04-10 | Viktors Berstis | Systems, Methods, and Media for Aggregating Electronic Document Usage Information |
US20080275871A1 (en) * | 2005-01-11 | 2008-11-06 | International Business Machines Corporation | Systems and media for utilizing electronic document usage information with search engines |
US8005811B2 (en) | 2005-01-11 | 2011-08-23 | Google Inc. | Systems and media for utilizing electronic document usage information with search engines |
US8073852B2 (en) | 2005-01-11 | 2011-12-06 | Google Inc. | Systems and media for awarding credits based on provided usage information |
US8190618B2 (en) * | 2005-01-11 | 2012-05-29 | Google Inc. | Systems, methods, and media for aggregating electronic document usage information |
US20080222000A1 (en) * | 2005-01-11 | 2008-09-11 | Viktors Berstis | Systems and Media for Awarding Credits Based on Provided Usage Information |
US8463766B1 (en) | 2005-01-11 | 2013-06-11 | Google Inc. | Systems and media for awarding credits based on provided usage information |
US20060168528A1 (en) * | 2005-01-27 | 2006-07-27 | Microsoft Corporation | Method for arranging user interface glyphs on displays |
US20060230175A1 (en) * | 2005-03-23 | 2006-10-12 | De Vries Jeffrey | System and method for tracking changes to files in streaming applications |
US8527706B2 (en) | 2005-03-23 | 2013-09-03 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US10587473B2 (en) | 2005-03-23 | 2020-03-10 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US9716609B2 (en) | 2005-03-23 | 2017-07-25 | Numecent Holdings, Inc. | System and method for tracking changes to files in streaming applications |
US9300752B2 (en) | 2005-03-23 | 2016-03-29 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US9781007B2 (en) | 2005-03-23 | 2017-10-03 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
WO2006102621A3 (en) * | 2005-03-23 | 2009-04-23 | Stream Theory Inc | System and method for tracking changes to files in streaming applications |
US8898391B2 (en) | 2005-03-23 | 2014-11-25 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US11121928B2 (en) | 2005-03-23 | 2021-09-14 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
WO2006102621A2 (en) * | 2005-03-23 | 2006-09-28 | Stream Theory, Inc. | System and method for tracking changes to files in streaming applications |
US7437668B2 (en) * | 2005-03-24 | 2008-10-14 | Xerox Corporation | System and method for autonomous correction of defective documents |
US20060218442A1 (en) * | 2005-03-24 | 2006-09-28 | Xerox Corporation | System and method for autonomous correction of defective documents |
US20070016650A1 (en) * | 2005-04-01 | 2007-01-18 | Gilbert Gary J | System and methods for collaborative development of content over an electronic network |
US11436095B2 (en) * | 2005-04-21 | 2022-09-06 | Justservice.Net Llc | Data backup, storage, transfer and retrieval system, method and computer program product |
US11425116B2 (en) | 2005-04-21 | 2022-08-23 | Justservice.Net Llc | Data backup and transfer system, method and computer program product |
US20060265639A1 (en) * | 2005-05-18 | 2006-11-23 | Microsoft Corporation | Memory optimizing fo re-ordering user edits |
US8010894B2 (en) * | 2005-05-18 | 2011-08-30 | Microsoft Corporation | Memory optimizing for re-ordering user edits |
US20060277452A1 (en) * | 2005-06-03 | 2006-12-07 | Microsoft Corporation | Structuring data for presentation documents |
US20070022128A1 (en) * | 2005-06-03 | 2007-01-25 | Microsoft Corporation | Structuring data for spreadsheet documents |
US9942271B2 (en) * | 2005-12-29 | 2018-04-10 | Nextlabs, Inc. | Information management system with two or more interactive enforcement points |
US20070157203A1 (en) * | 2005-12-29 | 2007-07-05 | Blue Jungle | Information Management System with Two or More Interactive Enforcement Points |
US8156566B2 (en) * | 2005-12-29 | 2012-04-10 | Nextlabs, Inc. | Associating code to a target through code inspection |
US20070156727A1 (en) * | 2005-12-29 | 2007-07-05 | Blue Jungle | Associating Code To a Target Through Code Inspection |
WO2007082171A2 (en) * | 2006-01-05 | 2007-07-19 | Eyespot Corporation | System and methods for online collaborative video creation |
US20090196570A1 (en) * | 2006-01-05 | 2009-08-06 | Eyesopt Corporation | System and methods for online collaborative video creation |
WO2007082171A3 (en) * | 2006-01-05 | 2008-04-17 | Eyespot Corp | System and methods for online collaborative video creation |
US8527864B2 (en) | 2006-01-29 | 2013-09-03 | Litera Technologies, LLC | Method of compound document comparison |
US7818660B2 (en) | 2006-01-29 | 2010-10-19 | Litera Technology Llc | Method of compound document comparison |
US20100318530A1 (en) * | 2006-01-29 | 2010-12-16 | Litera Technology Llc. | Method of Compound Document Comparison |
US20080301193A1 (en) * | 2006-01-29 | 2008-12-04 | Deepak Massand | Method of compound document comparison |
WO2007123601A1 (en) * | 2006-03-28 | 2007-11-01 | Microsoft Corporation | Document processor and re-aggregator |
US20110029850A1 (en) * | 2006-03-28 | 2011-02-03 | Microsoft Corporation | Document processor and re-aggregator |
JP2009531774A (en) * | 2006-03-28 | 2009-09-03 | マイクロソフト コーポレーション | Document processing and reintegration |
US8392825B2 (en) | 2006-03-28 | 2013-03-05 | Microsoft Corporation | Document processor and re-aggregator |
US20070236742A1 (en) * | 2006-03-28 | 2007-10-11 | Microsoft Corporation | Document processor and re-aggregator |
US7793216B2 (en) | 2006-03-28 | 2010-09-07 | Microsoft Corporation | Document processor and re-aggregator |
US20180285323A1 (en) * | 2006-03-31 | 2018-10-04 | Google Llc | Collaborative workflow through messaging conversations |
US11941352B2 (en) * | 2006-03-31 | 2024-03-26 | Google Llc | Collaborative online spreadsheet application |
US10558734B2 (en) * | 2006-03-31 | 2020-02-11 | Google Llc | Collaborative workflow through messaging conversations |
US9852120B2 (en) * | 2006-03-31 | 2017-12-26 | Google Inc. | Collaborative access spreadsheet with a real-time visual indication identifying last edit user |
US20210027014A1 (en) * | 2006-03-31 | 2021-01-28 | Google Llc | Collaborative online spreadsheet application |
US10740551B2 (en) | 2006-03-31 | 2020-08-11 | Google Llc | Collaborative access spreadsheet with a real-time visual indication identifying last edit user |
US20130254644A1 (en) * | 2006-03-31 | 2013-09-26 | Google Inc. | Collaborative online spreadsheet application |
US9280533B2 (en) | 2006-03-31 | 2016-03-08 | Google Inc. | Collaborative online spreadsheet application |
US20070288835A1 (en) * | 2006-06-07 | 2007-12-13 | Fuji Xerox Co., Ltd. | Apparatus, computer readable medium, data signal, and method for document management |
US8447731B1 (en) | 2006-07-26 | 2013-05-21 | Nextpoint, Inc | Method and system for information management |
US20150199319A1 (en) * | 2006-08-16 | 2015-07-16 | Google Inc. | Real-Time Document Sharing and Editing |
US9430454B2 (en) * | 2006-08-16 | 2016-08-30 | Google Inc. | Real-time document sharing and editing |
US10417319B1 (en) | 2006-08-16 | 2019-09-17 | Google Llc | Real-time document sharing and editing |
US8453052B1 (en) * | 2006-08-16 | 2013-05-28 | Google Inc. | Real-time document sharing and editing |
US9875221B1 (en) | 2006-08-16 | 2018-01-23 | Google Llc | Real-time document sharing and editing |
US7562144B2 (en) * | 2006-09-06 | 2009-07-14 | International Business Machines Corporation | Dynamic determination of master servers for branches in distributed directories |
US20080059629A1 (en) * | 2006-09-06 | 2008-03-06 | Freeman David S | Dynamic determination of master servers for branches in distributed directories |
US20080072225A1 (en) * | 2006-09-19 | 2008-03-20 | Tetsuro Nagatsuka | Information processing apparatus, information processing method, program, and recording medium |
US20080091693A1 (en) * | 2006-10-16 | 2008-04-17 | Oracle International Corporation | Managing compound XML documents in a repository |
US10650080B2 (en) * | 2006-10-16 | 2020-05-12 | Oracle International Corporation | Managing compound XML documents in a repository |
US9183321B2 (en) * | 2006-10-16 | 2015-11-10 | Oracle International Corporation | Managing compound XML documents in a repository |
US11416577B2 (en) | 2006-10-16 | 2022-08-16 | Oracle International Corporation | Managing compound XML documents in a repository |
US20080103860A1 (en) * | 2006-10-17 | 2008-05-01 | Microsoft Corporation | Executing Pages of a Guided Process Application in Parallel |
US7533121B2 (en) | 2006-10-17 | 2009-05-12 | Microsoft Corporation | Executing pages of a guided process application in parallel |
US8752128B2 (en) | 2006-10-23 | 2014-06-10 | Numecent Holdings, Inc. | Rule-based application access management |
US8261345B2 (en) | 2006-10-23 | 2012-09-04 | Endeavors Technologies, Inc. | Rule-based application access management |
US9054963B2 (en) | 2006-10-23 | 2015-06-09 | Numecent Holdings, Inc. | Rule-based application access management |
US12081548B2 (en) | 2006-10-23 | 2024-09-03 | Numecent Holdings, Inc. | Rule-based application access management |
US20080109876A1 (en) * | 2006-10-23 | 2008-05-08 | Endeavors Technologies, Inc. | Rule-based application access management |
US9825957B2 (en) | 2006-10-23 | 2017-11-21 | Numecent Holdings, Inc. | Rule-based application access management |
US10057268B2 (en) | 2006-10-23 | 2018-08-21 | Numecent Holdings, Inc. | Rule-based application access management |
US9380063B2 (en) | 2006-10-23 | 2016-06-28 | Numecent Holdings, Inc. | Rule-based application access management |
US8782778B2 (en) | 2006-10-23 | 2014-07-15 | Numecent Holdings, Inc. | Rule-based application access management |
US11451548B2 (en) | 2006-10-23 | 2022-09-20 | Numecent Holdings, Inc | Rule-based application access management |
US10356100B2 (en) | 2006-10-23 | 2019-07-16 | Numecent Holdings, Inc. | Rule-based application access management |
US9699194B2 (en) | 2006-10-23 | 2017-07-04 | Numecent Holdings, Inc. | Rule-based application access management |
US9054962B2 (en) | 2006-10-23 | 2015-06-09 | Numecent Holdings, Inc. | Rule-based application access management |
US9571501B2 (en) | 2006-10-23 | 2017-02-14 | Numecent Holdings, Inc. | Rule-based application access management |
US20080256188A1 (en) * | 2007-01-29 | 2008-10-16 | Deepak Massand | Method of removing metadata from email attachments |
US8060575B2 (en) | 2007-01-29 | 2011-11-15 | Litera Technology Llc | Methods and systems for managing metadata in email attachments in a network environment |
US8977697B2 (en) | 2007-01-29 | 2015-03-10 | Litera Technology Llc | Methods and systems for removing metadata from an electronic document attached to a message sent from a mobile electronic device |
US7895276B2 (en) | 2007-01-29 | 2011-02-22 | Litera Technology Llc | Method of managing metadata in attachments to e-mails in a network environment |
US9807093B2 (en) | 2007-01-29 | 2017-10-31 | Litera Corporation | Methods and systems for remotely removing metadata from electronic documents |
US8458231B1 (en) | 2007-01-31 | 2013-06-04 | Google Inc. | Word processor data organization |
US8095575B1 (en) * | 2007-01-31 | 2012-01-10 | Google Inc. | Word processor data organization |
US9378190B2 (en) | 2007-01-31 | 2016-06-28 | Google Inc. | Word processor data organization |
US20080250149A1 (en) * | 2007-04-09 | 2008-10-09 | Morris Robert P | Methods And System For Providing Concurrent Access To A Resource In A Communication Session |
US7769810B1 (en) * | 2007-04-26 | 2010-08-03 | Adobe Systems Incorporated | Method and system for collaborative editing |
EP2151767A1 (en) * | 2007-05-29 | 2010-02-10 | Sursen Corp. | Method and apparatus for realizing sharing edit of document |
EP2151767A4 (en) * | 2007-05-29 | 2012-05-23 | Sursen Corp | Method and apparatus for realizing sharing edit of document |
US20090006946A1 (en) * | 2007-06-26 | 2009-01-01 | Mark Hanson | Multi-user document editing system and method |
US8239760B2 (en) * | 2007-06-26 | 2012-08-07 | Sap Ag | Multi-user document editing system and method |
US20090059267A1 (en) * | 2007-08-29 | 2009-03-05 | Canon Kabushiki Kaisha | Image forming system, management apparatus, and control methods thereof |
US20110219036A1 (en) * | 2007-09-11 | 2011-09-08 | Yahoo! Inc. | Social network site including contact-based recommendation functionality |
US11120400B2 (en) * | 2007-09-11 | 2021-09-14 | Slack Technologies, Inc. | Social network site including modification control and management |
US8280925B2 (en) | 2007-09-28 | 2012-10-02 | Xcerion Aktiebolag | Resolution of multi-instance application execution |
US8108426B2 (en) | 2007-09-28 | 2012-01-31 | Xcerion Aktiebolag | Application and file system hosting framework |
WO2009043029A2 (en) * | 2007-09-28 | 2009-04-02 | Xcerion Aktiebolag | Network operating system |
US11838358B2 (en) | 2007-09-28 | 2023-12-05 | Xcerion Aktiebolag | Network operating system |
US8959123B2 (en) | 2007-09-28 | 2015-02-17 | Xcerion Aktiebolag | User interface framework |
US8954526B2 (en) | 2007-09-28 | 2015-02-10 | Xcerion Aktiebolag | Network operating system |
US20090254610A1 (en) * | 2007-09-28 | 2009-10-08 | Xcerion Ab | Network operating system |
US9071623B2 (en) | 2007-09-28 | 2015-06-30 | Xcerion Aktiebolag | Real-time data sharing |
US20090193440A1 (en) * | 2007-09-28 | 2009-07-30 | Xcerion Aktiebolag | Network operating system |
US20090192969A1 (en) * | 2007-09-28 | 2009-07-30 | Xcerion Aktiebolag | Network operating system |
US20090157627A1 (en) * | 2007-09-28 | 2009-06-18 | Xcerion Ab | Network operating system |
US9621649B2 (en) | 2007-09-28 | 2017-04-11 | Xcerion Aktiebolag | Network operating system |
US8239511B2 (en) | 2007-09-28 | 2012-08-07 | Xcerion Aktiebolag | Network operating system |
US8234315B2 (en) | 2007-09-28 | 2012-07-31 | Xcerion Aktiebolag | Data source abstraction system and method |
US20090157628A1 (en) * | 2007-09-28 | 2009-06-18 | Xcerion Ab | Network operating system |
US20090193410A1 (en) * | 2007-09-28 | 2009-07-30 | Xcerion Aktiebolag | Network operating system |
US20090158142A1 (en) * | 2007-09-28 | 2009-06-18 | Xcerion Ab | Network operating system |
US8843942B2 (en) | 2007-09-28 | 2014-09-23 | Xcerion Aktiebolag | Interpreting semantic application code |
US20090164592A1 (en) * | 2007-09-28 | 2009-06-25 | Xcerion Ab | Network operating system |
US8156146B2 (en) | 2007-09-28 | 2012-04-10 | Xcerion Aktiebolag | Network file system |
US20090192992A1 (en) * | 2007-09-28 | 2009-07-30 | Xcerion Aktiebolag | Network operating system |
WO2009043029A3 (en) * | 2007-09-28 | 2009-07-23 | Xcerion Ab | Network operating system |
US20090177734A1 (en) * | 2007-09-28 | 2009-07-09 | Xcerion Ab | Network operating system |
US8738567B2 (en) | 2007-09-28 | 2014-05-27 | Xcerion Aktiebolag | Network file system with enhanced collaboration features |
US20090172568A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US20090172087A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US8996459B2 (en) | 2007-09-28 | 2015-03-31 | Xcerion Aktiebolag | Offline and/or client-side execution of a network application |
US20090172702A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US8615531B2 (en) | 2007-09-28 | 2013-12-24 | Xcerion Aktiebolag | Programmatic data manipulation |
US8620863B2 (en) | 2007-09-28 | 2013-12-31 | Xcerion Aktiebolag | Message passing in a collaborative environment |
US20090171974A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US8112460B2 (en) | 2007-09-28 | 2012-02-07 | Xcerion Aktiebolag | Framework for applying rules |
US9344497B2 (en) | 2007-09-28 | 2016-05-17 | Xcerion Aktiebolag | State management of applications and data |
US20090172569A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US20090172078A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US20090172715A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US8688627B2 (en) | 2007-09-28 | 2014-04-01 | Xcerion Aktiebolag | Transaction propagation in a networking environment |
US20090171993A1 (en) * | 2007-09-28 | 2009-07-02 | Xcerion Ab | Network operating system |
US8099671B2 (en) | 2007-09-28 | 2012-01-17 | Xcerion Aktiebolag | Opening an application view |
US9143451B2 (en) | 2007-10-01 | 2015-09-22 | F5 Networks, Inc. | Application layer network traffic prioritization |
US8024361B2 (en) * | 2007-10-23 | 2011-09-20 | International Business Machines Corporation | Method and system for allowing multiple users to access and unlock shared electronic documents in a computer system |
US20090106247A1 (en) * | 2007-10-23 | 2009-04-23 | Daughtry Chenita D | Method and system for allowing multiple users to access and unlock shared electronic documents in a computer system |
US20090112937A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Spreadsheet collaboration between rich and browser clients |
US7756824B2 (en) | 2007-10-26 | 2010-07-13 | Microsoft Corporation | Spreadsheet collaboration between rich and browser clients |
US11119884B2 (en) | 2007-11-07 | 2021-09-14 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US10445210B2 (en) | 2007-11-07 | 2019-10-15 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US8024523B2 (en) | 2007-11-07 | 2011-09-20 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US20090119458A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US12271285B2 (en) | 2007-11-07 | 2025-04-08 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US8892738B2 (en) | 2007-11-07 | 2014-11-18 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US9436578B2 (en) | 2007-11-07 | 2016-09-06 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US11740992B2 (en) | 2007-11-07 | 2023-08-29 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US8661197B2 (en) | 2007-11-07 | 2014-02-25 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US20110184906A1 (en) * | 2007-11-09 | 2011-07-28 | Microsoft Corporation | Client Side Locking |
US8352418B2 (en) | 2007-11-09 | 2013-01-08 | Microsoft Corporation | Client side locking |
US7941399B2 (en) * | 2007-11-09 | 2011-05-10 | Microsoft Corporation | Collaborative authoring |
US20090125518A1 (en) * | 2007-11-09 | 2009-05-14 | Microsoft Corporation | Collaborative Authoring |
US9547635B2 (en) | 2007-11-09 | 2017-01-17 | Microsoft Technology Licensing, Llc | Collaborative authoring |
US8990150B2 (en) | 2007-11-09 | 2015-03-24 | Microsoft Technology Licensing, Llc | Collaborative authoring |
US10394941B2 (en) | 2007-11-09 | 2019-08-27 | Microsoft Technology Licensing, Llc | Collaborative authoring |
US20090150394A1 (en) * | 2007-12-06 | 2009-06-11 | Microsoft Corporation | Document Merge |
US8028229B2 (en) | 2007-12-06 | 2011-09-27 | Microsoft Corporation | Document merge |
US20140373108A1 (en) | 2007-12-14 | 2014-12-18 | Microsoft Corporation | Collaborative authoring modes |
US10057226B2 (en) | 2007-12-14 | 2018-08-21 | Microsoft Technology Licensing, Llc | Collaborative authoring modes |
US20090157811A1 (en) * | 2007-12-14 | 2009-06-18 | Microsoft Corporation | Collaborative Authoring Modes |
US8825758B2 (en) * | 2007-12-14 | 2014-09-02 | Microsoft Corporation | Collaborative authoring modes |
US20090172558A1 (en) * | 2007-12-27 | 2009-07-02 | Fuji Xerox Co., Ltd. | System and method for personalized change tracking for collaborative authoring environments |
US20150019947A1 (en) * | 2008-01-15 | 2015-01-15 | Microsoft Corporation | Multi-Client Collaboration to Access and Update Structured Data Elements |
US9880992B2 (en) * | 2008-01-15 | 2018-01-30 | Microsoft Technology Licensing, Llc | Multi-client collaboration to access and update structured data elements |
US8301588B2 (en) | 2008-03-07 | 2012-10-30 | Microsoft Corporation | Data storage for file updates |
US20090228473A1 (en) * | 2008-03-07 | 2009-09-10 | Microsoft Corporation | Data storage for file updates |
US20090234894A1 (en) * | 2008-03-12 | 2009-09-17 | International Business Machines Corporation | Method and system for collaborative learning |
US8019718B2 (en) * | 2008-03-12 | 2011-09-13 | International Business Machines Corporation | Method and system for collaborative learning |
AU2009223346B2 (en) * | 2008-03-14 | 2014-02-20 | Microsoft Technology Licensing, Llc | Web-based multiuser collaboration |
US9436927B2 (en) * | 2008-03-14 | 2016-09-06 | Microsoft Technology Licensing, Llc | Web-based multiuser collaboration |
US20090235181A1 (en) * | 2008-03-14 | 2009-09-17 | Microsoft Corporation | Web-based multiuser collaboration |
RU2507567C2 (en) * | 2008-03-14 | 2014-02-20 | Майкрософт Корпорейшн | Multiuser network collaboration |
US10936159B2 (en) | 2008-03-19 | 2021-03-02 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US20220391050A1 (en) * | 2008-03-19 | 2022-12-08 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US11422676B2 (en) | 2008-03-19 | 2022-08-23 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US9841875B2 (en) | 2008-03-19 | 2017-12-12 | Dropbox, Inc. | Method for displaying files from a plurality of devices in a multi-view interface and for enabling operations to be performed on such files through such interface |
US20230251763A1 (en) * | 2008-03-19 | 2023-08-10 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US10133449B2 (en) | 2008-03-19 | 2018-11-20 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US9032295B1 (en) | 2008-03-19 | 2015-05-12 | Dropbox, Inc. | Method for displaying files from a plurality of devices in a multi-view interface and for enabling operations to be performed on such files through such interface |
US11630554B2 (en) * | 2008-03-19 | 2023-04-18 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US10209865B2 (en) | 2008-03-19 | 2019-02-19 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US10216365B2 (en) | 2008-03-19 | 2019-02-26 | Dropbox, Inc. | Display of a plurality of files from multiple devices |
US8019900B1 (en) | 2008-03-25 | 2011-09-13 | SugarSync, Inc. | Opportunistic peer-to-peer synchronization in a synchronization system |
US11461196B2 (en) | 2008-03-27 | 2022-10-04 | Dropbox, Inc. | System and method for multi-tier synchronization |
US11921595B2 (en) | 2008-03-27 | 2024-03-05 | Dropbox, Inc. | System and method for multi-tier synchronization |
US9141483B1 (en) | 2008-03-27 | 2015-09-22 | Dropbox, Inc. | System and method for multi-tier synchronization |
US10177960B2 (en) | 2008-03-27 | 2019-01-08 | Dropbox, Inc. | System and method for multi-tier synchronization |
US10931505B2 (en) | 2008-03-27 | 2021-02-23 | Dropbox, Inc. | System and method for multi-tier synchronization |
US9760862B2 (en) | 2008-04-28 | 2017-09-12 | Microsoft Technology Licensing, Llc | Conflict resolution |
US20090271696A1 (en) * | 2008-04-28 | 2009-10-29 | Microsoft Corporation | Conflict Resolution |
US8352870B2 (en) | 2008-04-28 | 2013-01-08 | Microsoft Corporation | Conflict resolution |
US20090282462A1 (en) * | 2008-05-08 | 2009-11-12 | Microsoft Corporation | Controlling Access to Documents Using File Locks |
EP2300957A2 (en) * | 2008-05-08 | 2011-03-30 | Microsoft Corporation | Controlling access to documents using file locks |
JP2011520200A (en) * | 2008-05-08 | 2011-07-14 | マイクロソフト コーポレーション | Control access to documents using file locking |
US20090282041A1 (en) * | 2008-05-08 | 2009-11-12 | Microsoft Corporation | Caching Infrastructure |
EP2300957A4 (en) * | 2008-05-08 | 2012-04-25 | Microsoft Corp | Controlling access to documents using file locks |
US8825594B2 (en) | 2008-05-08 | 2014-09-02 | Microsoft Corporation | Caching infrastructure |
WO2009154842A2 (en) | 2008-05-08 | 2009-12-23 | Microsoft Corporation | Controlling access to documents using file locks |
US8429753B2 (en) | 2008-05-08 | 2013-04-23 | Microsoft Corporation | Controlling access to documents using file locks |
US8543929B1 (en) * | 2008-05-14 | 2013-09-24 | Adobe Systems Incorporated | User ratings allowing access to features for modifying content |
US20090327294A1 (en) * | 2008-06-25 | 2009-12-31 | Microsoft Corporation | Structured Coauthoring |
US8417666B2 (en) | 2008-06-25 | 2013-04-09 | Microsoft Corporation | Structured coauthoring |
US9614813B2 (en) | 2008-07-21 | 2017-04-04 | Workshare Technology, Inc. | Methods and systems to implement fingerprint lookups across remote agents |
US20100017850A1 (en) * | 2008-07-21 | 2010-01-21 | Workshare Technology, Inc. | Methods and systems to fingerprint textual information using word runs |
US8286171B2 (en) | 2008-07-21 | 2012-10-09 | Workshare Technology, Inc. | Methods and systems to fingerprint textual information using word runs |
US9473512B2 (en) | 2008-07-21 | 2016-10-18 | Workshare Technology, Inc. | Methods and systems to implement fingerprint lookups across remote agents |
US20100064372A1 (en) * | 2008-07-21 | 2010-03-11 | Workshare Technology, Inc. | Methods and systems to implement fingerprint lookups across remote agents |
US20100023753A1 (en) * | 2008-07-28 | 2010-01-28 | Robert Evans Wetmore | System and method of generating subtitling for media |
US10574932B2 (en) * | 2008-07-28 | 2020-02-25 | Fox Digital Enterprises, Inc. | System and method of generating subtitling for media |
US8554800B2 (en) * | 2008-07-30 | 2013-10-08 | Portool Ltd. | System, methods and applications for structured document indexing |
US20100030752A1 (en) * | 2008-07-30 | 2010-02-04 | Lev Goldentouch | System, methods and applications for structured document indexing |
US10423301B2 (en) * | 2008-08-11 | 2019-09-24 | Microsoft Technology Licensing, Llc | Sections of a presentation having user-definable properties |
US20150253941A1 (en) * | 2008-08-11 | 2015-09-10 | Microsoft Technology Licensing, Llc | Sections of a presentation having user-definable properties |
US8555080B2 (en) | 2008-09-11 | 2013-10-08 | Workshare Technology, Inc. | Methods and systems for protect agents using distributed lightweight fingerprints |
US20100064347A1 (en) * | 2008-09-11 | 2010-03-11 | Workshare Technology, Inc. | Methods and systems for protect agents using distributed lightweight fingerprints |
EP2163983A1 (en) | 2008-09-15 | 2010-03-17 | Deutsche Post AG | Method for producing a printed file from data objects in a memory |
US9292172B2 (en) * | 2008-09-30 | 2016-03-22 | Facebook, Inc. | Image editing method, image editing device, and computer readable medium for storing image editing program |
US10410388B2 (en) | 2008-09-30 | 2019-09-10 | Facebook, Inc. | Image editing method, image editing device, and computer readable medium for storing image editing program |
US20130311897A1 (en) * | 2008-09-30 | 2013-11-21 | Facebook, Inc. | Image editing method, image editing device, and computer readable medium for storing image editing program |
US11360790B2 (en) | 2008-10-10 | 2022-06-14 | Adobe Inc. | Collaborative and non-collaborative workspace application container with application persistence |
US10474477B2 (en) * | 2008-10-10 | 2019-11-12 | Adobe Inc. | Collaborative and non-collaborative workspace application container with application persistence |
US20130212485A1 (en) * | 2008-10-10 | 2013-08-15 | Adobe Systems Incorporated | Collaborative and non-collaborative workspace application container with application persistence |
US8484558B2 (en) * | 2008-10-20 | 2013-07-09 | Canon Kabushiki Kaisha | Document generation method and document generation apparatus |
US20100100812A1 (en) * | 2008-10-20 | 2010-04-22 | Canon Kabushiki Kaisha | Document generation method and document generation apparatus |
US20100299727A1 (en) * | 2008-11-18 | 2010-11-25 | Workshare Technology, Inc. | Methods and systems for exact data match filtering |
US10963578B2 (en) | 2008-11-18 | 2021-03-30 | Workshare Technology, Inc. | Methods and systems for preventing transmission of sensitive data from a remote computer device |
US9092636B2 (en) | 2008-11-18 | 2015-07-28 | Workshare Technology, Inc. | Methods and systems for exact data match filtering |
US8406456B2 (en) | 2008-11-20 | 2013-03-26 | Workshare Technology, Inc. | Methods and systems for image fingerprinting |
US8670600B2 (en) | 2008-11-20 | 2014-03-11 | Workshare Technology, Inc. | Methods and systems for image fingerprinting |
US20100124354A1 (en) * | 2008-11-20 | 2010-05-20 | Workshare Technology, Inc. | Methods and systems for image fingerprinting |
US8620020B2 (en) | 2008-11-20 | 2013-12-31 | Workshare Technology, Inc. | Methods and systems for preventing unauthorized disclosure of secure information using image fingerprinting |
US20100131836A1 (en) * | 2008-11-24 | 2010-05-27 | Microsoft Corporation | User-authored notes on shared documents |
US20100174678A1 (en) * | 2009-01-07 | 2010-07-08 | Deepak Massand | System and method for comparing digital data in spreadsheets or database tables |
US10685177B2 (en) | 2009-01-07 | 2020-06-16 | Litera Corporation | System and method for comparing digital data in spreadsheets or database tables |
US20150081573A1 (en) * | 2009-01-30 | 2015-03-19 | International Business Machines Corporation | System and method for avoiding duplication of effort in drafting documents |
US9727934B2 (en) * | 2009-01-30 | 2017-08-08 | International Business Machines Corporation | System and method for avoiding duplication of effort in drafting documents |
US8136031B2 (en) | 2009-03-17 | 2012-03-13 | Litera Technologies, LLC | Comparing the content of tables containing merged or split cells |
US8381092B2 (en) | 2009-03-17 | 2013-02-19 | Litera Technologies, LLC | Comparing the content between corresponding cells of two tables separate from form and structure |
US20100241943A1 (en) * | 2009-03-17 | 2010-09-23 | Litera Technology Llc. | System and method for the comparison of content within tables separate from form and structure |
US20110289120A1 (en) * | 2009-03-18 | 2011-11-24 | Leon Gorbaty | Specifications automation system and method |
US8849873B2 (en) * | 2009-03-18 | 2014-09-30 | Bentley Systems, Incorporated | Specifications automation system and method |
WO2010126763A2 (en) | 2009-04-29 | 2010-11-04 | Microsoft Corporation | Maintaining undo and redo capability across metadata merges |
AU2010241861B2 (en) * | 2009-04-29 | 2014-07-10 | Microsoft Technology Licensing, Llc | Maintaining undo and redo capability across metadata merges |
US8209603B2 (en) * | 2009-04-29 | 2012-06-26 | Microsoft Corporation | Maintaining undo and redo capability across metadata merges |
KR20120011332A (en) * | 2009-04-29 | 2012-02-07 | 마이크로소프트 코포레이션 | Maintain undo and redo capabilities across metadata merges |
EP2425357A4 (en) * | 2009-04-29 | 2018-01-10 | Microsoft Technology Licensing, LLC | Maintaining undo and redo capability across metadata merges |
CN102414679A (en) * | 2009-04-29 | 2012-04-11 | 微软公司 | Maintaining undo and redo capability across metadata merges |
KR101683322B1 (en) * | 2009-04-29 | 2016-12-06 | 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 | Maintaining undo and redo capability across metadata merges |
US20100281362A1 (en) * | 2009-04-29 | 2010-11-04 | Microsoft Corporation | Maintaining Undo and Redo Capability across Metadata Merges |
US8346768B2 (en) | 2009-04-30 | 2013-01-01 | Microsoft Corporation | Fast merge support for legacy documents |
US20100281074A1 (en) * | 2009-04-30 | 2010-11-04 | Microsoft Corporation | Fast Merge Support for Legacy Documents |
US20100281007A1 (en) * | 2009-05-01 | 2010-11-04 | Microsoft Corporation | Cross-Channel Coauthoring Consistency |
US9665413B2 (en) | 2009-05-01 | 2017-05-30 | Microsoft Technology Licensing, Llc | Shared job scheduling in electronic notebook |
US8161019B2 (en) | 2009-05-01 | 2012-04-17 | Microsoft Corporation | Cross-channel coauthoring consistency |
US10715401B2 (en) | 2009-05-04 | 2020-07-14 | Dropbox, Inc. | User interface for viewing items in a synchronization system |
US11483215B2 (en) | 2009-05-04 | 2022-10-25 | Dropbox, Inc. | User interface for viewing items in a synchronization system |
US11979296B2 (en) | 2009-05-04 | 2024-05-07 | Dropbox, Inc. | User interface for viewing items in a synchronization system |
US10009233B2 (en) | 2009-05-04 | 2018-06-26 | Dropbox, Inc. | User interface for viewing items in a synchronization system |
US8650498B1 (en) | 2009-05-04 | 2014-02-11 | SugarSync, Inc. | User interface for managing and viewing synchronization settings in a synchronization system |
US10938670B2 (en) | 2009-05-04 | 2021-03-02 | Dropbox, Inc. | User interface for viewing items in a synchronization system |
US20100306676A1 (en) * | 2009-05-27 | 2010-12-02 | Haripriya Srinivasaraghavan | Dynamic collaborative techniques |
US8812961B2 (en) * | 2009-05-27 | 2014-08-19 | Novell, Inc. | Dynamic collaborative techniques |
US8370628B2 (en) * | 2009-07-16 | 2013-02-05 | Oracle International Corporation | Document collaboration system with alternative views |
US20110016387A1 (en) * | 2009-07-16 | 2011-01-20 | Oracle International Corporation | Document collaboration system with alternative views |
US8473847B2 (en) | 2009-07-27 | 2013-06-25 | Workshare Technology, Inc. | Methods and systems for comparing presentation slide decks |
US20110022960A1 (en) * | 2009-07-27 | 2011-01-27 | Workshare Technology, Inc. | Methods and systems for comparing presentation slide decks |
US10721269B1 (en) | 2009-11-06 | 2020-07-21 | F5 Networks, Inc. | Methods and system for returning requests with javascript for clients before passing a request to a server |
US11108815B1 (en) | 2009-11-06 | 2021-08-31 | F5 Networks, Inc. | Methods and system for returning requests with javascript for clients before passing a request to a server |
US8806056B1 (en) | 2009-11-20 | 2014-08-12 | F5 Networks, Inc. | Method for optimizing remote file saves in a failsafe way |
US9146913B2 (en) | 2010-03-29 | 2015-09-29 | Bentley Systems, Incorporated | Specifications automation system and method |
US9420049B1 (en) | 2010-06-30 | 2016-08-16 | F5 Networks, Inc. | Client side human user indicator |
US9503375B1 (en) | 2010-06-30 | 2016-11-22 | F5 Networks, Inc. | Methods for managing traffic in a multi-service environment and devices thereof |
US20120016999A1 (en) * | 2010-07-14 | 2012-01-19 | Sap Ag | Context for Sharing Data Objects |
USRE47019E1 (en) | 2010-07-14 | 2018-08-28 | F5 Networks, Inc. | Methods for DNSSEC proxying and deployment amelioration and systems thereof |
US20120042354A1 (en) * | 2010-08-13 | 2012-02-16 | Morgan Stanley | Entitlement conflict enforcement |
US20120101980A1 (en) * | 2010-10-26 | 2012-04-26 | Microsoft Corporation | Synchronizing online document edits |
US9152631B2 (en) * | 2010-11-02 | 2015-10-06 | Canon Kabushiki Kaisha | Document management system, method for controlling the same, and storage medium |
US20120109915A1 (en) * | 2010-11-02 | 2012-05-03 | Canon Kabushiki Kaisha | Document management system, method for controlling the same, and storage medium |
US20120137217A1 (en) * | 2010-11-29 | 2012-05-31 | International Business Machines Corporation | System and method for adjusting inactivity timeout settings on a display device |
US10133335B2 (en) | 2010-11-29 | 2018-11-20 | International Business Machines Corporation | Adjusting inactivity timeout settings for a computing device |
US9069550B2 (en) * | 2010-11-29 | 2015-06-30 | International Business Machines Corporation | System and method for adjusting inactivity timeout settings on a display device |
US10620684B2 (en) | 2010-11-29 | 2020-04-14 | International Business Machines Corporation | Adjusting inactivity timeout settings for a computing device |
US10445572B2 (en) | 2010-11-29 | 2019-10-15 | Workshare Technology, Inc. | Methods and systems for monitoring documents exchanged over email applications |
US11042736B2 (en) | 2010-11-29 | 2021-06-22 | Workshare Technology, Inc. | Methods and systems for monitoring documents exchanged over computer networks |
US10025759B2 (en) | 2010-11-29 | 2018-07-17 | Workshare Technology, Inc. | Methods and systems for monitoring documents exchanged over email applications |
US11301874B2 (en) | 2011-01-29 | 2022-04-12 | Sdl Netherlands B.V. | Systems and methods for managing web content and facilitating data exchange |
US10990644B2 (en) | 2011-01-29 | 2021-04-27 | Sdl Netherlands B.V. | Systems and methods for contextual vocabularies and customer segmentation |
US10061749B2 (en) | 2011-01-29 | 2018-08-28 | Sdl Netherlands B.V. | Systems and methods for contextual vocabularies and customer segmentation |
US10657540B2 (en) | 2011-01-29 | 2020-05-19 | Sdl Netherlands B.V. | Systems, methods, and media for web content management |
US11044949B2 (en) | 2011-01-29 | 2021-06-29 | Sdl Netherlands B.V. | Systems and methods for dynamic delivery of web content |
US9547626B2 (en) | 2011-01-29 | 2017-01-17 | Sdl Plc | Systems, methods, and media for managing ambient adaptability of web applications and web services |
US10521492B2 (en) | 2011-01-29 | 2019-12-31 | Sdl Netherlands B.V. | Systems and methods that utilize contextual vocabularies and customer segmentation to deliver web content |
US11694215B2 (en) | 2011-01-29 | 2023-07-04 | Sdl Netherlands B.V. | Systems and methods for managing web content |
US10580015B2 (en) | 2011-02-25 | 2020-03-03 | Sdl Netherlands B.V. | Systems, methods, and media for executing and optimizing online marketing initiatives |
WO2012125338A1 (en) * | 2011-03-15 | 2012-09-20 | Google Inc. | Inline user addressing in chat and document editing sessions |
US9456012B2 (en) * | 2011-03-15 | 2016-09-27 | Google Inc. | Inline user addressing in chat and document editing sessions |
US8938669B1 (en) | 2011-03-15 | 2015-01-20 | Google Inc. | Inline user addressing in chat and document editing sessions |
US20150127603A1 (en) * | 2011-03-15 | 2015-05-07 | Google Inc. | Inline User Addressing in Chat and Document Editing Sessions |
US9356998B2 (en) | 2011-05-16 | 2016-05-31 | F5 Networks, Inc. | Method for load balancing of requests' processing of diameter servers |
US8879431B2 (en) | 2011-05-16 | 2014-11-04 | F5 Networks, Inc. | Method for load balancing of requests' processing of diameter servers |
US10574729B2 (en) | 2011-06-08 | 2020-02-25 | Workshare Ltd. | System and method for cross platform document sharing |
US10963584B2 (en) | 2011-06-08 | 2021-03-30 | Workshare Ltd. | Method and system for collaborative editing of a remotely stored document |
US11386394B2 (en) | 2011-06-08 | 2022-07-12 | Workshare, Ltd. | Method and system for shared document approval |
US9613340B2 (en) | 2011-06-14 | 2017-04-04 | Workshare Ltd. | Method and system for shared document approval |
US8396836B1 (en) | 2011-06-30 | 2013-03-12 | F5 Networks, Inc. | System for mitigating file virtualization storage import latency |
US20130097234A1 (en) * | 2011-10-13 | 2013-04-18 | Dassault Systemes | Collaborative design using duplicated workspaces |
US9230243B2 (en) * | 2011-10-13 | 2016-01-05 | Dassault Systemes | Collaborative design using duplicated workspaces |
US20130110796A1 (en) * | 2011-10-26 | 2013-05-02 | David G. Butler | Receiving a document update to transmit a change |
US8463850B1 (en) | 2011-10-26 | 2013-06-11 | F5 Networks, Inc. | System and method of algorithmically generating a server side transaction identifier |
US10733151B2 (en) | 2011-10-27 | 2020-08-04 | Microsoft Technology Licensing, Llc | Techniques to share media files |
US11030163B2 (en) | 2011-11-29 | 2021-06-08 | Workshare, Ltd. | System for tracking and displaying changes in a set of related electronic documents |
US9977715B2 (en) * | 2011-12-12 | 2018-05-22 | Microsoft Technology Licensing, Llc | Techniques to manage collaborative documents |
US20150269033A1 (en) * | 2011-12-12 | 2015-09-24 | Microsoft Technology Licensing, Llc | Techniques to manage collaborative documents |
US10880359B2 (en) | 2011-12-21 | 2020-12-29 | Workshare, Ltd. | System and method for cross platform document sharing |
US9524297B2 (en) * | 2011-12-29 | 2016-12-20 | Intel Corporation | Management of collaborative teams |
US11347693B2 (en) | 2011-12-29 | 2022-05-31 | Intel Corporation | Management of collaborative teams |
US20140337279A1 (en) * | 2011-12-29 | 2014-11-13 | Stanley Mo | Management of collaborative teams |
US10296871B2 (en) | 2011-12-29 | 2019-05-21 | Intel Corporation | Management of collaborative teams |
US10230566B1 (en) | 2012-02-17 | 2019-03-12 | F5 Networks, Inc. | Methods for dynamically constructing a service principal name and devices thereof |
US9244843B1 (en) | 2012-02-20 | 2016-01-26 | F5 Networks, Inc. | Methods for improving flow cache bandwidth utilization and devices thereof |
USRE48725E1 (en) | 2012-02-20 | 2021-09-07 | F5 Networks, Inc. | Methods for accessing data in a compressed file system and devices thereof |
US11256854B2 (en) | 2012-03-19 | 2022-02-22 | Litera Corporation | Methods and systems for integrating multiple document versions |
US20130262986A1 (en) * | 2012-03-30 | 2013-10-03 | D.A.P. Leblond | Systems, Methods, and Media for Managing Editable Previews of Webpages |
US9430449B2 (en) * | 2012-03-30 | 2016-08-30 | Sdl Plc | Systems, methods, and media for managing editable previews of webpages |
US10097616B2 (en) | 2012-04-27 | 2018-10-09 | F5 Networks, Inc. | Methods for optimizing service of content requests and devices thereof |
US9773270B2 (en) | 2012-05-11 | 2017-09-26 | Fredhopper B.V. | Method and system for recommending products based on a ranking cocktail |
US10572928B2 (en) | 2012-05-11 | 2020-02-25 | Fredhopper B.V. | Method and system for recommending products based on a ranking cocktail |
US20130326330A1 (en) * | 2012-06-01 | 2013-12-05 | Google Inc. | Integrating collaboratively proposed changes and publishing |
US20130332213A1 (en) * | 2012-06-07 | 2013-12-12 | Jayne Heggen | Virtual Outsourcing Agency System and Method |
US8965940B2 (en) * | 2012-07-20 | 2015-02-24 | Microsoft Technology Licensing, Llc | Imitation of file embedding in a document |
US10057318B1 (en) | 2012-08-10 | 2018-08-21 | Dropbox, Inc. | System, method, and computer program for enabling a user to access and edit via a virtual drive objects synchronized to a plurality of synchronization clients |
US9633125B1 (en) | 2012-08-10 | 2017-04-25 | Dropbox, Inc. | System, method, and computer program for enabling a user to synchronize, manage, and share folders across a plurality of client devices and a synchronization server |
US11233851B2 (en) | 2012-08-10 | 2022-01-25 | Dropbox, Inc. | System, method, and computer program for enabling a user to access and edit via a virtual drive objects synchronized to a plurality of synchronization clients |
US10805389B2 (en) | 2012-08-10 | 2020-10-13 | Dropbox, Inc. | System, method, and computer program for enabling a user to access and edit via a virtual drive objects synchronized to a plurality of synchronization clients |
US10805388B2 (en) | 2012-08-10 | 2020-10-13 | Dropbox, Inc. | System, method, and computer program for enabling a user to access and edit via a virtual drive objects synchronized to a plurality of synchronization clients |
US11308528B2 (en) | 2012-09-14 | 2022-04-19 | Sdl Netherlands B.V. | Blueprinting of multimedia assets |
US11386186B2 (en) | 2012-09-14 | 2022-07-12 | Sdl Netherlands B.V. | External content library connector systems and methods |
US10452740B2 (en) | 2012-09-14 | 2019-10-22 | Sdl Netherlands B.V. | External content libraries |
US10033837B1 (en) | 2012-09-29 | 2018-07-24 | F5 Networks, Inc. | System and method for utilizing a data reducing module for dictionary compression of encoded data |
US9578090B1 (en) | 2012-11-07 | 2017-02-21 | F5 Networks, Inc. | Methods for provisioning application delivery service and devices thereof |
US9529785B2 (en) | 2012-11-27 | 2016-12-27 | Google Inc. | Detecting relationships between edits and acting on a subset of edits |
US20170177616A1 (en) * | 2012-12-06 | 2017-06-22 | Empire Technology Development Llc | Decentralizing a hadoop cluster |
US10375155B1 (en) | 2013-02-19 | 2019-08-06 | F5 Networks, Inc. | System and method for achieving hardware acceleration for asymmetric flow connections |
US9497614B1 (en) | 2013-02-28 | 2016-11-15 | F5 Networks, Inc. | National traffic steering device for a better control of a specific wireless/LTE network |
US9170990B2 (en) | 2013-03-14 | 2015-10-27 | Workshare Limited | Method and system for document retrieval with selective document comparison |
US12038885B2 (en) | 2013-03-14 | 2024-07-16 | Workshare, Ltd. | Method and system for document versions encoded in a hierarchical representation |
US11341191B2 (en) | 2013-03-14 | 2022-05-24 | Workshare Ltd. | Method and system for document retrieval with selective document comparison |
US11567907B2 (en) | 2013-03-14 | 2023-01-31 | Workshare, Ltd. | Method and system for comparing document versions encoded in a hierarchical representation |
US9483451B2 (en) | 2013-03-14 | 2016-11-01 | Scribestar Ltd. | System and method for handling user editing history based on spawning, merging data structures of directed acyclic graph |
US10783326B2 (en) | 2013-03-14 | 2020-09-22 | Workshare, Ltd. | System for tracking changes in a collaborative document editing environment |
US10025782B2 (en) | 2013-06-18 | 2018-07-17 | Litera Corporation | Systems and methods for multiple document version collaboration and management |
US20150006473A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Multicultural Collaborative Editing Method, Apparatus and Program Product |
US9342514B2 (en) * | 2013-06-28 | 2016-05-17 | International Business Machines Corporation | Multicultural collaborative editing method, apparatus and program product |
US9948676B2 (en) | 2013-07-25 | 2018-04-17 | Workshare, Ltd. | System and method for securing documents prior to transmission |
US10911492B2 (en) | 2013-07-25 | 2021-02-02 | Workshare Ltd. | System and method for securing documents prior to transmission |
US10380232B2 (en) | 2013-08-19 | 2019-08-13 | Google Llc | Systems and methods for resolving privileged edits within suggested edits |
US11087075B2 (en) | 2013-08-19 | 2021-08-10 | Google Llc | Systems and methods for resolving privileged edits within suggested edits |
US9971752B2 (en) | 2013-08-19 | 2018-05-15 | Google Llc | Systems and methods for resolving privileged edits within suggested edits |
US11663396B2 (en) | 2013-08-19 | 2023-05-30 | Google Llc | Systems and methods for resolving privileged edits within suggested edits |
US20150055170A1 (en) * | 2013-08-23 | 2015-02-26 | Fuji Xerox Co., Ltd. | Information processing apparatus and information processing system |
US9348803B2 (en) | 2013-10-22 | 2016-05-24 | Google Inc. | Systems and methods for providing just-in-time preview of suggestion resolutions |
US10187317B1 (en) | 2013-11-15 | 2019-01-22 | F5 Networks, Inc. | Methods for traffic rate control and devices thereof |
US10339209B2 (en) * | 2013-11-29 | 2019-07-02 | Uc Mobile Co., Ltd. | Webpage display method and device |
US11385774B2 (en) * | 2014-01-06 | 2022-07-12 | Red Hat, Inc. | Intuitive workspace management |
US11438286B2 (en) | 2014-03-21 | 2022-09-06 | Litera Corporation | Systems and methods for email attachments management including changing attributes |
US9756002B2 (en) | 2014-03-21 | 2017-09-05 | Litera Technologies, LLC | Systems and methods for email attachments management |
US11838851B1 (en) | 2014-07-15 | 2023-12-05 | F5, Inc. | Methods for managing L7 traffic classification and devices thereof |
WO2016032548A1 (en) * | 2014-08-25 | 2016-03-03 | Hewlett Packard Enterprise Development Lp | Providing transactional support to a data storage system |
US10867283B2 (en) * | 2014-09-26 | 2020-12-15 | Oracle International Corporation | Lock-based updating of a document |
US10108931B2 (en) * | 2014-09-26 | 2018-10-23 | Oracle International Corporation | Lock-based updating of a document |
US10182013B1 (en) | 2014-12-01 | 2019-01-15 | F5 Networks, Inc. | Methods for managing progressive image delivery and devices thereof |
US9430219B2 (en) * | 2014-12-16 | 2016-08-30 | Sap Se | Revision safe upgrade in a hybrid cloud landscape |
US10133723B2 (en) | 2014-12-29 | 2018-11-20 | Workshare Ltd. | System and method for determining document version geneology |
US11182551B2 (en) | 2014-12-29 | 2021-11-23 | Workshare Ltd. | System and method for determining document version geneology |
US11895138B1 (en) | 2015-02-02 | 2024-02-06 | F5, Inc. | Methods for improving web scanner accuracy and devices thereof |
US9858349B2 (en) | 2015-02-10 | 2018-01-02 | Researchgate Gmbh | Online publication system and method |
US10102298B2 (en) | 2015-02-10 | 2018-10-16 | Researchgate Gmbh | Online publication system and method |
US9996629B2 (en) | 2015-02-10 | 2018-06-12 | Researchgate Gmbh | Online publication system and method |
US20160232143A1 (en) * | 2015-02-10 | 2016-08-11 | Researchgate Gmbh | Online publication system and method |
US10942981B2 (en) | 2015-02-10 | 2021-03-09 | Researchgate Gmbh | Online publication system and method |
US10733256B2 (en) * | 2015-02-10 | 2020-08-04 | Researchgate Gmbh | Online publication system and method |
US10387520B2 (en) | 2015-02-10 | 2019-08-20 | Researchgate Gmbh | Online publication system and method |
US20160285631A1 (en) * | 2015-03-25 | 2016-09-29 | William C. DeLeeuw | Techniques for securing and controlling access to data |
US11240020B2 (en) * | 2015-03-25 | 2022-02-01 | Intel Corporation | Techniques for securing and controlling access to data |
US10348499B2 (en) * | 2015-03-25 | 2019-07-09 | Intel Corporation | Techniques for securing and controlling access to data |
US9967093B2 (en) * | 2015-03-25 | 2018-05-08 | Intel Corporation | Techniques for securing and controlling access to data |
WO2016154476A1 (en) * | 2015-03-25 | 2016-09-29 | Intel Corporation | Techniques for securing and controlling access to data |
US10834065B1 (en) | 2015-03-31 | 2020-11-10 | F5 Networks, Inc. | Methods for SSL protected NTLM re-authentication and devices thereof |
US10878182B2 (en) | 2015-04-30 | 2020-12-29 | Workiva Inc. | Computing device for convergent document collaboration |
US11048861B2 (en) * | 2015-04-30 | 2021-06-29 | Workiva Inc. | System and method for convergent document collaboration |
US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
US9292482B1 (en) * | 2015-04-30 | 2016-03-22 | Workiva Inc. | System and method for convergent document collaboration |
US10331776B2 (en) | 2015-04-30 | 2019-06-25 | Workiva Inc. | System and method for convergent document collaboration |
US9552343B2 (en) | 2015-04-30 | 2017-01-24 | Workiva Inc. | System and method for convergent document collaboration |
US11361150B2 (en) | 2015-04-30 | 2022-06-14 | Workiva Inc. | System and method for convergent document collaboration |
US20160321226A1 (en) * | 2015-05-01 | 2016-11-03 | Microsoft Technology Licensing, Llc | Insertion of unsaved content via content channel |
US10909080B2 (en) * | 2015-05-04 | 2021-02-02 | Microsoft Technology Licensing, Llc | System and method for implementing shared document edits in real-time |
US20160328368A1 (en) * | 2015-05-04 | 2016-11-10 | Microsoft Technology Licensing, Llc. | Real-time sharing of document edits |
US11350254B1 (en) | 2015-05-05 | 2022-05-31 | F5, Inc. | Methods for enforcing compliance policies and devices thereof |
US10505818B1 (en) | 2015-05-05 | 2019-12-10 | F5 Networks. Inc. | Methods for analyzing and load balancing based on server health and devices thereof |
CN104933088A (en) * | 2015-05-13 | 2015-09-23 | 深圳市中幼国际教育科技有限公司 | Remote editing method and system |
US10558712B2 (en) | 2015-05-19 | 2020-02-11 | Researchgate Gmbh | Enhanced online user-interaction tracking and document rendition |
US10650059B2 (en) | 2015-05-19 | 2020-05-12 | Researchgate Gmbh | Enhanced online user-interaction tracking |
US10990631B2 (en) | 2015-05-19 | 2021-04-27 | Researchgate Gmbh | Linking documents using citations |
US10824682B2 (en) | 2015-05-19 | 2020-11-03 | Researchgate Gmbh | Enhanced online user-interaction tracking and document rendition |
US10949472B2 (en) | 2015-05-19 | 2021-03-16 | Researchgate Gmbh | Linking documents using citations |
US11763013B2 (en) | 2015-08-07 | 2023-09-19 | Workshare, Ltd. | Transaction document management system and method |
US9922653B2 (en) | 2015-09-07 | 2018-03-20 | Voicebox Technologies Corporation | System and method for validating natural language content using crowdsourced validation jobs |
US10152585B2 (en) | 2015-09-07 | 2018-12-11 | Voicebox Technologies Corporation | System and method of providing and validating enhanced CAPTCHAs |
US11069361B2 (en) | 2015-09-07 | 2021-07-20 | Cerence Operating Company | System and method for validating natural language content using crowdsourced validation jobs |
US9786277B2 (en) * | 2015-09-07 | 2017-10-10 | Voicebox Technologies Corporation | System and method for eliciting open-ended natural language responses to questions to train natural language processors |
US9734138B2 (en) | 2015-09-07 | 2017-08-15 | Voicebox Technologies Corporation | System and method of annotating utterances based on tags assigned by unmanaged crowds |
US10504522B2 (en) | 2015-09-07 | 2019-12-10 | Voicebox Technologies Corporation | System and method for validating natural language content using crowdsourced validation jobs |
US10394944B2 (en) | 2015-09-07 | 2019-08-27 | Voicebox Technologies Corporation | System and method of annotating utterances based on tags assigned by unmanaged crowds |
US20170068659A1 (en) * | 2015-09-07 | 2017-03-09 | Voicebox Technologies Corporation | System and method for eliciting open-ended natural language responses to questions to train natural language processors |
US9772993B2 (en) | 2015-09-07 | 2017-09-26 | Voicebox Technologies Corporation | System and method of recording utterances using unmanaged crowds for natural language processing |
US10536408B2 (en) | 2015-09-16 | 2020-01-14 | Litéra Corporation | Systems and methods for detecting, reporting and cleaning metadata from inbound attachments |
CN108351764A (en) * | 2015-10-28 | 2018-07-31 | 苹果公司 | Graphical representation of data in a program code editor |
US20170123762A1 (en) * | 2015-10-28 | 2017-05-04 | Apple Inc. | Graphical representation of data in a program code editor |
US10255045B2 (en) * | 2015-10-28 | 2019-04-09 | Apple Inc. | Graphical representation of data in a program code editor |
US11080493B2 (en) | 2015-10-30 | 2021-08-03 | Sdl Limited | Translation review workflow systems and methods |
US10614167B2 (en) | 2015-10-30 | 2020-04-07 | Sdl Plc | Translation review workflow systems and methods |
US11372815B2 (en) * | 2015-12-17 | 2022-06-28 | Box, Inc. | Adaptive tool selection for conflict resolution in a multi-session collaboration setting |
US10740297B2 (en) * | 2015-12-17 | 2020-08-11 | Box, Inc. | Adaptive tool selection for conflict resolution in a multi-session collaboration setting |
US20170177610A1 (en) * | 2015-12-17 | 2017-06-22 | Box, Inc. | Adaptive tool selection for conflict resolution in a multi-session collaboration setting |
US11757946B1 (en) | 2015-12-22 | 2023-09-12 | F5, Inc. | Methods for analyzing network traffic and enforcing network policies and devices thereof |
US10404698B1 (en) | 2016-01-15 | 2019-09-03 | F5 Networks, Inc. | Methods for adaptive organization of web application access points in webtops and devices thereof |
US10797888B1 (en) | 2016-01-20 | 2020-10-06 | F5 Networks, Inc. | Methods for secured SCEP enrollment for client devices and devices thereof |
US11178150B1 (en) | 2016-01-20 | 2021-11-16 | F5 Networks, Inc. | Methods for enforcing access control list based on managed application and devices thereof |
US11586800B2 (en) | 2016-05-27 | 2023-02-21 | Open Text Sa Ulc | Document architecture with fragment-driven role based access controls |
US20170344526A1 (en) * | 2016-05-27 | 2017-11-30 | Open Text Sa Ulc | Document architecture with smart rendering |
US11106856B2 (en) | 2016-05-27 | 2021-08-31 | Open Text Sa Ulc | Document architecture with fragment-driven role based access controls |
US11263383B2 (en) | 2016-05-27 | 2022-03-01 | Open Text Sa Ulc | Document architecture with efficient storage |
US11481537B2 (en) * | 2016-05-27 | 2022-10-25 | Open Text Sa Ulc | Document architecture with smart rendering |
US10467198B2 (en) * | 2016-09-15 | 2019-11-05 | Oracle International Corporation | Network partition tolerance in a high available centralized VCS implementation |
US11334530B2 (en) * | 2016-09-15 | 2022-05-17 | Oracle International Corporation | Network partition tolerance in a high available centralized VCS implementation |
US10412198B1 (en) | 2016-10-27 | 2019-09-10 | F5 Networks, Inc. | Methods for improved transmission control protocol (TCP) performance visibility and devices thereof |
US11063758B1 (en) | 2016-11-01 | 2021-07-13 | F5 Networks, Inc. | Methods for facilitating cipher selection and devices thereof |
US10505792B1 (en) | 2016-11-02 | 2019-12-10 | F5 Networks, Inc. | Methods for facilitating network traffic analytics and devices thereof |
US10812266B1 (en) | 2017-03-17 | 2020-10-20 | F5 Networks, Inc. | Methods for managing security tokens based on security violations and devices thereof |
US11343237B1 (en) | 2017-05-12 | 2022-05-24 | F5, Inc. | Methods for managing a federated identity environment using security and access control data and devices thereof |
US11223689B1 (en) | 2018-01-05 | 2022-01-11 | F5 Networks, Inc. | Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof |
US11294958B2 (en) * | 2018-03-23 | 2022-04-05 | Kyndryl, Inc. | Managing a distributed knowledge graph |
US10970471B2 (en) * | 2018-04-23 | 2021-04-06 | International Business Machines Corporation | Phased collaborative editing |
US11809450B2 (en) | 2018-04-27 | 2023-11-07 | Dropbox, Inc. | Selectively identifying and recommending digital content items for synchronization |
US11334596B2 (en) | 2018-04-27 | 2022-05-17 | Dropbox, Inc. | Selectively identifying and recommending digital content items for synchronization |
US10902684B2 (en) | 2018-05-18 | 2021-01-26 | Microsoft Technology Licensing, Llc | Multiple users dynamically editing a scene in a three-dimensional immersive environment |
WO2019221949A1 (en) * | 2018-05-18 | 2019-11-21 | Microsoft Technology Licensing, Llc | Multiple users dynamically editing a scene in a three-dimensional immersive environment |
US11210816B1 (en) * | 2018-08-28 | 2021-12-28 | Apple Inc. | Transitional effects in real-time rendering applications |
US12118646B1 (en) * | 2018-08-28 | 2024-10-15 | Apple Inc. | Transitional effects in real-time rendering applications |
CN109299046A (en) * | 2018-08-30 | 2019-02-01 | 湖北工业大学 | A Collaborative Editing Method Based on TCP WebSocket Protocol |
US12003422B1 (en) | 2018-09-28 | 2024-06-04 | F5, Inc. | Methods for switching network packets based on packet data and devices |
US11017594B2 (en) * | 2019-05-06 | 2021-05-25 | Bentley Systems, Incorporated | Locking of spatial regions of large-scale fully-connected multi-dimensional spatial data for collaborative updating |
US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
US12229502B2 (en) | 2019-09-12 | 2025-02-18 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
US12141722B2 (en) | 2019-11-18 | 2024-11-12 | Monday.Com | Digital processing systems and methods for mechanisms for sharing responsibility in collaborative work systems |
US11886804B2 (en) | 2020-05-01 | 2024-01-30 | Monday.com Ltd. | Digital processing systems and methods for self-configuring automation packages in collaborative work systems |
US11687706B2 (en) | 2020-05-01 | 2023-06-27 | Monday.com Ltd. | Digital processing systems and methods for automatic display of value types based on custom heading in collaborative work systems |
US11829953B1 (en) | 2020-05-01 | 2023-11-28 | Monday.com Ltd. | Digital processing systems and methods for managing sprints using linked electronic boards |
US20230115858A1 (en) * | 2020-05-14 | 2023-04-13 | Leonard L. Drey | Method of Selective Online Dissemination of Digital Assets |
US11256402B1 (en) * | 2020-08-12 | 2022-02-22 | Facebook, Inc. | Systems and methods for generating and broadcasting digital trails of visual media |
US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
US11544451B2 (en) | 2020-08-17 | 2023-01-03 | Workiva Inc. | System and method for maintaining links and revisions |
US11861300B2 (en) | 2020-08-17 | 2024-01-02 | Workiva Inc. | System and method for maintaining links and revisions |
US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
US12056447B2 (en) | 2020-08-17 | 2024-08-06 | Workiva Inc. | System and method for document branching |
US11734505B2 (en) | 2020-08-17 | 2023-08-22 | Workiva Inc. | System and method for document branching |
US11893213B2 (en) | 2021-01-14 | 2024-02-06 | Monday.com Ltd. | Digital processing systems and methods for embedded live application in-line in a word processing document in collaborative work systems |
US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11436405B1 (en) | 2021-02-15 | 2022-09-06 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US12008306B2 (en) | 2021-02-15 | 2024-06-11 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
US11698935B2 (en) | 2021-05-06 | 2023-07-11 | Workiva Inc. | System and method for copying linked documents |
US20220405464A1 (en) * | 2021-06-18 | 2022-12-22 | Fujifilm Business Innovation Corp. | Information processing apparatus, non-transitory computer readable medium storing program, and information processing method |
CN113535434A (en) * | 2021-07-22 | 2021-10-22 | 北京字跳网络技术有限公司 | Collaborative editing method and device for data nodes, storage medium and equipment |
US12056664B2 (en) * | 2021-08-17 | 2024-08-06 | Monday.com Ltd. | Digital processing systems and methods for external events trigger automatic text-based document alterations in collaborative work systems |
US20230055241A1 (en) * | 2021-08-17 | 2023-02-23 | Monday.com Ltd. | Digital processing systems and methods for external events trigger automatic text-based document alterations in collaborative work systems |
US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
US12014136B2 (en) | 2021-10-15 | 2024-06-18 | Workiva Inc. | Systems and methods for translation comments flowback |
US12105948B2 (en) | 2021-10-29 | 2024-10-01 | Monday.com Ltd. | Digital processing systems and methods for display navigation mini maps |
US11868706B1 (en) * | 2021-12-13 | 2024-01-09 | Notion Labs, Inc. | System, method, and computer program for syncing content across workspace pages |
US12273310B2 (en) | 2022-02-22 | 2025-04-08 | Open Text Holdings, Inc. | Systems and methods for intelligent delivery of communications |
US11888793B2 (en) | 2022-02-22 | 2024-01-30 | Open Text Holdings, Inc. | Systems and methods for intelligent delivery of communications |
US20230328122A1 (en) * | 2022-04-07 | 2023-10-12 | Sigma Computing, Inc. | Live editing a workbook with multiple clients |
US12244654B2 (en) * | 2022-04-07 | 2025-03-04 | Sigma Computing, Inc. | Live editing a workbook with multiple clients |
US12236188B2 (en) | 2022-04-07 | 2025-02-25 | Sigma Computing, Inc. | Resolving live edit conflicts |
US11941347B2 (en) * | 2022-07-01 | 2024-03-26 | Docusign, Inc. | Clause control in synchronous multi-party editing system |
US11741071B1 (en) | 2022-12-28 | 2023-08-29 | Monday.com Ltd. | Digital processing systems and methods for navigating and viewing displayed content |
US11886683B1 (en) | 2022-12-30 | 2024-01-30 | Monday.com Ltd | Digital processing systems and methods for presenting board graphics |
US11893381B1 (en) | 2023-02-21 | 2024-02-06 | Monday.com Ltd | Digital processing systems and methods for reducing file bundle sizes |
US12118401B1 (en) | 2023-11-28 | 2024-10-15 | Monday.com Ltd. | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
US12197560B1 (en) | 2023-11-28 | 2025-01-14 | Monday.com Ltd. | Digital processing systems and methods for managing workflows |
US12175240B1 (en) | 2023-11-28 | 2024-12-24 | Monday.com Ltd. | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
US12260190B1 (en) | 2023-11-28 | 2025-03-25 | Monday.com Ltd. | Digital processing systems and methods for managing workflows |
US12169802B1 (en) | 2023-11-28 | 2024-12-17 | Monday.com Ltd. | Digital processing systems and methods for managing workflows |
US12056255B1 (en) | 2023-11-28 | 2024-08-06 | Monday.com Ltd. | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
US12271849B1 (en) | 2023-11-28 | 2025-04-08 | Monday.com Ltd. | Digital processing systems and methods for managing workflows |
Also Published As
Publication number | Publication date |
---|---|
CA2424713A1 (en) | 2002-02-28 |
CA2424713C (en) | 2007-12-04 |
US7249314B2 (en) | 2007-07-24 |
WO2002017115A3 (en) | 2003-08-21 |
AU2001287421A1 (en) | 2002-03-04 |
WO2002017115A2 (en) | 2002-02-28 |
US20070186157A1 (en) | 2007-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7249314B2 (en) | Simultaneous multi-user document editing system | |
US6687878B1 (en) | Synchronizing/updating local client notes with annotations previously made by other clients in a notes database | |
US11455459B2 (en) | Collaborative authoring | |
US7111009B1 (en) | Interactive playlist generation using annotations | |
US6865599B2 (en) | Browser-to-browser, dom-based, peer-to-peer communication with delta synchronization | |
US7930316B2 (en) | Method, system, and computer program product for dynamic field-level access control in shared documents | |
US7325196B1 (en) | Method and system for manipulating page control content | |
US6681370B2 (en) | HTML/XML tree synchronization | |
US7496841B2 (en) | Method and system for document collaboration | |
US7539727B2 (en) | Instant messaging object store | |
US7380202B1 (en) | Method and system for customizing and personalizing page control content | |
US20030112273A1 (en) | Document collaboration suite using a common database | |
US20120216103A1 (en) | Private views of data and local calculations during real time collaboration | |
US20030081000A1 (en) | Method, program and computer system for sharing annotation information added to digital contents | |
US20210192097A1 (en) | Generating and using digital product tokens to represent digital and physical products | |
CN111045999A (en) | Document display method and device, computer equipment and storage medium | |
AU2013204289A1 (en) | A System and Method for Collaborating over a Communications Network | |
WO2000016221A1 (en) | Interactive playlist generation using annotations | |
DE202011110895U1 (en) | Real-time synchronized editing of documents by multiple users for blogging | |
US11875081B2 (en) | Shared screen tools for collaboration | |
US8812589B2 (en) | Method and system for document-driven message-based communication | |
EP1965310A1 (en) | Document processing method | |
US7325197B1 (en) | Method and system for providing page control content | |
JP2002288029A (en) | Document managing system | |
KR20060034786A (en) | Method and system for jointly editing documents by multiple users |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: THOUGHTSLINGER CORPORATION, CANADA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WALKER, RICHARD P.;SONNENBERG, CHRISTOPHER R.W.;REEL/FRAME:012111/0482 Effective date: 20010820 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
AS | Assignment |
Owner name: 1018989 ONTARIO LTD.,CANADA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:THOUGHTSLINGER CORPORATION;REEL/FRAME:023928/0437 Effective date: 20100212 |
|
AS | Assignment |
Owner name: 1018989 ONTARIO LTD.,CANADA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:THOUGHTSLINGER CORPORATION;REEL/FRAME:024468/0585 Effective date: 20100212 |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 12TH YR, SMALL ENTITY (ORIGINAL EVENT CODE: M2553); ENTITY STATUS OF PATENT OWNER: SMALL ENTITY Year of fee payment: 12 |