adiwg-mdtranslator 2.20.0.pre.beta.5 → 2.20.0.pre.beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +5 -5
  3. data/adiwg-mdtranslator.gemspec +2 -2
  4. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dataQuality.rb +27 -37
  5. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +8 -0
  6. data/lib/adiwg/mdtranslator/version.rb +1 -1
  7. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_dataQuality.rb +133 -185
  8. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +1 -1
  9. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_enumerationList.rb +52 -0
  10. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_extension.rb +208 -0
  11. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_mdMetadata.rb +27 -0
  12. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_timePeriod.rb +2 -6
  13. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +1 -0
  14. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_allocation.rb +1 -1
  15. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_citation.rb +8 -8
  16. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_dataQualityReport.rb +3 -3
  17. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_geographicExtent.rb +1 -1
  18. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_lineage.rb +4 -4
  19. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_maintenance.rb +4 -4
  20. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_medium.rb +2 -2
  21. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_metadataInfo.rb +4 -4
  22. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_releasability.rb +1 -1
  23. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_resourceInfo.rb +5 -5
  24. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_responsibility.rb +1 -1
  25. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_spatialRepresentation.rb +4 -4
  26. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_taxonomy.rb +1 -1
  27. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timeInstant.rb +1 -1
  28. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timePeriod.rb +5 -5
  29. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_transferOption.rb +2 -2
  30. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_usage.rb +5 -5
  31. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_vectorRepresentation.rb +2 -2
  32. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8d8a5f731fb5ada7138ee650206ed3a6f81d36ffcbbb52fece5f13befb9bcce
4
- data.tar.gz: a2023846f039cdfe3dde6f851f13ad463afd36644e9a5a460c2d6416e644c450
3
+ metadata.gz: d2ba5668ad4fe2f02ab4d3037af3a9086da9a45f782fb8934399bbdd76136532
4
+ data.tar.gz: 86c08b50c1b15abe74e32afd7dc6f5b59397204858fb928463fca97939575c4c
5
5
  SHA512:
6
- metadata.gz: d297c28d28dc4f19840b476ba86fb6e89b36d106019a20f7ceedd58b9f36f27e8006eb8c49dcc0de935b060557e25466f7d3deeef8f3de6d05bc7ea981f189d0
7
- data.tar.gz: 8093a1f20c10929bb69aa9635a6b7f1e2532300f8db5f6761e025651fde5a0ea1ca9b89d8e2111eb8d5da1b98db995f6ca66e50e49fbbfc95ec3d6cfd72027e5
6
+ metadata.gz: d1f3e42c661cefcfe6dbe7d455b2242c63e231ae94f3b6aef6e1f62cbdd1d3be01d030b5bd14a01f1671bd9cfda59f70fcb97ee23d202eca733383df538d1c13
7
+ data.tar.gz: b5629533fe4da69411c9bfc36c5cda159b8dee6686785109e86afc38c3dd3324cc84555675741658ac1d47aa99e1e5ef6c24739bcfeb20b8ee5c67a595408dca
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- adiwg-mdtranslator (2.20.0.pre.beta.0)
5
- adiwg-mdcodes (= 2.10.0)
6
- adiwg-mdjson_schemas (= 2.9.5)
4
+ adiwg-mdtranslator (2.20.0.pre.beta.6)
5
+ adiwg-mdcodes (= 2.10.1)
6
+ adiwg-mdjson_schemas (= 2.10.1)
7
7
  builder (~> 3.2)
8
8
  coderay (~> 1.1)
9
9
  jbuilder (~> 2.5)
@@ -35,9 +35,9 @@ GEM
35
35
  tzinfo (~> 2.0)
36
36
  addressable (2.8.6)
37
37
  public_suffix (>= 2.0.2, < 6.0)
38
- adiwg-mdcodes (2.10.0)
38
+ adiwg-mdcodes (2.10.1)
39
39
  json (~> 2.0)
