geo_combine 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0370f82160756d74fe36f4c4a5e9639b8e06d461
4
- data.tar.gz: e06d158e0770862c7033935c91c82bfe6b9d9f21
2
+ SHA256:
3
+ metadata.gz: a403eec66c0f81cd06bed4033f411ed137276277e6f9a6eb0a672c64428dcca0
4
+ data.tar.gz: 7c6e8a61d3d8783a633edac40c57c435a4b6b3d9bd17ff1ae272e794fb6c2b56
5
5
  SHA512:
6
- metadata.gz: f5072b677855334cbe0716a3639394ead6c10bce24cdec3485daf5764d36df1466938247075cbf5737070a7b08fb5f1926aa618ac0c9679783c9edf8e5ea7b86
7
- data.tar.gz: 26098a941f59b4c36fa0c4f8331d2c31d8575c2978e4bcba1804a9711b98a22e34d78e16dfa1a5d04da4a130f887bb91ff5bc4f0de794bb2dc2e07ffa72b93d2
6
+ metadata.gz: b995db35d3452c377d93a9384018e54c01730b76462e5109d3a4ab3e7e24ddcbf3a8fa1b7703b2e571832a054d8a43459a34b18df9b5af418e87107c8509a873
7
+ data.tar.gz: fc129701c6e2fb138e9f43aab3b2b6e84dc68696813cbb1fb5c7ede89f364c88b8d5717a3e477fc030dfd2ee588a335df0274bf4005f1434c14a841d0f92e0de
@@ -2,6 +2,7 @@ sudo: false
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.2.7
6
- - 2.3.4
7
- - 2.4.1
5
+ - 2.4.10
6
+ - 2.5.8
7
+ - 2.6.6
8
+ - 2.7.1
data/README.md CHANGED
@@ -101,6 +101,67 @@ change the [`commitWithin` parameter](https://lucene.apache.org/solr/guide/6_6/u
101
101
  $ SOLR_COMMIT_WITHIN=100 bundle exec rake geocombine:index
102
102
  ```
103
103
 
104
+ ### Harvesting and indexing documents from GeoBlacklight sites
105
+
106
+ GeoCombine provides a Harvester class and rake task to harvest and index content from GeoBlacklight sites (or any site that follows the Blacklight API format). Given that the configurations can change from consumer to consumer and site to site, the class provides a relatively simple configuration API. This can be configured in an initializer, a wrapping rake task, or any other ruby context where the rake task our class would be invoked.
107
+
108
+ #### Harvester configuration
109
+
110
+ Only the sites themselves are required to be configured but there are various configuration options that can (optionally) be supplied to modify the harvester's behavior.
111
+
112
+ ```ruby
113
+ GeoCombine::GeoBlacklightIndexer.configure do
114
+ {
115
+ commit_within: '10000',
116
+ crawl_delay: 1, # All sites
117
+ debug: true,
118
+ SITE1: {
119
+ crawl_delay: 2, # SITE1 only
120
+ host: 'https://geoblacklight.example.edu',
121
+ params: {
122
+ f: {
123
+ dct_provenance_s: ['Institution']
124
+ }
125
+ }
126
+ },
127
+ SITE2: {
128
+ host: 'https://geoportal.example.edu',
129
+ params: {
130
+ q: '*'
131
+ }
132
+ }
133
+ }
134
+ end
135
+ ```
136
+
137
+ ##### Crawl Delays (default: none)
138
+
139
+ Crawl delays can be configured (in seconds) either globally for all sites or on a per-site basis. This will cause a delay for that number of seconds between each search results page (note that Blacklight 7 necessitates a lot of requests per results page and this only causes the delay per page of results)
140
+
141
+ ##### Solr's commitWithin (default: 5000 milliseconds)
142
+
143
+ Solr's commitWithin option can be configured (in milliseconds) by passing a value under the commit_within key.
144
+
145
+ ##### Debugging (default: false)
146
+
147
+ The harvester and indexer will only `puts` content when errors happen. It is possible to see some progress information by setting the debug configuration option.
148
+
149
+ #### Transforming Documents
150
+
151
+ You may need to transform documents that are harvested for various purposes (removing fields, adding fields, omitting a document all together, etc). You can configure some ruby code (a proc) that will take the document in, transform it, and return the transformed document. By default the indexer will remove the `score`, `timestamp`, and `_version_` fields from the documents harvested. If you provide your own transformer, you'll likely want to remove these fields in addition to the other transformations you provide.
152
+
153
+ ```ruby
154
+ GeoCombine::GeoBlacklightIndexer.document_transformer = -> (document) do
155
+ # Removes "bogus_field" from the content we're harvesting
156
+ # in addition to some other solr fields we don't want
157
+ %w[_version_ score timestamp bogus_field].each do |field|
158
+ document.delete(field)
159
+ end
160
+
161
+ document
162
+ end
163
+ ```
164
+
104
165
  ## Tests
105
166
 
106
167
  To run the tests, use:
@@ -68,6 +68,9 @@ require 'geo_combine/esri_open_data'
68
68
  require 'geo_combine/ckan_metadata'
69
69
  require 'geo_combine/ogp'
70
70
 
71
+ # Require harvesting/indexing files
72
+ require 'geo_combine/geo_blacklight_harvester'
73
+
71
74
  # Require gem files
72
75
  require 'geo_combine/version'
73
76
  require 'geo_combine/railtie' if defined?(Rails)
@@ -0,0 +1,203 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GeoCombine
4
+ ##
5
+ # A class to harvest and index results from GeoBlacklight sites
6
+ # You can configure the sites to be harvested via a configure command.
7
+ # GeoCombine::GeoBlacklightHarvester.configure do
8
+ # {
9
+ # SITE: { host: 'https://example.com', params: { f: { dct_provenance_s: ['SITE'] } } }
10
+ # }
11
+ # end
12
+ # The class configuration also allows for various other things to be configured:
13
+ # - A debug parameter to print out details of what is being harvested and indexed
14
+ # - crawl delays for each page of results (globally or on a per site basis)
15
+ # - Solr's commitWithin parameter (defaults to 5000)
16
+ # - A document transformer proc to modify a document before indexing (defaults to removing _version_, score, and timestamp)
17
+ # Example: GeoCombine::GeoBlacklightHarvester.new('SITE').index
18
+ class GeoBlacklightHarvester
19
+ require 'active_support/core_ext/object/to_query'
20
+
21
+ class << self
22
+ attr_writer :document_transformer
23
+
24
+ def configure(&block)
25
+ @config = yield block
26
+ end
27
+
28
+ def config
29
+ @config || {}
30
+ end
31
+
32
+ def document_transformer
33
+ @document_transformer || ->(document) do
34
+ document.delete('_version_')
35
+ document.delete('score')
36
+ document.delete('timestamp')
37
+ document
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+ attr_reader :site, :site_key
44
+ def initialize(site_key)
45
+ @site_key = site_key
46
+ @site = self.class.config[site_key]
47
+
48
+ raise ArgumentError, "Site key #{@site_key.inspect} is not configured for #{self.class.name}" unless @site
49
+ end
50
+
51
+ def index
52
+ puts "Fetching page 1 @ #{base_url}&page=1" if self.class.config[:debug]
53
+ response = JSON.parse(Net::HTTP.get(URI("#{base_url}&page=1")))
54
+ response_class = BlacklightResponseVersionFactory.call(response)
55
+
56
+ response_class.new(response: response, base_url: base_url).documents.each do |docs|
57
+ docs.map! do |document|
58
+ self.class.document_transformer.call(document) if self.class.document_transformer
59
+ end.compact
60
+
61
+ puts "Adding #{docs.count} documents to solr" if self.class.config[:debug]
62
+ solr_connection.update params: { commitWithin: commit_within, overwrite: true },
63
+ data: docs.to_json,
64
+ headers: { 'Content-Type' => 'application/json' }
65
+
66
+ sleep(crawl_delay.to_i) if crawl_delay
67
+ end
68
+ end
69
+
70
+ ##
71
+ # A "factory" class to determine the blacklight response version to use
72
+ class BlacklightResponseVersionFactory
73
+ def self.call(json)
74
+ keys = json.keys
75
+ if keys.include?('response')
76
+ LegacyBlacklightResponse
77
+ elsif keys.any? && %w[links data].all? { |param| keys.include?(param) }
78
+ ModernBlacklightResponse
79
+ else
80
+ raise NotImplementedError, "The following json response was not able to be parsed by the GeoBlacklightHarvester\n#{json}"
81
+ end
82
+ end
83
+ end
84
+
85
+ class LegacyBlacklightResponse
86
+ attr_reader :base_url
87
+ attr_accessor :response, :page
88
+ def initialize(response:, base_url:)
89
+ @base_url = base_url
90
+ @response = response
91
+ @page = 1
92
+ end
93
+
94
+ def documents
95
+ return enum_for(:documents) unless block_given?
96
+
97
+ while current_page && total_pages && (current_page <= total_pages) do
98
+ yield response.dig('response', 'docs')
99
+
100
+ break if current_page == total_pages
101
+ self.page += 1
102
+ puts "Fetching page #{page} @ #{url}" if GeoCombine::GeoBlacklightHarvester.config[:debug]
103
+
104
+ begin
105
+ self.response = JSON.parse(Net::HTTP.get(URI(url)))
106
+ rescue => e
107
+ puts "Request for #{url} failed with #{e}"
108
+ self.response = nil
109
+ end
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ def url
116
+ "#{base_url}&page=#{page}"
117
+ end
118
+
119
+ def current_page
120
+ response.dig('response', 'pages', 'current_page')
121
+ end
122
+
123
+ def total_pages
124
+ response.dig('response', 'pages', 'total_pages')
125
+ end
126
+ end
127
+
128
+ ##
129
+ # Class to return documents from the Blacklight API (v7 and above)
130
+ class ModernBlacklightResponse
131
+ attr_reader :base_url
132
+ attr_accessor :response, :page
133
+ def initialize(response:, base_url:)
134
+ @base_url = base_url
135
+ @response = response
136
+ @page = 1
137
+ end
138
+
139
+ def documents
140
+ return enum_for(:documents) unless block_given?
141
+
142
+ while response && response['data'].any?
143
+ document_urls = response['data'].collect { |data| data.dig('links', 'self') }.compact
144
+
145
+ yield documents_from_urls(document_urls)
146
+
147
+ url = response.dig('links', 'next')
148
+ break unless url
149
+ self.page += 1
150
+ puts "Fetching page #{page} @ #{url}" if GeoCombine::GeoBlacklightHarvester.config[:debug]
151
+ begin
152
+ self.response = JSON.parse(Net::HTTP.get(URI(url)))
153
+ rescue => e
154
+ puts "Request for #{url} failed with #{e}"
155
+ self.response = nil
156
+ end
157
+ end
158
+ end
159
+
160
+ private
161
+
162
+ def documents_from_urls(urls)
163
+ puts "Fetching #{urls.count} documents for page #{page}" if GeoCombine::GeoBlacklightHarvester.config[:debug]
164
+ urls.map do |url|
165
+ begin
166
+ JSON.parse(Net::HTTP.get(URI("#{url}/raw")))
167
+ rescue => e
168
+ puts "Fetching \"#{url}/raw\" failed with #{e}"
169
+
170
+ nil
171
+ end
172
+ end.compact
173
+ end
174
+ end
175
+
176
+ private
177
+
178
+ def base_url
179
+ "#{site[:host]}?#{default_params.to_query}"
180
+ end
181
+
182
+ def solr_connection
183
+ solr_url = ENV['SOLR_URL'] || 'http://127.0.0.1:8983/solr/blacklight-core'
184
+
185
+ RSolr.connect url: solr_url, adapter: :net_http_persistent
186
+ end
187
+
188
+ def commit_within
189
+ self.class.config[:commit_within] || '5000'
190
+ end
191
+
192
+ def crawl_delay
193
+ site[:crawl_delay] || self.class.config[:crawl_delay]
194
+ end
195
+
196
+ def default_params
197
+ {
198
+ per_page: 100,
199
+ format: :json
200
+ }.merge(site[:params])
201
+ end
202
+ end
203
+ end
@@ -1,3 +1,3 @@
1
1
  module GeoCombine
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -2,6 +2,7 @@ require 'net/http'
2
2
  require 'json'
3
3
  require 'rsolr'
4
4
  require 'find'
5
+ require 'geo_combine/geo_blacklight_harvester'
5
6
 
6
7
  namespace :geocombine do
7
8
  commit_within = (ENV['SOLR_COMMIT_WITHIN'] || 5000).to_i
@@ -60,4 +61,13 @@ namespace :geocombine do
60
61
  end
61
62
  solr.commit
62
63
  end
64
+
65
+ namespace :geoblacklight_harvester do
66
+ desc 'Harvest documents from a configured GeoBlacklight instance'
67
+ task :index, [:site] do |_t, args|
68
+ raise ArgumentError, 'A site argument is required' unless args.site
69
+
70
+ GeoCombine::GeoBlacklightHarvester.new(args.site).index
71
+ end
72
+ end
63
73
  end
@@ -1,1070 +1,1107 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
2
-
3
- <!--
4
- iso2html.xsl - Transformation from ISO 19139 into HTML
5
- Created by Kim Durante, Stanford University Libraries
6
-
7
- TODO: Needs full Data Quality section mapped
8
- Not sure if complete contactInfo is needed for each Responsible Party?
9
-
10
-
11
-
12
- -->
13
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
14
- xmlns:xlink="http://www.w3.org/1999/xlink"
15
- xmlns:gmd="http://www.isotc211.org/2005/gmd"
16
- xmlns:gco="http://www.isotc211.org/2005/gco"
17
- xmlns:gts="http://www.isotc211.org/2005/gts"
18
- xmlns:srv="http://www.isotc211.org/2005/srv"
19
- xmlns:gml="http://www.opengis.net/gml"
20
- exclude-result-prefixes="gmd gco gml srv xlink gts">
21
-
22
- <xsl:output method="html" encoding="UTF-8" indent="yes"/>
23
-
24
- <xsl:template match="/">
25
- <html>
26
- <head>
27
- <title><xsl:value-of select="gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/></title>
28
- </head>
29
- <body>
30
- <h1><xsl:value-of select="gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/></h1>
31
- <ul>
32
- <xsl:if test="gmd:MD_Metadata/gmd:identificationInfo">
33
- <li><a href="#iso-identification-info">Identification Information</a></li>
34
- </xsl:if>
35
-
36
- <xsl:if test="gmd:MD_Metadata/gmd:referenceSystemInfo">
37
- <li><a href="#iso-spatial-reference-info">Spatial Reference Information</a></li>
38
- </xsl:if>
39
-
40
- <xsl:if test="gmd:MD_Metadata/gmd:dataQualityInfo">
41
- <li><a href="#iso-data-quality-info">Data Quality Information</a></li>
42
- </xsl:if>
43
-
44
- <xsl:if test="gmd:MD_Metadata/gmd:distributionInfo">
45
- <li><a href="#iso-distribution-info">Distribution Information</a></li>
46
- </xsl:if>
47
-
48
- <xsl:if test="gmd:MD_Metadata/gmd:contentInfo">
49
- <li><a href="#iso-content-info">Content Information</a></li>
50
- </xsl:if>
51
-
52
- <xsl:if test="gmd:MD_Metadata/gmd:spatialRepresentationInfo">
53
- <li><a href="#iso-spatial-representation-info">Spatial Representation Information</a></li>
54
- </xsl:if>
55
-
56
- <xsl:if test="gmd:MD_Metadata">
57
- <li><a href="#iso-metadata-reference-info">Metadata Reference Information</a></li>
58
- </xsl:if>
59
- </ul>
60
- <xsl:apply-templates/>
61
- </body>
62
- </html>
63
- </xsl:template>
64
-
65
-
66
- <xsl:template match="gmd:MD_Metadata">
67
- <div id="iso-identification-info">
68
- <dl>
69
- <dt>Identification Information</dt>
70
- <dd>
71
- <dl>
72
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation">
73
- <dt>Citation</dt>
74
- <dd>
75
- <dl>
76
- <dt>Title</dt>
77
- <dd>
78
- <xsl:value-of select="gmd:title"/>
79
- </dd>
80
- <xsl:choose>
81
- <xsl:when test="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
82
- <xsl:for-each select="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
83
- <dt>Originator</dt>
84
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
85
- </xsl:for-each>
86
- </xsl:when>
87
-
88
- <xsl:when test="//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
89
- <xsl:for-each select="//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
90
- <xsl:if test="gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode/@codeListValue='originator'">
91
- <dt>Originator</dt>
92
- <dd><xsl:value-of select="gmd:CI_ResponsibleParty/gmd:organisationName | gmd:CI_ResponsibleParty/gmd:individualName"/></dd>
93
- </xsl:if>
94
- </xsl:for-each>
95
- </xsl:when>
96
- </xsl:choose>
97
-
98
- <xsl:for-each select="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
99
- <dt>Publisher</dt>
100
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
101
- <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
102
- <dt>Place of Publication</dt>
103
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
104
- <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
105
- <xsl:text>,</xsl:text>
106
- <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
107
- </xsl:if>
108
- <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
109
- <xsl:text>,</xsl:text>
110
- <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
111
- </xsl:if>
112
- </dd>
113
- </xsl:if>
114
- </xsl:for-each>
115
-
116
-
117
-
118
- <xsl:for-each select="gmd:date/gmd:CI_Date">
119
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
120
- <dt>Publication Date</dt>
121
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
122
- </xsl:if>
123
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
124
- <dt>Creation Date</dt>
125
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
126
- </xsl:if>
127
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
128
- <dt>Revision Date</dt>
129
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
130
- </xsl:if>
131
- </xsl:for-each>
132
-
133
- <xsl:if test="gmd:edition">
134
- <dt>Edition</dt>
135
- <dd>
136
- <xsl:value-of select="gmd:edition"/>
137
- </dd>
138
- </xsl:if>
139
-
140
- <xsl:if test="gmd:identifier/gmd:MD_Identifier/gmd:code">
141
- <dt>Identifier</dt>
142
- <dd>
143
- <xsl:value-of select="gmd:identifier/gmd:MD_Identifier/gmd:code"/>
144
- </dd>
145
- </xsl:if>
146
-
147
- <xsl:for-each select="gmd:presentationForm/gmd:CI_PresentationFormCode/@codeListValue">
148
- <dt>Geospatial Data Presentation Form</dt>
149
- <dd><xsl:value-of select="."/></dd>
150
- </xsl:for-each>
151
-
152
- <xsl:for-each select="gmd:collectiveTitle">
153
- <dt>Collection Title</dt>
154
- <dd><xsl:value-of select="."/></dd>
155
- </xsl:for-each>
156
-
157
- <xsl:for-each select="gmd:otherCitationDetails">
158
- <dt>Other Citation Details</dt>
159
- <dd>
160
- <xsl:value-of select="."/>
161
- </dd>
162
- </xsl:for-each>
163
-
164
- <xsl:for-each select="gmd:series/gmd:CI_Series">
165
- <dt>Series</dt>
166
- <dd>
167
- <dl>
168
- <dd>
169
- <dt>Series Title</dt>
170
- <dd><xsl:value-of select="gmd:name"/></dd>
171
- <dt>Issue</dt>
172
- <dd><xsl:value-of select="gmd:issueIdentification"/></dd>
173
- </dd>
174
- </dl>
175
- </dd>
176
- </xsl:for-each>
177
- </dl>
178
- </dd>
179
- </xsl:for-each>
180
-
181
-
182
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract">
183
- <dt>Abstract</dt>
184
- <dd><xsl:value-of select="."/></dd>
185
- </xsl:for-each>
186
-
187
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:purpose">
188
- <dt>Purpose</dt>
189
- <dd><xsl:value-of select="."/></dd>
190
- </xsl:for-each>
191
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:supplementalInformation">
192
- <dt>Supplemental Information</dt>
193
- <dd>
194
- <xsl:value-of select="."/>
195
- </dd>
196
- </xsl:for-each>
197
-
198
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator">
199
- <dt>Scale Denominator</dt>
200
- <dd>
201
- <xsl:value-of select="."/>
202
- </dd>
203
- </xsl:for-each>
204
-
205
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent">
206
- <dt>Temporal Extent</dt>
207
- <dd>
208
- <dl>
209
- <xsl:if test="ancestor-or-self::*/gmd:description">
210
- <dt>Currentness Reference</dt>
211
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:description"/></dd>
212
- </xsl:if>
213
- <xsl:choose>
214
- <xsl:when test="gml:TimePeriod">
215
- <dt>Time Period</dt>
216
- <dd>
217
- <dl>
218
- <dt>Begin</dt>
219
- <dd>
220
- <xsl:value-of select="gml:TimePeriod/gml:beginPosition"/>
221
- </dd>
222
- <dt>End</dt>
223
- <dd>
224
- <xsl:value-of select="gml:TimePeriod/gml:endPosition"/>
225
- </dd>
226
- </dl>
227
- </dd>
228
- </xsl:when>
229
- <xsl:when test="gml:TimeInstant">
230
- <dt>Time Instant</dt>
231
- <dd><xsl:value-of select="gml:TimeInstant/gml:timePosition"/></dd>
232
- </xsl:when>
233
- </xsl:choose>
234
- </dl>
235
- </dd>
236
- </xsl:for-each>
237
-
238
-
239
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox">
240
- <dt>Bounding Box</dt>
241
- <dd>
242
- <dl>
243
- <dt>West</dt>
244
- <dd>
245
- <xsl:value-of select="gmd:westBoundLongitude"/>
246
- </dd>
247
- <dt>East</dt>
248
- <dd>
249
- <xsl:value-of select="gmd:eastBoundLongitude"/>
250
- </dd>
251
- <dt>North</dt>
252
- <dd>
253
- <xsl:value-of select="gmd:northBoundLatitude"/>
254
- </dd>
255
- <dt>South</dt>
256
- <dd>
257
- <xsl:value-of select="gmd:southBoundLatitude"/>
258
- </dd>
259
- </dl>
260
- </dd>
261
- </xsl:for-each>
262
-
263
- <xsl:if test="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode">
264
- <dt>ISO Topic Category</dt>
265
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode">
266
- <dd>
267
- <xsl:value-of select="."/>
268
- </dd>
269
- </xsl:for-each>
270
- </xsl:if>
271
-
272
-
273
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords">
274
-
275
-
276
- <xsl:choose>
277
- <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='theme']">
278
- <dt>Theme Keyword</dt>
279
- <xsl:for-each select="gmd:keyword">
280
-
281
- <dd>
282
- <xsl:value-of select="."/>
283
- <xsl:if test="position()=last()">
284
- <dl>
285
- <dt>Theme Keyword Thesaurus</dt>
286
- <dd> <xsl:value-of select="ancestor-or-self::*/gmd:thesaurusName/gmd:CI_Citation/gmd:title"/></dd>
287
- </dl>
288
- </xsl:if>
289
- </dd>
290
- </xsl:for-each>
291
-
292
- </xsl:when>
293
-
294
- <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='place']">
295
- <dt>Place Keyword</dt>
296
- <xsl:for-each select="gmd:keyword">
297
-
298
- <dd>
299
- <xsl:value-of select="."/>
300
- <xsl:if test="position()=last()">
301
- <dl>
302
- <dt>Place Keyword Thesaurus</dt>
303
- <dd> <xsl:value-of select="ancestor-or-self::*/gmd:thesaurusName/gmd:CI_Citation/gmd:title"/></dd>
304
- </dl>
305
- </xsl:if>
306
- </dd>
307
- </xsl:for-each>
308
- </xsl:when>
309
-
310
- <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='temporal']">
311
- <dt>Temporal Keyword</dt>
312
- <xsl:for-each select="gmd:keyword">
313
-
314
- <dd>
315
- <xsl:value-of select="."/>
316
- </dd>
317
- </xsl:for-each>
318
- </xsl:when>
319
- </xsl:choose>
320
-
321
-
322
- </xsl:for-each>
323
-
324
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints">
325
-
326
- <xsl:if test="gmd:MD_LegalConstraints">
327
- <dt>Legal Constraints</dt>
328
- </xsl:if>
329
-
330
- <xsl:if test="gmd:MD_SecurityConstraints">
331
- <dt>Security Constraints</dt>
332
- </xsl:if>
333
-
334
- <xsl:if test="gmd:MD_Constraints">
335
- <dt>Resource Constraints</dt>
336
- </xsl:if>
337
-
338
- <dd>
339
- <dl>
340
- <xsl:if test="*/gmd:useLimitation">
341
- <dt>Use Limitation</dt>
342
- <dd>
343
- <xsl:value-of select="*/gmd:useLimitation"/>
344
- </dd>
345
- </xsl:if>
346
- <xsl:if test="*/gmd:accessConstraints">
347
- <dt>Access Restrictions</dt>
348
- <dd>
349
- <xsl:value-of select="*/gmd:accessConstraints/gmd:MD_RestrictionCode/@codeListValue"/>
350
- </dd>
351
- </xsl:if>
352
- <xsl:if test="*/gmd:useConstraints">
353
- <dt>Use Restrictions</dt>
354
- <dd>
355
- <xsl:value-of select="*/gmd:useConstraints/gmd:MD_RestrictionCode/@codeListValue"/>
356
- </dd>
357
- </xsl:if>
358
- <xsl:if test="*/gmd:otherConstraints">
359
- <dt>Other Restrictions</dt>
360
- <dd>
361
- <xsl:value-of select="*/gmd:otherConstraints"/>
362
- </dd>
363
- </xsl:if>
364
- </dl>
365
- </dd>
366
- </xsl:for-each>
367
-
368
-
369
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status">
370
- <dt>Status</dt>
371
- <dd><xsl:value-of select="gmd:MD_ProgressCode/@codeListValue"/></dd>
372
- </xsl:for-each>
373
-
374
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency">
375
- <dt>Maintenance and Update Frequency</dt>
376
- <dd>
377
- <xsl:value-of select="gmd:MD_MaintenanceFrequencyCode/@codeListValue"/>
378
- </dd>
379
- </xsl:for-each>
380
-
381
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:associationType/gmd:DS_AssociationTypeCode[@codeListValue='largerWorkCitation']">
382
- <dt>Collection</dt>
383
- <dd>
384
- <dl>
385
- <dt>Collection Title</dt>
386
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title"/></dd>
387
- <dt>URL</dt>
388
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/></dd>
389
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
390
- <dt>Originator</dt>
391
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
392
- </xsl:for-each>
393
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
394
- <dt>Publisher</dt>
395
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
396
- </xsl:for-each>
397
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:date">
398
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
399
- <dt>Publication Date</dt>
400
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
401
- </xsl:if>
402
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
403
- <dt>Creation Date</dt>
404
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
405
- </xsl:if>
406
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
407
- <dt>Revision Date</dt>
408
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
409
- </xsl:if>
410
- </xsl:for-each>
411
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:series/gmd:CI_Series">
412
- <dt>Series</dt>
413
- <dd>
414
- <dl>
415
- <dd>
416
- <dt>Series Title</dt>
417
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:name"/></dd>
418
- <dt>Issue</dt>
419
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:issueIdentification"/></dd>
420
- </dd>
421
- </dl>
422
- </dd>
423
- </xsl:for-each>
424
- </dl>
425
- </dd>
426
- </xsl:for-each>
427
-
428
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:associationType/gmd:DS_AssociationTypeCode[@codeListValue='crossReference']">
429
- <dt>Cross Reference</dt>
430
- <dd>
431
- <dl>
432
- <dt>Title</dt>
433
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title"/></dd>
434
- <dt>URL</dt>
435
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/></dd>
436
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
437
- <dt>Originator</dt>
438
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
439
- </xsl:for-each>
440
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
441
- <dt>Publisher</dt>
442
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
443
- </xsl:for-each>
444
- <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:date">
445
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
446
- <dt>Publication Date</dt>
447
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
448
- </xsl:if>
449
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
450
- <dt>Creation Date</dt>
451
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
452
- </xsl:if>
453
- <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
454
- <dt>Revision Date</dt>
455
- <dd><xsl:value-of select="gmd:CI_Date/gmd:date"/></dd>
456
- </xsl:if>
457
- </xsl:for-each>
458
- </dl>
459
- </dd>
460
- </xsl:for-each>
461
- <dt>Language</dt>
462
- <dd>
463
- <xsl:value-of select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:language"/>
464
- </dd>
465
-
466
- <xsl:if test="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:credit">
467
- <dt>Credit</dt>
468
- <dd><xsl:value-of select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:credit"/></dd>
469
- </xsl:if>
470
-
471
- <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
472
- <dt>Point of Contact</dt>
473
- <dd>
474
- <dl>
475
- <xsl:for-each select="gmd:CI_ResponsibleParty">
476
- <dt>Contact</dt>
477
- <dd>
478
- <xsl:value-of select="gmd:organisationName | gmd:individualName"/>
479
- </dd>
480
- <xsl:if test="gmd:positionName">
481
- <dt>Position Name</dt>
482
- <dd>
483
- <xsl:value-of select="gmd:positionName"/>
484
- </dd>
485
- </xsl:if>
486
-
487
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint">
488
- <dt>Delivery Point</dt>
489
- <dd>
490
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/>
491
- </dd>
492
- </xsl:if>
493
-
494
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
495
- <dt>City</dt>
496
- <dd>
497
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
498
- </dd>
499
- </xsl:if>
500
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
501
- <dt>Administrative Area</dt>
502
- <dd>
503
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
504
- </dd>
505
- </xsl:if>
506
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode">
507
- <dt>Postal Code</dt>
508
- <dd><xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode"/></dd>
509
- </xsl:if>
510
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
511
- <dt>Country</dt>
512
- <dd>
513
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
514
- </dd>
515
- </xsl:if>
516
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress">
517
- <dt>Email</dt>
518
- <dd>
519
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"/>
520
- </dd>
521
- </xsl:if>
522
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice">
523
- <dt>Phone</dt>
524
- <dd>
525
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"/>
526
- </dd>
527
- </xsl:if>
528
- </xsl:for-each>
529
- </dl>
530
- </dd>
531
- </xsl:for-each>
532
- </dl>
533
- </dd>
534
- </dl>
535
- </div>
536
-
537
- <!-- Spatial Reference Info -->
538
-
539
- <xsl:if test="gmd:referenceSystemInfo">
540
- <div id="iso-spatial-reference-info">
541
- <dt>Spatial Reference Information</dt>
542
- <dd>
543
- <dl>
544
- <dt>Reference System Identifier</dt>
545
- <dd>
546
- <dl>
547
- <dt>Code</dt>
548
- <dd><xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code"/></dd>
549
- <dt>Code Space</dt>
550
- <dd><xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:codeSpace"/></dd>
551
- <dt>Version</dt>
552
- <dd><xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:version"/></dd>
553
- </dl>
554
- </dd>
555
- </dl>
556
- </dd>
557
- </div>
558
- </xsl:if>
559
-
560
- <!-- Data Quality Info -->
561
- <xsl:if test="gmd:dataQualityInfo/gmd:DQ_DataQuality">
562
- <div id="iso-data-quality-info">
563
- <dt>Data Quality Information</dt>
564
- <dd>
565
- <dl>
566
- <xsl:if test="gmd:DQ_Scope/gmd:level">
567
- <dt>Hierarchy Level</dt>
568
- <dd>
569
- <xsl:value-of select="gmd:DQ_Scope/gmd:level/gmd:MD_ScopeCode[@codeListValue]"/>
570
- </dd>
571
- </xsl:if>
572
- <xsl:for-each select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report">
573
- <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy">
574
- <dt>Quantitative Attribute Accuracy Report</dt>
575
- <dd>
576
- <dl>
577
- <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy/gmd:evaluationMethodDescription/text()">
578
- <dt>Evaluation Method</dt>
579
- <dd><xsl:value-of select="gmd:DQ_QuantitativeAttributeAccuracy/gmd:evaluationMethodDescription"/></dd>
580
- </xsl:if>
581
- <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy/gmd:result/text()">
582
- <dt>Result</dt>
583
- <dd><xsl:value-of select="gmd:DQ_QuantitativeAttributeAccuracy/gmd:result"/></dd>
584
- </xsl:if>
585
- </dl>
586
- </dd>
587
- </xsl:if>
588
-
589
- <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy">
590
- <dt>Absolute External Positional Accuracy</dt>
591
- <dd>
592
- <dl>
593
- <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:evaluationMethodDescription/text()">
594
- <dt>Evaluation Method</dt>
595
- <dd><xsl:value-of select="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:evaluationMethodDescription"/></dd>
596
- </xsl:if>
597
- <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:result/text()">
598
- <dt>Result</dt>
599
- <dd><xsl:value-of select="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:result"/></dd>
600
- </xsl:if>
601
- </dl>
602
- </dd>
603
- </xsl:if>
604
-
605
- <xsl:if test="gmd:DQ_CompletenessCommission">
606
- <dt>Completeness Commission</dt>
607
- <dd>
608
- <dl>
609
- <xsl:if test="gmd:DQ_CompletenessCommission/gmd:evaluationMethodDescription/text()">
610
- <dt>Evaluation Method</dt>
611
- <dd><xsl:value-of select="gmd:DQ_CompletenessCommission/gmd:evaluationMethodDescription"/></dd>
612
- </xsl:if>
613
- <xsl:if test="gmd:DQ_CompletenessCommission/gmd:result/text()">
614
- <dt>Result</dt>
615
- <dd><xsl:value-of select="gmd:DQ_CompletenessCommission/gmd:result"/></dd>
616
- </xsl:if>
617
- </dl>
618
- </dd>
619
- </xsl:if>
620
- </xsl:for-each>
621
- <xsl:for-each select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage">
622
- <dt>Lineage</dt>
623
- <dd>
624
- <dl>
625
- <xsl:if test="gmd:statement">
626
- <dt>Statement</dt>
627
- <dd>
628
- <xsl:value-of select="gmd:statement"/>
629
- </dd>
630
- </xsl:if>
631
- <xsl:for-each select="gmd:processStep/gmd:LI_ProcessStep">
632
- <dt>Process Step</dt>
633
- <dd>
634
- <dl>
635
- <xsl:if test="gmd:description">
636
- <dt>Description</dt>
637
- <dd>
638
- <xsl:value-of select="gmd:description"/>
639
- </dd>
640
- </xsl:if>
641
-
642
- <xsl:for-each select="gmd:CI_ResponsibleParty">
643
- <dt>Processor</dt>
644
- <dd>
645
- <xsl:value-of select="gmd:individualName | gmd:organisationName"/>
646
- </dd>
647
- </xsl:for-each>
648
-
649
- <xsl:if test="gmd:dateTime">
650
- <dt>Process Date</dt>
651
- <dd>
652
- <xsl:value-of select="gmd:dateTime"/>
653
- </dd>
654
- </xsl:if>
655
- </dl>
656
- </dd>
657
- </xsl:for-each>
658
- <xsl:for-each select="gmd:source/gmd:LI_Source/gmd:sourceCitation">
659
- <dt>Source</dt>
660
- <dd>
661
- <dl>
662
- <dt>Title</dt>
663
- <dd>
664
- <xsl:value-of select="gmd:CI_Citation/gmd:title"/>
665
- </dd>
666
- <xsl:for-each select="gmd:CI_Citation/gmd:date/gmd:CI_Date">
667
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
668
- <dt>Publication Date</dt>
669
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
670
- </xsl:if>
671
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
672
- <dt>Creation Date</dt>
673
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
674
- </xsl:if>
675
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
676
- <dt>Revision Date</dt>
677
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
678
- </xsl:if>
679
- </xsl:for-each>
680
- <xsl:for-each select="gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
681
- <dt>Originator</dt>
682
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
683
- </xsl:for-each>
684
-
685
- <xsl:for-each select="gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
686
- <dt>Publisher</dt>
687
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/></dd>
688
- <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
689
- <dt>Place of Publication</dt>
690
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/></dd>
691
- </xsl:if>
692
- </xsl:for-each>
693
-
694
- <xsl:if test="gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code">
695
- <dt>Identifier</dt>
696
- <dd><xsl:value-of select="gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/></dd>
697
- </xsl:if>
698
- <xsl:if test="ancestor-or-self::*/gmd:description">
699
- <dt>Description</dt>
700
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:description"/></dd>
701
- </xsl:if>
702
- </dl>
703
- </dd>
704
- </xsl:for-each>
705
- </dl>
706
- </dd>
707
- </xsl:for-each>
708
-
709
- </dl>
710
- </dd>
711
- </div>
712
- </xsl:if>
713
-
714
- <!-- Distribution -->
715
- <xsl:if test="gmd:distributionInfo">
716
- <div id="iso-distribution-info">
717
- <dt>Distribution Information</dt>
718
- <dd>
719
- <dl>
720
- <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format">
721
- <dt>Format Name</dt>
722
- <dd>
723
- <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name"/>
724
- </dd>
725
- <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:version/text()">
726
- <dt>Format Version</dt>
727
- <dd>
728
- <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:version"/>
729
- </dd>
730
- </xsl:if>
731
- </xsl:if>
732
-
733
- <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor">
734
- <dt>Distributor</dt>
735
- <dd>
736
- <xsl:value-of select="gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName"/>
737
- </dd>
738
- </xsl:for-each>
739
-
740
- <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions">
741
- <dt>Online Access</dt>
742
- <dd>
743
- <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"/>
744
- </dd>
745
- <dt>Protocol</dt>
746
- <dd>
747
- <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:protocol"/>
748
- </dd>
749
- <dt>Name</dt>
750
- <dd>
751
- <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:name"/>
752
- </dd>
753
- <xsl:if test="gmd:onLine/gmd:CI_OnlineResource/gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue">
754
- <dt>Function</dt>
755
- <dd>
756
- <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue"/>
757
- </dd>
758
- </xsl:if>
759
- <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:transferSize">
760
- <dt>Transfer Size</dt>
761
- <dd><xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:transferSize"/></dd>
762
- </xsl:if>
763
- </xsl:for-each>
764
- </dl>
765
- </dd>
766
- </div>
767
- </xsl:if>
768
-
769
- <!-- Content Info -->
770
- <xsl:if test="gmd:contentInfo">
771
- <div id="iso-content-info">
772
- <dt>Content Information</dt>
773
- <dd>
774
- <dl>
775
- <xsl:if test="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription">
776
- <dt>Feature Catalog Description</dt>
777
- <dd>
778
- <dl>
779
- <dt>Compliance Code</dt>
780
- <dd><xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:complianceCode"/></dd>
781
- <dt>Language</dt>
782
- <dd><xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:language"/></dd>
783
- <dt>Included With Dataset</dt>
784
- <dd><xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:includedWithDataset"/></dd>
785
- <dt>Feature Catalog Citation</dt>
786
- <dd>
787
- <dl>
788
- <dt>Title</dt>
789
- <dd>
790
- <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:title"/>
791
- </dd>
792
-
793
- <xsl:for-each select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:date/gmd:CI_Date">
794
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
795
- <dt>Publication Date</dt>
796
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
797
- </xsl:if>
798
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
799
- <dt>Creation Date</dt>
800
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
801
- </xsl:if>
802
- <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
803
- <dt>Revision Date</dt>
804
- <dd><xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/></dd>
805
- </xsl:if>
806
- </xsl:for-each>
807
- <dt>Feature Catalog Identifier</dt>
808
- <dd><xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/></dd>
809
- </dl>
810
- </dd>
811
- </dl>
812
- </dd>
813
- </xsl:if>
814
- <xsl:if test="gmd:contentInfo/gmd:MD_ImageDescription">
815
- <dt>Content Type</dt>
816
- <dd>
817
- <xsl:value-of select="gmd:contentInfo/gmd:MD_ImageDescription/gmd:contentType/gmd:MD_CoverageContentTypeCode[@codeListValue]"/>
818
- </dd>
819
- </xsl:if>
820
- </dl>
821
- </dd>
822
- </div>
823
- </xsl:if>
824
- <!-- Spatial Representation -->
825
- <xsl:if test="gmd:spatialRepresentationInfo">
826
- <div id="iso-spatial-representation-info">
827
- <dt>Spatial Representation Information</dt>
828
- <dd>
829
- <dl>
830
- <xsl:choose>
831
- <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation">
832
- <dt>Vector</dt>
833
- <dd>
834
- <dl>
835
- <dt>Topology Level</dt>
836
- <dd>
837
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:topologyLevel/gmd:MD_TopologyLevelCode[@codeListValue]"/>
838
- </dd>
839
- <dt>Vector Object Type</dt>
840
- <dd>
841
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:geometricObjects/gmd:MD_GeometricObjects/gmd:geometricObjectType/gmd:MD_GeometricObjectTypeCode[@codeListValue]"/>
842
- </dd>
843
- <dt>Vector Object Count</dt>
844
- <dd>
845
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:geometricObjects/gmd:MD_GeometricObjects/gmd:geometricObjectCount"/>
846
- </dd>
847
- </dl>
848
- </dd>
849
- </xsl:when>
850
-
851
- <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation">
852
- <dt>Raster</dt>
853
- <dd>
854
- <dl>
855
- <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation/gmd:numberOfDimensions">
856
- <dt>Number of Dimensions</dt>
857
- <dd>
858
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation/gmd:numberOfDimensions"/>
859
- </dd>
860
- </xsl:if>
861
- <dd>
862
- <dl>
863
- <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:axisDimensionProperties/gmd:MD_Dimension">
864
- <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='column'">
865
- <dt>Column Count</dt>
866
- <dd>
867
- <xsl:value-of select="gmd:dimensionSize"/>
868
- </dd></xsl:if>
869
-
870
- <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='row'">
871
- <dt>Row Count</dt>
872
- <dd>
873
- <xsl:value-of select="gmd:dimensionSize"/>
874
- </dd></xsl:if>
875
- </xsl:for-each>
876
-
877
- <xsl:if test="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cellGeometry/gmd:MD_CellGeometryCode">
878
- <dt>Cell Geometry Type</dt>
879
- <dd>
880
- <xsl:value-of select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cellGeometry/gmd:MD_CellGeometryCode/@codeListValue"/>
881
- </dd>
882
- </xsl:if>
883
-
884
- <xsl:if test="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cornerPoints">
885
- <dt>Corner Points</dt>
886
- <dd>
887
- <dl>
888
- <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cornerPoints/gml:Point">
889
- <dt>Point</dt>
890
- <dd><xsl:value-of select="gml:pos"/></dd>
891
- </xsl:for-each>
892
- </dl>
893
- </dd>
894
-
895
- <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:centerPoint/gml:Point">
896
- <dt>Center Point</dt>
897
- <dd><xsl:value-of select="gml:pos"/></dd>
898
- </xsl:for-each>
899
- </xsl:if>
900
- </dl>
901
- </dd>
902
- </dl>
903
- </dd>
904
- </xsl:when>
905
- <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_Georectified">
906
- <dt>Raster</dt>
907
- <dd>
908
- <dl>
909
- <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:numberOfDimensions">
910
- <dt>Number of Dimensions</dt>
911
- <dd>
912
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:numberOfDimensions"/>
913
- </dd>
914
- </xsl:if>
915
-
916
- <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:axisDimensionProperties/gmd:MD_Dimension">
917
- <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='column'">
918
- <dt>Column Count</dt>
919
- <dd>
920
- <xsl:value-of select="gmd:dimensionSize"/>
921
- </dd></xsl:if>
922
-
923
- <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='row'">
924
- <dt>Row Count</dt>
925
- <dd>
926
- <xsl:value-of select="gmd:dimensionSize"/>
927
- </dd></xsl:if>
928
- </xsl:for-each>
929
-
930
- <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cellGeometry/gmd:MD_CellGeometryCode">
931
- <dt>Cell Geometry Type</dt>
932
- <dd>
933
- <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cellGeometry/gmd:MD_CellGeometryCode/@codeListValue"/>
934
- </dd>
935
- </xsl:if>
936
-
937
- <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cornerPoints">
938
- <dt>Corner Points</dt>
939
- <dd>
940
- <dl>
941
- <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cornerPoints/gml:Point">
942
- <dt>Point</dt>
943
- <dd><xsl:value-of select="gml:pos"/></dd>
944
- </xsl:for-each>
945
- </dl>
946
- </dd>
947
-
948
- <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:centerPoint/gml:Point">
949
- <dt>Center Point</dt>
950
- <dd><xsl:value-of select="gml:pos"/></dd>
951
- </xsl:for-each>
952
- </xsl:if>
953
- </dl>
954
- </dd>
955
- </xsl:when>
956
- </xsl:choose>
957
- </dl>
958
- </dd>
959
- </div>
960
- </xsl:if>
961
-
962
- <!-- Metadata Reference Info -->
963
- <div id="iso-metadata-reference-info">
964
- <dt>Metadata Reference Information</dt>
965
- <dd>
966
- <dl>
967
- <dt>Hierarchy Level</dt>
968
- <dd>
969
- <xsl:value-of select="gmd:hierarchyLevelName"/>
970
- </dd>
971
- <dt>Metadata File Identifier</dt>
972
- <dd>
973
- <xsl:value-of select="gmd:fileIdentifier"/>
974
- </dd>
975
- <xsl:if test="gmd:parentIdentifier">
976
- <dt>Parent Identifier</dt>
977
- <dd>
978
- <xsl:value-of select="gmd:parentIdentifier"/>
979
- </dd>
980
- </xsl:if>
981
- <xsl:if test="gmd:dataSetURI">
982
- <dt>Dataset URI</dt>
983
- <dd>
984
- <xsl:value-of select="gmd:dataSetURI"/>
985
- </dd>
986
- </xsl:if>
987
- <xsl:for-each select="gmd:metadataMaintenance/gmd:MD_MaintenanceInformation/gmd:contact">
988
- <dt>Metadata Point of Contact</dt>
989
- <dd>
990
- <dl>
991
- <xsl:for-each select="gmd:CI_ResponsibleParty">
992
- <dt>Name</dt>
993
- <dd>
994
- <xsl:value-of select="gmd:organisationName | gmd:individualName"/>
995
- </dd>
996
- <xsl:if test="gmd:positionName">
997
- <dt>Position Name</dt>
998
- <dd>
999
- <xsl:value-of select="gmd:positionName"/>
1000
- </dd>
1001
- </xsl:if>
1002
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint">
1003
- <dt>Delivery Point</dt>
1004
- <dd>
1005
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/>
1006
- </dd>
1007
- </xsl:if>
1008
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
1009
- <dt>City</dt>
1010
- <dd>
1011
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
1012
- </dd>
1013
- </xsl:if>
1014
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
1015
- <dt>Administrative Area</dt>
1016
- <dd>
1017
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
1018
- </dd>
1019
- </xsl:if>
1020
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode">
1021
- <dt>Postal Code</dt>
1022
- <dd>
1023
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode"/>
1024
- </dd>
1025
- </xsl:if>
1026
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
1027
- <dt>Country</dt>
1028
- <dd>
1029
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
1030
- </dd>
1031
- </xsl:if>
1032
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress">
1033
- <dt>Email</dt>
1034
- <dd>
1035
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"/>
1036
- </dd>
1037
- </xsl:if>
1038
- <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice">
1039
- <dt>Phone</dt>
1040
- <dd>
1041
- <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"/>
1042
- </dd>
1043
- </xsl:if>
1044
- </xsl:for-each>
1045
- </dl>
1046
- </dd>
1047
- </xsl:for-each>
1048
- <dt>Metadata Date Stamp</dt>
1049
- <dd>
1050
- <xsl:value-of select="gmd:dateStamp"/>
1051
- </dd>
1052
- <dt>Metadata Standard Name</dt>
1053
- <dd>
1054
- <xsl:value-of select="gmd:metadataStandardName"/>
1055
- </dd>
1056
- <dt>Metadata Standard Version</dt>
1057
- <dd>
1058
- <xsl:value-of select="gmd:metadataStandardVersion"/>
1059
- </dd>
1060
- <xsl:if test="gmd:characterSet/gmd:MD_CharacterSetCode[@codeListValue]/text()">
1061
- <dt>Character Set</dt>
1062
- <dd>
1063
- <xsl:value-of select="gmd:characterSet/gmd:MD_CharacterSetCode[@codeListValue]"/>
1064
- </dd>
1065
- </xsl:if>
1066
- </dl>
1067
- </dd>
1068
- </div>
1069
- </xsl:template>
1070
- </xsl:stylesheet>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- iso2html.xsl - Transformation from ISO 19139 into HTML Created by Kim Durante, Stanford University Libraries TODO: Needs full Data Quality section mapped Not sure if complete contactInfo is needed for each Responsible Party? -->
3
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:srv="http://www.isotc211.org/2005/srv" xmlns:gml="http://www.opengis.net/gml" exclude-result-prefixes="gmd gco gml srv xlink gts">
4
+ <xsl:output method="html" encoding="UTF-8" indent="yes"/>
5
+ <xsl:template match="/">
6
+ <html>
7
+ <head>
8
+ <title>
9
+ <xsl:value-of select="gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/>
10
+ </title>
11
+ </head>
12
+ <body>
13
+ <h1>
14
+ <xsl:value-of select="gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/>
15
+ </h1>
16
+ <ul>
17
+ <xsl:if test="gmd:MD_Metadata/gmd:identificationInfo">
18
+ <li>
19
+ <a href="#iso-identification-info">Identification Information</a>
20
+ </li>
21
+ </xsl:if>
22
+ <xsl:if test="gmd:MD_Metadata/gmd:referenceSystemInfo">
23
+ <li>
24
+ <a href="#iso-spatial-reference-info">Spatial Reference Information</a>
25
+ </li>
26
+ </xsl:if>
27
+ <xsl:if test="gmd:MD_Metadata/gmd:dataQualityInfo">
28
+ <li>
29
+ <a href="#iso-data-quality-info">Data Quality Information</a>
30
+ </li>
31
+ </xsl:if>
32
+ <xsl:if test="gmd:MD_Metadata/gmd:distributionInfo">
33
+ <li>
34
+ <a href="#iso-distribution-info">Distribution Information</a>
35
+ </li>
36
+ </xsl:if>
37
+ <xsl:if test="gmd:MD_Metadata/gmd:contentInfo">
38
+ <li>
39
+ <a href="#iso-content-info">Content Information</a>
40
+ </li>
41
+ </xsl:if>
42
+ <xsl:if test="gmd:MD_Metadata/gmd:spatialRepresentationInfo">
43
+ <li>
44
+ <a href="#iso-spatial-representation-info">Spatial Representation Information</a>
45
+ </li>
46
+ </xsl:if>
47
+ <xsl:if test="gmd:MD_Metadata">
48
+ <li>
49
+ <a href="#iso-metadata-reference-info">Metadata Reference Information</a>
50
+ </li>
51
+ </xsl:if>
52
+ </ul>
53
+ <xsl:apply-templates/>
54
+ </body>
55
+ </html>
56
+ </xsl:template>
57
+ <xsl:template match="gmd:MD_Metadata">
58
+ <div id="iso-identification-info">
59
+ <h2>Identification Information</h2>
60
+ <dl>
61
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation">
62
+ <dt>Citation</dt>
63
+ <dd>
64
+ <dl>
65
+ <dt>Title</dt>
66
+ <dd>
67
+ <xsl:value-of select="gmd:title"/>
68
+ </dd>
69
+ <xsl:choose>
70
+ <xsl:when test="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
71
+ <xsl:for-each select="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
72
+ <dt>Originator</dt>
73
+ <dd>
74
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
75
+ </dd>
76
+ </xsl:for-each>
77
+ </xsl:when>
78
+ <xsl:when test="//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
79
+ <xsl:for-each select="//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
80
+ <xsl:if test="gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode/@codeListValue='originator'">
81
+ <dt>Originator</dt>
82
+ <dd>
83
+ <xsl:value-of select="gmd:CI_ResponsibleParty/gmd:organisationName | gmd:CI_ResponsibleParty/gmd:individualName"/>
84
+ </dd>
85
+ </xsl:if>
86
+ </xsl:for-each>
87
+ </xsl:when>
88
+ </xsl:choose>
89
+ <xsl:for-each select="gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
90
+ <dt>Publisher</dt>
91
+ <dd>
92
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
93
+ </dd>
94
+ <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
95
+ <dt>Place of Publication</dt>
96
+ <dd>
97
+ <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
98
+ <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
99
+ <xsl:text>,</xsl:text>
100
+ <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
101
+ </xsl:if>
102
+ <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
103
+ <xsl:text>,</xsl:text>
104
+ <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
105
+ </xsl:if>
106
+ </dd>
107
+ </xsl:if>
108
+ </xsl:for-each>
109
+ <xsl:for-each select="gmd:date/gmd:CI_Date">
110
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
111
+ <dt>Publication Date</dt>
112
+ <dd>
113
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
114
+ </dd>
115
+ </xsl:if>
116
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
117
+ <dt>Creation Date</dt>
118
+ <dd>
119
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
120
+ </dd>
121
+ </xsl:if>
122
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
123
+ <dt>Revision Date</dt>
124
+ <dd>
125
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
126
+ </dd>
127
+ </xsl:if>
128
+ </xsl:for-each>
129
+ <xsl:if test="gmd:edition">
130
+ <dt>Edition</dt>
131
+ <dd>
132
+ <xsl:value-of select="gmd:edition"/>
133
+ </dd>
134
+ </xsl:if>
135
+ <xsl:if test="gmd:identifier/gmd:MD_Identifier/gmd:code">
136
+ <dt>Identifier</dt>
137
+ <dd>
138
+ <xsl:value-of select="gmd:identifier/gmd:MD_Identifier/gmd:code"/>
139
+ </dd>
140
+ </xsl:if>
141
+ <xsl:for-each select="gmd:presentationForm/gmd:CI_PresentationFormCode/@codeListValue">
142
+ <dt>Geospatial Data Presentation Form</dt>
143
+ <dd>
144
+ <xsl:value-of select="."/>
145
+ </dd>
146
+ </xsl:for-each>
147
+ <xsl:for-each select="gmd:collectiveTitle">
148
+ <dt>Collection Title</dt>
149
+ <dd>
150
+ <xsl:value-of select="."/>
151
+ </dd>
152
+ </xsl:for-each>
153
+ <xsl:for-each select="gmd:otherCitationDetails">
154
+ <dt>Other Citation Details</dt>
155
+ <dd>
156
+ <xsl:value-of select="."/>
157
+ </dd>
158
+ </xsl:for-each>
159
+ <xsl:for-each select="gmd:series/gmd:CI_Series">
160
+ <dt>Series</dt>
161
+ <dd>
162
+ <dl>
163
+ <dd>
164
+ <dt>Series Title</dt>
165
+ <dd>
166
+ <xsl:value-of select="gmd:name"/>
167
+ </dd>
168
+ <dt>Issue</dt>
169
+ <dd>
170
+ <xsl:value-of select="gmd:issueIdentification"/>
171
+ </dd>
172
+ </dd>
173
+ </dl>
174
+ </dd>
175
+ </xsl:for-each>
176
+ </dl>
177
+ </dd>
178
+ </xsl:for-each>
179
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract">
180
+ <dt>Abstract</dt>
181
+ <dd>
182
+ <xsl:value-of select="."/>
183
+ </dd>
184
+ </xsl:for-each>
185
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:purpose">
186
+ <dt>Purpose</dt>
187
+ <dd>
188
+ <xsl:value-of select="."/>
189
+ </dd>
190
+ </xsl:for-each>
191
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:supplementalInformation">
192
+ <dt>Supplemental Information</dt>
193
+ <dd>
194
+ <xsl:value-of select="."/>
195
+ </dd>
196
+ </xsl:for-each>
197
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator">
198
+ <dt>Scale Denominator</dt>
199
+ <dd>
200
+ <xsl:value-of select="."/>
201
+ </dd>
202
+ </xsl:for-each>
203
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent">
204
+ <dt>Temporal Extent</dt>
205
+ <dd>
206
+ <dl>
207
+ <xsl:if test="ancestor-or-self::*/gmd:description">
208
+ <dt>Currentness Reference</dt>
209
+ <dd>
210
+ <xsl:value-of select="ancestor-or-self::*/gmd:description"/>
211
+ </dd>
212
+ </xsl:if>
213
+ <xsl:choose>
214
+ <xsl:when test="gml:TimePeriod">
215
+ <dt>Time Period</dt>
216
+ <dd>
217
+ <dl>
218
+ <dt>Begin</dt>
219
+ <dd>
220
+ <xsl:value-of select="gml:TimePeriod/gml:beginPosition"/>
221
+ </dd>
222
+ <dt>End</dt>
223
+ <dd>
224
+ <xsl:value-of select="gml:TimePeriod/gml:endPosition"/>
225
+ </dd>
226
+ </dl>
227
+ </dd>
228
+ </xsl:when>
229
+ <xsl:when test="gml:TimeInstant">
230
+ <dt>Time Instant</dt>
231
+ <dd>
232
+ <xsl:value-of select="gml:TimeInstant/gml:timePosition"/>
233
+ </dd>
234
+ </xsl:when>
235
+ </xsl:choose>
236
+ </dl>
237
+ </dd>
238
+ </xsl:for-each>
239
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox">
240
+ <dt>Bounding Box</dt>
241
+ <dd>
242
+ <dl>
243
+ <dt>West</dt>
244
+ <dd>
245
+ <xsl:value-of select="gmd:westBoundLongitude"/>
246
+ </dd>
247
+ <dt>East</dt>
248
+ <dd>
249
+ <xsl:value-of select="gmd:eastBoundLongitude"/>
250
+ </dd>
251
+ <dt>North</dt>
252
+ <dd>
253
+ <xsl:value-of select="gmd:northBoundLatitude"/>
254
+ </dd>
255
+ <dt>South</dt>
256
+ <dd>
257
+ <xsl:value-of select="gmd:southBoundLatitude"/>
258
+ </dd>
259
+ </dl>
260
+ </dd>
261
+ </xsl:for-each>
262
+ <xsl:if test="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode">
263
+ <dt>ISO Topic Category</dt>
264
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode">
265
+ <dd>
266
+ <xsl:value-of select="."/>
267
+ </dd>
268
+ </xsl:for-each>
269
+ </xsl:if>
270
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords">
271
+ <xsl:choose>
272
+ <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='theme']">
273
+ <dt>Theme Keyword</dt>
274
+ <xsl:for-each select="gmd:keyword">
275
+ <dd>
276
+ <xsl:value-of select="."/>
277
+ <xsl:if test="position()=last()">
278
+ <dl>
279
+ <dt>Theme Keyword Thesaurus</dt>
280
+ <dd>
281
+ <xsl:value-of select="ancestor-or-self::*/gmd:thesaurusName/gmd:CI_Citation/gmd:title"/>
282
+ </dd>
283
+ </dl>
284
+ </xsl:if>
285
+ </dd>
286
+ </xsl:for-each>
287
+ </xsl:when>
288
+ <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='place']">
289
+ <dt>Place Keyword</dt>
290
+ <xsl:for-each select="gmd:keyword">
291
+ <dd>
292
+ <xsl:value-of select="."/>
293
+ <xsl:if test="position()=last()">
294
+ <dl>
295
+ <dt>Place Keyword Thesaurus</dt>
296
+ <dd>
297
+ <xsl:value-of select="ancestor-or-self::*/gmd:thesaurusName/gmd:CI_Citation/gmd:title"/>
298
+ </dd>
299
+ </dl>
300
+ </xsl:if>
301
+ </dd>
302
+ </xsl:for-each>
303
+ </xsl:when>
304
+ <xsl:when test="ancestor-or-self::*/gmd:type/gmd:MD_KeywordTypeCode[@codeListValue='temporal']">
305
+ <dt>Temporal Keyword</dt>
306
+ <xsl:for-each select="gmd:keyword">
307
+ <dd>
308
+ <xsl:value-of select="."/>
309
+ </dd>
310
+ </xsl:for-each>
311
+ </xsl:when>
312
+ </xsl:choose>
313
+ </xsl:for-each>
314
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints">
315
+ <xsl:if test="gmd:MD_LegalConstraints">
316
+ <dt>Legal Constraints</dt>
317
+ </xsl:if>
318
+ <xsl:if test="gmd:MD_SecurityConstraints">
319
+ <dt>Security Constraints</dt>
320
+ </xsl:if>
321
+ <xsl:if test="gmd:MD_Constraints">
322
+ <dt>Resource Constraints</dt>
323
+ </xsl:if>
324
+ <dd>
325
+ <dl>
326
+ <xsl:if test="*/gmd:useLimitation">
327
+ <dt>Use Limitation</dt>
328
+ <dd>
329
+ <xsl:value-of select="*/gmd:useLimitation"/>
330
+ </dd>
331
+ </xsl:if>
332
+ <xsl:if test="*/gmd:accessConstraints">
333
+ <dt>Access Restrictions</dt>
334
+ <dd>
335
+ <xsl:value-of select="*/gmd:accessConstraints/gmd:MD_RestrictionCode/@codeListValue"/>
336
+ </dd>
337
+ </xsl:if>
338
+ <xsl:if test="*/gmd:useConstraints">
339
+ <dt>Use Restrictions</dt>
340
+ <dd>
341
+ <xsl:value-of select="*/gmd:useConstraints/gmd:MD_RestrictionCode/@codeListValue"/>
342
+ </dd>
343
+ </xsl:if>
344
+ <xsl:if test="*/gmd:otherConstraints">
345
+ <dt>Other Restrictions</dt>
346
+ <dd>
347
+ <xsl:value-of select="*/gmd:otherConstraints"/>
348
+ </dd>
349
+ </xsl:if>
350
+ </dl>
351
+ </dd>
352
+ </xsl:for-each>
353
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status">
354
+ <dt>Status</dt>
355
+ <dd>
356
+ <xsl:value-of select="gmd:MD_ProgressCode/@codeListValue"/>
357
+ </dd>
358
+ </xsl:for-each>
359
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency">
360
+ <dt>Maintenance and Update Frequency</dt>
361
+ <dd>
362
+ <xsl:value-of select="gmd:MD_MaintenanceFrequencyCode/@codeListValue"/>
363
+ </dd>
364
+ </xsl:for-each>
365
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:associationType/gmd:DS_AssociationTypeCode[@codeListValue='largerWorkCitation']">
366
+ <dt>Collection</dt>
367
+ <dd>
368
+ <dl>
369
+ <dt>Collection Title</dt>
370
+ <dd>
371
+ <xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title"/>
372
+ </dd>
373
+ <dt>URL</dt>
374
+ <dd>
375
+ <xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/>
376
+ </dd>
377
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
378
+ <dt>Originator</dt>
379
+ <dd>
380
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
381
+ </dd>
382
+ </xsl:for-each>
383
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
384
+ <dt>Publisher</dt>
385
+ <dd>
386
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
387
+ </dd>
388
+ </xsl:for-each>
389
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:date">
390
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
391
+ <dt>Publication Date</dt>
392
+ <dd>
393
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
394
+ </dd>
395
+ </xsl:if>
396
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
397
+ <dt>Creation Date</dt>
398
+ <dd>
399
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
400
+ </dd>
401
+ </xsl:if>
402
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
403
+ <dt>Revision Date</dt>
404
+ <dd>
405
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
406
+ </dd>
407
+ </xsl:if>
408
+ </xsl:for-each>
409
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:series/gmd:CI_Series">
410
+ <dt>Series</dt>
411
+ <dd>
412
+ <dl>
413
+ <dd>
414
+ <dt>Series Title</dt>
415
+ <dd>
416
+ <xsl:value-of select="ancestor-or-self::*/gmd:name"/>
417
+ </dd>
418
+ <dt>Issue</dt>
419
+ <dd>
420
+ <xsl:value-of select="ancestor-or-self::*/gmd:issueIdentification"/>
421
+ </dd>
422
+ </dd>
423
+ </dl>
424
+ </dd>
425
+ </xsl:for-each>
426
+ </dl>
427
+ </dd>
428
+ </xsl:for-each>
429
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:associationType/gmd:DS_AssociationTypeCode[@codeListValue='crossReference']">
430
+ <dt>Cross Reference</dt>
431
+ <dd>
432
+ <dl>
433
+ <dt>Title</dt>
434
+ <dd>
435
+ <xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title"/>
436
+ </dd>
437
+ <dt>URL</dt>
438
+ <dd>
439
+ <xsl:value-of select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/>
440
+ </dd>
441
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
442
+ <dt>Originator</dt>
443
+ <dd>
444
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
445
+ </dd>
446
+ </xsl:for-each>
447
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
448
+ <dt>Publisher</dt>
449
+ <dd>
450
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
451
+ </dd>
452
+ </xsl:for-each>
453
+ <xsl:for-each select="ancestor-or-self::*/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:date">
454
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
455
+ <dt>Publication Date</dt>
456
+ <dd>
457
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
458
+ </dd>
459
+ </xsl:if>
460
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
461
+ <dt>Creation Date</dt>
462
+ <dd>
463
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
464
+ </dd>
465
+ </xsl:if>
466
+ <xsl:if test="contains(descendant-or-self::*/gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
467
+ <dt>Revision Date</dt>
468
+ <dd>
469
+ <xsl:value-of select="gmd:CI_Date/gmd:date"/>
470
+ </dd>
471
+ </xsl:if>
472
+ </xsl:for-each>
473
+ </dl>
474
+ </dd>
475
+ </xsl:for-each>
476
+ <dt>Language</dt>
477
+ <dd>
478
+ <xsl:value-of select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:language"/>
479
+ </dd>
480
+ <xsl:if test="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:credit">
481
+ <dt>Credit</dt>
482
+ <dd>
483
+ <xsl:value-of select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:credit"/>
484
+ </dd>
485
+ </xsl:if>
486
+ <xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact">
487
+ <dt>Point of Contact</dt>
488
+ <dd>
489
+ <dl>
490
+ <xsl:for-each select="gmd:CI_ResponsibleParty">
491
+ <dt>Contact</dt>
492
+ <dd>
493
+ <xsl:value-of select="gmd:organisationName | gmd:individualName"/>
494
+ </dd>
495
+ <xsl:if test="gmd:positionName">
496
+ <dt>Position Name</dt>
497
+ <dd>
498
+ <xsl:value-of select="gmd:positionName"/>
499
+ </dd>
500
+ </xsl:if>
501
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint">
502
+ <dt>Delivery Point</dt>
503
+ <dd>
504
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/>
505
+ </dd>
506
+ </xsl:if>
507
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
508
+ <dt>City</dt>
509
+ <dd>
510
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
511
+ </dd>
512
+ </xsl:if>
513
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
514
+ <dt>Administrative Area</dt>
515
+ <dd>
516
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
517
+ </dd>
518
+ </xsl:if>
519
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode">
520
+ <dt>Postal Code</dt>
521
+ <dd>
522
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode"/>
523
+ </dd>
524
+ </xsl:if>
525
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
526
+ <dt>Country</dt>
527
+ <dd>
528
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
529
+ </dd>
530
+ </xsl:if>
531
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress">
532
+ <dt>Email</dt>
533
+ <dd>
534
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"/>
535
+ </dd>
536
+ </xsl:if>
537
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice">
538
+ <dt>Phone</dt>
539
+ <dd>
540
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"/>
541
+ </dd>
542
+ </xsl:if>
543
+ </xsl:for-each>
544
+ </dl>
545
+ </dd>
546
+ </xsl:for-each>
547
+ </dl>
548
+ </div>
549
+ <!-- Spatial Reference Info -->
550
+ <xsl:if test="gmd:referenceSystemInfo">
551
+ <div id="iso-spatial-reference-info">
552
+ <h2>Spatial Reference Information</h2>
553
+ <dl>
554
+ <dt>Reference System Identifier</dt>
555
+ <dd>
556
+ <dl>
557
+ <dt>Code</dt>
558
+ <dd>
559
+ <xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code"/>
560
+ </dd>
561
+ <dt>Code Space</dt>
562
+ <dd>
563
+ <xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:codeSpace"/>
564
+ </dd>
565
+ <dt>Version</dt>
566
+ <dd>
567
+ <xsl:value-of select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:version"/>
568
+ </dd>
569
+ </dl>
570
+ </dd>
571
+ </dl>
572
+ </div>
573
+ </xsl:if>
574
+ <!-- Data Quality Info -->
575
+ <xsl:if test="gmd:dataQualityInfo/gmd:DQ_DataQuality">
576
+ <div id="iso-data-quality-info">
577
+ <h2>Data Quality Information</h2>
578
+ <dl>
579
+ <xsl:if test="gmd:DQ_Scope/gmd:level">
580
+ <dt>Hierarchy Level</dt>
581
+ <dd>
582
+ <xsl:value-of select="gmd:DQ_Scope/gmd:level/gmd:MD_ScopeCode[@codeListValue]"/>
583
+ </dd>
584
+ </xsl:if>
585
+ <xsl:for-each select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report">
586
+ <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy">
587
+ <dt>Quantitative Attribute Accuracy Report</dt>
588
+ <dd>
589
+ <dl>
590
+ <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy/gmd:evaluationMethodDescription/text()">
591
+ <dt>Evaluation Method</dt>
592
+ <dd>
593
+ <xsl:value-of select="gmd:DQ_QuantitativeAttributeAccuracy/gmd:evaluationMethodDescription"/>
594
+ </dd>
595
+ </xsl:if>
596
+ <xsl:if test="gmd:DQ_QuantitativeAttributeAccuracy/gmd:result/text()">
597
+ <dt>Result</dt>
598
+ <dd>
599
+ <xsl:value-of select="gmd:DQ_QuantitativeAttributeAccuracy/gmd:result"/>
600
+ </dd>
601
+ </xsl:if>
602
+ </dl>
603
+ </dd>
604
+ </xsl:if>
605
+ <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy">
606
+ <dt>Absolute External Positional Accuracy</dt>
607
+ <dd>
608
+ <dl>
609
+ <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:evaluationMethodDescription/text()">
610
+ <dt>Evaluation Method</dt>
611
+ <dd>
612
+ <xsl:value-of select="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:evaluationMethodDescription"/>
613
+ </dd>
614
+ </xsl:if>
615
+ <xsl:if test="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:result/text()">
616
+ <dt>Result</dt>
617
+ <dd>
618
+ <xsl:value-of select="gmd:DQ_AbsoluteExternalPositionalAccuracy/gmd:result"/>
619
+ </dd>
620
+ </xsl:if>
621
+ </dl>
622
+ </dd>
623
+ </xsl:if>
624
+ <xsl:if test="gmd:DQ_CompletenessCommission">
625
+ <dt>Completeness Commission</dt>
626
+ <dd>
627
+ <dl>
628
+ <xsl:if test="gmd:DQ_CompletenessCommission/gmd:evaluationMethodDescription/text()">
629
+ <dt>Evaluation Method</dt>
630
+ <dd>
631
+ <xsl:value-of select="gmd:DQ_CompletenessCommission/gmd:evaluationMethodDescription"/>
632
+ </dd>
633
+ </xsl:if>
634
+ <xsl:if test="gmd:DQ_CompletenessCommission/gmd:result/text()">
635
+ <dt>Result</dt>
636
+ <dd>
637
+ <xsl:value-of select="gmd:DQ_CompletenessCommission/gmd:result"/>
638
+ </dd>
639
+ </xsl:if>
640
+ </dl>
641
+ </dd>
642
+ </xsl:if>
643
+ </xsl:for-each>
644
+ <xsl:for-each select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage">
645
+ <dt>Lineage</dt>
646
+ <dd>
647
+ <dl>
648
+ <xsl:if test="gmd:statement">
649
+ <dt>Statement</dt>
650
+ <dd>
651
+ <xsl:value-of select="gmd:statement"/>
652
+ </dd>
653
+ </xsl:if>
654
+ <xsl:for-each select="gmd:processStep/gmd:LI_ProcessStep">
655
+ <dt>Process Step</dt>
656
+ <dd>
657
+ <dl>
658
+ <xsl:if test="gmd:description">
659
+ <dt>Description</dt>
660
+ <dd>
661
+ <xsl:value-of select="gmd:description"/>
662
+ </dd>
663
+ </xsl:if>
664
+ <xsl:for-each select="gmd:CI_ResponsibleParty">
665
+ <dt>Processor</dt>
666
+ <dd>
667
+ <xsl:value-of select="gmd:individualName | gmd:organisationName"/>
668
+ </dd>
669
+ </xsl:for-each>
670
+ <xsl:if test="gmd:dateTime">
671
+ <dt>Process Date</dt>
672
+ <dd>
673
+ <xsl:value-of select="gmd:dateTime"/>
674
+ </dd>
675
+ </xsl:if>
676
+ </dl>
677
+ </dd>
678
+ </xsl:for-each>
679
+ <xsl:for-each select="gmd:source/gmd:LI_Source/gmd:sourceCitation">
680
+ <dt>Source</dt>
681
+ <dd>
682
+ <dl>
683
+ <dt>Title</dt>
684
+ <dd>
685
+ <xsl:value-of select="gmd:CI_Citation/gmd:title"/>
686
+ </dd>
687
+ <xsl:for-each select="gmd:CI_Citation/gmd:date/gmd:CI_Date">
688
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
689
+ <dt>Publication Date</dt>
690
+ <dd>
691
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
692
+ </dd>
693
+ </xsl:if>
694
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
695
+ <dt>Creation Date</dt>
696
+ <dd>
697
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
698
+ </dd>
699
+ </xsl:if>
700
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
701
+ <dt>Revision Date</dt>
702
+ <dd>
703
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
704
+ </dd>
705
+ </xsl:if>
706
+ </xsl:for-each>
707
+ <xsl:for-each select="gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='originator']">
708
+ <dt>Originator</dt>
709
+ <dd>
710
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
711
+ </dd>
712
+ </xsl:for-each>
713
+ <xsl:for-each select="gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue='publisher']">
714
+ <dt>Publisher</dt>
715
+ <dd>
716
+ <xsl:value-of select="ancestor-or-self::*/gmd:organisationName | ancestor-or-self::*/gmd:individualName"/>
717
+ </dd>
718
+ <xsl:if test="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
719
+ <dt>Place of Publication</dt>
720
+ <dd>
721
+ <xsl:value-of select="ancestor-or-self::*/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
722
+ </dd>
723
+ </xsl:if>
724
+ </xsl:for-each>
725
+ <xsl:if test="gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code">
726
+ <dt>Identifier</dt>
727
+ <dd>
728
+ <xsl:value-of select="gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/>
729
+ </dd>
730
+ </xsl:if>
731
+ <xsl:if test="ancestor-or-self::*/gmd:description">
732
+ <dt>Description</dt>
733
+ <dd>
734
+ <xsl:value-of select="ancestor-or-self::*/gmd:description"/>
735
+ </dd>
736
+ </xsl:if>
737
+ </dl>
738
+ </dd>
739
+ </xsl:for-each>
740
+ </dl>
741
+ </dd>
742
+ </xsl:for-each>
743
+ </dl>
744
+ </div>
745
+ </xsl:if>
746
+ <!-- Distribution -->
747
+ <xsl:if test="gmd:distributionInfo">
748
+ <div id="iso-distribution-info">
749
+ <h2>Distribution Information</h2>
750
+ <dl>
751
+ <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format">
752
+ <dt>Format Name</dt>
753
+ <dd>
754
+ <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name"/>
755
+ </dd>
756
+ <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:version/text()">
757
+ <dt>Format Version</dt>
758
+ <dd>
759
+ <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:version"/>
760
+ </dd>
761
+ </xsl:if>
762
+ </xsl:if>
763
+ <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor">
764
+ <dt>Distributor</dt>
765
+ <dd>
766
+ <xsl:value-of select="gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName"/>
767
+ </dd>
768
+ </xsl:for-each>
769
+ <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions">
770
+ <dt>Online Access</dt>
771
+ <dd>
772
+ <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"/>
773
+ </dd>
774
+ <dt>Protocol</dt>
775
+ <dd>
776
+ <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:protocol"/>
777
+ </dd>
778
+ <dt>Name</dt>
779
+ <dd>
780
+ <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:name"/>
781
+ </dd>
782
+ <xsl:if test="gmd:onLine/gmd:CI_OnlineResource/gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue">
783
+ <dt>Function</dt>
784
+ <dd>
785
+ <xsl:value-of select="gmd:onLine/gmd:CI_OnlineResource/gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue"/>
786
+ </dd>
787
+ </xsl:if>
788
+ <xsl:if test="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:transferSize">
789
+ <dt>Transfer Size</dt>
790
+ <dd>
791
+ <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:transferSize"/>
792
+ </dd>
793
+ </xsl:if>
794
+ </xsl:for-each>
795
+ </dl>
796
+ </div>
797
+ </xsl:if>
798
+ <!-- Content Info -->
799
+ <xsl:if test="gmd:contentInfo">
800
+ <div id="iso-content-info">
801
+ <h2>Content Information</h2>
802
+ <dl>
803
+ <xsl:if test="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription">
804
+ <dt>Feature Catalog Description</dt>
805
+ <dd>
806
+ <dl>
807
+ <dt>Compliance Code</dt>
808
+ <dd>
809
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:complianceCode"/>
810
+ </dd>
811
+ <dt>Language</dt>
812
+ <dd>
813
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:language"/>
814
+ </dd>
815
+ <dt>Included With Dataset</dt>
816
+ <dd>
817
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:includedWithDataset"/>
818
+ </dd>
819
+ <dt>Feature Catalog Citation</dt>
820
+ <dd>
821
+ <dl>
822
+ <dt>Title</dt>
823
+ <dd>
824
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:title"/>
825
+ </dd>
826
+ <xsl:for-each select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:date/gmd:CI_Date">
827
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'publication')">
828
+ <dt>Publication Date</dt>
829
+ <dd>
830
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
831
+ </dd>
832
+ </xsl:if>
833
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'creation')">
834
+ <dt>Creation Date</dt>
835
+ <dd>
836
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
837
+ </dd>
838
+ </xsl:if>
839
+ <xsl:if test="contains(gmd:dateType/gmd:CI_DateTypeCode/@codeListValue,'revision')">
840
+ <dt>Revision Date</dt>
841
+ <dd>
842
+ <xsl:value-of select="ancestor-or-self::*/gmd:date/gmd:CI_Date/gmd:date"/>
843
+ </dd>
844
+ </xsl:if>
845
+ </xsl:for-each>
846
+ <dt>Feature Catalog Identifier</dt>
847
+ <dd>
848
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_FeatureCatalogueDescription/gmd:featureCatalogueCitation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code"/>
849
+ </dd>
850
+ </dl>
851
+ </dd>
852
+ </dl>
853
+ </dd>
854
+ </xsl:if>
855
+ <xsl:if test="gmd:contentInfo/gmd:MD_ImageDescription">
856
+ <dt>Content Type</dt>
857
+ <dd>
858
+ <xsl:value-of select="gmd:contentInfo/gmd:MD_ImageDescription/gmd:contentType/gmd:MD_CoverageContentTypeCode[@codeListValue]"/>
859
+ </dd>
860
+ </xsl:if>
861
+ </dl>
862
+ </div>
863
+ </xsl:if>
864
+ <!-- Spatial Representation -->
865
+ <xsl:if test="gmd:spatialRepresentationInfo">
866
+ <div id="iso-spatial-representation-info">
867
+ <h2>Spatial Representation Information</h2>
868
+ <dl>
869
+ <xsl:choose>
870
+ <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation">
871
+ <dt>Vector</dt>
872
+ <dd>
873
+ <dl>
874
+ <dt>Topology Level</dt>
875
+ <dd>
876
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:topologyLevel/gmd:MD_TopologyLevelCode[@codeListValue]"/>
877
+ </dd>
878
+ <dt>Vector Object Type</dt>
879
+ <dd>
880
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:geometricObjects/gmd:MD_GeometricObjects/gmd:geometricObjectType/gmd:MD_GeometricObjectTypeCode[@codeListValue]"/>
881
+ </dd>
882
+ <dt>Vector Object Count</dt>
883
+ <dd>
884
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_VectorSpatialRepresentation/gmd:geometricObjects/gmd:MD_GeometricObjects/gmd:geometricObjectCount"/>
885
+ </dd>
886
+ </dl>
887
+ </dd>
888
+ </xsl:when>
889
+ <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation">
890
+ <dt>Raster</dt>
891
+ <dd>
892
+ <dl>
893
+ <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation/gmd:numberOfDimensions">
894
+ <dt>Number of Dimensions</dt>
895
+ <dd>
896
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_GridSpatialRepresentation/gmd:numberOfDimensions"/>
897
+ </dd>
898
+ </xsl:if>
899
+ <dd>
900
+ <dl>
901
+ <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:axisDimensionProperties/gmd:MD_Dimension">
902
+ <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='column'">
903
+ <dt>Column Count</dt>
904
+ <dd>
905
+ <xsl:value-of select="gmd:dimensionSize"/>
906
+ </dd>
907
+ </xsl:if>
908
+ <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='row'">
909
+ <dt>Row Count</dt>
910
+ <dd>
911
+ <xsl:value-of select="gmd:dimensionSize"/>
912
+ </dd>
913
+ </xsl:if>
914
+ </xsl:for-each>
915
+ <xsl:if test="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cellGeometry/gmd:MD_CellGeometryCode">
916
+ <dt>Cell Geometry Type</dt>
917
+ <dd>
918
+ <xsl:value-of select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cellGeometry/gmd:MD_CellGeometryCode/@codeListValue"/>
919
+ </dd>
920
+ </xsl:if>
921
+ <xsl:if test="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cornerPoints">
922
+ <dt>Corner Points</dt>
923
+ <dd>
924
+ <dl>
925
+ <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:cornerPoints/gml:Point">
926
+ <dt>Point</dt>
927
+ <dd>
928
+ <xsl:value-of select="gml:pos"/>
929
+ </dd>
930
+ </xsl:for-each>
931
+ </dl>
932
+ </dd>
933
+ <xsl:for-each select="gmd:spatialRepresentationInfo/MD_GridSpatialRepresentation/gmd:centerPoint/gml:Point">
934
+ <dt>Center Point</dt>
935
+ <dd>
936
+ <xsl:value-of select="gml:pos"/>
937
+ </dd>
938
+ </xsl:for-each>
939
+ </xsl:if>
940
+ </dl>
941
+ </dd>
942
+ </dl>
943
+ </dd>
944
+ </xsl:when>
945
+ <xsl:when test="gmd:spatialRepresentationInfo/gmd:MD_Georectified">
946
+ <dt>Raster</dt>
947
+ <dd>
948
+ <dl>
949
+ <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:numberOfDimensions">
950
+ <dt>Number of Dimensions</dt>
951
+ <dd>
952
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:numberOfDimensions"/>
953
+ </dd>
954
+ </xsl:if>
955
+ <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:axisDimensionProperties/gmd:MD_Dimension">
956
+ <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='column'">
957
+ <dt>Column Count</dt>
958
+ <dd>
959
+ <xsl:value-of select="gmd:dimensionSize"/>
960
+ </dd>
961
+ </xsl:if>
962
+ <xsl:if test="gmd:dimensionName/gmd:MD_DimensionNameTypeCode/@codeListValue='row'">
963
+ <dt>Row Count</dt>
964
+ <dd>
965
+ <xsl:value-of select="gmd:dimensionSize"/>
966
+ </dd>
967
+ </xsl:if>
968
+ </xsl:for-each>
969
+ <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cellGeometry/gmd:MD_CellGeometryCode">
970
+ <dt>Cell Geometry Type</dt>
971
+ <dd>
972
+ <xsl:value-of select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cellGeometry/gmd:MD_CellGeometryCode/@codeListValue"/>
973
+ </dd>
974
+ </xsl:if>
975
+ <xsl:if test="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cornerPoints">
976
+ <dt>Corner Points</dt>
977
+ <dd>
978
+ <dl>
979
+ <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:cornerPoints/gml:Point">
980
+ <dt>Point</dt>
981
+ <dd>
982
+ <xsl:value-of select="gml:pos"/>
983
+ </dd>
984
+ </xsl:for-each>
985
+ </dl>
986
+ </dd>
987
+ <xsl:for-each select="gmd:spatialRepresentationInfo/gmd:MD_Georectified/gmd:centerPoint/gml:Point">
988
+ <dt>Center Point</dt>
989
+ <dd>
990
+ <xsl:value-of select="gml:pos"/>
991
+ </dd>
992
+ </xsl:for-each>
993
+ </xsl:if>
994
+ </dl>
995
+ </dd>
996
+ </xsl:when>
997
+ </xsl:choose>
998
+ </dl>
999
+ </div>
1000
+ </xsl:if>
1001
+ <!-- Metadata Reference Info -->
1002
+ <div id="iso-metadata-reference-info">
1003
+ <h2>Metadata Reference Information</h2>
1004
+ <dl>
1005
+ <dt>Hierarchy Level</dt>
1006
+ <dd>
1007
+ <xsl:value-of select="gmd:hierarchyLevelName"/>
1008
+ </dd>
1009
+ <dt>Metadata File Identifier</dt>
1010
+ <dd>
1011
+ <xsl:value-of select="gmd:fileIdentifier"/>
1012
+ </dd>
1013
+ <xsl:if test="gmd:parentIdentifier">
1014
+ <dt>Parent Identifier</dt>
1015
+ <dd>
1016
+ <xsl:value-of select="gmd:parentIdentifier"/>
1017
+ </dd>
1018
+ </xsl:if>
1019
+ <xsl:if test="gmd:dataSetURI">
1020
+ <dt>Dataset URI</dt>
1021
+ <dd>
1022
+ <xsl:value-of select="gmd:dataSetURI"/>
1023
+ </dd>
1024
+ </xsl:if>
1025
+ <xsl:for-each select="gmd:metadataMaintenance/gmd:MD_MaintenanceInformation/gmd:contact">
1026
+ <dt>Metadata Point of Contact</dt>
1027
+ <dd>
1028
+ <dl>
1029
+ <xsl:for-each select="gmd:CI_ResponsibleParty">
1030
+ <dt>Name</dt>
1031
+ <dd>
1032
+ <xsl:value-of select="gmd:organisationName | gmd:individualName"/>
1033
+ </dd>
1034
+ <xsl:if test="gmd:positionName">
1035
+ <dt>Position Name</dt>
1036
+ <dd>
1037
+ <xsl:value-of select="gmd:positionName"/>
1038
+ </dd>
1039
+ </xsl:if>
1040
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint">
1041
+ <dt>Delivery Point</dt>
1042
+ <dd>
1043
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/>
1044
+ </dd>
1045
+ </xsl:if>
1046
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city">
1047
+ <dt>City</dt>
1048
+ <dd>
1049
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/>
1050
+ </dd>
1051
+ </xsl:if>
1052
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea">
1053
+ <dt>Administrative Area</dt>
1054
+ <dd>
1055
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea"/>
1056
+ </dd>
1057
+ </xsl:if>
1058
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode">
1059
+ <dt>Postal Code</dt>
1060
+ <dd>
1061
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode"/>
1062
+ </dd>
1063
+ </xsl:if>
1064
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country">
1065
+ <dt>Country</dt>
1066
+ <dd>
1067
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/>
1068
+ </dd>
1069
+ </xsl:if>
1070
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress">
1071
+ <dt>Email</dt>
1072
+ <dd>
1073
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"/>
1074
+ </dd>
1075
+ </xsl:if>
1076
+ <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice">
1077
+ <dt>Phone</dt>
1078
+ <dd>
1079
+ <xsl:value-of select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"/>
1080
+ </dd>
1081
+ </xsl:if>
1082
+ </xsl:for-each>
1083
+ </dl>
1084
+ </dd>
1085
+ </xsl:for-each>
1086
+ <dt>Metadata Date Stamp</dt>
1087
+ <dd>
1088
+ <xsl:value-of select="gmd:dateStamp"/>
1089
+ </dd>
1090
+ <dt>Metadata Standard Name</dt>
1091
+ <dd>
1092
+ <xsl:value-of select="gmd:metadataStandardName"/>
1093
+ </dd>
1094
+ <dt>Metadata Standard Version</dt>
1095
+ <dd>
1096
+ <xsl:value-of select="gmd:metadataStandardVersion"/>
1097
+ </dd>
1098
+ <xsl:if test="gmd:characterSet/gmd:MD_CharacterSetCode[@codeListValue]/text()">
1099
+ <dt>Character Set</dt>
1100
+ <dd>
1101
+ <xsl:value-of select="gmd:characterSet/gmd:MD_CharacterSetCode[@codeListValue]"/>
1102
+ </dd>
1103
+ </xsl:if>
1104
+ </dl>
1105
+ </div>
1106
+ </xsl:template>
1107
+ </xsl:stylesheet>