1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/XSLForms/XSL/Schema.xsl Fri Sep 30 22:53:43 2005 +0000
1.3 @@ -0,0 +1,100 @@
1.4 +<?xml version="1.0"?>
1.5 +<xsl:stylesheet version="1.0"
1.6 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
1.7 + xmlns:template="http://www.boddie.org.uk/ns/xmltools/template">
1.8 +
1.9 + <xsl:output indent="yes"/>
1.10 +
1.11 +
1.12 +
1.13 + <!-- Match the document itself. -->
1.14 +
1.15 + <xsl:template match="/">
1.16 +
1.17 + <!-- Process the elements. -->
1.18 + <xsl:apply-templates select="*"/>
1.19 +
1.20 + </xsl:template>
1.21 +
1.22 +
1.23 +
1.24 + <!-- Match element references. -->
1.25 +
1.26 + <xsl:template match="*[@template:element]">
1.27 + <xsl:call-template name="enter-element">
1.28 + <xsl:with-param name="other-elements" select="@template:element"/>
1.29 + </xsl:call-template>
1.30 + </xsl:template>
1.31 +
1.32 + <xsl:template name="enter-element">
1.33 + <xsl:param name="other-elements"/>
1.34 + <xsl:variable name="first-element" select="substring-before($other-elements, ',')"/>
1.35 + <xsl:variable name="remaining-elements" select="substring-after($other-elements, ',')"/>
1.36 + <xsl:choose>
1.37 + <xsl:when test="$first-element = ''">
1.38 + <xsl:call-template name="next-element">
1.39 + <xsl:with-param name="first-element" select="$other-elements"/>
1.40 + </xsl:call-template>
1.41 + </xsl:when>
1.42 + <xsl:otherwise>
1.43 + <xsl:call-template name="next-element">
1.44 + <xsl:with-param name="first-element" select="$first-element"/>
1.45 + <xsl:with-param name="remaining-elements" select="$remaining-elements"/>
1.46 + </xsl:call-template>
1.47 + </xsl:otherwise>
1.48 + </xsl:choose>
1.49 + </xsl:template>
1.50 +
1.51 + <xsl:template name="next-element">
1.52 + <xsl:param name="first-element"/>
1.53 + <xsl:param name="remaining-elements"/>
1.54 + <xsl:element name="element">
1.55 + <xsl:attribute name="name"><xsl:value-of select="$first-element"/></xsl:attribute>
1.56 + <xsl:choose>
1.57 + <xsl:when test="$remaining-elements = ''">
1.58 + <xsl:call-template name="enter-attribute"/>
1.59 + </xsl:when>
1.60 + <xsl:otherwise>
1.61 + <xsl:call-template name="enter-element">
1.62 + <xsl:with-param name="other-elements" select="$remaining-elements"/>
1.63 + </xsl:call-template>
1.64 + </xsl:otherwise>
1.65 + </xsl:choose>
1.66 + </xsl:element>
1.67 + </xsl:template>
1.68 +
1.69 +
1.70 +
1.71 + <!-- Match attributes. -->
1.72 +
1.73 + <xsl:template match="*[not(@template:element) and (@template:attribute or @template:expr-attr)]">
1.74 + <xsl:call-template name="enter-attribute"/>
1.75 + </xsl:template>
1.76 +
1.77 + <xsl:template name="enter-attribute">
1.78 + <xsl:choose>
1.79 + <xsl:when test="@template:attribute">
1.80 + <xsl:element name="attribute">
1.81 + <xsl:attribute name="name"><xsl:value-of select="@template:attribute"/></xsl:attribute>
1.82 + </xsl:element>
1.83 + </xsl:when>
1.84 + <xsl:when test="@template:expr-attr">
1.85 + <xsl:element name="attribute">
1.86 + <xsl:attribute name="name"><xsl:value-of select="@template:value"/></xsl:attribute>
1.87 + </xsl:element>
1.88 + </xsl:when>
1.89 + <xsl:otherwise>
1.90 + <xsl:apply-templates select="*"/>
1.91 + </xsl:otherwise>
1.92 + </xsl:choose>
1.93 + </xsl:template>
1.94 +
1.95 +
1.96 +
1.97 + <!-- Traverse unknown elements. -->
1.98 +
1.99 + <xsl:template match="*">
1.100 + <xsl:apply-templates select="*"/>
1.101 + </xsl:template>
1.102 +
1.103 +</xsl:stylesheet>