adiwg-mdtranslator 2.21.0.pre.beta.0 → 2.21.0.pre.beta.2
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/.github/workflows/test.yml +1 -1
- data/DCAT-US.md +67 -0
- data/Gemfile.lock +5 -5
- data/README.md +21 -0
- data/Rakefile +1 -0
- data/adiwg-mdtranslator.gemspec +2 -2
- data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +1 -0
- 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/dcat_us/dcat_us_writer.rb +98 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/readme.md +10 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_access_level.rb +55 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_access_url.rb +17 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_accrualPeriodicity.rb +45 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_bureau_code.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_contact_point.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_dcat_us.rb +104 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_described_by.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_described_by_type.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_description.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_distribution.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_download_url.rb +17 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb +27 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_issued.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_keyword.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_landing_page.rb +27 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_language.rb +23 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_license.rb +18 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_media_type.rb +17 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_modified.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_primaryITInvestmentUII.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_program_code.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_publisher.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_references.rb +50 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_rights.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_spatial.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_system_of_records.rb +28 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_temporal.rb +40 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_theme.rb +28 -0
- data/lib/adiwg/mdtranslator/writers/dcat_us/version.rb +14 -0
- 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_acquisition.rb +103 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_enumerationList.rb +52 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_environment.rb +82 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_event.rb +123 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_extension.rb +208 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_instrument.rb +92 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_instrumentationEvent.rb +83 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_instrumentationEventList.rb +73 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_mdMetadata.rb +38 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_objective.rb +121 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_operation.rb +131 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_pass.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_plan.rb +76 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_platform.rb +102 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_requestedDate.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_requirement.rb +111 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_revision.rb +55 -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_acquisition.rb +195 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_allocation.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_body.rb +18 -2
- 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_environment.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_event.rb +121 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_geographicExtent.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_instrument.rb +98 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_instrumentationEvent.rb +84 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_instrumentationEventList.rb +90 -0
- 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_objective.rb +155 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_operation.rb +178 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_pass.rb +72 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_plan.rb +93 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_platform.rb +117 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_releasability.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_requestedDate.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_requirement.rb +139 -0
- 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_revision.rb +55 -0
- 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
- data/lib/adiwg/mdtranslator_cli.rb +1 -1
- data/scripts/build-gem.sh +4 -0
- data/scripts/publish-gem.sh +9 -0
- metadata +71 -6
@@ -0,0 +1,32 @@
|
|
1
|
+
module ADIWG
|
2
|
+
module Mdtranslator
|
3
|
+
module Writers
|
4
|
+
module Dcat_us
|
5
|
+
module Rights
|
6
|
+
|
7
|
+
def self.build(intObj, accessLevel)
|
8
|
+
resourceInfo = intObj.dig(:metadata, :resourceInfo)
|
9
|
+
constraints = resourceInfo&.dig(:constraints)
|
10
|
+
|
11
|
+
if accessLevel && ["restricted public", "non-public"].include?(accessLevel)
|
12
|
+
constraints&.each do |constraint|
|
13
|
+
if constraint[:type] == "use"
|
14
|
+
statement = constraint.dig(:releasability, :statement)
|
15
|
+
disseminationConstraints = constraint.dig(:releasability, :disseminationConstraint)
|
16
|
+
|
17
|
+
if statement && disseminationConstraints
|
18
|
+
combinedConstraints = disseminationConstraints.join(" ")
|
19
|
+
return "#{statement} #{combinedConstraints}".strip
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ADIWG
|
2
|
+
module Mdtranslator
|
3
|
+
module Writers
|
4
|
+
module Dcat_us
|
5
|
+
module Spatial
|
6
|
+
|
7
|
+
def self.build(intObj)
|
8
|
+
resourceInfo = intObj.dig(:metadata, :resourceInfo)
|
9
|
+
extent = resourceInfo&.dig(:extents, 0)
|
10
|
+
geographicExtent = extent&.dig(:geographicExtents, 0)
|
11
|
+
boundingBox = geographicExtent&.dig(:boundingBox)
|
12
|
+
|
13
|
+
if boundingBox
|
14
|
+
return [
|
15
|
+
boundingBox[:eastLongitude],
|
16
|
+
boundingBox[:southLatitude],
|
17
|
+
boundingBox[:westLongitude],
|
18
|
+
boundingBox[:northLatitude]
|
19
|
+
].join(',')
|
20
|
+
elsif geographicExtent&.dig(:geographicElement, 0, :type) == 'point'
|
21
|
+
point = geographicExtent.dig(:geographicElement, 0, :coordinate)
|
22
|
+
return "#{point[1]},#{point[0]}" if point&.length == 2
|
23
|
+
end
|
24
|
+
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'jbuilder'
|
2
|
+
|
3
|
+
module ADIWG
|
4
|
+
module Mdtranslator
|
5
|
+
module Writers
|
6
|
+
module Dcat_us
|
7
|
+
module SystemOfRecords
|
8
|
+
|
9
|
+
def self.build(intObj)
|
10
|
+
associatedResources = intObj.dig(:metadata, :associatedResources)
|
11
|
+
|
12
|
+
return nil if associatedResources.nil?
|
13
|
+
|
14
|
+
associatedResources.each do |resource|
|
15
|
+
if resource[:initiativeType] == 'sorn'
|
16
|
+
onlineResources = resource.dig(:resourceCitation, :onlineResources)
|
17
|
+
return onlineResources.first[:olResURI] if onlineResources&.first&.has_key?(:olResURI)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ADIWG
|
2
|
+
module Mdtranslator
|
3
|
+
module Writers
|
4
|
+
module Dcat_us
|
5
|
+
module Temporal
|
6
|
+
|
7
|
+
def self.build(intObj)
|
8
|
+
resourceInfo = intObj.dig(:metadata, :resourceInfo)
|
9
|
+
extent = resourceInfo&.dig(:extents, 0)
|
10
|
+
temporalExtents = extent&.dig(:temporalExtents)
|
11
|
+
|
12
|
+
if temporalExtents
|
13
|
+
temporalExtents.each do |temporalExtent|
|
14
|
+
timePeriod = temporalExtent&.dig(:timePeriod)
|
15
|
+
next unless timePeriod
|
16
|
+
|
17
|
+
startDateHash = timePeriod[:startDateTime]
|
18
|
+
endDateHash = timePeriod[:endDateTime]
|
19
|
+
|
20
|
+
startDate = startDateHash&.dig(:dateTime)
|
21
|
+
endDate = endDateHash&.dig(:dateTime)
|
22
|
+
|
23
|
+
if startDate && endDate
|
24
|
+
return "#{startDate}/#{endDate}"
|
25
|
+
elsif startDate
|
26
|
+
return startDate
|
27
|
+
elsif endDate
|
28
|
+
return endDate
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'jbuilder'
|
2
|
+
|
3
|
+
module ADIWG
|
4
|
+
module Mdtranslator
|
5
|
+
module Writers
|
6
|
+
module Dcat_us
|
7
|
+
module Theme
|
8
|
+
|
9
|
+
def self.build(intObj)
|
10
|
+
resourceInfo = intObj[:metadata][:resourceInfo]
|
11
|
+
keywords_str = []
|
12
|
+
|
13
|
+
resourceInfo[:keywords].each do |keyword_group|
|
14
|
+
if keyword_group[:thesaurus][:title] == "ISO Topic Categories"
|
15
|
+
keyword_group[:keywords].each do |keyword_obj|
|
16
|
+
keywords_str << keyword_obj[:keyword]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
return keywords_str.join(" ")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -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,103 @@
|
|
1
|
+
require_relative 'class_scope'
|
2
|
+
require_relative 'class_plan'
|
3
|
+
require_relative 'class_requirement'
|
4
|
+
require_relative 'class_environment'
|
5
|
+
require_relative 'class_instrument'
|
6
|
+
require_relative 'class_objective'
|
7
|
+
require_relative 'class_operation'
|
8
|
+
require_relative 'class_platform'
|
9
|
+
|
10
|
+
module ADIWG
|
11
|
+
module Mdtranslator
|
12
|
+
module Writers
|
13
|
+
module Iso19115_3
|
14
|
+
|
15
|
+
class MI_AcquisitionInformation
|
16
|
+
def initialize(xml, hResponseObj)
|
17
|
+
@xml = xml
|
18
|
+
@hResponseObj = hResponseObj
|
19
|
+
end
|
20
|
+
|
21
|
+
def writeXML(hAcquisition)
|
22
|
+
|
23
|
+
scopeClass = MD_Scope.new(@xml, @hResponseObj)
|
24
|
+
planClass = MI_Plan.new(@xml, @hResponseObj)
|
25
|
+
requirementClass = MI_Requirement.new(@xml, @hResponseObj)
|
26
|
+
environmentClass = MI_EnvironmentalRecord.new(@xml, @hResponseObj)
|
27
|
+
instrumentClass = MI_Instrument.new(@xml, @hResponseObj)
|
28
|
+
objectiveClass = MI_Objective.new(@xml, @hResponseObj)
|
29
|
+
operationClass = MI_Operation.new(@xml, @hResponseObj)
|
30
|
+
platformClass = MI_Platform.new(@xml, @hResponseObj)
|
31
|
+
|
32
|
+
unless hAcquisition.empty?
|
33
|
+
@xml.tag!('mac:MI_AcquisitionInformation') do
|
34
|
+
unless hAcquisition[:scope].empty?
|
35
|
+
@xml.tag!('mac:scope') do
|
36
|
+
scopeClass.writeXML(hAcquisition[:scope])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
unless hAcquisition[:plans].empty?
|
41
|
+
hAcquisition[:plans].each do |hPlan|
|
42
|
+
@xml.tag!('mac:acquisitionPlan') do
|
43
|
+
planClass.writeXML(hPlan)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
unless hAcquisition[:requirements].empty?
|
49
|
+
hAcquisition[:requirements].each do |hRequirement|
|
50
|
+
@xml.tag!('mac:acquisitionRequirement') do
|
51
|
+
requirementClass.writeXML(hRequirement)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
unless hAcquisition[:environment].empty?
|
57
|
+
@xml.tag!('mac:environmentalConditions') do
|
58
|
+
environmentClass.writeXML(hAcquisition[:environment])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
unless hAcquisition[:instruments].empty?
|
63
|
+
hAcquisition[:instruments].each do |hInstrument|
|
64
|
+
@xml.tag!('mac:instrument') do
|
65
|
+
instrumentClass.writeXML(hInstrument)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
unless hAcquisition[:objectives].empty?
|
71
|
+
hAcquisition[:objectives].each do |hObjective|
|
72
|
+
@xml.tag!('mac:objective') do
|
73
|
+
objectiveClass.writeXML(hObjective)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
unless hAcquisition[:operations].empty?
|
79
|
+
hAcquisition[:operations].each do |hOperation|
|
80
|
+
@xml.tag!('mac:operation') do
|
81
|
+
operationClass.writeXML(hOperation)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
unless hAcquisition[:platforms].empty?
|
87
|
+
hAcquisition[:platforms].each do |hPlatform|
|
88
|
+
@xml.tag!('mac:platform') do
|
89
|
+
platformClass.writeXML(hPlatform)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|