mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-21 16:55:07 -05:00
revert to version 1.0
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@1400 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
parent
baecef50a2
commit
f99b7c0f4b
173
xep-0145.xml
173
xep-0145.xml
@ -7,23 +7,25 @@
|
|||||||
<xep>
|
<xep>
|
||||||
<header>
|
<header>
|
||||||
<title>Annotations</title>
|
<title>Annotations</title>
|
||||||
<abstract>This document defines an XML data format for making annotations about XMPP roster items and other entities.</abstract>
|
<abstract>This document defines a protocol for making annotations about roster items and other entities.</abstract>
|
||||||
&LEGALNOTICE;
|
&LEGALNOTICE;
|
||||||
<number>0145</number>
|
<number>0145</number>
|
||||||
<status>Proposed</status>
|
|
||||||
<type>Standards Track</type>
|
<status>Active</status>
|
||||||
|
<type>Historical</type>
|
||||||
<sig>Standards</sig>
|
<sig>Standards</sig>
|
||||||
<approver>Council</approver>
|
<approver>Council</approver>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<spec>XMPP Core</spec>
|
<spec>XMPP Core</spec>
|
||||||
<spec>XEP-0060</spec>
|
|
||||||
<spec>XEP-0223</spec>
|
<spec>XEP-0049</spec>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<supersedes/>
|
<supersedes/>
|
||||||
<supersededby/>
|
<supersededby/>
|
||||||
<shortname>rosternotes</shortname>
|
<shortname>rosternotes</shortname>
|
||||||
<schemaloc>
|
<schemaloc>
|
||||||
<url>http://www.xmpp.org/schemas/rosternotes.xsd</url>
|
<url>http://www.xmpp.org/schemas/rosternotes.xsd</url>
|
||||||
|
|
||||||
</schemaloc>
|
</schemaloc>
|
||||||
<author>
|
<author>
|
||||||
<firstname>Stefan</firstname>
|
<firstname>Stefan</firstname>
|
||||||
@ -31,13 +33,7 @@
|
|||||||
<email>steve@zeank.in-berlin.de</email>
|
<email>steve@zeank.in-berlin.de</email>
|
||||||
<jid>zeank@jwchat.org</jid>
|
<jid>zeank@jwchat.org</jid>
|
||||||
</author>
|
</author>
|
||||||
&stpeter;
|
|
||||||
<revision>
|
|
||||||
<version>1.1pre3</version>
|
|
||||||
<date>in progress, last updated 2007-09-27</date>
|
|
||||||
<initials>psa</initials>
|
|
||||||
<remark><p>Specified use of publish-subscribe private information nodes as the preferred storage mechanism.</p></remark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
<revision>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
<date>2006-03-23</date>
|
<date>2006-03-23</date>
|
||||||
@ -45,6 +41,7 @@
|
|||||||
<remark><p>Per a vote of the Jabber Council, advanced to Active.</p></remark>
|
<remark><p>Per a vote of the Jabber Council, advanced to Active.</p></remark>
|
||||||
</revision>
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
|
|
||||||
<version>0.2</version>
|
<version>0.2</version>
|
||||||
<date>2005-07-15</date>
|
<date>2005-07-15</date>
|
||||||
<initials>psa</initials>
|
<initials>psa</initials>
|
||||||
@ -52,20 +49,30 @@
|
|||||||
</revision>
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
<version>0.1</version>
|
<version>0.1</version>
|
||||||
|
|
||||||
<date>2004-11-05</date>
|
<date>2004-11-05</date>
|
||||||
<initials>st</initials>
|
<initials>st</initials>
|
||||||
<remark><p>Initial version.</p></remark>
|
<remark><p>Initial version.</p></remark>
|
||||||
</revision>
|
</revision>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section1 topic='Introduction' anchor='intro'>
|
<section1 topic='Introduction' anchor='intro'>
|
||||||
<p>Many modern IM clients offer functionality that enables a user to make notes about the contacts in their roster. This is helpful if such contacts do not have meaningful information in their vCard or if the user needs to remember additional information related to a roster item. To define such functionality, we specify a <storage> element (similar to that introduced in &xep0048;) and appropriate child elements, qualified by a new namespace of 'storage:rosternotes'. While the <storage/> element can be stored using any XML storage mechanism, this document describes two such methods that are specific to XMPP.</p>
|
|
||||||
|
<p>Many modern IM clients offer functionality that enables users to make notes about items in their roster. This comes in handy if users don't have meaningful information in their vCard or if you need to remember additional things related to a roster item.</p>
|
||||||
|
|
||||||
|
<p>This specification defines a protocol for storing annotations about a given set of entities. Its primary goal is to enable users to store some personal piece of information with their roster items. &xep0049; provides with a convenient method for storing user data on the server using the 'jabber:iq:private' namespace; all we need to do is define a namespace and schema for storing this sort of information. For this the 'storage' element introduced in &xep0048; is reused, and a new namespace of 'storage:rosternotes' is added.</p>
|
||||||
|
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='Data Format' anchor='format'>
|
<section1 topic='The storage:rosternotes Namespace' anchor='ns_storage_notes'>
|
||||||
<p>Annotations are stored using a <storage/> element qualified by the 'storage:rosternotes' namespace. This element contains a collection of one or more <note/> elements, each representing a note about a given entity. For any given JID there MUST NOT be more than one note.</p>
|
|
||||||
<p>The 'jid' attribute of the <note/> element SHOULD be used without a resource, i.e., it SHOULD be a bare JID (&BAREJID;) rather than a full JID (&FULLJID;). Along with the annotation a client MAY choose to store the creation time ('cdate') and modification time ('mdate') as attributes to the <note/> element containing the annotation; these attributes MUST conform to the DateTime profile specified in &xep0082; and the timezone SHOULD be UTC.</p>
|
<p>Annotations are stored using server-side private XML storage (the 'jabber:iq:private' namespace). A storage element marked by the storage:rosternotes namespace contains a collection of one or more <note/> elements, each representing a note about a given entity. For any given JID there MUST NOT be more than one note.</p>
|
||||||
<example caption='Some annotations'><![CDATA[
|
|
||||||
|
<p>The 'jid' attribute of the <note/> element SHOULD be used without a resource. Along with the annotation a client MAY choose to store creation time ('cdate') and modification time ('mdate') as attributes to the <note/> element containing the note; these attributes MUST conform to the DateTime profile specified in &xep0082; and the timezone SHOULD be UTC.</p>
|
||||||
|
|
||||||
|
<example caption='Storing Annotations'>
|
||||||
|
<![CDATA[
|
||||||
|
<iq type='set' id='a1'>
|
||||||
|
<query xmlns='jabber:iq:private'>
|
||||||
<storage xmlns='storage:rosternotes'>
|
<storage xmlns='storage:rosternotes'>
|
||||||
<note jid='hamlet@shakespeare.lit'
|
<note jid='hamlet@shakespeare.lit'
|
||||||
cdate='2004-09-24T15:23:21Z'
|
cdate='2004-09-24T15:23:21Z'
|
||||||
@ -74,79 +81,27 @@
|
|||||||
cdate='2004-09-27T17:23:14Z'
|
cdate='2004-09-27T17:23:14Z'
|
||||||
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
||||||
</storage>
|
</storage>
|
||||||
|
</query>
|
||||||
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
|
|
||||||
<p>Note: All notes are stored as a "bundle" within the same <storage/> element.</p>
|
<p>Note: All notes are stored as a "bundle" within the same <storage/> element.</p>
|
||||||
</section1>
|
|
||||||
|
|
||||||
<section1 topic='Storage Methods' anchor='storage'>
|
<p>Retrieving notes uses the protocol described in <cite>XEP-0049</cite>.</p>
|
||||||
<p>It is RECOMMENDED to use &xep0060; for data storage, specifically through the use of personal data nodes hosted at the user's virtual publish-subscribe service as described in &xep0223; and illustrated in the following sections.</p>
|
|
||||||
<p>Note: In the past, &xep0049; was the recommended method (see the archived version of this specification at <<link url='http://www.xmpp.org/extensions/attic/xep-0145-1.0.html'>http://www.xmpp.org/extensions/attic/xep-0048-1.0.html</link>>). In addition, other methods could be used, such as HTTP or WebDAV.</p>
|
|
||||||
<section2 topic='Uploading Data' anchor='storage-pubsub-upload'>
|
|
||||||
<example caption='Client uploads data'><![CDATA[
|
|
||||||
<iq from='juliet@capulet.lit/balcony' type='set' id='pip1'>
|
|
||||||
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
|
||||||
<publish node='storage:rosternotes'>
|
|
||||||
<item id='current'>
|
|
||||||
<storage xmlns='storage:rosternotes'>
|
|
||||||
<note jid='hamlet@shakespeare.lit'
|
|
||||||
cdate='2004-09-24T15:23:21Z'
|
|
||||||
mdate='2004-09-24T15:23:21Z'>Seems to be a good writer</note>
|
|
||||||
<note jid='juliet@capulet.com'
|
|
||||||
cdate='2004-09-27T17:23:14Z'
|
|
||||||
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
|
||||||
</storage>
|
|
||||||
</item>
|
|
||||||
</publish>
|
|
||||||
<publish-options>
|
|
||||||
<x xmlns='jabber:x:data' type='submit'>
|
|
||||||
<field var='FORM_TYPE' type='hidden'>
|
|
||||||
<value>http://jabber.org/protocol/pubsub#publish-options</value>
|
|
||||||
</field>
|
|
||||||
<field var='pubsub#persist_items'>
|
|
||||||
<value>true</value>
|
|
||||||
</field>
|
|
||||||
<field var='pubsub#access_model'>
|
|
||||||
<value>whitelist</value>
|
|
||||||
</field>
|
|
||||||
</x>
|
|
||||||
</publish-options>
|
|
||||||
</pubsub>
|
|
||||||
</iq>
|
|
||||||
]]></example>
|
|
||||||
<example caption='Server acknowledges successful storage'><![CDATA[
|
|
||||||
q to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
|
|
||||||
]]></example>
|
|
||||||
</section2>
|
|
||||||
<section2 topic='Receiving Notifications' anchor='storage-pubsub-notify'>
|
|
||||||
<p>The stored data is automatically pushed to all of the user's connected resources.</p>
|
|
||||||
<example caption='Publisher receives event notification'><![CDATA[
|
|
||||||
<message from='juliet@capulet.lit'
|
|
||||||
to='juliet@capulet.lit/balcony'
|
|
||||||
type='headline'
|
|
||||||
id='rnfoo1'>
|
|
||||||
<event xmlns='http://jabber.org/protocol/pubsub#event'>
|
|
||||||
<items node='storage:rosternotes'>
|
|
||||||
<item id='current'>
|
|
||||||
<storage xmlns='storage:rosternotes'>
|
|
||||||
<note jid='hamlet@shakespeare.lit'
|
|
||||||
cdate='2004-09-24T15:23:21Z'
|
|
||||||
mdate='2004-09-24T15:23:21Z'>Seems to be a good writer</note>
|
|
||||||
<note jid='juliet@capulet.com'
|
|
||||||
cdate='2004-09-27T17:23:14Z'
|
|
||||||
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
|
||||||
</storage>
|
|
||||||
</item>
|
|
||||||
</items>
|
|
||||||
</event>
|
|
||||||
</message>
|
|
||||||
|
|
||||||
<message from='juliet@capulet.lit'
|
<example caption='Retrieving Annotations'>
|
||||||
to='juliet@capulet.lit/chamber'
|
<![CDATA[
|
||||||
type='headline'
|
<iq type='get' id='a2'>
|
||||||
id='rnfoo2'>
|
<query xmlns='jabber:iq:private'>
|
||||||
<event xmlns='http://jabber.org/protocol/pubsub#event'>
|
<storage xmlns='storage:rosternotes'/>
|
||||||
<items node='storage:rosternotes'>
|
</query>
|
||||||
<item id='current'>
|
</iq>
|
||||||
|
]]></example>
|
||||||
|
|
||||||
|
<example caption='Server response'>
|
||||||
|
<![CDATA[
|
||||||
|
<iq type='result' id='a2'>
|
||||||
|
<query xmlns='jabber:iq:private'>
|
||||||
<storage xmlns='storage:rosternotes'>
|
<storage xmlns='storage:rosternotes'>
|
||||||
<note jid='hamlet@shakespeare.lit'
|
<note jid='hamlet@shakespeare.lit'
|
||||||
cdate='2004-09-24T15:23:21Z'
|
cdate='2004-09-24T15:23:21Z'
|
||||||
@ -155,46 +110,17 @@ q to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
|
|||||||
cdate='2004-09-27T17:23:14Z'
|
cdate='2004-09-27T17:23:14Z'
|
||||||
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
||||||
</storage>
|
</storage>
|
||||||
</item>
|
</query>
|
||||||
</items>
|
|
||||||
</event>
|
|
||||||
</message>
|
|
||||||
]]></example>
|
|
||||||
</section2>
|
|
||||||
<section2 topic='Retrieving Data' anchor='storage-pubsub-retrieve'>
|
|
||||||
<p>In order to retrieve stored data without receiving notifications (e.g., upon initial login), the user's client sends a retrieve-items request as specified in <cite>XEP-0060</cite>.</p>
|
|
||||||
<example caption='Client requests all items'><![CDATA[
|
|
||||||
<iq from='juliet@capulet.lit/randomID' type='get' id='retrieve1'>
|
|
||||||
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
|
||||||
<items node='storage:rosternotes'/>
|
|
||||||
</pubsub>
|
|
||||||
</iq>
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
<example caption='Server returns all items'><![CDATA[
|
|
||||||
<iq type='result'
|
<p>For error conditions please refer to <cite>XEP-0049</cite>.</p>
|
||||||
to='juliet@capulet.lit/randomID'
|
|
||||||
id='retrieve1'>
|
|
||||||
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
|
||||||
<items node='storage:rosternotes'>
|
|
||||||
<item id='current'>
|
|
||||||
<storage xmlns='storage:rosternotes'>
|
|
||||||
<note jid='hamlet@shakespeare.lit'
|
|
||||||
cdate='2004-09-24T15:23:21Z'
|
|
||||||
mdate='2004-09-24T15:23:21Z'>Seems to be a good writer</note>
|
|
||||||
<note jid='juliet@capulet.com'
|
|
||||||
cdate='2004-09-27T17:23:14Z'
|
|
||||||
mdate='2004-09-28T12:43:12Z'>Oh my sweetest love ...</note>
|
|
||||||
</storage>
|
|
||||||
</item>
|
|
||||||
</items>
|
|
||||||
</pubsub>
|
|
||||||
</iq>
|
|
||||||
]]></example>
|
|
||||||
</section2>
|
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='Security Considerations' anchor='security'>
|
<section1 topic='Security Considerations' anchor='security'>
|
||||||
<p>Security considerations related to object persistent via publish-subscribe are described in XEP-0060 and <cite>XEP-0223</cite>.</p>
|
|
||||||
|
<p>Security considerations related to private XML storage are described in <cite>XEP-0049</cite>.</p>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='IANA Considerations' anchor='iana'>
|
<section1 topic='IANA Considerations' anchor='iana'>
|
||||||
@ -202,7 +128,7 @@ q to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
|
|||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
|
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
|
||||||
<p>No action by the ®ISTRAR; is required, since the 'storage:rosternotes' namespace is already included in the protocol namespaces registry (see &NAMESPACES;).</p>
|
<p>No namespaces or parameters need to be registered with the ®ISTRAR; as a result of this document.</p>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='XML Schema' anchor='schema'>
|
<section1 topic='XML Schema' anchor='schema'>
|
||||||
@ -247,3 +173,4 @@ q to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
|
|||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
</xep>
|
</xep>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user