    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: XML as a Model-View-Controller System for Documents</title>
        <link>http://accu.org/index.php/journals/690</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>


        <h2>Journal Articles</h2>


<div class="xar-mod-head"><span class="xar-mod-title">CVu Journal Vol 16, #4 - Aug 2004 + Programming Topics</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="http://accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="http://accu.org/index.php/journals/c76/">Journals</a>

                     &gt;                         <a href="http://accu.org/index.php/journals/c77/">CVu</a>

                     &gt;                         <a href="http://accu.org/index.php/journals/c101/">164</a>
                    (12)
<br />

                                            <a href="http://accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="http://accu.org/index.php/journals/c13/">Topics</a>

                     &gt;                         <a href="http://accu.org/index.php/journals/c65/">Programming</a>
                    (488)
<br />

                                            <a href="http://accu.org/index.php/journals/c101-65/">Any of these categories</a>

                    -                        <a href="http://accu.org/index.php/journals/c101+65/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;XML as a Model-View-Controller System for Documents</h1>
<p><strong>Author:</strong>&nbsp;Administrator</p>
<p>
<strong>Date:</strong> 03 August 2004 13:16:07 +01:00 or Tue, 03 August 2004 13:16:07 +01:00</p>
<p><strong>Summary:</strong>&nbsp;<p> In this article I will describe how an MVC approach to the generation of documents can yield the same benefits that are traditionally seen with this approach to software design, and will introduce some XML [XML][Harold-] tools that can support this method. Finally, I will look at some of the alternatives to XML that could achieve the same separation of concerns.</p></p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a>Models and
Views</h2>
</div>
<p>The Model-View-Controller (MVC) paradigm is well known by
programmers as a way of separating the logical internals of a
software system (the <span class="bold"><b>model</b></span>) from
the code concerned with presenting information to the user (the
<span class="bold"><b>view</b></span>). Any framework that
co-ordinates the interaction between models and views is termed a
<span class="bold"><b>controller</b></span>. This scheme has been
adopted by most modern development frameworks, since it helps
software to grow over time in a flexible way, and helps to
encapsulate changes. You can add new views to existing models
without having to change the models themselves, and business logic
can be modified without you needing to change the way it is
presented to the user.</p>
<p>Many programmers would rightly condemn code that comprised a
mishmash of logic and presentation, but they are content to produce
and consume documents that do precisely this. Memos, technical
notes, meeting minutes: these are the bread and butter of the
professional Software Engineer, and yet most documents are simply
dumped into a word processor and left to stagnate. In this article
I will describe how an MVC approach to the generation of documents
can yield the same benefits that are traditionally seen with this
approach to software design, and will introduce some XML [<a href=
"#XML">XML</a>][<a href="#Harold-">Harold-</a>] tools that can
support this method. Finally, I will look at some of the
alternatives to XML that could achieve the same separation of
concerns.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e40" id="d0e40"></a>The
Problem</h2>
</div>
<p>You may think that MVC is overkill for documents - after all, a
memo is simply text; there is only one view, and that's the
document you're looking at. However, what if you want to put a copy
on your company intranet? I daresay your word processor has a 'save
as HTML' facility. Good. What if you want to make all document
references into hyperlinks; or to change the copyright text in a
number of documents you've already saved as HTML; or to radically
change the style of every memo. All less good.</p>
<p>As an example, let's take a simple document type with which
we're all familiar: an ACCU book review. We already know about two
views that exist on these documents: the magazine text (lets assume
it's Rich Text Format), and the online review on the ACCU website
(in HTML). Remember that, as well as having two different formats,
the reviews can also have different content, since some reviews
have a short version published in C Vu and an extended version on
the Web site.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e47" id="d0e47"></a>XML
Solution</h2>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e50" id="d0e50"></a>Model</h3>
</div>
<p>The starting point for our XML solution is to develop a Document
Type Definition that describes the format of the raw information
from which we will generate our documents. Strictly speaking, we
could bypass this step, but then we would have no way of validating
the input document - we would just try to process whatever was
given. Note also that XML Schema [<a href=
"#XMLSchema">XMLSchema</a>][<a href="#Vlist">Vlist</a>] could have
been used to provide a more detailed and robust way of validating
input documents.</p>
<pre class="literallayout">
&lt;!ELEMENT bookreview (bookdetails, reviewdetails,
                      reviewbody)&gt;

&lt;!ELEMENT bookdetails EMPTY&gt;

&lt;!ATTLIST bookdetails title          CDATA #REQUIRED
                      author         CDATA #REQUIRED
                      isbn           CDATA #REQUIRED
                      publisher      CDATA #REQUIRED
                      pages          CDATA #REQUIRED
                      priceinpounds  CDATA #REQUIRED
                      priceindollars CDATA #REQUIRED&gt;

&lt;!ELEMENT reviewdetails EMPTY&gt;

&lt;!ATTLIST reviewdetails date     CDATA #REQUIRED
                        reviewer CDATA #REQUIRED&gt;

&lt;!ELEMENT reviewbody (para+)&gt;

&lt;!ELEMENT para (#PCDATA)&gt;

&lt;!ATTLIST para filter (shortonly | longonly) #IMPLIED&gt;
</pre>
<p>This simple DTD just says which XML elements are allowed in a
book review, and which attributes each of them may contain. Here is
an example review adhering to this DTD:</p>
<pre class="literallayout">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE BookReview SYSTEM &quot;BookReview.dtd&quot;&gt;
&lt;bookreview&gt;
  &lt;bookdetails title=&quot;How to Write a Book Review&quot;
               author=&quot;B. Worm&quot;
               isbn=&quot;0-123-45678-9&quot;
               publisher=&quot;A. B. Cee Ltd.&quot;
               pages=&quot;123&quot;
               priceinpounds=&quot;12.50&quot;
               priceindollars=&quot;16.00&quot;/&gt;
  &lt;reviewdetails date=&quot;2003-11-19&quot;
                 reviewer=&quot;Matthew Strawbridge&quot;/&gt;
  &lt;reviewbody&gt;
    &lt;para&gt;This is an excellent book that tells you
      all about how to review books.&lt;/para&gt;
    &lt;para filter=&quot;longonly&quot;&gt;You should buy this
      book because..., and finally because it's
      two inches thick so it must be good.&lt;/para&gt;
    &lt;para filter=&quot;shortonly&quot;&gt;Buy this book.&lt;/para&gt;
  &lt;/reviewbody&gt;
&lt;/bookreview&gt;
</pre>
<p>This example is a hypothetical review of the book <i class=
"citetitle">How to Write a Book Review</i> by B. Worm, which was
supposedly reviewed by me on the 19th November 2003. Note that the
final two paragraphs provide a long description for the Web and a
short description for the magazine respectively.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e72" id="d0e72"></a>Views</h3>
</div>
<p>From this single source, we want to generate the following two
documents. Don't worry if you're not familiar with RTF or XHTML -
the precise content that gets generated in each case is not that
important; the point is that radically different target documents
need to be generated from a single source.</p>
<div class="sect3" lang="en">
<div class="titlepage">
<h3><a name="d0e77" id="d0e77"></a>RTF for Print</h4>
</div>
<pre class="literallayout">
{\rtf
{\b How to Write a Book Review}
\par By B. Worm
\par A. B. Cee Ltd. ISBN: 0-123-45678-9, 123pp, UKP
12.50 [$16.00 (1.28)]
\par
\par Reviewed by Matthew Strawbridge on 2003-11-19
\par This is an excellent book that tells you all
about how to review books.
\par Buy this book.}
</pre></div>
<div class="sect3" lang="en">
<div class="titlepage">
<h3><a name="d0e82" id="d0e82"></a>XHTML for Web</h4>
</div>
<pre class="literallayout">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;!DOCTYPE html
  PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
  &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1/DTD/
                                 transitional.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;title&gt;
  Book Review - 
  How to Write a Book Review&lt;/title&gt;&lt;/head&gt;&lt;body&gt;
  &lt;p&gt;&lt;em&gt;How to Write a Book Review&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;By B. Worm&lt;/p&gt;
  &lt;p&gt;A. B. Cee Ltd.
     ISBN: 0-123-45678-9,  
     123pp,
     UKP 12.50
     [$16.00 (1.28)]
  &lt;/p&gt;&lt;hr/&gt;
  &lt;p&gt;Reviewed by Matthew Strawbridge on
     2003-11-19&lt;/p&gt;&lt;hr/&gt;
  &lt;p&gt;This is an excellent book that tells you all
     about how to review books.&lt;/p&gt;
  &lt;p&gt;You should buy this book because..., and
     finally because it's two inches thick so it
     must be good.&lt;/p&gt;   
&lt;/body&gt;&lt;/html&gt;
</pre></div>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e87" id="d0e87"></a>Controllers</h3>
</div>
<p>The main benefit of using XML to capture the model is the ease
with which it can be parsed, and reshaped into different formats.
This is done using XSLT [<a href="#XSLT">XSLT</a>][<a href=
"#Tidwell">Tidwell</a>], the Extensible Stylesheet Language for
Transformations. An XSLT stylesheet is an XML document that uses
pattern matching rules to transform an XML base document into some
other form. Here are the XSLT stylesheets required for transforming
our Bookreview base document into the two output types.</p>
<div class="sect3" lang="en">
<div class="titlepage">
<h3><a name="d0e98" id="d0e98"></a>XSLT for
Converting Bookreview to RTF</h4>
</div>
<pre class="literallayout">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;xsl:stylesheet
  xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
  version=&quot;1.0&quot;&gt;
  &lt;xsl:output method=&quot;text&quot;/&gt;

  &lt;!- RTF should not have any unintentional blanks,
      so strip them -&gt;
  &lt;xsl:strip-space elements=&quot;*&quot;/&gt;

  &lt;!- Template that matches the outer bookreview
      element and constructs an RTF document from
      it -&gt;
  &lt;xsl:template match=&quot;bookreview&quot;&gt;
         {\rtf&lt;xsl:apply-templates/&gt;}&lt;/xsl:template&gt;

   &lt;xsl:template match=&quot;bookdetails&quot;&gt;
&lt;!- Make the title bold -&gt;
{\b &lt;xsl:value-of select=&quot;@title&quot;/&gt;}
\par By &lt;xsl:value-of select=&quot;@author&quot;/&gt;
\par &lt;xsl:value-of select=&quot;@publisher&quot;/&gt;
     ISBN: &lt;xsl:value-of select=&quot;@isbn&quot;/&gt;,
     &lt;xsl:value-of select=&quot;@pages&quot;/&gt;pp,
     UKP &lt;xsl:value-of select=&quot;@priceinpounds&quot;/&gt;
     [$&lt;xsl:value-of select=&quot;@priceindollars&quot;/&gt;
     (&lt;xsl:value-of select=&quot;@priceindollars
                            div @priceinpounds&quot;/&gt;) ]
\par
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;reviewdetails&quot;&gt;
\par Reviewed by &lt;xsl:value-of select=&quot;@reviewer&quot;/&gt;
     on &lt;xsl:value-of select=&quot;@date&quot;/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;para&quot;&gt;
    &lt;!- Include paragraphs only if they either
        have no filter, or if the filter is set
        to 'shortonly' -&gt;
    &lt;xsl:if test=&quot;not(@filter) or
            @filter='shortonly'&quot;&gt;
\par &lt;xsl:value-of select=&quot;.&quot;/&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
<div class="figure"><a name="d0e103" id="d0e103"></a>
<div class="mediaobject c2"><img src="/var/uploads/journals/resources/xml_rtf_output.gif"
align="middle" alt="RTF output"></div>
<p class="title c3">Figure 1. RTF output</p>
</div>
</div>
<div class="sect3" lang="en">
<div class="titlepage">
<h3><a name="d0e109" id="d0e109"></a>XSLT for
Converting Bookreview to XHTML</h4>
</div>
<pre class="literallayout">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;xsl:stylesheet
  xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
  version=&quot;1.0&quot;&gt;
  &lt;xsl:output method=&quot;xml&quot;
    doctype-public=&quot;-//W3C//DTD XHTML 1.0
                                   Transitional//EN&quot;
    doctype-system=&quot;http://www.w3.org/TR/
             xhtml1/DTD/xhtml1/DTD/transitional.dtd&quot;
    encoding=&quot;ISO-8859-1&quot;
    indent=&quot;no&quot;/&gt;

  &lt;!- Template that matches the outer bookreview
      element and constructs an XHTML page from it-&gt;
  &lt;xsl:template match=&quot;bookreview&quot;&gt;
    &lt;html&gt;
      &lt;head&gt;
        &lt;title&gt;
         Book Review - 
         &lt;xsl:value-of select=&quot;bookdetails/@title&quot;/&gt;
        &lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;
        &lt;xsl:apply-templates/&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;bookdetails&quot;&gt;
    &lt;p&gt;&lt;em&gt;&lt;xsl:value-of select=&quot;@title&quot;/&gt;&lt;/em&gt;&lt;/p&gt;
    &lt;p&gt;By &lt;xsl:value-of select=&quot;@author&quot;/&gt;&lt;/p&gt;
    &lt;p&gt;
       &lt;xsl:value-of select=&quot;@publisher&quot;/&gt;
       ISBN: &lt;xsl:value-of select=&quot;@isbn&quot;/&gt;,  
       &lt;xsl:value-of select=&quot;@pages&quot;/&gt;pp,
       UKP &lt;xsl:value-of select=&quot;@priceinpounds&quot;/&gt;
       [$&lt;xsl:value-of select=&quot;@priceindollars&quot;/&gt;
       (&lt;xsl:value-of select=&quot;@priceindollars
                      div @priceinpounds&quot;/&gt;)
       ]
    &lt;/p&gt;
    &lt;hr/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;reviewdetails&quot;&gt;
    &lt;p&gt;Reviewed by &lt;xsl:value-of select=&quot;@reviewer&quot;/&gt;
       on &lt;xsl:value-of select=&quot;@date&quot;/&gt;&lt;/p&gt;
    &lt;hr/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;para&quot;&gt;
    &lt;!- Include paragraphs only if they either have
        no filter, or if the filter is set to
        'longonly' -&gt;
    &lt;xsl:if test=&quot;not(@filter) or
            @filter='longonly'&quot;&gt;
      &lt;p&gt;
        &lt;xsl:value-of select=&quot;.&quot;/&gt;
      &lt;/p&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
<div class="figure"><a name="d0e114" id="d0e114"></a>
<div class="mediaobject c2"><img src=
"resources/xml_html_output.gif" align="middle" alt=
"HTML output"></div>
<p class="title c3">Figure 2. HTML output</p>
</div>
</div>
<div class="sect3" lang="en">
<div class="titlepage">
<h3><a name="d0e120" id="d0e120"></a>Performing the
Transformation</h4>
</div>
<p>These files are only meant as a demonstration of the method, and
there are many improvements that could be made to create a better
system for realworld use:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p><tt class="literal">priceindollars</tt> should be #IMPLIED
(meaning optional), rather than #REQUIRED. In fact, the system
should be changed to cope with various types of currency.</p>
</li>
<li>
<p>It would be useful to add an enumerated summary, with options
such as 'highly recommended', 'recommended', 'not recommended' and
'recommended with reservations'.</p>
</li>
<li>
<p>Typically, you would want to batch process a number of reviews
at once (or even every existing review, in the case of applying an
updated template to the Web site). There should probably be an
outer wrapper, such as <tt class="literal">&lt;reviewset&gt;</tt>,
which can contain one or more <tt class=
"literal">&lt;review&gt;</tt> elements, and the XSLTs should handle
generating either one long document, or a separate document for
each review, from this collection of reviews. An alternative would
be to set up a make file, perhaps using Ant [<a href="Ant" target=
"_top">Ant</a>], which includes support for XSLT
transformations.</p>
</li>
<li>
<p>The dates need translating from <tt class=
"literal">YYYY-MM-DD</tt> to a format that is more pleasant to
read.</p>
</li>
<li>
<p>In many cases it may be better to write a single XSLT that will
convert from your bespoke format into Docbook, for which there are
already some comprehensive stylesheets for conversion into many
formats including HTML and PDF.</p>
</li>
</ul>
</div>
<p>As it is customary to say is such situations, these improvements
are left as an exercise for the reader.</p>
</div>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e157" id="d0e157"></a>
Alternatives</h2>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e160" id="d0e160"></a>Word Processor
Styles</h3>
</div>
<p>Most modern word processors support <span class=
"emphasis"><em>styles</em></span>, whereby a set of properties can
be assigned to segments of text. These styles can then be updated,
and the updates will be automatically applied to all text having
that style. While this follows the 'separation of concerns'
regarding content and presentation, there are several key areas in
which the XML method is to be preferred. The main difference is
that styles do not transform the contents of the document, so our
example using <tt class="literal">longonly</tt> and <tt class=
"literal">shortonly</tt> attributes for paragraphs could not be
implemented without the use of macros. It would also be difficult
to regenerate a batch of documents if the template changes,
especially if multiple <span class="emphasis"><em>Save
As</em></span> formats were needed.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e177" id="d0e177"></a>Microsoft Word
2003</h3>
</div>
<p>I have read about the XML support in Microsoft Office 2003, but
haven't used it myself. I would be interested to know if anyone
uses it in a similar fashion to that described here - at the very
least it promises to be a more user-friendly way of populating the
raw XML files than simply using a text editor.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e182" id="d0e182"></a>Final
Word</h2>
</div>
<p>Many software developers have a real loathing for any form of
documentation. ACCU members, generally being a well-read bunch, may
have less of an aversion, but one thing is clear - if you dislike
writing documents, then you'll really hate having to make minor
updates to several hundred of them by hand. By separating out the
content (model) from the presentation (view), and creating reusable
templates to generate one from the other, maintenance of an archive
of documents is greatly simplified. XML and XSLT can be used to
implement such an MVC treatment of documents.</p>
<p>As with most things in the world of computers, there is more
than one way to string a cat (or should that be to <tt class=
"function">cat.toString()</tt>?) I am not advocating that all
documents should be written in this way, but for cases where you
have lots of similar documents that do, or may, need to be rendered
in more than one format, this technique should save a lot of time
in the long-run at the expense of a little work up-front. Now,
where have I heard that before?</p>
</div>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e192" id="d0e192"></a>References</h2>
</div>
<div class="bibliomixed"><a name="XML" id="XML"></a>
<p class="bibliomixed">[XML] XML. <span class="bibliomisc"><a href=
"http://www.w3.org/XML/" target=
"_top">http://www.w3.org/XML/</a></span></p>
</div>
<div class="bibliomixed"><a name="Harold-" id="Harold-"></a>
<p class="bibliomixed">[Harold-] Elliotte Rusty Harold, W. Scott
Means. <span class="citetitle"><i class="citetitle">XML in a
Nutshell</i></span>, O'Reilly, 2002</p>
</div>
<div class="bibliomixed"><a name="XMLSchema" id="XMLSchema"></a>
<p class="bibliomixed">[XMLSchema] XML Schema. <span class=
"bibliomisc"><a href="http://www.w3.org/XML/Schema/" target=
"_top">http://www.w3.org/XML/Schema/</a></span></p>
</div>
<div class="bibliomixed"><a name="Vlist" id="Vlist"></a>
<p class="bibliomixed">[Vlist] Eric van der Vlist. <span class=
"citetitle"><i class="citetitle">XML Schema</i></span>, O'Reilly,
2002</p>
</div>
<div class="bibliomixed"><a name="XSLT" id="XSLT"></a>
<p class="bibliomixed">[XSLT] XSLT. <span class=
"bibliomisc"><a href="http://www.w3.org/Style/XSL/" target=
"_top">http://www.w3.org/Style/XSL/</a></span></p>
</div>
<div class="bibliomixed"><a name="Tidwell" id="Tidwell"></a>
<p class="bibliomixed">[Tidwell] Doug Tidwell. <span class=
"citetitle"><i class="citetitle">XSLT</i></span>, O'Reilly,
2001</p>
</div>
<div class="bibliomixed"><a name="Xalan" id="Xalan"></a>
<p class="bibliomixed">[Xalan] Xalan. <span class=
"bibliomisc"><a href="http://xml.apache.org/xalan/" target=
"_top">http://xml.apache.org/xalan/</a></span></p>
</div>
<div class="bibliomixed"><a name="Saxon" id="Saxon"></a>
<p class="bibliomixed">[Saxon] Saxon. <span class=
"bibliomisc"><a href="http://saxon.sourceforge.net" target=
"_top">http://saxon.sourceforge.net</a></span></p>
</div>
<div class="bibliomixed"><a name="Ant" id="Ant"></a>
<p class="bibliomixed">[Ant] Ant. <span class="bibliomisc"><a href=
"http://jakarta.apache.org/ant/index.html" target=
"_top">http://jakarta.apache.org/ant/index.html</a></span></p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
