<?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>Application-Specific Error Conditions</title>
  <abstract>This document defines a registry of application-specific error conditions.</abstract>
  &LEGALNOTICE;
  <number>0182</number>
  <status>Active</status>
  <type>Procedural</type>
  <sig>Standards</sig>
  <approver>Council</approver>
  <dependencies>
    <spec>XMPP Core</spec>
  </dependencies>
  <supersedes/>
  <supersededby/>
  <shortname>errors</shortname>
  <registry/>
  &stpeter;
  <revision>
    <version>1.1</version>
    <date>2008-03-05</date>
    <initials>psa</initials>
    <remark><p>Changed namespace from http://jabber.org/protocol/errors to urn:xmpp:errors.</p></remark>
  </revision>
  <revision>
    <version>1.0</version>
    <date>2006-05-16</date>
    <initials>psa</initials>
    <remark><p>Per a vote of the Jabber Council, advanced status to Active; also added example.</p></remark>
  </revision>
  <revision>
    <version>0.2</version>
    <date>2006-04-28</date>
    <initials>psa</initials>
    <remark><p>Added note about scope of registry.</p></remark>
  </revision>
  <revision>
    <version>0.1</version>
    <date>2006-03-23</date>
    <initials>psa</initials>
    <remark><p>Initial version.</p></remark>
  </revision>
  <revision>
    <version>0.0.1</version>
    <date>2006-03-21</date>
    <initials>psa</initials>
    <remark><p>First draft.</p></remark>
  </revision>
</header>
<section1 topic='Introduction' anchor='intro'>
  <p>&xmppcore; specifies that an XMPP error stanza may include a child element qualified by an XML namespace other than 'urn:ietf:params:xml:ns:xmpp-stanzas'. This enables any XMPP protocol extension to define its own application-specific error conditions, such as the following:</p>
  <example caption='An Application-Specific Error Condition (invalid-jid)'><![CDATA[
<iq type='error' from='pubsub.shakespeare.lit' to='francisco@denmark.lit/barracks' id='sub1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <subscribe node='blogs/princely_musings' jid='bernardo@denmark.lit'/>
  </pubsub>
  <error type='modify'>
    <bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
    <invalid-jid xmlns='http://jabber.org/protocol/pubsub#errors'/>
  </error>
</iq>
  ]]></example>
  <p>Although the inclusion of application-specific error conditions introduces a great deal of flexibility, it may also lead to confusion regarding possible conditions. Therefore, this document defines a registry of application-specific error conditions, to be maintained by the &REGISTRAR;. In addition, this document registers a namespace of 'urn:xmpp:errors' as a fallback namespace for generalized error conditions that are not specific to a particular protocol (e.g., &lt;stanza-too-big/&gt; as a particular form of the &notacceptable; condition).</p> 
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
  <section2 topic='Application-Specific Error Conditions Registry' anchor='registrar-conditions'>
    <p>The XMPP Registrar maintains a registry of application-specific error conditions (see &APPERRORS;).</p>
    <p>All application-specific error conditions that are defined in XMPP Extension Protocol specifications MUST be included in this registry. Application-specific error conditions that are defined outside of the XMPP Standards Foundation's standards process (see &xep0001;) MAY be included in this registry, but it is not required for them to be so registered.</p>
    <section3 topic='Registration Process' anchor='registrar-conditions-process'>
      &REGPROCESS;
      <code><![CDATA[
<condition>
  <ns>the XML namespace that qualifies the condition</ns>
  <element>the XML element of the error condition</element>
  <desc>a natural-language description of the error condition</desc>
  <doc>the document in which the condition is specified</doc>
</condition>
      ]]></code>
      <p>The registrant may register more than one condition at a time, each contained in a separate &lt;condition/&gt; element.</p>
    </section3>
  </section2>
  <section2 topic='Protocol Namespaces' anchor='registrar-ns'>
    <p>The &REGISTRAR; includes 'urn:xmpp:errors' in its registry of protocol namespaces.</p>
  </section2>
</section1>
<section1 topic='Security Considerations' anchor='security'>
  <p>This document introduces no known security vulnerabilities.</p>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
  <p>This document requires no interaction with &IANA;.</p>
</section1>
</xep>