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.
- 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: ba2ee5421220695d7a92cabc649801ce6e8f045dbd8bbfa0ee5a740728b3bbf7
|
4
|
+
data.tar.gz: 4d1d59bb9d77ab17ebc44b0c9027731191ab6e206160d1ca3bc0c49b891fd112
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
5
|
-
adiwg-mdcodes (= 2.10.
|
6
|
-
adiwg-mdjson_schemas (= 2.9.
|
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.
|
38
|
+
adiwg-mdcodes (2.10.1)
|
39
39
|
json (~> 2.0)
|
40
|
-
adiwg-mdjson_schemas (2.9.
|
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)
|
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.9.
|
38
|
-
spec.add_runtime_dependency "adiwg-mdcodes", "2.10.
|
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
|
-
|
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
|