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