2006-10-02 18:22:13 -04:00
<?xml version='1.0' encoding='UTF-8'?>
2006-10-04 12:21:54 -04:00
< !DOCTYPE xep SYSTEM 'xep.dtd' [
<!ENTITY % ents SYSTEM 'xep.ent'>
2006-10-02 18:22:13 -04:00
%ents;
]>
2006-10-04 12:21:54 -04:00
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep >
2006-10-02 18:22:13 -04:00
<header >
<title > User Tune</title>
2006-10-04 12:21:54 -04:00
<abstract > This document defines an XMPP protocol extension for communicating information about the music to which a user is listening.</abstract>
2006-10-02 18:22:13 -04:00
&LEGALNOTICE;
<number > 0118</number>
<status > Draft</status>
<type > Standards Track</type>
<jig > Standards JIG</jig>
<dependencies >
<spec > XMPP Core</spec>
<spec > XMPP IM</spec>
2006-10-04 12:21:54 -04:00
<spec > XEP-0060</spec>
2006-10-02 18:22:13 -04:00
</dependencies>
<supersedes />
<supersededby />
<shortname > tune</shortname>
<schemaloc >
2006-10-04 12:21:54 -04:00
<url > http://www.xmpp.org/schemas/tune.xsd</url>
2006-10-02 18:22:13 -04:00
</schemaloc>
&stpeter;
<revision >
<version > 1.0</version>
<date > 2004-11-12</date>
<initials > psa</initials>
<remark > Per a vote of the Jabber Council, advanced status to Draft.</remark>
</revision>
<revision >
<version > 0.10</version>
<date > 2004-10-29</date>
<initials > psa</initials>
<remark > Added example with URL.</remark>
</revision>
<revision >
<version > 0.9</version>
<date > 2004-10-27</date>
<initials > psa</initials>
<remark > Changed recommendation to not include the < length/> element if the track time is unknown.</remark>
</revision>
<revision >
<version > 0.8</version>
<date > 2004-10-26</date>
<initials > psa</initials>
<remark > Added implementation notes; clarified nature of < source/> and < track/> elements; if length is unknown, set to zero.</remark>
</revision>
<revision >
<version > 0.7</version>
<date > 2004-05-20</date>
<initials > psa</initials>
<remark > Changed < length/> datatype from xs:duration to xs:unsignedShort.</remark>
</revision>
<revision >
<version > 0.6</version>
<date > 2004-04-25</date>
<initials > psa</initials>
2006-10-04 12:21:54 -04:00
<remark > Corrected several errors; added reference to XEP-0033.</remark>
2006-10-02 18:22:13 -04:00
</revision>
<revision >
<version > 0.5</version>
<date > 2004-02-19</date>
<initials > psa</initials>
<remark > Reverted from infobits to tune elements.</remark>
</revision>
<revision >
<version > 0.4</version>
<date > 2003-12-14</date>
<initials > psa</initials>
2006-10-04 14:40:38 -04:00
<remark > Slight modifications to track changes to infobits specifications.</remark>
2006-10-02 18:22:13 -04:00
</revision>
<revision >
<version > 0.3</version>
<date > 2003-10-23</date>
<initials > psa</initials>
<remark > Replaced tune elements with infobits.</remark>
</revision>
<revision >
<version > 0.2</version>
<date > 2003-09-10</date>
<initials > psa</initials>
<remark > Added "stop" function via empty < tune/> element.</remark>
</revision>
<revision >
<version > 0.1</version>
<date > 2003-09-08</date>
<initials > psa</initials>
<remark > Initial version.</remark>
</revision>
</header>
<section1 topic= 'Introduction' anchor= 'intro' >
2006-10-04 12:21:54 -04:00
<p > This document defines a protocol for communicating information about the music to which a user is listening. Such information may be seen as a kind of "extended presence", and users may want to communicate such information to their contacts on the network as a fun add-on to traditional IM applications or to provide integration with common music-player applications.</p>
2006-10-02 18:22:13 -04:00
</section1>
<section1 topic= 'Protocol' anchor= 'protocol' >
<section2 topic= 'Container Element and Child Elements' anchor= 'protocol-elements' >
<p > Information about tunes is provided by the user and propagated on the network by the user's client. The information container for tune data is a < tune/> element that is qualified by the 'http://jabber.org/protocol/tune' namespace. The tune information itself is provided as the XML character data of the following children of the < tune/> element:</p>
<table caption= 'Child Elements' >
<tr >
<th > Element</th>
<th > Description</th>
<th > Example</th>
<th > Datatype</th>
</tr>
<tr >
<td > artist</td>
<td > The artist or performer of the song or piece</td>
<td > Yes</td>
<td > xs:string</td>
</tr>
<tr >
<td > title</td>
<td > The title of the song or piece</td>
<td > Heart of the Sunrise</td>
<td > xs:string</td>
</tr>
<tr >
<td > source</td>
<td > The collection (e.g., album) or other source (e.g., a band website that hosts streams or audio files)</td>
<td > Yessongs</td>
<td > xs:string</td>
</tr>
<tr >
<td > track</td>
<td > A unique identifier for the tune; e.g., the track number within a collection or the specific URI for the object (e.g., a stream or audio file)</td>
<td > 3</td>
<td > xs:string</td>
</tr>
<tr >
<td > length</td>
<td > The duration of the song or piece in seconds</td>
<td > 686</td>
<td > xs:unsignedShort</td>
</tr>
</table>
<p > NOTE: The datatypes specified above are defined in &w3xmlschema2; .</p>
</section2>
<section2 topic= 'Transport Mechanism' anchor= 'protocol-transport' >
2006-10-04 12:21:54 -04:00
<p > Tune information SHOULD be communicated and transported by means of the &xep0060; protocol. Because tune information is not pure presence information and can change independently of the user's availability, it SHOULD NOT be provided as an extension to &PRESENCE; .</p>
2006-10-02 18:22:13 -04:00
<example caption= 'User Publishes Tune Information' > < ![CDATA[
<iq type= 'set'
from='stpeter@jabber.org/work'
to='pubsub.jabber.org'
id='tunes123'>
<pubsub xmlns= 'http://jabber.org/protocol/pubsub' >
<publish node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' >
<artist > Yes</artist>
<title > Heart of the Sunrise</title>
<source > Yessongs</source>
<track > 3</track>
<length > 686</length>
</tune>
</item>
</publish>
</pubsub>
</iq>
]]></example>
<p > The tune information is then delivered to all subscribers:</p>
<example caption= 'Tune Information is Delivered to All Subscribers' > < ![CDATA[
<message
from='pubsub.jabber.org'
to='maineboy@jabber.org'>
<event xmlns= 'http://jabber.org/protocol/pubsub#event' >
<items node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' >
<artist > Yes</artist>
<title > Heart of the Sunrise</title>
<source > Yessongs</source>
<track > 3</track>
<length > 686</length>
</tune>
</item>
</items>
</event>
</message>
.
.
.
]]></example>
2006-10-04 12:21:54 -04:00
<p > As mentioned in XEP-0060, the stanza containing the event notification or payload MAY also include 'replyto' data (as specified by the &xep0033; protocol) to provide an explicit association between the published data and the user:</p>
2006-10-02 18:22:13 -04:00
<example caption= "Event notification with extended stanza addressing" > < ![CDATA[
<message
from='pubsub.jabber.org'
to='maineboy@jabber.org'>
<event xmlns= 'http://jabber.org/protocol/pubsub#event' >
<items node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' >
<artist > Yes</artist>
<title > Heart of the Sunrise</title>
<source > Yessongs</source>
<track > 3</track>
<length > 686</length>
</tune>
</item>
</items>
</event>
<addresses xmlns= 'http://jabber.org/protocol/address' >
<address type= 'replyto' jid= 'juliet@capulet.com' />
</addresses>
</message>
]]></example>
2006-10-04 12:21:54 -04:00
<p > Naturally, further extensions could be included, e.g., using &xep0066; to specify a URL where one could buy the recording.</p>
2006-10-02 18:22:13 -04:00
<example caption= "Tune info with URL" > < ![CDATA[
<message
from='pubsub.jabber.org'
to='maineboy@jabber.org'>
<event xmlns= 'http://jabber.org/protocol/pubsub#event' >
<items node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' >
<artist > Yes</artist>
<title > Heart of the Sunrise</title>
<source > Yessongs</source>
<track > 3</track>
<length > 686</length>
<x xmlns= 'jabber:x:oob' >
<url > http://www.amazon.com/exec/obidos/ASIN/B000002J1Y</url>
</x>
</tune>
</item>
</items>
</event>
</message>
]]></example>
</section2>
<section2 topic= 'Stop Command' anchor= 'protocol-stop' >
<p > In order to indicate that the user is no longer listening to any tunes, the user's client SHOULD send an empty < tune/> element, which can be considered a "stop command" for user tunes:</p>
<example caption= 'User Publishes "Stop Playing" Information' > < ![CDATA[
<iq type= 'set'
from='stpeter@jabber.org/work'
to='pubsub.jabber.org'
id='tunes345'>
<pubsub xmlns= 'http://jabber.org/protocol/pubsub' >
<publish node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' />
</item>
</publish>
</pubsub>
</iq>
]]></example>
<example caption= 'Empty Tune Information is Delivered to All Subscribers' > < ![CDATA[
<message
from='pubsub.jabber.org'
to='maineboy@jabber.org'>
<event xmlns= 'http://jabber.org/protocol/pubsub#event' >
<items node= 'generic/tunes/stpeter@jabber.org' >
<item id= 'current' >
<tune xmlns= 'http://jabber.org/protocol/tune' />
</item>
</items>
</event>
</message>
.
.
.
]]></example>
</section2>
</section1>
<section1 topic= 'Implementation Notes' anchor= 'impl' >
<p > To prevent a large number of updates when a user is skipping through tracks, an implementation may wait several seconds before publishing new tune information.</p>
<p > If the length is unknown (e.g., the user is listening to a stream), the < length/> element SHOULD NOT be included.</p>
</section1>
<section1 topic= 'Security Considerations' anchor= 'security' >
2006-10-04 12:21:54 -04:00
<p > This protocol introduces no security considerations above and beyond those defined in <cite > Publish-Subscribe</cite> (XEP-0060).</p>
2006-10-02 18:22:13 -04:00
</section1>
<section1 topic= 'IANA Considerations' anchor= 'iana' >
2006-10-04 12:21:54 -04:00
<p > This document requires no interaction with &IANA; .</p>
2006-10-02 18:22:13 -04:00
</section1>
2006-10-04 12:21:54 -04:00
<section1 topic= 'XMPP Registrar Considerations' anchor= 'registrar' >
2006-10-02 18:22:13 -04:00
<section2 topic= 'Protocol Namespaces' anchor= 'registrar-ns' >
<p > The ®ISTRAR; includes 'http://jabber.org/protocol/tune' in its registry of protocol namespaces.</p>
</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='http://jabber.org/protocol/tune'
xmlns='http://jabber.org/protocol/tune'
elementFormDefault='qualified'>
<xs:annotation >
<xs:documentation >
The protocol documented by this schema is defined in
2006-10-04 12:21:54 -04:00
XEP-0118: http://www.xmpp.org/extensions/xep-0118.html
2006-10-02 18:22:13 -04:00
</xs:documentation>
</xs:annotation>
<xs:element name= 'tune' >
<xs:complexType >
<xs:sequence minOccurs= '0' >
<xs:element name= 'artist' type= 'xs:string' minOccurs= '0' />
<xs:element name= 'title' type= 'xs:string' minOccurs= '0' />
<xs:element name= 'source' type= 'xs:string' minOccurs= '0' />
<xs:element name= 'track' type= 'xs:string' minOccurs= '0' />
<xs:element name= 'length' type= 'xs:unsignedShort' minOccurs= '0' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
]]></code>
</section1>
2006-10-04 12:21:54 -04:00
</xep>