adiwg-mdtranslator 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +24 -0
  6. data/README.md +31 -0
  7. data/Rakefile +13 -0
  8. data/adiwg-mdtranslator.gemspec +31 -0
  9. data/bin/mdtranslator +164 -0
  10. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
  11. data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
  12. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
  13. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
  14. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
  15. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
  16. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
  17. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
  18. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
  19. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
  20. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
  21. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
  22. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
  23. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
  24. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
  25. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
  26. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
  27. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
  28. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
  29. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
  30. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
  31. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
  32. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
  33. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
  34. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
  35. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
  36. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
  37. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
  38. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
  39. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
  40. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
  41. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
  42. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
  43. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
  44. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
  45. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
  46. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
  47. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
  48. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
  49. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
  50. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
  51. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
  52. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
  53. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
  54. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
  55. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
  56. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
  57. data/lib/adiwg/mdtranslator/validator.rb +43 -0
  58. data/lib/adiwg/mdtranslator/version.rb +7 -0
  59. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
  60. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
  61. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
  62. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
  63. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
  64. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
  65. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
  66. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
  67. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
  68. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
  69. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
  70. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
  71. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
  72. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
  73. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
  74. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
  75. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
  76. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
  77. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
  78. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
  79. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
  80. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
  81. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
  82. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
  83. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
  84. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
  85. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
  86. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
  87. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
  88. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
  89. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
  90. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
  91. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
  92. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
  93. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
  94. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
  95. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
  96. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
  97. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
  98. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
  99. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
  100. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
  101. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
  102. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
  103. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
  104. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
  105. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
  106. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
  107. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
  108. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
  109. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
  110. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
  111. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
  112. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
  113. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
  114. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
  115. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
  116. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
  117. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
  118. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
  119. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
  120. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
  121. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
  122. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
  123. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
  124. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
  125. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
  126. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
  127. data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
  128. data/lib/adiwg/mdtranslator.rb +97 -0
  129. data/lib/adiwg-mdtranslator.rb +1 -0
  130. data/mdtranslator.rb +178 -0
  131. data/test/adiwgJson_full_test_example.json +1717 -0
  132. data/test/adiwgJson_template.json +977 -0
  133. data/test/dev.rb +32 -0
  134. data/test/tc_translation.rb +31 -0
  135. 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