Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
36 kaklik 1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet version="1.0"
3
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
>
5
	<xsl:output method="xml" indent="yes" omit-xml-declaration="no" encoding="UTF-8"/>
6
 
7
	<!-- Schema -->
8
	<xsl:template match="/">
9
		<xsl:comment>
10
ADODB XMLSchema
11
http://adodb-xmlschema.sourceforge.net
12
</xsl:comment>
13
 
14
		<xsl:element name="schema">
15
			<xsl:attribute name="version">0.3</xsl:attribute>
16
 
17
			<xsl:apply-templates select="schema/table|schema/sql"/>
18
		</xsl:element>
19
	</xsl:template>
20
 
21
	<!-- Table -->
22
	<xsl:template match="table">
23
		<xsl:variable name="table_name" select="@name"/>
24
 
25
		<xsl:element name="table">
26
			<xsl:attribute name="name"><xsl:value-of select="$table_name"/></xsl:attribute>
27
 
28
			<xsl:if test="string-length(@platform) > 0">
29
				<xsl:attribute name="platform"><xsl:value-of select="@platform"/></xsl:attribute>
30
			</xsl:if>
31
 
32
			<xsl:if test="string-length(@version) > 0">
33
				<xsl:attribute name="version"><xsl:value-of select="@version"/></xsl:attribute>
34
			</xsl:if>
35
 
36
			<xsl:apply-templates select="descr[1]"/>
37
 
38
			<xsl:choose>
39
				<xsl:when test="count(DROP) > 0">
40
					<xsl:element name="DROP"/>
41
				</xsl:when>
42
				<xsl:otherwise>
43
					<xsl:apply-templates select="field"/>
44
				</xsl:otherwise>
45
			</xsl:choose>
46
 
47
			<xsl:apply-templates select="constraint"/>
48
 
49
			<xsl:apply-templates select="../index[@table=$table_name]"/>
50
		</xsl:element>
51
	</xsl:template>
52
 
53
	<!-- Field -->
54
	<xsl:template match="field">
55
		<xsl:element name="field">
56
			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
57
			<xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
58
 
59
			<xsl:if test="string-length(@size) > 0">
60
				<xsl:attribute name="size"><xsl:value-of select="@size"/></xsl:attribute>
61
			</xsl:if>
62
 
63
			<xsl:choose>
64
				<xsl:when test="string-length(@opts) = 0"/>
65
				<xsl:when test="@opts = 'UNSIGNED'">
66
					<xsl:element name="UNSIGNED"/>
67
				</xsl:when>
68
				<xsl:when test="contains(@opts,'UNSIGNED')">
69
					<xsl:attribute name="opts">
70
						<xsl:value-of select="concat(substring-before(@opts,'UNSIGNED'),substring-after(@opts,'UNSIGNED'))"/>
71
					</xsl:attribute>
72
					<xsl:element name="UNSIGNED"/>
73
				</xsl:when>
74
				<xsl:otherwise>
75
					<xsl:attribute name="opts"><xsl:value-of select="@opts"/></xsl:attribute>
76
				</xsl:otherwise>
77
			</xsl:choose>
78
 
79
			<xsl:choose>
80
				<xsl:when test="count(PRIMARY) > 0">
81
					<xsl:element name="PRIMARY"/>
82
				</xsl:when>
83
				<xsl:when test="count(KEY) > 0">
84
					<xsl:element name="KEY"/>
85
				</xsl:when>
86
				<xsl:when test="count(NOTNULL) > 0">
87
					<xsl:element name="NOTNULL"/>
88
				</xsl:when>
89
			</xsl:choose>
90
 
91
			<xsl:choose>
92
				<xsl:when test="count(AUTO) > 0">
93
					<xsl:element name="AUTO"/>
94
				</xsl:when>
95
				<xsl:when test="count(AUTOINCREMENT) > 0">
96
					<xsl:element name="AUTOINCREMENT"/>
97
				</xsl:when>
98
			</xsl:choose>
99
 
100
			<xsl:choose>
101
				<xsl:when test="count(DEFAULT) > 0">
102
					<xsl:element name="DEFAULT">
103
						<xsl:attribute name="value">
104
							<xsl:value-of select="DEFAULT[1]/@value"/>
105
						</xsl:attribute>
106
					</xsl:element>
107
				</xsl:when>
108
				<xsl:when test="count(DEFDATE) > 0">
