[JDEV] id attr in message packets

Constantin Nickonov Nickonov at jabber.com
Tue Jul 16 08:59:50 CDT 2002


You could also make the 'thread' attribute hold more than one value (choose
your delimeter), i.e.,

  <thread>root;parent;grandparent;etc</thread>

Since your client need only communicate with others like it, you can both
generate and make sense of this value at any point.

> -----Original Message-----
> From: Sean Wheeler [mailto:swheeler at media.mit.edu]
> Sent: Monday, July 15, 2002 8:58 PM
> To: jdev at jabber.org
> Subject: Re: [JDEV] id attr in message packets
> 
> 
> 
> Thanks for the explanation. Your point about message ordering is well
> taken, I imagine many would complain if servers did not ensure ordered
> arrival.  I now understand the id tag is not really for pinning down
> messages in the conversation but more as a client 
> convenience. This sucks,
> so since I'm not building an IM client and I don't have to 
> interact with
> any other clients in my project I might have to veer from the 
> standard for
> my purposes.
> 
> I think my problem does exist and in fact is a general one if you
> want/need to think of an interchange as a nested tree 
> structure. A reply
> is a child node, and your point is well taken that preserving 
> ordering of
> messages from a single client helps a lot. But since the tree 
> is deeply
> nested, how can you make reference to any node in the tree?  My first
> interpretation of what a thread "should be" is a reference to the root
> node.  This is actually the case, but in a more limited way, since the
> protocol only creates a tree of depth 1.
> 
> One scheme allowing 'n-depth tree' conversations is for a 
> child to be able
> to identify its parent, and this is what I was looking at the 
> id tag for.
> Another more elegant scheme is to use a tag that refers to 
> the root node
> of the implicit tree structure, call it 'root', or 'conversation' or
> whatever, and stick it in an x tag in another namespace.  Given the
> protocol and the common usage of id, this creates the kind of tree I'm
> looking for, but there's no assurance that the tree structure is
> accurately represented if a third party that doesnt have the full
> conversation history is thrown in.  For this the implicit root of the
> conversation would have to identify itself somehow, either by adding
> another tag in the x namespace, setting thread and root to 
> the same value,
> etc...
> 
> I'll have to take a closer look at JEP-0033.
> 
> Sean
> 
> 
> On Mon, 15 Jul 2002, Ben Schumacher wrote:
> 
> > On Sun, 14 Jul 2002, Sean Wheeler wrote:
> > > On Sun, 14 Jul 2002, Jeremy Nickurak wrote:
> > > >
> > > > The id attribute is intended to be used so that the 
> sender and receiver
> > > > can refer to particular messages. For example, someone 
> might implement a
> > > > "addendum" message type/namespace that changes some 
> element of the
> > > > previous message:
> > > >
> > > > <message id="3" type="addendum" from="bar at media" to="foo at media">
> > > >    <x xmlns="jabber:x:addendum">
> > > >       <append id="1">
> > > >          See also http://somepage.com/ for more details.
> > > >       </append>
> > > >    </x>
> > > > </message>
> > > >
> > > > That way, the <append> tag's "id" attribute can be 
> uniquesly associated
> > > > with a particular mesage bar at media has already sent to 
> foo at media.
> > >
> > > Thanks!
> > >
> > > Yes, this is precisely the kind of thing i'm looking for. 
>  I also need the
> > > ability to refer to the reply that foo sends, and I can't 
> really figure
> > > out how to do this without some non-standard crutch.
> > >
> > > Maybe a rough ascii diagram helps.
> > >
> >    [...snip...]
> >
> > Sean-
> >
> > I think you are struggling to find a solution to a problem 
> that doesn't
> > really exist. Since all Jabber messages arrive in order (at 
> least with
> > current server implementations), there is no need to know 
> explicitly that
> > a user sends two messages as a reply to a single message 
> from the other
> > end. It is implicit that if a message is sent by bar to 
> foo, and then foo
> > sends two responses on the same <thread>, they are 
> obviously "replying" to
> > the original message by bar. In addition, id numbers used 
> in most clients
> > don't relate directly to conversations. Most client 
> libraries will simply
> > increase the value of the id each time a packet is sent. id's are
> > generally not intended for this purpose. In fact, there is 
> no guarantee
> > that other clients will behave in the way you have 
> described, and I would
> > even go so far as to venture a guess that very few currently do.
> >
> > For example, considering the following exchange:
> >
> > 1) foo sends a message to bar with id='1'
> > 2) bar replies to message from foo without an id
> > 3) foo sends an iq request in iq:register to component x with id='2'
> > 4) foo replies to message from bar with id='3'
> > 5) component x sends iq result to foo with id='2'
> > 6) bar replies to message from foo without an id
> >
> > ... etc.
> >
> > You'll notice that bar does not use id's in its message 
> packets. This
> > behavior can be expected, because it is considered an 
> optional attribute
> > in the spec. (see: 
> http://jabber.org/ietf/draft-miller-xmpp-core-00.txt)
> >
> > Basically, for the purposes of message threading, the 
> <thread> element is
> > the appropriate feature of the protocol to use. If this is 
> insufficient
> > for your needs, I suggest you look at JEP-0033. While this 
> JEP is still
> > experimental, it would provide you with the functionality 
> you need and
> > would save you from trying to overload another feature of 
> the protocol,
> > which could cause incompatibilities and issues with some clients.
> >
> > See JEP-0033: http://jabber.org/jeps/jep-0033.html
> >
> > Cheers,
> >
> > bs.
> >
> >
> > _______________________________________________
> > jdev mailing list
> > jdev at jabber.org
> > http://mailman.jabber.org/listinfo/jdev
> >
> 
> _______________________________________________
> jdev mailing list
> jdev at jabber.org
> http://mailman.jabber.org/listinfo/jdev
> 



More information about the JDev mailing list