<?xml version="1.0"?>
<!--

  DesignXML.xsl
  
  Stylesheet for Autodesk's DesignXML.xml 
  XSL compatible with Microsoft Internet Explorer 5,
  
-->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
                xmlns:s="urn:schemas-microsoft-com:xml-data"
                xmlns:dt="urn:schemas-microsoft-com:datatypes">

<xsl:template match="/">
  <!-- stylesheet works on schema elements, schema documents, and documents
       with in-lined schemas -->
  <xsl:apply-templates select="s:Schema|*/s:Schema"/>
</xsl:template>
<xsl:template match="s:Schema">
  <HTML>
    <HEAD>
      <link rel="stylesheet" type="text/css" media="screen" href="schema_hh.css" />
      <link rel="stylesheet" type="text/css" media="screen" href="acad_ax.css" />
    </HEAD>
    <BODY>
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="top" class="Title">The DesignXML Schema</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
DesignXML defines a structure that enables efficient delivery of 
geometric model information over the World Wide Web. DesignXML also 
defines a common vocabulary for 3D geometry and graphics representation. 
    <BR/><BR/>
    <HR size="1"/>
    <P class="JumplistIntro">
      Topics in this document:
    </P>
    <UL>
      <LI class="Jumplist"><A href="#introduction">Introduction</A></LI>
      <LI class="Jumplist"><A href="#document">DesignXML Document Structure</A></LI>
      <LI class="Jumplist"><A href="#graphics">Fundamental Types of Geometry and Graphics</A></LI>
      <LI class="Jumplist"><A href="#linearelements">Linear Geometry Elements</A></LI>
      <LI class="Jumplist"><A href="#nonlinear">Nonlinear Geometry Elements</A></LI>
      <LI class="Jumplist"><A href="#quickref">DesignXML Reference</A></LI>
    </UL>
    <BR/>    
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="introduction" class="Title">Introduction</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
      This document is intended for design professionals who are interested in 
      reading and writing geometric model information specified 
      in XML according to the rules of the DesignXML schema.  
      For example, software application developers can use this 
      information to determine the design and implementation of their 
      applications that read and write models in DesignXML-conformant 
      XML.
    </P>
    <HR size="1"/>
    <P class="JumplistIntro">
      Sections in this topic:
    </P>
    <UL>
      <LI class="Jumplist"><A href="#about">About DesignXML</A></LI>
      <LI class="Jumplist"><A href="#definitions">Terminology</A></LI>
    </UL>
    <H4 id="about">
      About DesignXML
    </H4>
      DesignXML is a schema for representing geometry-oriented models in XML.
      Specifically, DesignXML
    <UL class="List1">
    <P class="List1Begin">
      <LI class="ListText">
        Defines a vocabulary for representing high-precision geometric 
        models
      </LI>
      <LI class="ListText">
        Leverages existing schemas, such as 
        <A href="#DefSVG">SVG</A>, 
        and standard raster image formats such as JPEG, GIF, and BMP
      </LI>
      <LI class="ListText">
        Provides a low barrier to entry without sacrificing the potential for 
        richness of expression
      </LI>
      <LI class="ListText">
        Holds its own set of design elements, as well as data from other 
        schemas
      </LI>
      <LI class="ListText">
        Defines constructs in a modular manner to promote reuse of utility 
        definitions between different schema
      </LI>
      <LI class="ListText">
        Represents complete model state, partial model state, 
        and abstract views of the model
      </LI>
      <LI class="ListText">
        Facilitates processing by standard XML tools, such as XSL and XSLT
      </LI>
    </P>
    </UL>
    <H4 id="definitions">
      Terminology
    </H4>
    <DL>
      <DT><A id="DefDataChannel" name="DefDataChannel"></A>
      <SPAN class="DefineHead">Data Channel</SPAN></DT>
      <DD class="DefineText"> 
        A view of a particular geometric model.  Each channel is one way of 
        looking at the data; each channel represents a different level of 
        complexity and detail with respect to the actual model information 
        in the design.  For example, the Administrative data channel 
        describes only the document summary information, such as title, 
        author, and keywords; the Facetted3D  data channel provides a way 
        to describe the model using linear geometry only. 
      </DD>
      <DT><A id="DefSVG" name="DefSVG"></A>
      <SPAN class="DefineHead">SVG</SPAN></DT>
      <DD class="DefineText"> 
        SVG (Scalable Vector Graphics) is a language for describing 
        two-dimensional graphics in XML. See the W3C (World Wide Web 
        Consotium, <A href="http://www.w3c.org">http://www.w3c.org</A>) 
        SVG specification for details. 
      </DD>
      <DT><A id="DefURI" name="DefURI"></A>
      <SPAN class="DefineHead">URI, URL, URN</SPAN></DT>
      <DD class="DefineText">
        A Uniform Resource Identifier (URI) is either a locator, 
        a name, or both.  Uniform Resource Locator 
        (URL) refers to the subset of URI that identifies resources via a
        representation of their primary access mechanism 
        (for example, their network "location"). 
        Uniform Resource Name (URN) refers to the subset of URI that serves 
        as persistent, location-independent, resource identifiers.
      </DD>
    </DL>

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="document" class="Title">DesignXML Document Structure</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
      A DesignXML document consists of an object element containing zero or more
      data channel elements.
    </P>
    <HR size="1"/>
    <P class="JumplistIntro">
      Sections in this topic:
    </P>
    <UL>
        <LI class="Jumplist"><A href="#defining">DesignXML Document</A></LI>
        <LI class="Jumplist"><A href="#objects">Objects and Channels</A></LI>
        <LI class="Jumplist"><A href="#administrativechannel">Administrative, Raster2D, and Vector2D Channels</A></LI>
        <LI class="Jumplist"><A href="#facettedchannel">Facetted3D Channel</A></LI>
        <LI class="Jumplist"><A href="#geometrychannel">Geometry3D Channel</A></LI>
        <LI class="Jumplist"><A href="#modelchannel">Model Channel</A></LI>
        <LI class="Jumplist"><A href="#geometry">Geometry and Graphics Elements</A></LI>
      </UL>
    <H4 id="defining">
      DesignXML Document
    </H4>
    A DesignXML document, at the hightest level, consists of a 
    <FONT class="Courier">dxml:Object</FONT> element.
    <PRE>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
		&lt;dxml:Object	
                        xmlns="urn:schemas-microsoft-com:xml-data"
                        xmlns:dt="urn:schemas-microsoft-com:datatypes"
                        xmlns:dxml="x-schema:http://www.DesignXML.org/schema/DesignXML_V_100.xdr"&gt;
		&lt;/dxml:Object&gt;
    </PRE>
    A <FONT class="Courier">dxml:Object</FONT> element contains one or 
    more representations of the geometric model. 
    Each such representation is called a 
    <A href="#DefDataChannel">data channel</A>. 
    <BR/><BR/>
    The key constructs of DesignXML are the following:
    <UL class="List1">
    <P class="List1Begin">
      <LI class="ListText">
        Objects, which represent a geometric model, composed of redundant 
        data channels
      </LI>
      <LI class="ListText">
        Double-precision 3D/2D geometry and graphics elements
      </LI>
    </P>
    </UL>
    <H4 id="objects">
      Objects and Channels
    </H4>
    <P class="TitleSpacing"></P>
    <P>
    A DesignXML object is logically equivalent to a geometric model or 
    drawing.  The object's channels appear as sections of a DesignXML file, 
    or as a set of files
    (a DesignXML file or set of files is called a DesignXML "stream"). 
    A DesignXML stream need not have all of the available channels 
    present.  
    More channels mean more information for the stream's client to use. 
    </P>
    <CENTER>
    <P class="FigureMargin"><IMG src="channels.gif"/></P>
    <FONT class="FigureTitle">DesignXML Channels</FONT>
    </CENTER>
    <P>
    While each channel is optional, when they appear at all in a DesignXML file,
    they must appear in the top-to-bottom sequence shown in the illustration 
    of the DesignXML channels.  
    Simpler, lower-resolution, but more universally readable channels come 
    first, and subsequent channels add successively greater fidelity to the 
    original model, ending with an application Model channel, or possibly 
    multiple Model channels that define the model data exactly.
    </P>
    <P>
    A summary of the DesignXML data channels follows.
    </P>
    <TABLE CELLPADDING="5" CELLSPACING="5">
        <TR>
            <TD VALIGN="top">
              Administrative
            </TD>
            <TD>
              Document summary information, such as title, author, and keywords.
              Any application-specific extensions to this information should 
              be part of a Model channel
            </TD>
        </TR>
        <TR>
            <TD VALIGN="top">
              Raster2D 
            </TD>
            <TD>
              Consists of a <A href="#DefURI">URI</A> reference to a file 
              containing a 2D raster 
              image. The referenced file's suffix indicates its 
              type (i.e. .jpg, .bmp, etc.). 
              An optional view specification of the model that the image 
              represents can be included as well. 
              Multiple instances of this channel are permitted, under the 
              assumption that they represent different views or rendering 
              modes of the model (for example, top, bottom, wireframe, 
              photorealistic).
            </TD>
        </TR>
        <TR>
            <TD VALIGN="top">
              Vector2D
            </TD>
            <TD>
              Consists of a <A href="#DefURI">URI</A> reference to an 
              <A href="#DefSVG">SVG</A> 
              file containing a 
              scalable 2D view of the model (which may itself be 2D or 3D).  
              As with the Raster2D channel, a view 
              specification may be provided, and multiple instances of this 
              channel corresponding to different views can appear in the same 
              DesignXML Object element.  
            </TD>
        </TR>
        <TR>
            <TD VALIGN="top">
              Facetted3D
            </TD>
            <TD>
              Represents a double-precision 2D or 3D geometric model 
              as a facetted model.  A facetted model consists entirely 
              of linear geometry elements, such as line segments and 
              meshes, plus text geometry and raster data.  
              This channel can also consist of a forwarding 
              <A href="#DefURI">URI</A> reference 
              to another XML file that contains Facetted3D channel data.
            </TD>
        </TR>
        <TR>
            <TD VALIGN="top">
              Geometry3D
            </TD>
            <TD>
              A superset of the Facetted3D channel with an additional 
              vocabulary of non-linear geometry constructs.
              As with the Facetted3D channel, this channel can consist of 
              a forwarding <A href="#DefURI">URI</A> reference to another 
              XML file that contains Geometry3D channel data.
            </TD>
        </TR>
        <TR>
            <TD VALIGN="top">
              Model
            </TD>
            <TD>
              An open model channel with an 
              <FONT class="Courier">app="appname"</FONT> attribute and 
              an associated schema that defines the content on the 
              application's terms.  Publication and support of the data 
              format is the responsibility of the application vendor, not 
              of DesignXML.  There can be multiple Model channels in a 
              DesignXML file, or no model channel at all. 
              This channel can also consist of a forwarding 
              <A href="#DefURI">URI</A> reference 
              to another XML file that contains the actual Model channel data.
            </TD>
        </TR>
    </TABLE>
    <P>
    DesignXML specifies the file formats to be used for the 2D channels
    and completely defines the formats used in the 2D/3D channels.  
    </P>
    <H5 id="administrativechannel">
      Administrative, Raster2D, and Vector2D Channels
    </H5>
    <P> 
    The definitions for the 
    <A href="#ELEMENT_Administrative">Administrative</A>, 
    <A href="#ELEMENT_Raster2D">Raster2D</A>, and 
    <A href="#ELEMENT_Vector2D">Vector2D</A> channels are
    simple and self-descriptive.  The Administrative channel defines 
    summary information.  The Raster2D and Vector2D channels
    are simply containers for a 
    <A href="#ATTRIBUTE_systemId">systemId</A> 
    attribute that holds the <A href="#DefURI">URI</A> or file path 
    to a raster format file and 
    SVG file, respectively.
    </P>
    <P>
      <xsl:for-each select="s:ElementType[@name='Administrative']">
        <DIV class="H6" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <!-- Print out the schema def -->
        <P>
          <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
        </P>
      </xsl:for-each>
      <xsl:for-each select="s:ElementType[@name='Raster2D']">
        <DIV class="H6" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <!-- Print out the schema def -->
        <P>
          <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
        </P>
      </xsl:for-each>
      <xsl:for-each select="s:ElementType[@name='Vector2D']">
        <DIV class="H6" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <!-- Print out the schema def -->
        <P>
          <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
        </P>
      </xsl:for-each>
    </P>
    <H5 id="facettedchannel">
      Facetted3D Channel
    </H5>
    <P>
    The <A href="#ELEMENT_Facetted3D">Facetted3D</A> channel supports a 
    model representation using only a 
    reduced set of 2D geometric constructs.  For example, a 3D wireframe
    representation of the model can be delivered in the Facetted3D channel.
    </P>
    <CENTER>
    <P class="FigureMargin"><IMG src="facetted3d.gif"/></P>
    <FONT class="FigureTitle">Facetted3D Channel</FONT>
    </CENTER>
    <P>
    The FacettedSubmodel element provides a means for grouping instances 
    of the other geometry elements in the Facetted3D channel and referencing 
    them as needed, while applying an independent linear transform to 
    each element.
    </P>
    <H5 id="geometrychannel">
      Geometry3D Channel
    </H5>
    <P>
    The <A href="#ELEMENT_Geometry3D">Geometry3D</A> channel is 
    essentially the Facetted3D channel plus 
    additional, nonlinear geometric elements.
    </P>
    <CENTER>
    <P class="FigureMargin"><IMG src="geometry3d.gif"/></P>
    <FONT class="FigureTitle">Geometry3D Channel</FONT>
    </CENTER>
    <H5 id="modelchannel">
      Model Channel
    </H5>
    <P>
    The <A href="#ELEMENT_Model">Model</A> channel is where geometric 
    modeling software applications 
    define the schemas for their particular model representations.
    For example, a DesignXML <FONT class="Courier">Object</FONT> 
    can contain or point to model 
    channels created by AutoCAD software or Intergraph 
    Microstation software. The 
    <FONT class="Courier">&lt;Model&gt;</FONT> element's 
    <FONT class="Courier">app</FONT> attribute distinguishes one 
    application's model channel from another's.  For example, 
    </P>
    <P>
    <CENTER><FONT class="Courier"> 
      &lt;Model app="acdb"&gt;
    </FONT></CENTER>
    </P>
    <P>
    specifies a Model channel using the Autodesk AcDbXML schema.
    </P>
    <H4 id="geometry">
      Geometry and Graphics Elements
    </H4>
    <P>
      In addition to the channel structures, DesignXML provides definitions 
      for reusable graphical objects and their properties, primarily 
      for use in Model channel schemas.  The DesignXML graphical 
      elements and their properties are the following:
    </P>
    <UL class="List1">
    <P class="List1Begin">
      <LI class="ListText">
        Linear geometry, quadratic curves, and
        solid elements.
      </LI>
      <LI class="ListText">
        Text geometry with associated fonts and properties
      </LI>
      <LI class="ListText">
        Raster image data, bound to geometric faces and surfaces
      </LI>
      <LI class="ListText"> 
        Double-precision for all relevant values
      </LI>
      <LI class="ListText">
        Quantities with built-in units relevant to geometric model elements, 
        namely length and angle
      </LI>
      <LI class="ListText">
        3D View and rendering specifications, such as view direction, clip 
        boundaries, Model Z axis display angle, perspective viewing angle, and 
        rendering mode.
      </LI>
    </P>
    </UL>
    <P>
      These elements can have color&#8212;either presentational (LUT indices) 
      or material (32-bit color space).
    </P>
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="graphics" class="Title">Fundamental Types of Geometry and Graphics</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
      The DesignXML elements and attributes that model such fundamental 
      properties as angle, distance, transformation, view, rendering, 
      and color are described in the following.
    </P>
    <HR size="1"/>
    <P class="JumplistIntro">
      Sections in this topic:
    </P>
      <UL>
        <LI class="Jumplist"><A href="#basic">Basic Measure Elements</A></LI>
        <LI class="Jumplist"><A href="#transforms">Linear Transforms</A></LI>
        <LI class="Jumplist"><A href="#view ">View and Rendering Model</A></LI>
        <LI class="Jumplist"><A href="#color">Color</A></LI>
        <LI class="Jumplist"><A href="#link">The Link Element</A></LI>
      </UL>
    <H4 id="basic">
      Basic Measure Elements 
    </H4>
      <P>
        Fundamental to any geometric modeling system is 
        the specification of distance and angle.  What differentiates 
        distances and angles from scalar values is that distance and
        angle have dimension or units.  
        Length is usually defined using points and vectors, which represent 
        locations, directions, and directed distances.  
        Modeling systems have widely differing representations for, and 
        assumptions concerning, units.  
      </P>
      <P>
        DesignXML specifies units as follows:
      </P>
          <xsl:for-each select="s:AttributeType[@name='lengthUnits']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
          <xsl:for-each select="s:AttributeType[@name='angleUnits']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
      <P>
        These unit types represent the quantities covered in the
        International Metric System (SI), plus other quantities of
        interest. All values are represented as single, real numbers. 
        All real numbers in the geometric model are stored and 
        manipulated as double precision floating point values, as specified 
        in the Microsoft XML Schema <FONT class="Emphasis">dt:r8</FONT> 
        extended data type.  
      </P>
      <P>
        The DesignXML attributes used to denote the <FONT class="Emphasis">X</FONT>, <FONT class="Emphasis">Y</FONT>, and <FONT class="Emphasis">Z</FONT> Cartesian 
        coordinates are <FONT class="Courier">x</FONT>, 
        <FONT class="Courier">y</FONT>, and 
        <FONT class="Courier">z</FONT> but note that 
        <FONT class="Courier">x</FONT> is
        also used for scalar length values:
      </P>
          <xsl:for-each select="s:AttributeType[@name='x']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
          <xsl:for-each select="s:AttributeType[@name='y']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
          <xsl:for-each select="s:AttributeType[@name='z']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
      <P>
      The <FONT class="Courier">t</FONT> (theta) attribute is 
      used for angle values:
      </P>
          <xsl:for-each select="s:AttributeType[@name='t']">
            <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
          </xsl:for-each>
      <HR size="1"/>
      <P class="JumplistIntro">
      The basic DesignXML measure elements are the following: 
      </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='DataString'] | .[@name='Length'] | .[@name='Angle'] | .[@name='Point'] | .[@name='Vector']">
            <LI class="Jumplist">
              <A class="element-link"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all basic measure elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='DataString'] | .[@name='Length'] | .[@name='Angle'] | .[@name='Point'] | .[@name='Vector']">
        <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <P>
          <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
        <xsl:if test=".[@name='DataString']">
          <P>
            The following table shows the characters that must be 
            represented by an entity sequence when they appear in 
            DataString elements:
            <TABLE cellspacing="10"> 
              <TR class="CellHeading">
                <TD align="center">
                  Character
                </TD>
                <TD>
                  Entity 
                </TD>
              </TR>
              <TR>
                <TD>
                  "
                </TD>
                <TD>
                  &amp;quot;
                </TD>
              </TR>
              <TR>
                <TD>
                  &lt; 
                </TD>
                <TD>
                  &amp;lt;
                </TD>
              </TR>
              <TR>
                <TD>
                  &gt; 
                </TD>
                <TD>
                  &amp;gt;
                </TD>
              </TR>
              <TR>
                <TD>
                  ' 
                </TD>
                <TD>
                  &amp;apos;
                </TD>
              </TR>
            </TABLE>
          </P>
        </xsl:if>
        <BR/>
      </xsl:if>
    </xsl:for-each>

    <H4 id="transforms">
      Linear Transforms
    </H4>
      <P>
        Every channel is assumed to be in a single coordinate system.  
        SubmodelReference elements apply a 2D or 3D linear 
        transform to their respective submodel elements.  
        The constructs described in this section
        are used to produce linear transformations.
      </P>
      <HR size="1"/>
      <P class="JumplistIntro">
      Linear transform elements are as follows: 
      </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='Normal'] | .[@name='Matrix3x3'] | .[@name='Orientation'] | .[@name='Translation'] | .[@name='LinearCoordinateTransform']">
            <LI>
              <A class="Jumplist"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all linear transformation elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='Normal'] | .[@name='Matrix3x3'] | .[@name='Orientation'] | .[@name='Translation'] | .[@name='LinearCoordinateTransform']">
        <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <P>
          <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
        <BR/>
      </xsl:if>
    </xsl:for-each>
    <H4 id="view">
      View and Rendering Model
    </H4>
      <P>
        The 2D channels as well as some model channel elements can 
        benefit from specifying a 2D projection onto a 3D model.
      </P>
      <HR size="1"/>
      <P class="JumplistIntro">
      View and rendering elements are as follows: 
      </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='ViewHeight'] | .[@name='ViewDirection'] | .[@name='TargetPoint'] | .[@name='FrontClip'] | .[@name='BackClip'] | .[@name='ViewTwistAngle'] | .[@name='PerspectiveViewingAngle'] | .[@name='WorldZDisplayAngle'] | .[@name='View'] | .[@name='RenderSpecification']">
            <LI class="Jumplist">
              <A class="element-link"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all View/Render elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='ViewHeight'] | .[@name='ViewDirection'] | .[@name='TargetPoint'] | .[@name='FrontClip'] | .[@name='BackClip'] | .[@name='ViewTwistAngle'] | .[@name='PerspectiveViewingAngle'] | .[@name='WorldZDisplayAngle'] | .[@name='View'] | .[@name='RenderSpecification']">
        <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>

    <H4 id="color">
      Color
    </H4>
      <P>
        There are two principal ways you can specify color: as 
        an index into a lookup table, or palette, or as a true color, 
        specified as a 3D point in a specified color space.  The dxml:Color 
        element allows either color mode to be used, the former in 
        conjunction with a dxml:ColorPalette.  Only one ColorPalette per 
        object data channel is allowed.
      </P>
      <P>
        In general, Color can be specified, or omitted, at any level 
        of composition of a model.  For dxml channels, the color specified 
        at the level closest to an element (or, lowest level above its 
        element in a DOM tree) dictates its color
      </P>
      <HR size="1"/>
      <P class="JumplistIntro">
      Color elements are as follows: 
      </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='ColorPalette'] | .[@name='ColorIndex'] | .[@name='TrueColor'] | .[@name='Color']">
            <LI>
              <A class="Jumplist"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all Color elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='ColorPalette'] | .[@name='ColorIndex'] | .[@name='TrueColor'] | .[@name='Color']">
        <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>

    <H4 id="link">
      The Link Element
    </H4>
      <P>
      </P>
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='Link']">
        <xsl:for-each select="s:description">
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>
    <BR/>
    <BR/>
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="linearelements" class="Title">Linear Geometry Elements</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
      <P>
        The following linear geometry elements can be used in both 
        the Facetted3D and Geometry3D channels.  These are the 
        <FONT class="Emphasis">only</FONT> elements that can be used 
        in the Facetted3D channel.
      </P>
      The following are building blocks used by the linear
      geometry elements.
      <P>
      <xsl:for-each select="s:ElementType[@name='Vertices']">
        <DIV class="H5Special" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <!-- Print out the Vertices description-->
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each> 
        <!-- Then print out the Vertices schema def -->
        <P>
          <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
        </P>
      </xsl:for-each>
      </P>
      <HR size="1"/>
      <P class="JumplistIntro">
      Linear geometry elements are the following: 
      </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='LineSegment'] | .[@name='Line'] | .[@name='Ray'] | .[@name='Polyline'] | .[@name='RasterImage'] | .[@name='Mesh'] | .[@name='FacettedShell'] | .[@name='Text'] | .[@name='FacettedSubmodel'] | .[@name='FacettedSubmodelReference']">
            <LI>
              <A class="Jumplist"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all Linear Geometry elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='LineSegment'] | .[@name='Line'] | .[@name='Ray'] | .[@name='Polyline'] | .[@name='RasterImage'] | .[@name='Mesh'] | .[@name='FacettedShell'] | .[@name='Text'] | .[@name='FacettedSubmodel'] | .[@name='FacettedSubmodelReference']">
      <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <xsl:for-each select="s:description">
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="nonlinear" class="Title">Nonlinear Geometry Elements</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
      <P>
        The nonlinear geometry elements can be used in the Geometry3D channel
        only.  
        The advantage of this set of geometric constructs is that they 
        require far less data to specify a nonlinear surface to a specific 
        tolerance than corresponding Facetted3D elements would.  
        The disadvantage is that the software supporting 
        nonlinear geometry is more complex and difficult to write or procure.  
        Multiple DesignXML channels give 
        developers a choice for accomplishing what they want, or need, to 
        do.
      </P>
        <HR size="1"/>
        <P class="JumplistIntro">
        Nonlinear geometry elements are a follows: 
        </P>
      <UL>
        <xsl:for-each select="s:ElementType">
          <xsl:if test=".[@name='Circle'] | .[@name='Arc'] | .[@name='Ellipse'] | .[@name='BSplineCurve'] | .[@name='Cylinder'] | .[@name='Cone'] | .[@name='Sphere'] | .[@name='Torus'] | .[@name='Plane'] | .[@name='BSplineSurface'] | .[@name='Body'] | .[@name='BoundaryRep'] | .[@name='Submodel'] | .[@name='SubmodelReference']">
            <LI>
              <A class="Jumplist"><xsl:attribute name="href">#ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
            </LI>
          </xsl:if>
        </xsl:for-each>
      </UL>

    <!-- Create sections for all Nonlinear Geometry elements -->
    <xsl:for-each select="s:ElementType">
      <xsl:if test=".[@name='Circle'] | .[@name='Arc'] | .[@name='Ellipse'] | .[@name='BSplineCurve'] | .[@name='Cylinder'] | .[@name='Cone'] | .[@name='Sphere'] | .[@name='Torus'] | .[@name='Plane'] | .[@name='BSplineSurface'] | .[@name='Body'] | .[@name='BoundaryRep'] | .[@name='Submodel'] | .[@name='SubmodelReference']">
        <BR/>
        <DIV class="Heading4" >
        <A><xsl:attribute name="name">ELEMENT_jc<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
        </DIV>
        <BR/>
        <xsl:if test=".[@name='BSplineCurve']">
          The defining elements of BSplineCurve are the zero or more 
          ControlPoints:
          <xsl:for-each select="../ElementType[@name='ControlPoint']">
            <!-- Then print out the Radius schema def -->
            <P>
              <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
            </P>
          </xsl:for-each>
          <P>
          Rational B-Spline control points have weights, 
          non-rational do not.
          </P>
        </xsl:if>
        <xsl:if test=".[@name='Circle']">
          Circle is defined by Radius (a Length) and CenterPoint 
          (a Point), both required:
            <xsl:for-each select="../ElementType[@name='Radius']">
              <!-- Then print out the Radius schema def -->
              <P>
                <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
              </P>
            </xsl:for-each>
          <xsl:for-each select="../ElementType[@name='CenterPoint']">
            <!-- Then print out the CenterPoint schema def -->
            <P>
              <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
            </P>
          </xsl:for-each>
        </xsl:if>
        <xsl:if test=".[@name='Cylinder']">
            <P>
                See <A href="#ELEMENT_Cylinder">Cylinder</A> in the DesignXML Reference.
            </P>
        </xsl:if>
        <xsl:if test=".[@name='Cone']">
            <P>
                See <A href="#ELEMENT_Cone">Cone</A> in the DesignXML Reference.
            </P>
        </xsl:if>
        <xsl:if test=".[@name='Sphere']">
            <P>
                See <A href="#ELEMENT_Sphere">Sphere</A> in the DesignXML Reference.
            </P>
        </xsl:if>
        <xsl:if test=".[@name='Torus']">
            <P>
                See <A href="#ELEMENT_Torus">Torus</A> in the DesignXML Reference.
            </P>
        </xsl:if>
        <xsl:if test=".[@name='Plane']">
            <P>
                See <A href="#ELEMENT_Plane">Plane</A> in the DesignXML Reference.
            </P>
        </xsl:if>
        <xsl:for-each select="s:description">
          <P>
            <xsl:apply-templates select="."/>
          </P>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>
    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter"><H2 id="quickref" class="Title">DesignXML Reference</H2></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
      The following sections contain descriptions of the 
      elements and attributes defined in the DesignXML schema.  
    </P>
    <HR size="1"/>
    <P class="JumplistIntro">
      Sections in this topic:
    </P>
    <UL>
      <LI class="Jumplist"><A href="#schemaelements">DesignXML Schema Elements</A></LI>
      <LI class="Jumplist"><A href="#schemaattributes">DesignXML Schema Attributes</A></LI>
      <LI class="Jumplist"><A href="#schemaelementattributes">DesignXML Schema Element-specific Attributes</A></LI>
      <LI class="Jumplist"><A href="#source"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
          Source</A></LI>
      <LI class="Jumplist"><A href="#reference">Schema Attributes Reference</A></LI>
      <LI class="Jumplist"><A href="#datatypes">Datatypes Reference</A></LI>
    </UL>
    <DIV class="toc">
      
      <!-- Treat any markup within a description as well-formed HTML -->
      <xsl:if test="s:description">
        <P>
          <xsl:apply-templates select="s:description/node()">
            <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
          </xsl:apply-templates>
        </P>
      </xsl:if>
      
      <H4 id="schemaelements">DesignXML Elements</H4>
      <P>
        The following is a list of all elements defined 
        in the DesignXML schema.
      </P>
      <TABLE class="list">
        <TR>
          <TH class="elementType"><A href="#Elements">Elements</A></TH>
        </TR>

        <TR>
          <TD class="elements">
            <xsl:for-each select="s:ElementType" order-by="@name">
              <xsl:choose>
                <!-- Look for the document element, as one which is not contained in any
                     other element content models.  Won't always work, since XML Schema
                     currently doesn't have the concept of a prescribed document element,
                     but generally this will work.  -->
                <xsl:when test="..[not(.//s:element[@type=context()/@name])]">
                  <B>&lt;<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>&gt;</B>
                  <xsl:choose>
                    <xsl:when test=".//s:element">
                      (document element)
                    </xsl:when>
                    <xsl:otherwise>
                      (possible orphan)
                    </xsl:otherwise>
                  </xsl:choose>
                </xsl:when>
                <xsl:otherwise>
                  &lt;<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>&gt;
                </xsl:otherwise>
              </xsl:choose>
              <BR/>
            </xsl:for-each>
          </TD>
        </TR>
      </TABLE>
          
      <H4 id="schemaattributes">DesignXML Attributes</H4>
      <P>
        The following is a list of all attributes defined 
        in the DesignXML schema.
      </P>
      <TABLE class="list">
        <TR>
          <TH class="attributeType"><A href="#Attributes">Attributes</A></TH>
        </TR>
        <TR>
          <TD class="attributes">
            <xsl:for-each select="s:AttributeType" order-by="@name">
              <A class="attribute-link"><xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
              <BR/>
            </xsl:for-each>
          </TD>
        </TR>
      </TABLE>
          
      <H4 id="schemaelementattributes">DesignXML Element-specific Attributes</H4>
      <P>
        The following is a list of all element-specific attributes defined 
        in the DesignXML schema.
      </P>
      <TABLE class="list">
        <TR>
          <TH class="attributeType"><A href="#Attributes">Element-specific Attributes</A></TH>
        </TR>
        <TR>
          <TD class="attributes">
            <!-- Handle element-scoped attributes separately -->
            <xsl:for-each select="*//s:AttributeType" order-by="ancestor(s:ElementType)/@name">
              &lt;<A class="element-link"><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="ancestor(s:ElementType)/@name"/></xsl:attribute><xsl:value-of select="ancestor(s:ElementType)/@name"/></A>
              <A class="attribute-link"><xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>&gt;
              <BR/>
            </xsl:for-each>
          </TD>
        </TR>
      </TABLE>
      
    </DIV>
    <BR/> 
    <DIV class="list">

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter">
      <H3 id="Elements" class="Title"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
        Elements</H3>
</DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
    The following tables describe the DesignXML element types.
    </P>
    <HR size="1"/>
    <BR/>
    <P>
      <P>Document conventions:</P>
      <UL>
        <LI>[] - optional</LI>
        <LI>[]* - zero or more times</LI>
        <LI>+ - one or more times</LI>
      </UL>
    </P>

      <xsl:apply-templates select="s:ElementType" order-by="@name"/>
    </DIV>
    
    <BR/>
    <DIV class="list">

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter">
      <H3 id="Attributes" class="Title"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
        Attributes</H3></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>
    <P>
    The following tables decribe the DesignXML attribute types.
    </P>
    <HR size="1"/>
    <BR/>
    <P>
      <P>Document conventions:</P>
      <UL>
        <LI>[] - optional</LI>
        <LI>[]* - zero or more times</LI>
        <LI>+ - one or more times</LI>
      </UL>
    </P>
      <xsl:apply-templates select="s:AttributeType | *//s:AttributeType" order-by="@name" />
    </DIV>

    <BR/>
    <DIV class="list">

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter">
      <H3 id="Source" class="Title"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
        Source</H3></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>

      <PRE><xsl:eval>this.xml</xsl:eval></PRE>
    </DIV>
    <BR/>

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter">
    <H3 id="Reference" class="Title">Schema Attributes Reference</H3></DIV></A></TD></TR>