40
- adiwg-mdjson_schemas (2.9.5)
40
+ adiwg-mdjson_schemas (2.10.1)
41
41
  base64 (0.2.0)
42
42
  bigdecimal (3.1.8)
43
43
  builder (3.2.4)
@@ -34,8 +34,8 @@ Gem::Specification.new do |spec|
34
34
  spec.add_runtime_dependency "thor", "~> 0.19"
35
35
  spec.add_runtime_dependency "uuidtools", "~> 2.1"
36
36
  spec.add_runtime_dependency "json-schema", "~> 2.7"
37
- spec.add_runtime_dependency "adiwg-mdjson_schemas", "2.9.5"
38
- spec.add_runtime_dependency "adiwg-mdcodes", "2.10.0"
37
+ spec.add_runtime_dependency "adiwg-mdjson_schemas", "2.10.1"
38
+ spec.add_runtime_dependency "adiwg-mdcodes", "2.10.1"
39
39
  spec.add_runtime_dependency "jbuilder", "~> 2.5"
40
40
  spec.add_runtime_dependency "kramdown", ">= 1.13", "< 3.0"
41
41
  spec.add_runtime_dependency "coderay", "~> 1.1"
@@ -56,8 +56,10 @@ module ADIWG
56
56
  # data quality 2.1.2.2 (attracce) - Attribute Accuracy Explanation
57
57
  xEvaluationMethod = xQuantitativeAccuracy.xpath('./attracce')
58
58
  unless xEvaluationMethod.empty?
59
- report[:evaluationMethod] = intMetadataClass.newEvaluationMethod
60
- report[:evaluationMethod][:methodDescription] = xEvaluationMethod.text
59
+ evaluationMethod = intMetadataClass.newEvaluationMethod
60
+ evaluationMethod[:name] = 'Attribute Accuracy Explanation'
61
+ evaluationMethod[:methodDescription] = xEvaluationMethod.text
62
+ report[:evaluationMethod] << evaluationMethod
61
63
  end
62
64
  hDataQuality[:report] << report unless report[:quantitativeResult].empty? && report[:evaluationMethod].empty?
63
65
  end
@@ -101,35 +103,29 @@ module ADIWG
101
103
  unless xHorizontalAccuracy.empty?
102
104
  report = intMetadataClass.newDataQualityReport
103
105
  report[:type] = 'DQ_AbsoluteExternalPositionalAccuracy'
104
- # data quality 2.4.1.1 (horizpar) - Horizontal Positional Accuracy Report
106
+ # Combine Horizontal Positional Accuracy Report and Explanation
107
+ descriptive_result_text = ''
105
108
  xHorizontalAccuracyReport = xHorizontalAccuracy.xpath('./horizpar')
106
109
  unless xHorizontalAccuracyReport.empty?
107
- descriptiveResult = intMetadataClass.newDescriptiveResult
108
- descriptiveResult[:name] = 'Horizontal Positional Accuracy Report'
109
- descriptiveResult[:statement] = xHorizontalAccuracyReport.text
110
- report[:descriptiveResult] << descriptiveResult
110
+ descriptive_result_text += xHorizontalAccuracyReport.text
111
111
  end
112
- # data quality 2.4.1.2 (qhorizpa) - Quantitative Horizontal Positional Accuracy Assessment
113
112
  xQuantitativeHorizontalAccuracy = xHorizontalAccuracy.xpath('./qhorizpa')
114
113
  unless xQuantitativeHorizontalAccuracy.empty?
115
- # data quality 2.4.1.2.1 (horizpav) - Horizontal Positional Accuracy Value
116
114
  xHorizontalAccuracyValue = xQuantitativeHorizontalAccuracy.xpath('horizpav')
117
115
  unless xHorizontalAccuracyValue.empty?
118
- quantitativeResult = intMetadataClass.newQuantitativeResult
119
- value = xHorizontalAccuracyValue.text
120
- quantitativeResult[:name] = 'Horizontal Positional Accuracy Value'
121
- quantitativeResult[:values] << value
122
- report[:quantitativeResult] << quantitativeResult
116
+ descriptive_result_text += " Value: #{xHorizontalAccuracyValue.text}"
123
117
  end
