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