<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<META content="MSHTML 5.00.2314.1000" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2>Well, here's a target.&nbsp; Open season!</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Client to server only.&nbsp; This DTD is sufficient to 
validate the "client2server.txt" file from jabber.org.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Particular issues:</FONT></DIV>
<DIV><FONT size=2>Is "nick" required for a login packet, or 
optional?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Which, if any, fields in a message packet are required?&nbsp; 
Right now, this shows only "to" and "say" as required.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Notice how many elements have #PCDATA for content and no 
attributes.&nbsp; This usually indicates that the DTD cannot capture complete 
knowledge about the data.&nbsp; (Typically resulting in extra work for the XML 
application.)&nbsp; For instance, my instinct tells me that there are only 
certain allowed values for "icon" tags.&nbsp; This might better be captured as 
</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ENTITY %iconTypes 
"(online|away|happy|sad|hungry)"&gt;</FONT></DIV>
<DIV><FONT size=2>&lt;!ELEMENT icon EMPTY&gt;</FONT></DIV>
<DIV><FONT size=2>&lt;!ATTLIST icon</FONT></DIV>
<DIV><FONT size=2>&nbsp; type&nbsp; %iconTypes&nbsp; #REQUIRED</FONT></DIV>
<DIV><FONT size=2>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>This would require the icon type to be one of those in the 
list.&nbsp; (Priorities might be another good example of this.)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Is a "say" required for a status packet?&nbsp; (Currently 
shows as required.)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>Can a roster packet include multiple "get" elements?&nbsp; Can 
they be mixed with multiple "del" and "add" elements?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>
<DIV><FONT size=2>jabber.dtd</FONT></DIV>
<DIV>
<DIV><FONT size=2>----------Cut here-----------</FONT></DIV></DIV>
<DIV></FONT><FONT size=2>&lt;?xml version="1.0" 
encoding="UTF-8"?&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ENTITY % knownProtocolVersions 
"19990324"&gt;<BR>&lt;!ENTITY % currentProtocolVersion 
"19990324"&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT jabber 
(login|message|status|roster)*&gt;<BR>&lt;!ATTLIST jabber<BR>&nbsp; version 
CDATA #REQUIRED<BR>&nbsp; protocol (%knownProtocolVersions;) 
"%currentProtocolVersion;"<BR>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT login (user, pass, (nick)?)&gt;<BR>&lt;!ATTLIST 
login &gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT user (#PCDATA)&gt;<BR>&lt;!ATTLIST user 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT pass (#PCDATA)&gt;<BR>&lt;!ATTLIST pass 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT nick (#PCDATA)&gt;<BR>&lt;!ATTLIST nick 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT message ((to)+, (thread)?, (priority)?, 
(subject)?, say)&gt;<BR>&lt;!ATTLIST message &gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT to (#PCDATA)&gt;<BR>&lt;!ATTLIST to<BR>&nbsp; 
name CDATA&nbsp; #IMPLIED<BR>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT thread (#PCDATA)&gt;<BR>&lt;!ATTLIST thread 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT priority (#PCDATA)&gt;<BR>&lt;!ATTLIST priority 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT subject (#PCDATA)&gt;<BR>&lt;!ATTLIST subject 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT say (#PCDATA)&gt;<BR>&lt;!ATTLIST say<BR>&nbsp; 
type CDATA&nbsp; #IMPLIED<BR>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT status (say, (priority)?, 
(icon)?)&gt;<BR>&lt;!ATTLIST status &gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT icon (#PCDATA)&gt;<BR>&lt;!ATTLIST icon 
&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT roster ((add)*, (del)*, 
(get)*)&gt;<BR>&lt;!ATTLIST roster &gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT add (#PCDATA)&gt;<BR>&lt;!ATTLIST add<BR>&nbsp; 
group CDATA #REQUIRED<BR>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT del (#PCDATA)&gt;<BR>&lt;!ATTLIST del<BR>&nbsp; 
group CDATA #REQUIRED<BR>&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&lt;!ELEMENT get (#PCDATA)&gt;<BR>&lt;!ATTLIST get<BR>&nbsp; 
group CDATA #REQUIRED<BR>&gt;<BR></FONT></DIV></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>