| <?xml version="1.0"?> |
| <xsl:stylesheet version="1.0" xmlns:xsl="http://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="http://www.w3.org/2001/XMLSchema-datatypes"/> |
| <correct> |
| <element xmlns="http://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="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"/></param> |
| </data> |
| </element> |
| </correct> |
| <xsl:call-template name="valid"/> |
| </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="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[2]"/> |
| </doc> |
| </valid> |
| <invalid> |
| <doc> |
| <xsl:value-of select="value[1]"/> |
| </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[1]"/> |
| </doc> |
| </invalid> |
| <invalid> |
| <doc> |
| <xsl:value-of select="value[2]"/> |
| </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[2]"/> |
| </doc> |
| </invalid> |
| <invalid> |
| <doc> |
| <xsl:value-of select="value[1]"/> |
| </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[1]"/> |
| </doc> |
| </invalid> |
| <invalid> |
| <doc> |
| <xsl:value-of select="value[2]"/> |
| </doc> |
| </invalid> |
| </testCase> |
| </xsl:template> |
| |
| </xsl:stylesheet> |