<abstract>This JEP defines a way to handle extended roster items.</abstract>
&LEGALNOTICE;
<number>0057</number>
<status>Retracted</status>
<type>Standards Track</type>
<jig>Standards JIG</jig>
<supersedes>None</supersedes>
<supersededby>None</supersededby>
<shortname>None</shortname>
<author>
<firstname>Alexey</firstname>
<surname>Shchepin</surname>
<email>alexey@sevcom.net</email>
<jid>aleksey@jabber.ru</jid>
</author>
<revision>
<version>0.2</version>
<date>2003-04-28</date>
<initials>psa</initials>
<remark>Changed the status to Retracted at the request of the author, since the proposed protocol was incompatible with XMPP and clients have begun using jabber:iq:private for this kind of functionality. This JEP will not be considered further by the Jabber Software Foundation and should not be used as a basis for implementations.</remark>
</revision>
<revision>
<version>0.1</version>
<date>2002-11-12</date>
<initials>as</initials>
<remark>Initial version.</remark>
</revision>
</header>
<section1topic="Introduction">
<p>The main purpose of this JEP is to make roster not only a "contact list", but also a "list of useful items". This means that the user has the ability to store not only users' JIDs, but any JID that he wants to quickly access with more information than just the name, subscription and roster groups.</p>
</section1>
<section1topic="What we need to store">
<p>All information, that can be stored for each item can be divided into three categories:</p>
<ol>
<li>Information necessary only for server-side. E.g. we can have a server module that can process "visibility" to each user in roster (by sending custom presence to this user automatically, without special client-side support of this).</li>
<li>Information, neccessary only for client-side. E.g. user description of this item.</li>
<li>Information for both sides. This is at least the JID, category and type.</li>
<p>Using <tt>jabber:iq:private</tt> as in &xep0048; for storing this information has one big problem: it is hard to mantain roster data in two separate places. When a client is online, then the client application can handle <tt>jabber:iq:roster</tt> changes and make similar changes in private storage, but when the user is online with a few different resources, or when he is offline, then making the information consistent is very hard task (a roster can be changed when user offline, e.g. if someone is making an account transfer).</p>
<p>But we have a place where this problem does not exist: <tt>jabber:iq:roster</tt>. We can store it in <tt><item/></tt> subtags. Existing server implementation MUST NOT remove <tt><x/></tt> tags from it. In this case all information always relates to its JID and disappears when this JID removed.</p>
</section1>
<section1topic="How to store">
<section2topic="General information">
<p> JID, category and type are stored as attributes of <tt><item/></tt> tag. Categories and types are the same as in disco. Official categories and types associated with disco are administered by the Jabber Assigned Names Authority (JANA); for details, see <linkurl='http://www.jabber.org/jana/disco.php'>http://www.jabber.org/jana/disco.php</link>.</p>
<p>This information is implementation-dependent, so to provide flexibility for it, the <tt>jabber:x:data</tt> namespace defined in &xep0004; must be used. The client can set these parameters by setting this item with this form with <tt>type='submit'</tt>.</p>
<p>This information stored in <tt><x/></tt> tag with namespace <tt>jabber:x:roster:item</tt>. Following subtags can be used for diferent types of JIDs, however client applications can make this set bigger, to implement more functions.</p>
<section3topic="Generic JIDs">
<p>
For all categories and types of JID allowed following subtag:
</p>
<ul>
<li>
<strong>desc</strong>: A description or note describing the JID.
</li>
</ul>
</section3>
<section3topic="Client JIDs">
For all JIDs with category=client allowed following subtags: