adiwg-mdtranslator 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +24 -0
  6. data/README.md +31 -0
  7. data/Rakefile +13 -0
  8. data/adiwg-mdtranslator.gemspec +31 -0
  9. data/bin/mdtranslator +164 -0
  10. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
  11. data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
  12. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
  13. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
  14. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
  15. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
  16. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
  17. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
  18. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
  19. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
  20. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
  21. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
  22. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
  23. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
  24. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
  25. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
  26. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
  27. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
  28. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
  29. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
  30. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
  31. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
  32. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
  33. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
  34. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
  35. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
  36. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
  37. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
  38. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
  39. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
  40. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
  41. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
  42. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
  43. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
  44. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
  45. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
  46. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
  47. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
  48. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
  49. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
  50. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
  51. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
  52. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
  53. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
  54. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
  55. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
  56. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
  57. data/lib/adiwg/mdtranslator/validator.rb +43 -0
  58. data/lib/adiwg/mdtranslator/version.rb +7 -0
  59. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
  60. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
  61. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
  62. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
  63. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
  64. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
  65. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
  66. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
  67. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
  68. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
  69. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
  70. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
  71. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
  72. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
  73. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
  74. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
  75. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
  76. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
  77. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
  78. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
  79. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
  80. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
  81. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
  82. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
  83. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
  84. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
  85. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
  86. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
  87. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
  88. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
  89. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
  90. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
  91. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
  92. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
  93. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
  94. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
  95. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
  96. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
  97. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
  98. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
  99. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
  100. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
  101. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
  102. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
  103. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
  104. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
  105. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
  106. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
  107. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
  108. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
  109. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
  110. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
  111. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
  112. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
  113. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
  114. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
  115. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
  116. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
  117. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
  118. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
  119. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
  120. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
  121. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
  122. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
  123. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
  124. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
  125. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
  126. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
  127. data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
  128. data/lib/adiwg/mdtranslator.rb +97 -0
  129. data/lib/adiwg-mdtranslator.rb +1 -0
  130. data/mdtranslator.rb +178 -0
  131. data/test/adiwgJson_full_test_example.json +1717 -0
  132. data/test/adiwgJson_template.json +977 -0
  133. data/test/dev.rb +32 -0
  134. data/test/tc_translation.rb +31 -0
  135. metadata +317 -0
