<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../xsl/road-faq.xsl"?>

<rf:topic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://schemas.roadintranet.org/road-faq-1 ../xsl/road-faq.xsd"  
   xmlns:rf="http://schemas.roadintranet.org/road-faq-1"
   title=" XML, XSLT, CSS, Javascript" file="xml-faq.xml" fileid="$Logfile: $" date="$Date: 2010/01/03 $"
    author="$Author: bbarber $">
    <div><h4>XML, XSLT, CSS, Javascript  -- notes on using web technologies from Road
        Intranet</h4></div>
    <rf:copyright>
      <a href="../../../road/COPYING.txt">Copyright</a> (c) 2005-2010, C.B. Barber
   </rf:copyright>
   <rf:section id="URL" title="Useful URLs">
      <div class="twocol">
         <div class="col leftcol">
            XML
            <ul><li>
            <a href="http://xml.coverpages.org/">Cover Pages</a>
            </li><li>
               <a href="http://www.tbray.org/ongoing/When/200x/2004/02/20/GenxStatus">GenX</a> --
               Fast C library for generating XML, 
               <a href="http://home.comcast.net/~ajstarks/projects/genxsvg.html">SVG sample</a>
            </li><li>
               
            <a href="http://www.ibm.com/developerworks/xml/">IBM's DevelopWorks XML</a>
            </li><li>   
               <a href="http://www-128.ibm.com/developerworks/training/tutorials.html">IBM Tutorials</a>
            </li><li>   
               <a href="http://msdn.microsoft.com/xml/">Microsoft's XML Developer Center</a>
            </li><li>   
               <a href="http://www.xml.com">O'Reilly's XML.com</a>
             </li><li>  
                <a href="http://www.w3schools.com/default.asp">W3 Schools on XML</a>
            </li><li>   
               <a href="http://www.w3.org/TR/xml-c14n">XML Canonicalization</a>
            </li><li>   
               <a href="http://www.stg.brown.edu/service/xmlvalid">XML validation</a> at Brown
            </li><li>   
               <a href="http://www.cogsci.ed.ac.uk/%7Erichard/xml-check.html">XML validation</a> by Tobin
            </li><li>   
               <a href="http://www.zvon.org">ZVON</a> -- tutorials, references, cheatsheets on the XML galaxy
            </li><li>   
            </li><li>   
            </li></ul>
            
           XSLT
            <ul><li>
               <a href="http://www-128.ibm.com/developerworks/xml/library/x-toot/index.html">Toot-O-Matic</a> with PDF output
            </li><li>   
               <a href="http://www.mulberrytech.com/xsl/xsl-list/">XSL-List</a> and 
               <a href="http://www.biglist.com/lists/xsl-list/archives">archives</a>
            </li><li>   
               <a href="http://www.dpawson.co.uk">Dawson's XSLT Questions and Answers</a>
            </li><li>   
               <a href="http://www.jenitennison.com">Tennison's XSLT site</a>
            </li><li>
               <a href="http://www.biglist.com/lists/xsl-list/archives/">xsl-list</a>
               </li><li>
               </li><li>
               </li><li>
               </li><li>
                  
               </li></ul>
             
             HTML/HTTP
             <ul><li>
                 <a href="http://www.w3schools.com/tags/ref_byfunc.asp">HTML Tags</a>, 
                 <a href="http://www.w3schools.com/media/media_mimeref.asp">MIME types</a>
                 (W3Schools), <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes ">HTTP
                 codes</a>
             </li><li>
                 <a href="http://www.mnot.net/cache_docs/">Web Caching</a>
             </li><li>
                 <a
                     href="http://developers.sun.com/learning/javaoneonline/2006/webtier/TS-4251.pdf">Extreme
                 Web Caching</a> -- Jason Hunter at Javasoft
             </li><li>
                 <a href="http://curl.haxx.se/">cURL</a> [<a
                     href="http://en.wikipedia.org/wiki/CURL">wikipedia</a>] -- command-line access
                 to HTTP.  Includes libcurl for programmatic access.
             </li><li>
                 wiki -- 
                 <a href="http://meta.wikimedia.org/wiki/Help:Formula">Math formulas</a>
             </li></ul>
             
             Javascript
             <ul><li>
                 <a href="http://www.dynamicdrive.com/">DynamicDrive</a> -- good collection of
                 Javascript scripts.  
             </li><li>
                 <a href="http://www.javascriptkit.com/jsref/">Javascript Reference</a>
             </li><li>
                 <a href="http://www.javascripttoolbox.com/">Javascript Toolbox</a> -- with best
                 practises and <a href="http://www.ajaxtoolbox.com/">Ajax Toolbox</a>
             </li><li>
                 <a href="http://dojotoolkit.org/">dojo</a> -- javascript toolkit
             </li><li>
                 <a href="http://www.kryogenix.org/code/browser/">Kryogenix</a> -- Javascript
                 utilities and advice
             </li><li>
                 <a href="http://13thparallel.org/">13thParallel</a> -- multi-column layouts
             </li><li>
                 <a href="http://webfx.eae.net/dhtml/sortabletable/demos.html">SortableTable</a> --
                 also menus and columns
                 </li><li>
                 <rf:iref item="setup-firefox"/> -- especially the plugins
             </li><li>
                 <a href="http://bobbyvandersluis.com/articles/goodpractices.php">Ten good
                     practices</a> -- includes helpful links
             </li><li>
                 <a href="http://www.quirksmode.org/">QuirksMode</a> -- javascript compatibility and
                 advice.
                 </li><li>
                     Javascript <a href="http://jibbering.com/faq/">FAQ</a>, <a
                         href="http://www.jibbering.com/faq/faq_notes/faq_notes.html">notes</a>, and
                     <a
                         href="http://jibbering.com/2002/4/httprequest.html">XMLHttpRequest</a>
                     (AJAX)
                 </li><li>
                     Wikipedia on <a
                         href="http://en.wikipedia.org/wiki/Xmlhttprequest">XMLHttpRequest</a>
                 </li><li>
                     <a href="http://www.mnot.net/blog/2006/01/23/test_xmlhttprequest">Test</a>
                     XMLHttpRequest
                 </li><li>
                     <rf:iref item="XMLDocument"/> -- Microsoft's access to 
                     <a
                         href="http://msdn.microsoft.com/library/en-us/xmlsdk/html/eb7a2b76-49e9-424c-aa5a-d3cbeeb745e3.asp">XML
                         data islands</a>
                 </li><li>
                     
                 </li></ul>
             
            Schema
            <ul><li>
               <a href="http://www.xml.com/pub/a/2001/12/12/schemacompare.html">Comparing XML Schema
               Lanaguages</a>
            </li><li>
                <a
                    href="http://www.filigris.com/products/docflex_xml/xsddoc/examples/html/XMLSchema/index.html">XML
                Schema</a> -- generated from xsd by DocFlex/XML
            </li><li>
                <a href="http://www.adobe.com/products/xmp/">XMP</a> (<a
                    href="http://en.wikipedia.org/wiki/Extensible_Metadata_Platform">wikipedia</a>)-- file metadata from Adobe
            </li><li>
            </li></ul>
            
         </div>
         <div class="col rightcol">
            Web services
            <ul><li>
                <a href="http://msdn2.microsoft.com/en-us/webservices/aa740686.aspx">Advanced web services</a> from Microsoft
            </li></ul>
            
           XML Software
            <ul><li>
               <a href="http://xmlgraphics.apache.org/fop/">FOP</a> -- XSL-FO to PDF
            </li><li>   
               <a href="http://www.xml.com/resourceguide">O'Reilly's XML Resources</a>
            </li><li>   
               <a href="http://www.ascc.net/xml/resource/schematron/schematron.html">Schematron</a> -- for annotations
            </li><li>   
               <a href="http://tidy.sourceforge.net">Tidy</a> -- HTML to XHTML
            </li><li>   
               <a href="http://saxon.sourceforge.net/">Saxon</a> -- XSLT 1.0 and 2.0 processor
            </li><li>
                <a href="http://txt2html.sourceforge.net">txt2html</a> -- convert text to HTML or XHTML
            </li><li>
                MS Word to XML -- <a href="http://www.upcast.de/">Upcast</a>, <a
                    href="http://www.logictran.net">Logictran</a>, <a href="http://sourceforge.net/projects/majix/">Majix</a>
            </li><li>
                <a href="http://www.logilab.org/xmldiff">xmldiff</a> -- Python diff program
                producing XUpdate output.  Use 4update in <a
                    href="http://xmldb-org.sourceforge.net/xupdate/resources.html">4suite</a> to merge.
               </li><li>
            </li><li>   
               <a href="http://www.rpbourret.com/xml/XMLDatabaseProds.htm">Bourret's XML database products</a>
            </li><li>   
               <a href="http://www.xmlsoftware.com/">XML Software collection</a>
            </li><li>
                <a href="http://xalan.apache.org/">Xalan</a> --  XSLT processor from Apache
            </li><li>
                <a href="http://www.xslprofiler.org">catchXSL!</a> -- XSLT profiler
            </li><li>
                <a href="http://xslt-process.sourceforge.net">XSLT-process</a> -- XSLT debugging under emacs
            </li><li>
                <a href="http://freshmeat.net/projects/sablotron/">Sablotron</a> -- fast
                XSLT processor for simple transforms
            </li><li>
                <a href="http://xsh.sourceforge.net">XSH</a> -- XML Shell with tab completion for XPath. 
                View XML as a hierarchical file system.
            </li></ul>
            
            CSS
            <ul><li>
               <a href="http://www.westciv.com/style_master">Style Master</a> -- WYSIWYG editor for
               CSS style sheets
            </li><li>
                <a
                    href="http://www.microsoft.com/products/expression/en/web_designer/default.mspx">Microsoft
                    Expression</a> -- css and xhtml web design
                
            </li><li>
               <a href="http://maxdesign.com.au/">MaxDesign</a> -- CSS advice
            </li><li>
                <a href="http://meyerweb.com/eric/css/references/css2ref.html">CSS2 spec</a> -- from
                Eric
                Meyer
            </li><li>
                <a href="http://www.quirksmode.org/">QuirksMode</a> -- CSS compatibility and
                advice.
            </li><li>
                <a href="http://www.mezzoblue.com/css/cribsheet/">CSS cribsheet</a>
            </li><li>
                <a href="http://www.cssdrive.com/">CSS Drive</a> -- categorized CSS gallery and
                examples
            </li><li>
                <a href="http://www.highdots.com/css-editor/css_faq.html">style-sheets</a> -- FAQ
                and tutorials
            </li><li>
                <a href="http://nontroppo.org/wiki/WebDevToolbar">WebDevToolbar</a> -- Web developer
                toolbar and
                menu for Opera 
            </li><li>
                html.css -- Default css file from <code>Firefox/res/</code>.
                 </li></ul>
            
            XML/XSLT editors
            <ul><li>
               <rf:iref item="setup-oxygen"/> -- excellent editor and debugger. 
               Great example of a java app.  Dual structure and edit windows.  Intellisense.   Auto
               validate.  Good XSD support.  Text macros. Spell check.
            </li><li>   
               <a href="http://www.unipad.org">UniPad</a> -- free Unicode editor.  You will need to
                periodically restart the editor.  The registered version removes the session and
                size limits. 
            </li><li>
                <a href="http://www.topologi.com">Topologi Markup Editor</a> -- XML editor for developers
            </li><li>   
                <a href="http://www.morphon.com">Morphon</a> -- word processing XML editor with visible XML
                tags
            </li><li>   
                <a href="http://pollo.sourceforge.net">Pollo</a> -- open source, Java-based XML editor.  Tree-like
                display using frames.                
            </li><li>
                <a href="http://www.xsmiles.org">X-Smiles</a> -- XML browser for XForms and other XML
                standards.
            </li><li>   
            </li><li>   
            </li><li>   
                <a href="http://www.xmlcooktop.com">CookTop</a> -- free color-coded editor with
               validation, XSLT, some navigation, Help links from 2003.  No Intellisense or dual
               structure and edit windows.  Load xsl file first, then xml file.
            </li><li>   
               <a href="http://www.xmlspy.com">XmlSpy</a> -- lots of features.  
            </li><li>   
               <a href="http://www.stylusstudio.com">Stylus Studio</a> -- like XML Spy but not as
               many features.
            </li><li>
               Out-of-date -- Xray XML
            </li></ul>
         </div>
      </div>
    <div>
        . <!-- clear the two column display -->
    </div>
    
   </rf:section>
   <rf:section id="setup-XML" title="Setup for XML">
      <rf:item id="setup-oxygen" title="Setup Oxygen XML" date="Oct 2005" author="bbarber">
         <p><a href="http://www.oxygenxml.com">Oxygen</a> is a good XML editor, XSLT debugger, and
            XML file/dir diff.</p>
         <p>Setup Oxygen</p>
         <ul><li>
             Options->Preferences->Editor->Format -- Uncheck <code>Detect indent on open.</code>  Set tab-spacing
             as desired.
         </li><li>
             Options->Preferences->Editor->Format -- Check "Hard line wrap...".
         </li><li>
             Options->Preferences->Editor->Save -- Check "Enable automatic save"
          </li><li>
              Options->Preferences->Editor->Save -- Check "Check errors on save"
         </li><li>
             Options->Preferences->Editor->Spell Check -- Check "Automatic spell check" and "Spell check entire
            document"
         </li><li>
             Options->Preferences->Editor->Spell Check -- Check "Apply spell checking on entire
            document" (slow for large documents)
         </li><li>
             Options->Preferences->Editor->Code templates -- Add code fragments that you use all the time.  To
            insert a fragment, type the template name followed by ctrl-space.  Oxygen predefines
            templates for XSD and XSL.  Periodically export your code templates.  For example, define a template, 'ul', for a list and 'li' for
            additional list elements (<code>insert caret</code> on the first blank line).
         </li><li>
            Project->New -- create a 'Oxygen' project for frequently accessed files.  Add an XML file to the project by opening the file then clicking <code>Add Edited File</code> in the project panel.
            Save to your config directory.  It will reopen whenever Oxygen launches.
         </li><li>
            Perspective->Show view->Project -- also Outline -- you can edit via the outline view.
         </li><li>
            Periodically, close and reopen Oxygen.  It has some memory leaks that degrade
            performance over days or weeks.
         </li><li>
            Be careful of rebooting without saving Oxygen first.  It appears to ignore the shut
            messages.
            </li><li>
            </li><li>
               
         </li></ul>
      </rf:item>
      <rf:item id="setup-saxon" title="Setup Saxon XSLT" date="Jan 2006" author="bbarber">
         <p><a href="http://saxon.sourceforge.net/">Saxon</a> is an XSLT and XSLT 2.0 processor</p>
            <ul><li>
               Copy saxon8.jar from home page, or Oxygen/jre/lib.  The directory name can not contain spaces
            </li><li>
               java  -jar dir/saxon8.jar   [options]   source-document   stylesheet   [ params...]
            </li></ul>
      </rf:item>
      
   </rf:section>
