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

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

more updates

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:xsl="http://www.w3.org/1999/XSL/Transform"
6xmlns:xd="http://www.pnp-software.com/XSLTdoc">
7<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
8<xsl:strip-space  elements="*"/>
9
10<xd:doc mode="main">
11  <xd:short>Mode main generates the declaration of the main document element</xd:short>
12  <xd:detail></xd:detail>
13</xd:doc>
14<xd:doc mode="header">
15  <xd:short>Mode header generates type declarations</xd:short>
16  <xd:detail>Detail for header mode</xd:detail>
17</xd:doc>
18<xd:doc mode="#default">
19  <xd:short>Default mode is used for general bits and pieces</xd:short>
20  <xd:detail>Detail for default mode</xd:detail>
21</xd:doc>
22<xd:doc>
23  <xd:short>The root template element ....</xd:short>
24  <xd:detail>
25    And here comes a <b>more detailed</b> 
26    description showed only in the detailed view of the documentation.
27  </xd:detail>
28</xd:doc>
29
30<xsl:template match="defDoc">
31<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xsl:text>&#xa;</xsl:text>
32
33<!-- generic type definitions -->
34  <xs:annotation>
35    <xs:appinfo>W3Schools Note</xs:appinfo>
36    <xs:documentation xml:lang="en">
37       Some specialised string types
38    </xs:documentation>
39  </xs:annotation><xsl:text>&#xa;</xsl:text>
40
41  <xs:simpleType name="st__attLabel_def">
42    <xs:restriction base="xs:string">
43    <xs:pattern value="([a-zA-Z0-9-])+"/></xs:restriction>
44  </xs:simpleType><xsl:text>&#xa;</xsl:text>
45
46  <xs:simpleType name="st__attLabel_int">
47    <xs:restriction base="xs:integer"/>
48  </xs:simpleType><xsl:text>&#xa;</xsl:text>
49
50  <xs:simpleType name="st__attLabel_an">
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  <xs:complexType name="ct__info" mixed="true">
55    <xs:attribute name="srcType" type="xs:string"/>
56    <xs:attribute name="srcRef" type="xs:string"/>
57  </xs:complexType>
58
59<!-- create simple and complex type definitions -->
60     <xsl:apply-templates mode="header"/>
61
62<!-- main content produced by this section -->
63  <xs:annotation>
64    <xs:appinfo>W3Schools Note</xs:appinfo>
65    <xs:documentation xml:lang="en">
66       This schema is automatically generated by xsltproc.
67    </xs:documentation>
68  </xs:annotation><xsl:text>&#xa;</xsl:text>
69
70  <xs:element name="main">
71    <xs:complexType>
72      <xs:all><xsl:text>&#xa;</xsl:text>
73         <xsl:apply-templates mode="main"/> 
74      </xs:all>
75    </xs:complexType><xsl:text>&#xa;</xsl:text>
76  <xs:unique name="uniqueIdentifierConstraint">
77  <xs:annotation>
78    <xs:appinfo>W3Schools Note</xs:appinfo>
79    <xs:documentation xml:lang="en">
80       The uniqueIdentifierConstraint imposes the condition that the uuid attribute on "item" elements should have a unique value.
81    </xs:documentation>
82  </xs:annotation><xsl:text>&#xa;</xsl:text>
83    <xs:selector xpath=".//item"/>
84    <xs:field xpath="@uuid"/>
85  </xs:unique><xsl:text>&#xa;</xsl:text>
86  </xs:element><xsl:text>&#xa;</xsl:text>
87
88</xs:schema>
89</xsl:template>
90
91<!-- TEMPLATE: definition of vocab elements -->
92<xd:doc>
93  <xd:short>The vocab[main] template is applied once for each vocabulary list.</xd:short>
94  <xd:detail>
95  There is a section with mode="main" to generate the xs:element declarations,
96and a separate section to generate the associcated complexType declarations.
97  </xd:detail>
98</xd:doc>
99<xsl:template match="table" mode="main">
100   <xsl:comment>[applying elem main]</xsl:comment><xsl:text>&#xa;</xsl:text>
101   <xs:element>
102     <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
103     <xsl:attribute name="type">ct__<xsl:value-of select="@label"/></xsl:attribute>
104   </xs:element><xsl:text>&#xa;</xsl:text>
105</xsl:template>
106
107<!-- TEMPLATE: definition of vocab type declarations -->
108<xd:doc>
109  <xd:short>The vocab[header] template: complexType declarations </xd:short>
110  <xd:detail>
111     The header mode generates type declarations.
112  </xd:detail>
113</xd:doc>
114<xsl:template match="table" mode="header">
115     <xsl:comment>Auto-generated vocabulary complexType declarations/></xsl:comment><xsl:text>&#xa;</xsl:text>
116     <xs:annotation>
117       <xs:appinfo>W3Schools Note</xs:appinfo>
118       <xs:documentation xml:lang="en">
119          <xsl:value-of select="@label"/>: Complex Type declaration
120       </xs:documentation>
121     </xs:annotation><xsl:text>&#xa;</xsl:text>
122     <xs:complexType>
123        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/></xsl:attribute><xsl:text>&#xa;</xsl:text>
124        <xs:sequence>
125           <!-- removed in favour of placing information in an optional index section -->
126           <!-- <xs:element name="info" type="ct__info"/> -->
127           <xs:element name="item" maxOccurs="8000">
128           <xsl:attribute name="type">ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute>
129           </xs:element>
130        </xs:sequence><xsl:text>&#xa;</xsl:text>
131        <xs:attribute name="label" type="xs:string">
132            <xsl:attribute name="fixed"><xsl:value-of select="@label"/></xsl:attribute>
133        </xs:attribute><xsl:text>&#xa;</xsl:text>
134        <xs:attribute name="title" type="xs:string">
135            <xsl:attribute name="fixed"><xsl:value-of select="@title"/></xsl:attribute>
136        </xs:attribute><xsl:text>&#xa;</xsl:text>
137        <xs:attribute name="id" type="xs:string">
138            <xsl:attribute name="fixed"><xsl:value-of select="@id"/></xsl:attribute>
139        </xs:attribute><xsl:text>&#xa;</xsl:text>
140        <xs:attribute name="class" fixed="vocab"/><xsl:text>&#xa;</xsl:text>
141    </xs:complexType><xsl:text>&#xa;</xsl:text>
142
143<!-- type declaration for item element -->
144     <xs:annotation>
145          <xs:appinfo>Attribute annotation</xs:appinfo>
146          <xs:documentation xml:lang="en">
147              <xsl:apply-templates mode="annotate-attr"/>
148          </xs:documentation>
149     </xs:annotation><xsl:text>&#xa;</xsl:text>
150
151     <xs:complexType>
152        <xsl:attribute name="name">ct__<xsl:value-of select="@label"/>_vocabItem</xsl:attribute><xsl:text>&#xa;</xsl:text>
153        <xs:attribute name="id" type="xs:string"/><xsl:text>&#xa;</xsl:text>
154        <xs:attribute name="label">
155            <xsl:attribute name="type">st__attLabel_<xsl:value-of select="@itemLabelMode"/></xsl:attribute>
156        </xs:attribute><xsl:text>&#xa;</xsl:text>
157        <xs:attribute name="title" type="xs:string"/>
158<!-- apply templates to pick up list of attributes of each item -->
159            <xsl:apply-templates mode="attr"/>
160        <xsl:text>&#xa;</xsl:text>
161     </xs:complexType>
162</xsl:template>
163
164<xd:doc>
165  <xd:short>rowAttribute: specifications of list item attributes</xd:short>
166  <xd:detail>
167  The rowAttribute template constructs the specifications of attributes in list items.
168  </xd:detail>
169</xd:doc>
170<xsl:template match="rowAttribute" mode="attr">
171   <xsl:if test="@label!='label' and @label != 'title'">
172     <xs:attribute name="id" type="xs:string">
173       <xsl:attribute name="name"><xsl:value-of select="@label"/></xsl:attribute>
174       <xsl:choose>
175         <xsl:when test="@type">
176            <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
177         </xsl:when>
178       </xsl:choose>
179     </xs:attribute><xsl:text>&#xa;</xsl:text>
180   </xsl:if>
181</xsl:template>
182
183<xsl:template match="rowAttribute" mode="annotate-attr">
184   <xsl:value-of select="@label"/>;
185   <xsl:choose>
186     <xsl:when test="@type">
187        <xsl:value-of select="@type"/>
188     </xsl:when>
189   </xsl:choose>
190   <xsl:choose>
191     <xsl:when test="@title">
192        <xsl:value-of select="@title"/>
193     </xsl:when>
194   </xsl:choose>
195</xsl:template>
196
197</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.