@@ -0,0 +1,499 @@
1
+ # ADIwg ISO Translator internal data structure
2
+
3
+ # History:
4
+ # Stan Smith 2013-08-09 original script
5
+ # Stan Smith 2013-08-10 adding methods as needed
6
+ # Stan Smith 2013-09-19 added keywords
7
+ # Stan Smith 2013-09-20 change '' to nil for value attributes
8
+ # Stan Smith 2013-09-23 added distributor
9
+ # Stan Smith 2013-09-24 added distributor order process
10
+ # Stan Smith 2013-09-24 added digital transfer options
11
+ # Stan Smith 2013-09-24 added data transfer medium
12
+ # Stan Smith 2013-10-17 added browse graphic
13
+ # Stan Smith 2013-10-21 added address (separated from contact)
14
+ # Stan Smith 2013-10-25 added extent
15
+ # Stan Smith 2013-10-25 added bounding box
16
+ # Stan Smith 2013-10-25 added point
17
+ # Stan Smith 2013-10-25 added multi point
18
+ # Stan Smith 2013-10-25 added line string
19
+ # Stan Smith 2013-10-25 added polygon
20
+ # Stan Smith 2013-10-25 added linear ring
21
+ # Stan Smith 2013-10-25 added temporal extent
22
+ # Stan Smith 2013-10-25 added time instant
23
+ # Stan Smith 2013-10-25 added time period
24
+ # Stan Smith 2013-10-25 added vertical extent
25
+ # Stan Smith 2013-10-30 added constraint
26
+ # Stan Smith 2013-10-31 added resource maintenance
27
+ # Stan Smith 2013-11-19 added usage
28
+ # Stan Smith 2013-11-19 added taxonomy
29
+ # Stan Smith 2013-11-20 added data quality
30
+ # Stan Smith 2013-11-20 modified citation
31
+ # Stan Smith 2013-12-16 added phone book
32
+ # Stan Smith 2014-04-23 added protocol and doi to online resource
33
+ # Stan Smith 2014-04-24 added jsonVersion to newBase
34
+ # Stan Smith 2014-04-24 renamed newDataId to newResourceInfo
35
+ # Stan Smith 2014-04-24 reorganized newMetadata, newResourceInfo
36
+ # Stan Smith 2014-04-24 added newMetadataInfo
37
+ # Stan Smith 2014-04-25 modified newCitation for json schema 0.3.0
38
+ # Stan Smith 2014-04-25 added resource Ids to newCitation
39
+ # Stan Smith 2014-04-30 reorganized geometry blocks for json schema 0.3.0
40
+ # Stan Smith 2014-05-02 added associatedResource
41
+ # Stan Smith 2014-05-02 added additionalDocument
42
+ # Stan Smith 2014-05-28 modified resourceId & responsibleParty for schema 0.5.0
43
+ # Stan Smith 2014-08-15 modified citation, onlineResource, resourceId for 0.6.0
44
+ # Stan Smith 2014-09-03 added spatialReferenceSystems for name, EPSG, and WKT for 0.6.0
45
+
46
+ class InternalMetadata
47
+
48
+ # initialize attribute values - nil
49
+ # initialize arrays - []
50
+ # initialize hashes - {}
51
+
52
+ def initialize
53
+ end
54
+
55
+ def newBase
56
+ intObj = {
57
+ jsonVersion: {
58
+ name: nil,
59
+ version: nil
60
+ },
61
+ contacts: [],
62
+ metadata: {}
63
+ }
64
+ end
65
+
66
+ def newDateTime
67
+ intObj = {
68
+ dateTime: nil,
69
+ dateType: nil,
70
+ dateResolution: nil
71
+ }
72
+ end
73
+
74
+ def newContact
75
+ intObj = {
76
+ contactID: nil,
77
+ indName: nil,
78
+ orgName: nil,
79
+ position: nil,
80
+ phones: [],
81
+ address: {},
82
+ onlineRes: [],
83
+ contactInstructions: nil
84
+ }
85
+ end
86
+
87
+ def newPhone
88
+ intObj = {
89
+ phoneServiceType: nil,
90
+ phoneName: nil,
91
+ phoneNumber: nil
92
+ }
93
+ end
94
+
95
+ def newAddress
96
+ intObj = {
97
+ deliveryPoints: [],
98
+ city: nil,
99
+ adminArea: nil,
100
+ postalCode: nil,
101
+ country: nil,
102
+ eMailList: []
103
+ }
104
+ end
105
+
106
+ def newMetadata
107
+ intObj = {
108
+ metadataInfo: {},
109
+ resourceInfo: {},
110
+ distributorInfo: [],
111
+ associatedResources: [],
112
+ additionalDocuments: []
113
+ }
114
+ end
115
+
116
+ def newMetadataInfo
117
+ intObj = {
118
+ metadataId: {},
119
+ parentMetadata: {},
120
+ metadataScope: [],
121
+ metadataCustodians: [],
122
+ metadataCreateDate: {},
123
+ metadataUpdateDate: {},
124
+ metadataURI: nil,
125
+ metadataStatus: nil,
126
+ maintInfo: {},
127
+ extensions: []
128
+ }
129
+ end
130
+
131
+ def newRespParty
132
+ intObj = {
133
+ contactID: nil,
134
+ roleName: nil
135
+ }
136
+ end
137
+
138
+ def newOnlineResource
139
+ intObj = {
140
+ olResURI: nil,
141
+ olResProtocol: nil,
142
+ olResName: nil,
143
+ olResDesc: nil,
144
+ olResFunction: nil
145
+ }
146
+ end
147
+
148
+ def newResourceInfo
149
+ intObj = {
150
+ citation: {},
151
+ abstract: nil,
152
+ shortAbstract: nil,
153
+ hasMapLocation?: nil,
154
+ hasDataAvailable?: nil,
155
+ purpose: nil,
156
+ credits: [],
157
+ status: nil,
158
+ pointsOfContact: [],
159
+ resourceMaint: [],
160
+ graphicOverview: [],
161
+ resourceFormats: [],
162
+ resourceLanguages: [],
163
+ descriptiveKeywords: [],
164
+ resourceUses: [],
165
+ useConstraints: [],
166
+ legalConstraints: [],
167
+ securityConstraints: [],
168
+ taxonomy: {},
169
+ spatialReferenceSystem: {},
170
+ spatialRepresentationTypes: [],
171
+ spatialResolutions: [],
172
+ topicCategories: [],
173
+ environmentDescription: nil,
174
+ extents: [],
175
+ dataQualityInfo: [],
176
+ supplementalInfo: nil
177
+ }
178
+ end
179
+
180
+ def newCitation
181
+ intObj = {
182
+ citTitle: nil,
183
+ citDate: [],
184
+ citEdition: nil,
185
+ citResourceIDs: [],
186
+ citResponsibleParty: [],
187
+ citResourceForms: [],
188
+ citOlResources: []
189
+ }
190
+ end
191
+
192
+ def newResourceId
193
+ intObj = {
194
+ identifier: nil,
195
+ identifierType: nil,
196
+ identifierCitation: {}
197
+ }
198
+ end
199
+
200
+ def newResourceFormat
201
+ intObj = {
202
+ formatName: nil,
203
+ formatVersion: nil
204
+ }
205
+ end
206
+
207
+ def newResourceMaint
208
+ intObj = {
209
+ maintFreq: nil,
210
+ maintNotes: [],
211
+ maintContacts: []
212
+ }
213
+ end
214
+
215
+ def newKeyword
216
+ intObj = {
217
+ keyword: [],
218
+ keywordType: nil,
219
+ keyTheCitation: {}
220
+ }
221
+ end
222
+
223
+ def newLegalCon
224
+ intObj = {
225
+ accessCons: [],
226
+ useCons: [],
227
+ otherCons: []
228
+ }
229
+ end
230
+
231
+ def newSecurityCon
232
+ intObj = {
233
+ classification: nil,
234
+ userNote: nil,
235
+ classSystem: nil,
236
+ handlingDesc: nil
237
+ }
238
+ end
239
+
240
+ def newDistributor
241
+ intObj = {
242
+ distContact: {},
243
+ distOrderProc: [],
244
+ distFormat: [],
245
+ distTransOption: []
246
+ }
247
+ end
248
+
249
+ def newDistOrder
250
+ intObj = {
251
+ fees: nil,
252
+ plannedDateTime: {},
253
+ orderInstructions: nil,
254
+ turnaround: nil
255
+ }
256
+ end
257
+
258
+ def newDigitalTransOption
259
+ intObj = {
260
+ online: [],
261
+ offline: {}
262
+ }
263
+ end
264
+
265
+ def newMedium
266
+ intObj = {
267
+ mediumName: nil,
268
+ mediumFormat: nil,
269
+ mediumNote: nil
270
+ }
271
+ end
272
+
273
+ def newBrowseGraphic
274
+ intObj = {
275
+ bGName: nil,
276
+ bGDescription: nil,
277
+ bGType: nil,
278
+ bGURI: nil
279
+ }
280
+ end
281
+
282
+ def newSpatialReferenceSystem
283
+ intObj = {
284
+ sRNames: [],
285
+ sREPSGs: [],
286
+ sRWKTs: []
287
+ }
288
+ end
289
+
290
+ def newExtent
291
+ intObj = {
292
+ extDesc: nil,
293
+ extGeoElements: [],
294
+ extIdElements: [],
295
+ extTempElements: [],
296
+ extVertElements: []
297
+ }
298
+ end
299
+
300
+ def newGeoElement
301
+ intObj = {
302
+ elementId: nil,
303
+ elementIncludeData: nil,
304
+ elementName: nil,
305
+ elementDescription: nil,
306
+ temporalElements: [],
307
+ verticalElements: [],
308
+ elementIdentifiers: [],
309
+ elementScope: nil,
310
+ elementAcquisition: nil,
311
+ elementSrs: {},
312
+ elementGeometry: {}
313
+ }
314
+ end
315
+
316
+ def newSRS
317
+ intObj = {
318
+ srsName: nil,
319
+ srsHref: nil,
320
+ sysType: nil
321
+ }
322
+ end
323
+
324
+ def newGeometry
325
+ intObj = {
326
+ geoType: nil,
327
+ geometry: {},
328
+ dimension: nil
329
+ }
330
+ end
331
+
332
+ def newBoundingBox
333
+ intObj = {
334
+ westLong: nil,
335
+ eastLong: nil,
336
+ southLat: nil,
337
+ northLat: nil
338
+ }
339
+ end
340
+
341
+ def newPolygonSet
342
+ intObj = {
343
+ exteriorRing: {},
344
+ exclusionRings: []
345
+ }
346
+ end
347
+
348
+ def newTemporalElement
349
+ intObj = {
350
+ date: {},
351
+ timeInstant: {},
352
+ timePeriod: {}
353
+ }
354
+ end
355
+
356
+ def newTimeInstant
357
+ intObj = {
358
+ timeID: nil,
359
+ description: nil,
360
+ timePosition: {}
361
+ }
362
+ end
363
+
364
+ def newTimePeriod
365
+ intObj = {
366
+ timeID: nil,
367
+ description: nil,
368
+ beginTime: {},
369
+ endTime: {}
370
+ }
371
+ end
372
+
373
+ def newVerticalElement
374
+ intObj = {
375
+ minValue: nil,
376
+ maxValue: nil,
377
+ crsURI: nil,
378
+ crsTitle: nil
379
+ }
380
+ end
381
+
382
+ def newLegalConstraint
383
+ intObj = {
384
+ accessCodes: [],
385
+ useCodes: [],
386
+ otherCons: []
387
+ }
388
+ end
389
+
390
+ def newSecurityConstraint
391
+ intObj = {
392
+ classCode: nil,
393
+ userNote: nil,
394
+ classSystem: nil,
395
+ handlingDesc: nil
396
+ }
397
+ end
398
+
399
+ def newDataUsage
400
+ intObj = {
401
+ specificUsage: nil,
402
+ userLimits: nil,
403
+ userContacts: []
404
+ }
405
+ end
406
+
407
+ def newTaxonSystem
408
+ intObj = {
409
+ taxClassSys: [],
410
+ taxGeneralScope: nil,
411
+ taxObservers: [],
412
+ taxIdProcedures: nil,
413
+ taxVoucher: {},
414
+ taxClasses: []
415
+ }
416
+ end
417
+
418
+ def newTaxonVoucher
419
+ intObj = {
420
+ specimen: nil,
421
+ repository: {}
422
+ }
423
+ end
424
+
425
+ def newTaxonClass
426
+ intObj = {
427
+ commonName: nil,
428
+ taxRankName: nil,
429
+ taxRankValue: nil
430
+ }
431
+ end
432
+
433
+ def newResolution
434
+ intObj = {
435
+ equivalentScale: nil,
436
+ distance: nil,
437
+ distanceUOM: nil
438
+ }
439
+ end
440
+
441
+ def newDataQuality
442
+ intObj = {
443
+ dataScope: nil,
444
+ dataLineage: {}
445
+ }
446
+ end
447
+
448
+ def newLineage
449
+ intObj = {
450
+ statement: nil,
451
+ processSteps: [],
452
+ dataSources: []
453
+ }
454
+ end
455
+
456
+ def newDataProcessStep
457
+ intObj = {
458
+ stepID: nil,
459
+ stepDescription: nil,
460
+ stepRationale: nil,
461
+ stepDateTime: {},
462
+ stepProcessors: []
463
+ }
464
+ end
465
+
466
+ def newDataSource
467
+ intObj = {
468
+ sourceDescription: nil,
469
+ sourceCitation: {},
470
+ sourceSteps: []
471
+ }
472
+ end
473
+
474
+ def newMetadataExtension
475
+ intObj = {
476
+ onLineResource: {},
477
+ extName: nil,
478
+ extShortName: nil,
479
+ extDefinition: nil,
480
+ obligation: nil,
481
+ dataType: nil,
482
+ maxOccurrence: nil,
483
+ parentEntities: [],
484
+ rule: nil,
485
+ rationales: [],
486
+ extSources: []
487
+ }
488
+ end
489
+
490
+ def newAssociatedResource
491
+ intObj = {
492
+ associationType: nil,
493
+ resourceType: nil,
494
+ resourceCitation: {},
495
+ metadataCitation: {}
496
+ }
497
+ end
498
+
499
+ end
@@ -0,0 +1,98 @@
1
+ # date, dateTime methods
2
+ # for ADIwg readers and writers
3
+
4
+ # History:
5
+ # Stan Smith 2013-09-26 original script
6
+ # Stan Smith 2013-12-06 added support for fractional seconds
7
+
8
+ require 'date'
9
+
10
+ module AdiwgDateTimeFun
11
+
12
+ def self.dateTimeFromString(inDateTime)
13
+ hFormats = {'YMDhmsLZ'=> '%Y-%m-%dT%H:%M:%S.%L%z',
14
+ 'YMDhmsL'=> '%Y-%m-%dT%H:%M:%S.%L',
15
+ 'YMDhmsZ'=> '%Y-%m-%dT%H:%M:%S%z',
16
+ 'YMDhms'=> '%Y-%m-%dT%H:%M:%S',
17
+ 'YMDhmZ'=> '%Y-%m-%dT%H:%M%z',
18
+ 'YMDhm'=> '%Y-%m-%dT%H:%M',
19
+ 'YMDhZ'=> '%Y-%m-%dT%H%z',
20
+ 'YMDh'=> '%Y-%m-%dT%H',
21
+ 'YMD'=> '%Y-%m-%d',
22
+ 'YM'=> '%Y-%m',
23
+ 'Y'=> '%Y'}
24
+ hFormats.each do |dateResolution, format|
25
+ myDateTime = DateTime.strptime(inDateTime,format) rescue false
26
+ return myDateTime, dateResolution if myDateTime
27
+ end
28
+
29
+ return nil, 'ERROR'
30
+ end
31
+
32
+ def self.stringDateFromDateTime(myDateTime,dateResolution)
33
+ s = case dateResolution
34
+ when 'YMDhmsLZ','YMDhmsL','YMDhmsZ', 'YMDhms',
35
+ 'YMDhmZ', 'YMDhm', 'YMDhZ', 'YMDh','YMD'
36
+ myDateTime.strftime('%Y-%m-%d')
37
+ when 'YM'
38
+ myDateTime.strftime('%Y-%m')
39
+ when 'Y'
40
+ myDateTime.strftime('%Y')
41
+ else
42
+ 'ERROR'
43
+ end
44
+
45
+ return s
46
+ end
47
+
48
+ def self.stringDateTimeFromDateTime(myDateTime,dateResolution)
49
+ s = case dateResolution
50
+ when 'YMDhmsLZ'
51
+ myDateTime.strftime('%Y-%m-%dT%H:%M:%S.%L%:z')
52
+ when 'YMDhmsL'
53
+ myDateTime.strftime('%Y-%m-%dT%H:%M:%S.%L')
54
+ when 'YMDhmsZ'
55
+ myDateTime.strftime('%Y-%m-%dT%H:%M:%S%:z')
56
+ when 'YMDhms', 'YMD', 'YM', 'Y'
57
+ myDateTime.strftime('%Y-%m-%dT%H:%M:%S')
58
+ when 'YMDhmZ'
59
+ myDateTime.strftime('%Y-%m-%dT%H:%M%:z')
60
+ when 'YMDhm'
61
+ myDateTime.strftime('%Y-%m-%dT%H:%M')
62
+ when 'YMDhZ'
63
+ myDateTime.strftime('%Y-%m-%dT%H%:z')
64
+ when 'YMDh'
65
+ myDateTime.strftime('%Y-%m-%dT%H')
66
+ else
67
+ 'ERROR'
68
+ end
69
+
70
+ return s
71
+ end
72
+
73
+ def self.stringTimeFromDateTime(myDateTime,dateResolution)
74
+ s = case dateResolution
75
+ when 'YMDhmsLZ'
76
+ myDateTime.strftime('%H:%M:%S.%L%:z')
77
+ when 'YMDhmsL'
78
+ myDateTime.strftime('%H:%M:%S.%L')
79
+ when 'YMDhmsZ'
80
+ myDateTime.strftime('%H:%M:%S%:z')
81
+ when 'YMDhms'
82
+ myDateTime.strftime('%H:%M:%S')
83
+ when 'YMDhmZ'
84
+ myDateTime.strftime('%H:%M%:z')
85
+ when 'YMDhm'
86
+ myDateTime.strftime('%H:%M')
87
+ when 'YMDhZ'
88
+ myDateTime.strftime('%H%:z')
89
+ when 'YMDh'
90
+ myDateTime.strftime('%H')
91
+ else
92
+ 'ERROR'
93
+ end
94
+
95
+ return s
96
+ end
97
+
98
+ end
@@ -0,0 +1,80 @@
1
+ # Reader - ADIwg JSON V1 to internal data structure
2
+
3
+ # History:
4
+ # Stan Smith 2013-08-09 original script
5
+ # Stan Smith 2013-08-19 split out contacts to module_contacts
6
+ # Stan Smith 2013-08-23 split out metadata to module_metadata
7
+ # Stan Smith 2014-04-23 add json schema version to internal object
8
+ # Stan Smith 2014-06-05 capture an test json version
9
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
10
+ # Stan Smith 2014-07-08 moved json schema version testing to 'adiwg_1_get_version'
11
+ # Stan Smith 2014-08-18 add json name/version to internal object
12
+
13
+ require 'json'
14
+ require ADIWG::Mdtranslator.reader_module('module_contacts', $response[:readerVersionUsed])
15
+ require ADIWG::Mdtranslator.reader_module('module_metadata', $response[:readerVersionUsed])
16
+
17
+ class AdiwgJsonReader
18
+
19
+ def initialize
20
+ end
21
+
22
+ def unpack(jsonObj)
23
+
24
+ # instance classes needed in script
25
+ intMetadataClass = InternalMetadata.new
26
+
27
+ # create new internal metadata container for the reader
28
+ intBase = intMetadataClass.newBase
29
+
30
+ # convert the received JSON to a Ruby hash
31
+ hashObj = JSON.parse(jsonObj)
32
+
33
+ # get json schema name and version
34
+ if hashObj.has_key?('version')
35
+ hVersion = hashObj['version']
36
+ unless hVersion.empty?
37
+ if hVersion.has_key?('name')
38
+ s = hVersion['name']
39
+ if !s.nil?
40
+ intBase[:jsonVersion][:name] = s
41
+ end
42
+ end
43
+ if hVersion.has_key?('version')
44
+ s = hVersion['version']
45
+ if !s.nil?
46
+ intBase[:jsonVersion][:version] = s
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ # contact
53
+ # load the array of contacts from the json object
54
+ # ... the contacts array uses a local id to reference the
55
+ # ... contact in the array from elsewhere in the json metadata
56
+ if hashObj.has_key?('contact')
57
+ aContacts = hashObj['contact']
58
+ aContacts.each do |hContact|
59
+ unless hContact.empty?
60
+ intBase[:contacts] << Adiwg_Contact.unpack(hContact)
61
+ end
62
+ end
63
+ end
64
+
65
+ # add default contacts
66
+ intBase[:contacts].concat(Adiwg_Contact.setDefaultContacts)
67
+
68
+ # metadata
69
+ # load metadata from the hash object
70
+ if hashObj.has_key?('metadata')
71
+ hMetadata = hashObj['metadata']
72
+ intBase[:metadata] = Adiwg_Metadata.unpack(hMetadata)
73
+ end
74
+
75
+ # return ADIwg internal container
76
+ return intBase
77
+
78
+ end
79
+
80
+ end