RFC 3921 - Extensible Messaging and Presence Protocol (XMPP)(9)

时间:2006-10-31 来源: 作者: 点击:
xs:anynamespace=’##other’ minOccurs=’0’/ xs:elementref=’error’ minOccurs=’0’/ /xs:sequence xs:attributename=’from’ type=’xs:string’ use=’optional’/ xs:attributename=’id’ type=’xs:NMT
  
           <xs:any     namespace=’##other’
                       minOccurs=’0’/>
           <xs:element ref=’error’
                       minOccurs=’0’/>
         </xs:sequence>
         <xs:attribute name=’from’
                       type=’xs:string’
                       use=’optional’/>
         <xs:attribute name=’id’
                       type=’xs:NMTOKEN’
                       use=’required’/>
         <xs:attribute name=’to’
                       type=’xs:string’
                       use=’optional’/>
         <xs:attribute name=’type’ use=’required’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’error’/>
               <xs:enumeration value=’get’/>
               <xs:enumeration value=’result’/>
               <xs:enumeration value=’set’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute ref=’xml:lang’ use=’optional’/>
       </xs:complexType>
     </xs:element>

     <xs:element name=’error’>
       <xs:complexType>
         <xs:sequence  xmlns:err=’urn:ietf:params:xml:ns:xmpp-stanzas’>

           <xs:group   ref=’err:stanzaErrorGroup’/>
           <xs:element ref=’err:text’
                       minOccurs=’0’/>
         </xs:sequence>
         <xs:attribute name=’code’ type=’xs:byte’ use=’optional’/>
         <xs:attribute name=’type’ use=’required’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’auth’/>
               <xs:enumeration value=’cancel’/>
               <xs:enumeration value=’continue’/>
               <xs:enumeration value=’modify’/>
               <xs:enumeration value=’wait’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
       </xs:complexType>
     </xs:element>

   </xs:schema>

