xeps/xep-0231.xml

450 lines
26 KiB
XML
Raw Normal View History

<?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>Data Element</title>
<abstract>This specification defines an XMPP protocol extension for including small bits of binary data in an XML stanza.</abstract>
&LEGALNOTICE;
<number>0231</number>
<status>Proposed</status>
<type>Standards Track</type>
<sig>Standards</sig>
<approver>Council</approver>
<dependencies>
<spec>XMPP Core</spec>
<spec>RFC 2045</spec>
<spec>RFC 2111</spec>
<spec>RFC 4648</spec>
</dependencies>
<supersedes/>
<supersededby/>
<shortname>NOT_YET_ASSIGNED</shortname>
&stpeter;
<revision>
<version>0.3</version>
<date>2008-06-18</date>
<initials>psa</initials>
<remark><p>Allowed inclusion of codecs parameter in type attribute per RFC 4281.</p></remark>
</revision>
<revision>
<version>0.2</version>
<date>2008-05-29</date>
<initials>psa</initials>
<remark><p>Added service discovery feature for in-band message images use case.</p></remark>
</revision>
<revision>
<version>0.1</version>
<date>2008-01-30</date>
<initials>psa</initials>
<remark><p>Initial published version.</p></remark>
</revision>
<revision>
<version>0.0.4</version>
<date>2008-01-29</date>
<initials>psa</initials>
<remark><p>Separately described service discovery feature for inclusion of the data element in file previews.</p></remark>
</revision>
<revision>
<version>0.0.3</version>
<date>2007-12-27</date>
<initials>psa</initials>
<remark><p>Described use cases for previewing data to be exchanged in file transfers and for inclusion of media information in data forms.</p></remark>
</revision>
<revision>
<version>0.0.2</version>
<date>2007-12-18</date>
<initials>psa</initials>
<remark><p>Changed syntax to not use data: URL scheme; added cid and type attributes; described use cases for messaging and data retrieval.</p></remark>
</revision>
<revision>
<version>0.0.1</version>
<date>2007-11-09</date>
<initials>psa</initials>
<remark><p>First draft.</p></remark>
</revision>
</header>
<section1 topic='Introduction' anchor='intro'>
<p>Sometimes it is desirable to include a small bit of binary data in an XMPP stanza. Typical use cases might be inclusion of an icon or emoticon in a message, a thumbnail in a file transfer request, a rasterized image in a whiteboarding session, or a small bit of media in a data form. At present, there is no lightweight method for including such data in an XMPP stanza, since existing methods (e.g., &xep0047;) are designed for larger blobs of data and therefore require some form of negotiation (e.g., via &xep0096; or &xep0234;). Therefore, this document specifies just such a lightweight method, using a &lt;data/&gt; element that provides semantics similar to the data: URL scheme defined in &rfc2397;.</p>
</section1>
<section1 topic='Format' anchor='format'>
<p>The format for including binary data is straightforward: the data is encapsulated as the XML character data of a &lt;data/&gt; element qualified by the 'urn:xmpp:tmp:data-element' namespace &NSNOTE;, where the data MUST be encoded as Base64 in accordance with Section 4 of &rfc4648; (note: the Base64 output MUST NOT include whitespace and MUST set the number of pad bits to zero).</p>
<p>The &lt;data/&gt; element MUST be used only to encapsulate small bits of binary data and MUST NOT be used for large data transfers. Naturally the definitions of "small" and "large" are rather loose. In general, the data SHOULD NOT be more than 8 kilobytes, and dedicated file transfer methods (e.g., &xep0065; or &xep0047;) SHOULD be used for exchanging blobs of data larger than 8 kilobytes. Naturally, implementations or deployments may impose their own limits.</p>
<p>The following attributes are defined for the &lt;data/&gt; element.</p>
<table caption='Defined Attributes'>
<tr>
<th>Attribute</th>
<th>Description</th>
<th>Inclusion</th>
</tr>
<tr>
<td>alt</td>
<td>A human-readable description of the data.</td>
<td>RECOMMENDED</td>
</tr>
<tr>
<td>cid</td>
<td>A Content-ID that can be mapped to a cid: URL as specified in &rfc2111;.</td>
<td>RECOMMENDED</td>
</tr>
<tr>
<td>type</td>
<td>The MIME type of the data (e.g., "image/png") as described in &rfc2045;. The MIME type SHOULD be as registered in the &ianamedia;. The 'type' attribute MAY include the codecs parameter as specified in &rfc4281;, as shown in the example of the "audio/ogg" media type in the example below.</td>
<td>REQUIRED</td>
</tr>
</table>
<p>The following example illustrates the format (line endings are provided for readability only).</p>
<example caption='Data element format'><![CDATA[
<data xmlns='urn:xmpp:tmp:data-element'
alt='A spot'
cid='f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'
type='image/png'>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==
</data>
]]></example>
</section1>
<section1 topic='Use Cases' anchor='usecases'>
<section2 topic='In-Band Images for XMPP Messaging' anchor='message'>
<p>The &lt;data/&gt; element can be used in conjunction with &xep0071; and the cid: URL scheme to point to binary data that is provided in-band within a &MESSAGE; stanza.</p>
<p>Note: The sender SHOULD NOT include an in-band image unless the intended recipient advertises (via &xep0030; or &xep0115;) support for the "urn:xmpp:tmp:data-element:inband-image" service discovery feature &NSNOTE;.</p>
<example caption='A message with included data'><![CDATA[
<message from='ladymacbeth@shakespeare.lit/castle'
to='macbeth@chat.shakespeare.lit'
type='groupchat'>
<body>Yet here's a spot.</body>
<html xmlns='http://jabber.org/protocol/xhtml-im'>
<body xmlns='http://www.w3.org/1999/xhtml'>
<p>
Yet here's a spot.
<img alt='A spot'
src='cid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'/>
</p>
</body>
</html>
<data xmlns='urn:xmpp:tmp:data-element'
alt='A spot'
cid='f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'
type='image/png'>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==
</data>
</message>
]]></example>
<p>Once the data is provided, a subsequent message in the same session can refer to the data again without including the data itself.</p>
<example caption='A message with referenced data'><![CDATA[
<message from='ladymacbeth@shakespeare.lit/castle'
to='macbeth@chat.shakespeare.lit'
type='groupchat'>
<body>Out, damned spot!</body>
<html xmlns='http://jabber.org/protocol/xhtml-im'>
<body xmlns='http://www.w3.org/1999/xhtml'>
<p>
Out damned spot!
<img alt='A spot'
src='cid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'/>
</p>
</body>
</html>
</message>
]]></example>
<p>If the receiving entity has not cached the data, it can request the data as described in the <link url='#retrieve'>Retrieving Data</link> section of this document.</p>
</section2>
<section2 topic='Media Data in XMPP Data Forms' anchor='form'>
<p>&xep0221; describes how to include a media element in &xep0004;, e.g. for the purpose of placing a human-viewable "CAPTCHA" in a form that is used for &xep0158; or &xep0077;. The &lt;media/&gt; element described in <cite>XEP-0221</cite> contains one or more &lt;uri/&gt; elements (which point to locations where the media can be downloaded, e.g. via HTTP) as well as a &lt;data/&gt; element that includes the data itself. The &lt;media/&gt; element would contain a &lt;data/&gt; element as described herein and shown in the following example.</p>
<example caption='Audio Media Element'><![CDATA[
<media xmlns='urn:xmpp:tmp:media-element'>
<uri type='audio/x-wav'>
http://victim.example.com/challenges/speech.wav?F3A6292C
</uri>
<uri type='audio/ogg; codecs=speex'>
http://victim.example.com/challenges/speech.ogg?F3A6292C
</uri>
<uri type='audio/mpeg'>
http://victim.example.com/challenges/speech.mp3?F3A6292C
</uri>
<data xmlns='urn:xmpp:tmp:data-element'
alt='An audio file'
type='audio/ogg; codecs=speex'>
[ ... base64-encoded-audio ... ]
</data>
</media>
]]></example>
<p>The media would then be included in a data form as illustrated in <cite>XEP-0221</cite>.</p>
</section2>
<section2 topic='Previews for XMPP File Transfers' anchor='preview'>
<p>A previous proposal <note>See &lt;<link url='http://www.xmpp.org/extensions/inbox/file-preview.html'>http://www.xmpp.org/extensions/inbox/file-preview.html</link>&gt;.</note> described a method for including a thumbnail or file preview in a file transfer request. Such a preview can be included using the &lt;data/&gt; element, as shown below.</p>
<p>Note: The initiator SHOULD NOT include a file preview unless the receiving entity advertises (via <cite>XEP-0030</cite> or <cite>XEP-0115</cite>) support for the "urn:xmpp:tmp:data-element:file-preview" service discovery feature &NSNOTE;.</p>
<example caption='File transfer offer with preview'><![CDATA[
<iq from='romeo@montague.lit/home'
id='offer1'
to='juliet@capulet.com/chamber'
type='set'>
<si xmlns='http://jabber.org/protocol/si'
profile='http://jabber.org/protocol/si/profile/file-transfer'
id='s5b_46e78e4a0ddacc74' >
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
size='330527'
name='image.png'>
<data xmlns='urn:xmpp:tmp:data-element'
alt='There be dragons!'
type='image/png'>
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
5v4/R2f0swq2hnQAAAAASUVORK5CYII=
</data>
<range/>
</file>
<feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'>
<field var='stream-method' type='list-single'>
<option><value>http://jabber.org/protocol/bytestreams</value></option>
<option><value>http://jabber.org/protocol/ibb</value></option>
</field>
</x>
</feature>
</si>
</iq>
]]></example>
</section2>
<section2 topic='Retrieving Uncached Media Data' anchor='retrieve'>
<p>Data can be requested and transferred using the XMPP &IQ; stanza type by making reference to the 'cid' of the data to be retrieved. In particular, the requesting entity can request data by sending an IQ-get containing an empty &lt;data/&gt; element with a 'cid' attribute.</p>
<example caption='Requesting data'><![CDATA[
<iq from='doctor@shakespeare.lit/pda'
id='get-data-1'
to='gentlewoman@shakespeare.lit/phone'
type='get'>
<data xmlns='urn:xmpp:tmp:data-element'
cid='f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'/>
</iq>
]]></example>
<p>The responding entity then would either return an error (e.g., &notfound; if it does not have data matching the Content-ID) or return the data.</p>
<example caption='Returning data'><![CDATA[
<iq from='gentlewoman@shakespeare.lit/phone'
id='get-data-1'
to='doctor@shakespeare.lit/pda'
type='result'>
<data xmlns='urn:xmpp:tmp:data-element'
alt='A spot'
cid='f81d4fae-7dec-11d0-a765-00a0c91e6bf6@shakespeare.lit'
type='image/png'>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==
</data>
</iq>
]]></example>
<p>This specification does not place limits on the entities from which data can be requested. In particular, such an entity need not be the "owner" of the data (e.g., it could be a peer in a chatroom or whiteboarding session, or the chatroom or whiteboarding service itself).</p>
<p>In addition, bits of data could be hosted by XMPP servers, distributed via &xep0060; nodes, or included in data collections that are available via HTTP (e.g., emoticon sets). Such data could be identified by the value of the 'cid' attribute, but methods for specifying those values are out of scope for this specification.</p>
</section2>
</section1>
<section1 topic='Security Considerations' anchor='security'>
<p>The ability to include arbitrary binary data implies that it is possible to send scripts, applets, images, and executable code, which may be potentially harmful. To reduce the risk of such exposure, an implementation MAY choose to not display or process such data but instead either completely ignore the data, show only the value of the 'alt' attribute, or prompt a human user for approval (either explicitly via user action or implicitly via a list of approved entities from whom the user will accept binary data without per-event approval).</p>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
<p>This document requires no interaction with &IANA;.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<section2 topic='Protocol Namespaces' anchor='ns'>
<p>Until this specification advances to a status of Draft, its associated namespace shall be "urn:xmpp:tmp:data-element"; upon advancement of this specification, the &REGISTRAR; shall issue a permanent namespace in accordance with the process defined in Section 4 of &xep0053;.</p>
</section2>
<section2 topic='Service Discovery Features' anchor='registrar-features'>
<p>If an entity is willing to accept data elements in file transfer requests for the purpose of previewing the file to be sent, it SHOULD advertise support for the "urn:xmpp:tmp:data-element:file-preview" feature.</p>
<p>The registry submission is as follows.</p>
<code caption='Registry Submission'><![CDATA[
<var>
<name>urn:xmpp:tmp:data-element:file-preview</name>
<desc>Signals a willingness to accept data elements for previewing file transfers</desc>
<doc>XEP-0231</doc>
</var>
<var>
<name>urn:xmpp:tmp:data-element:inband-image</name>
<desc>Signals a willingness to accept data elements for in-band message images</desc>
<doc>XEP-0231</doc>
</var>
]]></code>
</section2>
</section1>
<section1 topic='XML Schema' anchor='schema'>
<code><![CDATA[
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:xmpp:tmp:data-element'
xmlns='urn:xmpp:tmp:data-element'
elementFormDefault='qualified'>
<xs:element name='data'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:base64Binary'>
<xs:attribute name='alt' type='xs:string' use='optional'/>
<xs:attribute name='cid' type='xs:string' use='optional'/>
<xs:attribute name='type' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
]]></code>
</section1>
<section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Rachel Blackman, Dave Cridland, and Tomasz Sterna for their feedback.</p>
</section1>
</xep>