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