B.2  jabber:server

   <?xml version=’1.0’ encoding=’UTF-8’?>

   <xs:schema
       xmlns:xs=’http://www.w3.org/2001/XMLSchema’
       targetNamespace=’jabber:server’
       xmlns=’jabber:server’
       elementFormDefault=’qualified’>

     <xs:import namespace=’urn:ietf:params:xml:ns:xmpp-stanzas’/>

     <xs:element name=’message’>
        <xs:complexType>
           <xs:sequence>
             <xs:choice minOccurs=’0’ maxOccurs=’unbounded’>
               <xs:element ref=’subject’/>
               <xs:element ref=’body’/>
               <xs:element ref=’thread’/>
             </xs:choice>
             <xs:any     namespace=’##other’
                         minOccurs=’0’
                         maxOccurs=’unbounded’/>
             <xs:element ref=’error’
                         minOccurs=’0’/>
           </xs:sequence>

           <xs:attribute name=’from’
                         type=’xs:string’
                         use=’required’/>
           <xs:attribute name=’id’
                         type=’xs:NMTOKEN’
                         use=’optional’/>
           <xs:attribute name=’to’
                         type=’xs:string’
                         use=’required’/>
           <xs:attribute name=’type’ use=’optional’ default=’normal’>
             <xs:simpleType>
               <xs:restriction base=’xs:NCName’>
                 <xs:enumeration value=’chat’/>
                 <xs:enumeration value=’error’/>
                 <xs:enumeration value=’groupchat’/>
                 <xs:enumeration value=’headline’/>
                 <xs:enumeration value=’normal’/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute ref=’xml:lang’ use=’optional’/>
        </xs:complexType>
     </xs:element>

     <xs:element name=’body’>
       <xs:complexType>
         <xs:simpleContent>
           <xs:extension base=’xs:string’>
             <xs:attribute ref=’xml:lang’ use=’optional’/>
           </xs:extension>
         </xs:simpleContent>
       </xs:complexType>
     </xs:element>

     <xs:element name=’subject’>
       <xs:complexType>
         <xs:simpleContent>
           <xs:extension base=’xs:string’>
             <xs:attribute ref=’xml:lang’ use=’optional’/>
           </xs:extension>
         </xs:simpleContent>
       </xs:complexType>
     </xs:element>

     <xs:element name=’thread’ type=’xs:NMTOKEN’/>

     <xs:element name=’presence’>
       <xs:complexType>

         <xs:sequence>
           <xs:choice minOccurs=’0’ maxOccurs=’unbounded’>
             <xs:element ref=’show’/>
             <xs:element ref=’status’/>
             <xs:element ref=’priority’/>
           </xs:choice>
           <xs:any     namespace=’##other’
                       minOccurs=’0’
                       maxOccurs=’unbounded’/>
           <xs:element ref=’error’
                       minOccurs=’0’/>
         </xs:sequence>
         <xs:attribute name=’from’
                       type=’xs:string’
                       use=’required’/>
         <xs:attribute name=’id’
                       type=’xs:NMTOKEN’
                       use=’optional’/>
         <xs:attribute name=’to’
                       type=’xs:string’
                       use=’required’/>
         <xs:attribute name=’type’ use=’optional’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’error’/>
               <xs:enumeration value=’probe’/>
               <xs:enumeration value=’subscribe’/>
               <xs:enumeration value=’subscribed’/>
               <xs:enumeration value=’unavailable’/>
               <xs:enumeration value=’unsubscribe’/>
               <xs:enumeration value=’unsubscribed’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute ref=’xml:lang’ use=’optional’/>
       </xs:complexType>
     </xs:element>

     <xs:element name=’show’>
       <xs:simpleType>
         <xs:restriction base=’xs:NCName’>
           <xs:enumeration value=’away’/>
           <xs:enumeration value=’chat’/>
           <xs:enumeration value=’dnd’/>
           <xs:enumeration value=’xa’/>
         </xs:restriction>
       </xs:simpleType>
     </xs:element>

     <xs:element name=’status’>
       <xs:complexType>
         <xs:simpleContent>
           <xs:extension base=’xs:string’>
             <xs:attribute ref=’xml:lang’ use=’optional’/>
           </xs:extension>
         </xs:simpleContent>
       </xs:complexType>
     </xs:element>

     <xs:element name=’priority’ type=’xs:byte’/>

     <xs:element name=’iq’>
       <xs:complexType>
         <xs:sequence>
           <xs:any     namespace=’##other’
                       minOccurs=’0’/>
           <xs:element ref=’error’
                       minOccurs=’0’/>
         </xs:sequence>
         <xs:attribute name=’from’
                       type=’xs:string’
                       use=’required’/>
         <xs:attribute name=’id’
                       type=’xs:NMTOKEN’
                       use=’required’/>
         <xs:attribute name=’to’
                       type=’xs:string’
                       use=’required’/>
         <xs:attribute name=’type’ use=’required’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’error’/>
               <xs:enumeration value=’get’/>
               <xs:enumeration value=’result’/>
               <xs:enumeration value=’set’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute ref=’xml:lang’ use=’optional’/>
       </xs:complexType>
     </xs:element>

     <xs:element name=’error’>
       <xs:complexType>
         <xs:sequence  xmlns:err=’urn:ietf:params:xml:ns:xmpp-stanzas’>
           <xs:group   ref=’err:stanzaErrorGroup’/>
           <xs:element ref=’err:text’

                       minOccurs=’0’/>
         </xs:sequence>
         <xs:attribute name=’code’ type=’xs:byte’ use=’optional’/>
         <xs:attribute name=’type’ use=’required’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’auth’/>
               <xs:enumeration value=’cancel’/>
               <xs:enumeration value=’continue’/>
               <xs:enumeration value=’modify’/>
               <xs:enumeration value=’wait’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
       </xs:complexType>
     </xs:element>

   </xs:schema>