124
- # data quality 2.4.1.2.2 (horizpae) - Horizontal Positional Accuracy Explanation
125
118
  xHorizontalAccuracyExplanation = xQuantitativeHorizontalAccuracy.xpath('horizpae')
126
119
  unless xHorizontalAccuracyExplanation.empty?
127
- descriptiveResult = intMetadataClass.newDescriptiveResult
128
- descriptiveResult[:name] = 'Horizontal Positional Accuracy Explanation'
129
- descriptiveResult[:statement] = xHorizontalAccuracyExplanation.text
130
- report[:descriptiveResult] << descriptiveResult
120
+ descriptive_result_text += " Explanation: #{xHorizontalAccuracyExplanation.text}"
131
121
  end
132
122
  end
123
+ unless descriptive_result_text.empty?
124
+ descriptiveResult = intMetadataClass.newDescriptiveResult
125
+ descriptiveResult[:name] = 'Horizontal Positional Accuracy Report'
126
+ descriptiveResult[:statement] = descriptive_result_text
127
+ report[:descriptiveResult] << descriptiveResult
128
+ end
133
129
  hDataQuality[:report] << report
134
130
  end
135
131
  # data quality 2.4.2 (vertacc) - Vertical Positional Accuracy
@@ -137,35 +133,29 @@ module ADIWG
137
133
  unless xVerticalAccuracy.empty?
138
134
  report = intMetadataClass.newDataQualityReport
139
135
  report[:type] = 'DQ_AbsoluteExternalPositionalAccuracy'
140
- # data quality 2.4.2.1 (vertaccr) - Vertical Positional Accuracy Report
136
+ # Combine Vertical Positional Accuracy Report and Explanation
137
+ descriptive_result_text = ''
141
138
  xVerticalAccuracyReport = xVerticalAccuracy.xpath('./vertaccr')
142
139
  unless xVerticalAccuracyReport.empty?
143
- descriptiveResult = intMetadataClass.newDescriptiveResult
144
- descriptiveResult[:name] = 'Vertical Positional Accuracy Report'
145
- descriptiveResult[:statement] = xVerticalAccuracyReport.text
146
- report[:descriptiveResult] << descriptiveResult
140
+ descriptive_result_text += xVerticalAccuracyReport.text
147
141
  end
148
- # data quality 2.4.2.2 (qvertpa) - Quantitative Vertical Positional Accuracy Assessment
149
142
  xVerticalAccuracyAssessment = xVerticalAccuracy.xpath('./qvertpa')
150
143
  unless xVerticalAccuracyAssessment.empty?
151
- # data quality 2.4.2.2.1 (vertaccv) - Vertical Positional Accuracy Value
152
144
  xVerticalAccuracyValue = xVerticalAccuracyAssessment.xpath('vertaccv')
153
145
  unless xVerticalAccuracyValue.empty?
154
- quantitativeResult = intMetadataClass.newQuantitativeResult
155
- value = xVerticalAccuracyValue.text
156
- quantitativeResult[:name] = 'Vertical Positional Accuracy Value'
157
- quantitativeResult[:values] << value
158
- report[:quantitativeResult] << quantitativeResult
146
+ descriptive_result_text += " Value: #{xVerticalAccuracyValue.text}"
159
147
  end
160
- # data quality 2.4.2.2.2 (vertacce) - Vertical Positional Accuracy Explanation
161
148
  xVerticalAccuracyExplanation = xVerticalAccuracyAssessment.xpath('vertacce')
162
149
  unless xVerticalAccuracyExplanation.empty?
163
- descriptiveResult = intMetadataClass.newDescriptiveResult
164
- descriptiveResult[:name] = 'Vertical Positional Accuracy Explanation'
165
- descriptiveResult[:statement] = xVerticalAccuracyExplanation.text
166
- report[:descriptiveResult] << descriptiveResult
150
+ descriptive_result_text += " Explanation: #{xVerticalAccuracyExplanation.text}"
167
151
  end
