adiwg-mdtranslator 0.8.0

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 (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,83 @@
1
+ # unpack taxonomy
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-20 original script
6
+ # Stan Smith 2014-05-02 fixed assignment problem with taxon general scope
7
+ # Stan Smith 2014-05-02 fixed assignment problem with taxonomic procedures
8
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
9
+
10
+ require ADIWG::Mdtranslator.reader_module('module_citation', $response[:readerVersionUsed])
11
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
12
+ require ADIWG::Mdtranslator.reader_module('module_voucher', $response[:readerVersionUsed])
13
+ require ADIWG::Mdtranslator.reader_module('module_taxonClass', $response[:readerVersionUsed])
14
+
15
+ module Adiwg_Taxonomy
16
+
17
+ def self.unpack(hTaxonomy)
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ intTaxSys = intMetadataClass.newTaxonSystem
22
+
23
+ # taxonomy - taxonomy class system - citation
24
+ if hTaxonomy.has_key?('classificationSystem')
25
+ aClassSys = hTaxonomy['classificationSystem']
26
+ unless aClassSys.empty?
27
+ aClassSys.each do |hCitation|
28
+ intTaxSys[:taxClassSys] << Adiwg_Citation.unpack(hCitation)
29
+ end
30
+ end
31
+ end
32
+
33
+ # taxonomy - general scope
34
+ if hTaxonomy.has_key?('taxonGeneralScope')
35
+ s = hTaxonomy['taxonGeneralScope']
36
+ if s != ''
37
+ intTaxSys[:taxGeneralScope] = s
38
+ end
39
+ end
40
+
41
+ # taxonomy - ID reference system
42
+ # not supported in JSON schema (defaulted to 'unknown')
43
+
44
+ # taxonomy - observers - responsible party
45
+ if hTaxonomy.has_key?('observer')
46
+ aObservers = hTaxonomy['observer']
47
+ unless aObservers.empty?
48
+ aObservers.each do |observer|
49
+ intTaxSys[:taxObservers] << Adiwg_ResponsibleParty.unpack(observer)
50
+ end
51
+ end
52
+ end
53
+
54
+ # taxonomy - taxonomic procedures
55
+ if hTaxonomy.has_key?('taxonomicProcedure')
56
+ s = hTaxonomy['taxonomicProcedure']
57
+ if s != ''
58
+ intTaxSys[:taxIdProcedures] = s
59
+ end
60
+ end
61
+
62
+ # taxonomy - voucher
63
+ if hTaxonomy.has_key?('voucher')
64
+ hVoucher = hTaxonomy['voucher']
65
+ unless hVoucher.empty?
66
+ intTaxSys[:taxVoucher] = Adiwg_Voucher.unpack(hVoucher)
67
+ end
68
+ end
69
+
70
+ # taxonomy - classification (recursive)
71
+ if hTaxonomy.has_key?('taxonClass')
72
+ aTaxClass = hTaxonomy['taxonClass']
73
+ unless aTaxClass.empty?
74
+ aTaxClass.each do |hTaxClass|
75
+ intTaxSys[:taxClasses] << Adiwg_TaxonCl.unpack(hTaxClass)
76
+ end
77
+ end
78
+ end
79
+
80
+ return intTaxSys
81
+ end
82
+
83
+ end
@@ -0,0 +1,71 @@
1
+ # unpack temporal element
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-14 original script
6
+ # Stan Smith 2013-11-15
7
+ # . revised to handle temporal elements for both feature
8
+ # properties and extents
9
+ # . multiple temporal elements are allowed per extent
10
+ # . each definition will create a new element
11
+ # Stan Smith 2013-12-11 modified to handle single temporal element
12
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
13
+
14
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
15
+ require ADIWG::Mdtranslator.reader_module('module_timeInstant', $response[:readerVersionUsed])
16
+ require ADIWG::Mdtranslator.reader_module('module_timePeriod', $response[:readerVersionUsed])
17
+
18
+ module Adiwg_TemporalElement
19
+
20
+ def self.unpack(hTempElement)
21
+
22
+ # instance classes needed in script
23
+ intMetadataClass = InternalMetadata.new
24
+ aIntTempElements = Array.new
25
+
26
+ # temporal element - date
27
+ if hTempElement.has_key?('date')
28
+ aDates = hTempElement['date']
29
+ unless aDates.empty?
30
+ aDates.each do |s|
31
+ intTempEle = intMetadataClass.newTemporalElement
32
+ intTempEle[:date] = Adiwg_DateTime.unpack(s)
33
+ aIntTempElements << intTempEle
34
+ end
35
+ end
36
+ end
37
+
38
+ # temporal element - time instant
39
+ if hTempElement.has_key?('timeInstant')
40
+ aTimeInst = hTempElement['timeInstant']
41
+ unless aTimeInst.empty?
42
+ aTimeInst.each do |hTimeInst|
43
+ if hTimeInst.has_key?('timePosition')
44
+ s = hTimeInst['timePosition']
45
+ if s != ''
46
+ intTempEle = intMetadataClass.newTemporalElement
47
+ intTempEle[:timeInstant] = Adiwg_TimeInstant.unpack(hTimeInst)
48
+ aIntTempElements << intTempEle
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ # temporal element - time period
56
+ if hTempElement.has_key?('timePeriod')
57
+ aTimePeriod = hTempElement['timePeriod']
58
+ unless aTimePeriod.empty?
59
+ aTimePeriod.each do |hTimePeriod|
60
+ intTempEle = intMetadataClass.newTemporalElement
61
+ intTempEle[:timePeriod] = Adiwg_TimePeriod.unpack(hTimePeriod)
62
+ aIntTempElements << intTempEle
63
+ end
64
+ end
65
+ end
66
+
67
+ return aIntTempElements
68
+
69
+ end
70
+
71
+ end
@@ -0,0 +1,45 @@
1
+ # unpack time instant
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-12-11 original script
6
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
7
+
8
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
9
+
10
+ module Adiwg_TimeInstant
11
+
12
+ def self.unpack(hTimeInst)
13
+
14
+ # instance classes needed in script
15
+ intMetadataClass = InternalMetadata.new
16
+
17
+ # time instant
18
+ intTimeInst = intMetadataClass.newTimeInstant
19
+
20
+ if hTimeInst.has_key?('id')
21
+ s = hTimeInst['id']
22
+ if s != ''
23
+ intTimeInst[:timeID] = s
24
+ end
25
+ end
26
+
27
+ if hTimeInst.has_key?('description')
28
+ s = hTimeInst['description']
29
+ if s != ''
30
+ intTimeInst[:description] = s
31
+ end
32
+ end
33
+
34
+ # time instant will only be inserted if time position provided
35
+ if hTimeInst.has_key?('timePosition')
36
+ s = hTimeInst['timePosition']
37
+ if s != ''
38
+ intTimeInst[:timePosition] = Adiwg_DateTime.unpack(s)
39
+ end
40
+ end
41
+
42
+ return intTimeInst
43
+ end
44
+
45
+ end
@@ -0,0 +1,53 @@
1
+ # unpack time period
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-12-11 original script
6
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
7
+
8
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
9
+
10
+ module Adiwg_TimePeriod
11
+
12
+ def self.unpack(hTimePeriod)
13
+
14
+ # instance classes needed in script
15
+ intMetadataClass = InternalMetadata.new
16
+
17
+ # time period
18
+ intTimePer = intMetadataClass.newTimePeriod
19
+
20
+ if hTimePeriod.has_key?('id')
21
+ s = hTimePeriod['id']
22
+ if s != ''
23
+ intTimePer[:timeID] = s
24
+ end
25
+ end
26
+
27
+ if hTimePeriod.has_key?('description')
28
+ s = hTimePeriod['description']
29
+ if s != ''
30
+ intTimePer[:description] = s
31
+ end
32
+ end
33
+
34
+ if hTimePeriod.has_key?('beginPosition')
35
+ s = hTimePeriod['beginPosition']
36
+ if s != ''
37
+ intTimePer[:beginTime] = Adiwg_DateTime.unpack(s)
38
+
39
+ end
40
+ end
41
+
42
+ if hTimePeriod.has_key?('endPosition')
43
+ s = hTimePeriod['endPosition']
44
+ if s != ''
45
+ intTimePer[:endTime] = Adiwg_DateTime.unpack(s)
46
+
47
+ end
48
+ end
49
+
50
+ return intTimePer
51
+ end
52
+
53
+ end
@@ -0,0 +1,53 @@
1
+ # unpack vertical element
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-18 original script
6
+ # Stan Smith 2013-12-11 modified to handle single vertical element
7
+
8
+ module Adiwg_VerticalElement
9
+
10
+ def self.unpack(hVertElement)
11
+
12
+ # instance classes needed in script
13
+ intMetadataClass = InternalMetadata.new
14
+
15
+ intVertEle = intMetadataClass.newVerticalElement
16
+
17
+ # vertical element - minimum value
18
+ if hVertElement.has_key?('minimumValue')
19
+ s = hVertElement['minimumValue']
20
+ if s != ''
21
+ intVertEle[:minValue] = s
22
+ end
23
+ end
24
+
25
+ # vertical element - maximum value
26
+ if hVertElement.has_key?('maximumValue')
27
+ s = hVertElement['maximumValue']
28
+ if s != ''
29
+ intVertEle[:maxValue] = s
30
+ end
31
+ end
32
+
33
+ # vertical element - vertical crs title attribute
34
+ if hVertElement.has_key?('verticalCRSTitle')
35
+ s = hVertElement['verticalCRSTitle']
36
+ if s != ''
37
+ intVertEle[:crsTitle] = s
38
+ end
39
+ end
40
+
41
+ # vertical element - vertical crs link attribute
42
+ if hVertElement.has_key?('verticalCRSUri')
43
+ s = hVertElement['verticalCRSUri']
44
+ if s != ''
45
+ intVertEle[:crsURI] = s
46
+ end
47
+ end
48
+
49
+ return intVertEle
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,38 @@
1
+ # unpack voucher
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-21 original script
6
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
7
+
8
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
9
+
10
+ module Adiwg_Voucher
11
+
12
+ def self.unpack(hVoucher)
13
+
14
+ # instance classes needed in script
15
+ intMetadataClass = InternalMetadata.new
16
+ intTaxVoucher = intMetadataClass.newTaxonVoucher
17
+
18
+ # taxonomy voucher - specimen
19
+ if hVoucher.has_key?('specimen')
20
+ s = hVoucher['specimen']
21
+ if s != ''
22
+ intTaxVoucher[:specimen] = s
23
+ end
24
+ end
25
+
26
+ # taxonomy - repository - responsible party
27
+ if hVoucher.has_key?('repository')
28
+ hRepository = hVoucher['repository']
29
+ unless hRepository.empty?
30
+ intTaxVoucher[:repository] = Adiwg_ResponsibleParty.unpack(hRepository)
31
+ end
32
+ end
33
+
34
+ return intTaxVoucher
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,43 @@
1
+ =begin
2
+ * Description: Patches json-schema gem to work on windows
3
+ * Author: Josh Bradley
4
+ * Date: 2014-09-17
5
+ * License: Public Domain
6
+ =end
7
+
8
+ module JSON
9
+
10
+ class Validator
11
+
12
+ def load_ref_schema(parent_schema,ref)
13
+ uri = URI.parse(ref)
14
+ if uri.relative?
15
+ uri = parent_schema.uri.clone
16
+
17
+ # Check for absolute path
18
+ path = ref.split("#")[0]
19
+
20
+ # This is a self reference and thus the schema does not need to be re-loaded
21
+ if path.nil? || path == ''
22
+ return
23
+ end
24
+
25
+ if path && path[0,1] == '/'
26
+ uri.path = Pathname.new(path).cleanpath.to_s
27
+ else
28
+ uri = parent_schema.uri.merge(path)
29
+ end
30
+ uri.fragment = ''
31
+ end
32
+
33
+ if Validator.schemas[uri.to_s].nil?
34
+ schema = JSON::Schema.new(JSON::Validator.parse(open(uri.to_s.chomp('#')).read), uri, @options[:version])
35
+ Validator.add_schema(schema)
36
+ build_schemas(schema)
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,7 @@
1
+ module ADIWG
2
+ module Mdtranslator
3
+ # current mdtranslator version
4
+ VERSION = "0.8.0"
5
+ end
6
+ end
7
+
@@ -0,0 +1,91 @@
1
+ # ISO <<Class>> CI_Address
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-09 original script
6
+
7
+ class CI_Address
8
+
9
+ def initialize(xml)
10
+ @xml = xml
11
+ end
12
+
13
+ def writeXML(hAddress)
14
+
15
+ deliveryPoints = hAddress[:deliveryPoints].length
16
+ eMails = hAddress[:eMailList].length
17
+
18
+ if deliveryPoints + eMails > 0
19
+ @xml.tag!('gmd:CI_Address') do
20
+ # address - address
21
+ if deliveryPoints > 0
22
+
23
+ # address - delivery points (address lines)
24
+ aDeliveryPoints = hAddress[:deliveryPoints]
25
+ aDeliveryPoints.each do |myPoint|
26
+ @xml.tag!('gmd:deliveryPoint') do
27
+ @xml.tag!('gco:CharacterString',myPoint)
28
+ end
29
+ end
30
+
31
+ elsif $showAllTags
32
+ @xml.tag!('gmd:deliveryPoint')
33
+ end
34
+
35
+ # address - city
36
+ s = hAddress[:city]
37
+ if !s.nil?
38
+ @xml.tag!('gmd:city') do
39
+ @xml.tag!('gco:CharacterString',s)
40
+ end
41
+ elsif $showAllTags
42
+ @xml.tag!('gmd:city')
43
+ end
44
+
45
+ # address - admin area (state)
46
+ s = hAddress[:adminArea]
47
+ if !s.nil?
48
+ @xml.tag!('gmd:administrativeArea') do
49
+ @xml.tag!('gco:CharacterString',s)
50
+ end
51
+ elsif $showAllTags
52
+ @xml.tag!('gmd:administrativeArea')
53
+ end
54
+
55
+ # address - postal code
56
+ s = hAddress[:postalCode]
57
+ if !s.nil?
58
+ @xml.tag!('gmd:postalCode') do
59
+ @xml.tag!('gco:CharacterString',s)
60
+ end
61
+ elsif $showAllTags
62
+ @xml.tag!('gmd:postalCode')
63
+ end
64
+
65
+ # address - country
66
+ s = hAddress[:country]
67
+ if !s.nil?
68
+ @xml.tag!('gmd:country') do
69
+ @xml.tag!('gco:CharacterString',s)
70
+ end
71
+ elsif $showAllTags
72
+ @xml.tag!('gmd:country')
73
+ end
74
+
75
+ # address - email addresses
76
+ if eMails > 0
77
+ hAddress[:eMailList].each do |myEmail|
78
+ @xml.tag!('gmd:electronicMailAddress') do
79
+ @xml.tag!('gco:CharacterString',myEmail)
80
+ end
81
+ end
82
+ elsif $showAllTags
83
+ @xml.tag!('gmd:electronicMailAddress')
84
+ end
85
+
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,68 @@
1
+ # ISO <<Class>> MD_AggregateInformation
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2014-05-29 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'code_associationType'
9
+ require 'code_initiativeType'
10
+ require 'class_citation'
11
+
12
+ class MD_AggregateInformation
13
+
14
+ def initialize(xml)
15
+ @xml = xml
16
+ end
17
+
18
+ def writeXML(hAssocRes)
19
+
20
+ # aggregate information is being supported in the 19115-1 style,
21
+ # ... aggregateDataSetIdentifier is being dropped and
22
+ # ... resource identifiers are being carried inside the
23
+ # ... citation > identifier section
24
+
25
+ # classes used
26
+ assocCode = DS_AssociationTypeCode.new(@xml)
27
+ initCode = DS_InitiativeTypeCode.new(@xml)
28
+ citationClass = CI_Citation.new(@xml)
29
+
30
+ @xml.tag!('gmd:MD_AggregateInformation') do
31
+
32
+ # aggregate information - aggregate data set name - citation
33
+ hAssocCit = hAssocRes[:resourceCitation]
34
+ if !hAssocCit.empty?
35
+ @xml.tag!('gmd:aggregateDataSetName') do
36
+ citationClass.writeXML(hAssocCit)
37
+ end
38
+ elsif $showAllTags
39
+ @xml.tag!('gmd:aggregateDataSetName')
40
+ end
41
+
42
+ # aggregate information - aggregate data set identifier (use citation > identifier)
43
+
44
+ # aggregate information - association type
45
+ s = hAssocRes[:associationType]
46
+ if !s.nil?
47
+ @xml.tag!('gmd:associationType') do
48
+ assocCode.writeXML(s)
49
+ end
50
+ elsif $showAllTags
51
+ @xml.tag!('gmd:associationType')
52
+ end
53
+
54
+ # aggregate information - initiative type
55
+ s = hAssocRes[:resourceType]
56
+ if !s.nil?
57
+ @xml.tag!('gmd:initiativeType') do
58
+ initCode.writeXML(s)
59
+ end
60
+ elsif $showAllTags
61
+ @xml.tag!('gmd:initiativeType')
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,75 @@
1
+ # ISO <<Class>> EX_BoundingPolygon
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-01 original script
6
+ # Stan Smith 2013-11-12 added multi geometry
7
+ # Stan Smith 2013-11-13 added line string
8
+ # Stan Smith 2013-11-18 added polygon
9
+ # Stan Smith 2014-05-30 modified for version 0.5.0
10
+ # Stan Smith 2014-05-30 added multi-point, multi-linestring, multi-polygon support
11
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
12
+
13
+ require 'class_point'
14
+ require 'class_lineString'
15
+ require 'class_multiGeometry'
16
+ require 'class_polygon'
17
+
18
+ class EX_BoundingPolygon
19
+
20
+ def initialize(xml)
21
+ @xml = xml
22
+ end
23
+
24
+ def writeXML(hGeoElement)
25
+
26
+ # classes used by MD_Metadata
27
+ pointClass = Point.new(@xml)
28
+ lineClass = LineString.new(@xml)
29
+ multiGeoClass = MultiGeometry.new(@xml)
30
+ polygonClass = Polygon.new(@xml)
31
+
32
+ hGeometry = hGeoElement[:elementGeometry]
33
+ polyType = hGeometry[:geoType]
34
+
35
+ @xml.tag!('gmd:EX_BoundingPolygon') do
36
+
37
+ # bounding polygon - extent type - required
38
+ extentType = hGeoElement[:elementIncludeData]
39
+ if extentType.nil?
40
+ @xml.tag!('gmd:extentTypeCode',{'gco:nilReason'=>'missing'})
41
+ elsif extentType == true || extentType == false
42
+ @xml.tag!('gmd:extentTypeCode') do
43
+ @xml.tag!('gco:Boolean',extentType)
44
+ end
45
+ else
46
+ @xml.tag!('gmd:extentTypeCode',{'gco:nilReason'=>extentType})
47
+ end
48
+
49
+ # bounding polygon - polygon - required
50
+ if hGeometry[:geometry].empty?
51
+ @xml.tag!('gmd:polygon', {'gco:nilReason' => 'missing'})
52
+ else
53
+ @xml.tag!('gmd:polygon') do
54
+ case polyType
55
+ when 'Point'
56
+ pointClass.writeXML(hGeoElement)
57
+ when 'LineString'
58
+ lineClass.writeXML(hGeoElement)
59
+ when 'Polygon'
60
+ polygonClass.writeXML(hGeoElement)
61
+ when 'MultiPoint', 'MultiLineString', 'MultiPolygon', 'MultiGeometry'
62
+ multiGeoClass.writeXML(hGeoElement)
63
+ when 'MultiGeometry'
64
+ multiGeoClass.writeXML(hGeoElement)
65
+ else
66
+ # log - the bounding polygon type is not supported
67
+ end
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ end
@@ -0,0 +1,51 @@
1
+ # ISO <<Class>> MD_BrowseGraphic
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-10-17 original script
6
+
7
+ class MD_BrowseGraphic
8
+
9
+ def initialize(xml)
10
+ @xml = xml
11
+ end
12
+
13
+ def writeXML(graphic)
14
+
15
+ @xml.tag!('gmd:MD_BrowseGraphic') do
16
+
17
+ # browse graphic - file name - required
18
+ s = graphic[:bGName]
19
+ if !s.nil?
20
+ @xml.tag!('gmd:fileName') do
21
+ @xml.tag!('gco:CharacterString',s)
22
+ end
23
+ elsif $showAllTags
24
+ @xml.tag!('gmd:fileName')
25
+ end
26
+
27
+ # browse graphic - file description
28
+ s = graphic[:bGDescription]
29
+ if !s.nil?
30
+ @xml.tag!('gmd:fileDescription') do
31
+ @xml.tag!('gco:CharacterString',s)
32
+ end
33
+ elsif $showAllTags
34
+ @xml.tag!('gmd:fileDescription')
35
+ end
36
+
37
+ # browse graphic - file type
38
+ s = graphic[:bGType]
39
+ if !s.nil?
40
+ @xml.tag!('gmd:fileType') do
41
+ @xml.tag!('gco:CharacterString',s)
42
+ end
43
+ elsif $showAllTags
44
+ @xml.tag!('gmd:fileType')
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end