adiwg-mdtranslator 2.1.0 → 2.1.1

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -0
  3. data/adiwg-mdtranslator.gemspec +1 -0
  4. data/lib/adiwg/mdtranslator/internal/module_coordinates.rb +13 -0
  5. data/lib/adiwg/mdtranslator/readers/fgdc/fgdc_reader.rb +49 -0
  6. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_citation.rb +144 -0
  7. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_date.rb +57 -0
  8. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dateTime.rb +108 -0
  9. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb +28 -0
  10. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_entityAttribute.rb +28 -0
  11. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb +193 -0
  12. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_identification.rb +136 -0
  13. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_metadataInfo.rb +28 -0
  14. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_onlineResource.rb +35 -0
  15. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_publication.rb +63 -0
  16. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_quality.rb +28 -0
  17. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_responsibility.rb +46 -0
  18. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_series.rb +44 -0
  19. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_spatialDomain.rb +184 -0
  20. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_spatialOrganization.rb +28 -0
  21. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_spatialReference.rb +28 -0
  22. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_timeInstant.rb +40 -0
  23. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_timePeriod.rb +88 -0
  24. data/lib/adiwg/mdtranslator/readers/fgdc/readme.md +18 -0
  25. data/lib/adiwg/mdtranslator/readers/{fgcd → fgdc}/version.rb +0 -0
  26. data/lib/adiwg/mdtranslator/readers/mdJson/readme.md +1 -1
  27. data/lib/adiwg/mdtranslator/readers/mdJson/version.rb +2 -1
  28. data/lib/adiwg/mdtranslator/readers/sbJson/modules/module_browseCategory.rb +5 -5
  29. data/lib/adiwg/mdtranslator/readers/sbJson/modules/module_relatedItem.rb +4 -10
  30. data/lib/adiwg/mdtranslator/readers/sbJson/modules/module_sbJson.rb +1 -1
  31. data/lib/adiwg/mdtranslator/readers/sbJson/readme.md +1 -1
  32. data/lib/adiwg/mdtranslator/readers/sbJson/sbJson_reader.rb +2 -2
  33. data/lib/adiwg/mdtranslator/readers/sbJson/version.rb +1 -1
  34. data/lib/adiwg/mdtranslator/version.rb +1 -1
  35. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceType.rb +1 -0
  36. metadata +37 -3
