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,76 @@
1
+ # unpack metadata
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-22 original script
6
+ # Stan Smith 2013-09-23 added distributor info section
7
+ # Stan Smith 2013-11-26 added metadata maintenance section
8
+ # Stan Smith 2013-11-26 added hierarchy section
9
+ # Stan Smith 2013-11-26 added data quality section
10
+ # Stan Smith 2013-12-27 added parent identifier
11
+ # Stan Smith 2014-04-24 reorganized for json schema 0.3.0
12
+ # Stan Smith 2014-05-02 added associated resources
13
+ # Stan Smith 2014-05-02 added additional documentation
14
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
15
+
16
+ require ADIWG::Mdtranslator.reader_module('module_metadataInfo', $response[:readerVersionUsed])
17
+ require ADIWG::Mdtranslator.reader_module('module_resourceInfo', $response[:readerVersionUsed])
18
+ require ADIWG::Mdtranslator.reader_module('module_distributionInfo', $response[:readerVersionUsed])
19
+ require ADIWG::Mdtranslator.reader_module('module_associatedResource', $response[:readerVersionUsed])
20
+ require ADIWG::Mdtranslator.reader_module('module_citation', $response[:readerVersionUsed])
21
+
22
+ module Adiwg_Metadata
23
+
24
+ def self.unpack(hMetadata)
25
+
26
+ # instance classes needed in script
27
+ intMetadataClass = InternalMetadata.new
28
+ intMetadata = intMetadataClass.newMetadata
29
+
30
+ # metadata - metadataInfo
31
+ # metadataInfo needs access to resourceInfo to check taxonomy
32
+ if hMetadata.has_key?('metadataInfo')
33
+ intMetadata[:metadataInfo] = Adiwg_MetadataInfo.unpack(hMetadata)
34
+ end
35
+
36
+ # metadata - resource identification info
37
+ if hMetadata.has_key?('resourceInfo')
38
+ hResourceInfo = hMetadata['resourceInfo']
39
+ intMetadata[:resourceInfo] = Adiwg_ResourceInfo.unpack(hResourceInfo)
40
+ end
41
+
42
+ # metadata - distribution info
43
+ if hMetadata.has_key?('distributionInfo')
44
+ aDistributors = hMetadata['distributionInfo']
45
+ unless aDistributors.empty?
46
+ aDistributors.each do |hDistributor|
47
+ intMetadata[:distributorInfo] << Adiwg_DistributionInfo.unpack(hDistributor)
48
+ end
49
+ end
50
+ end
51
+
52
+ # metadata - associated resources
53
+ if hMetadata.has_key?('associatedResource')
54
+ aAssocRes = hMetadata['associatedResource']
55
+ unless aAssocRes.empty?
56
+ aAssocRes.each do |hAssocRes|
57
+ intMetadata[:associatedResources] << Adiwg_AssociatedResource.unpack(hAssocRes)
58
+ end
59
+ end
60
+ end
61
+
62
+ # metadata - additional documents
63
+ if hMetadata.has_key?('additionalDocumentation')
64
+ aCitation = hMetadata['additionalDocumentation']
65
+ unless aCitation.empty?
66
+ aCitation.each do |hCitation|
67
+ intMetadata[:additionalDocuments] << Adiwg_Citation.unpack(hCitation)
68
+ end
69
+ end
70
+ end
71
+
72
+ return intMetadata
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,40 @@
1
+ # unpack metadata extension information
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-22 original script
6
+ # Stan Smith 2014-05-15 modified for JSON schema 0.4.0
7
+
8
+ module Adiwg_MetadataExtension
9
+
10
+ def self.addExtensionISObio()
11
+
12
+ intMetadataClass = InternalMetadata.new
13
+ intMetaExt = intMetadataClass.newMetadataExtension
14
+ intContactRole = intMetadataClass.newRespParty
15
+
16
+ # extension online information
17
+ intMetaExt[:onLineResource] = {}
18
+
19
+ # extension entity information
20
+ intMetaExt[:extName] = 'Taxonomy System'
21
+ intMetaExt[:extShortName] = 'TaxonSys'
22
+ intMetaExt[:extDefinition] = 'Documentation of taxonomic sources, procedures, and treatments'
23
+ intMetaExt[:obligation] = 'optional'
24
+ intMetaExt[:dataType] = 'class'
25
+ intMetaExt[:maxOccurrence] = '1'
26
+ intMetaExt[:parentEntities] << 'MD_Identification'
27
+ intMetaExt[:rule] = 'New Metadata section as a class to MD_Identification'
28
+ intMetaExt[:rationales] << 'The set of data elements contained within this class element ' +
29
+ 'represents an attempt to provide better documentation of ' +
30
+ 'taxonomic sources, procedures, and treatments.'
31
+
32
+ # source information
33
+ intContactRole[:contactID] = 'ADIwgBio'
34
+ intContactRole[:roleName] = 'resourceProvider'
35
+ intMetaExt[:extSources] << intContactRole
36
+
37
+ return intMetaExt
38
+ end
39
+
40
+ end
@@ -0,0 +1,119 @@
1
+ # unpack metadata information block
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2014-04-24 original script - moved from module_metadata
6
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
7
+ # Stan Smith 2014-09-19 changed metadata identifier type resource identifier json 0.8.0
8
+ # Stan Smith 2014-09-19 changed parent metadata identifier type citation json 0.8.0
9
+
10
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
11
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
12
+ require ADIWG::Mdtranslator.reader_module('module_resourceMaintenance', $response[:readerVersionUsed])
13
+ require ADIWG::Mdtranslator.reader_module('module_metadataExtension', $response[:readerVersionUsed])
14
+ require ADIWG::Mdtranslator.reader_module('module_resourceIdentifier', $response[:readerVersionUsed])
15
+ require ADIWG::Mdtranslator.reader_module('module_citation', $response[:readerVersionUsed])
16
+
17
+ module Adiwg_MetadataInfo
18
+
19
+ def self.unpack(hMetadata)
20
+
21
+ # instance classes needed in script
22
+ intMetadataClass = InternalMetadata.new
23
+ intMetadataInfo = intMetadataClass.newMetadataInfo
24
+ hMetadataInfo = hMetadata['metadataInfo']
25
+
26
+ # metadata - metadata identifier
27
+ if hMetadataInfo.has_key?('metadataIdentifier')
28
+ hMetadataId = hMetadataInfo['metadataIdentifier']
29
+ unless hMetadataId.empty?
30
+ intMetadataInfo[:metadataId] = Adiwg_ResourceIdentifier.unpack(hMetadataId)
31
+ end
32
+ end
33
+
34
+ # metadata - parent metadata identifier
35
+ if hMetadataInfo.has_key?('parentMetadata')
36
+ hParent = hMetadataInfo['parentMetadata']
37
+ unless hParent.empty?
38
+ intMetadataInfo[:parentMetadata] = Adiwg_Citation.unpack(hParent)
39
+ end
40
+ end
41
+
42
+ # metadata - scope - from codeList
43
+ if hMetadataInfo.has_key?('metadataScope')
44
+ aMetadataScope = hMetadataInfo['metadataScope']
45
+ unless aMetadataScope.empty?
46
+ intMetadataInfo[:metadataScope] = aMetadataScope
47
+ end
48
+ end
49
+
50
+ # metadata - metadata contacts, custodians
51
+ if hMetadataInfo.has_key?('metadataContact')
52
+ aCust = hMetadataInfo['metadataContact']
53
+ unless aCust.empty?
54
+ aCust.each do |rParty|
55
+ intMetadataInfo[:metadataCustodians] << Adiwg_ResponsibleParty.unpack(rParty)
56
+ end
57
+ end
58
+ end
59
+
60
+ # metadata - creation date
61
+ if hMetadataInfo.has_key?('metadataCreationDate')
62
+ s = hMetadataInfo['metadataCreationDate']
63
+ if s != ''
64
+ hDateTime = Adiwg_DateTime.unpack(s)
65
+ hDateTime[:dateType] = 'publication'
66
+ intMetadataInfo[:metadataCreateDate] = hDateTime
67
+ end
68
+ end
69
+
70
+ # metadata - date of last metadata update
71
+ if hMetadataInfo.has_key?('metadataLastUpdate')
72
+ s = hMetadataInfo['metadataLastUpdate']
73
+ if s != ''
74
+ hDateTime = Adiwg_DateTime.unpack(s)
75
+ hDateTime[:dateType] = 'revision'
76
+ intMetadataInfo[:metadataUpdateDate] = hDateTime
77
+ end
78
+ end
79
+
80
+ # metadata - metadata URI
81
+ if hMetadataInfo.has_key?('metadataUri')
82
+ s = hMetadataInfo['metadataUri']
83
+ if s != ''
84
+ intMetadataInfo[:metadataURI] = s
85
+ end
86
+ end
87
+
88
+ # metadata - status
89
+ if hMetadataInfo.has_key?('metadataStatus')
90
+ s = hMetadataInfo['metadataStatus']
91
+ if s != ''
92
+ intMetadataInfo[:metadataStatus] = s
93
+ end
94
+ end
95
+
96
+ # metadata - metadata maintenance info
97
+ if hMetadataInfo.has_key?('metadataMaintenance')
98
+ hMetaMaint = hMetadataInfo['metadataMaintenance']
99
+ unless hMetaMaint.empty?
100
+ intMetadataInfo[:maintInfo] = Adiwg_ResourceMaintenance.unpack(hMetaMaint)
101
+ end
102
+ end
103
+
104
+ # metadata - extension info - if biological extension
105
+ if hMetadata.has_key?('resourceInfo')
106
+ resourceInfo = hMetadata['resourceInfo']
107
+ if resourceInfo.has_key?('taxonomy')
108
+ hTaxonomy = resourceInfo['taxonomy']
109
+ unless hTaxonomy.empty?
110
+ intMetadataInfo[:extensions] << Adiwg_MetadataExtension.addExtensionISObio
111
+ end
112
+ end
113
+ end
114
+
115
+ return intMetadataInfo
116
+
117
+ end
118
+
119
+ end
@@ -0,0 +1,62 @@
1
+ # unpack online resources
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-09-25 original script
6
+ # Stan Smith 2014-04-23 modified for json 0.3.0
7
+ # Stan Smith 2014-08-18 removed doi section for json 0.6.0
8
+ # Stan Smith 2014-08-21 changed url to uri for json 0.6.0
9
+
10
+ module Adiwg_OnlineResource
11
+
12
+ def self.unpack(hOlResource)
13
+
14
+ # instance classes needed in script
15
+ intMetadataClass = InternalMetadata.new
16
+ intOLRes = intMetadataClass.newOnlineResource
17
+
18
+ # unpack the online resource
19
+ # resource - web link
20
+ if hOlResource.has_key?('uri')
21
+ s = hOlResource['uri']
22
+ if s != ''
23
+ intOLRes[:olResURI] = s
24
+ end
25
+ end
26
+
27
+ # resource - web link protocol
28
+ if hOlResource.has_key?('protocol')
29
+ s = hOlResource['protocol']
30
+ if s != ''
31
+ intOLRes[:olResProtocol] = s
32
+ end
33
+ end
34
+
35
+ # resource - web link name
36
+ if hOlResource.has_key?('name')
37
+ s = hOlResource['name']
38
+ if s != ''
39
+ intOLRes[:olResName] = s
40
+ end
41
+ end
42
+
43
+ # resource - web link description
44
+ if hOlResource.has_key?('description')
45
+ s = hOlResource['description']
46
+ if s != ''
47
+ intOLRes[:olResDesc] = s
48
+ end
49
+ end
50
+
51
+ # resource - web link function
52
+ if hOlResource.has_key?('function')
53
+ s = hOlResource['function']
54
+ if s != ''
55
+ intOLRes[:olResFunction] = s
56
+ end
57
+ end
58
+
59
+ return intOLRes
60
+ end
61
+
62
+ end
@@ -0,0 +1,59 @@
1
+ # unpack phone
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-12-16 original script
6
+ # Stan Smith 2014-05-14 combine phone service types
7
+
8
+ module Adiwg_Phone
9
+
10
+ def self.unpack(hPhone)
11
+
12
+ # instance classes needed in script
13
+ intMetadataClass = InternalMetadata.new
14
+ aPhones = Array.new
15
+
16
+ # create a separate phone for each phone service type
17
+ # if service is missing, default service to 'voice'
18
+ if hPhone.has_key?('service')
19
+ aService = hPhone['service']
20
+ else
21
+ aService = ['voice']
22
+ end
23
+
24
+ if aService.empty?
25
+ aService = ['voice']
26
+ end
27
+
28
+ # if service is nil, default service to 'voice'
29
+ aService.each do |phService|
30
+ intPhone = intMetadataClass.newPhone
31
+
32
+ # phone - service
33
+ intPhone[:phoneServiceType] = phService
34
+
35
+ # phone - name
36
+ if hPhone.has_key?('phoneName')
37
+ s = hPhone['phoneName']
38
+ unless s.nil?
39
+ intPhone[:phoneName] = s
40
+ end
41
+ end
42
+
43
+ # phone - number
44
+ if hPhone.has_key?('phoneNumber')
45
+ s = hPhone['phoneNumber']
46
+ unless s.nil?
47
+ intPhone[:phoneNumber] = s
48
+ end
49
+ end
50
+
51
+ aPhones << intPhone
52
+
53
+ end
54
+
55
+ return aPhones
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,25 @@
1
+ # unpack point
2
+ # point is coded in GeoJSON
3
+ # Reader - ADIwg JSON V1 to internal data structure
4
+
5
+ # History:
6
+ # Stan Smith 2013-11-07 original script
7
+ # Stan Smith 2014-04-30 reorganized for json schema 0.3.0
8
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
9
+
10
+ require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
11
+
12
+ module Adiwg_Point
13
+
14
+ def self.unpack(aCoords,geoType)
15
+ intMetadataClass = InternalMetadata.new
16
+ intPoint = intMetadataClass.newGeometry
17
+
18
+ intPoint[:geoType] = geoType
19
+ intPoint[:geometry] = aCoords
20
+ intPoint[:dimension] = Adiwg_Coordinates.getDimension(aCoords)
21
+
22
+ return intPoint
23
+ end
24
+
25
+ end
@@ -0,0 +1,55 @@
1
+ # unpack polygon
2
+ # point is coded in GeoJSON
3
+ # Reader - ADIwg JSON V1 to internal data structure
4
+
5
+ # History:
6
+ # Stan Smith 2013-11-18 original script
7
+ # Stan Smith 2014-04-30 reorganized for json schema 0.3.0
8
+ # Stan Smith 2014-05-23 modified to handle MultiPolygon objects
9
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
10
+
11
+ require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
12
+
13
+ module Adiwg_Polygon
14
+
15
+ def self.unpack(aCoords, geoType)
16
+ intMetadataClass = InternalMetadata.new
17
+ intGeometry = intMetadataClass.newGeometry
18
+ intGeometry[:geoType] = geoType
19
+
20
+ # polygon - coordinate(s)
21
+ if geoType == 'Polygon'
22
+ intGeometry[:geometry] = splitPolygons(aCoords)
23
+ intGeometry[:dimension] = Adiwg_Coordinates.getDimension(intGeometry[:geometry][:exteriorRing])
24
+ elsif geoType == 'MultiPolygon'
25
+ aPolySets = Array.new
26
+ aCoords.each do |aPolygonSet|
27
+ aPolySets << splitPolygons(aPolygonSet)
28
+ end
29
+ intGeometry[:geometry] = aPolySets
30
+ end
31
+
32
+ return intGeometry
33
+ end
34
+
35
+ def self.splitPolygons(aPolySet)
36
+ intMetadataClass = InternalMetadata.new
37
+ intPolygonSet = intMetadataClass.newPolygonSet
38
+
39
+ # first polygon in set is a bounding exterior ring
40
+ # all subsequent polygons are exclusion rings
41
+ i = 0
42
+ aPolySet.each do |aPolygon|
43
+ i += 1
44
+ if i == 1
45
+ intPolygonSet[:exteriorRing] = aPolygon
46
+ else
47
+ intPolygonSet[:exclusionRings] << aPolygon
48
+ end
49
+
50
+ end
51
+
52
+ return intPolygonSet
53
+ end
54
+
55
+ end
@@ -0,0 +1,64 @@
1
+ # unpack process step
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-26 original script
6
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
7
+
8
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
9
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
10
+
11
+ module Adiwg_ProcessStep
12
+
13
+ def self.unpack(hProcStep)
14
+
15
+ # instance classes needed in script
16
+ intMetadataClass = InternalMetadata.new
17
+ intDataPStep = intMetadataClass.newDataProcessStep
18
+
19
+ # process step - step ID
20
+ if hProcStep.has_key?('stepId')
21
+ s = hProcStep['stepId']
22
+ if s != ''
23
+ intDataPStep[:stepID] = s
24
+ end
25
+ end
26
+
27
+ # process step - description
28
+ if hProcStep.has_key?('description')
29
+ s = hProcStep['description']
30
+ if s != ''
31
+ intDataPStep[:stepDescription] = s
32
+ end
33
+ end
34
+
35
+ # process step - rationale
36
+ if hProcStep.has_key?('rationale')
37
+ s = hProcStep['rationale']
38
+ if s != ''
39
+ intDataPStep[:stepRationale] = s
40
+ end
41
+ end
42
+
43
+ # process step - dateTime
44
+ if hProcStep.has_key?('dateTime')
45
+ s = hProcStep['dateTime']
46
+ if s != ''
47
+ intDataPStep[:stepDateTime] = Adiwg_DateTime.unpack(s)
48
+ end
49
+ end
50
+
51
+ # process step - step processors
52
+ if hProcStep.has_key?('processor')
53
+ aProcessors = hProcStep['processor']
54
+ unless aProcessors.empty?
55
+ aProcessors.each do |processor|
56
+ intDataPStep[:stepProcessors] << Adiwg_ResponsibleParty.unpack(processor)
57
+ end
58
+ end
59
+ end
60
+
61
+ return intDataPStep
62
+ end
63
+
64
+ end
@@ -0,0 +1,42 @@
1
+ # unpack resolution
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-26 original script
6
+
7
+ module Adiwg_Resolution
8
+
9
+ def self.unpack(hResolution)
10
+
11
+ # instance classes needed in script
12
+ intMetadataClass = InternalMetadata.new
13
+ intResolution = intMetadataClass.newResolution
14
+
15
+ # resolution - equivalent scale
16
+ if hResolution.has_key?('equivalentScale')
17
+ s = hResolution['equivalentScale']
18
+ if s != ''
19
+ intResolution[:equivalentScale] = s
20
+ end
21
+ end
22
+
23
+ # resolution - distance
24
+ if hResolution.has_key?('distance')
25
+ s = hResolution['distance']
26
+ if s != ''
27
+ intResolution[:distance] = s
28
+ end
29
+ end
30
+
31
+ # resolution - uom
32
+ if hResolution.has_key?('uom')
33
+ s = hResolution['uom']
34
+ if s != ''
35
+ intResolution[:distanceUOM] = s
36
+ end
37
+ end
38
+
39
+ return intResolution
40
+ end
41
+
42
+ end
@@ -0,0 +1,35 @@
1
+ # unpack resource formats
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-26 original script
6
+ # Stan Smith 2013-11-27 modified to process single resource format rather than array
7
+
8
+ module Adiwg_ResourceFormat
9
+
10
+ def self.unpack(hResFormat)
11
+
12
+ # instance classes needed in script
13
+ intMetadataClass = InternalMetadata.new
14
+ rFormat = intMetadataClass.newResourceFormat
15
+
16
+ # format - name
17
+ if hResFormat.has_key?('formatName')
18
+ s = hResFormat['formatName']
19
+ if s != ''
20
+ rFormat[:formatName] = s
21
+ end
22
+ end
23
+
24
+ # format - version
25
+ if hResFormat.has_key?('version')
26
+ s = hResFormat['version']
27
+ if s != ''
28
+ rFormat[:formatVersion] = s
29
+ end
30
+ end
31
+
32
+ return rFormat
33
+ end
34
+
35
+ end
@@ -0,0 +1,49 @@
1
+ # unpack resource identifier
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2014-05-28 original script
6
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
7
+ # Stan Smith 2014-08-18 added type to identifier schema 0.6.0
8
+
9
+ require ADIWG::Mdtranslator.reader_module('module_citation', $response[:readerVersionUsed])
10
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
11
+ require ADIWG::Mdtranslator.reader_module('module_onlineResource', $response[:readerVersionUsed])
12
+
13
+ module Adiwg_ResourceIdentifier
14
+
15
+ def self.unpack(hResID)
16
+
17
+ # instance classes needed in script
18
+ intMetadataClass = InternalMetadata.new
19
+ intResID = intMetadataClass.newResourceId
20
+
21
+ # resource identifier - identifier
22
+ if hResID.has_key?('identifier')
23
+ s = hResID['identifier']
24
+ if s != ''
25
+ intResID[:identifier] = s
26
+ end
27
+ end
28
+
29
+ # resource identifier - identifier type
30
+ if hResID.has_key?('type')
31
+ s = hResID['type']
32
+ if s != ''
33
+ intResID[:identifierType] = s
34
+ end
35
+ end
36
+
37
+ # resource identifier - authority (expressed as a citation)
38
+ if hResID.has_key?('authority')
39
+ hCitation = hResID['authority']
40
+ unless hCitation.empty?
41
+ intResID[:identifierCitation] = Adiwg_Citation.unpack(hCitation)
42
+ end
43
+ end
44
+
45
+ return intResID
46
+
47
+ end
48
+
49
+ end