168
152
  end
153
+ unless descriptive_result_text.empty?
154
+ descriptiveResult = intMetadataClass.newDescriptiveResult
155
+ descriptiveResult[:name] = 'Vertical Positional Accuracy Report'
156
+ descriptiveResult[:statement] = descriptive_result_text
157
+ report[:descriptiveResult] << descriptiveResult
158
+ end
169
159
  hDataQuality[:report] << report
170
160
  end
171
161
  end
@@ -190,4 +180,4 @@ module ADIWG
190
180
  end
191
181
  end
192
182
  end
193
- end
183
+ end
@@ -38,6 +38,14 @@ module ADIWG
38
38
  intMetadataClass = InternalMetadata.new
39
39
  intDictionary = intMetadataClass.newDataDictionary
40
40
 
41
+ # dictionary - id
42
+ if hDictionary.has_key?('dictionaryId')
43
+ s = hDictionary['dictionaryId']
44
+ if s != ''
45
+ intDictionary[:dictionaryId] = s
46
+ end
47
+ end
48
+
41
49
  # dictionary - description
42
50
  if hDictionary.has_key?('description')
43
51
  s = hDictionary['description']
@@ -109,7 +109,7 @@
109
109
  module ADIWG
110
110
  module Mdtranslator
111
111
  # current mdtranslator version
112
- VERSION = "2.20.0-beta.5"
112
+ VERSION = "2.20.0-beta.7"
113
113
  end
114
114
  end
115
115
 
@@ -8,194 +8,142 @@
8
8
  require_relative 'class_lineage'
9
9
 
10
10
  module ADIWG
