对xep-0030 服务发现的一点理解,属性查询
xep 0030对服务发现的理解,可以理解为文件系统查找过程,上篇讲目录 式查询,怎么区分查询结果是目录,还是文件呢,我们希望的是查询到文件,才是我们需要的“服务实体”
于是,我们希望得到上篇文章中查询结果的属性,在xmpp中,叫'http://jabber.org/protocol/disco#info'
要查询"某文件"的属性
我们发送如下:(注意,文件夹也是文件,所以,都可以被查询“属性”)
<iq type='get' from='romeo@montague.net/orchard' to='plays.shakespeare.lit' id='info1'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>
收到
<iq type='result' from='plays.shakespeare.lit' to='romeo@montague.net/orchard' id='info1'> <query xmlns='http://jabber.org/protocol/disco#info'> <identity category='conference' type='text' name='Play-Specific Chatrooms'/> <identity category='directory' type='chatroom' name='Play-Specific Chatrooms'/> <feature var='http://jabber.org/protocol/disco#info'/> 说明可以查询‘属性’ <feature var='http://jabber.org/protocol/disco#items'/> 说明可以浏览下一级目录 <feature var='http://jabber.org/protocol/muc'/> <feature var='jabber:iq:register'/> <feature var='jabber:iq:search'/> <feature var='jabber:iq:time'/> <feature var='jabber:iq:version'/> </query> </iq>
category为分类 ,type为类型,这两个听起来有点。。。一个文件,可以有多个category(分类),有多个type,
其中
category为主要的分类 ,category='directory'说明此"文件"为目录
category='conference'说明此'文件'为会议
还有其它程类,可以网上搜索一下
我们怎么才能确定 这查询到的是一个目录 属性呢,用category='directory'来确定
但是,是目录 ,就能查询他的子级吗?不行的,得看他的属性,看他是否能被查询子级目录,
category只是分类说明,真正的属性是feature 所指明的东西,
如果<feature var='http://jabber.org/protocol/disco#items'/>,说明可以查找下一级目录
xmpp规定,每个实体 必须 至少支持 'http://jabber.org/protocol/disco#info' 特性,
注意,你查询到的category='conference'(会议),却不一定能真正开始会议,为什么,因为得看属性,属性说明他所支持的协议
只有属性为<feature var='http://jabber.org/protocol/muc'/>才能开始会议的哟