xommelier 0.1.21 → 0.1.22

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
+ <?xml-stylesheet href="xsd.xsl" type="text/xsl"?>
2
3
  <!--
3
4
  Downloaded from http://opensearchvalidator.codeplex.com/SourceControl/changeset/view/e180bfbcbb86#TathamOddie.OpenSearchValidator.Logic/Resources/OpenSearchDescription.xsd
4
5
  -->
@@ -1,12 +1,13 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="xsd.xsl" type="text/xsl"?>
2
3
  <!--
3
4
  XML Schema for RSS v2.0
4
5
  Copyright (C) 2003-2008 Jorgen Thelin
5
6
 
6
7
  Microsoft Public License (Ms-PL)
7
8
 
8
- This license governs use of the accompanying software.
9
- If you use the software, you accept this license.
9
+ This license governs use of the accompanying software.
10
+ If you use the software, you accept this license.
10
11
  If you do not accept the license, do not use the software.
11
12
 
12
13
  1. Definitions
@@ -35,11 +36,11 @@ The terms "reproduce," "reproduction," "derivative works," and "distribution" ha
35
36
 
36
37
  (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
37
38
 
38
- (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
39
+ (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
39
40
 
40
41
  -->
41
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
42
- elementFormDefault="unqualified"
42
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
43
+ elementFormDefault="unqualified"
43
44
  version="2.0.2.16">
44
45
  <xs:annotation>
45
46
  <xs:documentation>XML Schema for RSS v2.0 feed files.</xs:documentation>
@@ -230,10 +231,10 @@ The terms "reproduce," "reproduction," "derivative works," and "distribution" ha
230
231
  </xs:any>
231
232
  </xs:choice>
232
233
  <xs:element name="item" type="RssItem" minOccurs="1" maxOccurs="unbounded">
233
- <!--
234
- HACK: According to the RSS 2.0 spec, it should strictly be possible to have zero item elements,
234
+ <!--
235
+ HACK: According to the RSS 2.0 spec, it should strictly be possible to have zero item elements,
235
236
  but this makes the schema non-deterministic with regard to extensibility elements
236
- so for the moment we undid bug-fix 10231 and set minOccurs=1 to work around this problem.
237
+ so for the moment we undid bug-fix 10231 and set minOccurs=1 to work around this problem.
237
238
  -->
238
239
  </xs:element>
239
240
  <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
@@ -456,30 +457,30 @@ Date Revision Description
456
457
  - Use namespace="##other" on <any>'s to create a more deterministic data model.
457
458
  - Added missing xs:documentation inside xs:annotation at the schema level.
458
459
  - Use xs:language for ISO Language Codes in <language> element.
459
- - Change guid to a single declaration. This loses some of the checking of the
460
- URL when the contents of the guid is a permaLink, so we will need to add
460
+ - Change guid to a single declaration. This loses some of the checking of the
461
+ URL when the contents of the guid is a permaLink, so we will need to add
461
462
  that back in with a regexp pattern.
462
463
  14-Apr-2003 3 Changes to solve some element ordering problems.
463
464
  - Use xs:all in place of xs:sequence to support flexible ordering of elements.
464
- Although the ordering constraints for elements is not clear from the
465
- original specification, the custom and practice seems to be that
465
+ Although the ordering constraints for elements is not clear from the
466
+ original specification, the custom and practice seems to be that
466
467
  element ordering is freeform.
467
468
  - Use elemenfFormDefault="qualified" for explicit intent.
468
469
  15-Apr-2003 4 Changes to solve some element ordering problems.
469
470
  - Use xs:choice in place of xs:all as previous usage of <all> was invalid.
470
- This creates the problem that unsufficient constraints can be applied
471
+ This creates the problem that unsufficient constraints can be applied
471
472
  by the schema - for example, it can't prevent two title elements for an item.
472
- - Use elemenfFormDefault="unqualified" for to get the correct behavious
473
+ - Use elemenfFormDefault="unqualified" for to get the correct behavious
473
474
  when importing and combining schemas.
474
- 15-Apr-2003 5 Putting the extensibility element inside the repeating choice solves
475
+ 15-Apr-2003 5 Putting the extensibility element inside the repeating choice solves
475
476
  all problems with element ordering.
476
- 15-Apr-2003 6 - skipHours and skipDays should contain a nested list of values,
477
+ 15-Apr-2003 6 - skipHours and skipDays should contain a nested list of values,
477
478
  not just a single value.
478
479
  - Added version attribute to schema definition.
479
480
  - Corrected type of the cloud element
480
481
  25-Apr-2003 7 - Add regexp for RFC-822 date suggested by Sam Ruby
481
- - I had to leave the base type of the tRfc822FormatDate type
482
- as xs:string due to the problems with using
482
+ - I had to leave the base type of the tRfc822FormatDate type
483
+ as xs:string due to the problems with using
483
484
  a pattern with xs:dateTime described at
484
485
  http://www.thearchitect.co.uk/weblog/archives/2003/04/000142.html
485
486
  19-Jun-2003 8 - Fixed a bug the Oxygen XML Editor spotted in the regexp for RFC-822 dates
@@ -488,11 +489,11 @@ Date Revision Description
488
489
  24-Jun-2003 10 - Missing types for item/title and item/description - Spotted by Andreas Schwotzer.
489
490
  01-Jan-2008 11 - Copy made available under the Microsoft Public License (MS-PL).
490
491
  25-May-2008 12 - Bug fix 10231 from Ken Gruven - channel can contain zero or more items.
491
- 06-Sep-2008 13 - Fixed tab-space whitespace issues. Now always use spaces.
492
- - Undid the fix for bug-fix 10231 since it made the schema non-deterministic
492
+ 06-Sep-2008 13 - Fixed tab-space whitespace issues. Now always use spaces.
493
+ - Undid the fix for bug-fix 10231 since it made the schema non-deterministic
493
494
  with respect to extensibility eleemnts in tRssChannel - need to reconsider the fix.
494
- 08-Sep-2008 14 - Removed 't' prefixes from type names to improve class names
495
- that get code-generated from the schema.
495
+ 08-Sep-2008 14 - Removed 't' prefixes from type names to improve class names
496
+ that get code-generated from the schema.
496
497
  22-Sep-2008 15 - Move type def for rss element in-line for improved compativility with Java 1.6 tools.
497
498
  01-Nov-2008 16 - Added the missing rating element from the spec to RssChannel.
498
499
  -->
@@ -1,4 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="xsd.xsl" type="text/xsl"?>
2
3
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
3
4
  targetNamespace="http://www.sitemaps.org/schemas/sitemap/0.9"
4
5
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
@@ -0,0 +1,287 @@
1
+ <?xml version='1.0'?>
2
+ <?xml-stylesheet href="xsd.xsl" type="text/xsl"?>
3
+ <xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
4
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
5
+ xmlns ="http://www.w3.org/1999/xhtml"
6
+ xml:lang="en">
7
+
8
+ <xs:annotation>
9
+ <xs:documentation>
10
+ <div>
11
+ <h1>About the XML namespace</h1>
12
+
13
+ <div class="bodytext">
14
+ <p>
15
+ This schema document describes the XML namespace, in a form
16
+ suitable for import by other schema documents.
17
+ </p>
18
+ <p>
19
+ See <a href="http://www.w3.org/XML/1998/namespace.html">
20
+ http://www.w3.org/XML/1998/namespace.html</a> and
21
+ <a href="http://www.w3.org/TR/REC-xml">
22
+ http://www.w3.org/TR/REC-xml</a> for information
23
+ about this namespace.
24
+ </p>
25
+ <p>
26
+ Note that local names in this namespace are intended to be
27
+ defined only by the World Wide Web Consortium or its subgroups.
28
+ The names currently defined in this namespace are listed below.
29
+ They should not be used with conflicting semantics by any Working
30
+ Group, specification, or document instance.
31
+ </p>
32
+ <p>
33
+ See further below in this document for more information about <a
34
+ href="#usage">how to refer to this schema document from your own
35
+ XSD schema documents</a> and about <a href="#nsversioning">the
36
+ namespace-versioning policy governing this schema document</a>.
37
+ </p>
38
+ </div>
39
+ </div>
40
+ </xs:documentation>
41
+ </xs:annotation>
42
+
43
+ <xs:attribute name="lang">
44
+ <xs:annotation>
45
+ <xs:documentation>
46
+ <div>
47
+
48
+ <h3>lang (as an attribute name)</h3>
49
+ <p>
50
+ denotes an attribute whose value
51
+ is a language code for the natural language of the content of
52
+ any element; its value is inherited. This name is reserved
53
+ by virtue of its definition in the XML specification.</p>
54
+
55
+ </div>
56
+ <div>
57
+ <h4>Notes</h4>
58
+ <p>
59
+ Attempting to install the relevant ISO 2- and 3-letter
60
+ codes as the enumerated possible values is probably never
61
+ going to be a realistic possibility.
62
+ </p>
63
+ <p>
64
+ See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
65
+ http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
66
+ and the IANA language subtag registry at
67
+ <a href="http://www.iana.org/assignments/language-subtag-registry">
68
+ http://www.iana.org/assignments/language-subtag-registry</a>
69
+ for further information.
70
+ </p>
71
+ <p>
72
+ The union allows for the 'un-declaration' of xml:lang with
73
+ the empty string.
74
+ </p>
75
+ </div>
76
+ </xs:documentation>
77
+ </xs:annotation>
78
+ <xs:simpleType>
79
+ <xs:union memberTypes="xs:language">
80
+ <xs:simpleType>
81
+ <xs:restriction base="xs:string">
82
+ <xs:enumeration value=""/>
83
+ </xs:restriction>
84
+ </xs:simpleType>
85
+ </xs:union>
86
+ </xs:simpleType>
87
+ </xs:attribute>
88
+
89
+ <xs:attribute name="space">
90
+ <xs:annotation>
91
+ <xs:documentation>
92
+ <div>
93
+
94
+ <h3>space (as an attribute name)</h3>
95
+ <p>
96
+ denotes an attribute whose
97
+ value is a keyword indicating what whitespace processing
98
+ discipline is intended for the content of the element; its
99
+ value is inherited. This name is reserved by virtue of its
100
+ definition in the XML specification.</p>
101
+
102
+ </div>
103
+ </xs:documentation>
104
+ </xs:annotation>
105
+ <xs:simpleType>
106
+ <xs:restriction base="xs:NCName">
107
+ <xs:enumeration value="default"/>
108
+ <xs:enumeration value="preserve"/>
109
+ </xs:restriction>
110
+ </xs:simpleType>
111
+ </xs:attribute>
112
+
113
+ <xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
114
+ <xs:documentation>
115
+ <div>
116
+
117
+ <h3>base (as an attribute name)</h3>
118
+ <p>
119
+ denotes an attribute whose value
120
+ provides a URI to be used as the base for interpreting any
121
+ relative URIs in the scope of the element on which it
122
+ appears; its value is inherited. This name is reserved
123
+ by virtue of its definition in the XML Base specification.</p>
124
+
125
+ <p>
126
+ See <a
127
+ href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
128
+ for information about this attribute.
129
+ </p>
130
+ </div>
131
+ </xs:documentation>
132
+ </xs:annotation>
133
+ </xs:attribute>
134
+
135
+ <xs:attribute name="id" type="xs:ID">
136
+ <xs:annotation>
137
+ <xs:documentation>
138
+ <div>
139
+
140
+ <h3>id (as an attribute name)</h3>
141
+ <p>
142
+ denotes an attribute whose value
143
+ should be interpreted as if declared to be of type ID.
144
+ This name is reserved by virtue of its definition in the
145
+ xml:id specification.</p>
146
+
147
+ <p>
148
+ See <a
149
+ href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
150
+ for information about this attribute.
151
+ </p>
152
+ </div>
153
+ </xs:documentation>
154
+ </xs:annotation>
155
+ </xs:attribute>
156
+
157
+ <xs:attributeGroup name="specialAttrs">
158
+ <xs:attribute ref="xml:base"/>
159
+ <xs:attribute ref="xml:lang"/>
160
+ <xs:attribute ref="xml:space"/>
161
+ <xs:attribute ref="xml:id"/>
162
+ </xs:attributeGroup>
163
+
164
+ <xs:annotation>
165
+ <xs:documentation>
166
+ <div>
167
+
168
+ <h3>Father (in any context at all)</h3>
169
+
170
+ <div class="bodytext">
171
+ <p>
172
+ denotes Jon Bosak, the chair of
173
+ the original XML Working Group. This name is reserved by
174
+ the following decision of the W3C XML Plenary and
175
+ XML Coordination groups:
176
+ </p>
177
+ <blockquote>
178
+ <p>
179
+ In appreciation for his vision, leadership and
180
+ dedication the W3C XML Plenary on this 10th day of
181
+ February, 2000, reserves for Jon Bosak in perpetuity
182
+ the XML name "xml:Father".
183
+ </p>
184
+ </blockquote>
185
+ </div>
186
+ </div>
187
+ </xs:documentation>
188
+ </xs:annotation>
189
+
190
+ <xs:annotation>
191
+ <xs:documentation>
192
+ <div xml:id="usage" id="usage">
193
+ <h2><a name="usage">About this schema document</a></h2>
194
+
195
+ <div class="bodytext">
196
+ <p>
197
+ This schema defines attributes and an attribute group suitable
198
+ for use by schemas wishing to allow <code>xml:base</code>,
199
+ <code>xml:lang</code>, <code>xml:space</code> or
200
+ <code>xml:id</code> attributes on elements they define.
201
+ </p>
202
+ <p>
203
+ To enable this, such a schema must import this schema for
204
+ the XML namespace, e.g. as follows:
205
+ </p>
206
+ <pre>
207
+ &lt;schema . . .>
208
+ . . .
209
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
210
+ schemaLocation="http://www.w3.org/2001/xml.xsd"/>
211
+ </pre>
212
+ <p>
213
+ or
214
+ </p>
215
+ <pre>
216
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
217
+ schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
218
+ </pre>
219
+ <p>
220
+ Subsequently, qualified reference to any of the attributes or the
221
+ group defined below will have the desired effect, e.g.
222
+ </p>
223
+ <pre>
224
+ &lt;type . . .>
225
+ . . .
226
+ &lt;attributeGroup ref="xml:specialAttrs"/>
227
+ </pre>
228
+ <p>
229
+ will define a type which will schema-validate an instance element
230
+ with any of those attributes.
231
+ </p>
232
+ </div>
233
+ </div>
234
+ </xs:documentation>
235
+ </xs:annotation>
236
+
237
+ <xs:annotation>
238
+ <xs:documentation>
239
+ <div id="nsversioning" xml:id="nsversioning">
240
+ <h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
241
+ <div class="bodytext">
242
+ <p>
243
+ In keeping with the XML Schema WG's standard versioning
244
+ policy, this schema document will persist at
245
+ <a href="http://www.w3.org/2009/01/xml.xsd">
246
+ http://www.w3.org/2009/01/xml.xsd</a>.
247
+ </p>
248
+ <p>
249
+ At the date of issue it can also be found at
250
+ <a href="http://www.w3.org/2001/xml.xsd">
251
+ http://www.w3.org/2001/xml.xsd</a>.
252
+ </p>
253
+ <p>
254
+ The schema document at that URI may however change in the future,
255
+ in order to remain compatible with the latest version of XML
256
+ Schema itself, or with the XML namespace itself. In other words,
257
+ if the XML Schema or XML namespaces change, the version of this
258
+ document at <a href="http://www.w3.org/2001/xml.xsd">
259
+ http://www.w3.org/2001/xml.xsd
260
+ </a>
261
+ will change accordingly; the version at
262
+ <a href="http://www.w3.org/2009/01/xml.xsd">
263
+ http://www.w3.org/2009/01/xml.xsd
264
+ </a>
265
+ will not change.
266
+ </p>
267
+ <p>
268
+ Previous dated (and unchanging) versions of this schema
269
+ document are at:
270
+ </p>
271
+ <ul>
272
+ <li><a href="http://www.w3.org/2009/01/xml.xsd">
273
+ http://www.w3.org/2009/01/xml.xsd</a></li>
274
+ <li><a href="http://www.w3.org/2007/08/xml.xsd">
275
+ http://www.w3.org/2007/08/xml.xsd</a></li>
276
+ <li><a href="http://www.w3.org/2004/10/xml.xsd">
277
+ http://www.w3.org/2004/10/xml.xsd</a></li>
278
+ <li><a href="http://www.w3.org/2001/03/xml.xsd">
279
+ http://www.w3.org/2001/03/xml.xsd</a></li>
280
+ </ul>
281
+ </div>
282
+ </div>
283
+ </xs:documentation>
284
+ </xs:annotation>
285
+
286
+ </xs:schema>
287
+
@@ -0,0 +1,997 @@
1
+ <!DOCTYPE xsl:stylesheet [
2
+ <!--*
3
+ <!DOCTYPE xsl:stylesheet PUBLIC 'http://www.w3.org/1999/XSL/Transform'
4
+ '../../People/cmsmcq/lib/xslt10.dtd' [
5
+ *-->
6
+ <!ATTLIST xsl:stylesheet
7
+ xmlns:xsl CDATA "http://www.w3.org/1999/XSL/Transform"
8
+ xmlns:xsd CDATA #IMPLIED
9
+ xmlns:xhtml CDATA #IMPLIED
10
+ >
11
+ <!ATTLIST xsl:text
12
+ xmlns:xsl CDATA "http://www.w3.org/1999/XSL/Transform"
13
+ >
14
+
15
+ <!ENTITY copy "&#169;" ><!--=copyright sign-->
16
+ <!ENTITY reg "&#174;" ><!--/circledR =registered sign-->
17
+ <!ENTITY rarr "&#x2192;" ><!--/rightarrow /to A: =rightward arrow-->
18
+
19
+ <!ENTITY nl "&#xA;">
20
+ <!ENTITY lsquo "&#x2018;" ><!--=single quotation mark, left-->
21
+ <!ENTITY rsquo "&#x2019;" ><!--=single quotation mark, right-->
22
+ <!ENTITY ldquo "&#x201C;" ><!--=double quotation mark, left-->
23
+ <!ENTITY rdquo "&#x201D;" ><!--=double quotation mark, right-->
24
+
25
+ ]>
26
+ <xsl:stylesheet version="1.0"
27
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
28
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
29
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
30
+ >
31
+
32
+ <!--* xsd.xsl: format an XSD schema document for simple display in a Web browser.
33
+ * http://www.w3.org/XML/2004/xml-schema-test-suite/xsd.xsl
34
+ *
35
+ * Copyright © 2008-2009 World Wide Web Consortium, (Massachusetts
36
+ * Institute of Technology, European Research Consortium for
37
+ * Informatics and Mathematics, Keio University). All Rights
38
+ * Reserved. This work is distributed under the W3C® Software
39
+ * License [1] in the hope that it will be useful, but WITHOUT ANY
40
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
41
+ * FITNESS FOR A PARTICULAR PURPOSE.
42
+ *
43
+ * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
44
+ *
45
+ *-->
46
+
47
+ <!--* Revisions:
48
+ * 2012-05-03 : CMSMcQ : reissue under Software License, not document
49
+ * license
50
+ * 2009-01-21 : CMSMcQ : wrap start-tags only when necessary
51
+ * 2009-01-20 : CMSMcQ : wrap start-tags
52
+ * 2008-12-19 : CMSMcQ : add toc for schema documents with more than
53
+ * five children of xsd:schema
54
+ * 2008-12-18 : CMSMcQ : fix problems with text breaking
55
+ * add rule for top-level attribute groups
56
+ * 2008-09-27 : CMSMcQ : made first version of this stylesheet
57
+ *-->
58
+
59
+ <xsl:output method="html" indent="yes"/>
60
+
61
+ <xsl:param name="line-wrap-length" select="60"/>
62
+ <xsl:param name="ind-depth" select="6"/>
63
+ <xsl:param name="additional-indent" select="substring(
64
+ ' ',
65
+ 1,$ind-depth)"/>
66
+
67
+ <xsl:variable name="tns">
68
+ <xsl:value-of select="/xsd:schema/@targetNamespace"/>
69
+ </xsl:variable>
70
+
71
+ <!--* 0 Document root *-->
72
+ <xsl:template match="/">
73
+
74
+ <xsl:variable name="doctitle">
75
+ <xsl:text>Schema document for </xsl:text>
76
+ <xsl:choose>
77
+ <xsl:when test="xsd:schema/@targetNamespace">
78
+ <xsl:text>namespace </xsl:text>
79
+ <xsl:value-of select="$tns"/>
80
+ </xsl:when>
81
+ <xsl:otherwise>
82
+ <xsl:text>unspecified namespace</xsl:text>
83
+ </xsl:otherwise>
84
+ </xsl:choose>
85
+ </xsl:variable>
86
+
87
+ <xsl:variable name="docHasHeading" select="
88
+ xsd:schema/xsd:annotation[1]/xsd:documentation/*[1]
89
+ [self::xhtml:h1 or self::h1]
90
+ or
91
+ xsd:schema/xsd:annotation[1]/xsd:documentation/xhtml:div/*[1]
92
+ [self::xhtml:h1 or self::h1]
93
+ "/>
94
+ <xsl:variable name="docIsProlific" select="
95
+ count(xsd:schema/child::*) &gt; 5
96
+ "/>
97
+
98
+ <xsl:element name="html">
99
+ <xsl:element name="head">
100
+ <xsl:element name="title">
101
+ <xsl:value-of select="$doctitle"/>
102
+ </xsl:element>
103
+ <xsl:element name="style">
104
+ <xsl:attribute name="type">text/css</xsl:attribute>
105
+ .bodytext .bodytext {
106
+ margin-left: 0;
107
+ margin-right: 0;
108
+ }
109
+ .bodytext {
110
+ margin-left: 15%;
111
+ margin-right: 2%;
112
+ }
113
+ .annotation {
114
+ <!--* anything special to do here? *-->
115
+ <!--* color: navy; *-->
116
+ }
117
+ .same-ns {
118
+ color: Green;
119
+ }
120
+ .diff-ns {
121
+ color: maroon;
122
+ }
123
+ .warning {
124
+ color: red;
125
+ }
126
+ p.note {
127
+ font-style: italic;
128
+ }
129
+ p.dt {
130
+ font-weight: bold;
131
+ }
132
+ span.rfc {
133
+ font-variant: small-caps;
134
+ }
135
+ </xsl:element>
136
+ </xsl:element>
137
+ <xsl:element name="body">
138
+
139
+ <xsl:choose>
140
+ <xsl:when test="$docHasHeading and not($docIsProlific)">
141
+ <!--* If the first thing in the first documentation element is a heading,
142
+ * and there are few children, then don't interfere.
143
+ *-->
144
+ <xsl:comment>* <xsl:value-of select="$doctitle"/> *</xsl:comment>
145
+ </xsl:when>
146
+ <xsl:otherwise>
147
+ <!--* either document has no heading (and needs one), or
148
+ * we're going to do a toc and need a heading anyway
149
+ *-->
150
+ <xsl:element name="h1">
151
+ <xsl:value-of select="$doctitle"/>
152
+ </xsl:element>
153
+ <xsl:if test="$docIsProlific">
154
+ <xsl:element name="div">
155
+ <xsl:element name="hr"/>
156
+ <xsl:element name="ul">
157
+ <xsl:attribute name="class">bodytext</xsl:attribute>
158
+ <xsl:apply-templates mode="toc" select="./xsd:schema/*"/>
159
+ </xsl:element>
160
+ <xsl:element name="hr"/>
161
+ </xsl:element>
162
+ </xsl:if>
163
+ </xsl:otherwise>
164
+ </xsl:choose>
165
+ <xsl:apply-templates/>
166
+ </xsl:element>
167
+ </xsl:element>
168
+ </xsl:template>
169
+
170
+ <!--* 2 Schema element *-->
171
+ <xsl:template match="xsd:schema">
172
+ <!--* optional future change: write out information here about
173
+ * the attributes of xsd:schema: version, finalDefault, blockDefault,
174
+ * elementFormDefault, atgtributeFormDefault, namespace bindings ...
175
+ *-->
176
+ <xsl:apply-templates/>
177
+ </xsl:template>
178
+
179
+ <!--* 3 Anotation *-->
180
+ <xsl:template match="xsd:annotation">
181
+ <xsl:element name="div">
182
+ <xsl:attribute name="class">annotation</xsl:attribute>
183
+ <xsl:attribute name="id">
184
+ <xsl:call-template name="leid">
185
+ </xsl:call-template>
186
+ </xsl:attribute>
187
+ <xsl:if test="not(./xsd:documentation//*[@class='bodytext'])">
188
+ <xsl:element name="h3">Annotation</xsl:element>
189
+ </xsl:if>
190
+ <xsl:element name="div">
191
+ <xsl:choose>
192
+ <xsl:when test="./xsd:documentation//*[@class='bodytext']">
193
+ <!--* if the schema document is already using class=bodytext,
194
+ * let the schema author control the margins, don't
195
+ * assign the class here.
196
+ *-->
197
+ </xsl:when>
198
+ <xsl:otherwise>
199
+ <xsl:attribute name="class">bodytext</xsl:attribute>
200
+ </xsl:otherwise>
201
+ </xsl:choose>
202
+ <xsl:apply-templates/>
203
+ </xsl:element>
204
+ </xsl:element>
205
+ </xsl:template>
206
+
207
+ <xsl:template match="xsd:documentation">
208
+ <xsl:choose>
209
+ <xsl:when test=".//xhtml:* or .//div or .//p or .//li">
210
+ <xsl:copy-of select="*"/>
211
+ </xsl:when>
212
+ <xsl:when test="./*">
213
+ <xsl:message>! Unrecognized children in xs:documentation element</xsl:message>
214
+ <xsl:copy-of select="*"/>
215
+ </xsl:when>
216
+ <xsl:otherwise>
217
+ <xsl:call-template name="break-pcdata">
218
+ <xsl:with-param name="s" select="string(.)"/>
219
+ </xsl:call-template>
220
+ </xsl:otherwise>
221
+ </xsl:choose>
222
+ </xsl:template>
223
+
224
+ <xsl:template name="break-pcdata">
225
+ <xsl:param name="s"></xsl:param>
226
+
227
+ <xsl:choose>
228
+ <xsl:when test="starts-with($s,'&#xA;')">
229
+ <xsl:text>&#xA;</xsl:text>
230
+ <xsl:element name="br"/>
231
+ <xsl:call-template name="break-pcdata">
232
+ <xsl:with-param name="s" select="substring($s,2)"/>
233
+ </xsl:call-template>
234
+ </xsl:when>
235
+ <xsl:when test="starts-with($s,' ')">
236
+ <xsl:text>&#xA0;</xsl:text>
237
+ <xsl:call-template name="break-pcdata">
238
+ <xsl:with-param name="s" select="substring($s,2)"/>
239
+ </xsl:call-template>
240
+ </xsl:when>
241
+ <xsl:when test="contains($s,'&#xA;')">
242
+ <xsl:value-of select="substring-before($s,'&#xA;')"/>
243
+ <xsl:text>&#xA;</xsl:text>
244
+ <xsl:element name="br"/>
245
+ <xsl:call-template name="break-pcdata">
246
+ <xsl:with-param name="s" select="substring-after($s,'&#xA;')"/>
247
+ </xsl:call-template>
248
+ </xsl:when>
249
+ <xsl:otherwise>
250
+ <xsl:value-of select="$s"/>
251
+ </xsl:otherwise>
252
+ </xsl:choose>
253
+ </xsl:template>
254
+
255
+ <!--* 4 Top-level components *-->
256
+ <xsl:template match="
257
+ xsd:schema/xsd:attribute
258
+ | xsd:schema/xsd:element
259
+ | xsd:schema/xsd:simpleType
260
+ | xsd:schema/xsd:complexType
261
+ | xsd:schema/xsd:attributeGroup
262
+ | xsd:schema/xsd:import
263
+ | xsd:schema/xsd:group
264
+ | xsd:schema/xsd:notation
265
+ ">
266
+ <xsl:call-template name="show-top-level-component"/>
267
+ </xsl:template>
268
+
269
+ <xsl:template name="show-top-level-component">
270
+ <xsl:variable name="sort">
271
+ <xsl:call-template name="sort"/>
272
+ </xsl:variable>
273
+ <xsl:variable name="leid">
274
+ <xsl:call-template name="leid"/>
275
+ </xsl:variable>
276
+ <xsl:variable name="has-heading-already">
277
+ <xsl:choose>
278
+ <xsl:when test="./xsd:annotation[1]/xsd:documentation/*//*
279
+ [self::xhtml:*[starts-with(local-name(),'h')]
280
+ or
281
+ self::*[contains(' h1 h2 h3 h4 h5 ',local-name())]
282
+ ]">
283
+ <xsl:value-of select="'true'"/>
284
+ </xsl:when>
285
+ <xsl:otherwise>
286
+ <xsl:value-of select="'false'"/>
287
+ </xsl:otherwise>
288
+ </xsl:choose>
289
+ </xsl:variable>
290
+
291
+ <xsl:element name="div">
292
+ <xsl:attribute name="id">
293
+ <xsl:value-of select="$leid"/>
294
+ </xsl:attribute>
295
+ <xsl:element name="h3">
296
+ <xsl:element name="a">
297
+ <xsl:attribute name="name">
298
+ <xsl:value-of select="$leid"/>
299
+ </xsl:attribute>
300
+ <xsl:value-of select="concat($sort,' ')"/>
301
+ <xsl:choose>
302
+ <xsl:when test="count(@name) = 1">
303
+ <xsl:element name="em">
304
+ <xsl:value-of select="@name"/>
305
+ </xsl:element>
306
+ </xsl:when>
307
+ <xsl:when test="self::xsd:import and (count(@namespace) = 1)">
308
+ <xsl:element name="code">
309
+ <xsl:value-of select="@namespace"/>
310
+ </xsl:element>
311
+ </xsl:when>
312
+ </xsl:choose>
313
+ </xsl:element>
314
+ </xsl:element>
315
+
316
+ <xsl:element name="div">
317
+ <xsl:attribute name="class">bodytext</xsl:attribute>
318
+
319
+ <xsl:if test="./xsd:annotation/xsd:documentation">
320
+ <xsl:element name="div">
321
+ <xsl:if test="$has-heading-already = 'false'">
322
+ <xsl:element name="h4">Notes</xsl:element>
323
+ </xsl:if><!-- /if .$has-heading-already *-->
324
+ <xsl:apply-templates select="xsd:annotation/xsd:documentation"/>
325
+ <xsl:if test="count(./xsd:annotation/xsd:documentation/@source) = 1">
326
+ <xsl:element name="p">
327
+ <xsl:text>External documentation at </xsl:text>
328
+ <xsl:element name="code">
329
+ <xsl:element name="a">
330
+ <xsl:attribute name="href">
331
+ <xsl:value-of select="./xsd:annotation/xsd:documentation/@source"/>
332
+ </xsl:attribute>
333
+ <xsl:value-of select="./xsd:annotation/xsd:documentation/@source"/>
334
+ </xsl:element>
335
+ </xsl:element>
336
+ </xsl:element>
337
+ </xsl:if>
338
+ </xsl:element>
339
+ </xsl:if><!-- /if ./xsd:annotation/xsd:documentation *-->
340
+
341
+ <xsl:element name="div">
342
+ <xsl:element name="h4">Formal declaration in XSD source form</xsl:element>
343
+ <xsl:element name="pre">
344
+ <xsl:variable name="preceding-node"
345
+ select="./preceding-sibling::node()[1]"/>
346
+ <xsl:if test="not($preceding-node/self::*)
347
+ and (normalize-space($preceding-node) = '')">
348
+ <xsl:value-of select="$preceding-node"/>
349
+ </xsl:if>
350
+ <xsl:apply-templates select="." mode="echo-xml"/>
351
+ </xsl:element>
352
+ </xsl:element><!--* div for XSD source form *-->
353
+ </xsl:element><!--* div for documentation and formal description *-->
354
+
355
+ </xsl:element><!--* div for top-level component *-->
356
+ </xsl:template>
357
+
358
+
359
+ <!--* 5 xml mode *-->
360
+ <xsl:template match="*" mode="echo-xml">
361
+ <xsl:variable name="s0">
362
+ <xsl:call-template name="lastline-suffix">
363
+ <xsl:with-param name="s0" select="preceding-sibling::text()
364
+ [string-length(.) > 0][1]" />
365
+ </xsl:call-template>
366
+ </xsl:variable>
367
+ <xsl:variable name="width">
368
+ <xsl:call-template name="stag-width">
369
+ <xsl:with-param name="indent-length" select="string-length($s0)"/>
370
+ </xsl:call-template>
371
+ </xsl:variable>
372
+ <!--* <xsl:message>Start-tag width for <xsl:value-of select="name()"/>
373
+ = <xsl:value-of select="$width"/></xsl:message> *-->
374
+
375
+ <xsl:text>&lt;</xsl:text>
376
+ <xsl:value-of select="name()"/>
377
+ <xsl:apply-templates select="@*" mode="echo-xml">
378
+ <xsl:with-param name="break-or-nobreak">
379
+ <xsl:choose>
380
+ <xsl:when test="$width > $line-wrap-length">break</xsl:when>
381
+ <xsl:otherwise>nobreak</xsl:otherwise>
382
+ </xsl:choose>
383
+ </xsl:with-param>
384
+ <xsl:with-param name="s0">
385
+ <xsl:call-template name="lastline-suffix">
386
+ <xsl:with-param name="s0" select="preceding-sibling::text()
387
+ [string-length(.) > 0][1]" />
388
+ </xsl:call-template>
389
+ </xsl:with-param>
390
+ </xsl:apply-templates>
391
+ <xsl:choose>
392
+ <xsl:when test="child::node()">
393
+ <xsl:text>&gt;</xsl:text>
394
+ <xsl:apply-templates select="node()" mode="echo-xml"/>
395
+ <xsl:text>&lt;/</xsl:text>
396
+ <xsl:value-of select="name()"/>
397
+ <xsl:text>&gt;</xsl:text>
398
+ </xsl:when>
399
+ <xsl:otherwise>/&gt;</xsl:otherwise>
400
+ </xsl:choose>
401
+ <!--* </xsl:element> *-->
402
+ </xsl:template>
403
+
404
+ <xsl:template match="xsd:annotation" mode="echo-xml"/>
405
+ <xsl:template match="@xml:space" mode="echo-xml"/>
406
+
407
+ <xsl:template match="@*" mode="echo-xml">
408
+ <xsl:param name="break-or-nobreak">nobreak</xsl:param>
409
+ <xsl:param name="s0"></xsl:param>
410
+ <xsl:variable name="indent">
411
+ <xsl:choose>
412
+ <xsl:when test="normalize-space($s0) = ''">
413
+ <xsl:value-of select="concat($additional-indent,$s0)"/>
414
+ </xsl:when>
415
+ <xsl:otherwise>
416
+ <xsl:value-of select="' '"/>
417
+ </xsl:otherwise>
418
+ </xsl:choose>
419
+ </xsl:variable>
420
+
421
+ <xsl:choose>
422
+ <xsl:when test="parent::xsd:* and $break-or-nobreak = 'break'">
423
+ <xsl:text>&#xA;</xsl:text>
424
+ <xsl:value-of select="$indent"/>
425
+ </xsl:when>
426
+ <xsl:otherwise>
427
+ <xsl:text> </xsl:text>
428
+ </xsl:otherwise>
429
+ </xsl:choose>
430
+ <xsl:value-of select="name()"/>
431
+ <xsl:text>="</xsl:text>
432
+ <xsl:choose>
433
+ <xsl:when test="parent::xsd:element
434
+ and namespace-uri() = ''
435
+ and local-name() = 'ref'
436
+ ">
437
+ <xsl:call-template name="makelink-maybe"/>
438
+ </xsl:when>
439
+ <xsl:when test="parent::xsd:attribute
440
+ and namespace-uri() = ''
441
+ and local-name() = 'ref'
442
+ ">
443
+ <xsl:call-template name="makelink-maybe"/>
444
+ </xsl:when>
445
+ <xsl:when test="parent::xsd:restriction
446
+ and namespace-uri() = ''
447
+ and local-name() = 'base'
448
+ ">
449
+ <xsl:call-template name="makelink-maybe"/>
450
+ </xsl:when>
451
+ <xsl:when test="parent::xsd:extension
452
+ and namespace-uri() = ''
453
+ and local-name() = 'base'
454
+ ">
455
+ <xsl:call-template name="makelink-maybe"/>
456
+ </xsl:when>
457
+ <xsl:when test="parent::xsd:group
458
+ and namespace-uri() = ''
459
+ and local-name() = 'ref'
460
+ ">
461
+ <xsl:call-template name="makelink-maybe"/>
462
+ </xsl:when>
463
+ <xsl:when test="parent::xsd:list
464
+ and namespace-uri() = ''
465
+ and local-name() = 'itemType'
466
+ ">
467
+ <xsl:call-template name="makelink-maybe"/>
468
+ </xsl:when>
469
+ <xsl:when test="parent::xsd:union
470
+ and namespace-uri() = ''
471
+ and local-name() = 'memberTypes'
472
+ ">
473
+ <xsl:call-template name="makelink-several-maybe"/>
474
+ </xsl:when>
475
+ <xsl:when test="parent::xsd:element
476
+ and namespace-uri() = ''
477
+ and local-name() = 'type'
478
+ ">
479
+ <xsl:call-template name="makelink-maybe"/>
480
+ </xsl:when>
481
+ <xsl:when test="parent::xsd:attribute
482
+ and namespace-uri() = ''
483
+ and local-name() = 'type'
484
+ ">
485
+ <xsl:call-template name="makelink-maybe"/>
486
+ </xsl:when>
487
+ <xsl:when test="parent::xsd:element
488
+ and namespace-uri() = ''
489
+ and local-name() = 'substitutionGroup'
490
+ ">
491
+ <xsl:call-template name="makelink-several-maybe"/>
492
+ </xsl:when>
493
+
494
+ <xsl:otherwise>
495
+ <xsl:value-of select="."/>
496
+ </xsl:otherwise>
497
+ </xsl:choose>
498
+ <xsl:text>"</xsl:text>
499
+
500
+ </xsl:template>
501
+ <xsl:template match="text()" mode="echo-xml">
502
+ <xsl:value-of select="."/>
503
+ </xsl:template>
504
+
505
+
506
+ <!--* 6 toc *-->
507
+ <xsl:template mode="toc" match="
508
+ xsd:schema/xsd:annotation
509
+ | xsd:schema/xsd:attribute
510
+ | xsd:schema/xsd:element
511
+ | xsd:schema/xsd:simpleType
512
+ | xsd:schema/xsd:complexType
513
+ | xsd:schema/xsd:attributeGroup
514
+ | xsd:schema/xsd:import
515
+ | xsd:schema/xsd:group
516
+ | xsd:schema/xsd:notation
517
+ ">
518
+ <xsl:call-template name="toc-entry"/>
519
+ </xsl:template>
520
+
521
+ <xsl:template name="toc-entry">
522
+ <xsl:variable name="sort">
523
+ <xsl:call-template name="sort"/>
524
+ </xsl:variable>
525
+ <xsl:variable name="leid">
526
+ <xsl:call-template name="leid"/>
527
+ </xsl:variable>
528
+ <xsl:element name="li">
529
+ <xsl:element name="a">
530
+ <xsl:attribute name="href">
531
+ <xsl:value-of select="concat('#',$leid)"/>
532
+ </xsl:attribute>
533
+ <xsl:choose>
534
+ <xsl:when test="self::xsd:annotation
535
+ and
536
+ ( descendant::xhtml:h1 or descendant::xhtml:h2 or descendant::xhtml:h3
537
+ or descendant::h1 or descendant::h2 or descendant::h3)
538
+ ">
539
+ <xsl:choose>
540
+ <xsl:when test="descendant::xhtml:h1">
541
+ <xsl:value-of select="descendant::xhtml:h1[1]"/>
542
+ </xsl:when>
543
+ <xsl:when test="descendant::h1">
544
+ <xsl:value-of select="descendant::h1[1]"/>
545
+ </xsl:when>
546
+ <xsl:when test="descendant::xhtml:h2">
547
+ <xsl:value-of select="descendant::xhtml:h2[1]"/>
548
+ </xsl:when>
549
+ <xsl:when test="descendant::h2">
550
+ <xsl:value-of select="descendant::h2[1]"/>
551
+ </xsl:when>
552
+ <xsl:when test="descendant::xhtml:h3">
553
+ <xsl:value-of select="descendant::xhtml:h3[1]"/>
554
+ </xsl:when>
555
+ <xsl:when test="descendant::h3">
556
+ <xsl:value-of select="descendant::h3[1]"/>
557
+ </xsl:when>
558
+ </xsl:choose>
559
+
560
+ </xsl:when>
561
+ <xsl:otherwise>
562
+ <xsl:value-of select="concat($sort,' ')"/>
563
+ <xsl:choose>
564
+ <xsl:when test="count(@name) = 1">
565
+ <xsl:element name="em">
566
+ <xsl:value-of select="@name"/>
567
+ </xsl:element>
568
+ </xsl:when>
569
+ <xsl:when test="self::xsd:annotation">
570
+ <xsl:value-of select="1 + count(preceding-sibling::xsd:annotation)"/>
571
+ </xsl:when>
572
+ <xsl:when test="self::xsd:import">
573
+ <xsl:element name="code">
574
+ <xsl:value-of select="@namespace"/>
575
+ </xsl:element>
576
+ </xsl:when>
577
+ <xsl:otherwise>
578
+ <!--* fake it *-->
579
+ <xsl:variable name="gi" select="local-name()"/>
580
+ <xsl:value-of select="1 + count(preceding-sibling::*[local-name() = $gi])"/>
581
+ </xsl:otherwise>
582
+ </xsl:choose>
583
+ </xsl:otherwise>
584
+ </xsl:choose>
585
+ </xsl:element>
586
+ </xsl:element>
587
+
588
+ </xsl:template>
589
+
590
+ <!--* 7 common code for calculating sort and little-endian IDs *-->
591
+ <xsl:template name="sort">
592
+ <xsl:choose>
593
+ <xsl:when test="self::xsd:annotation">
594
+ <xsl:value-of select="'Annotation'"/>
595
+ </xsl:when>
596
+ <xsl:when test="self::xsd:attribute">
597
+ <xsl:value-of select="'Attribute'"/>
598
+ </xsl:when>
599
+ <xsl:when test="self::xsd:element">
600
+ <xsl:value-of select="'Element'"/>
601
+ </xsl:when>
602
+ <xsl:when test="self::xsd:simpleType">
603
+ <xsl:value-of select="'Simple type'"/>
604
+ </xsl:when>
605
+ <xsl:when test="self::xsd:complexType">
606
+ <xsl:value-of select="'Complex type'"/>
607
+ </xsl:when>
608
+ <xsl:when test="self::xsd:attributeGroup">
609
+ <xsl:value-of select="'Attribute group'"/>
610
+ </xsl:when>
611
+ <xsl:when test="self::xsd:group">
612
+ <xsl:value-of select="'Model group'"/>
613
+ </xsl:when>
614
+ <xsl:otherwise>
615
+ <xsl:variable name="gi" select="local-name()"/>
616
+ <xsl:value-of select="concat(
617
+ translate(substring($gi,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
618
+ substring($gi,2)
619
+ )"/>
620
+ </xsl:otherwise>
621
+ </xsl:choose>
622
+ </xsl:template>
623
+ <xsl:template name="leid">
624
+ <xsl:choose>
625
+ <xsl:when test="self::xsd:annotation">
626
+ <xsl:value-of select="concat('ann_',
627
+ string(1+count(preceding-sibling::xsd:annotation)))"/>
628
+ </xsl:when>
629
+ <xsl:when test="self::xsd:attribute">
630
+ <xsl:value-of select="concat('att_',@name)"/>
631
+ </xsl:when>
632
+ <xsl:when test="self::xsd:element">
633
+ <xsl:value-of select="concat('elem_',@name)"/>
634
+ </xsl:when>
635
+ <xsl:when test="self::xsd:simpleType">
636
+ <xsl:value-of select="concat('type_',@name)"/>
637
+ </xsl:when>
638
+ <xsl:when test="self::xsd:complexType">
639
+ <xsl:value-of select="concat('type_',@name)"/>
640
+ </xsl:when>
641
+ <xsl:when test="self::xsd:attributeGroup">
642
+ <xsl:value-of select="concat('attgrp_',@name)"/>
643
+ </xsl:when>
644
+ <xsl:when test="self::xsd:group">
645
+ <xsl:value-of select="concat('grp_',@name)"/>
646
+ </xsl:when>
647
+ <xsl:when test="self::xsd:import">
648
+ <xsl:value-of select="concat('imp_',
649
+ string(1+count(preceding-sibling::xsd:import)))"/>
650
+ </xsl:when>
651
+ <xsl:otherwise>
652
+ <xsl:choose>
653
+ <xsl:when test="@name">
654
+ <xsl:variable name="sort" select="local-name()"/>
655
+ <xsl:value-of select="concat($sort,'_',@name)"/>
656
+ </xsl:when>
657
+ <xsl:otherwise>
658
+ <xsl:variable name="sort" select="local-name()"/>
659
+ <xsl:variable name="pos" select="1 + count(preceding-sibling::*[local-name() = $sort])"/>
660
+ <xsl:value-of select="concat($sort,'_',$pos)"/>
661
+ </xsl:otherwise>
662
+ </xsl:choose>
663
+ </xsl:otherwise>
664
+ </xsl:choose>
665
+ </xsl:template>
666
+
667
+ <!--* 8 unmatched elements (mostly diagnostic for development) *-->
668
+ <xsl:template match="*|@*">
669
+ <xsl:variable name="fqgi">
670
+ <xsl:call-template name="fqgi"/>
671
+ </xsl:variable>
672
+ <xsl:message>Warning: <xsl:value-of select="$fqgi"/> not matched.</xsl:message>
673
+ <xsl:element name="div">
674
+ <xsl:attribute name="class">warning</xsl:attribute>
675
+ <xsl:value-of select="concat('&lt;',name(),'>')"/>
676
+ <xsl:copy>
677
+ <xsl:apply-templates select="@*|node()"/>
678
+ </xsl:copy>
679
+ <xsl:value-of select="concat('&lt;/',name(),'>')"/>
680
+ </xsl:element>
681
+ </xsl:template>
682
+
683
+ <xsl:template name="fqgi" match="*" mode="fqgi">
684
+ <xsl:param name="sBuf"/>
685
+ <xsl:variable name="sCur">
686
+ <xsl:choose>
687
+ <xsl:when test="self::*">
688
+ <!--* elements *-->
689
+ <xsl:value-of select="name()"/>
690
+ </xsl:when>
691
+ <xsl:otherwise>
692
+ <!--* attributes and other riffraff *-->
693
+ <xsl:value-of select="concat('@',name())"/>
694
+ </xsl:otherwise>
695
+ </xsl:choose>
696
+ </xsl:variable>
697
+ <!--*
698
+ <xsl:message>FQGI(<xsl:value-of select="concat($sBuf,',',$sCur)"/>)</xsl:message>
699
+ *-->
700
+ <xsl:choose>
701
+ <xsl:when test="parent::*">
702
+ <xsl:apply-templates mode="fqgi" select="parent::*">
703
+ <xsl:with-param name="sBuf">
704
+ <xsl:value-of select="concat('/',$sCur,$sBuf)"/>
705
+ </xsl:with-param>
706
+ </xsl:apply-templates>
707
+ </xsl:when>
708
+ <xsl:otherwise>
709
+ <xsl:value-of select="concat('/',$sCur,$sBuf)"/>
710
+ </xsl:otherwise>
711
+ </xsl:choose>
712
+ </xsl:template>
713
+
714
+
715
+ <!--* 9 intra-document link calculation, qname manipulation *-->
716
+ <xsl:template name="makelink-several-maybe">
717
+ <xsl:param name="lQNames" select="normalize-space(.)"/>
718
+ <xsl:choose>
719
+ <xsl:when test="contains($lQNames,' ')">
720
+ <!--* recur *-->
721
+ <xsl:call-template name="makelink-maybe">
722
+ <xsl:with-param name="qn" select="substring-before($lQNames,' ')"/>
723
+ </xsl:call-template>
724
+ <xsl:text> </xsl:text>
725
+ <xsl:call-template name="makelink-several-maybe">
726
+ <xsl:with-param name="lQNames" select="substring-after($lQNames,' ')"/>
727
+ </xsl:call-template>
728
+ </xsl:when>
729
+ <xsl:otherwise>
730
+ <!--* base step, no blank so at most one QName *-->
731
+ <xsl:call-template name="makelink-maybe">
732
+ <xsl:with-param name="qn" select="$lQNames"/>
733
+ </xsl:call-template>
734
+ </xsl:otherwise>
735
+ </xsl:choose>
736
+ </xsl:template>
737
+
738
+ <xsl:template name="makelink-maybe">
739
+ <xsl:param name="qn" select="."/>
740
+ <xsl:param name="refns">
741
+ <xsl:call-template name="qname-to-uri">
742
+ <xsl:with-param name="qname" select="$qn"/>
743
+ </xsl:call-template>
744
+ </xsl:param>
745
+ <xsl:param name="lname">
746
+ <xsl:call-template name="qname-to-ncname">
747
+ <xsl:with-param name="qname" select="$qn"/>
748
+ </xsl:call-template>
749
+ </xsl:param>
750
+
751
+ <xsl:variable name="linktarget">
752
+ <xsl:choose>
753
+ <xsl:when test="$tns = $refns">
754
+ <xsl:choose>
755
+ <xsl:when test="parent::xsd:element
756
+ and local-name() = 'ref'
757
+ and count(/xsd:schema/xsd:element[@name = $lname]) = 1">
758
+ <xsl:value-of select="concat('elem_',$lname)"/>
759
+ </xsl:when>
760
+ <xsl:when test="parent::xsd:element
761
+ and local-name() = 'substitutionGroup'
762
+ and count(/xsd:schema/xsd:element[@name = $lname]) = 1">
763
+ <xsl:value-of select="concat('elem_',$lname)"/>
764
+ </xsl:when>
765
+ <xsl:when test="parent::xsd:attribute
766
+ and local-name() = 'ref'
767
+ and count(/xsd:schema/xsd:attribute[@name = $lname]) = 1">
768
+ <xsl:value-of select="concat('att_',$lname)"/>
769
+ </xsl:when>
770
+ <xsl:when test="parent::xsd:restriction
771
+ and count(/xsd:schema/xsd:*[@name = $lname
772
+ and (self::xsd:simpleType or self::xsd:complexType)])
773
+ = 1">
774
+ <xsl:value-of select="concat('type_',$lname)"/>
775
+ </xsl:when>
776
+ <xsl:when test="parent::xsd:extension
777
+ and count(/xsd:schema/xsd:*[@name = $lname
778
+ and (self::xsd:simpleType or self::xsd:complexType)])
779
+ = 1">
780
+ <xsl:value-of select="concat('type_',$lname)"/>
781
+ </xsl:when>
782
+ <xsl:when test="parent::xsd:element
783
+ and local-name() = 'type'
784
+ and count(/xsd:schema/xsd:*[@name = $lname
785
+ and (self::xsd:simpleType or self::xsd:complexType)])
786
+ = 1">
787
+ <xsl:value-of select="concat('type_',$lname)"/>
788
+ </xsl:when>
789
+ <xsl:when test="parent::xsd:attribute
790
+ and local-name() = 'type'
791
+ and count(/xsd:schema/xsd:*[@name = $lname
792
+ and (self::xsd:simpleType or self::xsd:complexType)])
793
+ = 1">
794
+ <xsl:value-of select="concat('type_',$lname)"/>
795
+ </xsl:when>
796
+ <xsl:when test="parent::xsd:list
797
+ and count(/xsd:schema/xsd:*[@name = $lname
798
+ and (self::xsd:simpleType or self::xsd:complexType)])
799
+ = 1">
800
+ <xsl:value-of select="concat('type_',$lname)"/>
801
+ </xsl:when>
802
+ <xsl:when test="parent::xsd:union
803
+ and count(/xsd:schema/xsd:*[@name = $lname
804
+ and (self::xsd:simpleType or self::xsd:complexType)])
805
+ = 1">
806
+ <xsl:value-of select="concat('type_',$lname)"/>
807
+ </xsl:when>
808
+ <xsl:when test="parent::xsd:group
809
+ and count(/xsd:schema/xsd:group[@name = $lname]) = 1">
810
+ <xsl:value-of select="concat('grp_',$lname)"/>
811
+ </xsl:when>
812
+ <xsl:when test="parent::xsd:attributeGroup
813
+ and count(/xsd:schema/xsd:atributeGroup[@name = $lname]) = 1">
814
+ <xsl:value-of select="concat('attgrp_',$lname)"/>
815
+ </xsl:when>
816
+ <!--* static links to built-ins could be handled here *-->
817
+ </xsl:choose>
818
+ </xsl:when>
819
+ <xsl:when test="count(ancestor::*/namespace::*) = 0">
820
+ <!--* we are either in a no-namespace document in Opera,
821
+ * or we are in Firefox, without ns support.
822
+ *-->
823
+ <xsl:value-of select="'no-ns-support'"/>
824
+ </xsl:when>
825
+ <xsl:otherwise>
826
+ <!--* namespaces did not match, no target *-->
827
+ <xsl:value-of select="'no-target'"/>
828
+ </xsl:otherwise>
829
+ </xsl:choose>
830
+ </xsl:variable>
831
+
832
+ <xsl:choose>
833
+ <xsl:when test="($linktarget='no-ns-support')">
834
+ <xsl:value-of select="$qn"/>
835
+ </xsl:when>
836
+ <xsl:when test="($linktarget='no-target' or $linktarget='')
837
+ and ($tns = $refns)">
838
+ <xsl:element name="span">
839
+ <xsl:attribute name="class">external-link same-ns</xsl:attribute>
840
+ <xsl:value-of select="$qn"/>
841
+ </xsl:element>
842
+ </xsl:when>
843
+ <xsl:when test="($linktarget='no-target')
844
+ and not($tns = $refns)">
845
+ <xsl:element name="span">
846
+ <xsl:attribute name="class">external-link diff-ns</xsl:attribute>
847
+ <xsl:value-of select="$qn"/>
848
+ </xsl:element>
849
+ </xsl:when>
850
+ <xsl:otherwise>
851
+ <xsl:element name="a">
852
+ <xsl:attribute name="href">
853
+ <xsl:value-of select="concat('#',$linktarget)"/>
854
+ </xsl:attribute>
855
+ <xsl:value-of select="$qn"/>
856
+ </xsl:element>
857
+ </xsl:otherwise>
858
+ </xsl:choose>
859
+ </xsl:template>
860
+
861
+ <xsl:template name="qname-to-uri" match="*" mode="qname-to-uri">
862
+ <xsl:param name="qname" select="."/>
863
+ <xsl:variable name="prefix" select="substring-before($qname,':')"/>
864
+ <xsl:choose>
865
+ <xsl:when test="(1=1) and ($prefix='xml')">
866
+ <!--* we need to special-case 'xml', since
867
+ * Opera does not provide a ns node for it.
868
+ *-->
869
+ <xsl:value-of select="'http://www.w3.org/XML/1998/namespace'"/>
870
+ </xsl:when>
871
+ <xsl:when test="self::*">
872
+ <!--* we're an element *-->
873
+ <xsl:value-of select="string(namespace::*[name()=$prefix])"/>
874
+ </xsl:when>
875
+ <xsl:otherwise>
876
+ <!--* we're not an element *-->
877
+ <xsl:value-of select="string(parent::*/namespace::*[name()=$prefix])"/>
878
+ </xsl:otherwise>
879
+ </xsl:choose>
880
+ </xsl:template>
881
+ <xsl:template name="qname-to-ncname">
882
+ <xsl:param name="qname" select="."/>
883
+ <xsl:choose>
884
+ <xsl:when test="contains($qname,':')">
885
+ <xsl:value-of select="substring-after($qname,':')"/>
886
+ </xsl:when>
887
+ <xsl:otherwise>
888
+ <xsl:value-of select="$qname"/>
889
+ </xsl:otherwise>
890
+ </xsl:choose>
891
+ </xsl:template>
892
+
893
+ <xsl:template name="lastline-suffix">
894
+ <xsl:param name="s0"></xsl:param>
895
+ <xsl:choose>
896
+ <xsl:when test="contains($s0,'&#xA;')">
897
+ <xsl:call-template name="lastline-suffix">
898
+ <xsl:with-param name="s0" select="substring-after($s0,'&#xA;')"/>
899
+ </xsl:call-template>
900
+ </xsl:when>
901
+ <xsl:otherwise>
902
+ <xsl:value-of select="$s0"/>
903
+ </xsl:otherwise>
904
+ </xsl:choose>
905
+ </xsl:template>
906
+
907
+
908
+ <xsl:template name="stag-width">
909
+ <xsl:param name="indent-length" select="0"/>
910
+
911
+ <xsl:variable name="attcount" select="count(@*)"/>
912
+ <xsl:variable name="list-attname-lengths">
913
+ <xsl:call-template name="make-length-list">
914
+ <xsl:with-param name="kw">attnames</xsl:with-param>
915
+ </xsl:call-template>
916
+ </xsl:variable>
917
+
918
+ <xsl:variable name="list-attval-lengths">
919
+ <xsl:call-template name="make-length-list">
920
+ <xsl:with-param name="kw">attvals</xsl:with-param>
921
+ </xsl:call-template>
922
+ </xsl:variable>
923
+
924
+ <xsl:variable name="sum-att-lengths">
925
+ <xsl:call-template name="sum-list">
926
+ <xsl:with-param name="s0" select="concat($list-attname-lengths,' ',$list-attval-lengths)"/>
927
+ </xsl:call-template>
928
+ </xsl:variable>
929
+
930
+ <!--*
931
+ <xsl:message>indent-length = <xsl:value-of select="$indent-length"/></xsl:message>
932
+ <xsl:message>attcount = <xsl:value-of select="$attcount"/></xsl:message>
933
+ <xsl:message>sum-att-lengths = <xsl:value-of select="$sum-att-lengths"/></xsl:message>
934
+ <xsl:message>namelen = <xsl:value-of select="string-length(name())"/></xsl:message>
935
+ *-->
936
+
937
+ <xsl:value-of select="$indent-length + (4 * $attcount) + $sum-att-lengths + string-length(name()) + 3"/>
938
+
939
+ </xsl:template>
940
+
941
+
942
+ <xsl:template name="make-length-list">
943
+ <xsl:param name="kw">unknown</xsl:param>
944
+ <xsl:choose>
945
+ <xsl:when test="$kw = 'attnames'">
946
+ <xsl:apply-templates select="@*" mode="attnamelength"/>
947
+ </xsl:when>
948
+ <xsl:when test="$kw = 'attvals'">
949
+ <xsl:apply-templates select="@*" mode="attvallength"/>
950
+ </xsl:when>
951
+ <xsl:otherwise>0</xsl:otherwise>
952
+ </xsl:choose>
953
+ </xsl:template>
954
+
955
+ <xsl:template name="sum-list">
956
+ <xsl:param name="n0" select="0"/>
957
+ <xsl:param name="s0"/>
958
+
959
+ <xsl:variable name="s1" select="normalize-space($s0)"/>
960
+
961
+ <!--*
962
+ <xsl:message><xsl:value-of select="concat('n0 =', $n0, ', s1 = /',$s1,'/')"/></xsl:message>
963
+ *-->
964
+
965
+ <xsl:choose>
966
+ <xsl:when test="contains($s1,' ')">
967
+ <xsl:variable name="term" select="substring-before($s1,' ')"/>
968
+ <xsl:variable name="s2" select="substring-after($s1,' ')"/>
969
+ <xsl:call-template name="sum-list">
970
+ <xsl:with-param name="n0" select="$n0 + $term"/>
971
+ <xsl:with-param name="s0" select="$s2"/>
972
+ </xsl:call-template>
973
+ </xsl:when>
974
+ <xsl:otherwise>
975
+ <xsl:value-of select="$n0 + $s1"/>
976
+ </xsl:otherwise>
977
+ </xsl:choose>
978
+ </xsl:template>
979
+
980
+ <xsl:template match="@*" mode="attnamelength">
981
+ <xsl:value-of select="concat(string-length(name()), ' ')"/>
982
+ </xsl:template>
983
+ <xsl:template match="@*" mode="attvallength">
984
+ <xsl:value-of select="concat(string-length(.), ' ')"/>
985
+ </xsl:template>
986
+
987
+ </xsl:stylesheet>
988
+ <!-- Keep this comment at the end of the file
989
+ Local variables:
990
+ mode: xml
991
+ sgml-default-dtd-file:"/Library/SGML/Public/Emacs/xslt.ced"
992
+ sgml-omittag:t
993
+ sgml-shorttag:t
994
+ sgml-indent-data:t
995
+ sgml-indent-step:1
996
+ End:
997
+ -->