<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<?rfc toc="yes"?>

<rfc ipr="full2026">

	<front>
		<title>Jabber Protocol</title>
		
		<author initials="J." surname="Miller" fullname="Jeremie Miller">
			<organization>The Jabber.org Project</organization>
			<address>
				<postal>
					<street>414 DeLong St.</street>
					<city>Cascade</city> <region>IA</region>
					<code>52033</code>
					<country>US</country>
				</postal>
				<phone>319-852-3464</phone>
				<email>jeremie@jabber.org</email>
			</address>
		</author>

		<date month="June" year="2000"/>
		<area>Internet</area>

		<!-- tons of keywords.. we don't *have* to have any though -->
		<keyword>IM</keyword>
		<keyword>instant messaging</keyword>
		<keyword>XML</keyword>
		<keyword>Extensible Markup Language</keyword>

		<abstract><t>
			This memo presents an easily extendable <xref target="XML">XML</xref> protocol for Instant Messaging and Presence.
		</t></abstract>

	</front>

	<middle>

		<section title="Introduction">
			<t>
				This memo describes an <xref target="XML">XML</xref> protocol (referred to as the "Jabber protocol")
				for structured instant communication between Internet entities using <xref target="XMLStreams">XML Streams</xref>.
			</t>
			<t>
				The protocol described in this memo is not theoretical. All aspects of the protocol
				discussed in this memo have been implemented in the <xref target="GPL">GPL</xref>/<xref target="LGPL">LGPL</xref>
				licensed <eref target="http://jabber.org">Jabber Server</eref>.
			</t>
			<section title="Memo Goals">
				<t>
					The goals of this memo are to accuratly describe the implemented Jabber protocol and to provide short real-world 
					examples. Furthermore, this memo aims to point out areas in which the protocol
					may be extended by future developement or third parties.
				</t>
			</section>
			<section title="Protocol Goals">
				<t>
					The major goals of the Jabber protocol include:
					<list style="symbols">
						<t>Minimalistic</t>
						<t>Ease of implementation, understanding, and manipulation.</t>
						<t>Independent of transport and medium</t>
						<t>Future extensibility with little or no modification by client applications.</t>
						<t>Platform independence. The protocol should not be dependent in any way upon a certain operating
							system platform.</t>
					</list>
				</t>
			</section>
		</section>

		<section title="Conformance to RFC 2778 and RFC 2779">
			<t>
				The implemented protocol presented in this memo is in near conformance to
				<xref target="RFC2778">RFC 2778</xref>, "A Model for Presence and Instant Messaging" and
				<xref target="RFC2779">RFC 2779</xref>, "Instant Messaging / Presence Protocol Requirements." Notable exceptions to
				non-conformance are outlined in the following subsection. It should be noted that the Jabber protocol
				has been in evolution for approxiamtly two years as of the date of this memo, thus this protocol
				has not been designed in response to RFCs 2778 and 2779. 
			</t>
			<section title="Exceptions to Conformance (needs additional wording)">
				<t><list style="symbols">
					<t>RFC 2779, section 2.5 - Complete conformance with these requirements can be obtained
						by using a standard public key infrastructure such as GnuPG or PGP.</t>
					<t>RFC 2779, section 4.1, paragraph 10 regarding message formats based on MIME.</t>
					<t>RFC 2779, section 4.2 - Reliability. This type of guarantee of reliability can be
						obtained by creating a message structure based on the <xref target="iq">Info/Query</xref> structure.</t>
				</list></t>
			</section>
		</section>

		<section title="The error Element" anchor="error">
			<t>
				All of the main elements (<xref target="message">message</xref>, <xref target="iq">iq</xref>, and
				<xref target="presence">presence</xref>) return error messages using a standard error method.
			</t>
			<section title="Attributes">
				<t><list style="symbols">
					<t>code - a numerical error code coorisponding to a specific error description. The numerical codes used
						are nearly synchronous with HTTP error codes:
						<list style="symbols">
							<t>302 - Redirect</t>
							<t>400 - Bad Request</t>
							<t>401 - Unauthorized</t>
							<t>402 - Payment Required</t>
							<t>403 - Forbidden</t>
							<t>404 - Not Found</t>
							<t>405 - Not Allowed</t>
							<t>406 - Not Acceptable</t>
							<t>407 - Registration Required</t>
							<t>408 - Request Timeout</t>
							<t>500 - Internal Server Error</t>
							<t>501 - Not Implemented</t>
							<t>502 - Remote Server Error</t>
							<t>503 - Service Unavailable</t>
							<t>504 - Remote Server Timeout</t>
						</list>
					</t>
				</list></t>
			</section>
			<section title="Examples">
				<figure>
					<preamble>Message error:</preamble>
					<artwork><![CDATA[
<message to="hamlet@denmark" from="horatio@denmark" type="error">
  <body>Angels and Ministers of Grace, defend us!</body>
  <error code="502">Remote Server Error</error>
</message>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Presence error:</preamble>
					<artwork><![CDATA[
<presence to="hamlet@denmark" from="horatio@denmark" type="error">
  <error code="302">Redirect</error>
</presence>
					]]></artwork>
				</figure>
				<figure>
					<preamble>IQ Error:</preamble>
					<artwork><![CDATA[
<iq type="error" from="service.denmark" to="hamlet@denmark" id="1002">
  <query xmlns="jabber:iq:register">
    <name>hamlet</name>
    <email>hamlet@denmark</email>
    <password>gertrude</password>
    <key>106c0a7b5510f192a408a1d054150ed1065e255a</key>
  </query>
  <error code="502">Remote Server Error</error>
</iq>
					]]></artwork>
				</figure>
			</section>
		</section>

		<section title="The message Element" anchor="message">
			<t>
				The message structure is for sending regular instant messages between entities. Several message types are
				defined within the attributes.  In use, this element is analogous to an email message.
			</t>
			<section title="Attributes">
				<t><list style="symbols">
					<t>to -
						Specifies to whom the messages is intended to be delivered to.
					</t>
					<t>from -
						Specifies the sender of the message.
					</t>
					<t>type -
						Used to express the context as to what format the message should be displayed in.
						If no type is set, clients default to a type="normal". Values include:
						<list style="symbols">
							<t>normal - Single message dialog</t>
							<t>chat - Traditional two-way chat similiar to AIM or IRC CTCP Chat</t>
							<t>groupchat - Group interface similar to an IRC channel with multiple participants</t>
							<t>headline - Ticker or active list of items</t>
							<t>error - See <xref target="error">the error element</xref>.</t>
						</list>
					</t>
				</list></t>
			</section>
			<section title="Children">
				<t><list style="symbols">
					<t>body - Contains the textual contents of the message for user display. No attributes.</t>
					<t>subject - Contains the subject of the message. Similar to an email subject. No attributes.</t>
					<t>thread - 
						A random string generated by the originating client and copied back in replies. Used for tracking a conversation thread.
					</t>
					<t>error - See <xref target="error">the error element</xref>.</t>
				</list></t>
			</section>
			<section title="Examples">
				<t>The following examples have been server processed and contain the from attribute.</t>
				<figure>
					<preamble>A simple message:</preamble>
					<artwork><![CDATA[
<message to="horatio@denmark" from="hamlet@denmark">
  <body>Angels and Ministers of Grace, defend us!</body>
</message>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Complete chat message:</preamble>
					<artwork><![CDATA[
<message to="hamlet@denmark" from="horatio@denmark" type="chat">
  <subject>Plotting</subject>
  <body>Here, sweet lord, at your service.</body>
  <thread>100052</thread>
</message>
					]]></artwork>
				</figure>
			</section>
		</section>

		<section title="The presence Element" anchor="presence">
			<t>
				The presence element allows for entities to express exact presence information (online, offline, away, etc.)
				to "subscribed" (authorized) users. The server keeps track of who is authorized to view an entity's status and
				to whom presence updates need to be sent to.
			</t>
			<section title="Attributes">
				<t><list style="symbols">
					<t>to - Specifies to whome the presence is bound for. If none is specified, the server receives the presence.</t>
					<t>from - Who the presence is from.</t>
					<t>id - A unique identifier for the presence. Sender of the presence sets this attribute.</t>
					<t>type -
						Describes the type of presence. Allowable types include:
						<list style="symbols">
							<t>available - Default. Signals that the user is online.</t>
							<t>unavailable - Signals that the user is no longer available. Allows for offline options to be set
								(usually with x element extensions, see <xref target="extensions"/>).</t>
							<t>subscribe - An attempt to subscribe to a user's presence.</t>
							<t>subscribed - The subscribe attempt was successful.</t>
							<t>unsubscribe - An unsubscription request. The server handles the actual unsubscription, but clients
								receive for notification reasons.</t>
							<t>unsubscribed - A presence unsubscribe completed succesfully.</t>
							<t>probe - A query to a user's presence. This is used server-side only.</t>
							<t>error - See <xref target="error">the error element</xref>.</t>
						</list>
					</t>
				</list></t>
			</section>
			<section title="Children">
				<t><list style="symbols">
					<t>show - Describes a user's exact availability. Must be one of:
						<list style="symbols">
							<t>away - User is away from the client temporarily.</t>
							<t>chat - User is free to chat.</t>
							<t>xa - User is away for an extended period (eXtended Away).</t>
							<t>dnd - User does not wish to be disturbed (Do Not Disturb).</t>
						</list>
					</t>
					<t>status - Availability message. Used in conjunction with the show element to give a custom description of availability.</t>
				</list></t>
				<t>May also be extended with the x element. See <xref target="extensions"/>.</t>
			</section>
			<section title="Examples">
				<figure>
					<preamble>Initial presence sent to server upon login:</preamble>
					<artwork><![CDATA[
<presence/>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Request to subscribe to a user's presence:</preamble>
					<artwork><![CDATA[
<presence to="horatio@denmark" type="subscribe"/>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Response to a subscribe request:</preamble>
					<artwork><![CDATA[
<presence to="hamlet@denark type="subscribed"/>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Full blown presence:</preamble>
					<artwork><![CDATA[
<presence from="hamlet@denmark">
  <show>xa</show>
  <status>Gone to England</status>
</presence>
					]]></artwork>
				</figure>
			</section>
		</section>

		<section title="The iq Element" anchor="iq">
			<t>
				Info/Query is a simple "client/server" framework within the protocol. It structures a rudimentary
				conversation between any two entities and allows them to pass XML formatted queries and
				responses back and forth.
			</t>
			<section title="Attributes">
				<t><list style="symbols">
					<t>to - Specifies to whom the IQ is bound for.</t>
					<t>from - Specifies from whom the IQ is from.</t>
					<t>id - A unique identifier for the IQ for tracking the query exchange. Sender of the IQ sets this attribute.</t>
					<t>type -
						The type attribute has several preset values. Each indicate a distinct step within an IQ converstation.
						<list style="symbols">
							<t>get -
								Indicates that the current query is a question or search for information. Default, assumed if no
								value to the type attribute is given.
							</t>
							<t>error - The query failed. See <xref target="error">the error element</xref>.</t>
							<t>set - This query contains data intended to set values or replace existing values.</t>
							<t>result - 
								This is a successful response to a get/set query. The IQ usually contains no further
								information on a sucessful result.
							</t>
						</list>
					</t>
				</list></t>
			</section>
			<section title="Children">
				<t>
					In the strictest terms, the iq element contains no children. In operation, a query element is usually
					contained within the iq element. The query element is defined by its namespace. See <xref target="extensions"/>.
				</t>
			</section>
			<section title="Examples" anchor="iq-examples">
				<t>The following examples are distinct parts of an IQ conversation for registration with jabber:iq:auth.</t>
				<figure>
					<preamble>Client request for registration information to a server service (service.denmark)</preamble>
					<artwork><![CDATA[
<iq type="get" id="1001" to="service.denmark">
  <query xmlns="jabber:iq:register"/>
</iq>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Server response with registration fields required.</preamble>
					<artwork><![CDATA[
<iq type="result" from="service.denmark" to="hamlet@denmark" id="1001">
  <query xmlns="jabber:iq:register">
    <instructions>Choose a username and password to register with this server.</instructions>
    <name/>
    <email/>
    <password/>
    <key>106c0a7b5510f192a408a1d054150ed1065e255a</key>
  </query>
</iq>
					]]></artwork>
				</figure>
				<figure>
					<preamble>Client request to register for an account.</preamble>
					<artwork><![CDATA[
<iq type="set" to="service.denmark" from="hamlet@denmark" id="1002">
  <query xmlns="jabber:iq:register">
    <name>hamlet</name>
    <email>hamlet@denmark</email>
    <password>gertrude</password>
    <key>106c0a7b5510f192a408a1d054150ed1065e255a</key>
  </query>
</iq>
					]]></artwork>
				</figure>
			</section>
		</section>

		<section title="Extensions Through Namespaces" anchor="extensions">
			<t>
				To extend the base protocol for new capabilities, the protocol makes extensive use of
				<xref target="namespaces">XML Namespaces</xref>.
			</t>
			<section title="Info/Query Namespaces" anchor="extensions-iq">
				<t>
					Numerous <xref target="iq">Info/Query</xref> namespaces have been implemented to faciliate
					exchange of information between Jabber entities. Namespaces currently implemented within the
					Jabber server include:
					<list style="symbols">
						<t>Simple Client Authentication (jabber:iq:auth)</t>
						<t>Agent Properties (jabber:iq:agent)</t>
						<t>Registration Requests (jabber:iq:register)</t>
						<t>Roster (Contact List) management (jabber:iq:roster)</t>
						<t>Available Agents List (jabber:iq:agents)</t>
						<t>Out Of Band Data (jabber:iq:oob)</t>
						<t>Client Time (jabber:iq:time)</t>
						<t>Client Version (jabber:iq:version)</t>
						<t>Temporary vCard (vcard-temp)</t>
					</list>
					Note that the Temporary vCard namespace is being used until the vCard XML standard has been
					finalized.
				</t>
				<t>The following subsections describe the three most fundamental extensions.</t>
				<section title="Registration Request - jabber:iq:register">
					<t>
						Through jabber:iq:register, clients can register with the Jabber server itself or with new
						services.
					</t>
					<section title="Children">
						<t>
							Note that while numerous fields are available, only the ones returned by the server
							are required for registration.
							<list style="symbols">
								<t>username</t>
								<t>password</t>
								<t>name</t>
								<t>email</t>
								<t>address</t>
								<t>city</t>
								<t>state</t>
								<t>zip</t>
								<t>phone</t>
								<t>url</t>
								<t>date</t>
								<t>misc</t>
								<t>text</t>
								<t>instructions - contains server provided instructions for registration.</t>
								<t>key - a unique key provided by the server, required for the entire registration process.</t>
							</list>
						</t>
					</section>
					<section title="Examples">
						<t>
							A complete example is provided in the <xref target="iq-examples">IQ examples</xref>.
						</t>
					</section>
				</section>
				<section title="Simple Client Authentication - jabber:iq:auth">
					<t>
						The jabber:iq:auth namespaces provides a simple mechanism for clients to authenticate
						and create a resource representing their connection to the server.
					</t>
					<section title="Children">
						<t><list style="symbols">
							<t>username - the unique user name for this user.</t>
							<t>password - the secret key or passphrase for the user account.</t>
							<t>digest - send a password in a SHA1 hash instead of clear text password.</t>
							<t>resource - unique value to represent current connection.</t>
						</list></t>
					</section>
					<section title="Examples">
						<t>The following is a complete example of how a client authenticates with the server.</t>
						<figure>
							<preamble>Client sends user information:</preamble>
							<artwork><![CDATA[
<iq type="set" id="1001">
  <query xmlns="jabber:iq:auth">
    <username>hamlet</username>
    <password>gertrude</password>
	<resource>Castle</resource>
  </query>
</iq>
							]]></artwork>
						</figure>
						<figure>
							<preamble>Server confirms login:</preamble>
							<artwork><![CDATA[
<iq type="result" id="1001"/>
							]]></artwork>
						</figure>
					</section>
				</section>
				<section title="Roster (Contact List) Management - jabber:iq:roster">
					<t>
						Provides a simple method for server-side contact list management. Upon connecting to the
						server, clients should request for the roster using jabber:iq:roster. Since the roster
						may not be desirable for all clients (e.g., cellular phone client), the client request of
						the roster is optional.
					</t>
					<section title="Children">
						<t><list style="symbols">
							<t>item -
								a specific roster item (contact) has the following attributes:
								<list style="symbols">
									<t>jid - the complete JID (Jabber ID) of the user that this item represents</t>
									<t>subscription -
										the current status of the subscription related to this item. May have a value of:
										<list style="symbols">
											<t>none - no subscription.</t>
											<t>from - this item has a subscription to the user.</t>
											<t>to - the user has a subscription to this item.</t>
											<t>both - subscription is both to and from.</t>
											<t>remove - item is to be removed.</t>
										</list>
									</t>
									<t>ask -
										the current status of a request to this item. May be one of:
										<list style="symbols">
											<t>subscription - the user is asking this item for a subscription.</t>
											<t>unsubscription - the user is asking this item for an unsubscription.</t>
										</list>
									</t>
								</list>
								This element may contain one or more of the following element:
								<list style="symbols">
									<t>group - contains a user-specified user group name.</t>
								</list>
							</t>
						</list></t>
					</section>
					<section title="Examples">
						<figure>
							<preamble>Client request for current roster:</preamble>
							<artwork><![CDATA[
<iq type="get" id="1001">
  <query xmlns="jabber:iq:roster"/>
</iq>
							]]></artwork>
						</figure>
						<figure>
							<preamble>Server response to client query:</preamble>
							<artwork><![CDATA[
<iq type="result" id="1001">
  <query xmlns="jabber:iq:roster">
    <item jid="claudius@denmark" name="Uncle Claudius" subscription="from">
      <group>Family</group>
    </item>
    <item jid="horatio@denmark" name="Horatio" subscription="both">
      <group>Friends</group>
    </item> 
    <item jid="fortinbras@norway" name="Prince Fortinbras" subscription="none" ask="subscribe"/>
  </query>
</iq>
							]]></artwork>
						</figure>
						<figure>
							<preamble>Client adding new items and modifying an entry:</preamble>
							<artwork><![CDATA[
<iq type="set" id="1002">
  <query xmlns="jabber:iq:roster">  
    <item name="Rosencrantz" jid="rosencrantz@denmark">
      <group>Visitors</group>
    </item>
    <item name="Guildenstern" jid="guildenstern@denmark">
      <group>Visitors</group>
    </item>
    <item jid="claudius@denmark" name="King Claudius">
      <group>Family</group>
      <group>Royalty</group>
    </item>
  </group>
</iq>
							]]></artwork>
						</figure>
						<figure>
							<preamble>The server would then respond with the new roster information, plus an IQ result:</preamble>
							<artwork><![CDATA[
<iq type="set">
  <query xmlns="jabber:iq:roster">  
    <item jid="rosencrantz@denmark" name="Rosencrantz">
      <group>Visitors</group>
    </item>
    <item jid="guildenstern@denmark" name="Guildenstern" >
      <group>Visitors</group>
    </item>
    <item jid="claudius@denmark" name="King Claudius">
      <group>Family</group>
	  <group>Royalty</group>
    </item>
  </group>
</iq>
<iq type="result" id="1002"/>
							]]></artwork>
						</figure>
					</section>
				</section>
			</section>

			<section title="X Namespaces" anchor="extensions-x">
				<t>
					For sending information that does not require the IQ structure, the X namespace series has been
					implemented. Clients can use this type of namespaces to send URLs, Roster (Contact List) items,
					Offline Options and other information. The following X namespaces are implemented in the Jabber
					server:
					<list style="symbols">
						<t>Offline Options (jabber:x:offline)</t>
						<t>Delay Logging (jabber:x:delay)</t>
						<t>Extended Identity/Routing Persistence (jabber:x:ident)</t>
						<t>Out Of Band Data (File Transfers) (jabber:x:oob)</t>
						<t>Embedded Roster Items (jabber:x:roster)</t>
					</list>
				</t>
				<section title="Examples">
					<figure>
						<preamble>Sending an embedded roster item to a user:</preamble>
						<artwork><![CDATA[
<message to="hamlet@denmark" from="horatio@denmark">
  <subject>Visitors</subject>
  <body>This message contains roster items.</body>
  <x xmlns="jabber:x:roster">  
    <item jid="rosencrantz@denmark" name="Rosencrantz"><group>Visitors</group></item>
    <item jid="guildenstern@denmark" name="Guildenstern"><group>Visitors</group></item>
  </x>
</message>
						]]></artwork>
					</figure>
				</section>
			</section>
			<section title="Further Extensions">
				<t>
					Anyone can implement their own namespace extensions without breaking the protocol.
					If the extended data is properly presented (i.e. within an x element), the server
					will simply pass the extended information on to the client. Clients will ignore the
					extended data if they are not capable of understanding it.
				</t>
				<figure>
					<preamble>
						For instance, the W3C's <xref target="xhtml">XHTML</xref> namespace could easily be implemented
						within a regular Jabber message:
					</preamble>
					<artwork><![CDATA[
<message to="hamlet@denmark" type="chat" from="horatio@denmark">
  <subject>Plotting</subject>
  <body>
    <x xmlns:xhtml="http://www.w3.org/1999/xhtml">
      <xhtml:body>
        <xhtml:p style="font-size: 12pt; color: red;">
          Here, sweet lord, at your service.
        </xhtml:p>
      </xhtml:body>
    </x>
  </body>
  <thread>100052</thread>
</message>
					]]></artwork>
				</figure>
			</section>
		</section>

	</middle>

	<back>

		<references>
		
			<reference anchor="XML" target="http://www.w3.org/TR/1998/REC-xml-19980210">
				<front>
					<title>Extensible Markup Language (XML) 1.0</title>
					<author>
						<organization abbrev="W3C">World Wide Web Consortium</organization>
					</author>
					<date month="February" year="1998"/>
				</front>
				<seriesInfo name="W3C" value="xml"/>
			</reference>

			<reference anchor="XMLStreams" target="http://etherx.jabber.org/streams/">
				<front>
					<title>XML Streams</title>
					<author initials="J." surname="Miller" fullname="Jeremie Miller">
						<organization>The Jabber.org Project</organization>
					</author>
					<date month="May" year="2000"/>
				</front>
			</reference>

			<reference anchor="GPL" target="http://www.gnu.org/copyleft/gpl.html">
				<front>
					<title>GNU General Public License</title>
					<author>
						<organization>Free Software Foundation</organization>
					</author>
					<date month="June" year="1991"/>
				</front>
			</reference>
			
			<reference anchor="LGPL" target="http://www.gnu.org/copyleft/lgpl.html">
				<front>
					<title>GNU Library General Public License</title>
					<author>
						<organization>Free Software Foundation</organization>
					</author>
					<date month="June" year="1991"/>
				</front>
			</reference>

			<reference anchor="RFC2778" target="http://www.ietf.org/rfc/rfc2778.txt">
				<front>
					<title>A Model for Presence and Instant Messaging</title>
					<author initials="M." surname="Day" fullname="Mark Day">
						<organization>SightPath, Inc.</organization>
						<address>
							<email>mday@alum.mit.edu</email>
						</address>
					</author>
					<author initials="J." surname="Rosenberg" fullname="Jonathan Rosenberg">
						<organization>dynamicsoft</organization>
						<address>
							<email>jdrosen@dynamicsoft.com</email>
						</address>
					</author>
					<author initials="H." surname="Sugano" fullname="Hiroyasu Sugano">
						<organization>Fujitsu Laboratories Ltd.</organization>
						<address>
							<email>suga@flab.fujitsu.co.jp</email>
						</address>
					</author>
					<date month="February" year="2000"/>
				</front>
				<seriesInfo name="RFC" value="2778"/>
			</reference>
			
			<reference anchor="RFC2779" target="http://www.ietf.org/rfc/rfc2779.txt">
				<front>
					<title>A Model for Presence and Instant Messaging</title>
					<author initials="M." surname="Day" fullname="Mark Day">
						<organization>SightPath, Inc.</organization>
						<address>
							<email>mday@alum.mit.edu</email>
						</address>
					</author>
					<author initials="S." surname="Aggarwal" fullname="Sonu Aggarwal">
						<organization>Microsoft Corporation</organization>
						<address>
							<email>sonuag@microsoft.com</email>
						</address>
					</author>
					<author initials="G." surname="Mohr" fullname="Gordon Mohr">
						<organization/>
						<address>
							<email>gojomo@usa.net</email>
						</address>
					</author>
					<author initials="J." surname="Vincent" fullname="Jesse Vincent">
						<organization>Into Networks, Inc.</organization>
						<address>
							<email>jesse@intonet.com</email>
						</address>
					</author>
					<date month="February" year="2000"/>
				</front>
				<seriesInfo name="RFC" value="2779"/>
			</reference>
			
			<reference anchor="URI">
				<front>
					<title abbrev="URI">Uniform Resource Identifiers (URI): Generic Syntax</title>
						<author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
							<organization abbrev="W3C">World Wide Web Consortium</organization>
							<address>
								<email>timbl@w3.org</email>
							</address>
						</author>
						<author initials="R.T." surname="Fielding" fullname="Roy T. Fielding">
							<organization abbrev="UCI">University of California, Irvine</organization>
							<address>
								<email>fielding@ics.uci.edu</email>
							</address>
						</author>
						<author initials="L." surname="Masinter" fullname="Larry Masinter">
							<organization>Xerox PARC</organization>
							<address>
								<email>masinter@parc.xerox.com</email>
							</address>
						</author>
					<date month="August" year="1998"/>
				</front>
				<seriesInfo name="RFC" value="2396"/>
			</reference>

			<reference anchor="namespaces" target="http://www.w3.org/TR/1999/REC-xml-names-19990114/">
				<front>
					<title>Namespaces in XML</title>
					<author>
						<organization abbrev="W3C">World Wide Web Consortium</organization>
					</author>
					<date month="January" year="1999"/>
				</front>
				<seriesInfo name="W3C" value="xml-names"/>
			</reference>

			<reference anchor="xhtml" target="http://www.w3.org/TR/xhtml1/">
				<front>
					<title abbrev="XHTML">XHTML 1.0: The Extensible HyperText Markup Language</title>
					<author>
						<organization abbrev="W3C">World Wide Web Consortium</organization>
					</author>
					<date month="January" year="2000"/>
				</front>
				<seriesInfo name="W3C" value="xhtml1"/>
			</reference>
					
		</references>
		
		<section title="The Jabber Protocol DTD">
			<figure>
				<artwork><![CDATA[
<!--
    Jabber XML DTD
    By Julian "X-ViRGE" Missig
    julian@linuxpower.org
-->

<!--=========== The Main Elements =============-->

<!-- jabber, the root element -->
<!ELEMENT jabber (presence | iq | message)*>


<!-- presence, a subelement of jabber -->

<!ELEMENT presence (status? | priority? | show? | x*)*>
<!ATTLIST presence
  to          CDATA             #IMPLIED
  from	      CDATA		#IMPLIED
  type        (subscribe | subscribed | unsubscribe | unsubscribed | available | unavailable | probe) #IMPLIED
  >

<!ELEMENT status (#PCDATA)>

<!ELEMENT priority (#PCDATA)>

<!ELEMENT show (#PCDATA)> <!-- standard options are: chat, away, xa and dnd -->


<!-- message, a subelement of jabber -->

<!ELEMENT message (body? | x* | error* | subject? | thread? | priority?)*>
<!ATTLIST message
  to          CDATA             #IMPLIED
  from        CDATA             #IMPLIED
  id          ID
  type	      (normal | error | chat | groupchat | headline) #IMPLIED
  >

<!ELEMENT body (#PCDATA)>

<!ELEMENT error (#PCDATA)>

<!-- now using standard numerical error codes
	http://docs.jabber.org/general/errorcodes/ -->

<!ATTLIST error
  type        CDATA        #IMPLIED
  >


<!ELEMENT subject (#PCDATA)>

<!ELEMENT thread (#PCDATA)>

<!ELEMENT x (#PCDATA)>

<!-- iq, a subelement of jabber -->

<!ELEMENT iq (#PCDATA)>
<!ATTLIST iq
  to          CDATA        #IMPLIED
  from        CDATA        #IMPLIED
  id          CDATA	       #IMPLIED
  type	      (get | set | result | error)  #IMPLIED
  >
				]]></artwork>
			</figure>
		</section>

		<section title="Acknowledgments">
			<t>
				Of special note is Eliot Landrum &lt;eliot@landrum.cx> who prepared and edited this specification memo.
			</t>
			<t>
				The entire Jabber.org team has been actively involved in the development of this protocol, yet
				the following individuals have directly contributed greatly to the evolution of the protocol.
				<list>
					<t>Thomas Muldowney</t>
					<t>Thomas Charron</t>
					<t>Julian Missig</t>
					<t>Peter Millard</t>
				</list>
			</t>
		</section>
	</back>

</rfc>

