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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +12 -10
  3. data/adiwg-mdtranslator.gemspec +2 -2
  4. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dataQuality.rb +92 -58
  5. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_conformanceResult.rb +5 -0
  6. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_coverageResult.rb +4 -0
  7. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +8 -0
  8. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataQuality.rb +7 -0
  9. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_descriptiveResult.rb +4 -0
  10. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_quantitativeResult.rb +4 -0
  11. data/lib/adiwg/mdtranslator/version.rb +1 -1
  12. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_dataQuality.rb +133 -115
  13. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +1 -1
  14. data/lib/adiwg/mdtranslator/writers/html/sections/html_dataQuality.rb +17 -1
  15. data/lib/adiwg/mdtranslator/writers/html/sections/html_dataQualityReport.rb +28 -0
  16. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_dataIdentification.rb +29 -0
  17. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_dataQualityReport.rb +1 -1
  18. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_enumerationList.rb +52 -0
  19. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_extension.rb +208 -0
  20. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_gcoDateTime.rb +10 -1
  21. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_mdMetadata.rb +27 -0
  22. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_timePeriod.rb +2 -6
  23. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_conformanceResult.rb +6 -5
  24. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageResult.rb +1 -0
  25. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_descriptiveResult.rb +1 -0
  26. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +1 -0
  27. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_onlineResource.rb +1 -1
  28. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_quantitativeResult.rb +6 -5
  29. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceInfo.rb +1 -1
  30. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_citation.rb +9 -26
  31. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_allocation.rb +1 -1
  32. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_citation.rb +8 -8
  33. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_dataQuality.rb +1 -1
  34. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_dataQualityReport.rb +3 -3
  35. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_geographicExtent.rb +1 -1
  36. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_lineage.rb +4 -4
  37. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_maintenance.rb +4 -4
  38. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_medium.rb +2 -2
  39. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_metadataInfo.rb +4 -4
  40. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_releasability.rb +1 -1
  41. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_resourceInfo.rb +5 -5
  42. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_responsibility.rb +1 -1
  43. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_spatialRepresentation.rb +4 -4
  44. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_taxonomy.rb +1 -1
  45. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timeInstant.rb +1 -1
  46. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timePeriod.rb +5 -5
  47. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_transferOption.rb +2 -2
  48. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_usage.rb +5 -5
  49. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_vectorRepresentation.rb +2 -2
  50. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec23318ef18dc9729c5aaa6c608b55c856234d8e31a893b6c011f02494f75718
4
- data.tar.gz: d28e618a12660f940c9fbc4d3ea380c1109cdc2c7756a32872c2f2e84b4e2c64
3
+ metadata.gz: d2ba5668ad4fe2f02ab4d3037af3a9086da9a45f782fb8934399bbdd76136532
4
+ data.tar.gz: 86c08b50c1b15abe74e32afd7dc6f5b59397204858fb928463fca97939575c4c
5
5
  SHA512:
6
- metadata.gz: 6c81ced313a48931ef23b337d408f512932836b81368c535eb197dc0950795b8510deea40f5a130b4372b3110f1d9020fb943d7537de8e80184dc88b25fe8994
7
- data.tar.gz: 0566ba79a6004232a532bd7eda527bb60a90191ea0a0ba47baf38764efa014341074a31418cdc798f82a2fe5a5860f13d9f8a3e9dce8d170389edea39392a47d
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.3)
5
- adiwg-mdcodes (= 2.9.4.pre.beta.0)
6
- adiwg-mdjson_schemas (= 2.9.3.pre.beta.0)
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.2)
21
- activesupport (= 7.1.3.2)
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.2)
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.9.4.pre.beta.0)
38
+ adiwg-mdcodes (2.10.1)
39
39
  json (~> 2.0)
40
- adiwg-mdjson_schemas (2.9.3.pre.beta.0)
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.7.3)
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.6)
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)
@@ -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.3.pre.beta.0"
38
- spec.add_runtime_dependency "adiwg-mdcodes", "2.9.4.pre.beta.0"
37
+ spec.add_runtime_dependency "adiwg-mdjson_schemas", "2.10.1"
38
+ spec.add_runtime_dependency "adiwg-mdcodes", "2.10.1"
39
39
  spec.add_runtime_dependency "jbuilder", "~> 2.5"
40
40
  spec.add_runtime_dependency "kramdown", ">= 1.13", "< 3.0"
41
41
  spec.add_runtime_dependency "coderay", "~> 1.1"
@@ -28,24 +28,41 @@ module ADIWG
28
28
 
29
29
  # data quality 2.1 (attracc) - attribute accuracy
30
30
  xAccuracy = xDataQual.xpath('./attracc')
