source: CMIP6dreqbuild/trunk/docs/xlst_xdsSchemaGen.xml @ 526

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/docs/xlst_xdsSchemaGen.xml@526
Revision 526, 9.2 KB checked in by mjuckes, 5 years ago (diff)

added tags section in annex ... found bug with valid_max

Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!-- Edited by XMLSpy® -->
3<xsl:stylesheet version="1.0"
4xmlns:xs="http://www.w3.org/2001/XMLSchema"
5xmlns:a="urn:w3id.org:cmip6.dreq.framework:a"
6xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7xmlns:xd="http://www.pnp-software.com/XSLTdoc">
8<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
9<xsl:strip-space  elements="*"/>
10
11<xd:doc mode="main">
12  <xd:short>Mode main generates the declaration of the main document element</xd:short>
13  <xd:detail></xd:detail>
14</xd:doc>
15<xd:doc mode="header">
16  <xd:short>Mode header generates type declarations</xd:short>
17  <xd:detail>Detail for header mode</xd:detail>
18</xd:doc>
19<xd:doc mode="#default">
20  <xd:short>Default mode is used for general bits and pieces</xd:short>
21  <xd:detail>Detail for default mode</xd:detail>
22</xd:doc>
23<xd:doc>
24  <xd:short>The root template element ....</xd:short>
25  <xd:detail>
26    And here comes a <b>more detailed</b> 
27    description showed only in the detailed view of the documentation.
28  </xd:detail>
29</xd:doc>
30
31<xsl:template match="a:defDoc">
32<xs:schema targetNamespace="urn:w3id.org:cmip6.dreq.dreq:a"
33xmlns:dc="http://purl.org/dc/elements/1.1/"
34xmlns:aa="urn:w3id.org:cmip6.dreq.dreq:a" xmlns:xs="http://www.w3.org/2001/XMLSchema"  elementFormDefault="qualified"><xsl:text>&#xa;</xsl:text>
35<xs:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="dc1.xsd" /><xsl:text>&#xa;</xsl:text>
36
37<!-- generic type definitions -->
38  <xs:annotation>
39    <xs:appinfo>W3Schools Note</xs:appinfo>
40    <xs:documentation xml:lang="en">
41       Some specialised string types
42    </xs:documentation>
43  </xs:annotation><xsl:text>&#xa;</xsl:text>
44
45  <xs:simpleType name="st__attLabel_def">
46    <xs:restriction base="xs:string">
47    <xs:pattern value="([a-zA-Z0-9-])+"/></xs:restriction>
48  </xs:simpleType><xsl:text>&#xa;</xsl:text>
49
50  <xs:simpleType name="st__attLabel_und">
51    <xs:restriction base="xs:string">
52    <xs:pattern value="([a-zA-Z0-9_])+"/></xs:restriction>
53  </xs:simpleType><xsl:text>&#xa;</xsl:text>
54
55  <xs:simpleType name="st__attLabel_int">
56    <xs:restriction base="xs:integer"/>
57  </xs:simpleType><xsl:text>&#xa;</xsl:text>
58
59  <xs:simpleType name="st__attLabel_an">
60    <xs:restriction base="xs:string">
61    <xs:pattern value="([a-zA-Z0-9])+"/></xs:restriction>
62  </xs:simpleType><xsl:text>&#xa;</xsl:text>
63
64
65<xs:simpleType name="st__floatList">
66<xs:restriction base="aa:base__floatList">
67     <xs:minLength value="0"/>
68</xs:restriction>
69</xs:simpleType>
70
71<xs:simpleType name="base__floatList">
72    <xs:list itemType="xs:float"/>
73</xs:simpleType>
74
75  <xs:complexType name="ct__info" mixed="true">
76    <xs:attribute name="srcType" type="xs:string"/>
77    <xs:attribute name="srcRef" type="xs:string"/>
78  </xs:complexType>
79
80<!-- create simple and complex type definitions -->
81     <xsl:apply-templates mode="header"/>
82
83<!-- main content produced by this section -->
84  <xs:annotation>
85    <xs:appinfo>W3Schools Note</xs:appinfo>
86    <xs:documentation xml:lang="en">
87       This schema is automatically generated by xsltproc.
88    </xs:documentation>
89  </xs:annotation><xsl:text>&#xa;</xsl:text>
90
91  <xs:element name="document"><xs:complexType><xs:all>
92    <xs:element name="prologue">
93        <xs:complexType>
94          <xs:group ref="dc:elementsGroup" maxOccurs="20"/>
95        </xs:complexType>
96    </xs:element>
97    <xs:element name="main">
98      <xs:complexType>
99        <xs:all><xsl:text>&#xa;</xsl:text>
100           <xsl:apply-templates mode="main"/> 
101        </xs:all>
102      </xs:complexType><xsl:text>&#xa;</xsl:text>
103    </xs:element><xsl:text>&#xa;</xsl:text>
104    <xs:element name="annex">
105      <xs:complexType>
106        <xs:all><xsl:text>&#xa;</xsl:text>
107           <xsl:apply-templates mode="annex"/> 
108        </xs:all>
109      </xs:complexType><xsl:text>&#xa;</xsl:text>
110    </xs:element><xsl:text>&#xa;</xsl:text>
111  </xs:all>
112  </xs:complexType>
113      <xs:unique name="uniqueIdentifierConstraint">
114        <xs:annotation>
115          <xs:appinfo>W3Schools Note</xs:appinfo>
116        <xs:documentation xml:lang="en">
117       The uniqueIdentifierConstraint imposes the condition that the uid attribute on "item" elements should have a unique value.
118        </xs:documentation>
119        </xs:annotation><xsl:text>&#xa;</xsl:text>
120          <xs:selector xpath=".//aa:item"/>
121          <xs:field xpath="@uid"/>
122      </xs:unique><xsl:text>&#xa;</xsl:text>
123  </xs:element>
124
125</xs:schema>
126</xsl:template>
127
128<!-- TEMPLATE: definition of vocab elements -->
129<xd:doc>
130  <xd:short>The vocab[main] template is applied once for each vocabulary list.</xd:short>
131  <xd:detail>
132  There is a section with mode="main" to generate the xs:element declarations,
133and a separate section to generate the associcated complexType declarations.
134  </xd:detail>
135</xd:doc>
136<xsl:template match="a:table" mode="main">
137   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
138   <xs:element>
139     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
140     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
141   </xs:element><xsl:text>&#xa;</xsl:text>
142</xsl:template>
143
144<xsl:template match="a:annextable" mode="annex">
145   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
146   <xs:element>
147     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
148     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
149   </xs:element><xsl:text>&#xa;</xsl:text>
150</xsl:template>
151
152<!-- TEMPLATE: definition of vocab type declarations -->
153<xd:doc>
154  <xd:short>The vocab[header] template: complexType declarations </xd:short>
155  <xd:detail>
156     The header mode generates type declarations.
157  </xd:detail>
158</xd:doc>
159<xsl:template match="a:table|a:annextable" mode="header">
160     <xsl:comment>Auto-generated vocabulary complexType declarations/></xsl:comment><xsl:text>&#xa;</xsl:text>
161     <xs:annotation>
162       <xs:appinfo>W3Schools Note</xs:appinfo>
163       <xs:documentation xml:lang="en">
164          <xsl:value-of select="@label"/>: Complex Type declaration
165       </xs:documentation>
166     </xs:annotation><xsl:text>&#xa;</xsl:text>
167     <xs:complexType>
168        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/></xsl:attribute><xsl:text>&#xa;</xsl:text>
169        <xs:sequence>
170           <xs:element name="item" maxOccurs="8000">
171           <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute>
172           </xs:element>
173        </xs:sequence><xsl:text>&#xa;</xsl:text>
174        <xs:attribute name="label" type="xs:string">
175            <xsl:attribute name="fixed"><xsl:value-of select="@label"/></xsl:attribute>
176        </xs:attribute><xsl:text>&#xa;</xsl:text>
177        <xs:attribute name="title" type="xs:string">
178            <xsl:attribute name="fixed"><xsl:value-of select="@title"/></xsl:attribute>
179        </xs:attribute><xsl:text>&#xa;</xsl:text>
180        <xs:attribute name="id" type="xs:string">
181            <xsl:attribute name="fixed"><xsl:value-of select="@id"/></xsl:attribute>
182        </xs:attribute><xsl:text>&#xa;</xsl:text>
183        <xs:attribute name="useClass" fixed="vocab"/><xsl:text>&#xa;</xsl:text>
184        <xs:attribute name="uid" type="xs:string"/><xsl:text>&#xa;</xsl:text>
185    </xs:complexType><xsl:text>&#xa;</xsl:text>
186
187<!-- type declaration for item element -->
188     <xs:annotation>
189          <xs:appinfo>Attribute annotation</xs:appinfo>
190          <xs:documentation xml:lang="en">
191              <xsl:apply-templates mode="annotate-attr"/>
192          </xs:documentation>
193     </xs:annotation><xsl:text>&#xa;</xsl:text>
194
195     <xs:complexType>
196        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute><xsl:text>&#xa;</xsl:text>
197        <xs:attribute name="id" type="xs:string"/><xsl:text>&#xa;</xsl:text>
198        <xs:attribute name="label">
199            <xsl:attribute name="type">aa:st__attLabel_<xsl:value-of select="@itemLabelMode"/></xsl:attribute>
200        </xs:attribute><xsl:text>&#xa;</xsl:text>
201        <xs:attribute name="title" type="xs:string"/>
202<!-- apply templates to pick up list of attributes of each item -->
203            <xsl:apply-templates mode="attr"/>
204        <xsl:text>&#xa;</xsl:text>
205     </xs:complexType>
206</xsl:template>
207
208<xd:doc>
209  <xd:short>rowAttribute: specifications of list item attributes</xd:short>
210  <xd:detail>
211  The rowAttribute template constructs the specifications of attributes in list items.
212  </xd:detail>
213</xd:doc>
214<xsl:template match="a:rowAttribute" mode="attr">
215   <xsl:if test="@label!='label' and @label != 'title'">
216     <xs:attribute name="id" type="xs:string">
217       <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
218       <xsl:choose>
219         <xsl:when test="@type">
220            <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
221         </xsl:when>
222       </xsl:choose>
223     </xs:attribute><xsl:text>&#xa;</xsl:text>
224   </xsl:if>
225</xsl:template>
226
227<xsl:template match="a:rowAttribute" mode="annotate-attr">
228   <xsl:value-of select="@label"/>;
229   <xsl:choose>
230     <xsl:when test="@type">
231        <xsl:value-of select="@type"/>
232     </xsl:when>
233   </xsl:choose>
234   <xsl:choose>
235     <xsl:when test="@title">
236        <xsl:value-of select="@title"/>
237     </xsl:when>
238   </xsl:choose>
239</xsl:template>
240
241</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.