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&lt;!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