xmpp介绍与RFC3920学习(3)
时间:2010-04-02 来源:zlm8715
xmpp介绍与RFC3920学习(3)
1, Namespace Declarations(命名空间声明)
流元素必须拥有流命名空间声明和默认命名空间声明.
XMPP是一个简单的为了交换结构化信息而流化XML单元的专用协议,由于XML不需要解析任意和完全的XML文档,所以XMPP不需要支持下列XML特性。
a, comments(注释)
b, processing instructions(处理指令)
c, internal or external DTD subsets (内部或外部DTD子集)
d, internal or external entity references (内部或外部实体引用)
e, character data or attribute values containing unescaped characters
(字符数据或属性包含保留的字符) 2,XML Namespace Names and Prefixes(XML命名空间名称和前缀)
命名空间的基本功能是区分混在一起的词汇的词义。也就是分割为不同的词汇表。
a, Streams Namespace(流命名空间)
流命名空间声名必须在XML流头,流命名空间的名称一定是'http://etherx.jabber.org/streams'. <stream/>和它的字节点<features/><error/>必须符合流命名空间前缀,
b, Default Namespace(默认命名空间)
默认命名空间声明是必须的,使用于根流节点的第一级的子元素。在初始化流和响应流之间,命名空间声明必须相同,默认命名空间声明应用在流和流上的所有的节。
一个服务器实现必须支持下列两个默认命名空间:
o jabber:client -- 当在客户端和服务器通信时,这个默认命名空间被流使用。
o jabber:server -- 当在服务器之间通信时,这个默认命名空间被流使用。
一个客户端的实现必须支持'jabber:client'默认命名空间,
3,Stream Errors(流错误)
规则:a,假定所有的流级别的错误都是不可重现的,因此在流级别的错误发生时,实体发现错误时,必须发送给对方一个流错误。发送一个关闭</stream>标签。然后终止下层的TCP连接。
b,如果错误发生在流建立的时候。接受实体必须发送开始标签<stream>,并包含<error/>子元素还有关闭标签</stream>,然后终止下层的TCP连接。 4, Simplified Stream Examples(简单的流示例)
C:客户端 S:服务器端 一个正确例子,
A basic "session": C: <?xml version='1.0'?>
<stream:stream to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
... encryption, authentication, and resource binding ...
C: <message from='[email protected]' to='[email protected]' xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='[email protected]' to='[email protected]' xml:lang='en'>
S: <body>Neither, fair saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
5 一个发生错误的例子(缺少关闭标签)
A "session" gone bad: C: <?xml version='1.0'?>
<stream:stream to='example.com' xmlns='jabber:client' xmlns:stream=' http://etherx.jabber.org/streams' version='1.0'>
S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream=' http://etherx.jabber.org/streams' version='1.0'>
... encryption, authentication, and resource binding ...
C: <message xml:lang='en'> <body>Bad XML, no closing body tag! </message>
S: <stream:error> <xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
</stream:error>
S: </stream:stream> 2006.1.21 litzhang
流元素必须拥有流命名空间声明和默认命名空间声明.
XMPP是一个简单的为了交换结构化信息而流化XML单元的专用协议,由于XML不需要解析任意和完全的XML文档,所以XMPP不需要支持下列XML特性。
a, comments(注释)
b, processing instructions(处理指令)
c, internal or external DTD subsets (内部或外部DTD子集)
d, internal or external entity references (内部或外部实体引用)
e, character data or attribute values containing unescaped characters
(字符数据或属性包含保留的字符) 2,XML Namespace Names and Prefixes(XML命名空间名称和前缀)
命名空间的基本功能是区分混在一起的词汇的词义。也就是分割为不同的词汇表。
a, Streams Namespace(流命名空间)
流命名空间声名必须在XML流头,流命名空间的名称一定是'http://etherx.jabber.org/streams'. <stream/>和它的字节点<features/><error/>必须符合流命名空间前缀,
b, Default Namespace(默认命名空间)
默认命名空间声明是必须的,使用于根流节点的第一级的子元素。在初始化流和响应流之间,命名空间声明必须相同,默认命名空间声明应用在流和流上的所有的节。
一个服务器实现必须支持下列两个默认命名空间:
o jabber:client -- 当在客户端和服务器通信时,这个默认命名空间被流使用。
o jabber:server -- 当在服务器之间通信时,这个默认命名空间被流使用。
一个客户端的实现必须支持'jabber:client'默认命名空间,
3,Stream Errors(流错误)
规则:a,假定所有的流级别的错误都是不可重现的,因此在流级别的错误发生时,实体发现错误时,必须发送给对方一个流错误。发送一个关闭</stream>标签。然后终止下层的TCP连接。
b,如果错误发生在流建立的时候。接受实体必须发送开始标签<stream>,并包含<error/>子元素还有关闭标签</stream>,然后终止下层的TCP连接。 4, Simplified Stream Examples(简单的流示例)
C:客户端 S:服务器端 一个正确例子,
A basic "session": C: <?xml version='1.0'?>
<stream:stream to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
... encryption, authentication, and resource binding ...
C: <message from='[email protected]' to='[email protected]' xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='[email protected]' to='[email protected]' xml:lang='en'>
S: <body>Neither, fair saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
5 一个发生错误的例子(缺少关闭标签)
A "session" gone bad: C: <?xml version='1.0'?>
<stream:stream to='example.com' xmlns='jabber:client' xmlns:stream=' http://etherx.jabber.org/streams' version='1.0'>
S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream=' http://etherx.jabber.org/streams' version='1.0'>
... encryption, authentication, and resource binding ...
C: <message xml:lang='en'> <body>Bad XML, no closing body tag! </message>
S: <stream:error> <xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
</stream:error>
S: </stream:stream> 2006.1.21 litzhang
相关阅读 更多 +