109
					<xsl:element name="DEFDATE">
110
						<xsl:attribute name="value">
111
							<xsl:value-of select="DEFDATE[1]/@value"/>
112
						</xsl:attribute>
113
					</xsl:element>
114
				</xsl:when>
115
				<xsl:when test="count(DEFTIMESTAMP) > 0">
116
					<xsl:element name="DEFTIMESTAMP">
117
						<xsl:attribute name="value">
118
							<xsl:value-of select="DEFTIMESTAMP[1]/@value"/>
119
						</xsl:attribute>
120
					</xsl:element>
121
				</xsl:when>
122
			</xsl:choose>
123
 
124
			<xsl:if test="count(NOQUOTE) > 0">
125
				<xsl:element name="NOQUOTE"/>
126
			</xsl:if>
127
 
128
			<xsl:apply-templates select="constraint"/>
129
		</xsl:element>
130
	</xsl:template>
131
 
132
	<!-- Constraint -->
133
	<xsl:template match="constraint">
134
		<xsl:element name="constraint">
135
			<xsl:value-of select="normalize-space(text())"/>
136
		</xsl:element>
137
	</xsl:template>
138
 
139
	<!-- Index -->
140
	<xsl:template match="index">
141
		<xsl:element name="index">
142
			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
143
 
144
			<xsl:apply-templates select="descr[1]"/>
145
 
146
			<xsl:if test="count(CLUSTERED) > 0">
147
				<xsl:element name="CLUSTERED"/>
148
			</xsl:if>
149
 
150
			<xsl:if test="count(BITMAP) > 0">
151
				<xsl:element name="BITMAP"/>
152
			</xsl:if>
153
 
154
			<xsl:if test="count(UNIQUE) > 0">
155
				<xsl:element name="UNIQUE"/>
156
			</xsl:if>
157
 
158
			<xsl:if test="count(FULLTEXT) > 0">
159
				<xsl:element name="FULLTEXT"/>
160
			</xsl:if>
161
 
162
			<xsl:if test="count(HASH) > 0">
163
				<xsl:element name="HASH"/>
164
			</xsl:if>
165
 
166
			<xsl:choose>
167
				<xsl:when test="count(DROP) > 0">
168
					<xsl:element name="DROP"/>
169
				</xsl:when>
170
				<xsl:otherwise>
171
					<xsl:apply-templates select="col"/>
172
				</xsl:otherwise>
173
			</xsl:choose>
174
		</xsl:element>
175
	</xsl:template>
176
 
177
	<!-- Index Column -->
178
	<xsl:template match="col">
179
		<xsl:element name="col">
180
			<xsl:value-of select="normalize-space(text())"/>
181
		</xsl:element>
182
	</xsl:template>
183
 
184
	<!-- SQL QuerySet -->
185
	<xsl:template match="sql">
186
		<xsl:element name="sql">
187
			<xsl:if test="string-length(@platform) > 0">
188
				<xsl:attribute name="platform"><xsl:value-of select="@platform"/></xsl:attribute>
189
			</xsl:if>
190
 
191
			<xsl:if test="string-length(@key) > 0">
192
				<xsl:attribute name="key"><xsl:value-of select="@key"/></xsl:attribute>
193
			</xsl:if>
194
 
195
			<xsl:if test="string-length(@prefixmethod) > 0">
196
				<xsl:attribute name="prefixmethod"><xsl:value-of select="@prefixmethod"/></xsl:attribute>
197
			</xsl:if>
198
 
199
			<xsl:apply-templates select="descr[1]"/>
200
			<xsl:apply-templates select="query"/>
201
		</xsl:element>
202
	</xsl:template>
203
 
204
	<!-- Query -->
205
	<xsl:template match="query">
206
		<xsl:element name="query">
207
			<xsl:if test="string-length(@platform) > 0">
208
				<xsl:attribute name="platform"><xsl:value-of select="@platform"/></xsl:attribute>
209
			</xsl:if>
210
 
211
			<xsl:value-of select="normalize-space(text())"/>
212
		</xsl:element>
213
	</xsl:template>
214
 
215
	<!-- Description -->
216
	<xsl:template match="descr">
217
		<xsl:element name="descr">
218
			<xsl:value-of select="normalize-space(text())"/>
219
		</xsl:element>
220
	</xsl:template>
221
</xsl:stylesheet>