<rf:section id="XHTML-faq" title="XHTML/CSS/Javascript Questions and Answers">
   <rf:item id="XHTML-template" title="XHTML template" date="Jan 2006" author="bbarber">
      XHTML files should use the following template <rf:iref item="wykeC_2005" page="12-16"/>
      <ul><li>
         To avoid quirks-mode in IE 6, all XHTML pages should start with
         <blockquote><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"></code></blockquote>
         <p>XSLT does not allow literal DOCTYPE declarations.  Instead use the following</p>
         <blockquote><code>&lt;xsl:output method="xhtml" doctype-system="http://www.w3.org/TR/html4/strict.dtd" 
            doctype-public="-//W3C//DTD HTML 4.01//EN" indent="yes"  omit-xml-declaration="yes"/>
         </code></blockquote>
         <p>For other DOCTYPE's, see <a href="http://www.htmlhelp.com/tools/validator/doctype.html">Choosing a DOCTYPE</a></p>
      </li><li>
         Immedeatly after the DOCTYPE, declare the XML namespace <code>
            &lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"></code>
      </li><li>
         After the TITLE element, declare the content type<code>
         &lt;meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
            &lt;meta http-equiv="Content-Language" content="en-us" /></code>
      </li><li>
         In summary
         <pre>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
&lt;head>
&lt;title>....&lt;/title>
&lt;meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
&lt;meta http-equiv="Content-Language" content="en-us" />
&lt;/head>
&lt;body>
   ...
