OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

office-collab message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [office-collab] Additional use case for change tracking (MCT Solution)


Here the MCT representations of the second case that Patrick proposed.
Please note my comment in the end.

CASE 2

1. Original of 1st author
<text:p>This is the original paragraph, created with change tracking on so seen as an added paragraph.</text:p>

2. 1st author changes text:
<text:p>This is the original paragraph, created with change tracking on so seen as an added paragraph, which is then modified.</text:p>

3. 1st author changes text again:
<text:p>This is the modified paragraph, created with change tracking on so seen as an added paragraph, which is further modified.</text:p>

The intermediate step #2 should not be recorded because its a single editing session, therefore the change tracking



// FILEPATH "./content.xml"
// DESCRIPTION:  The following is part of a content.xml file, similar abbreviated as in earlier examples


<xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
    <!-- ... -->
    <office:text >
       
<text:p>This is the modified paragraph, created with change tracking on so seen as an added paragraph, which is further modified.</text:p>
    </office:text>
   
<!-- ... -->


// FILEPATH "./meta.xml"
// DESCRIPTION: 
Store all metadata of changes in the metadata file.

<office:document-meta office:version="1.3"
    xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
    xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <office:meta>
        <meta:generator>ODFApp/1.0$Win32/123m1$Build-007</meta:generator>
        <meta:creation-date>
20120618T145700+0100</meta:creation-date>
        <meta:initial-creator xml:id="User1">1st author</meta:initial-creator>
        <dc:creator xml:id="User1">1st author</dc:creator>
        <dc:date>20120618T150024+0100</dc:date><!-- time of change the ODF XML is related to -->
        <dc:language>en-US</dc:language>
        <meta:editing-cycles>2</meta:editing-cycles>
    <office:meta>
</office:document-meta>

 

// FILEPATH "./changes/undo.xml"
// DESCRIPTION:  Undo change operations are being stored in this file. The directory is useful for keeping changed binary data

<
undo xmlns="http://docs.oasis-open.org/ns/office/1.3/merge/ct#">
    <del type="text" time="3m15s" by="User1" s="/1/12" s="/1/21"/>
    <add type="text" time="3m24"  by="User1" s="/1/12">modified</add>

    <add type="text" time="1m44s" by="User1" s="/1/93">, which is then further modified</add>
</undo>



COMMENT:
The operation based system makes the sort of changes and compression easy.
The ODF application does not have to read several ODF XML files to do a forensic-like analysis to map back the user change-operation from the content.
Instead all changes are listed separated from the content (undo.xml file).
If multiple users would like to merge their changes, like a student sending his paper to several reviewers and receiving back their comments, it is possible to integrate all reviewer changes into a single document.
This can done by only adjusting the parameter of existing changes, every time an external change was made prior (or above) an existing one. Like incrementing a position parameter, when content was added prior.

In addition only the new changes need to be sent and applied to the current content. Not the complete document have to be read by the application. Think of collaboration on our specification, where one editor only changes a word in the end, megabytes of XML have to be sent for GCT & ECT, while for MCT only require the single change-operation.
In addition the adjustment of several changes is straight forward and not a problem like in GCT/ECT, which have to deal during the comparison with changes on XML level, like different XML prefixes, different placement of span or automatic style names.

Two examples on sorting and compressing of operations.

EXAMPLE 1: Sorting
Sort is easy as only the position parameter have to be adjusted.

<undo xmlns="http://docs.oasis-open.org/ns/office/1.3/merge/ct#">
    <add type="text" time="3m24"  by="User1" s="/1/12">modified</add>
    <add type="text" time="1m44s" by="User1" s="/1/93">, which is then further modified</add>
</undo>

is equal to
<undo xmlns="http://docs.oasis-open.org/ns/office/1.3/merge/ct#">
    <add type="text" time="1m44s" by="User1" s="/1/85">, which is then further modified</add>
    <add type="text" time="3m24"  by="User1" s="/1/12">modified</add>
</undo>
because the "modified" text was not added prior the index is eight (the amount of  characters of 'modified') less.




Example 2: Compression
Similar easy is the compression of operation.

Multiple change operations as
    <add type="text" time="1m53s" by="User1" s="/1/104">f</add>
    <add type="text" time="1m53s" by="User1" s="/1/105">u</add>
    <add type="text" time="1m54s" by="User1" s="/1/106">r</add>
    <add type="text" time="1m54s" by="User1" s="/1/107">t</add>
    <add type="text" time="1m55s" by="User1" s="/1/108">h</add>
    <add type="text" time="1m56s" by="User1" s="/1/109">e</add>
    <add type="text" time="1m56s" by="User1" s="/1/110">r</add>
    <add type="text" time="1m57s" by="User1" s="/1/111"> </add>
are similar to the compressed operation
    <add type="text" time="1m57s" by="User1" s="/1/104">further </add>

Similar the following 5 operations of the above none-saved user actions:
<
undo xmlns="http://docs.oasis-open.org/ns/office/1.3/merge/ct#" meta-file="../meta.xml">
    <add type="text" time="1m44s" by="User1" s="/1/93">, which is then modified</add>
    <del type="text" time="1m47s" by="User1" s="/1/104" s="/1/108" />
    <add type="text" time="1m53s" by="User1" s="/1/104">further </add>
    <del type="text" time="3m15s" by="User1" s="/1/12" s="/1/20"/>
    <add type="text" time="3m24" by="User1" s="/1/12">modified</add>

</undo>

where compressed to the final change-tracking of
<undo xmlns="http://docs.oasis-open.org/ns/office/1.3/merge/ct#">
    <del type="text" time="3m15s" by="User1" s="/1/12" s="/1/20"/>
    <add type="text" time="3m24"  by="User1" s="/1/12">modified</add>

    <add type="text" time="1m44s" by="User1" s="/1/93">, which is then further modified</add>
</undo>


Implementation Note:
MCT can easily be added aside of the existing implementation. In the Apache (incubating) ODF Toolkit, I have added to the SAX handler the functionality to create components and operations from the loaded document aside the existing model (on a private branch). By doing so the operation can be easily extended incrementally, without any content get lost, because the components are accessed by component tree position (e.g. /1/1) and the reference to the existing model structure is returned.

Best regards,
Svante


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]