11
- module Mdtranslator
12
- module Writers
13
- module Fgdc
14
-
15
- class DataQuality
16
-
17
- def initialize(xml, hResponseObj)
18
- @xml = xml
19
- @hResponseObj = hResponseObj
20
- @NameSpace = ADIWG::Mdtranslator::Writers::Fgdc
21
- end
22
-
23
- def writeXML(intObj)
24
-
25
- # classes used
26
- lineageClass = Lineage.new(@xml, @hResponseObj)
27
-
28
- hDataQuality = intObj.dig(:metadata, :dataQuality, 0)
29
-
30
- if hDataQuality && hDataQuality[:report]
31
- # data quality 2.1 (attracc) - Attribute Accuracy
32
- attribute_accuracy_report = hDataQuality[:report].find do |report|
33
- report[:type] == 'DQ_NonQuantitativeAttributeCorrectness' &&
34
- !report.dig(:descriptiveResult, 0, :statement).nil?
35
- end
36
- attribute_accuracy_value = hDataQuality[:report].find do |report|
37
- report[:type] == 'DQ_QuantitativeAttributeAccuracy' &&
38
- !report.dig(:quantitativeResult, 0, :values).nil?
39
- end
40
- attribute_evaluation_method = hDataQuality[:report].find do |report|
41
- report[:type] == 'DQ_QuantitativeAttributeAccuracy' &&
42
- !report.dig(:evaluationMethod, :methodDescription).nil?
43
- end
44
- if attribute_accuracy_report || attribute_accuracy_value || attribute_evaluation_method
45
- # data quality 2.1 (attracc) - Attribute Accuracy
46
- @xml.tag!('attracc') do
47
- if attribute_accuracy_report
48
- # data quality 2.1.1 (attraccr) - Attribute Accuracy Report
49
- @xml.tag!('attraccr', attribute_accuracy_report[:descriptiveResult][0][:statement])
50
- end
51
- if attribute_accuracy_value || attribute_evaluation_method
52
- # data quality 2.1.2 (qattracc) - Quantitative Attribute Accuracy Assessment
53
- @xml.tag!('qattracc') do
54
- if attribute_accuracy_value
55
- # data quality 2.1.2.1 (attraccv) - Attribute Accuracy Value
56
- @xml.tag!('attraccv', attribute_accuracy_value[:quantitativeResult][0][:values][0])
57
- end
58
- if attribute_evaluation_method
59
- # data quality 2.1.2.2 (attracce) - Attribute Accuracy Explanation
60
- @xml.tag!('attracce', attribute_evaluation_method[:evaluationMethod][:methodDescription])
61
- end
62
- end
63
- end
64
- end
65
- elsif @hResponseObj[:writerShowTags]
66
- @xml.tag!('attracc', 'Not Reported')
67
- end
68
-
69
- # data quality 2.2 (logic) - logical consistency (required)
70
- logic_report = hDataQuality[:report].find do |report|
71
- report[:type] == 'DQ_ConceptualConsistency' &&
72
- !report.dig(:descriptiveResult, 0, :statement).nil?
73
- end
74
- if logic = logic_report&.dig(:descriptiveResult, 0, :statement)
75
- @xml.tag!('logic', logic)
76
- else
77
- @xml.tag!('logic', 'Not Reported')
78
- end
79
-
80
- # data quality 2.3 (complete) - completion report (required)
81
- omission_report = hDataQuality[:report].find do |report|
82
- report[:type] == 'DQ_CompletenessOmission' &&
83
- !report.dig(:descriptiveResult, 0, :statement).nil?
84
- end
85
- omission = omission_report&.dig(:descriptiveResult, 0, :statement)
86
- commission_report = hDataQuality[:report].find do |report|
87
- report[:type] == 'DQ_CompletenessCommission' &&
88
- !report.dig(:descriptiveResult, 0, :statement).nil?
89
- end
90
- commission = commission_report&.dig(:descriptiveResult, 0, :statement)
91
- complete = ''
92
- if omission
93
- complete = omission
94
- end
95
- if commission
96
- if complete != ''
97
- complete = complete + ' ' + commission
98
- else
99
- complete = commission
100
- end
101
- end
102
- if complete != ''
103
- @xml.tag!('complete', complete)
104
- else
105
- @xml.tag!('complete', 'Not Reported')
106
- end
107
-
108
- # data quality 2.4 (position) - Positional Accuracy
109
-
110
- # data quality 2.4.1 (horizpa) - Horizontal Positional Accuracy
111
- horizontal_positional_accuracy_report = hDataQuality[:report].find do |report|
112
- report[:type] == 'DQ_AbsoluteExternalPositionalAccuracy' &&
113
- report.dig(:descriptiveResult, 0, :name) == 'Horizontal Positional Accuracy Report' &&
114
- !report.dig(:descriptiveResult, 0, :statement).nil?
115
- end
116
- horizpar = horizontal_positional_accuracy_report&.dig(:descriptiveResult, 0, :statement)
117
- horizpav = horizontal_positional_accuracy_report&.dig(:quantitativeResult, 0, :values, 0)
118
- horizpae = horizontal_positional_accuracy_report&.dig(:descriptiveResult, 1, :statement)
119
-
120
- # data quality 2.4.2 (vertacc) - Vertical Positional Accuracy
121
- vertical_positional_accuracy_report = hDataQuality[:report].find do |report|
122
- report[:type] == 'DQ_AbsoluteExternalPositionalAccuracy' &&
123
- report.dig(:descriptiveResult, 0, :name) == 'Vertical Positional Accuracy Report' &&
124
- !report.dig(:descriptiveResult, 0, :statement).nil?
125
- end
126
- vertaccr = vertical_positional_accuracy_report&.dig(:descriptiveResult, 0, :statement)
127
- vertaccv = vertical_positional_accuracy_report&.dig(:quantitativeResult, 0, :values, 0)
128
- vertacce = vertical_positional_accuracy_report&.dig(:descriptiveResult, 1, :statement)
129
-
130
- if horizpar || vertaccr
131
- # data quality 2.4 (posacc) - Positional Accuracy
132
- @xml.tag!('posacc') do
133
- if horizpar
134
- # data quality 2.4.1 (horizpa) - Horizontal Positional Accuracy
135
- @xml.tag!('horizpa') do
136
- # data quality 2.4.1.1 (horizpar) - Horizontal Positional Accuracy Report
137
- @xml.tag!('horizpar', horizpar)
138
- if horizpav || horizpae
139
- # data quality 2.4.1.2 (qhorizpa) - Quantitative Horizontal Positional Accuracy
140
- @xml.tag!('qhorizpa') do
141
- if horizpav
142
- # data quality 2.4.1.2.1 (horizpav) - Horizontal Positional Accuracy Value
143
- @xml.tag!('horizpav', horizpav)
144
- end
145
- if horizpae
146
- # data quality 2.4.1.2.2 (horizpae) - Horizontal Positional Accuracy Explanation
147
- @xml.tag!('horizpae', horizpae)
148
- end
149
- end
150
- end
151
- end
152
- end
153
-
154
- if vertaccr
155
- # data quality 2.4.2 (vertacc) - Vertical Positional Accuracy
156
- @xml.tag!('vertacc') do
157
- # data quality 2.4.2.1 (vertaccr) - Vertical Positional Accuracy Report
158
- @xml.tag!('vertaccr', vertaccr)
159
- if vertaccv || vertacce
160
- # data quality 2.4.2.2 (qvertpa) - Quantitative Vertical Positional Accuracy
161
- @xml.tag!('qvertpa') do
162
- if vertaccv
163
- # data quality 2.4.2.2.1 (vertaccv) - Vertical Positional Accuracy Value
164
- @xml.tag!('vertaccv', vertaccv)
165
- end
166
- if vertacce
167
- # data quality 2.4.2.2.2 (vertacce) - Vertical Positional Accuracy Explanation
168
- @xml.tag!('vertacce', vertacce)
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end
175
- elsif @hResponseObj[:writerShowTags]
176
- @xml.tag!('position', 'Not Reported')
177
- end
11
+ module Mdtranslator
12
+ module Writers
13
+ module Fgdc
14
+
15
+ class DataQuality
16
+
17
+ def initialize(xml, hResponseObj)
18
+ @xml = xml
19
+ @hResponseObj = hResponseObj
20
+ @NameSpace = ADIWG::Mdtranslator::Writers::Fgdc
21
+ end
22
+
23
+ def writeXML(intObj)
24
+
25
+ # classes used
26
+ lineageClass = Lineage.new(@xml, @hResponseObj)
27
+
28
+ hDataQuality = intObj.dig(:metadata, :dataQuality, 0)
29
+
30
+ if hDataQuality && hDataQuality[:report]
31
+ # data quality 2.1 (attracc) - Attribute Accuracy
32
+ attribute_accuracy_report_text = hDataQuality[:report].select do |report|
33
+ [
34
+ 'DQ_NonQuantitativeAttributeCorrectness',
35
+ 'DQ_ThematicClassificationCorrectness'
36
+ ].include?(report[:type]) && !report.dig(:descriptiveResult, 0, :statement).nil?
37
+ end.map { |report| report.dig(:descriptiveResult, 0, :statement) }.compact.join(' ')
38
+
39
+ quantitative_attribute_accuracy = hDataQuality[:report].find { |report| report[:type] == 'DQ_QuantitativeAttributeAccuracy' }
40
+ attribute_accuracy_value = quantitative_attribute_accuracy.dig(:quantitativeResult, 0, :values, 0) if quantitative_attribute_accuracy
41
+ attribute_evaluation_method = quantitative_attribute_accuracy.dig(:evaluationMethod, :methodDescription) if quantitative_attribute_accuracy
42
+
43
+ if attribute_accuracy_report_text != '' || attribute_accuracy_value || attribute_evaluation_method
44
+ @xml.tag!('attracc') do
45
+ @xml.tag!('attraccr', attribute_accuracy_report_text) unless attribute_accuracy_report_text.empty?
46
+ if attribute_accuracy_value || attribute_evaluation_method
47
+ @xml.tag!('qattracc') do
48
+ @xml.tag!('attraccv', attribute_accuracy_value) if attribute_accuracy_value
49
+ @xml.tag!('attracce', attribute_evaluation_method) if attribute_evaluation_method
50
+ end
178
51
  end
