<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE xep SYSTEM 'xep.dtd' [
  <!ENTITY % ents SYSTEM 'xep.ent'>
%ents;
]>
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep>
<header>
  <title>Requirements for Shared Editing</title>
  <abstract>This document defines requirements for the design of XMPP-based shared editing protocols.</abstract>
  &LEGALNOTICE;
  <number>0228</number>
  <status>Deferred</status>
  <type>Standards Track</type>
  <sig>Standards</sig>
  <approver>Council</approver>
  <dependencies>
    <spec>XMPP Core</spec>
  </dependencies>
  <supersedes/>
  <supersededby/>
  <shortname>N/A</shortname>
  &stpeter;
  <revision>
    <version>0.1</version>
    <date>2007-08-22</date>
    <initials>psa</initials>
    <remark><p>First draft.</p></remark>
  </revision>
</header>
<section1 topic='Introduction' anchor='intro'>
  <p>Shared editing applications such as whiteboarding have been developed using XMPP, but there is no general editing and synchronization protocol that can be used by such applications. This document attempts to define the requirements for such a protocol so that work can proceed on protocol development.</p>
</section1>
<section1 topic='Requirements' anchor='reqs'>
  <section2 topic='General' anchor='general'>
    <ol start='1'>
      <li><p>The underlying protocol shall be designed for synchronization of XML document instances between entities that communicate via XMPP.</p></li>
      <li><p>All parties to a shared XML editing session must have the same representation of the XML document after all synchronization messages have been processed.</p></li>
      <li><p>It should be possible to use the protocol for multiple application types; examples include but are not limited to whiteboarding using &w3svg;, editing of &w3xhtml; documents, and &xep0204;.</p></li>
      <li><p>There is no requirement to synchronize non-XML data.</p></li>
      <li><p>It must be possible to synchronize XML document instances either between two entities or among more than two entities.</p></li>
      <li><p>The protocol should not (unduly) limit the number of parties to a shared XML editing session.</p></li>
      <li><p>The protocol should be as lightweight as possible in order to minimize bandwidth consumption.</p></li>
      <li><p>Certain applications may need to handle particular features of the XML syntax for that application type (e.g., layers in SVG or pages in XHTML); the protocol must not forbid such specialized semantics.</p></li>
    </ol>
  </section2>
  <section2 topic='Transport' anchor='transport'>
    <ol start='1'>
      <li><p>It must be possible to use the protocol "directly" between two entities without assistance from intermediaries, either via an XMPP server (&xmppcore;) or in serverless mode (&xep0174;).</p></li>
      <li><p>It must be possible to use the protocol through a &xep0045; room.</p></li>
      <li><p>It should be possible to use the protocol with a specialized synchronization component attached to an XMPP server.</p></li>
    </ol>
  </section2>
  <section2 topic='Editing' anchor='editing'>
    <ol start='1'>
      <li><p>It must be possible to add new "nodes" (elements and attributes) to the XML document.</p></li>
      <li><p>It must be possible to edit existing nodes.</p></li>
      <li><p>It must be possible to remove existing nodes.</p></li>
      <li><p>It should be possible to move a node from one location to another within the XML document.</p></li>
      <li><p>Where possible, all edits should be commutative in order to minimize the need for locking of the XML document.</p></li>
      <li><p>It should be possible to send the complete content of a node or only the difference between the last version of the node and the current version.</p></li>
    </ol>
  </section2>
  <section2 topic='Data Formats' anchor='formats'>
    <ol start='1'>
      <li><p>It should be possible to re-use the XML document outside of a shared editing session (e.g., for offline editing in a different application, or for archiving).</p></li>
      <li><p>It should be possible to specify the version of the protocol.</p></li>
      <li><p>It should be possible to refer to outside resources (e.g., images hosted at websites) from within the protocol.</p></li>
      <li><p>It should be possible to validate synchronization messages against a defined schema for the application type in real time.</p></li>
      <li><p>It should be possible to log all synchronization messages and associated metadata for archiving and logging purposes.</p></li>
      <li><p>It must be possible to uniquely identify each node in an XML document, both within the scope of a standalone shared XML editing session and if the edited object is shared with other appliclations or embedded in other objects.</p></li>
      <li><p>It must be possible to maintain the ordering of XML elements in the document.</p></li>
      <li><p>It must be possible to specify the parent of any given node.</p></li>
      <li><p>It should be possible to associate an XML document with other XML documents.</p></li>
      <li><p>It must be possible to represent human-readable text in a language and character set appropriate for a human user.</p></li>
      <li><p>It should be possible to associate relevant metadata with each node in the XML document, which might include time of creation, identity of the creator, time of last modification, and identity of last modifier.</p></li>
      <li><p>It should be possible to mix text nodes with other child nodes (namely elements).</p></li>
    </ol>
  </section2>
  <section2 topic='Sessions' anchor='sessions'>
    <ol start='1'>
      <li><p>It must be possible to initiate, update, join, and terminate a shared XML editing session.</p></li>
      <li><p>It must be possible to specify the roles of parties to a shared XML editing session.</p></li>
      <li><p>It should be possible to re-use the permission from a Multi-User Chat room, Publish-Subscribe node, or other service that has a permissions model.</p></li>
      <li><p>It should be possible to declare shared editing of the XML document to be complete (e.g., in preparation for archiving of the XML document or editing by another application).</p></li>
      <li><p>It should be possible to declare shared editing of part of the XML document to be complete.</p></li>
      <li><p>It must be possible to reject out-of-order synchronization messages.</p></li>
      <li><p>It should be possible to specify that all parties shall move their viewing context to a particular location in the XML data object.</p></li>
    </ol>
  </section2>
  <section2 topic='States' anchor='states'>
    <ol start='1'>
      <li><p>It should be possible to retrieve the current state of the XML document from a party to the shared editing session.</p></li>
      <li><p>It should be possible to retrieve the history of edits to the XML document from a party to the shared editing session.</p></li>
      <li><p>It should be possible to retrieve all the changes to the XML document since a specific sequence number.</p></li>
    </ol>
  </section2>
  <section2 topic='Discovery' anchor='disco'>
    <ol start='1'>
      <li><p>It must be possible to discover whether another entity can engage in a shared XML editing session.</p></li>
      <li><p>It must be possible to discover which application types another entity can handle.</p></li>
      <li><p>It should be possible to query an entity for the shared XML editing sessions to which it is a party.</p></li>
      <li><p>It should be possible to query an entity for the XML documents it owns or knows about (which may be the result of a past editing session).</p></li>
    </ol>
  </section2>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
  <p>This document requires no action by &IANA;.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
  <p>This document requires no action by the &REGISTRAR;.</p>
</section1>
<section1 topic='Acknowledgements' anchor='ack'>
  <p>For their previous work on XMPP-based shared editing technologies, the author wishes to thank Mats Bengtsson, Michael Bishop, Dave Bryson, Boyd Fletcher, Joonas Govenius, Marshall Huss, Huib-Jan Imbens, Jasen Jacobsen, Michael Krutsch, Keith Lirette, Ian Paterson, Chad Smith, and Dan Winkowski.</p>
</section1>
</xep>