</TABLE>
    <P class="TitleSpacing"></P>

    <DIV id="model_open" class="ref-heading">open model</DIV>
    <DIV class="ref-content">
      The element can contain elements, attributes, and text not specified in 
      the content model.  This is the default value.
    </DIV>

    <DIV id="model_closed" class="ref-heading">closed model</DIV>
    <DIV class="ref-content">
      The element cannot contain elements, attributes, and text except for 
      those specified in the content model.  DocumentTypeDefinitions use a closed model.
    </DIV>

    <DIV id="content_textOnly" class="ref-heading">textOnly content</DIV>
    <DIV class="ref-content">
      The element can contain only text, not elements.  If the 
      model attribute is set to "open," the element can contain text and 
      additional elements.
    </DIV>

    <DIV id="content_eltOnly" class="ref-heading">eltOnly content</DIV>
    <DIV class="ref-content">
      The element can contain only the elements, not free text. 
      If the model attribute is set to "open," the element can contain text 
      and additional elements.
    </DIV>

    <DIV id="content_empty" class="ref-heading">empty content</DIV>
    <DIV class="ref-content">
      The element cannot contain text or elements.  If the model 
      attribute is set to "open," the element can contain text and additional 
      elements.
    </DIV>

    <DIV id="content_mixed" class="ref-heading">mixed content</DIV>
    <DIV class="ref-content">
      The element can contain a mix of named elements and text.  This is 
      the default value.
    </DIV>

    <DIV id="order_one" class="ref-heading">one order</DIV>
    <DIV class="ref-content">
      Only one of a set of elements is permitted.
    </DIV>

    <DIV id="order_seq" class="ref-heading">seq order</DIV>
    <DIV class="ref-content">
      The elements appear in the specified sequence.
    </DIV>

    <DIV id="order_many" class="ref-heading">many order</DIV>
    <DIV class="ref-content">
      The elements are optional (they need not appear at all), but when 
      present, they can appear in any order.  This is the default.
    </DIV>
    <BR/>

    <TABLE class="TitleTable" width="100%" border="0" cellpadding="0" cellspacing="0"><TR valign="top">
    <TD><A href="javascript:history.back();" style="text-decoration:none" title="Click to go Back">
      <DIV class="bfilter">
    <H3 id="Datatypes" class="Title">Datatype Reference</H3>