31
- accuracyReport = xAccuracy.xpath('./attraccr').text
32
- report = intMetadataClass.newDataQualityReport
33
- report[:type] = 'NonQuantitativeAttributeCorrectness'
34
- descriptiveResult = intMetadataClass.newDescriptiveResult
35
- descriptiveResult[:statement] = accuracyReport
36
- report[:descriptiveResult] << descriptiveResult
37
- hDataQuality[:report] << report
38
-
39
- # data quality 2.1 (qattracc) - Quantitative Attribute Accuracy Assessment
40
- xQuantitativeAccuracy = xDataQual.xpath('./qattracc')
41
- unless xQuantitativeAccuracy.xpath('./attraccv').empty?
42
- value = xQuantitativeAccuracy.xpath('./attraccv').text
43
- report = intMetadataClass.newDataQualityReport
44
- report[:type] = 'QuantitativeAttributeAccuracy'
45
- quantitativeResult = intMetadataClass.newQuantitativeResult
46
- quantitativeResult[:values] << value
47
- report[:quantitativeResult] << quantitativeResult
48
- hDataQuality[:report] << report
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] = 'ConceptualConsistency'
59
- report[:qualityMeasure] = intMetadataClass.newQualityMeasure
60
- report[:qualityMeasure][:description] = logic
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] = 'Omission'
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 (position) - positional accuracy
98
+ # data quality 2.4 (posacc) - Positional Accuracy
79
99
  xPositionalAccuracy = xDataQual.xpath('./posacc')
80
100
  unless xPositionalAccuracy.empty?
81
- # horizontal positional accuracy
82
- xHorizontal = xPositionalAccuracy.xpath('./horizpa')
83
- unless xHorizontal.empty?
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] = 'AbsoluteExternalPositionalAccuracy'
86
- unless xHorizontal.xpath('qhorizpa/horizpae').empty?
87
- report[:qualityMeasure] = intMetadataClass.newQualityMeasure
88
- report[:qualityMeasure][:description] = xHorizontal.xpath('qhorizpa/horizpae').text
89
- name = 'Horizontal Positional Accuracy Report'
90
- report[:qualityMeasure][:nameOfMeasure] << name
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
- unless xHorizontal.xpath('horizpar').empty?
93
- report[:evaluationMethod] = intMetadataClass.newEvaluationMethod
94
- report[:evaluationMethod][:methodDescription] = xHorizontal.xpath('horizpar').text
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 xHorizontal.xpath('qhorizpa/horizpav').empty?
97
- quantitativeResult = intMetadataClass.newQuantitativeResult
98
- value = xHorizontal.xpath('qhorizpa/horizpav').text
99
- quantitativeResult[:values] << value
100
- report[:quantitativeResult] << quantitativeResult
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
- # vertical positional accuracy
105
- xVertical = xPositionalAccuracy.xpath('./vertacc')
106
- unless xVertical.empty?
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] = 'AbsoluteExternalPositionalAccuracy'
109
- unless xVertical.xpath('qvertpa/vertacce').empty?
110
- report[:qualityMeasure] = intMetadataClass.newQualityMeasure
111
- report[:qualityMeasure][:description] = xVertical.xpath('qvertpa/vertacce').text
112
- name = 'Vertical Positional Accuracy Report'
113
- report[:qualityMeasure][:nameOfMeasure] << name
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
- unless xVertical.xpath('vertaccr').empty?
116
- report[:evaluationMethod] = intMetadataClass.newEvaluationMethod
117
- report[:evaluationMethod][:methodDescription] = xVertical.xpath('vertaccr').text
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 xVertical.xpath('qvertpa/vertaccv').empty?
120
- quantitativeResult = intMetadataClass.newQuantitativeResult
121
- value = xVertical.xpath('qvertpa/vertaccv').text
122
- quantitativeResult[:values] << value
123
- report[:quantitativeResult] << quantitativeResult
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
@@ -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?('value')
29
33
  intResult[:values] = hResult['value']
30
34
  end
@@ -109,7 +109,7 @@
109
109
  module ADIWG
110
110
  module Mdtranslator
111
111
  # current mdtranslator version
112
- VERSION = "2.20.0-beta.3"
112
+ VERSION = "2.20.0-beta.7"
113
113
  end
114
114
  end
115
115
 
@@ -8,124 +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 (not implemented)
32
- attribute_completeness_report = hDataQuality[:report].find do |report|
33
- report[:type] == 'NonQuantitativeAttributeCorrectness' &&
34
- !report.dig(:descriptiveResult, 0, :statement).nil?
35
- end
36
-
37
- if attribute_completeness_report
38
- @xml.tag!('attracc') do
39
- @xml.tag!('attraccr', attribute_completeness_report[:descriptiveResult][0][:statement])
40
- end
41
- elsif @hResponseObj[:writerShowTags]
42
- @xml.tag!('attracc', 'Not Reported')
43
- end
44
-
45
- # data quality 2.2 (logic) - logical consistency (not implemented) (required)
46
- logic_report = hDataQuality[:report].find do |report|
47
- report[:type] == 'ConceptualConsistency' &&
48
- !report.dig(:qualityMeasure, :description).nil?
49
- end
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
- # data quality 2.5 (lineage) - lineage (required)
111
- unless intObj[:metadata][:lineageInfo].empty?
112
- @xml.tag!('lineage') do
113
- lineageClass.writeXML(intObj[:metadata][:lineageInfo])
114
- end
115
- end
116
- if intObj[:metadata][:lineageInfo].empty?
117
- @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
118
114
  end
119
115
 
120
- # data quality 2.6 (cloud) - cloud cover (not implemented)
121
- if @hResponseObj[:writerShowTags]
122
- @xml.tag!('cloud', 'Not Reported')
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
- end
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[:minimumAltitude])
130
+ @xml.tag!('altmax', hBBox[:maximumAltitude])
131
131
  end
132
132
  if hBBox[:maximumAltitude].nil?
133
133
  @NameSpace.issueWarning(372, 'altmax')