B.3  session

   <?xml version=’1.0’ encoding=’UTF-8’?>

   <xs:schema
       xmlns:xs=’http://www.w3.org/2001/XMLSchema’
       targetNamespace=’urn:ietf:params:xml:ns:xmpp-session’
       xmlns=’urn:ietf:params:xml:ns:xmpp-session’
       elementFormDefault=’qualified’>

     <xs:element name=’session’ type=’empty’/>

     <xs:simpleType name=’empty’>
       <xs:restriction base=’xs:string’>
         <xs:enumeration value=’’/>
       </xs:restriction>
     </xs:simpleType>

   </xs:schema>

B.4  jabber:iq:privacy

   <?xml version=’1.0’ encoding=’UTF-8’?>

   <xs:schema
       xmlns:xs=’http://www.w3.org/2001/XMLSchema’
       targetNamespace=’jabber:iq:privacy’

       xmlns=’jabber:iq:privacy’
       elementFormDefault=’qualified’>

     <xs:element name=’query’>
       <xs:complexType>
         <xs:sequence>
           <xs:element ref=’active’
                       minOccurs=’0’/>
           <xs:element ref=’default’
                       minOccurs=’0’/>
           <xs:element ref=’list’
                       minOccurs=’0’
                       maxOccurs=’unbounded’/>
         </xs:sequence>
       </xs:complexType>
     </xs:element>

     <xs:element name=’active’>
       <xs:complexType>
         <xs:simpleContent>
           <xs:extension base=’xs:NMTOKEN’>
             <xs:attribute name=’name’
                           type=’xs:string’
                           use=’optional’/>
           </xs:extension>
         </xs:simpleContent>
       </xs:complexType>
     </xs:element>

     <xs:element name=’default’>
       <xs:complexType>
         <xs:simpleContent>
           <xs:extension base=’xs:NMTOKEN’>
             <xs:attribute name=’name’
                           type=’xs:string’
                           use=’optional’/>
           </xs:extension>
         </xs:simpleContent>
       </xs:complexType>
     </xs:element>

     <xs:element name=’list’>
       <xs:complexType>
         <xs:sequence>
           <xs:element ref=’item’
                       minOccurs=’0’
                       maxOccurs=’unbounded’/>
         </xs:sequence>

         <xs:attribute name=’name’
                       type=’xs:string’
                       use=’required’/>
       </xs:complexType>
     </xs:element>

     <xs:element name=’item’>
       <xs:complexType>
         <xs:sequence>
           <xs:element name=’iq’
                       minOccurs=’0’
                       type=’empty’/>
           <xs:element name=’message’
                       minOccurs=’0’
                       type=’empty’/>
           <xs:element name=’presence-in’
                       minOccurs=’0’
                       type=’empty’/>
           <xs:element name=’presence-out’
                       minOccurs=’0’
                       type=’empty’/>
         </xs:sequence>
         <xs:attribute name=’action’ use=’required’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’allow’/>
               <xs:enumeration value=’deny’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute name=’order’
                       type=’xs:unsignedInt’
                       use=’required’/>
         <xs:attribute name=’type’ use=’optional’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’group’/>
               <xs:enumeration value=’jid’/>
               <xs:enumeration value=’subscription’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute name=’value’
                       type=’xs:string’
                       use=’optional’/>
       </xs:complexType>
     </xs:element>

     <xs:simpleType name=’empty’>
       <xs:restriction base=’xs:string’>
         <xs:enumeration value=’’/>
       </xs:restriction>
     </xs:simpleType>

   </xs:schema>