179
-
180
- # data quality 2.5 (lineage) - lineage (required)
181
- unless intObj[:metadata][:lineageInfo].empty?
182
- @xml.tag!('lineage') do
183
- lineageClass.writeXML(intObj[:metadata][:lineageInfo])
184
- end
185
- end
186
- if intObj[:metadata][:lineageInfo].empty?
187
- @NameSpace.issueWarning(350, nil, 'data quality section')
52
+ end
53
+ elsif @hResponseObj[:writerShowTags]
54
+ @xml.tag!('attracc', 'Not Reported')
55
+ end
56
+
57
+ # data quality 2.2 (logic) - logical consistency (required)
58
+ logic_reports = hDataQuality[:report].select do |report|
59
+ [
60
+ 'DQ_ConceptualConsistency',
61
+ 'DQ_DomainConsistency',
62
+ 'DQ_FormatConsistency',
63
+ 'DQ_TopologicalConsistency'
64
+ ].include?(report[:type]) && !report.dig(:descriptiveResult, 0, :statement).nil?
65
+ end
66
+
67
+ logic = logic_reports.map { |report| report.dig(:descriptiveResult, 0, :statement) }.compact.join(' ')
68
+
69
+ if logic != ''
70
+ @xml.tag!('logic', logic)
71
+ else
72
+ @xml.tag!('logic', 'Not Reported')
73
+ end
74
+
75
+ # data quality 2.3 (complete) - completion report (required)
76
+ omission = hDataQuality[:report].find { |report| report[:type] == 'DQ_CompletenessOmission' }&.dig(:descriptiveResult, 0, :statement)
77
+ commission = hDataQuality[:report].find { |report| report[:type] == 'DQ_CompletenessCommission' }&.dig(:descriptiveResult, 0, :statement)
78
+ complete = [omission, commission].compact.join(' ')
79
+ if complete != ''
80
+ @xml.tag!('complete', complete)
81
+ else
82
+ @xml.tag!('complete', 'Not Reported')
83
+ end
84
+
85
+ # data quality 2.4 (posacc) - Positional Accuracy
86
+ reports = hDataQuality[:report].select do |report|
87
+ [
88
+ 'DQ_AbsoluteExternalPositionalAccuracy',
89
+ 'DQ_RelativeInternalPositionalAccuracy',
90
+ 'DQ_GriddedDataPositionalAccuracy'
91
+ ].include?(report[:type]) && !report.dig(:descriptiveResult, 0, :statement).nil?
92
+ end
93
+
94
+ horizpar = ''
95
+ vertaccr = ''
96
+
97
+ reports.each do |report|
98
+ descriptive_result = report.dig(:descriptiveResult, 0)
99
+ next unless descriptive_result
100
+
101
+ if descriptive_result[:name] == 'Vertical Positional Accuracy Report'
102
+ vertaccr = descriptive_result[:statement]
103
+ else
104
+ horizpar = descriptive_result[:statement]
105
+ end
106
+ end
107
+
108
+ if !horizpar.empty? || !vertaccr.empty?
109
+ @xml.tag!('posacc') do
110
+ if !horizpar.empty?
111
+ @xml.tag!('horizpa') do
112
+ @xml.tag!('horizpar', horizpar)
113
+ end
188
114
  end