</DIV></A></TD>
    <TD align="right" valign="top">
    </TD></TR></TABLE>
    <P class="TitleSpacing"></P>
    
    <DIV id="datatype_bin.base64" class="ref-heading">bin.base64 datatype</DIV>
    <DIV class="ref-content">
      MIME-style Base64 encoded binary BLOB
    </DIV>

    <DIV id="datatype_bin.hex" class="ref-heading">bin.hex datatype</DIV>
    <DIV class="ref-content">
      Hexadecimal digits representing octets
    </DIV>

    <DIV id="datatype_boolean" class="ref-heading">boolean datatype</DIV>
    <DIV class="ref-content">
      0 or 1, where 0 == "false" and 1 =="true"
    </DIV>

    <DIV id="datatype_char" class="ref-heading">char datatype</DIV>
    <DIV class="ref-content">
      String, one character long
    </DIV>

    <DIV id="datatype_date" class="ref-heading">date datatype</DIV>
    <DIV class="ref-content">
      Date in a subset ISO 8601 format, without the time data. For example: "1994-11-05"
    </DIV>

    <DIV id="datatype_dateTime" class="ref-heading">dateTime datatype</DIV>
    <DIV class="ref-content">
      Date in a subset of ISO 8601 format, with optional time and no optional zone. Fractional seconds can be as precise as nanoseconds. For example, "1988-04-07T18:39:09". 
    </DIV>

    <DIV id="datatype_dateTime.tz" class="ref-heading">dateTime.tz datatype</DIV>
    <DIV class="ref-content">
      Date in a subset ISO 8601 format, with optional time and optional zone. Fractional seconds can be as precise as nanoseconds. For example: "1988-04-07T18:39:09-08:00". 
    </DIV>

    <DIV id="datatype_entity" class="ref-heading">entity datatype</DIV>
    <DIV class="ref-content">
      Represents the XML ENTITY type. 
    </DIV>

    <DIV id="datatype_entities" class="ref-heading">entities datatype</DIV>
    <DIV class="ref-content">
      Represents the XML ENTITIES type. 
    </DIV>

    <DIV id="datatype_enumeration" class="ref-heading">enumeration datatype</DIV>
    <DIV class="ref-content">
      Represents an enumerated type (supported for attributes only). 
    </DIV>

    <DIV id="datatype_fixed.14.4" class="ref-heading">fixed.14.4 datatype</DIV>
    <DIV class="ref-content">
      Same as "number" but no more than 14 digits to the left of the decimal point, and no more than 4 to the right. 
    </DIV>

    <DIV id="datatype_float" class="ref-heading">float datatype</DIV>
    <DIV class="ref-content">
      Real number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. 
    </DIV>

    <DIV id="datatype_id" class="ref-heading">id datatype</DIV>
    <DIV class="ref-content">
      Represents the XML ID type. 
    </DIV>

    <DIV id="datatype_idref" class="ref-heading">idref datatype</DIV>
    <DIV class="ref-content">
      Represents the XML IDREF type. 
    </DIV>

    <DIV id="datatype_idrefs" class="ref-heading">idrefs datatype</DIV>
    <DIV class="ref-content">
      Represents the XML IDREFS type. 
    </DIV>

    <DIV id="datatype_int" class="ref-heading">int datatype</DIV>
    <DIV class="ref-content">
      Number, with optional sign, no fractions, and no exponent
    </DIV>

    <DIV id="datatype_nmtoken" class="ref-heading">nmtoken datatype</DIV>
    <DIV class="ref-content">
      Represents the XML NMTOKEN type. 
    </DIV>

    <DIV id="datatype_nmtokens" class="ref-heading">nmtokens datatype</DIV>
    <DIV class="ref-content">
      Represents the XML NMTOKENS type. 
    </DIV>

    <DIV id="datatype_notation" class="ref-heading">notation datatype</DIV>
    <DIV class="ref-content">
      Represents a NOTATION type. 
    </DIV>

    <DIV id="datatype_number" class="ref-heading">number datatype</DIV>
    <DIV class="ref-content">
      Number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values have same range as most significant number, R8, 1.7976931348623157E+308 to 2.2250738585072014E-308.
    </DIV>

    <DIV id="datatype_string" class="ref-heading">string datatype</DIV>
    <DIV class="ref-content">
      Represents a string type. 
    </DIV>

    <DIV id="datatype_time" class="ref-heading">time datatype</DIV>
    <DIV class="ref-content">
      Time in a subset ISO 8601 format, with no date and no time zone; for example: "08:15:27". 
    </DIV>

    <DIV id="datatype_time.tz" class="ref-heading">time.tz datatype</DIV>
    <DIV class="ref-content">
      Time in a subset ISO 8601 format, with no date but optional time zone; for example: "08:1527-05:00". 
    </DIV>

    <DIV id="datatype_i1" class="ref-heading">i1 datatype</DIV>
    <DIV class="ref-content">
      Integer represented in one byte; a number, with optional sign, no fractions, no exponent&#8212;for example: "1, 127, -128". 
    </DIV>

    <DIV id="datatype_i2" class="ref-heading">i2 datatype</DIV>
    <DIV class="ref-content">
      Integer represented in one word; a number, with optional sign, no fractions, no exponent&#8212;for example: "1, 703, -32768". 
    </DIV>

    <DIV id="datatype_i4" class="ref-heading">i4 datatype</DIV>
    <DIV class="ref-content">
      Integer represented in four bytes; a number, with optional sign, no fractions, no exponent&#8212;for example: "1, 703, -32768, 148343, -1000000000". 
    </DIV>

    <DIV id="datatype_r4" class="ref-heading">r4 datatype</DIV>
    <DIV class="ref-content">
      Real number, with seven-digit precision; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 3.40282347E+38F to 1.17549435E-38F. 
    </DIV>

    <DIV id="datatype_r8" class="ref-heading">r8</DIV>
    <DIV class="ref-content">
      Real number, with 15-digit precision; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. 
    </DIV>

    <DIV id="datatype_ui1" class="ref-heading">ui1 datatype</DIV>
    <DIV class="ref-content">
      Unsigned integer; a number, unsigned, no fractions, no exponent&#8212;for example: "1, 255". 
    </DIV>

    <DIV id="datatype_ui2" class="ref-heading">ui2 datatype</DIV>
    <DIV class="ref-content">
      Unsigned integer, two bytes; a number, unsigned, no fractions, no exponent&#8212;for example: "1, 255, 65535". 
    </DIV>

    <DIV id="datatype_ui4" class="ref-heading">ui4 datatype</DIV>
    <DIV class="ref-content">
      Unsigned integer, four bytes; a number, unsigned, no fractions, no exponent&#8212;for example: "1, 703, 3000000000". 
    </DIV>

    <DIV id="datatype_uri" class="ref-heading">uri datatype</DIV>
    <DIV class="ref-content">
      Uniform Resource Identifier (URI); for example, "urn:schemas-microsoft-com:Office9". 
    </DIV>

    <DIV id="datatype_uuid" class="ref-heading">uuid datatype</DIV>
    <DIV class="ref-content">
      Hexadecimal digits representing octets, optional embedded hyphens that are ignored; for example: "333C7BC4-460F-11D0-BC04-0080C7055A83". 
    </DIV>

    <HR/>
    </BODY>
  </HTML>

