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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +24 -0
- data/README.md +31 -0
- data/Rakefile +13 -0
- data/adiwg-mdtranslator.gemspec +31 -0
- data/bin/mdtranslator +164 -0
- data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
- data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
- data/lib/adiwg/mdtranslator/validator.rb +43 -0
- data/lib/adiwg/mdtranslator/version.rb +7 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
- data/lib/adiwg/mdtranslator.rb +97 -0
- data/lib/adiwg-mdtranslator.rb +1 -0
- data/mdtranslator.rb +178 -0
- data/test/adiwgJson_full_test_example.json +1717 -0
- data/test/adiwgJson_template.json +977 -0
- data/test/dev.rb +32 -0
- data/test/tc_translation.rb +31 -0
- 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
|