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,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