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

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

sync

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:pav="http://purl.org/pav/2.3"
35xmlns:aa="urn:w3id.org:cmip6.dreq.dreq:a" xmlns:xs="http://www.w3.org/2001/XMLSchema"  elementFormDefault="qualified"><xsl:text>&#xa;</xsl:text>
36<xs:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="dc1.xsd" /><xsl:text>&#xa;</xsl:text>
37<xs:import namespace="http://purl.org/pav/2.3" schemaLocation="pav.xsd"/><xsl:text>&#xa;</xsl:text>
38
39<!-- generic type definitions -->
40  <xs:annotation>
41    <xs:appinfo>W3Schools Note</xs:appinfo>
42    <xs:documentation xml:lang="en">
43       Some specialised string types
44    </xs:documentation>
45  </xs:annotation><xsl:text>&#xa;</xsl:text>
46
47  <xs:simpleType name="st__uid">
48    <xs:restriction base="xs:string">
49    <xs:pattern value="([a-zA-Z0-9:_.+-])+"/></xs:restriction>
50  </xs:simpleType><xsl:text>&#xa;</xsl:text>
51
52  <xs:simpleType name="st__attLabel_def">
53    <xs:restriction base="xs:string">
54    <xs:pattern value="([a-zA-Z0-9-])+"/></xs:restriction>
55  </xs:simpleType><xsl:text>&#xa;</xsl:text>
56
57  <xs:simpleType name="st__attLabel_und">
58    <xs:restriction base="xs:string">
59    <xs:pattern value="([a-zA-Z0-9_])+"/></xs:restriction>
60  </xs:simpleType><xsl:text>&#xa;</xsl:text>
61
62  <xs:simpleType name="st__attLabel_int">
63    <xs:restriction base="xs:integer"/>
64  </xs:simpleType><xsl:text>&#xa;</xsl:text>
65
66  <xs:simpleType name="st__attLabel_an">
67    <xs:restriction base="xs:string">
68    <xs:pattern value="([a-zA-Z0-9])+"/></xs:restriction>
69  </xs:simpleType><xsl:text>&#xa;</xsl:text>
70
71<xs:simpleType name="st__stringList">
72<xs:restriction base="aa:base__stringList">
73     <xs:minLength value="0"/>
74</xs:restriction>
75</xs:simpleType>
76
77<xs:simpleType name="base__stringList">
78    <xs:list itemType="xs:string"/>
79</xs:simpleType><xsl:text>&#xa;</xsl:text>
80
81<xs:simpleType name="st__integerList">
82<xs:restriction base="aa:base__integerList">
83     <xs:minLength value="0"/>
84</xs:restriction>
85</xs:simpleType>
86
87<xs:simpleType name="base__integerList">
88    <xs:list itemType="xs:integer"/>
89</xs:simpleType><xsl:text>&#xa;</xsl:text>
90
91<xs:simpleType name="st__integerListMonInc">
92  <xs:restriction base="aa:st__integerList" />
93</xs:simpleType><xsl:text>&#xa;</xsl:text>
94
95<xs:simpleType name="st__floatList">
96<xs:restriction base="aa:base__floatList">
97     <xs:minLength value="0"/>
98</xs:restriction>
99</xs:simpleType>
100
101<xs:simpleType name="base__floatList">
102    <xs:list itemType="xs:float"/>
103</xs:simpleType><xsl:text>&#xa;</xsl:text>
104
105  <xs:complexType name="ct__info" mixed="true">
106    <xs:attribute name="srcType" type="xs:string"/>
107    <xs:attribute name="srcRef" type="xs:string"/>
108  </xs:complexType>
109
110<!-- create simple and complex type definitions -->
111     <xsl:apply-templates mode="header"/>
112
113<!-- main content produced by this section -->
114  <xs:annotation>
115    <xs:appinfo>W3Schools Note</xs:appinfo>
116    <xs:documentation xml:lang="en">
117       This schema is automatically generated by xsltproc.
118    </xs:documentation>
119  </xs:annotation><xsl:text>&#xa;</xsl:text>
120
121  <xs:element name="document"><xs:complexType><xs:all>
122    <xs:element name="prologue">
123        <xs:complexType>
124          <xs:sequence>
125            <xs:group ref="dc:elementsGroup" maxOccurs="20"/>
126            <xs:group ref="pav:elementsGroup" maxOccurs="20"/>
127          </xs:sequence>
128        </xs:complexType>
129    </xs:element>
130    <xs:element name="main">
131      <xs:complexType>
132        <xs:all><xsl:text>&#xa;</xsl:text>
133           <xsl:apply-templates mode="main"/> 
134        </xs:all>
135      </xs:complexType><xsl:text>&#xa;</xsl:text>
136    </xs:element><xsl:text>&#xa;</xsl:text>
137    <xs:element name="annex">
138      <xs:complexType>
139        <xs:all><xsl:text>&#xa;</xsl:text>
140           <xsl:apply-templates mode="annex"/> 
141        </xs:all>
142      </xs:complexType><xsl:text>&#xa;</xsl:text>
143    </xs:element><xsl:text>&#xa;</xsl:text>
144  </xs:all>
145  </xs:complexType>
146      <xs:unique name="uniqueIdentifierConstraint">
147        <xs:annotation>
148          <xs:appinfo>W3Schools Note</xs:appinfo>
149        <xs:documentation xml:lang="en">
150       The uniqueIdentifierConstraint imposes the condition that the uid attribute on "item" elements should have a unique value.
151        </xs:documentation>
152        </xs:annotation><xsl:text>&#xa;</xsl:text>
153          <xs:selector xpath=".//aa:item"/>
154          <xs:field xpath="@uid"/>
155      </xs:unique><xsl:text>&#xa;</xsl:text>
156  </xs:element>
157
158</xs:schema>
159</xsl:template>
160
161<!-- TEMPLATE: definition of vocab elements -->
162<xd:doc>
163  <xd:short>The vocab[main] template is applied once for each vocabulary list.</xd:short>
164  <xd:detail>
165  There is a section with mode="main" to generate the xs:element declarations,
166and a separate section to generate the associcated complexType declarations.
167  </xd:detail>
168</xd:doc>
169<xsl:template match="a:table" mode="main">
170   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
171   <xs:element>
172     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
173     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
174   </xs:element><xsl:text>&#xa;</xsl:text>
175</xsl:template>
176
177<xsl:template match="a:annextable" mode="annex">
178   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
179   <xs:element>
180     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
181     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
182   </xs:element><xsl:text>&#xa;</xsl:text>
183</xsl:template>
184
185<!-- TEMPLATE: definition of vocab type declarations -->
186<xd:doc>
187  <xd:short>The vocab[header] template: complexType declarations </xd:short>
188  <xd:detail>
189     The header mode generates type declarations.
190  </xd:detail>
191</xd:doc>
192<xsl:template match="a:table|a:annextable" mode="header">
193     <xsl:comment>Auto-generated vocabulary complexType declarations/></xsl:comment><xsl:text>&#xa;</xsl:text>
194     <xs:annotation>
195       <xs:appinfo>W3Schools Note</xs:appinfo>
196       <xs:documentation xml:lang="en">
197          <xsl:value-of select="@label"/>: Complex Type declaration
198       </xs:documentation>
199     </xs:annotation><xsl:text>&#xa;</xsl:text>
200     <xs:complexType>
201        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/></xsl:attribute><xsl:text>&#xa;</xsl:text>
202        <xs:sequence>
203           <xs:element name="item" maxOccurs="12000">
204           <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute>
205           </xs:element>
206        </xs:sequence><xsl:text>&#xa;</xsl:text>
207        <xs:attribute name="label" type="xs:string">
208            <xsl:attribute name="fixed"><xsl:value-of select="@label"/></xsl:attribute>
209        </xs:attribute><xsl:text>&#xa;</xsl:text>
210        <xs:attribute name="title" type="xs:string">
211            <xsl:attribute name="fixed"><xsl:value-of select="@title"/></xsl:attribute>
212        </xs:attribute><xsl:text>&#xa;</xsl:text>
213        <xs:attribute name="id" type="xs:string">
214            <xsl:attribute name="fixed"><xsl:value-of select="@id"/></xsl:attribute>
215        </xs:attribute><xsl:text>&#xa;</xsl:text>
216        <xs:attribute name="useClass" fixed="vocab"/><xsl:text>&#xa;</xsl:text>
217        <xs:attribute name="uid" type="xs:string"/><xsl:text>&#xa;</xsl:text>
218    </xs:complexType><xsl:text>&#xa;</xsl:text>
219
220<!-- type declaration for item element -->
221     <xs:annotation>
222          <xs:appinfo>Attribute annotation</xs:appinfo>
223          <xs:documentation xml:lang="en">
224              <xsl:apply-templates mode="annotate-attr"/>
225          </xs:documentation>
226     </xs:annotation><xsl:text>&#xa;</xsl:text>
227
228     <xs:complexType>
229        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute><xsl:text>&#xa;</xsl:text>
230        <xs:attribute name="id" type="xs:string"/><xsl:text>&#xa;</xsl:text>
231        <xs:attribute name="label">
232            <xsl:attribute name="type">aa:st__attLabel_<xsl:value-of select="@itemLabelMode"/></xsl:attribute>
233        </xs:attribute><xsl:text>&#xa;</xsl:text>
234        <xs:attribute name="title" type="xs:string"/>
235<!-- apply templates to pick up list of attributes of each item -->
236            <xsl:apply-templates mode="attr"/>
237        <xsl:text>&#xa;</xsl:text>
238     </xs:complexType>
239</xsl:template>
240
241<xd:doc>
242  <xd:short>rowAttribute: specifications of list item attributes</xd:short>
243  <xd:detail>
244  The rowAttribute template constructs the specifications of attributes in list items.
245  </xd:detail>
246</xd:doc>
247<xsl:template match="a:rowAttribute" mode="attr">
248   <xsl:if test="@label!='label' and @label != 'title'">
249     <xs:attribute name="id" type="xs:string">
250       <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
251       <xsl:choose>
252         <xsl:when test="@type">
253            <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
254         </xsl:when>
255       </xsl:choose>
256       <xsl:choose>
257         <xsl:when test="@required = 'true'">
258            <xsl:attribute name="use">required</xsl:attribute>
259         </xsl:when>
260       </xsl:choose>
261     </xs:attribute><xsl:text>&#xa;</xsl:text>
262   </xsl:if>
263</xsl:template>
264
265<xsl:template match="a:rowAttribute" mode="annotate-attr">
266   <xsl:value-of select="@label"/>;
267   <xsl:choose>
268     <xsl:when test="@type">
269        <xsl:value-of select="@type"/>
270     </xsl:when>
271   </xsl:choose>
272   <xsl:choose>
273     <xsl:when test="@title">
274        <xsl:value-of select="@title"/>
275     </xsl:when>
276   </xsl:choose>
277</xsl:template>
278
279</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.