<html>
At 12:16 PM 09/22/99 -0400, Hunter, David wrote:<br>
<blockquote type=cite cite>So even if you<br>
compress the files, the attribute version will be able to compress to
50%<br>
smaller than the other file.&nbsp; Again, 2KB isn't a lot, but if we're
talking<br>
megabytes in size, 50% is a lot.</blockquote><br>
I wrote a quick perl script to take /usr/dict/words and turn it into an
XML file, with some artificially generated &quot;attributes&quot;.&nbsp;
In the resulting file named attrib.xml, each &lt;word&gt; tag contains
the additional information as attributes.&nbsp; I did the same thing to
produce a file called child.xml, except that the additional information
is presented as a child element instead of as an attribute.&nbsp; Here
are the results:<br>
<br>
<tt>$ ./make.pl<br>
$ ls -l<br>
total 13004<br>
-rw-rw-r--&nbsp;&nbsp; 1 mnutter&nbsp; mnutter&nbsp;&nbsp; 5811852 Sep 22
13:16 attrib.xml<br>
-rw-rw-r--&nbsp;&nbsp; 1 mnutter&nbsp; mnutter&nbsp;&nbsp; 7445892 Sep 22
13:16 child.xml<br>
-rwxr-xr-x&nbsp;&nbsp; 1 mnutter&nbsp;
mnutter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 976 Sep 22 13:16 
make.pl<br>
$ gzip attrib.xml<br>
$ gzip child.xml<br>
$ ls -l<br>
total 1127<br>
-rw-rw-r--&nbsp;&nbsp; 1 mnutter&nbsp; mnutter&nbsp;&nbsp;&nbsp; 671039
Sep 22 13:16 attrib.xml.gz<br>
-rw-rw-r--&nbsp;&nbsp; 1 mnutter&nbsp; mnutter&nbsp;&nbsp;&nbsp; 472394
Sep 22 13:16 child.xml.gz<br>
-rwxr-xr-x&nbsp;&nbsp; 1 mnutter&nbsp;
mnutter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 976 Sep 22 13:16 
make.pl<br>
<br>
</tt>I used gzip as an example of off-the-shelf compression
technology.&nbsp; As you can see, even though the raw child.xml file is
larger, the compressed version is *smaller* than the corresponding
implementation with attributes.<br>
<br>
This may not be true in all cases, of course, but I expect it often will,
due to the way such compression algorithms work.<br>
<br>
For your reference, here is the Perl script I used to create the two
files:<br>
<br>
open WORDS, &quot;&lt;/usr/dict/words&quot; or die &quot;Couldn't open
dictionary.\n&quot;;<br>
open ATTRIB, &quot;&gt;attrib.xml&quot; or die &quot;Couldn't open
attrib.xml\n&quot;;<br>
open CHILD, &quot;&gt;child.xml&quot; or die &quot;Couldn't open
child.xml\n&quot;;<br>
<br>
@twenty_strings = qw(one two three four five six seven eight nine
ten<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
eleven twelve thirteen fourteen fifteen sixteen<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
seventeen eighteen nineteen twenty);<br>
<br>
print ATTRIB &quot;&lt;attrib&gt;\n&quot;;<br>
print CHILD &quot;&lt;child&gt;\n&quot;;<br>
<br>
while($word = &lt;WORDS&gt;)<br>
{<br>
&nbsp;&nbsp;&nbsp; $time = time();<br>
&nbsp;&nbsp;&nbsp; $timestr = localtime($time);<br>
&nbsp;&nbsp;&nbsp; $twenty = rand % 20;<br>
&nbsp;&nbsp;&nbsp; $twentystr = $twenty_strings[$twenty];<br>
&nbsp;&nbsp;&nbsp; print ATTRIB &lt;&lt;EOM;<br>
&nbsp; &lt;word time=&quot;$time&quot; timestr=&quot;$timestr&quot;
twenty=&quot;$twenty&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
twentystr=&quot;$twentystr&quot;&gt;$word&lt;/word&gt;<br>
EOM<br>
&nbsp;&nbsp;&nbsp; print CHILD &lt;&lt;EOM;<br>
&nbsp; &lt;word&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;time&gt;$time&lt;/time&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;timestr&gt;$timestr&lt;/timestr&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;twenty&gt;$twenty&lt;/twenty&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;twentystr&gt;$twentystr&lt;/twentystr&gt;<br>
&nbsp; &lt;/word&gt;<br>
EOM<br>
}<br>
<br>
print ATTRIB &quot;&lt;/attrib&gt;\n&quot;;<br>
print CHILD &quot;&lt;/child&gt;\n&quot;;<br>
<br>
close CHILD;<br>
close ATTRIB;<br>
close WORDS;<br>
<br>
<br>
<div>-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-</div>
<br>
<div>Mark Nutter, &lt;mnutter@fore.com&gt;</div>
<div>Internet Applications Developer</div>
<div>FORE Systems</div>
<div>Some people are atheists 'til the day they die.</div>
</html>