&lt;/body>
&lt;/html>   
</pre>
         </li><li>
         <a href="http://www.htmlhelp.com/tools/validator/index.html.en">XHTML validator</a> -- from
         the Web Design Group
      </li></ul>
   </rf:item>
    <rf:item id="xhtml-faq" title="XHTML Notes" date="Jan 2006" author="bbarber">
        <p>Some notes</p>
        <ul><li>
            col -- Firefox doesn't appear to fully support the <code>col</code> element.   It
            recognizes <code>width</code>, but not <code>text-align</code>.    Neither browser
            supports <code>colspan="0"</code> to span to the end of a colgroup.
        </li><li>
            &amp;lt; -- To output entity references with XSLT, use <code>&lt;xsl:text
                disable-output-escaping="yes">&amp;gt;&lt;/xsl:text></code>
        </li><li>
            XHTML does not include the entity reference &amp;nbsp; for non-breaking space.  Nbsp is
            useful for compound words and explicit control of spacing.  Add the following DTD to your
            header.  Other useful entities include copyright (#169;) and mdash (#8212).
            <code>
                &lt;!DOCTYPE root [
                &lt;!ENTITY nbsp "&amp;#160;">
                ]>
            </code>
        </li><li>
            External entities allow easy inclusion of one file inside another file.  
            <code>
                &lt;!DOCTYPE root [
                &lt;!ENTITY chapter3 SYSTEM "chapters/chapter3.xml">
                ]>
                ...
                &amp;chapter3;
            </code>
        </li><li>
            To automatically produce character references for multi-byte characters, specify ASCII
            as the output encoding (&lt;xsl:output ... encoding="US-ASCII" ...>) <rf:iref item="kirsD_2004"
                page="228"/>
        </li><li>
        </li><li>
        </li><li>
        </li><li>
        </li><li>
        </li></ul>
    </rf:item>
    <rf:item id="javascript-debug" title="Javascript debugging in IE" date="Feb 2006" author="bbarber">
        <ul><li>
            <a href="http://blogs.msdn.com/ie/archive/2004/10/26/247912.aspx">IEBlog on script
                debugging</a> -- good introduction to debugging IE scripts [wwong]
        </li><li>
            IE requires the closing script element (&lt;/script>) for Javascript.
        </li><li>
            <a
                href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99">Microsoft
                Script Debugger</a> -- Standalone debugger if you do not have DevStudio.  In
            any case, you need to uncheck Tools->Internet Options->Advanced->Disable script debugging
        </li></ul>
        <p>IE has a nice integration with Dev Studio for Javascript debugging. </p>
        <ul><li>
            Script Explorer -- Open <code>Debug->Windows->Script Explorer</code> ("Running
            Documents" in DevStudio 2003).   If it is not
            available, use <code>Tools->Import and Export Settings</code> to change your settings
            to <code>Web development</code>.
        </li><li>
            IE->View->Script Debugger->Break at next statement -- On break, select your debugger. 
            DevStudio will attach to the html file.
        </li><li>
            DevStudio attach debug -- Tools->Debug Processes->select IExplore->Attach --  After attaching,
            <code>Script Explorer</code> should show your IE page.   If not, close IE and start
            over.  You can set breakpoints in the
            Javascript code, view
            variables, etc. 
        </li><li>
            DevStudio edit/debug -- Stop the debugger, edit the Javascript file, refresh the
            browser, reattach the debugger.
         </li><li>
                DevStudio missing step-into-- If DevStudio does not show "Step into", select from
                Toolbar->Add/Remove buttons->Customize->Commands->Debug.
         </li><li>
             [Sept 2006 cbb] -- The interface can get hosed.    Reboot?
            </li><li>
            </li><li>
            </li><li>
                
            </li></ul>
    </rf:item>
    <rf:item id="css-faq" title="CSS Notes" date="Jan 2006" author="bbarber">
        <ul><li>
            CSS formating -- Consider using the following formating style (Style Master --
            File->Edit Options->Formating)      <pre>
  h1 {
                text-align: left;
                margin-top: 20px;
  }
      </pre>
        </li><li>
            <a href="http://www.bbd.com/stylin/">stylin' CSS</a> -- Wyke-Smith's book <i>stylin'
                CSS</i> is an excellent introduction [<rf:iref item="wykeC_2005" title="wykeC_2005"/>].  His web site contains templates and links.  A
            good starting point.
        </li><li>
            Get rid of the default browser settings by starting CSS files with <code>body {font: 1em verdana, arial, sans-serif;}
                * {margin:0; padding:0;}
            </code> <rf:iref item="wykeC_2005" page="129"/>
        </li><li>
            Debugging CSS -- Use the Web Developer plugin from <rf:iref item="setup-firefox"/>.   
            <code>View style information</code> shows the class hierarchy and active definitions
            for each element.
        </li><li>
            res/html.css -- For a quick introduction, look at the default style sheet for html
            formating in  <rf:iref item="setup-firefox"/>
        </li><li>
            IE6 quirks -- Floating divs not cleared correctly  <a href="http://www.positioniseverything.net/easyclearing.html">http://www.positioniseverything.net/easyclearing.html</a>
        </li></ul>
    </rf:item>
</rf:section>
    <rf:section id="XSLT-XPATH-faq" title="XSLT and XPATH FAQ">
        <rf:item id="XSLT" title="XSLT" date="Oct 2005" author="bbarber">
            <p><b>XSLT</b> is an XML standard for transforming XML documents into XML, HTML, and text. <rf:iref item="lenzE_2005" page="23-41"/>, <rf:iref item="haroE_2002" page="430-457"/></p>
            <p>To quickly learn XSLT, read <rf:iref item="lenzE_2005"/> followed by skimming <rf:iref
                item="kayM_2004b"/>.  To learn XSLT is a production environment, see <rf:iref
                    item="kirsD_2004"/></p>
            <p>XSLT 2.0 has  many useful extensions, see <rf:iref item="lenzE_2005" page="108-158"/>.  Each XSLT processor implements various extensions, see 
                <a href="http://www.exslt.org/">EXSLT</a> for a repository.
            </p>
            <p>For .NET programming, see <rf:iref item="espoD_2003" page="292"/></p>
            <ul><li>
                <b>XslTransform threading</b>.  XslTransform is thread-save only during transform.  Load() and other methods must be single-threaded. <rf:iref item="espoD_2003" page="309"/>  
            </li><li>
            </li><li>
            </li><li>
            </li><li>
            </li><li>
            </li><li>
            </li><li>
            </li><li>
                
            </li></ul>
            
        </rf:item>
        <rf:item id="XSLT2" title="XSLT 2.0" date="Mar 2006" author="bbarber">
            <p><b>XSLT 2.0</b> is a major upgrade of XSLT.
                See <rf:iref item="lenzE_2005" page="108-158"/>, <rf:iref item="kayM_2004b"/>,
                and <rf:iref
                    item="kirsD_2004"/>.
            </p>
            <p>New features in XSLT 2.0</p>
            <ul><li>
                Substituition group -- Write templates for elements that do not exist yet
                <rf:iref item="kayM_2004b" page="151-154"/>                  
            </li><li>
                Typed variables and parameters -- Use the <b>as</b> attribute to declare the data
                type of a variable.  The basic types (e.g., xs:string) follow XML Schema. 
                <rf:iref item="kayM_2004b" page="154-159"/>                  
                
            </li><li>
            </li><li>
            </li></ul>
        </rf:item>
        
        <rf:item id="XSLT-namespace" title="Define an XSLT namespace for the input document"
            date="Oct 2007"   author="bbarber">
            <p>If the input document defines a default namespace, the XSLT must assign a namespace
                prefix for its XPATH expressions.   For example, an XHTML document requires 
                <code>&lt;xsl:stylesheet ... xmlns:xh="http://www.w3.org/1999/xhtml"></code>.  Alternatively, in XSLT 2, define
                <code>xpath-default-namespace="..."</code>
            </p>
        </rf:item>
        <rf:item id="useful-xpath" title="Some useful XPATH expressions" date="Nov 2005"
            author="bbarber">
            <ul><li>
                Does the element contain text?  -- <code>normalize-space(text())!=''</code>
            </li><li>
            </li><li>
                coalesce -- For single element values, the equivalent of coalesce in XPath is  ($valueA, $valueB)[1]
            </li></ul>
        </rf:item>
    </rf:section>
   <rf:section id="XML-faq" title="XML FAQ" order="sorted">
     <rf:item id="assoc-xsd" title="Associate XML schema and namespace with file" date="Dec 2005"
        author="bbarber">
        <p>To associate an XML schema file, you need a schema name, a file path, and a namespace
           name.  The schema name and namespace can be the same.  For example, this file has the
           following root element:</p>
        <blockquote><code>
           &lt;rf:topic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           <br/>xsi:schemaLocation="http://schemas.roadintranet.org/road-faq-1 ../xsl/road-faq.xsd"  
           <br/>xmlns:rf="http://schemas.roadintranet.org/road-faq-1"
        </code></blockquote>
     </rf:item>
      <rf:item id="xml-convert" title="Convert rough HTML into XML" date="Oct 2005" author="bbarber">
         <p>Use <a href="http://tidy.sourceforge.net">HTML Tidy</a> to convert raw html (e.g., with unclosed &lt;p> and &lt;li> tags) to xml.   <code>tidy file.html >file.xml</code></p>
      </rf:item>
      <rf:item id="useful-xpath" title="Some useful XPATH expressions" date="Nov 2005"
         author="bbarber">
         <ul><li>
            Does the element contain text?  -- <code>normalize-space(text())!=''</code>
         </li><li>
         </li><li>
             coalesce -- For single element values, the equivalent of coalesce in XPath is  ($valueA, $valueB)[1]
         </li></ul>
      </rf:item>
      <rf:item id="for-xml" title="Using FOR XML to ouput sql queries as xml" date="Dec 2005"
         author="jlew">
         <p>SQL Server 2000 introduced the 'for xml' output format for SELECT.  SQL Server 2005 adds
         a number of improvements</p>
         <ul><li>
            To output XML -- Prefix the SELECT command with <code>:XML ON</code> and use  <code>sqlcmd</code> to run your query.  
            You must use a script file (sqlcmd assumes an interactive session if stdin contains
            multiple lines)
            For example
<pre>
   :XML ON
   select * from testcase_builds where build_id='2005_11_01-095320' 
   and broke_prev is not null and fixed_prev is null
   order by testcase_id, machine for xml auto, root('rows')
   go
</pre>
         </li><li>
         </li><li>
         </li><li>
         </li></ul>
      </rf:item>
   </rf:section>
      <rf:section id="XML-intro" title="XML concepts and introduction" order="sorted">
          <rf:item id="attribute-element" title="Attribute vs. element" date="Mar 2006" author="bbarber">
              <p>XML can represent information as attributes or elements.   Attributes are more
                  limited than elements.  Attributes can not have children or sub-attributes. 
                  Attributes are unique within an element.  Attributes are unordered.  Attribute
                  values may not contain a new-line.</p>
                  <p>Consider using attributes for metadata, identifiers, numeric data, and URLs. 
                      Use elements for human readable text and data. <rf:iref item="kirsD_2004"
                          page="79-80"/> </p>
          </rf:item>
          <rf:item id="charset" title="character sets" date="Oct 2005" author="bbarber">
         <p>XML uses UTF-8 by default.  For an explanation of the various character sets, including ASCII, HTML, and UTF, see  <rf:iref item="haroE_2002" page="531-587"/></p>
      </rf:item>
          <rf:item id="cocoon" title="Cocoon" date="Mar 2006" author="bbarber">
              <p>Cocoon is an XML web site engine that dynamically transforms XML data into web
                  pages.  See <rf:iref item="kirsD_2004" page="361"/> for an introduction and sample
              Cocoon application.</p>
          </rf:item>
      <rf:item id="data-island" title="data island" date="Oct 2005" author="bbarber">
         <p>A <b>data island</b> is an  &lt;xml> element within an HTML document.  Microsoft's InternetExplorer can parse data islands with its MSXML parser.  <rf:iref item="espoD_2003" page="595-621"/></p>
      </rf:item>
          <rf:item id="docbook" title="DocBook" date="Mar 2006" author="bbarber">
              <p><a href="http://www.docbook.org">DocBook</a> is an XML standard for 
                  technical books and documentation.  It is a "rich source of text markup and
                  structuring wisdom" <rf:iref item="kirsD_2004" page="102"/> </p>
          </rf:item>
          <rf:item id="DOM" title="DOM" date="Oct 2005" author="bbarber">
          <p><b>DOM</b> is an in-memory, document object model for XML documents. <rf:iref item="haroE_2002" page="296-315, 458-512"/></p>
       </rf:item>
          <rf:item id="element-name" title="Element and attribute naming" date="Mar 2006" author="bbarber">
              <p>Using naming to communicate the data's structure.  Avoid abbreviations, prefer
                  lower-case, hyphenate names, reuse names such as "head" <rf:iref item="kirsD_2004"
                      page="80-88, 95"/> 
              </p>
          </rf:item>
          <rf:item id="for-xml" title="FOR XML, OPENXML, XML Bulk Load" date="Oct 2005" author="bbarber">
         <p><b>FOR XML</b> is a Microsoft SQL Server extension for generating XML results from SQL queries.  <rf:iref item="espoD_2003" page="348"/></p>
         <p><b>OPENXML</b> is a Microsoft SQL Server extension to insert rowsets from an XML document.   Use it for small documents up to 50 KB in size.  <rf:iref item="espoD_2003" page="376"/></p>
         <p><b>XML Bulk Load</b> is a COM component for loading database tables from XMLM. <rf:iref item="espoD_2003" page="378"/></p>
      </rf:item>
          <rf:item id="nitf" title="NITF, News Industry Text Format" date="Mar 2006" author="bbarber">
              <p><a href="http://www.nitf.org">NITF</a> is an XML standard for news stories.  It can define
                  "<i>who</i> the story is about, <i>when</i> and <i>where</i> the described event
                  occurred, and even <i>why</i> it is considered newsworthy by the story author 
                  <rf:iref item="kirsD_2004" page="105"/> </p>
          </rf:item>
          <rf:item id="svg" title="SVG Scalable Vector Graphics" date="Mar 2006" author="bbarber">
              <p><a href="http://www.w3.org/TR/SVG11/">SVG</a> is an XML-specifiction for vector
                  graphics.   <a href="http://xml.apache.org/batik">Batik</a> is Apache's Java
                  implementation of SVG.    Also consider  Adobe Illustrator, <a
                      href="http://www.inkscape.org">Inkscape</a>, and <a href="http://www.imagemagick.org">Imagemagick</a>  <a href="http://pfaedit.sourceforge.net">PfaEdit</a> is a good font
                  editor for SVG fonts and other font formats. <rf:iref item="kirsD_2004"
                      page="239-246"/></p>
          </rf:item>
          <rf:item id="id-name" title="Identifier names, titles, and URLs" date="Mar 2006" author="bbarber">
              <p>An identifier servers multiple roles.  The primary roles are reference and
                  summarization.   Consider providing multiple names for the same entity.   Use a
                  short name for internal reference, a short title for textual references, a URL for
                  external reference, a
                  descriptive title for headers and table of contents, and a full title for archival
                  purposes.   To simplify textual references,  convert references to lowercase
                  and strip all whitespace and punctuation.  See Kirsanov for further advice <rf:iref item="kirsD_2004" page="92, 98,
                      100, 107-116, 118"/> and <rf:iref item="master-doc"/></p>
          </rf:item>
          <rf:item id="sql-xml" title="SQL/XML" date="Apr 2007" author="bbarber">
              <p>SQL 2003 included XML support, commonly called "SQL/XML".  It appears that the 
                  <a
                      href="http://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=35341">ISO
                      Standard</a> has been withdrawn.  Individual vendors have implemented different
                  approaches.  </p>
              <ul><li>
                  <a href="http://www.oracle.com/technology/pub/articles/quinlan-xml.html">SQL/XML
                      for Oracle</a> -- introduction to using SQL/XML
              </li><li>
                  <a href="http://www.sqlxml.org/">SQL/XML for SQL Server</a> -- SQL Server has a
                  proprietary XML support, also called "SQL/XML" but unrelated to the standard.
              </li><li>
                  XQuery is used for querying XML in a database.
              </li><li>
                  OpenXML -- Read xml files for querying as a table
              </li><li>
                  for xml -- Produce results of a query as XML (e.g., <code>select ... from ... where
                      ... for xml raw('row'), root('builds")
                  </code>
              </li><li>
                  SQLXML Bulk Load -- XML Bulk Load imports an XML document according to an
                  annotated XSD schema.   It is as fast as using bcp.  For documentation, see <code>SQLXML->bulk
                  loading</code>.  
                  <ul><li>
                      Install SQLXMLBULKLOADLib -- Install sqlxml.msi from Microsoft.  It is a
                      download for SQL Server 2000.   SQL Server 2005 includes SQLXML4.msi, but it
                      does not appear to work as a independent installer.
                  </li><li>
                      How bulk load populates the database -- See SQL Server 2000 documentation
                      <a href="http://msdn2.microsoft.com/en-us/library/aa225723(SQL.80).aspx">Record Generation Process and the Interpretation of Mapping Schema</a>
                  </li><li>
                      Example C# code -- See <a
                          href="http://wijix.com/blogs/centricity/archive/2007/04/30/bulk-loading-xml-into-sql-server-2005-using-net.aspx">Bulk
                          Loading XML</a> (Centricity) and SQL Server documentation <code>Using SQLXML Bulk Load in the .NET Environment </code>
                  </li><li>
                      sql namespace -- Add the following namespace to &lt;xs:schema>, <code>    xmlns:sql="urn:schemas-microsoft-com:mapping-schema"</code>
                  </li><li>
                      Annotated XSD Schemas -- Documentation for annotated schemas in SQL Server ...
                      Books Online.  The index page is <code>Using Annotations in XSD Schemas</code>
                  </li><li>
                      sql:relation="..." -- Defines the table corresponding to an xs:element
                  </li><li>
                      sql:field="..." -- Defines the column corresponding to an xs:attribute or xs:element
                  </li><li>
                      sql:key-fields -- Each table (sql:relation) should specify its key-fields.   
                      It may be required for tables using sql:relationship.  Not clear if this is
                      really needed.
                      See SQL Server documentation on <code>Identifying Key Columns Using sql:key-fiel</code>
                  </li><li>
                      sql:limit-field, sql:limit-value -- selects rows for sql:relation where
                      field=value.
                  </li><li>
                      sql:relationship -- Defines joins between tables.  See SQL Server
                      documentation on <code>Specifying Relationships Using sql:relationship</code>
                  </li><li>
                      Error: Invalid character value for cast specification -- The data format is
                      incorrect   For example, uploading a string field into an int column.  SQL
                      Server does not report the column.  For example,  "T" formatted datetime may require a type annotation,
                      <code>sql:datatype="dateTime"</code>.  The same error message occurs
                      for SQL bulk load.   In older versions of SQL Server, it may indicate missing columns.
                  </li><li>
                      If adding or modifying data table columns -- As with bcp, XML bulk load can mis-report
                      data typing errors.   To fix, delete and recreate the data table. 
                  </li><li>
                  </li><li>
                  </li></ul>
              </li><li>
              </li><li>
              </li><li>
                  
              </li></ul>
          </rf:item>
          <rf:item id="xform" title="XForm" date="Mar 2006" author="bbarber">
              <p><a href="http://www.w3.org/MarkUp/Forms">XForm</a> is an XML-based processing framework
                  for displaying, submitting, and processing forms.<rf:iref item="kirsD_2004"
                      page="126,  301-309"/> </p>
          </rf:item>
          <rf:item id="XLink" title="XLink" date="Oct 2005" author="bbarber">
         <p><b>XLink</b> is an attribute-based syntax for attaching links to XML documents.  <rf:iref item="haroE_2002" page="175-189"/></p>
      </rf:item>
      <rf:item id="XML" title="XML" date="Oct 2005" author="bbarber">
         <p><b>XML</b> is a document markup standard, based on SGML.  <rf:iref item="haroE_2002" page="335-371"/></p>
      </rf:item>
      <rf:item id="XPath" title="XPath" date="Oct 2005" author="bbarber">
         <p>Use <b>XPath</b> to return node sets from an XML document. <rf:iref item="lenzE_2005" page="6-22"/>,   <rf:iref item="haroE_2002" page="416-429"/></p>
         
         <p>  For .NET programming, see  <rf:iref item="espoD_2003" page="246"/></p>
         
         <p><b>XPathDocument</b> is an optimized DOM model for processing XPATH expressions.   Use CreateNavigator() to create an XPathNavigator object.  
         <rf:iref item="espoD_2003" page="263"/>.           
            These objects implement the IXPathNavigable interface <rf:iref item="espoD_2003" page="280"/></p>
      </rf:item>

      <rf:item id="XPointer" title="XPointer" date="Oct 2005" author="bbarber">
         <p><b>XPointer</b> allows XPATH references in URLs.  <rf:iref item="haroE_2002" page="190-201"/></p>
      </rf:item>
      <rf:item id="XSD" title="XSD" date="Oct 2005" author="bbarber">
         <p>
            <b>XSD</b> is the prefered XML schema format.  It replaces DTD and XDR. <rf:iref item="haroE_2002" page="254-286, 372-415"/> </p> 
         
         <p>For programming .NET with XSD (e.g., SOAP) see <rf:iref item="espoD_2003" page="106-133"/>
         </p>
         
         <ul class="nolink">
            
            <li>Preload schemas with XMLSchemaCollection.<rf:iref item="espoD_2003" page="95"/>
            </li>
            
            <li>XSD types map to .NET types<rf:iref item="espoD_2003" page="110"/>
            </li>
            
            <li>Use xsd.exe from XML to XSD to C# <rf:iref item="espoD_2003" page="111"/>
            </li>
            
            <li>Use an external reference to the XSD file<rf:iref item="espoD_2003" page="114"/>
            </li>
            
         </ul>
         
      </rf:item>
      <rf:item id="XSL-FO" title="XSL-FO, CSS" date="Oct 2005" author="bbarber">
         <p><b>XSL-FO</b> is an XML syntax for describing page layout. <rf:iref item="haroE_2002" page="217-233"/>
            Toot-o-matic uses XSL-FO and FOP to generate PDF files from XML <rf:iref item="tidwD_2001" page="212"/>.
         </p>.    
         
         <p><b>CSS</b> is a non-XML syntax for page layout <rf:iref item="haroE_2002" page="202-216"/>.  It works well with XSLT.</p>
      </rf:item>
          <rf:item id="master-doc" title="Master document" date="Mar 2006" author="bbarber">
              <p>A <i>master document</i> is an XML configuration file that defines a web site,
                  configuration, and site directory.   Site documents use the master document to
                  determine their context within a web site and to establish mutual links.   
              </p>
              <p>Use the
                  master document to associate short mnemonic identifiers with full titles and URLs
                  <rf:iref item="id-name"/>  <rf:iref item="kirsD_2004" page="134"/>.  Use the master document to 
                  define the base URL for
                  images and links <rf:iref item="kirsD_2004" page="137"/>.   Use the master
                  document to define the configuration for each deployable environment (e.g.,
                  staging, production, development, QA) <rf:iref item="kirsD_2004" page="138-139"/>. 
              </p>
              <p>See <rf:iref item="kirsD_2004" page="127-154"/>
                  for a detailed example.</p>
          </rf:item>
      <rf:item id="msxsl-script" title="msxsl:script" date="Oct 2005" author="bbarber">
         <p>.NET allows embedded scripts inside XSL files.  msxsl:script supersedes their xsl:eval extension.  <rf:iref item="espoD_2003" page="336"/> </p>
      </rf:item>
      <rf:item id="MSXML" title="MSXML" date="Oct 2005" author="bbarber">
         <p>MSXML is an older COM module for processing XML. It includes support for XSD, XML Schema and XPath.</p>
      </rf:item>
          <rf:item id="pull-push" title="Pull vs. push XSLT processing" date="Mar 2006" author="bbarber">
              <p>XSLT templates may be invoked directly (push processing, e.g., xsl:for-each) or
                  indirectly (pull processing, e.g., xsl:apply-templates).   A similar distinction
                  is trunk templates that define the highest level of document and branch templates
                  that define the leaves.   Push processing is suitable for trunk templates while
                  pull processing works well for branch templates <rf:iref item="kirsD_2004"
                      page="176-178"/>.  </p>
              </rf:item>
      <rf:item id="entity" title="entity" date="Oct 2005" author="bbarber">
         <p>An XML <i>entity</i> names a string value, e.g., &amp;author;. It is defined within a !DOCTYPE node, e.g., &lt;!DOCTYPE book [&lt;!ENTITY author "Dino Esposito"&gt;]&gt; It requires a XmlValidatingReader.<rf:iref item="espoD_2003" page="23"/>
         </p>
      </rf:item>
      <rf:item id="SAX" title="SAX" date="Oct 2005" author="bbarber">
         <p><b>SAX</b> is an event-based API for XML documents  <rf:iref item="haroE_2002" page="316-331, 513-530"/>.   
            The model appears to be losing favor, e.g., .NET uses <rf:iref item="XMLReader"/> instead of SAX</p>
      </rf:item>
          <rf:item id="schematron" title="Schematron" date="Mar 2006" author="bbarber">
              Schematron is a rule-based schema language for defining arbitrary constraints between
              XML elements and XML documents.   It uses XPATH to query the documents.  It reports
              inconsistencies in terms of the documents themselves.  See <rf:iref item="kirsD_2004" page="186"/> for a good
              introduction and examples.
          </rf:item>
      <rf:item id="SOAP" title="SOAP" date="Oct 2005" author="bbarber">
         <p><b>SOAP</b> is an XML standard for invoking web services.</p>
         <p>For programming SOAP in .NET see <rf:iref item="espoD_2003" page="561-593"/></p>
      </rf:item>
       </rf:section>
   <rf:section id="XML-class" title="XML classes in .NET" order="sorted">
      <rf:item id="NameTable" title="NameTable" date="Oct 2005" author="bbarber">
         
         <p>
            <b>NameTable</b> stores atomized strings for XMLDocument and XMLTextReader. Much faster than string comparisons.<rf:iref item="espoD_2003" page="49"/>
         </p>
         
      </rf:item>
      <rf:item id="NET-XML" title="XML enabled classes in .NET" date="Oct 2005" author="bbarber">
         
         <p> .Net offers a variety of XML-enabled classes:</p>
         
         <ul class="nolink">
            
            <li>
               <b>DataSet</b> -- a memory-resident database format with tables, columns, rows, and relations. Useful for mirroring database data. Not useful for business rules. <rf:iref item="espoD_2003" page="402"/></li>
            
            <li>
               <b>DiffGram</b> -- XML update representation for a DataSet.  <rf:iref item="espoD_2003" page="443"/></li>
            
            <li>
               <b>Updategram</b> -- another XML update representation for a DataSet  <rf:iref item="espoD_2003" page="382"/></li>
            
            <li>
               <b>Web.config, AppSettingsReader</b> -- application-specific configuration settings.  Prefered over using the registry.  <rf:iref item="espoD_2003" page="623-655"/></li>
            
         </ul>
         
         <p><b>.NET Remoting</b> is a non-XML alternative to SOAP.  It is highly optimized for .NET-to-.NET communications, and replaces DCOM.  <rf:iref item="espoD_2003" page="521-560"/></p>
         
      </rf:item>
      <rf:item id="SOAP-formater" title="SOAP Formatter" date="Oct 2005" author="bbarber">
         <b>System.Runtime.Serialization.Formatters.Soap</b> serializes an object hierarichy into a SOAP message (as a stream object).  <rf:iref item="espoD_2003" page="478"/>
      </rf:item>
      <rf:item id="XmlDataDocument" title="XmlDataDocument" date="Oct 2005" author="bbarber">
         An XmlDataDocument is an XML DOM representation of a DataSet.  <rf:iref item="espoD_2003" page="372"/>
      </rf:item>
      <rf:item id="XMLDocument" title="XMLDocument" date="Oct 2005" author="bbarber">
         <p> <b>XML Document</b> is Microsoft's DOM, memory-based representation of an XML document or fragment. It is a hierarchical structure of elements, attributes, and other nodes. See the .Net class XMLDocument. It is used for:</p>
         
         <ul class="nolink">
            
            <li>Random access</li>
            
            <li>Repeated access to the same XML</li>
            
            <li>\nComplex transformations using XSLT and XPATH</li>
            
            <li>Like a DataSet</li>
            
            <li>XML DOM is overkill for writing XML.<rf:iref item="espoD_2003" page="229"/>
            </li>
            
            <li>Avoid calls to PreviousSibling, Item, and Count.  They walk all subnodes of a node. Use NextSibling instead.<rf:iref item="espoD_2003" page="217"/>
            </li>
            
            <li>The corresponding XMLReader must be positioned at an element instead of an attribute.<rf:iref item="espoD_2003" page="220"/>
            </li>
            
            <li>Use XmlNodeReader to process a subset of nodes.<rf:iref item="espoD_2003" page="224"/>
            </li>
            
         </ul>
      </rf:item>
      <rf:item id="XMLReader" title="XMLReader" date="Oct 2005" author="bbarber">
         
         <p>An XMLReader presents a stream input as a sequence of nodes.  Use XMLReader for</p>
         
         <ul class="nolink">
            
            <li>Process XML in sequence.</li>
            
            <li>Process of lots of XML</li>
            
            <li>Like a DataReader</li>
            
            <li>A TextReader is not thread-safe.<rf:iref item="espoD_2003" page="53"/>
            </li>
            
         </ul>
      </rf:item>
      <rf:item id="XmlSerializer" title="XmlSerializer"  date="Oct 2005" author="bbarber">
         <b>System.Xml.Serializaton</b> serializes object hierarchies as an XML document.   Unlike SOAP serialization, it works only with public classes and does not 
         preserve type information. <rf:iref item="espoD_2003" page="481"/>
      </rf:item>
      <rf:item id="XMLWriter" title="XMLWriter" date="Oct 2005" author="bbarber">
         <p>An XMLWriter writes stream output as well-formed XML.</p>
         
         <ul class="nolink">
            
            <li>Does not check for invalid names.<rf:iref item="espoD_2003" page="139"/>
            </li>
            
            <li>XMLWriter's maintain a stack of unclosed elements with the associated namespace<rf:iref item="espoD_2003" page="145"/>
            </li>
            
         </ul>
         
      </rf:item>
   </rf:section>
   
   <rf:section id="css-ref" title="CSS and Javascript References" order="sorted">
      <!-- Biblio IDs are the first 4 letters of the last name, initials, _, publication date 
      -->
      <rf:item id="meyeEA_2004" title="[meyeEA_2004] CSS Pocket Reference" date="Jan 2006"
         author="bbarber">
         <p>Meyer, O'Reilly, 2004, ISBN 0-596-00777-9</p>
      </rf:item>
      <rf:item id="flanD_2003" title="[flanD_2003] JavaScript Pocket Reference" date="Jan 2006"
         author="bbarber">
         <p>Flanagan, O'Reilly, 2003, ISBN 0-596-00411-7</p>
          <p>Excellent coverage of JavaScript 1.5 by the author of <i>The Definitive Guide</i></p>
      </rf:item>
       <rf:item id="flanD_2001" title="[flanD_2001] JavaScript The Definitive Guide" date="Jan 2006"
           author="bbarber">
           <p>Flanagan, O'Reilly, 2001, ISBN: 0-596-00048-0</p>
           <p>JavaScript reference.  Well regarded.</p>
       </rf:item>
       <rf:item id="goodD_2003" title="[goodD_2003] JavaScript &amp;  Dhtml Cookbook" date="Jan 2006"
         author="bbarber">
         <p>Goodman, O'Reilly, 2003, ISBN 0-596-00467-2</p>
      </rf:item>
      <rf:item id="wykeC_2005" title="[wykeC_2005] stylin' with CSS" date="Oct 2005" author="bbarber">
         <p>Wyke-Smith, New Riders, 2005, ISBN 0-321-30525-6</p>
         <p>Thorough introduction to CSS and XHTML.  Recommended.</p>
      </rf:item>
   </rf:section>
   <rf:section id="xml-ref" title="XML and XSLT References" order="sorted">
      <!-- Biblio IDs are the first 4 letters of the last name, initials, _, publication date 
      -->
      <rf:item id="boxD_2000" title="[boxD_2000] Essential XML: Beyond Markup" date="Oct 2005" author="bbarber">
         <p>Box, Skonnard, and Lam, Addison Wesley, 2000.</p>
         <p>A general look at XML as a unifying technology <rf:iref item="espoD_2003" page="23"/>  
            </p>    
      </rf:item>
      <rf:item id="tidwD_2001" title="[tidwD_2001] XSLT.  Mastering XML Transformations" date="Oct 2005" author="bbarber">
        <p>Tidwell, O'Reilly 2001</p>
        <p>Tidwell developed IBM's Toot-o-matic for <a href="http://www-128.ibm.com/developerworks/training/tutorials.html">IBM Tutorials</a>.
           It generates HTML, PDF, ZIP, and JPEG files from one XML file.  It's a good demonstration of XSLT, XSL:FO, and FOP.   [page 212-236]
        </p>
        
        <p>Appendix A, B, C contains a complete reference for XSLT and XPATH 1.0 with multiple examples illustrating each feature.  </p>
      </rf:item>
     
      <rf:item id="espoD_2003" title="[espoD_2003] Applied XML Programming for Microsoft .NET" date="Oct 2005" author="bbarber">        
         <p> Esposito, Microsoft Press 2003</p>
         
         <p> Thorough introduction to XML programming in .NET with best practices and lots of examples. </p>
      </rf:item>
      <rf:item id="fitzM_2004" title="[fitzM_2004] Learning XSLT" date="Oct 2005" author="bbarber">
         <p>Fitzgerald, O'Reilly, 2003, ISBN: 0-596-00327-7</p>
         <p>Excellent, thorough introduction to XSLT.   Lots of examples.</p>
      </rf:item>
      <rf:item id="foggD_2004" title="[foggD_2004] Programming Microsoft .NET XML Web Services" date="Oct 2005" author="bbarber">
         <p>Foggon, Maharry, Ullman, Watson, Microsoft, 2004</p>
         <p>Step by step introduction to web services.  Includes SOAP, WSDL, DISCO, UDDI,  HTTP, XML Streaming, serialization, XSD, web methods. 
            ADO.NET, security, WS-* standards, </p>
      </rf:item>
      <rf:item id="haroE_2002" title="[haroE_2002] XML in a Nutshell" date="Oct 2005" author="bbarber">
         <p>Harold, Means, O'Reilly 2004, ISBN: 0-596-00764-7</p>
         <p>Thorough introduction to XML including DTD, namespaces, XSLT, XPath, XLinks, XPointers, CSS, XSL-FO, RDDL, XSD, DOM, SAX</p>
         <p>For XSLT and XPath, <rf:iref item="lenzE_2005"/> has more complete coverage.</p>
      </rf:item>
       <rf:item id="kayM_2004a" title="[kayM_2004a] XPath 2.0, Programmer's Reference" date="Mar 2006"
           author="bbarber">
           <p>Kay, Wiley, 2004, ISBN: 0-7645-6910-4</p>
           <p>Definitive coverage of XPath 2.0 by the editor of the XSLT 2.0 specification.</p>
       </rf:item>
       <rf:item id="kayM_2004b" title="[kayM_2004b] XSLT 2.0, Programmer's Reference" date="Mar 2006"
           author="bbarber">
           <p>Kay, Wiley, 2004, ISBN: 0-7645-6909-0</p>
           <p>Definitive coverage of XSLT 2.0 by the editor of the XSLT 2.0 specification and the
               author of the Saxon XSLT engine.   The
               introductory chapters are worth a careful read, as are the detailed examples in
               Chapters 9-12.   Chapter 4 provides a quick
               introduction to XML Schema.  Chapter 6, Patterns, provides a quick introduction to
               XPath.   Chapter 5 provides complete definition and usage for each XSLT element.  
               </p>
       </rf:item>
       <rf:item id="kirsD_2004" title="[kirsD_2004] XSLT 2.0 web development" date="Mar 2006"
           author="bbarber">
           <p>Kirsanov, Prentice Hall, 2004, ISBN: 0-13-140635-3</p>
           <p>Thorough introduction to developing web sites using XML, XSLT, and Schematron.  Clear
               separation between processing and content.  Lots of practical advice.  Good use of a
               master document to configure a web site.</p>
       </rf:item>
     <rf:item id="lenzE_2005" title="[lenzE_2005] XSLT 1.0 Pocket Reference" date="Oct 2005" author="bbarber">
        <p>Lenz, O'Reilly, 2005, ISBN: 0-596-10050-7</p>
        <p>Excellent reference guide to XSLT 1.0.   Written from the XSLT specification. </p>
        <p>Includes preliminary documentation on XSLT 2.0 -- a significant enhancement to XSLT.</p>
     </rf:item>
      <rf:item id="mangS_2003"  title="[mangS_2003] XSLT Cookbook" date="Oct 2005" author="bbarber">
         <p>Mangano, O'Reilly 2003</p>
         <p>Advanced XSLT programming with lots of examples, many convoluted.  Covers string manipuation, numbers and math, dates and times, XPATH, whitespace, 
            XML transformation, XML queries, HTML generation, SVG generation, code generation, Visio VDX, Excel XML, SOAP WSDL documentation, XSLT extensions, testing, debugging, generic programming, and functional programming</p>
      </rf:item>
      <rf:item id="skonA_2001" title="[skonA_2001] Essential XML Quick Reference" date="Oct 2005" author="bbarber">
         <p>Skonnard, Gudgin, Addison Wesley, 2001.</p>
         
         <p>Annotated review of  XML standards.  <rf:iref item="espoD_2003" page="133"/></p>
      </rf:item>
      
      <rf:item id="stanWR_2002" title="[stanWR_2002] XML Pocket Consultant" date="Oct 2005" author="bbarber">
         <p>Stanek,  Microsoft Press 2002, ISBN 0-7356-1183-1.</p>
         
         <p>Stanek's book on XML.  <rf:iref item="espoD_2003" page="133"/>
         </p>   
      </rf:item>
   </rf:section>
</rf:topic>