</xsl:template>

<xsl:template match="s:description">
      <xsl:apply-templates select="node()">
        <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
      </xsl:apply-templates>
</xsl:template>

<xsl:template match="s:ElementType">

  <!-- The link and header -->
  <DIV class="elementType" >
    <A><xsl:attribute name="name">ELEMENT_<xsl:value-of select="@name"/></xsl:attribute>&lt;<xsl:value-of select="@name"/>&gt;</A>
  </DIV>

  <TABLE class="elements">

  <!-- Syntax -->
  <TR>
    <TD class="heading">syntax:</TD>
    <TD class="content">&lt;<SPAN class="syntax-element"><xsl:value-of select="@name"/></SPAN>
      <xsl:if test="s:attribute">
        <TABLE cellspacing="0" cellpadding="0">
          <xsl:for-each select="s:attribute" order-by="@type">
            <TR class="syntax-additional-attributes">
              <xsl:choose>
                <xsl:when test="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
                  <xsl:for-each select="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
                    <TD>&#160;<xsl:if test=".[not(@required) or not(@required='yes')]">[</xsl:if></TD>
                    <TD class="syntax-element-attribute">
                      <A class="attribute-link"><xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@name"/></xsl:attribute>
                      <xsl:value-of select="@name"/></A>
                        = <xsl:choose>
                        <xsl:when test="@dt:type[.='enumeration']">
                          <A class="datatype-link" href="#datatype_enumeration">enumeration</A>:
                          <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
                        </xsl:when>
                        <xsl:when test="@dt:type">
                          <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
                            <xsl:value-of select="@dt:type"/></A>
                        </xsl:when>
                        <xsl:otherwise>
                          <SPAN class="syntax-attribute">string</SPAN>
                        </xsl:otherwise>
                      </xsl:choose>
                      <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
                    </TD>
                  </xsl:for-each>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:for-each select="ancestor(s:Schema)/s:AttributeType[@name=context()/@type]">
                    <TD>&#160;<xsl:if test=".[not(@required) or not(@required='yes')]">[</xsl:if></TD>
                    <TD class="syntax-element-attribute">
                      <A class="attribute-link"><xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute>
                      <xsl:value-of select="@name"/></A>
                        = <xsl:choose>
                        <xsl:when test="@dt:type[.='enumeration']">
                          <A class="datatype-link" href="#datatype_enumeration">enumeration</A>:
                          <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
                        </xsl:when>
                        <xsl:when test="@dt:type">
                          <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
                            <xsl:value-of select="@dt:type"/></A>
                        </xsl:when>
                        <xsl:otherwise>
                          <SPAN class="syntax-attribute">string</SPAN>
                        </xsl:otherwise>
                      </xsl:choose>
                      <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
                    </TD>
                  </xsl:for-each>
                </xsl:otherwise>
              </xsl:choose>
            </TR>
          </xsl:for-each>
        </TABLE>
      </xsl:if>
      
      <xsl:choose>
        <xsl:when test="@content[.='empty'] | @content[.='eltOnly' and not(..//s:element)]">/&gt;</xsl:when>
        <xsl:otherwise>
          &gt;
          <TABLE class="syntax-children">
            <xsl:choose>
              <xsl:when test="@dt:type">
                <xsl:for-each select="@dt:type">
                  <TR><TD>&#160;</TD><TD colspan="2"><A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="."/></xsl:attribute>
                  <xsl:value-of select="."/></A> datatype</TD></TR>
                </xsl:for-each>
              </xsl:when>
              
              <xsl:when test="s:element | s:group"> 
                <TR>
                  <TD class="left-group">&#160;</TD>
                  <TD class="syntax-order">
                    <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
                      <xsl:value-of select="@order"/></A>
                    <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
                  </TD>
                
                  <TD>
                    <TABLE class="syntax-children">
                   
                      <xsl:apply-templates select="s:element | s:group">
            
                        <xsl:template/>
                        
                        <xsl:template match="s:group">
                          <TR>
                            <TD class="left-group">&#160;</TD>
                            <TD class="syntax-order">
                              <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
                                <xsl:value-of select="@order"/></A>
                              <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
                            </TD>
                            <TD>
                              <TABLE class="syntax-children"><xsl:apply-templates select="s:element | s:group"/></TABLE>
                            </TD>
                            <TD class="right-group">&#160;</TD>
                            <xsl:if test="@maxOccurs[.='*']"><TD STYLE="vertical-align:middle">+</TD></xsl:if>
                          </TR>
                        </xsl:template>
                        
                        <xsl:template match="s:group[@minOccurs='0']">
                          <TR>
                            <TD class="left-bracket">&#160;</TD>
                            <TD class="syntax-order">
                              <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
                                <xsl:value-of select="@order"/></A>
                              <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
                            </TD>
                            <TD>
                              <TABLE class="syntax-children"><xsl:apply-templates select="s:element | s:group"/></TABLE>
                            </TD>
                            <TD class="right-bracket">&#160;</TD>
                            <xsl:if test="@maxOccurs[.='*']"><TD STYLE="vertical-align:middle">*</TD></xsl:if>
                          </TR>
                        </xsl:template>
                        
                        <xsl:template match="s:element">
                          <TR><TD>&#160;</TD><TD colspan="2">&lt;<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute><xsl:value-of select="@type"/></A>&gt;
                          <xsl:if test="@maxOccurs[.='*']">+</xsl:if></TD></TR>
                        </xsl:template>
                        
                        <xsl:template match="s:element[@minOccurs='0']">
                          <TR><TD>[&#160;</TD><TD colspan="2">&lt;<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute><xsl:value-of select="@type"/></A>&gt; ]
                          <xsl:if test="@maxOccurs[.='*']">*</xsl:if></TD></TR>
                        </xsl:template>
                      </xsl:apply-templates>
            
                    </TABLE>
                  </TD>
                </TR>
              </xsl:when>
            </xsl:choose>
            
            <xsl:if test=".[not(@dt:type)][@content='mixed' or @content='textOnly']">
              <TR><TD>&#160;</TD><TD colspan="2" class="note"><xsl:value-of select="@content"/> content</TD></TR>
            </xsl:if>
              
           <xsl:if test=".[not(@dt:type)][not(@content)]">
              <TR><TD>&#160;</TD><TD colspan="2" class="note">mixed content</TD></TR>
            </xsl:if>
              
         </TABLE>
          
          &lt;/<SPAN class="syntax-element"><xsl:value-of select="@name"/></SPAN>&gt;
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>

  <TR>
    <TD class="heading">content:</TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="@dt:type">
          <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
            <xsl:value-of select="@dt:type"/></A> datatype
        </xsl:when>
        <xsl:when test="@content">
          <A class="reference-link"><xsl:attribute name="href">#content_<xsl:value-of select="@content"/></xsl:attribute>
            <xsl:value-of select="@content"/></A>
        </xsl:when>
        <xsl:otherwise>
          <A class="reference-link" href="#content_mixed">mixed</A> (default)
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
  
  <TR>
    <TD class="heading">order:</TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="@dt:type">
          <SPAN class="note">Ignored when a datatype is specified.</SPAN>
        </xsl:when>
        <xsl:when test="@order">
          <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
            <xsl:value-of select="@order"/></A>
        </xsl:when>
        <xsl:otherwise>
          <A class="reference-link" href="#order_many">many</A> (default)
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
        
  <!-- Find the parents -->
  <TR>
    <TD class="heading">parents: </TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="../s:ElementType[.//s:element[@type = context()/@name ]]">
          <xsl:for-each order-by="@name" select="../s:ElementType[.//s:element[@type = context()/@name ]]">
            <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute>
              <xsl:value-of select="@name"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
          </xsl:for-each>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
            <xsl:when test=".//s:element">
              <SPAN class="note">No parents found.  This is probably the document element.</SPAN>
            </xsl:when>
            <xsl:otherwise>
              <SPAN class="note">No parents found.  This probably an orphan.</SPAN>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
  
  <!-- dump the possible children -->
  <TR>
    <TD class="heading">childen: </TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="@dt:type">
          <SPAN class="note">No children allowed when a datatype is specified.</SPAN>
        </xsl:when>
        <xsl:when test="@content[.='textOnly']">
          <SPAN class="note">No children allowed when content is <A class="reference-link" href="#content_textOnly">textOnly</A>.</SPAN>
        </xsl:when>
        <xsl:when test=".//s:element">
          <xsl:for-each select=".//s:element" order-by="@type">
            <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute>
              <xsl:value-of select="@type"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
          </xsl:for-each>
        </xsl:when>
        <xsl:otherwise>
          <I>(none)</I>
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
  
  <!-- dump the possible attributes -->
  <TR>
    <TD class="heading">attributes: </TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="s:attribute">
          <xsl:for-each select="s:attribute" order-by="@type">
            <A class="attribute-link" ><xsl:choose>
              <xsl:when test="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
              <xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@type"/></xsl:attribute>
                <xsl:value-of select="@type"/></xsl:when>
              <xsl:otherwise>
                <xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@type"/></xsl:attribute>
                <xsl:value-of select="@type"/></xsl:otherwise>
            </xsl:choose></A><xsl:if test="context()[not(end())]">, </xsl:if>
          </xsl:for-each>
        </xsl:when>
        <xsl:otherwise>
          <I>(none)</I>
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>

  <TR>
    <TD class="heading">model:</TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="@dt:type">
          <SPAN class="note">Treated as <A class="reference-link" href="#model_closed">closed</A> when a datatype is specified.</SPAN>
        </xsl:when>
        <xsl:when test="@model">
          <A class="reference-link"><xsl:attribute name="href">#model_<xsl:value-of select="@model"/></xsl:attribute>
            <xsl:value-of select="@model"/></A>
        </xsl:when>
        <xsl:otherwise>
          <A class="reference-link" href="#model_open">open</A> (default)
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
  
  <TR>
    <TD class="heading">source:</TD>
    <TD class="content">
      <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
    </TD>
  </TR>
  
  </TABLE>

</xsl:template>


<xsl:template match="s:AttributeType">

  <!-- The link and header -->
  <DIV class="attributeType" >
    <xsl:choose>
      <xsl:when test="..[@name = 'DesignXML_V_100.xdr']">
        <A><xsl:attribute name="name">ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute>
          &lt;<xsl:value-of select="@name"/>&gt;
        </A>
      </xsl:when>
      <xsl:when test="..[@name]">
        <A><xsl:attribute name="name">ELEMENTATTRIBUTE_<xsl:value-of select="../@name"/>_<xsl:value-of select="@name"/></xsl:attribute>
          &lt;<xsl:value-of select="../@name"/> <xsl:value-of select="@name"/>&gt;
        </A>
      </xsl:when>
      <xsl:otherwise>
        <A><xsl:attribute name="name">ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute>
          <xsl:value-of select="@name"/>
        </A>
      </xsl:otherwise>
    </xsl:choose>
  </DIV>
    
  <TABLE class="elements">

  <!-- First dump the explanation -->
  <!-- Syntax -->
  <TR>
    <TD class="heading">syntax:</TD>
    <TD class="content">
      <xsl:if test=".[not(@required) or not(@required='yes')]">[ </xsl:if>
      <xsl:value-of select="@name"/>
      = <xsl:choose>
        <xsl:when test="@dt:type[.='enumeration']">
          <A class="datatype-link"><xsl:attribute name="href">#datatype_enumeration</xsl:attribute>enumeration</A>:
          <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
        </xsl:when>
        <xsl:when test="@dt:type">
          <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
          <xsl:value-of select="@dt:type"/></A>
        </xsl:when>
        <xsl:otherwise>
          <SPAN class="syntax-attribute">string</SPAN>
        </xsl:otherwise>
      </xsl:choose>
      <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
    </TD>
  </TR>


  <!-- is this attribute required ? -->
  <TR>
    <TD class="heading">required:</TD>
    <TD class="content">
      <xsl:choose>
        <xsl:when test="@required">
          <xsl:value-of select="@required"/>
        </xsl:when>
        <xsl:otherwise>
          no (default)
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>


  <!-- Is there a datatype? -->
  <xsl:if test="@dt:type">
    <TR>
      <TD class="heading">datatype:</TD>
      <TD class="content"><A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
        <xsl:value-of select="@dt:type"/></A></TD>
    </TR>
  </xsl:if>
  
  <xsl:if test="@dt:values">
    <TR>
      <TD class="heading">values:</TD>
      <TD class="content"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></TD>
    </TR>
  </xsl:if>
  
  <!-- Is there a default value? -->
  <xsl:if test="@default">
    <TR>
      <TD class="heading">default value:</TD>
      <TD class="content"><B><xsl:value-of select="@default"/></B></TD>
    </TR>
  </xsl:if>

  <!-- Elements this attribute can appear on -->
  <TR>
    <TD class="heading">elements:</TD>
    <TD>
      <xsl:choose>
        <xsl:when test="..[@name]">
          <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="../@name"/></xsl:attribute>
            <xsl:value-of select="../@name"/></A>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
            <xsl:when test="../s:ElementType/s:attribute[@type=context()/@name]">
              <xsl:for-each select="../s:ElementType/s:attribute[@type=context()/@name]" order-by="@name">
                <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="../@name"/></xsl:attribute>
                  <xsl:value-of select="../@name"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
              </xsl:for-each>
            </xsl:when>
            <xsl:otherwise>
              <I>(none)</I>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </TD>
  </TR>
  
  <TR>
    <TD class="heading">source:</TD>
    <TD class="content">
      <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
    </TD>
  </TR>
  
  </TABLE>
</xsl:template>

<xsl:script language="JScript"><![CDATA[
  function formatEnum(values, defaultValue)
  {
    var e = values.nodeValue;
    // trim trailing spaces
    while (e.charAt(e.length - 1) == " ")
      e = e.substring(0, e.length - 1);
    var re = new RegExp("\\s+", "g");
    e = e.replace(re, " | ")
    if (defaultValue)
    {
      var d = defaultValue.nodeValue;
      var re = new RegExp(d, "g");
      e = e.replace(re, "<B>" + d + "</B>");
    }
    return e;
  }

  function suppressNS(xmlSource)
  {
    var re = / xmlns[^=]*=['"]urn:schemas-microsoft-com:xml-data['"]/g;
    xmlSource = xmlSource.replace(re, "");
    var re = / xmlns[^=]*=['"]urn:schemas-microsoft-com:datatypes['"]/g;
    xmlSource = xmlSource.replace(re, "");

    // Remove all <description> nodes
    var re = /<description[\s\S]*<['/]description>/g;
    xmlSource = xmlSource.replace(re, "");

    return xmlSource;
  }
]]></xsl:script>
</xsl:stylesheet>

