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

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

updates to xlst etc

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<xs:simpleType name="st__integerList">
65<xs:restriction base="aa:base__integerList">
66     <xs:minLength value="0"/>
67</xs:restriction>
68</xs:simpleType>
69
70<xs:simpleType name="base__integerList">
71    <xs:list itemType="xs:integer"/>
72</xs:simpleType><xsl:text>&#xa;</xsl:text>
73
74<xs:simpleType name="st__integerListMonInc">
75  <xs:restriction base="aa:st__integerList" />
76</xs:simpleType><xsl:text>&#xa;</xsl:text>
77
78<xs:simpleType name="st__floatList">
79<xs:restriction base="aa:base__floatList">
80     <xs:minLength value="0"/>
81</xs:restriction>
82</xs:simpleType>
83
84<xs:simpleType name="base__floatList">
85    <xs:list itemType="xs:float"/>
86</xs:simpleType><xsl:text>&#xa;</xsl:text>
87
88  <xs:complexType name="ct__info" mixed="true">
89    <xs:attribute name="srcType" type="xs:string"/>
90    <xs:attribute name="srcRef" type="xs:string"/>
91  </xs:complexType>
92
93<!-- create simple and complex type definitions -->
94     <xsl:apply-templates mode="header"/>
95
96<!-- main content produced by this section -->
97  <xs:annotation>
98    <xs:appinfo>W3Schools Note</xs:appinfo>
99    <xs:documentation xml:lang="en">
100       This schema is automatically generated by xsltproc.
101    </xs:documentation>
102  </xs:annotation><xsl:text>&#xa;</xsl:text>
103
104  <xs:element name="document"><xs:complexType><xs:all>
105    <xs:element name="prologue">
106        <xs:complexType>
107          <xs:group ref="dc:elementsGroup" maxOccurs="20"/>
108        </xs:complexType>
109    </xs:element>
110    <xs:element name="main">
111      <xs:complexType>
112        <xs:all><xsl:text>&#xa;</xsl:text>
113           <xsl:apply-templates mode="main"/> 
114        </xs:all>
115      </xs:complexType><xsl:text>&#xa;</xsl:text>
116    </xs:element><xsl:text>&#xa;</xsl:text>
117    <xs:element name="annex">
118      <xs:complexType>
119        <xs:all><xsl:text>&#xa;</xsl:text>
120           <xsl:apply-templates mode="annex"/> 
121        </xs:all>
122      </xs:complexType><xsl:text>&#xa;</xsl:text>
123    </xs:element><xsl:text>&#xa;</xsl:text>
124  </xs:all>
125  </xs:complexType>
126      <xs:unique name="uniqueIdentifierConstraint">
127        <xs:annotation>
128          <xs:appinfo>W3Schools Note</xs:appinfo>
129        <xs:documentation xml:lang="en">
130       The uniqueIdentifierConstraint imposes the condition that the uid attribute on "item" elements should have a unique value.
131        </xs:documentation>
132        </xs:annotation><xsl:text>&#xa;</xsl:text>
133          <xs:selector xpath=".//aa:item"/>
134          <xs:field xpath="@uid"/>
135      </xs:unique><xsl:text>&#xa;</xsl:text>
136  </xs:element>
137
138</xs:schema>
139</xsl:template>
140
141<!-- TEMPLATE: definition of vocab elements -->
142<xd:doc>
143  <xd:short>The vocab[main] template is applied once for each vocabulary list.</xd:short>
144  <xd:detail>
145  There is a section with mode="main" to generate the xs:element declarations,
146and a separate section to generate the associcated complexType declarations.
147  </xd:detail>
148</xd:doc>
149<xsl:template match="a:table" mode="main">
150   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
151   <xs:element>
152     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
153     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
154   </xs:element><xsl:text>&#xa;</xsl:text>
155</xsl:template>
156
157<xsl:template match="a:annextable" mode="annex">
158   <xsl:comment>[applying elem main] <xsl:value-of select="@label"/></xsl:comment><xsl:text>&#xa;</xsl:text>
159   <xs:element>
160     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
161     <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/></xsl:attribute>
162   </xs:element><xsl:text>&#xa;</xsl:text>
163</xsl:template>
164
165<!-- TEMPLATE: definition of vocab type declarations -->
166<xd:doc>
167  <xd:short>The vocab[header] template: complexType declarations </xd:short>
168  <xd:detail>
169     The header mode generates type declarations.
170  </xd:detail>
171</xd:doc>
172<xsl:template match="a:table|a:annextable" mode="header">
173     <xsl:comment>Auto-generated vocabulary complexType declarations/></xsl:comment><xsl:text>&#xa;</xsl:text>
174     <xs:annotation>
175       <xs:appinfo>W3Schools Note</xs:appinfo>
176       <xs:documentation xml:lang="en">
177          <xsl:value-of select="@label"/>: Complex Type declaration
178       </xs:documentation>
179     </xs:annotation><xsl:text>&#xa;</xsl:text>
180     <xs:complexType>
181        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/></xsl:attribute><xsl:text>&#xa;</xsl:text>
182        <xs:sequence>
183           <xs:element name="item" maxOccurs="8000">
184           <xsl:attribute name="type">aa:ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute>
185           </xs:element>
186        </xs:sequence><xsl:text>&#xa;</xsl:text>
187        <xs:attribute name="label" type="xs:string">
188            <xsl:attribute name="fixed"><xsl:value-of select="@label"/></xsl:attribute>
189        </xs:attribute><xsl:text>&#xa;</xsl:text>
190        <xs:attribute name="title" type="xs:string">
191            <xsl:attribute name="fixed"><xsl:value-of select="@title"/></xsl:attribute>
192        </xs:attribute><xsl:text>&#xa;</xsl:text>
193        <xs:attribute name="id" type="xs:string">
194            <xsl:attribute name="fixed"><xsl:value-of select="@id"/></xsl:attribute>
195        </xs:attribute><xsl:text>&#xa;</xsl:text>
196        <xs:attribute name="useClass" fixed="vocab"/><xsl:text>&#xa;</xsl:text>
197        <xs:attribute name="uid" type="xs:string"/><xsl:text>&#xa;</xsl:text>
198    </xs:complexType><xsl:text>&#xa;</xsl:text>
199
200<!-- type declaration for item element -->
201     <xs:annotation>
202          <xs:appinfo>Attribute annotation</xs:appinfo>
203          <xs:documentation xml:lang="en">
204              <xsl:apply-templates mode="annotate-attr"/>
205          </xs:documentation>
206     </xs:annotation><xsl:text>&#xa;</xsl:text>
207
208     <xs:complexType>
209        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute><xsl:text>&#xa;</xsl:text>
210        <xs:attribute name="id" type="xs:string"/><xsl:text>&#xa;</xsl:text>
211        <xs:attribute name="label">
212            <xsl:attribute name="type">aa:st__attLabel_<xsl:value-of select="@itemLabelMode"/></xsl:attribute>
213        </xs:attribute><xsl:text>&#xa;</xsl:text>
214        <xs:attribute name="title" type="xs:string"/>
215<!-- apply templates to pick up list of attributes of each item -->
216            <xsl:apply-templates mode="attr"/>
217        <xsl:text>&#xa;</xsl:text>
218     </xs:complexType>
219</xsl:template>
220
221<xd:doc>
222  <xd:short>rowAttribute: specifications of list item attributes</xd:short>
223  <xd:detail>
224  The rowAttribute template constructs the specifications of attributes in list items.
225  </xd:detail>
226</xd:doc>
227<xsl:template match="a:rowAttribute" mode="attr">
228   <xsl:if test="@label!='label' and @label != 'title'">
229     <xs:attribute name="id" type="xs:string">
230       <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
231       <xsl:choose>
232         <xsl:when test="@type">
233            <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
234         </xsl:when>
235       </xsl:choose>
236     </xs:attribute><xsl:text>&#xa;</xsl:text>
237   </xsl:if>
238</xsl:template>
239
240<xsl:template match="a:rowAttribute" mode="annotate-attr">
241   <xsl:value-of select="@label"/>;
242   <xsl:choose>
243     <xsl:when test="@type">
244        <xsl:value-of select="@type"/>
245     </xsl:when>
246   </xsl:choose>
247   <xsl:choose>
248     <xsl:when test="@title">
249        <xsl:value-of select="@title"/>
250     </xsl:when>
251   </xsl:choose>
252</xsl:template>
253
254</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.