@@ -0,0 +1,136 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc metadata identification
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-15 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+ require_relative 'module_citation'
10
+ require_relative 'module_timePeriod'
11
+ require_relative 'module_timeInstant'
12
+ require_relative 'module_spatialDomain'
13
+
14
+ module ADIWG
15
+ module Mdtranslator
16
+ module Readers
17
+ module Fgdc
18
+
19
+ module Identification
20
+
21
+ def self.unpack(xIdInfo, intObj, hResponseObj)
22
+
23
+ # instance classes needed in script
24
+ intMetadataClass = InternalMetadata.new
25
+
26
+ # useful parts
27
+ hMetadata = intObj[:metadata]
28
+ hMetadataInfo = hMetadata[:metadataInfo]
29
+ hResourceInfo = hMetadata[:resourceInfo]
30
+
31
+ # identification information 1.1 (citation) - citation (required)
32
+ xCitation = xIdInfo.xpath('./citation')
33
+ unless xCitation.empty?
34
+ hCitation = Citation.unpack(xCitation, hResponseObj)
35
+ unless hCitation.nil?
36
+ hResourceInfo[:citation] = hCitation
37
+ end
38
+ end
39
+
40
+ # identification information 1.2 (descript) - description (required)
41
+ xDescription = xIdInfo.xpath('./descript')
42
+ unless xDescription.empty?
43
+
44
+ # description 1.2.1 (abstract) - abstract
45
+ abstract = xDescription.xpath('./abstract').text
46
+ unless abstract.empty?
47
+ hResourceInfo[:abstract] = abstract
48
+ end
49
+
50
+ # description 1.2.2 (purpose) - purpose
51
+ purpose = xDescription.xpath('./purpose').text
52
+ unless purpose.empty?
53
+ hResourceInfo[:purpose] = purpose
54
+ end
55
+
56
+ # description 1.2.3 (supplinf) - supplemental information
57
+ supplemental = xDescription.xpath('./supplinf').text
58
+ unless supplemental.empty?
59
+ hResourceInfo[:supplementalInfo] = supplemental
60
+ end
61
+
62
+ end
63
+
64
+ # identification information 1.3 (timeperd) - time period of content
65
+ xTimePeriod = xIdInfo.xpath('./timeperd')
66
+ unless xTimePeriod.empty?
67
+
68
+ # time period for single date and date range
69
+ hTimePeriod = TimePeriod.unpack(xTimePeriod, hResponseObj)
70
+ unless hTimePeriod.nil?
71
+ hResourceInfo[:timePeriod] = hTimePeriod
72
+ end
73
+
74
+ # time period multiple date time pairs 9.1.2 (mdattim)
75
+ axMultiple = xTimePeriod.xpath('./timeinfo/mdattim/sngdate')
76
+ unless axMultiple.empty?
77
+ current = xTimePeriod.xpath('./current').text
78
+ hExtent = intMetadataClass.newExtent
79
+ hExtent[:description] = 'FGDC resource time period multiple date/times'
80
+ axMultiple.each do |xDateTime|
81
+ date = xDateTime.xpath('./caldate').text
82
+ time = xDateTime.xpath('./time').text
83
+ hInstant = TimeInstant.unpack(date, time, hResponseObj)
84
+ unless hInstant.nil?
85
+ hTempExtent = intMetadataClass.newTemporalExtent
86
+ hInstant[:description] = current
87
+ hTempExtent[:timeInstant] = hInstant
88
+ hExtent[:temporalExtents] << hTempExtent
89
+ end
90
+ end
91
+ unless hExtent[:temporalExtents].empty?
92
+ hResourceInfo[:extents] << hExtent
93
+ end
94
+ end
95
+
96
+ end
97
+
98
+ # identification information 1.4 (status) - status and maintenance
99
+ xStatus = xIdInfo.xpath('./status')
100
+ unless xStatus.empty?
101
+
102
+ # status 1.4.1 (progress) - state of resource
103
+ progress = xStatus.xpath('./progress').text
104
+ unless progress.empty?
105
+ hResourceInfo[:status] << progress
106
+ end
107
+
108
+ # status 1.4.2 (update) - maintenance frequency
109
+ update = xStatus.xpath('./update').text
110
+ unless update.empty?
111
+ hMaintenance = intMetadataClass.newMaintenance
112
+ hMaintenance[:frequency] = update
113
+ hResourceInfo[:resourceMaintenance] << hMaintenance
114
+ end
115
+
116
+ end
117
+
118
+ # identification information 1.5 (spdom) - spatial domain
119
+ xDomain = xIdInfo.xpath('./spdom')
120
+ unless xDomain.empty?
121
+ hExtent = SpatialDomain.unpack(xDomain, hResponseObj)
122
+ unless hExtent.nil?
123
+ hResourceInfo[:extents] << hExtent
124
+ end
125
+ end
126
+
127
+ # identification information 1.6 (keywords) - keywords
128
+
129
+ end
130
+
131
+ end
132
+
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,28 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc metadata information
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-15 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module MetadataInformation
16
+
17
+ def self.unpack(xMetaInfo, hResponseObj)
18
+
19
+
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc online resource
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-17 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module OnlineResource
16
+
17
+ def self.unpack(onLink, description, hResponseObj)
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ hURI = intMetadataClass.newOnlineResource
22
+
23
+ hURI[:olResURI] = onLink
24
+ hURI[:olResDesc] = description
25
+
26
+ return hURI
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,63 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc publication
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-17 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+ require_relative 'module_fgdc'
10
+
11
+ module ADIWG
12
+ module Mdtranslator
13
+ module Readers
14
+ module Fgdc
15
+
16
+ module Publication
17
+
18
+ def self.unpack(xPublication, hResponseObj)
19
+
20
+ # instance classes needed in script
21
+ intMetadataClass = InternalMetadata.new
22
+ hResponsibility = nil
23
+ contactId = nil
24
+
25
+ # publication information 8.2 (publish) - publisher {contact}
26
+ publisher = xPublication.xpath('./publish').text
27
+ unless publisher.empty?
28
+ contactId = Fgdc.find_contact_by_name(publisher)
29
+ if contactId.nil?
30
+ contactId = Fgdc.add_contact(publisher, true)
31
+ end
32
+ hResponsibility = Responsibility.unpack([contactId], 'publisher', hResponseObj)
33
+ end
34
+
35
+ # publication information 8.1 (pubplace) - place of publication
36
+ place = xPublication.xpath('./pubplace').text
37
+ unless place.empty?
38
+ unless contactId.nil?
39
+ hContact = Fgdc.get_contact_by_id(contactId)
40
+ unless hContact.nil?
41
+ if hContact[:addresses].empty?
42
+ hAddress = intMetadataClass.newAddress
43
+ hContact[:addresses] << hAddress
44
+ else
45
+ hAddress = hContact[:addresses][0]
46
+ end
47
+ hAddress[:addressTypes] << 'mailing'
48
+ hAddress[:description] = place
49
+ Fgdc.set_contact(hContact)
50
+ end
51
+ end
52
+ end
53
+
54
+ return hResponsibility
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,28 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc data quality
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-15 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module Quality
16
+
17
+ def self.unpack(xDataQual, hResponseObj)
18
+
19
+
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,46 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc metadata responsibility
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-18 original script
6
+
7
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
8
+ require_relative 'module_fgdc'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module Responsibility
16
+
17
+ def self.unpack(aContacts, role, hResponseObj)
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ hResponsibility = intMetadataClass.newResponsibility
22
+
23
+ hResponsibility[:roleName] = role
24
+
25
+ # add contacts to responsibility party []
26
+ aContacts.each do |contactId|
27
+ hContactInfo = Fgdc.find_contact_by_id(contactId)
28
+ unless hContactInfo[0].nil?
29
+ hParty = intMetadataClass.newParty
30
+ hParty[:contactId] = contactId
31
+ hParty[:contactIndex] = hContactInfo[0]
32
+ hParty[:contactType] = hContactInfo[1]
33
+ hResponsibility[:parties] << hParty
34
+ end
35
+ end
36
+
37
+ return hResponsibility
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,44 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc series
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-17 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module Series
16
+
17
+ def self.unpack(xSerInfo, hResponseObj)
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ hSeries = intMetadataClass.newSeries
22
+
23
+ # series 8.7.1 (sername) - series name
24
+ name = xSerInfo.xpath('./sername').text
25
+ unless name.empty?
26
+ hSeries[:seriesName] = name
27
+ end
28
+
29
+ # series 8.7.2 (issue) - series issue
30
+ issue = xSerInfo.xpath('./issue').text
31
+ unless issue.empty?
32
+ hSeries[:seriesIssue] = issue
33
+ end
34
+
35
+ return hSeries
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,184 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc spatial domain
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-22 original script
6
+
7
+ require 'nokogiri'
8
+ require 'json'
9
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
10
+ require 'adiwg/mdtranslator/internal/module_coordinates'
11
+
12
+ module ADIWG
13
+ module Mdtranslator
14
+ module Readers
15
+ module Fgdc
16
+
17
+ module SpatialDomain
18
+
19
+ def self.process_polygon(xPolygon)
20
+ aCoords = []
21
+
22
+ # polygon coordinates (grngpoin) - g ring points []
23
+ axPoints = xPolygon.xpath('./grngpoin')
24
+ unless axPoints.empty?
25
+ aCoords = coords_from_points(axPoints)
26
+ end
27
+
28
+ # polygon coordinates (gring) - g ring
29
+ xRing = xPolygon.xpath('./gring')
30
+ unless xRing.empty?
31
+ aCoords = coords_from_ring(xRing)
32
+ end
33
+
34
+ return aCoords
35
+ end
36
+
37
+ def self.coords_from_points(axPoints)
38
+ aCoords = []
39
+ axPoints.each do |xPoint|
40
+ lon = xPoint.xpath('./grnglon').text.to_f
41
+ lat = xPoint.xpath('./grnglat').text.to_f
42
+ aCoords << [lon, lat]
43
+ end
44
+ return aCoords
45
+ end
46
+
47
+ def self.coords_from_ring(xRing)
48
+ aCoords = []
49
+ sRing = xRing.text
50
+ aPoints = sRing.split(', ')
51
+ aPoints.each do |point|
52
+ aCoord = point.split(' ')
53
+ aCoords << [aCoord[0].to_f, aCoord[1].to_f]
54
+ end
55
+ return aCoords
56
+ end
57
+
58
+ def self.unpack(xDomain, hResponseObj)
59
+
60
+ # instance classes needed in script
61
+ intMetadataClass = InternalMetadata.new
62
+ hExtent = intMetadataClass.newExtent
63
+ hGeoExtent = intMetadataClass.newGeographicExtent
64
+
65
+ # spatial domain 1.5.1 (bounding) - bounding box
66
+ xBbox = xDomain.xpath('./bounding')
67
+ unless xBbox.empty?
68
+ hBbox = intMetadataClass.newBoundingBox
69
+
70
+ # bounding box 1.5.1.1 (westbc) - west coordinate
71
+ hBbox[:westLongitude] = xBbox.xpath('./westbc').text.to_f
72
+
73
+ # bounding box 1.5.1.2 (eastbc) - east coordinate
74
+ hBbox[:eastLongitude] = xBbox.xpath('./eastbc').text.to_f
75
+
76
+ # bounding box 1.5.1.3 (northbc) - north coordinate
77
+ hBbox[:northLatitude] = xBbox.xpath('./northbc').text.to_f
78
+
79
+ # bounding box 1.5.1.4 (southbc) - south coordinate
80
+ hBbox[:southLatitude] = xBbox.xpath('./southbc').text.to_f
81
+
82
+ hGeoExtent[:boundingBox] = hBbox
83
+ end
84
+
85
+ # spatial domain 1.5.2 (dsgpoly) - data set geographic polygon
86
+ xPoly = xDomain.xpath('./dsgpoly')
87
+ unless xPoly.empty?
88
+
89
+ polygon = []
90
+
91
+ # polygon 1.5.2.1 (dsgpolyo) - polygon outer ring
92
+ xOring = xPoly.xpath('./dsgpolyo')
93
+ unless xOring.empty?
94
+
95
+ # outer ring 1.5.2.1.1 (grngpoin) - g ring point
96
+ # outer ring 1.5.2.1.2 (gring) - g ring
97
+ # outer ring must be counterclockwise
98
+ aOutCoords = process_polygon(xOring)
99
+ unless aOutCoords.empty?
100
+ if AdiwgCoordinates.is_polygon_clockwise(aOutCoords)
101
+ aOutCoords.reverse!
102
+ end
103
+ polygon << aOutCoords
104
+ end
105
+
106
+ # first ring must be outer
107
+ # only process if already have outer ring
108
+ # polygon 1.5.2.2 (dsgpolyx) - polygon exclusion ring []
109
+ axXring = xPoly.xpath('./dsgpolyx')
110
+ axXring.each do |xRing|
111
+
112
+ # exclusion ring 1.5.2.2.1 (grngpoin) - g ring point
113
+ # exclusion ring 1.5.2.2.2 (gring) - g ring
114
+ # exclusion ring must be clockwise
115
+ aInCoords = process_polygon(xRing)
116
+ unless aInCoords.empty?
117
+ unless AdiwgCoordinates.is_polygon_clockwise(aInCoords)
118
+ aInCoords.reverse!
119
+ end
120
+ polygon << aInCoords
121
+ end
122
+
123
+ end
124
+ end
125
+
126
+ unless polygon.empty?
127
+
128
+ # make geoJson FeatureCollection from polygon
129
+ hGeometry = {
130
+ type: 'Polygon',
131
+ coordinates: polygon
132
+ }
133
+ hFeature = {
134
+ type: 'Feature',
135
+ geometry: hGeometry,
136
+ properties: {
137
+ description: 'FGDC bounding polygon'
138
+ }
139
+ }
140
+ hCollection = {
141
+ type: 'FeatureCollection',
142
+ features: [hFeature]
143
+ }
144
+ geoJson = hCollection.to_json
145
+
146
+ # make internal geometries from polygon
147
+ hIntGeo = intMetadataClass.newGeometryObject
148
+ hIntGeo[:type] = 'Polygon'
149
+ hIntGeo[:coordinates] = polygon
150
+ hIntGeo[:nativeGeoJson] = hGeometry.to_json
151
+
152
+ hIntProps = intMetadataClass.newGeometryProperties
153
+ hIntProps[:description] = 'FGDC bounding polygon'
154
+
155
+ hIntFeature = intMetadataClass.newGeometryFeature
156
+ hIntFeature[:type] = 'Feature'
157
+ hIntFeature[:geometryObject] = hIntGeo
158
+ hIntFeature[:nativeGeoJson] = hFeature.to_json
159
+ hIntFeature[:properties] = hIntProps
160
+
161
+ hIntCollect = intMetadataClass.newFeatureCollection
162
+ hIntCollect[:type] = 'FeatureCollection'
163
+ hIntCollect[:features] << hIntFeature
164
+ hIntCollect[:nativeGeoJson] = hCollection.to_json
165
+
166
+ hGeoExtent[:geographicElements] << hIntCollect
167
+ hGeoExtent[:nativeGeoJson] = geoJson
168
+
169
+ hExtent[:geographicExtents] << hGeoExtent
170
+ hExtent[:description] = 'FGDC spatial domain'
171
+
172
+ end
173
+ end
174
+
175
+ return hExtent
176
+
177
+ end
178
+
179
+ end
180
+
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,28 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc spatial data organization
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-15 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module SpatialOrganization
16
+
17
+ def self.unpack(xSpatialOrg, hResponseObj)
18
+
19
+
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc spatial data reference
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-15 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+
10
+ module ADIWG
11
+ module Mdtranslator
12
+ module Readers
13
+ module Fgdc
14
+
15
+ module SpatialReference
16
+
17
+ def self.unpack(xSpatialRef, hResponseObj)
18
+
19
+
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ # Reader - fgdc to internal data structure
2
+ # unpack fgdc time instant
3
+
4
+ # History:
5
+ # Stan Smith 2017-08-21 original script
6
+
7
+ require 'nokogiri'
8
+ require 'adiwg/mdtranslator/internal/internal_metadata_obj'
9
+ require_relative 'module_dateTime'
10
+
11
+ module ADIWG
12
+ module Mdtranslator
13
+ module Readers
14
+ module Fgdc
15
+
16
+ module TimeInstant
17
+
18
+ def self.unpack(date, time, hResponseObj)
19
+
20
+ # instance classes needed in script
21
+ intMetadataClass = InternalMetadata.new
22
+ hTimeInstant = intMetadataClass.newTimeInstant
23
+
24
+ # time instant
25
+ hDateTime = DateTime.unpack(date, time, hResponseObj)
26
+ unless hDateTime.nil?
27
+ hTimeInstant[:timeInstant] = hDateTime
28
+ return hTimeInstant
29
+ end
30
+
31
+ return nil
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end