189
115
 
190
- # data quality 2.6 (cloud) - cloud cover (not implemented)
191
- if @hResponseObj[:writerShowTags]
192
- @xml.tag!('cloud', 'Not Reported')
116
+ if !vertaccr.empty?
117
+ @xml.tag!('vertacc') do
118
+ @xml.tag!('vertaccr', vertaccr)
119
+ end
193
120
  end
121
+ end
122
+ elsif @hResponseObj[:writerShowTags]
123
+ @xml.tag!('position', 'Not Reported')
124
+ end
125
+
126
+ # data quality 2.5 (lineage) - lineage (required)
127
+ unless intObj[:metadata][:lineageInfo].empty?
128
+ @xml.tag!('lineage') do
129
+ lineageClass.writeXML(intObj[:metadata][:lineageInfo])
130
+ end
131
+ end
132
+ if intObj[:metadata][:lineageInfo].empty?
133
+ @NameSpace.issueWarning(350, nil, 'data quality section')
134
+ end
135
+
136
+ # data quality 2.6 (cloud) - cloud cover (not implemented)
137
+ if @hResponseObj[:writerShowTags]
138
+ @xml.tag!('cloud', 'Not Reported')
139
+ end
140
+
141
+ end # writeXML
142
+ end # DataQuality
143
+
144
+ end # Quality
194
145
 
