1 <?xml version="1.0"?> 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 4 <xsl:strip-space elements="xsdtest datatype equiv class"/> 5 6 <xsl:output indent="yes" encoding="utf-8"/> 7 8 <xsl:template match="xsdtest"> 9 <testSuite> 10 <xsl:apply-templates/> 11 </testSuite> 12 </xsl:template> 13 14 <xsl:template match="datatype"> 15 <testSuite> 16 <documentation>Datatype <xsl:value-of select="@name"/></documentation> 17 <testCase> 18 <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/> 19 <correct> 20 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 21 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 22 <data type="{@name}"> 23 <xsl:for-each select="param"> 24 <param name="{@name}"><xsl:value-of select="."/></param> 25 </xsl:for-each> 26 </data> 27 </element> 28 </correct> 29 <xsl:apply-templates select="valid|invalid"/> 30 </testCase> 31 <xsl:apply-templates select="equiv/class|length|lessThan|incomparable"/> 32 </testSuite> 33 </xsl:template> 34 35 <xsl:template match="valid"> 36 <xsl:call-template name="valid"/> 37 </xsl:template> 38 39 <xsl:template match="invalid"> 40 <xsl:call-template name="invalid"/> 41 </xsl:template> 42 43 <xsl:template name="valid"> 44 <valid> 45 <xsl:apply-templates select="@internalSubset"/> 46 <doc> 47 <xsl:copy-of select="namespace::*"/> 48 <xsl:value-of select="."/> 49 </doc> 50 </valid> 51 </xsl:template> 52 53 <xsl:template name="invalid"> 54 <invalid> 55 <xsl:apply-templates select="@internalSubset"/> 56 <doc> 57 <xsl:copy-of select="namespace::*"/> 58 <xsl:value-of select="."/> 59 </doc> 60 </invalid> 61 </xsl:template> 62 63 <xsl:template match="@internalSubset"> 64 <xsl:param name="doc" select="'doc'"/> 65 <xsl:attribute name="dtd"> 66 <xsl:text> 67 <!DOCTYPE </xsl:text> 68 <xsl:value-of select="$doc"/> 69 <xsl:text> [ 70 </xsl:text> 71 <xsl:value-of select="."/> 72 <xsl:text> 73 ]></xsl:text> 74 </xsl:attribute> 75 </xsl:template> 76 77 <xsl:template match="class"> 78 <testCase> 79 <correct> 80 <xsl:for-each select="value[1]"> 81 <xsl:apply-templates select="@internalSubset"> 82 <xsl:with-param name="doc">element</xsl:with-param> 83 </xsl:apply-templates> 84 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 85 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 86 <value> 87 <xsl:copy-of select="namespace::*"/> 88 <xsl:attribute name="type"><xsl:value-of select="../../../@name"/></xsl:attribute> 89 <xsl:value-of select="."/> 90 </value> 91 </element> 92 </xsl:for-each> 93 </correct> 94 <xsl:for-each select="value[position() != 1]"> 95 <xsl:call-template name="valid"/> 96 </xsl:for-each> 97 <xsl:for-each select="preceding-sibling::class/value|following-sibling::class/value"> 98 <xsl:call-template name="invalid"/> 99 </xsl:for-each> 100 </testCase> 101 </xsl:template> 102 103 <xsl:template match="length"> 104 <testCase> 105 <correct> 106 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 107 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 108 <data type="{../@name}"> 109 <param name="length"><xsl:value-of select="@value"/></param> 110 </data> 111 </element> 112 </correct> 113 <xsl:call-template name="valid"/> 114 </testCase> 115 116 <testCase> 117 <correct> 118 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 119 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 120 <data type="{../@name}"> 121 <param name="length"><xsl:value-of select="@value + 1"/></param> 122 </data> 123 </element> 124 </correct> 125 <xsl:call-template name="invalid"/> 126 </testCase> 127 128 <xsl:if test="@value != 0"> 129 <testCase> 130 <correct> 131 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 132 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 133 <data type="{../@name}"> 134 <param name="length"><xsl:value-of select="@value - 1"/></param> 135 </data> 136 </element> 137 </correct> 138 <xsl:call-template name="invalid"/> 139 </testCase> 140 </xsl:if> 141 142 </xsl:template> 143 144 <xsl:template match="lessThan"> 145 <testCase> 146 <correct> 147 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 148 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 149 <data type="{../@name}"> 150 <param name="minExclusive"> 151 <xsl:value-of select="value[1]"/> 152 </param> 153 </data> 154 </element> 155 </correct> 156 <valid> 157 <doc> 158 <xsl:value-of select="value[2]"/> 159 </doc> 160 </valid> 161 <invalid> 162 <doc> 163 <xsl:value-of select="value[1]"/> 164 </doc> 165 </invalid> 166 </testCase> 167 <testCase> 168 <correct> 169 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 170 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 171 <data type="{../@name}"> 172 <param name="minExclusive"> 173 <xsl:value-of select="value[2]"/> 174 </param> 175 </data> 176 </element> 177 </correct> 178 <invalid> 179 <doc> 180 <xsl:value-of select="value[1]"/> 181 </doc> 182 </invalid> 183 <invalid> 184 <doc> 185 <xsl:value-of select="value[2]"/> 186 </doc> 187 </invalid> 188 </testCase> 189 </xsl:template> 190 191 <xsl:template match="incomparable"> 192 <testCase> 193 <correct> 194 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 195 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 196 <data type="{../@name}"> 197 <param name="minExclusive"> 198 <xsl:value-of select="value[1]"/> 199 </param> 200 </data> 201 </element> 202 </correct> 203 <invalid> 204 <doc> 205 <xsl:value-of select="value[2]"/> 206 </doc> 207 </invalid> 208 <invalid> 209 <doc> 210 <xsl:value-of select="value[1]"/> 211 </doc> 212 </invalid> 213 </testCase> 214 <testCase> 215 <correct> 216 <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" 217 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 218 <data type="{../@name}"> 219 <param name="minExclusive"> 220 <xsl:value-of select="value[2]"/> 221 </param> 222 </data> 223 </element> 224 </correct> 225 <invalid> 226 <doc> 227 <xsl:value-of select="value[1]"/> 228 </doc> 229 </invalid> 230 <invalid> 231 <doc> 232 <xsl:value-of select="value[2]"/> 233 </doc> 234 </invalid> 235 </testCase> 236 </xsl:template> 237 238 </xsl:stylesheet> 239