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.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/adiwg-mdtranslator.gemspec +2 -2
- data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dataQuality.rb +27 -37
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +8 -0
- data/lib/adiwg/mdtranslator/version.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_dataQuality.rb +133 -185
- data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_enumerationList.rb +52 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_extension.rb +208 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_mdMetadata.rb +27 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_timePeriod.rb +2 -6
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +1 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_allocation.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_citation.rb +8 -8
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_dataQualityReport.rb +3 -3
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_geographicExtent.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_lineage.rb +4 -4
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_maintenance.rb +4 -4
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_medium.rb +2 -2
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_metadataInfo.rb +4 -4
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_releasability.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_resourceInfo.rb +5 -5
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_responsibility.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_spatialRepresentation.rb +4 -4
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_taxonomy.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timeInstant.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timePeriod.rb +5 -5
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_transferOption.rb +2 -2
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_usage.rb +5 -5
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_vectorRepresentation.rb +2 -2
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2ba5668ad4fe2f02ab4d3037af3a9086da9a45f782fb8934399bbdd76136532
|
4
|
+
data.tar.gz: 86c08b50c1b15abe74e32afd7dc6f5b59397204858fb928463fca97939575c4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
5
|
-
adiwg-mdcodes (= 2.10.
|
6
|
-
adiwg-mdjson_schemas (= 2.
|
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.
|
38
|
+
adiwg-mdcodes (2.10.1)
|
39
39
|
json (~> 2.0)
|
40
|
-
adiwg-mdjson_schemas (2.
|
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)
|
data/adiwg-mdtranslator.gemspec
CHANGED
@@ -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.
|
38
|
-
spec.add_runtime_dependency "adiwg-mdcodes", "2.10.
|
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
|
-
|
60
|
-
|
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
|
-
#
|
106
|
+
# Combine Horizontal Positional Accuracy Report and Explanation
|
107
|
+
descriptive_result_text = ''
|
105
108
|
xHorizontalAccuracyReport = xHorizontalAccuracy.xpath('./horizpar')
|
106
109
|
unless xHorizontalAccuracyReport.empty?
|
107
|
-
|
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
|
-
|
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
|
-
|
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
|
-
#
|
136
|
+
# Combine Vertical Positional Accuracy Report and Explanation
|
137
|
+
descriptive_result_text = ''
|
141
138
|
xVerticalAccuracyReport = xVerticalAccuracy.xpath('./vertaccr')
|
142
139
|
unless xVerticalAccuracyReport.empty?
|
143
|
-
|
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
|
-
|
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
|
-
|
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']
|
@@ -8,194 +8,142 @@
|
|
8
8
|
require_relative 'class_lineage'
|
9
9
|
|
10
10
|
module ADIWG
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
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
|
-
|
191
|
-
|
192
|
-
|
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
|
-
|
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[:
|
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
|