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