<?xml version=“1.0”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“www.w3.org/1999/XSL/Transform”>
<xsl:strip-space elements=“xsdtest datatype equiv class”/>
<xsl:output indent=“yes” encoding=“utf-8”/>
<xsl:template match=“xsdtest”>
<testSuite> <xsl:apply-templates/> </testSuite>
</xsl:template>
<xsl:template match=“datatype”> <testSuite> <documentation>Datatype <xsl:value-of select=“@name”/></documentation> <testCase> <requires datatypeLibrary=“www.w3.org/2001/XMLSchema-datatypes”/> <correct> <element xmlns=“relaxng.org/ns/structure/1.0” name=“doc”
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{@name}"> <xsl:for-each select="param"> <param name="{@name}"><xsl:value-of select="."/></param> </xsl:for-each> </data>
</element> </correct> <xsl:apply-templates select=“valid|invalid”/> </testCase> <xsl:apply-templates select=“equiv/class|length|lessThan|incomparable”/> </testSuite> </xsl:template>
<xsl:template match=“valid”>
<xsl:call-template name="valid"/>
</xsl:template>
<xsl:template match=“invalid”>
<xsl:call-template name="invalid"/>
</xsl:template>
<xsl:template name=“valid”>
<valid> <xsl:apply-templates select="@internalSubset"/> <doc> <xsl:copy-of select="namespace::*"/> <xsl:value-of select="."/> </doc> </valid>
</xsl:template>
<xsl:template name=“invalid”>
<invalid> <xsl:apply-templates select="@internalSubset"/> <doc> <xsl:copy-of select="namespace::*"/> <xsl:value-of select="."/> </doc> </invalid>
</xsl:template>
<xsl:template match=“@internalSubset”>
<xsl:param name="doc" select="'doc'"/> <xsl:attribute name="dtd"> <xsl:text>
<!DOCTYPE </xsl:text>
<xsl:value-of select="$doc"/> <xsl:text> [
</xsl:text>
<xsl:value-of select="."/> <xsl:text>
]></xsl:text>
</xsl:attribute>
</xsl:template>
<xsl:template match=“class”> <testCase> <correct>
<xsl:for-each select="value[1]"> <xsl:apply-templates select="@internalSubset"> <xsl:with-param name="doc">element</xsl:with-param> </xsl:apply-templates> <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <value> <xsl:copy-of select="namespace::*"/> <xsl:attribute name="type"><xsl:value-of select="../../../@name"/></xsl:attribute> <xsl:value-of select="."/> </value> </element> </xsl:for-each>
</correct> <xsl:for-each select=“value[position() != 1]”>
<xsl:call-template name="valid"/>
</xsl:for-each> <xsl:for-each select=“preceding-sibling::class/value|following-sibling::class/value”>
<xsl:call-template name="invalid"/>
</xsl:for-each> </testCase> </xsl:template>
<xsl:template match=“length”> <testCase> <correct> <element xmlns=“relaxng.org/ns/structure/1.0” name=“doc”
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="length"><xsl:value-of select="@value"/></param> </data>
</element> </correct> <xsl:call-template name=“valid”/> </testCase>
<testCase> <correct> <element xmlns=“relaxng.org/ns/structure/1.0” name=“doc”
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="length"><xsl:value-of select="@value + 1"/></param> </data>
</element> </correct> <xsl:call-template name=“invalid”/> </testCase>
<xsl:if test=“@value != 0”>
<testCase> <correct> <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="length"><xsl:value-of select="@value - 1"/></param> </data> </element> </correct> <xsl:call-template name="invalid"/> </testCase>
</xsl:if>
</xsl:template>
<xsl:template match=“lessThan”> <testCase> <correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="minExclusive"> <xsl:value-of select="value[1]"/> </param> </data> </element>
</correct> <valid> <doc> <xsl:value-of select=“value”/> </doc> </valid> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> </testCase> <testCase> <correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="minExclusive"> <xsl:value-of select="value[2]"/> </param> </data> </element>
</correct> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> </testCase> </xsl:template>
<xsl:template match=“incomparable”> <testCase> <correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="minExclusive"> <xsl:value-of select="value[1]"/> </param> </data> </element>
</correct> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> </testCase> <testCase> <correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="{../@name}"> <param name="minExclusive"> <xsl:value-of select="value[2]"/> </param> </data> </element>
</correct> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> <invalid> <doc> <xsl:value-of select=“value”/> </doc> </invalid> </testCase> </xsl:template>
</xsl:stylesheet>