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,51 @@
|
|
1
|
+
# ISO <<Class>> MD_DigitalTransferOptions
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-09-26 original script
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
7
|
+
|
8
|
+
require 'class_onlineResource'
|
9
|
+
require 'class_medium'
|
10
|
+
|
11
|
+
class MD_DigitalTransferOptions
|
12
|
+
|
13
|
+
def initialize(xml)
|
14
|
+
@xml = xml
|
15
|
+
end
|
16
|
+
|
17
|
+
def writeXML(transOption)
|
18
|
+
|
19
|
+
# classes used
|
20
|
+
olResClass = CI_OnlineResource.new(@xml)
|
21
|
+
medClass = MD_Medium.new(@xml)
|
22
|
+
|
23
|
+
@xml.tag!('gmd:MD_DigitalTransferOptions') do
|
24
|
+
|
25
|
+
# digital transfer options - online [] - CI_OnlineResource
|
26
|
+
aOnTranOpts = transOption[:online]
|
27
|
+
if !aOnTranOpts.empty?
|
28
|
+
aOnTranOpts.each do |olTranOpt|
|
29
|
+
@xml.tag!('gmd:onLine') do
|
30
|
+
olResClass.writeXML(olTranOpt)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
elsif $showAllTags
|
34
|
+
@xml.tag!('gmd:onLine')
|
35
|
+
end
|
36
|
+
|
37
|
+
# digital transfer options - offline - MD_Medium
|
38
|
+
hOffTranOpt = transOption[:offline]
|
39
|
+
if !hOffTranOpt.empty?
|
40
|
+
@xml.tag!('gmd:offLine') do
|
41
|
+
medClass.writeXML(hOffTranOpt)
|
42
|
+
end
|
43
|
+
elsif $showAllTags
|
44
|
+
@xml.tag!('gmd:offLine')
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# ISO <<Class>> MD_Distribution
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-09-25 original script
|
6
|
+
# Stan Smith 2014-07-09 modify require statements to function in RubyGem structure
|
7
|
+
|
8
|
+
require 'class_distributor'
|
9
|
+
|
10
|
+
class MD_Distribution
|
11
|
+
|
12
|
+
def initialize(xml)
|
13
|
+
@xml = xml
|
14
|
+
end
|
15
|
+
|
16
|
+
def writeXML(aDistributors)
|
17
|
+
|
18
|
+
# classes used
|
19
|
+
distributorClass = MD_Distributor.new(@xml)
|
20
|
+
|
21
|
+
@xml.tag!('gmd:MD_Distribution') do
|
22
|
+
|
23
|
+
# distribution - distributor - required
|
24
|
+
unless aDistributors.empty?
|
25
|
+
aDistributors.each do |hDistributor|
|
26
|
+
@xml.tag!('gmd:distributor') do
|
27
|
+
distributorClass.writeXML(hDistributor)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# ISO <<Class>> MD_Distributor
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-09-25 original script
|
6
|
+
# Stan Smith 2014-07-09 modify require statements to function in RubyGem structure
|
7
|
+
|
8
|
+
require 'class_responsibleParty'
|
9
|
+
require 'class_standardOrderProcess'
|
10
|
+
require 'class_format'
|
11
|
+
require 'class_digitalTransferOptions'
|
12
|
+
|
13
|
+
class MD_Distributor
|
14
|
+
|
15
|
+
def initialize(xml)
|
16
|
+
@xml = xml
|
17
|
+
end
|
18
|
+
|
19
|
+
def writeXML(distributor)
|
20
|
+
|
21
|
+
# classes used
|
22
|
+
rPartyClass = CI_ResponsibleParty.new(@xml)
|
23
|
+
sOrderProcClass = MD_StandardOrderProcess.new(@xml)
|
24
|
+
rFormatClass = MD_Format.new(@xml)
|
25
|
+
dTranOptClass = MD_DigitalTransferOptions.new(@xml)
|
26
|
+
|
27
|
+
@xml.tag!('gmd:MD_Distributor') do
|
28
|
+
|
29
|
+
# distributor - distributor contact - CI_ResponsibleParty - required
|
30
|
+
hResParty = distributor[:distContact]
|
31
|
+
if hResParty.empty?
|
32
|
+
@xml.tag!('gmd:distributorContact', {'gco:nilReason' => 'missing'})
|
33
|
+
else
|
34
|
+
@xml.tag!('gmd:distributorContact') do
|
35
|
+
rPartyClass.writeXML(hResParty)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# distributor - distribution order process []
|
40
|
+
aDistOrderProc = distributor[:distOrderProc]
|
41
|
+
if !aDistOrderProc.empty?
|
42
|
+
aDistOrderProc.each do |distOrder|
|
43
|
+
@xml.tag!('gmd:distributionOrderProcess') do
|
44
|
+
sOrderProcClass.writeXML(distOrder)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
elsif $showAllTags
|
48
|
+
@xml.tag!('gmd:distributionOrderProcess')
|
49
|
+
end
|
50
|
+
|
51
|
+
# distributor - distributor format []
|
52
|
+
aDistFormats = distributor[:distFormat]
|
53
|
+
if !aDistFormats.empty?
|
54
|
+
aDistFormats.each do |dFormat|
|
55
|
+
@xml.tag!('gmd:distributorFormat') do
|
56
|
+
rFormatClass.writeXML(dFormat)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
elsif $showAllTags
|
60
|
+
@xml.tag!('gmd:distributorFormat')
|
61
|
+
end
|
62
|
+
|
63
|
+
# distributor - distributor transfer options []
|
64
|
+
aDistTransOpts = distributor[:distTransOption]
|
65
|
+
if !aDistTransOpts.empty?
|
66
|
+
aDistTransOpts.each do |dTransOpt|
|
67
|
+
@xml.tag!('gmd:distributorTransferOptions') do
|
68
|
+
dTranOptClass.writeXML(dTransOpt)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
elsif $showAllTags
|
72
|
+
@xml.tag!('gmd:distributorTransferOptions')
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# ISO <<Class>> EX_Extent
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-11-01 original script
|
6
|
+
# Stan Smith 2013-11-15 add temporal elements
|
7
|
+
# Stan Smith 2013-11-15 add vertical elements
|
8
|
+
# Stan Smith 2014-05-29 changes for json schema version 0.5.0
|
9
|
+
# Stan Smith 2014-05-29 ... added new class for geographicElement
|
10
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
11
|
+
|
12
|
+
require 'class_geographicElement'
|
13
|
+
require 'class_geographicDescription'
|
14
|
+
require 'class_temporalExtent'
|
15
|
+
require 'class_verticalExtent'
|
16
|
+
|
17
|
+
class EX_Extent
|
18
|
+
|
19
|
+
def initialize(xml)
|
20
|
+
@xml = xml
|
21
|
+
end
|
22
|
+
|
23
|
+
def writeXML(hExtent)
|
24
|
+
|
25
|
+
# classes used by MD_Metadata
|
26
|
+
tempExtClass = EX_TemporalExtent.new(@xml)
|
27
|
+
vertExtClass = EX_VerticalExtent.new(@xml)
|
28
|
+
geoEleClass = GeographicElement.new(@xml)
|
29
|
+
geoEleIdClass = EX_GeographicDescription.new(@xml)
|
30
|
+
|
31
|
+
@xml.tag!('gmd:EX_Extent') do
|
32
|
+
|
33
|
+
# extent - description
|
34
|
+
s = hExtent[:extDesc]
|
35
|
+
if !s.nil?
|
36
|
+
@xml.tag!('gmd:description') do
|
37
|
+
@xml.tag!('gco:CharacterString',s)
|
38
|
+
end
|
39
|
+
elsif $showAllTags
|
40
|
+
@xml.tag!('gmd:description')
|
41
|
+
end
|
42
|
+
|
43
|
+
# extent - geographic element - for geometry
|
44
|
+
aGeoElements = hExtent[:extGeoElements]
|
45
|
+
if !aGeoElements.empty?
|
46
|
+
aGeoElements.each do |hGeoElement|
|
47
|
+
@xml.tag!('gmd:geographicElement') do
|
48
|
+
geoEleClass.writeXML(hGeoElement)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
elsif $showAllTags
|
52
|
+
@xml.tag!('gmd:geographicElement')
|
53
|
+
end
|
54
|
+
|
55
|
+
# extent - geographic element - for identifier
|
56
|
+
aGeoElements = hExtent[:extIdElements]
|
57
|
+
if !aGeoElements.empty?
|
58
|
+
aGeoElements.each do |hGeoElement|
|
59
|
+
@xml.tag!('gmd:geographicElement') do
|
60
|
+
geoEleIdClass.writeXML(hGeoElement)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
elsif $showAllTags
|
64
|
+
@xml.tag!('gmd:geographicElement')
|
65
|
+
end
|
66
|
+
|
67
|
+
# extent - temporal element
|
68
|
+
aTempElements = hExtent[:extTempElements]
|
69
|
+
if !aTempElements.empty?
|
70
|
+
aTempElements.each do |hTempElement|
|
71
|
+
@xml.tag!('gmd:temporalElement') do
|
72
|
+
tempExtClass.writeXML(hTempElement)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
elsif $showAllTags
|
76
|
+
@xml.tag!('gmd:temporalElement')
|
77
|
+
end
|
78
|
+
|
79
|
+
# extent - vertical element
|
80
|
+
aVertElements = hExtent[:extVertElements]
|
81
|
+
if !aVertElements.empty?
|
82
|
+
aVertElements.each do |hVertElement|
|
83
|
+
@xml.tag!('gmd:verticalElement') do
|
84
|
+
vertExtClass.writeXML(hVertElement)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
elsif $showAllTags
|
88
|
+
@xml.tag!('gmd:verticalElement')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# ISO <<Class>> MD_Format
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-08-26 original script
|
6
|
+
|
7
|
+
class MD_Format
|
8
|
+
|
9
|
+
def initialize(xml)
|
10
|
+
@xml = xml
|
11
|
+
end
|
12
|
+
|
13
|
+
def writeXML(rFormat)
|
14
|
+
|
15
|
+
@xml.tag!('gmd:MD_Format') do
|
16
|
+
|
17
|
+
# format - name - required
|
18
|
+
s = rFormat[:formatName]
|
19
|
+
if s.nil?
|
20
|
+
@xml.tag!('gmd:name',{'gco:nilReason'=>'missing'})
|
21
|
+
else
|
22
|
+
@xml.tag!('gmd:name') do
|
23
|
+
@xml.tag!('gco:CharacterString',s)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# format - version - required
|
28
|
+
s = rFormat[:formatVersion]
|
29
|
+
if s.nil?
|
30
|
+
@xml.tag!('gmd:version',{'gco:nilReason'=>'unknown'})
|
31
|
+
else
|
32
|
+
@xml.tag!('gmd:version') do
|
33
|
+
@xml.tag!('gco:CharacterString',s)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# ISO <<Class>> GenericMetaData
|
2
|
+
# writer output in XML
|
3
|
+
# generic metadata only supports ...
|
4
|
+
# time instant
|
5
|
+
# time period
|
6
|
+
|
7
|
+
# History:
|
8
|
+
# Stan Smith 2013-11-04 original script
|
9
|
+
# Stan Smith 2014-07-08 class no longer used
|
10
|
+
# ... use replaced by creating new geographic extents for geometries
|
11
|
+
# ... containing supplemental identifier, temporal, and vertical information
|
12
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
13
|
+
|
14
|
+
require 'module_dateTimeFun'
|
15
|
+
require 'class_timeInstant'
|
16
|
+
require 'class_timePeriod'
|
17
|
+
|
18
|
+
class GenericMetaData
|
19
|
+
|
20
|
+
def initialize(xml)
|
21
|
+
@xml = xml
|
22
|
+
end
|
23
|
+
|
24
|
+
def writeXML(aTempExt)
|
25
|
+
|
26
|
+
# classes used
|
27
|
+
timeIClass = TimeInstant.new(@xml)
|
28
|
+
timePClass = TimePeriod.new(@xml)
|
29
|
+
|
30
|
+
@xml.tag!('gml:GenericMetaData') do
|
31
|
+
|
32
|
+
aTempExt.each do |hTempExt|
|
33
|
+
|
34
|
+
# metadata - data
|
35
|
+
hTimeD = hTempExt[:date]
|
36
|
+
unless hTimeD.empty?
|
37
|
+
date = hTimeD[:dateTime]
|
38
|
+
dateResolution = hTimeD[:dateResolution]
|
39
|
+
s = AdiwgDateTimeFun.stringDateFromDateTime(date, dateResolution)
|
40
|
+
if s != 'ERROR'
|
41
|
+
@xml.tag!('gco:Date', s)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# metadata - time instant
|
46
|
+
hTimeI = hTempExt[:timeInstant]
|
47
|
+
unless hTimeI.empty?
|
48
|
+
timeIClass.writeXML(hTimeI)
|
49
|
+
end
|
50
|
+
|
51
|
+
# metadata - time period
|
52
|
+
hTimeP = hTempExt[:timePeriod]
|
53
|
+
unless hTimeP.empty?
|
54
|
+
timePClass.writeXML(hTimeP)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# ISO <<Class>> EX_GeographicBoundingBox
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-11-01 original script
|
6
|
+
# Stan Smith 2014-05-30 hElement attributes changed for version 0.5.0
|
7
|
+
|
8
|
+
class EX_GeographicBoundingBox
|
9
|
+
|
10
|
+
def initialize(xml)
|
11
|
+
@xml = xml
|
12
|
+
end
|
13
|
+
|
14
|
+
def writeXML(hElement)
|
15
|
+
|
16
|
+
extentType = hElement[:elementIncludeData]
|
17
|
+
hBBox = hElement[:elementGeometry][:geometry]
|
18
|
+
|
19
|
+
@xml.tag!('gmd:EX_GeographicBoundingBox') do
|
20
|
+
|
21
|
+
# bounding box - extent type - required
|
22
|
+
if extentType.nil?
|
23
|
+
@xml.tag!('gmd:extentTypeCode',{'gco:nilReason'=>'missing'})
|
24
|
+
else
|
25
|
+
@xml.tag!('gmd:extentTypeCode') do
|
26
|
+
@xml.tag!('gco:Boolean',extentType)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# bounding box - west longitude - required
|
31
|
+
s = hBBox[:westLong]
|
32
|
+
if s.nil?
|
33
|
+
@xml.tag!('gmd:westBoundLongitude',{'gco:nilReason'=>'missing'})
|
34
|
+
else
|
35
|
+
@xml.tag!('gmd:westBoundLongitude') do
|
36
|
+
@xml.tag!('gco:Decimal',s)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# bounding box - east longitude - required
|
41
|
+
s = hBBox[:eastLong]
|
42
|
+
if s.nil?
|
43
|
+
@xml.tag!('gmd:eastBoundLongitude',{'gco:nilReason'=>'missing'})
|
44
|
+
else
|
45
|
+
@xml.tag!('gmd:eastBoundLongitude') do
|
46
|
+
@xml.tag!('gco:Decimal',s)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# bounding box - south latitude - required
|
51
|
+
s = hBBox[:southLat]
|
52
|
+
if s.nil?
|
53
|
+
@xml.tag!('gmd:southBoundLatitude',{'gco:nilReason'=>'missing'})
|
54
|
+
else
|
55
|
+
@xml.tag!('gmd:southBoundLatitude') do
|
56
|
+
@xml.tag!('gco:Decimal',s)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# bounding box - north latitude - required
|
61
|
+
s = hBBox[:northLat]
|
62
|
+
if s.nil?
|
63
|
+
@xml.tag!('gmd:northBoundLatitude',{'gco:nilReason'=>'missing'})
|
64
|
+
else
|
65
|
+
@xml.tag!('gmd:northBoundLatitude') do
|
66
|
+
@xml.tag!('gco:Decimal',s)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# ISO <<Class>> EX_GeographicDescription
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-06-03 original script
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
7
|
+
|
8
|
+
require 'class_identifier'
|
9
|
+
|
10
|
+
class EX_GeographicDescription
|
11
|
+
|
12
|
+
def initialize(xml)
|
13
|
+
@xml = xml
|
14
|
+
end
|
15
|
+
|
16
|
+
def writeXML(hElement)
|
17
|
+
|
18
|
+
# classes used in MD_Metadata
|
19
|
+
idClass = MD_Identifier.new(@xml)
|
20
|
+
|
21
|
+
@xml.tag!('gmd:EX_GeographicDescription') do
|
22
|
+
@xml.tag!('gmd:geographicIdentifier') do
|
23
|
+
idClass.writeXML(hElement)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# ISO <<Class>> geographicElement {abstract}
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2014-05-29 original script
|
6
|
+
# Stan Smith 2014-05-30 added multi-point, multi-linestring, multi-polygon support
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
8
|
+
|
9
|
+
require 'class_geographicBoundingBox'
|
10
|
+
require 'class_boundingPolygon'
|
11
|
+
|
12
|
+
class GeographicElement
|
13
|
+
|
14
|
+
def initialize(xml)
|
15
|
+
@xml = xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def writeXML(hGeoElement)
|
19
|
+
|
20
|
+
# classes used by MD_Metadata
|
21
|
+
geoBBoxClass = EX_GeographicBoundingBox.new(@xml)
|
22
|
+
geoBPolyClass = EX_BoundingPolygon.new(@xml)
|
23
|
+
|
24
|
+
geoType = hGeoElement[:elementGeometry][:geoType]
|
25
|
+
case geoType
|
26
|
+
when 'BoundingBox'
|
27
|
+
geoBBoxClass.writeXML(hGeoElement)
|
28
|
+
when 'Point', 'LineString', 'Polygon', 'MultiPoint', 'MultiLineString', 'MultiPolygon'
|
29
|
+
geoBPolyClass.writeXML(hGeoElement)
|
30
|
+
when 'MultiGeometry'
|
31
|
+
geoBPolyClass.writeXML(hGeoElement)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# ISO <<Class>> MD_Identifier
|
2
|
+
# writer
|
3
|
+
# output for ISO 19115-2 XML
|
4
|
+
|
5
|
+
# History:
|
6
|
+
# Stan Smith 2014-05-16 original script
|
7
|
+
# Stan Smith 2014-05-28 revised for json schema 0.5.0
|
8
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
9
|
+
|
10
|
+
require 'class_citation'
|
11
|
+
|
12
|
+
class MD_Identifier
|
13
|
+
|
14
|
+
def initialize(xml)
|
15
|
+
@xml = xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def writeXML(hResID)
|
19
|
+
|
20
|
+
# the authority for the identifier is a citation block
|
21
|
+
|
22
|
+
# classes used in MD_Metadata
|
23
|
+
citationClass = CI_Citation.new(@xml)
|
24
|
+
|
25
|
+
@xml.tag!('gmd:MD_Identifier') do
|
26
|
+
|
27
|
+
# identifier - authority
|
28
|
+
hCitation = hResID[:identifierCitation]
|
29
|
+
if !hCitation.empty?
|
30
|
+
@xml.tag!('gmd:authority') do
|
31
|
+
citationClass.writeXML(hCitation)
|
32
|
+
end
|
33
|
+
elsif $showAllTags
|
34
|
+
@xml.tag!('gmd:authority')
|
35
|
+
end
|
36
|
+
|
37
|
+
# identity - code - required
|
38
|
+
s = hResID[:identifier]
|
39
|
+
if !s.nil?
|
40
|
+
@xml.tag!('gmd:code') do
|
41
|
+
@xml.tag!('gco:CharacterString', s)
|
42
|
+
end
|
43
|
+
elsif $showAllTags
|
44
|
+
@xml.tag!('gmd:code')
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# ISO <<Class>> MD_Keyword
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-09-18 original script
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
7
|
+
# Stan Smith 2014-08-21 removed keyword thesaurus link; use citation onlineResource
|
8
|
+
|
9
|
+
require 'code_keywordType'
|
10
|
+
require 'class_citation'
|
11
|
+
|
12
|
+
class MD_Keywords
|
13
|
+
|
14
|
+
def initialize(xml)
|
15
|
+
@xml = xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def writeXML(hDKeyword)
|
19
|
+
|
20
|
+
# classes used
|
21
|
+
citationClass = CI_Citation.new(@xml)
|
22
|
+
keywordCode = MD_KeywordTypeCode.new(@xml)
|
23
|
+
|
24
|
+
@xml.tag!('gmd:MD_Keywords') do
|
25
|
+
|
26
|
+
# keywords - keyword - required
|
27
|
+
aKeywords = hDKeyword[:keyword]
|
28
|
+
if aKeywords.empty?
|
29
|
+
@xml.tag!('gmd:keyword', {'gco:nilReason' => 'missing'})
|
30
|
+
else
|
31
|
+
aKeywords.each do |keyword|
|
32
|
+
@xml.tag!('gmd:keyword') do
|
33
|
+
@xml.tag!('gco:CharacterString', keyword)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# keywords - type - MD_KeywordTypeCode
|
39
|
+
s = hDKeyword[:keywordType]
|
40
|
+
if !s.nil?
|
41
|
+
@xml.tag!('gmd:type') do
|
42
|
+
keywordCode.writeXML(s)
|
43
|
+
end
|
44
|
+
elsif $showAllTags
|
45
|
+
@xml.tag!('gmd:type')
|
46
|
+
end
|
47
|
+
|
48
|
+
hKeyCitation = hDKeyword[:keyTheCitation]
|
49
|
+
if !hKeyCitation.empty?
|
50
|
+
@xml.tag!('gmd:thesaurusName') do
|
51
|
+
citationClass.writeXML(hKeyCitation)
|
52
|
+
end
|
53
|
+
elsif $showAllTags
|
54
|
+
@xml.tag!('gmd:thesaurusName')
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# ISO <<Class>> MD_LegalConstraints
|
2
|
+
# writer output in XML
|
3
|
+
|
4
|
+
# History:
|
5
|
+
# Stan Smith 2013-11-01 original script
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
7
|
+
|
8
|
+
require 'code_restriction'
|
9
|
+
|
10
|
+
class MD_LegalConstraints
|
11
|
+
|
12
|
+
def initialize(xml)
|
13
|
+
@xml = xml
|
14
|
+
end
|
15
|
+
|
16
|
+
def writeXML(hLegalCons)
|
17
|
+
|
18
|
+
# classes used
|
19
|
+
restrictionCode = MD_RestrictionCode.new(@xml)
|
20
|
+
|
21
|
+
@xml.tag!('gmd:MD_LegalConstraints') do
|
22
|
+
|
23
|
+
# legal constraints - access constraints
|
24
|
+
aAccessCodes = hLegalCons[:accessCodes]
|
25
|
+
if !aAccessCodes.empty?
|
26
|
+
aAccessCodes.each do |code|
|
27
|
+
@xml.tag!('gmd:accessConstraints') do
|
28
|
+
restrictionCode.writeXML(code)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
elsif $showAllTags
|
32
|
+
@xml.tag!('gmd:accessConstraints')
|
33
|
+
end
|
34
|
+
|
35
|
+
# legal constraints - use constraints
|
36
|
+
aUseCodes = hLegalCons[:useCodes]
|
37
|
+
if !aUseCodes.empty?
|
38
|
+
aUseCodes.each do |code|
|
39
|
+
@xml.tag!('gmd:useConstraints') do
|
40
|
+
restrictionCode.writeXML(code)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
elsif $showAllTags
|
44
|
+
@xml.tag!('gmd:useConstraints')
|
45
|
+
end
|
46
|
+
|
47
|
+
# legal constraints - other constraints
|
48
|
+
aOtherCons = hLegalCons[:otherCons]
|
49
|
+
if !aOtherCons.empty?
|
50
|
+
aOtherCons.each do |con|
|
51
|
+
@xml.tag!('gmd:otherConstraints') do
|
52
|
+
@xml.tag!('gco:CharacterString',con)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
elsif $showAllTags
|
56
|
+
@xml.tag!('gmd:otherConstraints')
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|