195
- end # writeXML
196
- end # Quality
197
-
198
- end
199
146
  end
200
- end
201
- end
147
+ end
148
+ end
149
+ end
@@ -127,7 +127,7 @@ module ADIWG
127
127
 
128
128
  # altitude bounding (altmax) - maximum altitude (required)
129
129
  unless hBBox[:maximumAltitude].nil?
130
- @xml.tag!('altmax', hBBox[:minimumAltitude])
130
+ @xml.tag!('altmax', hBBox[:maximumAltitude])
131
131
  end
132
132
  if hBBox[:maximumAltitude].nil?
133
133
  @NameSpace.issueWarning(372, 'altmax')
@@ -0,0 +1,52 @@
1
+ # ISO <<CodeLists>> Enumerations
2
+ # 19115-2 writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2016-12-12 refactored for mdTranslator/mdJson 2.0
6
+ # Stan Smith 2015-07-14 refactored to eliminate namespace globals $WriterNS and $IsoNS
7
+ # Stan Smith 2015-07-14 refactored to make iso19110 independent of iso19115_2 classes
8
+ # Stan Smith 2015-06-22 replace global ($response) with passed in object (responseObj)
9
+ # Stan Smith 2015-06-12 refactored to use mdCodes gem for codelist contents
10
+ # Stan Smith 2014-12-15 replaced NOAA CT_CodelistCatalogue with mdTranslator CT_CodelistCatalogue
11
+ # Stan Smith 2014-12-12 refactored to handle namespacing readers and writers
12
+ # Stan Smith 2014-10-15 allow non-ISO codesNames to be rendered
13
+ # Stan Smith 2013-08-09 original script
14
+
15
+ require 'adiwg-mdcodes'
16
+
17
+ module ADIWG
18
+ module Mdtranslator
19
+ module Writers
20
+ module Iso19115_3
21
+
22
+ class MD_EnumerationList
23
+
24
+ def initialize(xml, responseObj)
25
+ @xml = xml
26
+ @hResponseObj = responseObj
27
+ end
28
+
29
+ def writeXML(codeList, codeName)
30
+
31
+ # get requested codelist from the adiwg-mdcodes gem
32
+ mdCodelist = ADIWG::Mdcodes.getCodelistDetail(codeList)
33
+
34
+ sourceName = mdCodelist['sourceName']
35
+ codelist = mdCodelist['codelist']
36
+
37
+ # search the codelist for a matching codeName
38
+ # only valid enumeration values can be written in ISO
39
+ codelist.each do |code|
40
+ if code['codeName'] == codeName
41
+ @xml.tag!('gmd:' + "#{sourceName}", codeName)
42
+ break
43
+ end
44
+ end
45
+
46
+ end # writeXML
47
+ end # MD_EnumerationList class
48
+
49
+ end
50
+ end
51
+ end
52
+ end