geoblacklight-schema 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/LICENSE +14 -0
  4. data/README.md +44 -0
  5. data/bin/fgdc2mods.rb +5 -0
  6. data/bin/mods2geoblacklight.rb +5 -0
  7. data/bin/xsltproc-saxon +14 -0
  8. data/conf/protwords.txt +21 -0
  9. data/conf/schema.xml +158 -0
  10. data/conf/solrconfig.xml +160 -0
  11. data/conf/stopwords_en.txt +34 -0
  12. data/conf/synonyms.txt +29 -0
  13. data/examples/Gemfile +4 -0
  14. data/examples/generate-example-doc.rb +42 -0
  15. data/examples/selected.json +5787 -0
  16. data/examples/upload-to-solr.rb +50 -0
  17. data/geoblacklight-schema.gemspec +23 -0
  18. data/lib/geoblacklight/gazetteer.csv +1011 -0
  19. data/lib/geoblacklight/gazetteer.rb +104 -0
  20. data/lib/xslt/arcgis_to_iso19110.xsl +364 -0
  21. data/lib/xslt/fgdc2mods.xsl +1007 -0
  22. data/lib/xslt/iso2mods.xsl +939 -0
  23. data/lib/xslt/mods2geoblacklight.xsl +268 -0
  24. data/lib/xslt/mods2ogp.xsl +195 -0
  25. data/tools/fgdc2html/Gemfile +2 -0
  26. data/tools/fgdc2html/fgdc2html.css +71 -0
  27. data/tools/fgdc2html/fgdc2html.js +6 -0
  28. data/tools/fgdc2html/fgdc2html.xsl +1034 -0
  29. data/tools/fgdc2html/render.rb +30 -0
  30. data/tools/iso2html/Gemfile +2 -0
  31. data/tools/iso2html/iso-html.xsl +1745 -0
  32. data/tools/iso2html/render.rb +24 -0
  33. data/tools/iso2html/utils/convert-enumerations.xsl +97 -0
  34. data/tools/iso2html/utils/convert-latlong.xsl +73 -0
  35. data/tools/iso2html/utils/decode-uri/base.css +408 -0
  36. data/tools/iso2html/utils/decode-uri/index.html +29 -0
  37. data/tools/iso2html/utils/elements-fgdc.xml +824 -0
  38. data/tools/iso2html/utils/elements-iso.xml +636 -0
  39. data/tools/iso2html/utils/printFormatted.xsl +267 -0
  40. data/tools/iso2html/utils/printTextLines.xsl +192 -0
  41. data/tools/iso2html/utils/replace-newlines.xsl +97 -0
  42. data/tools/iso2html/utils/replace-string.xsl +80 -0
  43. data/tools/iso2html/utils/strip-digits.xsl +60 -0
  44. data/tools/iso2html/utils/url-decode.xsl +87 -0
  45. data/tools/iso2html/utils/wrap-text.xsl +174 -0
  46. data/tools/ogp/0_download.rb +96 -0
  47. data/tools/ogp/1_validate.rb +225 -0
  48. data/tools/ogp/2_transform.rb +438 -0
  49. data/tools/ogp/3_stanford.rb +35 -0
  50. data/tools/ogp/4_select.rb +189 -0
  51. data/tools/ogp/5_ingest.rb +55 -0
  52. data/tools/ogp/Gemfile +2 -0
  53. data/tools/solr/Gemfile +3 -0
  54. data/tools/solr/purge.rb +33 -0
  55. data/tools/solr/upload.rb +35 -0
  56. data/vendor/.keep +0 -0
  57. metadata +131 -0
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gem 'nokogiri'
@@ -0,0 +1,71 @@
1
+ /* From Mike Graves:
2
+ https://github.com/gravesm/kendallite/blob/master/kendallite/static/css/layer.css
3
+ */
4
+
5
+ html, body {
6
+ height: 100%;
7
+ font-family: serif;
8
+ }
9
+
10
+ .metadata-detail dl {
11
+ margin-left: 15px;
12
+ padding-left: 10px;
13
+ }
14
+
15
+ .metadata-detail dt {
16
+ width: 260px;
17
+ }
18
+
19
+ .metadata-detail dd {
20
+ margin-left: 275px;
21
+ }
22
+
23
+ .layer-info dd {
24
+ margin-left: 10px;
25
+ margin-bottom: 10px;
26
+ }
27
+
28
+
29
+ h3 {
30
+ border-bottom: 1px solid #eee;
31
+ }
32
+
33
+ h3:hover {
34
+ cursor: pointer;
35
+ }
36
+
37
+ h3:before {
38
+ content: "+";
39
+ margin-right: 10px;
40
+ }
41
+
42
+ h3.expanded:before {
43
+ content: '\2013';
44
+ margin-right: 10px;
45
+ }
46
+
47
+ h3:hover:before {
48
+ color: #428bce;
49
+ }
50
+
51
+ h4 {
52
+ margin-left: 10px;
53
+ }
54
+
55
+ h5 {
56
+ border-bottom: 1px solid #ddd;
57
+ background-color: #f5f5f5;
58
+ margin: 0;
59
+ padding: 10px;
60
+ }
61
+
62
+ section {
63
+ margin-left: 15px;
64
+ margin-bottom: 20px;
65
+ border: 1px solid #ddd;
66
+ border-radius: 6px;
67
+ }
68
+
69
+ section > div {
70
+ padding: 10px;
71
+ }
@@ -0,0 +1,6 @@
1
+ $(document).ready( function () {
2
+ $("h3").on("click", function() {
3
+ $(this).toggleClass('expanded');
4
+ $(this).next("section").toggle();
5
+ }).next("section").toggle();
6
+ });
@@ -0,0 +1,1034 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- From Mike Graves, MIT
3
+ https://github.com/gravesm/kendallite/blob/master/kendallite/site/fgdc.xsl
4
+ -->
5
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
6
+ <xsl:output omit-xml-declaration="yes" />
7
+
8
+
9
+ <!-- Variables controlling the elements and attributes used to create html
10
+ output -->
11
+
12
+ <!-- Top level heading element -->
13
+ <xsl:variable name="heading-1" select="'h3'" />
14
+ <xsl:attribute-set name="heading-1-attr" />
15
+
16
+ <!-- Second level heading element -->
17
+ <xsl:variable name="heading-2" select="'h4'" />
18
+ <xsl:attribute-set name="heading-2-attr" />
19
+
20
+ <!-- Third level heading element -->
21
+ <xsl:variable name="heading-3" select="'h5'" />
22
+ <xsl:attribute-set name="heading-3-attr" />
23
+
24
+ <!-- Element used to wrap one or more key/value pairs -->
25
+ <xsl:variable name="list" select="'dl'" />
26
+ <xsl:attribute-set name="list-attr">
27
+ <xsl:attribute name="class">dl-horizontal</xsl:attribute>
28
+ </xsl:attribute-set>
29
+
30
+ <!-- Element used to wrap a key in a key/value pair -->
31
+ <xsl:variable name="key" select="'dt'" />
32
+ <xsl:attribute-set name="key-attr" />
33
+
34
+ <!-- Element used to wrap a value in a key/value pair -->
35
+ <xsl:variable name="value" select="'dd'" />
36
+ <xsl:attribute-set name="value-attr" />
37
+
38
+ <!-- Element used to wrap content of a top level section -->
39
+ <xsl:variable name="section-1" select="'section'" />
40
+ <xsl:attribute-set name="section-1-attr" />
41
+
42
+ <!-- Element used to wrap an entity/attribute definition -->
43
+ <xsl:variable name="section-2" select="'section'" />
44
+ <xsl:attribute-set name="section-2-attr" />
45
+
46
+
47
+ <xsl:template match="/">
48
+ <xsl:apply-templates />
49
+ </xsl:template>
50
+
51
+
52
+ <!-- Identification Information -->
53
+ <xsl:template match="metadata/idinfo">
54
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
55
+ <xsl:text>Identification Information</xsl:text>
56
+ </xsl:element>
57
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1-attr">
58
+ <xsl:apply-templates />
59
+ </xsl:element>
60
+ </xsl:template>
61
+
62
+ <xsl:template match="citation">
63
+ <xsl:element name="{$heading-2}" use-attribute-sets="heading-2-attr">
64
+ <xsl:text>Citation Information</xsl:text>
65
+ </xsl:element>
66
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
67
+ <xsl:apply-templates select="citeinfo" />
68
+ </xsl:element>
69
+ </xsl:template>
70
+
71
+ <xsl:template match="descript">
72
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
73
+ <xsl:text>Description</xsl:text>
74
+ </xsl:element>
75
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
76
+ <xsl:apply-templates />
77
+ </xsl:element>
78
+ </xsl:template>
79
+
80
+ <xsl:template match="abstract">
81
+ <xsl:call-template name="description">
82
+ <xsl:with-param name="term" select="'Abstract'" />
83
+ </xsl:call-template>
84
+ </xsl:template>
85
+
86
+ <xsl:template match="purpose">
87
+ <xsl:call-template name="description">
88
+ <xsl:with-param name="term" select="'Purpose'" />
89
+ </xsl:call-template>
90
+ </xsl:template>
91
+
92
+ <xsl:template match="supplinf">
93
+ <xsl:call-template name="description">
94
+ <xsl:with-param name="term" select="'Supplemental Information'" />
95
+ </xsl:call-template>
96
+ </xsl:template>
97
+
98
+ <xsl:template match="timeperd">
99
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
100
+ <xsl:text>Time Period of Content</xsl:text>
101
+ </xsl:element>
102
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
103
+ <xsl:apply-templates select="timeinfo|current" />
104
+ </xsl:element>
105
+ </xsl:template>
106
+
107
+ <xsl:template match="current">
108
+ <xsl:call-template name="description">
109
+ <xsl:with-param name="term" select="'Currentness Reference'" />
110
+ </xsl:call-template>
111
+ </xsl:template>
112
+
113
+ <xsl:template match="status">
114
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
115
+ <xsl:text>Status</xsl:text>
116
+ </xsl:element>
117
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
118
+ <xsl:apply-templates />
119
+ </xsl:element>
120
+ </xsl:template>
121
+
122
+ <xsl:template match="spdom">
123
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
124
+ <xsl:text>Spatial Domain</xsl:text>
125
+ </xsl:element>
126
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
127
+ <xsl:apply-templates />
128
+ </xsl:element>
129
+ </xsl:template>
130
+
131
+ <xsl:template match="keywords">
132
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
133
+ <xsl:text>Keywords</xsl:text>
134
+ </xsl:element>
135
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
136
+ <xsl:apply-templates />
137
+ </xsl:element>
138
+ </xsl:template>
139
+
140
+ <xsl:template match="accconst">
141
+ <xsl:if test="normalize-space(.) != ''">
142
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
143
+ <xsl:call-template name="description">
144
+ <xsl:with-param name="term" select="'Access Constraints'" />
145
+ </xsl:call-template>
146
+ </xsl:element>
147
+ </xsl:if>
148
+ </xsl:template>
149
+
150
+ <xsl:template match="useconst">
151
+ <xsl:if test="normalize-space(.) != ''">
152
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
153
+ <xsl:call-template name="description">
154
+ <xsl:with-param name="term" select="'Use Constraints'" />
155
+ </xsl:call-template>
156
+ </xsl:element>
157
+ </xsl:if>
158
+ </xsl:template>
159
+
160
+ <xsl:template match="temporal/tempkt">
161
+ <xsl:call-template name="description">
162
+ <xsl:with-param name="term" select="'Temporal Keyword Thesaurus'" />
163
+ </xsl:call-template>
164
+ </xsl:template>
165
+
166
+ <xsl:template match="temporal/tempkey">
167
+ <xsl:call-template name="description">
168
+ <xsl:with-param name="term" select="'Temporal Keyword'" />
169
+ </xsl:call-template>
170
+ </xsl:template>
171
+
172
+ <xsl:template match="stratum/stratkey">
173
+ <xsl:call-template name="description">
174
+ <xsl:with-param name="term" select="'Stratum Keyword'" />
175
+ </xsl:call-template>
176
+ </xsl:template>
177
+
178
+ <xsl:template match="stratum/stratkt">
179
+ <xsl:call-template name="description">
180
+ <xsl:with-param name="term" select="'Stratum Keyword Thesaurus'" />
181
+ </xsl:call-template>
182
+ </xsl:template>
183
+
184
+ <xsl:template match="theme">
185
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
186
+ <xsl:attribute name="title">Theme Keywords</xsl:attribute>
187
+ <xsl:text>Theme Keywords</xsl:text>
188
+ </xsl:element>
189
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
190
+ <xsl:for-each select="themekey">
191
+ <xsl:value-of select="." />
192
+ <xsl:if test="position() != last()">
193
+ <xsl:text>; </xsl:text>
194
+ </xsl:if>
195
+ </xsl:for-each>
196
+ </xsl:element>
197
+ </xsl:template>
198
+
199
+ <xsl:template match="place">
200
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
201
+ <xsl:attribute name="title">Place Keywords</xsl:attribute>
202
+ <xsl:text>Place Keywords</xsl:text>
203
+ </xsl:element>
204
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
205
+ <xsl:for-each select="placekey">
206
+ <xsl:value-of select="." />
207
+ <xsl:if test="position() != last()">
208
+ <xsl:text>; </xsl:text>
209
+ </xsl:if>
210
+ </xsl:for-each>
211
+ </xsl:element>
212
+ </xsl:template>
213
+
214
+ <xsl:template match="westbc">
215
+ <xsl:call-template name="description">
216
+ <xsl:with-param name="term" select="'West Bounding Coordinate'" />
217
+ </xsl:call-template>
218
+ </xsl:template>
219
+
220
+ <xsl:template match="eastbc">
221
+ <xsl:call-template name="description">
222
+ <xsl:with-param name="term" select="'East Bounding Coordinate'" />
223
+ </xsl:call-template>
224
+ </xsl:template>
225
+
226
+ <xsl:template match="northbc">
227
+ <xsl:call-template name="description">
228
+ <xsl:with-param name="term" select="'North Bounding Coordinate'" />
229
+ </xsl:call-template>
230
+ </xsl:template>
231
+
232
+ <xsl:template match="southbc">
233
+ <xsl:call-template name="description">
234
+ <xsl:with-param name="term" select="'South Bounding Coordinate'" />
235
+ </xsl:call-template>
236
+ </xsl:template>
237
+
238
+ <xsl:template match="update">
239
+ <xsl:call-template name="description">
240
+ <xsl:with-param name="term" select="'Maintenance and Update Frequency'" />
241
+ </xsl:call-template>
242
+ </xsl:template>
243
+
244
+ <xsl:template match="progress">
245
+ <xsl:call-template name="description">
246
+ <xsl:with-param name="term" select="'Progress'" />
247
+ </xsl:call-template>
248
+ </xsl:template>
249
+
250
+ <xsl:template match="current">
251
+ <xsl:call-template name="description">
252
+ <xsl:with-param name="term" select="'Currentness Reference'" />
253
+ </xsl:call-template>
254
+ </xsl:template>
255
+
256
+ <xsl:template match="ptcontac">
257
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
258
+ <xsl:apply-templates select="cntinfo" />
259
+ </xsl:element>
260
+ </xsl:template>
261
+ <!-- End Identification Information -->
262
+
263
+
264
+ <!-- Data Quality Information -->
265
+ <xsl:template match="metadata/dataqual">
266
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
267
+ <xsl:text>Data Quality Information</xsl:text>
268
+ </xsl:element>
269
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1-attr">
270
+ <xsl:apply-templates />
271
+ </xsl:element>
272
+ </xsl:template>
273
+
274
+ <xsl:template match="attracc">
275
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
276
+ <xsl:text>Attribute Accuracy</xsl:text>
277
+ </xsl:element>
278
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
279
+ <xsl:apply-templates />
280
+ </xsl:element>
281
+ </xsl:template>
282
+
283
+ <xsl:template match="attraccr">
284
+ <xsl:call-template name="description">
285
+ <xsl:with-param name="term" select="'Attribute Accuracy Report'" />
286
+ </xsl:call-template>
287
+ </xsl:template>
288
+
289
+ <xsl:template match="attraccv">
290
+ <xsl:call-template name="description">
291
+ <xsl:with-param name="term" select="'Attribute Accuracy Value'" />
292
+ </xsl:call-template>
293
+ </xsl:template>
294
+
295
+ <xsl:template match="attracce">
296
+ <xsl:call-template name="description">
297
+ <xsl:with-param name="term" select="'Attribute Accuracy Explanation'" />
298
+ </xsl:call-template>
299
+ </xsl:template>
300
+
301
+ <xsl:template match="logic">
302
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
303
+ <xsl:call-template name="description">
304
+ <xsl:with-param name="term" select="'Logical Consistency Report'" />
305
+ </xsl:call-template>
306
+ </xsl:element>
307
+ </xsl:template>
308
+
309
+ <xsl:template match="complete">
310
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
311
+ <xsl:call-template name="description">
312
+ <xsl:with-param name="term" select="'Completeness Report'" />
313
+ </xsl:call-template>
314
+ </xsl:element>
315
+ </xsl:template>
316
+
317
+ <xsl:template match="posacc/horizpa">
318
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
319
+ <xsl:text>Horizontal Positional Accuracy</xsl:text>
320
+ </xsl:element>
321
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
322
+ <xsl:apply-templates />
323
+ </xsl:element>
324
+ </xsl:template>
325
+
326
+ <xsl:template match="posacc/vertacc">
327
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
328
+ <xsl:text>Vertical Positional Accuracy</xsl:text>
329
+ </xsl:element>
330
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
331
+ <xsl:apply-templates />
332
+ </xsl:element>
333
+ </xsl:template>
334
+
335
+ <xsl:template match="horizpar">
336
+ <xsl:call-template name="description">
337
+ <xsl:with-param name="term" select="'Horizontal Positional Accuracy Report'" />
338
+ </xsl:call-template>
339
+ </xsl:template>
340
+
341
+ <xsl:template match="qhorizpa">
342
+ <xsl:apply-templates />
343
+ </xsl:template>
344
+
345
+ <xsl:template match="horizpav">
346
+ <xsl:call-template name="description">
347
+ <xsl:with-param name="term" select="'Horizontal Positional Accuracy Value'" />
348
+ </xsl:call-template>
349
+ </xsl:template>
350
+
351
+ <xsl:template match="horizpae">
352
+ <xsl:call-template name="description">
353
+ <xsl:with-param name="term" select="'Horizontal Positional Accuracy Explanation'" />
354
+ </xsl:call-template>
355
+ </xsl:template>
356
+
357
+ <xsl:template match="vertaccr">
358
+ <xsl:call-template name="description">
359
+ <xsl:with-param name="term" select="'Vertical Positional Accuracy Report'" />
360
+ </xsl:call-template>
361
+ </xsl:template>
362
+
363
+ <xsl:template match="qvertpa">
364
+ <xsl:apply-templates />
365
+ </xsl:template>
366
+
367
+ <xsl:template match="vertaccv">
368
+ <xsl:call-template name="description">
369
+ <xsl:with-param name="term" select="'Vertical Positional Accuracy Value'" />
370
+ </xsl:call-template>
371
+ </xsl:template>
372
+
373
+ <xsl:template match="vertacce">
374
+ <xsl:call-template name="description">
375
+ <xsl:with-param name="term" select="'Vertical Positional Accuracy Explanation'" />
376
+ </xsl:call-template>
377
+ </xsl:template>
378
+
379
+ <xsl:template match="lineage/srcinfo">
380
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
381
+ <xsl:text>Lineage Source Information</xsl:text>
382
+ </xsl:element>
383
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
384
+ <xsl:apply-templates />
385
+ </xsl:element>
386
+ </xsl:template>
387
+
388
+ <xsl:template match="srccite/citeinfo">
389
+ <xsl:apply-templates />
390
+ </xsl:template>
391
+
392
+ <xsl:template match="lineage/procstep">
393
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
394
+ <xsl:text>Lineage Process Step</xsl:text>
395
+ </xsl:element>
396
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
397
+ <xsl:apply-templates />
398
+ </xsl:element>
399
+ </xsl:template>
400
+
401
+ <xsl:template match="procdesc">
402
+ <xsl:call-template name="description">
403
+ <xsl:with-param name="term" select="'Process Description'" />
404
+ </xsl:call-template>
405
+ </xsl:template>
406
+
407
+ <xsl:template match="srcused">
408
+ <xsl:call-template name="description">
409
+ <xsl:with-param name="term" select="'Source Used Citation Abbreviation'" />
410
+ </xsl:call-template>
411
+ </xsl:template>
412
+
413
+ <xsl:template match="procdate">
414
+ <xsl:call-template name="description">
415
+ <xsl:with-param name="term" select="'Process Date'" />
416
+ </xsl:call-template>
417
+ </xsl:template>
418
+
419
+ <xsl:template match="proctime">
420
+ <xsl:call-template name="description">
421
+ <xsl:with-param name="term" select="'Process Time'" />
422
+ </xsl:call-template>
423
+ </xsl:template>
424
+
425
+ <xsl:template match="srcprod">
426
+ <xsl:call-template name="description">
427
+ <xsl:with-param name="term" select="'Source Produced Citation Abbreviation'" />
428
+ </xsl:call-template>
429
+ </xsl:template>
430
+
431
+ <xsl:template match="proccont">
432
+ </xsl:template>
433
+
434
+ <xsl:template match="cloud">
435
+ <xsl:call-template name="description">
436
+ <xsl:with-param name="term" select="'Cloud Cover'" />
437
+ </xsl:call-template>
438
+ </xsl:template>
439
+ <!-- End Data Quality Information -->
440
+
441
+ <!-- Spatial Data Organization Information -->
442
+ <xsl:template match="metadata/spdoinfo">
443
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
444
+ <xsl:text>Spatial Data Organization Information</xsl:text>
445
+ </xsl:element>
446
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1-attr">
447
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
448
+ <xsl:apply-templates />
449
+ </xsl:element>
450
+ </xsl:element>
451
+ </xsl:template>
452
+
453
+ <xsl:template match="indspref">
454
+ <xsl:call-template name="description">
455
+ <xsl:with-param name="term" select="'Indirect Spatial Reference'" />
456
+ </xsl:call-template>
457
+ </xsl:template>
458
+
459
+ <xsl:template match="direct">
460
+ <xsl:call-template name="description">
461
+ <xsl:with-param name="term" select="'Direct Spatial Reference Method'" />
462
+ </xsl:call-template>
463
+ </xsl:template>
464
+
465
+ <xsl:template match="sdtstype">
466
+ <xsl:call-template name="description">
467
+ <xsl:with-param name="term" select="'SDTS Point and Vector Object Type'" />
468
+ </xsl:call-template>
469
+ </xsl:template>
470
+
471
+ <xsl:template match="ptvctcnt">
472
+ <xsl:call-template name="description">
473
+ <xsl:with-param name="term" select="'Point and Vector Object Count'" />
474
+ </xsl:call-template>
475
+ </xsl:template>
476
+
477
+ <xsl:template match="vpflevel">
478
+ <xsl:call-template name="description">
479
+ <xsl:with-param name="term" select="'VPF Topology Level'" />
480
+ </xsl:call-template>
481
+ </xsl:template>
482
+
483
+ <xsl:template match="vpftype">
484
+ <xsl:call-template name="description">
485
+ <xsl:with-param name="term" select="'VPF Point and Vector Object Type'" />
486
+ </xsl:call-template>
487
+ </xsl:template>
488
+
489
+ <xsl:template match="rasttype">
490
+ <xsl:call-template name="description">
491
+ <xsl:with-param name="term" select="'Raster Object Type'" />
492
+ </xsl:call-template>
493
+ </xsl:template>
494
+
495
+ <xsl:template match="rowcount">
496
+ <xsl:call-template name="description">
497
+ <xsl:with-param name="term" select="'Row Count'" />
498
+ </xsl:call-template>
499
+ </xsl:template>
500
+
501
+ <xsl:template match="colcount">
502
+ <xsl:call-template name="description">
503
+ <xsl:with-param name="term" select="'Column Count'" />
504
+ </xsl:call-template>
505
+ </xsl:template>
506
+
507
+ <xsl:template match="vrtcount">
508
+ <xsl:call-template name="description">
509
+ <xsl:with-param name="term" select="'Vertical Count'" />
510
+ </xsl:call-template>
511
+ </xsl:template>
512
+ <!-- End Spatial Data Organization Information -->
513
+
514
+
515
+ <!-- Spatial Reference Information -->
516
+ <xsl:template match="metadata/spref">
517
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
518
+ <xsl:text>Spatial Reference Information</xsl:text>
519
+ </xsl:element>
520
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1-attr">
521
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
522
+ <xsl:apply-templates />
523
+ </xsl:element>
524
+ </xsl:element>
525
+ </xsl:template>
526
+
527
+ <xsl:template match="horizsys">
528
+ <xsl:element name="{$heading-2}" use-attribute-sets="hdgn-2-attr">
529
+ <xsl:text>Horizontal Coordinate System Definition</xsl:text>
530
+ </xsl:element>
531
+ <xsl:apply-templates />
532
+ </xsl:template>
533
+
534
+ <xsl:template match="geograph">
535
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
536
+ <xsl:apply-templates />
537
+ </xsl:element>
538
+ </xsl:template>
539
+
540
+ <xsl:template match="geodetic">
541
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
542
+ <xsl:apply-templates />
543
+ </xsl:element>
544
+ </xsl:template>
545
+
546
+ <xsl:template match="latres">
547
+ <xsl:call-template name="description">
548
+ <xsl:with-param name="term" select="'Latitude Resolution'" />
549
+ </xsl:call-template>
550
+ </xsl:template>
551
+
552
+ <xsl:template match="longres">
553
+ <xsl:call-template name="description">
554
+ <xsl:with-param name="term" select="'Longitude Resolution'" />
555
+ </xsl:call-template>
556
+ </xsl:template>
557
+
558
+ <xsl:template match="geogunit">
559
+ <xsl:call-template name="description">
560
+ <xsl:with-param name="term" select="'Geographic Coordinate Units'" />
561
+ </xsl:call-template>
562
+ </xsl:template>
563
+
564
+ <xsl:template match="horizdn">
565
+ <xsl:call-template name="description">
566
+ <xsl:with-param name="term" select="'Horizontal Datum Name'" />
567
+ </xsl:call-template>
568
+ </xsl:template>
569
+
570
+ <xsl:template match="ellips">
571
+ <xsl:call-template name="description">
572
+ <xsl:with-param name="term" select="'Ellipsoid Name'" />
573
+ </xsl:call-template>
574
+ </xsl:template>
575
+
576
+ <xsl:template match="semiaxis">
577
+ <xsl:call-template name="description">
578
+ <xsl:with-param name="term" select="'Semi-major Axis'" />
579
+ </xsl:call-template>
580
+ </xsl:template>
581
+
582
+ <xsl:template match="denflat">
583
+ <xsl:call-template name="description">
584
+ <xsl:with-param name="term" select="'Denominator of Flattening Ratio'" />
585
+ </xsl:call-template>
586
+ </xsl:template>
587
+ <!-- End Spatial Reference Information -->
588
+
589
+
590
+ <!-- Entity and Attribute Information -->
591
+ <xsl:template match="metadata/eainfo">
592
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
593
+ <xsl:text>Entity and Attribute Information</xsl:text>
594
+ </xsl:element>
595
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1">
596
+ <xsl:apply-templates />
597
+ </xsl:element>
598
+ </xsl:template>
599
+
600
+ <xsl:template match="detailed">
601
+ <xsl:apply-templates />
602
+ </xsl:template>
603
+
604
+ <xsl:template match="overview">
605
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
606
+ <xsl:apply-templates />
607
+ </xsl:element>
608
+ </xsl:template>
609
+
610
+ <xsl:template match="enttyp">
611
+ <xsl:element name="{$heading-2}" use-attribute-sets="heading-2-attr">
612
+ <xsl:value-of select="enttypl" />
613
+ </xsl:element>
614
+ <xsl:apply-templates />
615
+ </xsl:template>
616
+
617
+ <xsl:template match="attr">
618
+ <xsl:element name="{$section-2}" use-attribute-sets="section-2-attr">
619
+ <xsl:element name="{$heading-3}" use-attribute-sets="heading-3-attr">
620
+ <xsl:value-of select="attrlabl" />
621
+ </xsl:element>
622
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
623
+ <xsl:apply-templates />
624
+ </xsl:element>
625
+ </xsl:element>
626
+ </xsl:template>
627
+
628
+ <xsl:template match="attrdef">
629
+ <xsl:call-template name="description">
630
+ <xsl:with-param name="term" select="'Attribute Definition'" />
631
+ </xsl:call-template>
632
+ </xsl:template>
633
+
634
+ <xsl:template match="attrdefs">
635
+ <xsl:call-template name="description">
636
+ <xsl:with-param name="term" select="'Attribute Definition Source'" />
637
+ </xsl:call-template>
638
+ </xsl:template>
639
+
640
+ <xsl:template match="edom">
641
+ <xsl:apply-templates />
642
+ </xsl:template>
643
+
644
+ <xsl:template match="edomv">
645
+ <xsl:call-template name="description">
646
+ <xsl:with-param name="term" select="'Enumerated Domain Value'" />
647
+ </xsl:call-template>
648
+ </xsl:template>
649
+
650
+ <xsl:template match="edomvd">
651
+ <xsl:call-template name="description">
652
+ <xsl:with-param name="term" select="'Enumerated Domain Value Definition'" />
653
+ </xsl:call-template>
654
+ </xsl:template>
655
+
656
+ <xsl:template match="edomvds">
657
+ <xsl:call-template name="description">
658
+ <xsl:with-param name="term" select="'Enumerated Domain Value Definition Source'" />
659
+ </xsl:call-template>
660
+ </xsl:template>
661
+
662
+ <xsl:template match="eaover">
663
+ <xsl:call-template name="description">
664
+ <xsl:with-param name="term" select="'Entity and Attribute Overview'" />
665
+ </xsl:call-template>
666
+ </xsl:template>
667
+
668
+ <xsl:template match="eadetcit">
669
+ <xsl:call-template name="description">
670
+ <xsl:with-param name="term" select="'Entity and Attribute Detail Citation'" />
671
+ </xsl:call-template>
672
+ </xsl:template>
673
+ <!-- End Entity and Attribute Information -->
674
+
675
+
676
+ <!-- Distribution Information -->
677
+ <xsl:template match="metadata/distinfo">
678
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
679
+ <xsl:text>Distribution Information</xsl:text>
680
+ </xsl:element>
681
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1-attr">
682
+ <xsl:apply-templates />
683
+ </xsl:element>
684
+ </xsl:template>
685
+
686
+ <xsl:template match="distrib">
687
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
688
+ <xsl:apply-templates select="cntinfo" />
689
+ </xsl:element>
690
+ </xsl:template>
691
+ <!-- End Distribution Information -->
692
+
693
+
694
+ <!-- Metdata Reference Information -->
695
+ <xsl:template match="metadata/metainfo">
696
+ <xsl:element name="{$heading-1}" use-attribute-sets="heading-1-attr">
697
+ <xsl:text>Metadata Reference Information</xsl:text>
698
+ </xsl:element>
699
+ <xsl:element name="{$section-1}" use-attribute-sets="section-1">
700
+ <xsl:element name="{$list}" use-attribute-sets="list-attr">
701
+ <xsl:apply-templates />
702
+ </xsl:element>
703
+ </xsl:element>
704
+ </xsl:template>
705
+
706
+ <xsl:template match="metd">
707
+ <xsl:call-template name="description">
708
+ <xsl:with-param name="term" select="'Metadata Date'" />
709
+ </xsl:call-template>
710
+ </xsl:template>
711
+
712
+ <xsl:template match="metrd">
713
+ <xsl:call-template name="description">
714
+ <xsl:with-param name="term" select="'Metadata Review Date'" />
715
+ </xsl:call-template>
716
+ </xsl:template>
717
+
718
+ <xsl:template match="metfrd">
719
+ <xsl:call-template name="description">
720
+ <xsl:with-param name="term" select="'Metadata Future Review Date'" />
721
+ </xsl:call-template>
722
+ </xsl:template>
723
+
724
+ <xsl:template match="metc">
725
+ <xsl:apply-templates select="cntinfo" />
726
+ </xsl:template>
727
+
728
+ <xsl:template match="metstdn">
729
+ <xsl:call-template name="description">
730
+ <xsl:with-param name="term" select="'Metadata Standard Name'" />
731
+ </xsl:call-template>
732
+ </xsl:template>
733
+
734
+ <xsl:template match="metstdv">
735
+ <xsl:call-template name="description">
736
+ <xsl:with-param name="term" select="'Metadata Standard Version'" />
737
+ </xsl:call-template>
738
+ </xsl:template>
739
+
740
+ <xsl:template match="mettc">
741
+ <xsl:call-template name="description">
742
+ <xsl:with-param name="term" select="'Metadata Time Convention'" />
743
+ </xsl:call-template>
744
+ </xsl:template>
745
+
746
+ <xsl:template match="metac">
747
+ <xsl:call-template name="description">
748
+ <xsl:with-param name="term" select="'Metadata Access Constraints'" />
749
+ </xsl:call-template>
750
+ </xsl:template>
751
+
752
+ <xsl:template match="metuc">
753
+ <xsl:call-template name="description">
754
+ <xsl:with-param name="term" select="'Metadata Use Constraints'" />
755
+ </xsl:call-template>
756
+ </xsl:template>
757
+
758
+ <xsl:template match="metscs">
759
+ <xsl:call-template name="description">
760
+ <xsl:with-param name="term" select="'Metadata Security Classification System'" />
761
+ </xsl:call-template>
762
+ </xsl:template>
763
+
764
+ <xsl:template match="metsc">
765
+ <xsl:call-template name="description">
766
+ <xsl:with-param name="term" select="'Metadata Security Classification'" />
767
+ </xsl:call-template>
768
+ </xsl:template>
769
+
770
+ <xsl:template match="metshd">
771
+ <xsl:call-template name="description">
772
+ <xsl:with-param name="term" select="'Metadata Security Handling Description'" />
773
+ </xsl:call-template>
774
+ </xsl:template>
775
+
776
+ <xsl:template match="metprof">
777
+ <xsl:call-template name="description">
778
+ <xsl:with-param name="term" select="'Profile Name'" />
779
+ </xsl:call-template>
780
+ </xsl:template>
781
+ <!-- End Metadata Reference Information -->
782
+
783
+
784
+ <!-- Time Period Information used by multiple sections -->
785
+ <xsl:template match="timeinfo">
786
+ <xsl:apply-templates />
787
+ </xsl:template>
788
+
789
+ <xsl:template match="sngdate/caldate">
790
+ <xsl:call-template name="description">
791
+ <xsl:with-param name="term" select="'Calendar Date'" />
792
+ </xsl:call-template>
793
+ </xsl:template>
794
+
795
+ <xsl:template match="sngdate/time">
796
+ <xsl:call-template name="description">
797
+ <xsl:with-param name="term" select="'Time of Day'" />
798
+ </xsl:call-template>
799
+ </xsl:template>
800
+ <!-- End Time Period Information -->
801
+
802
+
803
+ <!-- Citation Information used by multiple sections -->
804
+ <xsl:template match="citeinfo">
805
+ <xsl:apply-templates />
806
+ </xsl:template>
807
+
808
+ <xsl:template match="origin">
809
+ <xsl:call-template name="description">
810
+ <xsl:with-param name="term" select="'Originator'" />
811
+ </xsl:call-template>
812
+ </xsl:template>
813
+
814
+ <xsl:template match="pubdate">
815
+ <xsl:call-template name="description">
816
+ <xsl:with-param name="term" select="'Publication Date'" />
817
+ </xsl:call-template>
818
+ </xsl:template>
819
+
820
+ <xsl:template match="pubtime">
821
+ <xsl:call-template name="description">
822
+ <xsl:with-param name="term" select="'Publication Time'" />
823
+ </xsl:call-template>
824
+ </xsl:template>
825
+
826
+ <xsl:template match="title">
827
+ <xsl:call-template name="description">
828
+ <xsl:with-param name="term" select="'Title'" />
829
+ </xsl:call-template>
830
+ </xsl:template>
831
+
832
+ <xsl:template match="edition">
833
+ <xsl:call-template name="description">
834
+ <xsl:with-param name="term" select="'Edition'" />
835
+ </xsl:call-template>
836
+ </xsl:template>
837
+
838
+ <xsl:template match="geoform">
839
+ <xsl:call-template name="description">
840
+ <xsl:with-param name="term" select="'Geospatial Data Presentation Form'" />
841
+ </xsl:call-template>
842
+ </xsl:template>
843
+
844
+ <xsl:template match="serinfo/sername">
845
+ <xsl:call-template name="description">
846
+ <xsl:with-param name="term" select="'Series Name'" />
847
+ </xsl:call-template>
848
+ </xsl:template>
849
+
850
+ <xsl:template match="serinfo/issue">
851
+ <xsl:call-template name="description">
852
+ <xsl:with-param name="term" select="'Issue Identification'" />
853
+ </xsl:call-template>
854
+ </xsl:template>
855
+
856
+ <xsl:template match="pubinfo/pubplace">
857
+ <xsl:call-template name="description">
858
+ <xsl:with-param name="term" select="'Publication Place'" />
859
+ </xsl:call-template>
860
+ </xsl:template>
861
+
862
+ <xsl:template match="pubinfo/publish">
863
+ <xsl:call-template name="description">
864
+ <xsl:with-param name="term" select="'Publisher'" />
865
+ </xsl:call-template>
866
+ </xsl:template>
867
+
868
+ <xsl:template match="othercit">
869
+ <xsl:call-template name="description">
870
+ <xsl:with-param name="term" select="'Other Citation Details'" />
871
+ </xsl:call-template>
872
+ </xsl:template>
873
+
874
+ <xsl:template match="onlink">
875
+ <xsl:call-template name="description-link">
876
+ <xsl:with-param name="term" select="'Online Linkage'" />
877
+ </xsl:call-template>
878
+ </xsl:template>
879
+ <!-- End Citation Information -->
880
+
881
+
882
+ <!-- Contact Information used by multiple sections -->
883
+ <xsl:template match="cntinfo">
884
+ <xsl:apply-templates />
885
+ </xsl:template>
886
+
887
+ <xsl:template match="cntperp/cntper|cntorgp/cntper">
888
+ <xsl:call-template name="description">
889
+ <xsl:with-param name="term" select="'Person'" />
890
+ </xsl:call-template>
891
+ </xsl:template>
892
+
893
+ <xsl:template match="cntperp/cntorg|cntorgp/cntorg">
894
+ <xsl:call-template name="description">
895
+ <xsl:with-param name="term" select="'Organization'" />
896
+ </xsl:call-template>
897
+ </xsl:template>
898
+
899
+ <xsl:template match="cntpos">
900
+ <xsl:call-template name="description">
901
+ <xsl:with-param name="term" select="'Position'" />
902
+ </xsl:call-template>
903
+ </xsl:template>
904
+
905
+ <xsl:template match="cntaddr">
906
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
907
+ <xsl:attribute name="title">Address Type</xsl:attribute>
908
+ <xsl:text>Address Type</xsl:text>
909
+ </xsl:element>
910
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
911
+ <xsl:value-of select="addrtype" />
912
+ </xsl:element>
913
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
914
+ <xsl:attribute name="title">Address</xsl:attribute>
915
+ </xsl:element>
916
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
917
+ <address>
918
+ <xsl:value-of select="address" /><br />
919
+ <xsl:value-of select="city" /><xsl:text>, </xsl:text>
920
+ <xsl:value-of select="state" /><xsl:text> </xsl:text>
921
+ <xsl:value-of select="postal" /><br />
922
+ <xsl:value-of select="country" />
923
+ </address>
924
+ </xsl:element>
925
+ </xsl:template>
926
+
927
+ <xsl:template match="cntvoice">
928
+ <xsl:call-template name="description">
929
+ <xsl:with-param name="term" select="'Phone'" />
930
+ </xsl:call-template>
931
+ </xsl:template>
932
+
933
+ <xsl:template match="cnttdd">
934
+ <xsl:call-template name="description">
935
+ <xsl:with-param name="term" select="'TDD/TTY'" />
936
+ </xsl:call-template>
937
+ </xsl:template>
938
+
939
+ <xsl:template match="cntfax">
940
+ <xsl:call-template name="description">
941
+ <xsl:with-param name="term" select="'Fax'" />
942
+ </xsl:call-template>
943
+ </xsl:template>
944
+
945
+ <xsl:template match="cntemail">
946
+ <xsl:call-template name="description-email">
947
+ <xsl:with-param name="term" select="'Email'" />
948
+ </xsl:call-template>
949
+ </xsl:template>
950
+
951
+ <xsl:template match="hours">
952
+ <xsl:call-template name="description">
953
+ <xsl:with-param name="term" select="'Hours of Service'" />
954
+ </xsl:call-template>
955
+ </xsl:template>
956
+
957
+ <xsl:template match="cntinst">
958
+ <xsl:call-template name="description">
959
+ <xsl:with-param name="term" select="'Contact Instructions'" />
960
+ </xsl:call-template>
961
+ </xsl:template>
962
+ <!-- End Citation Information -->
963
+
964
+
965
+ <!-- Named templates used throughout stylesheet to generate k/v pairs -->
966
+ <xsl:template name="description">
967
+ <xsl:param name="term" />
968
+ <xsl:if test="normalize-space(.) != ''">
969
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
970
+ <xsl:attribute name="title">
971
+ <xsl:value-of select="$term" />
972
+ </xsl:attribute>
973
+ <xsl:value-of select="$term" />
974
+ </xsl:element>
975
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
976
+ <xsl:value-of select="." />
977
+ </xsl:element>
978
+ </xsl:if>
979
+ </xsl:template>
980
+
981
+ <xsl:template name="description-link">
982
+ <xsl:param name="term" />
983
+ <xsl:if test="normalize-space(.) != ''">
984
+ <xsl:choose>
985
+ <xsl:when test="starts-with(normalize-space(.), 'http')">
986
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
987
+ <xsl:attribute name="title">
988
+ <xsl:value-of select="$term" />
989
+ </xsl:attribute>
990
+ <xsl:value-of select="$term" />
991
+ </xsl:element>
992
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
993
+ <xsl:element name="a">
994
+ <xsl:attribute name="href">
995
+ <xsl:value-of select="." />
996
+ </xsl:attribute>
997
+ <xsl:value-of select="." />
998
+ </xsl:element>
999
+ </xsl:element>
1000
+ </xsl:when>
1001
+ <xsl:otherwise>
1002
+ <xsl:call-template name="description">
1003
+ <xsl:with-param name="term" select="$term" />
1004
+ </xsl:call-template>
1005
+ </xsl:otherwise>
1006
+ </xsl:choose>
1007
+ </xsl:if>
1008
+ </xsl:template>
1009
+
1010
+ <xsl:template name="description-email">
1011
+ <xsl:param name="term" />
1012
+ <xsl:if test="normalize-space(.) != ''">
1013
+ <xsl:element name="{$key}" use-attribute-sets="key-attr">
1014
+ <xsl:attribute name="title">
1015
+ <xsl:value-of select="$term" />
1016
+ </xsl:attribute>
1017
+ <xsl:value-of select="$term" />
1018
+ </xsl:element>
1019
+ <xsl:element name="{$value}" use-attribute-sets="value-attr">
1020
+ <xsl:element name="a">
1021
+ <xsl:attribute name="href">
1022
+ <xsl:value-of select="concat('mailto:', .)" />
1023
+ </xsl:attribute>
1024
+ <xsl:value-of select="." />
1025
+ </xsl:element>
1026
+ </xsl:element>
1027
+ </xsl:if>
1028
+ </xsl:template>
1029
+
1030
+
1031
+ <!-- Suppress unknown elements -->
1032
+ <xsl:template match="text()"></xsl:template>
1033
+
1034
+ </xsl:stylesheet>