B.5  jabber:iq:roster

   <?xml version=’1.0’ encoding=’UTF-8’?>

   <xs:schema
       xmlns:xs=’http://www.w3.org/2001/XMLSchema’
       targetNamespace=’jabber:iq:roster’
       xmlns=’jabber:iq:roster’
       elementFormDefault=’qualified’>

     <xs:element name=’query’>
       <xs:complexType>
         <xs:sequence>
           <xs:element ref=’item’
                       minOccurs=’0’
                       maxOccurs=’unbounded’/>
         </xs:sequence>
       </xs:complexType>
     </xs:element>

     <xs:element name=’item’>
       <xs:complexType>
         <xs:sequence>
           <xs:element ref=’group’
                       minOccurs=’0’
                       maxOccurs=’unbounded’/>
         </xs:sequence>
         <xs:attribute name=’ask’ use=’optional’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>
               <xs:enumeration value=’subscribe’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
         <xs:attribute name=’jid’ type=’xs:string’ use=’required’/>
         <xs:attribute name=’name’ type=’xs:string’ use=’optional’/>
         <xs:attribute name=’subscription’ use=’optional’>
           <xs:simpleType>
             <xs:restriction base=’xs:NCName’>

               <xs:enumeration value=’both’/>
               <xs:enumeration value=’from’/>
               <xs:enumeration value=’none’/>
               <xs:enumeration value=’remove’/>
               <xs:enumeration value=’to’/>
             </xs:restriction>
           </xs:simpleType>
         </xs:attribute>
       </xs:complexType>
     </xs:element>

     <xs:element name=’group’ type=’xs:string’/>

   </xs:schema>

Appendix C.  Differences Between Jabber IM/Presence Protocols and XMPP

   This section is non-normative.

   XMPP has been adapted from the protocols originally developed in the
   Jabber open-source community, which can be thought of as "XMPP 0.9".
   Because there exists a large installed base of Jabber implementations
   and deployments, it may be helpful to specify the key differences
   between the relevant Jabber protocols and XMPP in order to expedite
   and encourage upgrades of those implementations and deployments to
   XMPP.  This section summarizes the differences that relate
   specifically to instant messaging and presence applications, while
   the corresponding section of [XMPP-CORE] summarizes the differences
   that relate to all XMPP applications.

C.1  Session Establishment

   The client-to-server authentication protocol developed in the Jabber
   community assumed that every client is an IM client and therefore
   initiated an IM session upon successful authentication and resource
   binding, which are performed simultaneously (documentation of this
   protocol is contained in [JEP-0078], published by the Jabber Software
   Foundation [JSF]).  XMPP maintains a stricter separation between core
   functionality and IM functionality; therefore, an IM session is not
   created until the client specifically requests one using the protocol
   defined under Session Establishment (Section 3).

C.2  Privacy Lists

   The Jabber community began to define a protocol for communications
   blocking (privacy lists) in late 2001, but that effort was deprecated
   once the XMPP Working Group was formed.  Therefore the protocol
   defined under Blocking Communication (Section 10) is the only such
   protocol defined for use in the Jabber community.

Contributors

   Most of the core aspects of the Extensible Messaging and Presence
   Protocol were developed originally within the Jabber open-source
   community in 1999.  This community was founded by Jeremie Miller, who
   released source code for the initial version of the jabberd server in
   January 1999.  Major early contributors to the base protocol also
   included Ryan Eatmon, Peter Millard, Thomas Muldowney, and Dave
   Smith.  Work specific to instant messaging and presence by the XMPP
   Working Group has concentrated especially on IM session establishment
   and communication blocking (privacy lists); the session establishment
   protocol was mainly developed by Rob Norris and Joe Hildebrand, and
   the privacy lists protocol was originally contributed by Peter
   Millard.

Acknowledgements

   Thanks are due to a number of individuals in addition to the
   contributors listed.  Although it is difficult to provide a complete
   list, the following individuals were particularly helpful in defining
   the protocols or in commenting on the specifications in this memo:
   Thomas Charron, Richard Dobson, Schuyler Heath, Jonathan Hogg, Craig
   Kaes, Jacek Konieczny, Lisa Dusseault, Alexey Melnikov, Keith
   Minkler, Julian Missig, Pete Resnick, Marshall Rose, Jean-Louis
   Seguineau, Alexey Shchepin, Iain Shigeoka, and David Waite.  Thanks
   also to members of the XMPP Working Group and the IETF community for
   comments and feedback provided throughout the life of this memo.

Author’s Address

   Peter Saint-Andre (editor)
   Jabber Software Foundation

   EMail: stpeter@jabber.org

Full Copyright Statement

   Copyright (C) The Internet Society (2004).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/S HE
   REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
   INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the IETF’s procedures with respect to rights in IETF Documents can
   be found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容