adiwg-mdtranslator 2.20.0.pre.beta.3 → 2.20.0.pre.beta.7
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 +12 -10
- data/adiwg-mdtranslator.gemspec +2 -2
- data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dataQuality.rb +92 -58
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_conformanceResult.rb +5 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_coverageResult.rb +4 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +8 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataQuality.rb +7 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_descriptiveResult.rb +4 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_quantitativeResult.rb +4 -0
- data/lib/adiwg/mdtranslator/version.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_dataQuality.rb +133 -115
- data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/html/sections/html_dataQuality.rb +17 -1
- data/lib/adiwg/mdtranslator/writers/html/sections/html_dataQualityReport.rb +28 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_dataIdentification.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_dataQualityReport.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_gcoDateTime.rb +10 -1
- 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_conformanceResult.rb +6 -5
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageResult.rb +1 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_descriptiveResult.rb +1 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +1 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_onlineResource.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_quantitativeResult.rb +6 -5
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceInfo.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_citation.rb +9 -26
- 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_dataQuality.rb +1 -1
- 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.
|
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)
|
@@ -17,13 +17,13 @@ PATH
|
|
17
17
|
GEM
|
18
18
|
remote: https://rubygems.org/
|
19
19
|
specs:
|
20
|
-
actionview (7.1.3.
|
21
|
-
activesupport (= 7.1.3.
|
20
|
+
actionview (7.1.3.3)
|
21
|
+
activesupport (= 7.1.3.3)
|
22
22
|
builder (~> 3.1)
|
23
23
|
erubi (~> 1.11)
|
24
24
|
rails-dom-testing (~> 2.2)
|
25
25
|
rails-html-sanitizer (~> 1.6)
|
26
|
-
activesupport (7.1.3.
|
26
|
+
activesupport (7.1.3.3)
|
27
27
|
base64
|
28
28
|
bigdecimal
|
29
29
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -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.
|
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)
|
@@ -67,7 +67,7 @@ GEM
|
|
67
67
|
nokogiri (1.15.6-x86_64-linux)
|
68
68
|
racc (~> 1.4)
|
69
69
|
public_suffix (5.0.5)
|
70
|
-
racc (1.
|
70
|
+
racc (1.8.0)
|
71
71
|
rails-dom-testing (2.2.0)
|
72
72
|
activesupport (>= 5.0.0)
|
73
73
|
minitest
|
@@ -76,7 +76,9 @@ GEM
|
|
76
76
|
loofah (~> 2.21)
|
77
77
|
nokogiri (~> 1.14)
|
78
78
|
rake (13.1.0)
|
79
|
-
rexml (3.2.
|
79
|
+
rexml (3.2.8)
|
80
|
+
strscan (>= 3.0.9)
|
81
|
+
strscan (3.1.0)
|
80
82
|
thor (0.20.3)
|
81
83
|
tzinfo (2.0.6)
|
82
84
|
concurrent-ruby (~> 1.0)
|
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.
|
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"
|
@@ -28,24 +28,41 @@ module ADIWG
|
|
28
28
|
|
29
29
|
# data quality 2.1 (attracc) - attribute accuracy
|
30
30
|
xAccuracy = xDataQual.xpath('./attracc')
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
31
|
+
unless xAccuracy.empty?
|
32
|
+
# data quality 2.1.1 (attraccr) - Attribute Accuracy Report
|
33
|
+
xAccuracyReport = xAccuracy.xpath('./attraccr')
|
34
|
+
unless xAccuracyReport.empty?
|
35
|
+
report = intMetadataClass.newDataQualityReport
|
36
|
+
report[:type] = 'DQ_NonQuantitativeAttributeCorrectness'
|
37
|
+
descriptiveResult = intMetadataClass.newDescriptiveResult
|
38
|
+
descriptiveResult[:name] = 'Attribute Accuracy Report'
|
39
|
+
descriptiveResult[:statement] = xAccuracyReport.text
|
40
|
+
report[:descriptiveResult] << descriptiveResult
|
41
|
+
hDataQuality[:report] << report
|
42
|
+
end
|
43
|
+
# data quality 2.1.2 (qattracc) - Quantitative Attribute Accuracy Assessment
|
44
|
+
xQuantitativeAccuracy = xAccuracy.xpath('./qattracc')
|
45
|
+
unless xQuantitativeAccuracy.empty?
|
46
|
+
report = intMetadataClass.newDataQualityReport
|
47
|
+
report[:type] = 'DQ_QuantitativeAttributeAccuracy'
|
48
|
+
# data quality 2.1.2.1 (attraccv) - Attribute Accuracy Value
|
49
|
+
xQuantitativeAccuracyValue = xQuantitativeAccuracy.xpath('./attraccv')
|
50
|
+
unless xQuantitativeAccuracyValue.empty?
|
51
|
+
quantitativeResult = intMetadataClass.newQuantitativeResult
|
52
|
+
quantitativeResult[:name] = 'Attribute Accuracy Value'
|
53
|
+
quantitativeResult[:values] << xQuantitativeAccuracyValue.text
|
54
|
+
report[:quantitativeResult] << quantitativeResult
|
55
|
+
end
|
56
|
+
# data quality 2.1.2.2 (attracce) - Attribute Accuracy Explanation
|
57
|
+
xEvaluationMethod = xQuantitativeAccuracy.xpath('./attracce')
|
58
|
+
unless xEvaluationMethod.empty?
|
59
|
+
evaluationMethod = intMetadataClass.newEvaluationMethod
|
60
|
+
evaluationMethod[:name] = 'Attribute Accuracy Explanation'
|
61
|
+
evaluationMethod[:methodDescription] = xEvaluationMethod.text
|
62
|
+
report[:evaluationMethod] << evaluationMethod
|
63
|
+
end
|
64
|
+
hDataQuality[:report] << report unless report[:quantitativeResult].empty? && report[:evaluationMethod].empty?
|
65
|
+
end
|
49
66
|
end
|
50
67
|
|
51
68
|
# data quality 2.2 (logic) - logical consistency (required) (not implemented)
|
@@ -55,9 +72,11 @@ module ADIWG
|
|
55
72
|
else
|
56
73
|
logic = xLogic.text
|
57
74
|
report = intMetadataClass.newDataQualityReport
|
58
|
-
report[:type] = '
|
59
|
-
|
60
|
-
|
75
|
+
report[:type] = 'DQ_ConceptualConsistency'
|
76
|
+
descriptiveResult = intMetadataClass.newDescriptiveResult
|
77
|
+
descriptiveResult[:name] = 'Logical Consistency Report'
|
78
|
+
descriptiveResult[:statement] = logic
|
79
|
+
report[:descriptiveResult] << descriptiveResult
|
61
80
|
hDataQuality[:report] << report
|
62
81
|
end
|
63
82
|
|
@@ -68,59 +87,74 @@ module ADIWG
|
|
68
87
|
else
|
69
88
|
complete = xComplete.text
|
70
89
|
report = intMetadataClass.newDataQualityReport
|
71
|
-
report[:type] = '
|
90
|
+
report[:type] = 'DQ_CompletenessOmission'
|
72
91
|
descriptiveResult = intMetadataClass.newDescriptiveResult
|
92
|
+
descriptiveResult[:name] = 'Completeness Report'
|
73
93
|
descriptiveResult[:statement] = complete
|
74
94
|
report[:descriptiveResult] << descriptiveResult
|
75
95
|
hDataQuality[:report] << report
|
76
96
|
end
|
77
97
|
|
78
|
-
# data quality 2.4 (
|
98
|
+
# data quality 2.4 (posacc) - Positional Accuracy
|
79
99
|
xPositionalAccuracy = xDataQual.xpath('./posacc')
|
80
100
|
unless xPositionalAccuracy.empty?
|
81
|
-
#
|
82
|
-
|
83
|
-
unless
|
101
|
+
# data quality 2.4.1 (horizpa) - Horizontal Positional Accuracy
|
102
|
+
xHorizontalAccuracy = xPositionalAccuracy.xpath('./horizpa')
|
103
|
+
unless xHorizontalAccuracy.empty?
|
84
104
|
report = intMetadataClass.newDataQualityReport
|
85
|
-
report[:type] = '
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
105
|
+
report[:type] = 'DQ_AbsoluteExternalPositionalAccuracy'
|
106
|
+
# Combine Horizontal Positional Accuracy Report and Explanation
|
107
|
+
descriptive_result_text = ''
|
108
|
+
xHorizontalAccuracyReport = xHorizontalAccuracy.xpath('./horizpar')
|
109
|
+
unless xHorizontalAccuracyReport.empty?
|
110
|
+
descriptive_result_text += xHorizontalAccuracyReport.text
|
91
111
|
end
|
92
|
-
|
93
|
-
|
94
|
-
|
112
|
+
xQuantitativeHorizontalAccuracy = xHorizontalAccuracy.xpath('./qhorizpa')
|
113
|
+
unless xQuantitativeHorizontalAccuracy.empty?
|
114
|
+
xHorizontalAccuracyValue = xQuantitativeHorizontalAccuracy.xpath('horizpav')
|
115
|
+
unless xHorizontalAccuracyValue.empty?
|
116
|
+
descriptive_result_text += " Value: #{xHorizontalAccuracyValue.text}"
|
117
|
+
end
|
118
|
+
xHorizontalAccuracyExplanation = xQuantitativeHorizontalAccuracy.xpath('horizpae')
|
119
|
+
unless xHorizontalAccuracyExplanation.empty?
|
120
|
+
descriptive_result_text += " Explanation: #{xHorizontalAccuracyExplanation.text}"
|
121
|
+
end
|
95
122
|
end
|
96
|
-
unless
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
report[:
|
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
|
101
128
|
end
|
102
129
|
hDataQuality[:report] << report
|
103
130
|
end
|
104
|
-
#
|
105
|
-
|
106
|
-
unless
|
131
|
+
# data quality 2.4.2 (vertacc) - Vertical Positional Accuracy
|
132
|
+
xVerticalAccuracy = xPositionalAccuracy.xpath('./vertacc')
|
133
|
+
unless xVerticalAccuracy.empty?
|
107
134
|
report = intMetadataClass.newDataQualityReport
|
108
|
-
report[:type] = '
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
135
|
+
report[:type] = 'DQ_AbsoluteExternalPositionalAccuracy'
|
136
|
+
# Combine Vertical Positional Accuracy Report and Explanation
|
137
|
+
descriptive_result_text = ''
|
138
|
+
xVerticalAccuracyReport = xVerticalAccuracy.xpath('./vertaccr')
|
139
|
+
unless xVerticalAccuracyReport.empty?
|
140
|
+
descriptive_result_text += xVerticalAccuracyReport.text
|
114
141
|
end
|
115
|
-
|
116
|
-
|
117
|
-
|
142
|
+
xVerticalAccuracyAssessment = xVerticalAccuracy.xpath('./qvertpa')
|
143
|
+
unless xVerticalAccuracyAssessment.empty?
|
144
|
+
xVerticalAccuracyValue = xVerticalAccuracyAssessment.xpath('vertaccv')
|
145
|
+
unless xVerticalAccuracyValue.empty?
|
146
|
+
descriptive_result_text += " Value: #{xVerticalAccuracyValue.text}"
|
147
|
+
end
|
148
|
+
xVerticalAccuracyExplanation = xVerticalAccuracyAssessment.xpath('vertacce')
|
149
|
+
unless xVerticalAccuracyExplanation.empty?
|
150
|
+
descriptive_result_text += " Explanation: #{xVerticalAccuracyExplanation.text}"
|
151
|
+
end
|
118
152
|
end
|
119
|
-
unless
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
report[:
|
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
|
124
158
|
end
|
125
159
|
hDataQuality[:report] << report
|
126
160
|
end
|
@@ -146,4 +180,4 @@ module ADIWG
|
|
146
180
|
end
|
147
181
|
end
|
148
182
|
end
|
149
|
-
end
|
183
|
+
end
|
@@ -23,6 +23,11 @@ module ADIWG
|
|
23
23
|
intConformanceResult[:scope] = Scope.unpack(hConformanceResult['scope'], responseObj)
|
24
24
|
end
|
25
25
|
|
26
|
+
# name
|
27
|
+
if hConformanceResult.has_key?('name')
|
28
|
+
intConformanceResult[:name] = hConformanceResult['name']
|
29
|
+
end
|
30
|
+
|
26
31
|
#specification
|
27
32
|
if hConformanceResult.has_key?('specification')
|
28
33
|
intConformanceResult[:specification] = Citation.unpack(hConformanceResult['specification'], responseObj)
|
@@ -26,6 +26,10 @@ module ADIWG
|
|
26
26
|
intResult[:scope] = Scope.unpack(hResult['scope'], responseObj)
|
27
27
|
end
|
28
28
|
|
29
|
+
# name
|
30
|
+
if hResult.has_key?('name')
|
31
|
+
intResult[:name] = hResult['name']
|
32
|
+
end
|
29
33
|
|
30
34
|
# spatialRepresentationType
|
31
35
|
if hResult.has_key?('spatialRepresentationType')
|
@@ -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']
|
@@ -35,6 +35,13 @@ module ADIWG
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
if hDataQuality.has_key?('systemIdentifier')
|
39
|
+
systemIdentifier = hDataQuality['systemIdentifier']
|
40
|
+
intDataQuality[:systemIdentifier] = {}
|
41
|
+
intDataQuality[:systemIdentifier][:uid] = systemIdentifier['uid']
|
42
|
+
intDataQuality[:systemIdentifier][:label] = systemIdentifier['label']
|
43
|
+
end
|
44
|
+
|
38
45
|
if hDataQuality.has_key?('standaloneQualityReport')
|
39
46
|
hObject = hDataQuality['standaloneQualityReport']
|
40
47
|
unless hObject.empty?
|
@@ -25,6 +25,10 @@ module ADIWG
|
|
25
25
|
intResult[:scope] = Scope.unpack(hResult['scope'], responseObj)
|
26
26
|
end
|
27
27
|
|
28
|
+
if hResult.has_key?('name')
|
29
|
+
intResult[:name] = hResult['name']
|
30
|
+
end
|
31
|
+
|
28
32
|
if hResult.has_key?('statement')
|
29
33
|
intResult[:statement] = hResult['statement']
|
30
34
|
end
|
@@ -8,124 +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 logic = logic_report&.dig(:qualityMeasure, :description)
|
52
|
-
@xml.tag!('logic', logic)
|
53
|
-
else
|
54
|
-
@xml.tag!('logic', 'Not Reported')
|
55
|
-
end
|
56
|
-
|
57
|
-
# data quality 2.3 (complete) - completion report (not implemented) (required)
|
58
|
-
completeness_report = hDataQuality[:report].find do |report|
|
59
|
-
report[:type] == 'Omission' &&
|
60
|
-
!report.dig(:descriptiveResult, 0, :statement).nil?
|
61
|
-
end
|
62
|
-
|
63
|
-
if complete = completeness_report&.dig(:descriptiveResult, 0, :statement)
|
64
|
-
@xml.tag!('complete', complete)
|
65
|
-
else
|
66
|
-
@xml.tag!('complete', 'Not Reported')
|
67
|
-
end
|
68
|
-
|
69
|
-
# data quality 2.4 (position) - positional accuracy
|
70
|
-
|
71
|
-
|
72
|
-
horizontal_positional_accuracy_report = hDataQuality[:report].find do |report|
|
73
|
-
report[:type] == 'AbsoluteExternalPositionalAccuracy' &&
|
74
|
-
report.dig(:qualityMeasure, :nameOfMeasure)&.any? { |name|
|
75
|
-
name == 'Horizontal Positional Accuracy Report'
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
horizpar = horizontal_positional_accuracy_report&.dig(:evaluationMethod, :methodDescription)
|
80
|
-
|
81
|
-
|
82
|
-
vertical_positional_accuracy_report = hDataQuality[:report].find do |report|
|
83
|
-
report[:type] == 'AbsoluteExternalPositionalAccuracy' &&
|
84
|
-
report.dig(:qualityMeasure, :nameOfMeasure)&.any? { |name|
|
85
|
-
name == 'Vertical Positional Accuracy Report'
|
86
|
-
}
|
87
|
-
end
|
88
|
-
|
89
|
-
vertaccr = vertical_positional_accuracy_report&.dig(:evaluationMethod, :methodDescription)
|
90
|
-
|
91
|
-
if horizpar || vertaccr
|
92
|
-
@xml.tag!('posacc') do
|
93
|
-
if horizpar
|
94
|
-
@xml.tag!('horizpa') do
|
95
|
-
@xml.tag!('horizpar', horizpar)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
if vertaccr
|
100
|
-
@xml.tag!('vertacc') do
|
101
|
-
@xml.tag!('vertaccr', vertaccr)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
elsif @hResponseObj[:writerShowTags]
|
106
|
-
@xml.tag!('position', 'Not Reported')
|
107
|
-
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
|
108
51
|
end
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
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
|
118
114
|
end
|
119
115
|
|
120
|
-
|
121
|
-
|
122
|
-
|
116
|
+
if !vertaccr.empty?
|
117
|
+
@xml.tag!('vertacc') do
|
118
|
+
@xml.tag!('vertaccr', vertaccr)
|
119
|
+
end
|
123
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
|
124
145
|
|
125
|
-
end # writeXML
|
126
|
-
end # Quality
|
127
|
-
|
128
|
-
end
|
129
146
|
end
|
130
|
-
|
131
|
-
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')
|