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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: ba2ee5421220695d7a92cabc649801ce6e8f045dbd8bbfa0ee5a740728b3bbf7
4
+ data.tar.gz: 4d1d59bb9d77ab17ebc44b0c9027731191ab6e206160d1ca3bc0c49b891fd112
5
5
  SHA512:
6
- metadata.gz: d297c28d28dc4f19840b476ba86fb6e89b36d106019a20f7ceedd58b9f36f27e8006eb8c49dcc0de935b060557e25466f7d3deeef8f3de6d05bc7ea981f189d0
7
- data.tar.gz: 8093a1f20c10929bb69aa9635a6b7f1e2532300f8db5f6761e025651fde5a0ea1ca9b89d8e2111eb8d5da1b98db995f6ca66e50e49fbbfc95ec3d6cfd72027e5
6
+ metadata.gz: 4f086f201b9845b35c5e4d4edd2bd4bb19c76841df0b0ddb049f9c47d49c10e57c4c8af7dd24aca6a531ebdb6a2adccccdb78ed20eeeb63292bb70ae880e8e64
7
+ data.tar.gz: 9dc353b3095a5bd31dbe0dd00ded7f94a879204f1bdf93daf03f188060924466cd88d2bdee5c2bcf5418360d149e2e12259cc4003a7f38180f579043c76e34ab
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.7)
5
+ adiwg-mdcodes (= 2.10.1)
6
+ adiwg-mdjson_schemas (= 2.9.6)
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.9.6)
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.9.6"
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.8"
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