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,68 @@
1
+ # ISO <<Class>> MD_SecurityConstraints
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_classification'
9
+
10
+ class MD_SecurityConstraints
11
+
12
+ def initialize(xml)
13
+ @xml = xml
14
+ end
15
+
16
+ def writeXML(hSecurityCons)
17
+
18
+ # classes used
19
+ classCode = MD_ClassificationCode.new(@xml)
20
+
21
+ @xml.tag!('gmd:MD_SecurityConstraints') do
22
+
23
+ # security constraints - classification code - required
24
+ s = hSecurityCons[:classCode]
25
+ if s.nil?
26
+ @xml.tag!('gmd:classification',{'gco:nilReason'=>'missing'})
27
+ else
28
+ @xml.tag!('gmd:classification') do
29
+ classCode.writeXML(s)
30
+ end
31
+ end
32
+
33
+ # security constraints - user note
34
+ s = hSecurityCons[:userNote]
35
+ if !s.nil?
36
+ @xml.tag!('gmd:userNote') do
37
+ @xml.tag!('gco:CharacterString',s)
38
+ end
39
+ elsif $showAllTags
40
+ @xml.tag!('gmd:userNote')
41
+ end
42
+
43
+ # security constraints - classification system
44
+ s = hSecurityCons[:classSystem]
45
+
46
+ if !s.nil?
47
+ @xml.tag!('gmd:classificationSystem') do
48
+ @xml.tag!('gco:CharacterString',s)
49
+ end
50
+ elsif $showAllTags
51
+ @xml.tag!('gmd:classificationSystem')
52
+ end
53
+
54
+ # security constraints - handling description
55
+ s = hSecurityCons[:handlingDesc]
56
+ if !s.nil?
57
+ @xml.tag!('gmd:handlingDescription') do
58
+ @xml.tag!('gco:CharacterString',s)
59
+ end
60
+ elsif $showAllTags
61
+ @xml.tag!('gmd:handlingDescription')
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,59 @@
1
+ # ISO <<Class>> LI_Source
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-20 original script
6
+ # Stan Smith 2014-07-09 modify require statements to function in RubyGem structure
7
+
8
+ require 'class_citation'
9
+ require 'class_processStep'
10
+
11
+ class LI_Source
12
+
13
+ def initialize(xml)
14
+ @xml = xml
15
+ end
16
+
17
+ def writeXML(hSource)
18
+
19
+ # classes used
20
+ citationClass = CI_Citation.new(@xml)
21
+ pStepClass = LI_ProcessStep.new(@xml)
22
+
23
+ @xml.tag!('gmd:LI_Source') do
24
+
25
+ # source - description - required
26
+ s = hSource[:sourceDescription]
27
+ if s.nil?
28
+ @xml.tag!('gmd:description',{'gco:nilReason'=>'missing'})
29
+ else
30
+ @xml.tag!('gmd:description') do
31
+ @xml.tag!('gco:CharacterString',s)
32
+ end
33
+ end
34
+
35
+ # source - citation
36
+ hCitation = hSource[:sourceCitation]
37
+ if !hCitation.empty?
38
+ @xml.tag!('gmd:sourceCitation') do
39
+ citationClass.writeXML(hCitation)
40
+ end
41
+ elsif $showAllTags
42
+ @xml.tag!('gmd:sourceCitation')
43
+ end
44
+
45
+ # source - process steps
46
+ aSteps = hSource[:sourceSteps]
47
+ unless aSteps.empty?
48
+ aSteps.each do |hStep|
49
+ @xml.tag!('gmd:sourceStep') do
50
+ pStepClass.writeXML(hStep)
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,74 @@
1
+ # ISO <<Class>> MD_StandardOrderProcess
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-09-25 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'module_dateTimeFun'
9
+
10
+ class MD_StandardOrderProcess
11
+
12
+ def initialize(xml)
13
+ @xml = xml
14
+ end
15
+
16
+ def writeXML(orderProcess)
17
+
18
+ # classes used
19
+
20
+ @xml.tag!('gmd:MD_StandardOrderProcess') do
21
+
22
+ # order process - fees
23
+ s = orderProcess[:fees]
24
+ if !s.nil?
25
+ @xml.tag!('gmd:fees') do
26
+ @xml.tag!('gco:CharacterString',s)
27
+ end
28
+ elsif $showAllTags
29
+ @xml.tag!('gmd:fees')
30
+ end
31
+
32
+ # order process - plannedAvailableDateTime
33
+ hDateTime = orderProcess[:plannedDateTime]
34
+ if !hDateTime.empty?
35
+ paDateTime = hDateTime[:dateTime]
36
+ paDateRes = hDateTime[:dateResolution]
37
+ if paDateTime.nil?
38
+ @xml.tag!('gmd:plannedAvailableDateTime')
39
+ else
40
+ @xml.tag!('gmd:plannedAvailableDateTime') do
41
+ dateTimeStr =
42
+ AdiwgDateTimeFun.stringDateTimeFromDateTime(paDateTime,paDateRes)
43
+ @xml.tag!('gco:DateTime',dateTimeStr)
44
+ end
45
+ end
46
+ elsif $showAllTags
47
+ @xml.tag!('gmd:plannedAvailableDateTime')
48
+ end
49
+
50
+ # order process - orderingInstructions
51
+ s = orderProcess[:orderInstructions]
52
+ if !s.nil?
53
+ @xml.tag!('gmd:orderingInstructions') do
54
+ @xml.tag!('gco:CharacterString',s)
55
+ end
56
+ elsif $showAllTags
57
+ @xml.tag!('gmd:orderingInstructions')
58
+ end
59
+
60
+ # order process - turnaround
61
+ s = orderProcess[:turnaround]
62
+ if !s.nil?
63
+ @xml.tag!('gmd:turnaround') do
64
+ @xml.tag!('gco:CharacterString',s)
65
+ end
66
+ elsif $showAllTags
67
+ @xml.tag!('gmd:turnaround')
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,65 @@
1
+ # ISO <<Class>> MD_TaxonCl
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-19 original script
6
+
7
+ class MD_TaxonCl
8
+
9
+ def initialize(xml)
10
+ @xml = xml
11
+ end
12
+
13
+ def writeXML(aTaxonCl)
14
+
15
+ # take first element in array
16
+ hTaxonCl = aTaxonCl[0]
17
+
18
+ @xml.tag!('gmd:MD_TaxonCl') do
19
+
20
+ # taxon classification - common name
21
+ s = hTaxonCl[:commonName]
22
+ if !s.nil?
23
+ @xml.tag!('gmd:common') do
24
+ @xml.tag!('gco:CharacterString',s)
25
+ end
26
+ elsif $showAllTags
27
+ @xml.tag!('gmd:common')
28
+ end
29
+
30
+ # taxon classification - taxon rank name - required
31
+ s = hTaxonCl[:taxRankName]
32
+ if s.nil?
33
+ @xml.tag!('gmd:taxonrn',{'gco:nilReason'=>'missing'})
34
+ else
35
+ @xml.tag!('gmd:taxonrn') do
36
+ @xml.tag!('gco:CharacterString',s)
37
+ end
38
+
39
+ end
40
+
41
+ # taxon classification - taxon rank value - required
42
+ s = hTaxonCl[:taxRankValue]
43
+ if s.nil?
44
+ @xml.tag!('gmd:taxonrv',{'gco:nilReason'=>'missing'})
45
+ else
46
+ @xml.tag!('gmd:taxonrv') do
47
+ @xml.tag!('gco:CharacterString',s)
48
+ end
49
+
50
+ end
51
+
52
+ # taxon classification - classification - recursive
53
+ aTaxonCl.slice!(0)
54
+ unless aTaxonCl.empty?
55
+ @xml.tag!('gmd:taxonCl') do
56
+ writeXML(aTaxonCl)
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,100 @@
1
+ # ISO <<Class>> MD_TaxonSys
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-19 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'class_citation'
9
+ require 'class_responsibleParty'
10
+ require 'class_vouchers'
11
+ require 'class_taxonClassification'
12
+
13
+ class MD_TaxonSys
14
+
15
+ def initialize(xml)
16
+ @xml = xml
17
+ end
18
+
19
+ def writeXML(hTaxonSys)
20
+
21
+ # classes used
22
+ citationClass = CI_Citation.new(@xml)
23
+ rPartyClass = CI_ResponsibleParty.new(@xml)
24
+ tVoucherClass = MD_Vouchers.new(@xml)
25
+ tClassClass = MD_TaxonCl.new(@xml)
26
+
27
+ @xml.tag!('gmd:MD_TaxonSys') do
28
+
29
+ # taxon system - class system citations - required - CI_Citation
30
+ aTaxClassCits = hTaxonSys[:taxClassSys]
31
+ if aTaxClassCits.empty?
32
+ @xml.tag!('gmd:classSys',{'gco:nilReason'=>'missing'})
33
+ else
34
+ aTaxClassCits.each do |hCitation|
35
+ @xml.tag!('gmd:classSys') do
36
+ citationClass.writeXML(hCitation)
37
+ end
38
+ end
39
+ end
40
+
41
+ # taxon system - general scope
42
+ s = hTaxonSys[:taxGeneralScope]
43
+ if !s.nil?
44
+ @xml.tag!('gmd:taxongen') do
45
+ @xml.tag!('gco:CharacterString',s)
46
+ end
47
+ elsif $showAllTags
48
+ @xml.tag!('gmd:taxongen')
49
+ end
50
+
51
+ # taxon system - identification reference - required
52
+ @xml.tag!('gmd:idref',{'gco:nilReason'=>'unknown'})
53
+
54
+ # taxon system - observers - CI_ResponsibleParty
55
+ aObservers = hTaxonSys[:taxObservers]
56
+ if !aObservers.empty?
57
+ aObservers.each do |rParty|
58
+ @xml.tag!('gmd:obs') do
59
+ rPartyClass.writeXML(rParty)
60
+ end
61
+ end
62
+ elsif $showAllTags
63
+ @xml.tag!('gmd:obs')
64
+ end
65
+
66
+ # taxon system - taxon identification procedures - required
67
+ s = hTaxonSys[:taxIdProcedures]
68
+ if s.nil?
69
+ @xml.tag!('gmd:taxonpro',{'gco:nilReason'=>'missing'})
70
+ else
71
+ @xml.tag!('gmd:taxonpro') do
72
+ @xml.tag!('gco:CharacterString',s)
73
+ end
74
+ end
75
+
76
+ # taxon system - voucher - MD_Voucher
77
+ hTaxVoucher = hTaxonSys[:taxVoucher]
78
+ if !hTaxVoucher.empty?
79
+ @xml.tag!('gmd:voucher') do
80
+ tVoucherClass.writeXML(hTaxVoucher)
81
+ end
82
+ elsif $showAllTags
83
+ @xml.tag!('gmd:voucher')
84
+ end
85
+
86
+ # taxon system - taxonomy classification - required
87
+ aTaxClass = hTaxonSys[:taxClasses]
88
+ if aTaxClass.empty?
89
+ @xml.tag!('gmd:taxonCl',{'gco:nilReason'=>'missing'})
90
+ else
91
+ @xml.tag!('gmd:taxonCl') do
92
+ tClassClass.writeXML(aTaxClass)
93
+ end
94
+ end
95
+
96
+ end
97
+
98
+ end
99
+
100
+ end
@@ -0,0 +1,77 @@
1
+ # ISO <<Class>> CI_Telephone
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-12 original script
6
+ # Stan Smith 2014-05-14 reorganized for JSON schema 0.4.0
7
+
8
+ class CI_Telephone
9
+
10
+ def initialize(xml)
11
+ @xml = xml
12
+ end
13
+
14
+ def writeXML(aPhones)
15
+
16
+ # ISO requires phones to be in proper order (voice, fax)
17
+ # Need to count phones of each type to be able to include empty tag
18
+ voiceCount = 0
19
+ faxCount = 0
20
+ aPhones.each do |hPhone|
21
+ if hPhone[:phoneServiceType].nil?
22
+ hPhone[:phoneServiceType] = 'voice'
23
+ end
24
+ if hPhone[:phoneServiceType] == 'voice'
25
+ voiceCount += 1
26
+ end
27
+ if hPhone[:phoneServiceType] == 'fax'
28
+ faxCount += 1
29
+ end
30
+ end
31
+
32
+ @xml.tag!('gmd:CI_Telephone') do
33
+
34
+ # phone - voice phones
35
+ if voiceCount > 0
36
+ aPhones.each do |hPhone|
37
+ if hPhone[:phoneServiceType] == 'voice'
38
+ pName = hPhone[:phoneName]
39
+ pNumber = hPhone[:phoneNumber]
40
+ if pName.nil?
41
+ s = pNumber
42
+ else
43
+ s = pName + ': ' + pNumber
44
+ end
45
+ @xml.tag!('gmd:voice') do
46
+ @xml.tag!('gco:CharacterString',s)
47
+ end
48
+ end
49
+ end
50
+ elsif $showAllTags
51
+ @xml.tag!('gmd:voice')
52
+ end
53
+
54
+ # phone - fax phones
55
+ if faxCount > 0
56
+ aPhones.each do |hPhone|
57
+ if hPhone[:phoneServiceType] == 'fax'
58
+ pName = hPhone[:phoneName]
59
+ pNumber = hPhone[:phoneNumber]
60
+ if pName.nil?
61
+ s = pNumber
62
+ else
63
+ s = pName + ': ' + pNumber
64
+ end
65
+ @xml.tag!('gmd:facsimile') do
66
+ @xml.tag!('gco:CharacterString',s)
67
+ end
68
+ end
69
+ end
70
+ elsif $showAllTags
71
+ @xml.tag!('gmd:facsimile')
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -0,0 +1,58 @@
1
+ # ISO <<Class>> EX_TemporalExtent
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-15 original script
6
+ # Stan Smith 2014-06-03 add support for date as time instant
7
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
8
+
9
+ require 'class_timeInstant'
10
+ require 'class_timePeriod'
11
+
12
+ class EX_TemporalExtent
13
+
14
+ def initialize(xml)
15
+ @xml = xml
16
+ end
17
+
18
+ def writeXML(hTempEle)
19
+
20
+ # classes used by MD_Metadata
21
+ intMetadataClass = InternalMetadata.new
22
+ timeInstClass = TimeInstant.new(@xml)
23
+ timePeriodClass = TimePeriod.new(@xml)
24
+
25
+ @xml.tag!('gmd:EX_TemporalExtent') do
26
+
27
+ # temporal extent - date - not supported by ISO
28
+ # ... convert date to time instant
29
+ hDate = hTempEle[:date]
30
+ unless hDate.empty?
31
+ intTimeInst = intMetadataClass.newTimeInstant
32
+ intTimeInst[:timePosition] = hDate
33
+ @xml.tag!('gmd:extent') do
34
+ timeInstClass.writeXML(intTimeInst)
35
+ end
36
+ end
37
+
38
+ # temporal extent - time instant
39
+ hTimeInst = hTempEle[:timeInstant]
40
+ unless hTimeInst.empty?
41
+ @xml.tag!('gmd:extent') do
42
+ timeInstClass.writeXML(hTimeInst)
43
+ end
44
+ end
45
+
46
+ # temporal extent - time period
47
+ hTimePeriod = hTempEle[:timePeriod]
48
+ unless hTimePeriod.empty?
49
+ @xml.tag!('gmd:extent') do
50
+ timePeriodClass.writeXML(hTimePeriod)
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,47 @@
1
+ # ISO <<Class>> TimeInstant
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-04 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'module_dateTimeFun'
9
+
10
+ class TimeInstant
11
+
12
+ def initialize(xml)
13
+ @xml = xml
14
+ end
15
+
16
+ def writeXML(hTempI)
17
+
18
+ timeID = hTempI[:timeID]
19
+ if timeID.nil?
20
+ $idCount = $idCount.succ
21
+ timeID = 'timeInstant' + $idCount
22
+ end
23
+
24
+ @xml.tag!('gml:TimeInstant',{'gml:id'=>timeID}) do
25
+
26
+ # time instant - description
27
+ s = hTempI[:description]
28
+ if !s.nil?
29
+ @xml.tag!('gml:description',s)
30
+ elsif $showAllTags
31
+ @xml.tag!('gml:description')
32
+ end
33
+
34
+ # time instant - time position
35
+ hDateTime = hTempI[:timePosition]
36
+ timeInstant = hDateTime[:dateTime]
37
+ timeResolution = hDateTime[:dateResolution]
38
+ dateStr = AdiwgDateTimeFun.stringDateTimeFromDateTime(timeInstant,timeResolution)
39
+ @xml.tag!('gml:timePosition',dateStr)
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+
@@ -0,0 +1,54 @@
1
+ # ISO <<Class>> TimePeriod
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-04 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'module_dateTimeFun'
9
+
10
+ class TimePeriod
11
+
12
+ def initialize(xml)
13
+ @xml = xml
14
+ end
15
+
16
+ def writeXML(hTempP)
17
+
18
+ timeID = hTempP[:timeID]
19
+ if timeID.nil?
20
+ $idCount = $idCount.succ
21
+ timeID = 'timePeriod' + $idCount
22
+ end
23
+
24
+ @xml.tag!('gml:TimePeriod',{'gml:id'=>timeID}) do
25
+
26
+ # time period - description
27
+ s = hTempP[:description]
28
+ if !s.nil?
29
+ @xml.tag!('gml:description',s)
30
+ elsif $showAllTags
31
+ @xml.tag!('gml:description')
32
+ end
33
+
34
+ # time period - begin position
35
+ hDateTime = hTempP[:beginTime]
36
+ timeInstant = hDateTime[:dateTime]
37
+ timeResolution = hDateTime[:dateResolution]
38
+ dateStr = AdiwgDateTimeFun.stringDateTimeFromDateTime(timeInstant,timeResolution)
39
+ @xml.tag!('gml:beginPosition',dateStr)
40
+
41
+ # time period - begin position
42
+ hDateTime = hTempP[:endTime]
43
+ timeInstant = hDateTime[:dateTime]
44
+ timeResolution = hDateTime[:dateResolution]
45
+ dateStr = AdiwgDateTimeFun.stringDateTimeFromDateTime(timeInstant,timeResolution)
46
+ @xml.tag!('gml:endPosition',dateStr)
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+
@@ -0,0 +1,59 @@
1
+ # ISO <<Class>> MD_Usage
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-19 original script
6
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
7
+
8
+ require 'class_responsibleParty'
9
+
10
+ class MD_Usage
11
+
12
+ def initialize(xml)
13
+ @xml = xml
14
+ end
15
+
16
+ def writeXML(hUsage)
17
+
18
+ # classes used in MD_Usage
19
+ rPartyClass = CI_ResponsibleParty.new(@xml)
20
+
21
+ @xml.tag!('gmd:MD_Usage') do
22
+
23
+ # usage - specific usage - required
24
+ s = hUsage[:specificUsage]
25
+ if s.nil?
26
+ @xml.tag!('gmd:specificUsage',{'gco:nilReason'=>'missing'})
27
+ else
28
+ @xml.tag!('gmd:specificUsage') do
29
+ @xml.tag!('gco:CharacterString',s)
30
+ end
31
+ end
32
+
33
+ # usage - user determined limitations
34
+ s = hUsage[:userLimits]
35
+ if !s.nil?
36
+ @xml.tag!('gmd:userDeterminedLimitations') do
37
+ @xml.tag!('gco:CharacterString',s)
38
+ end
39
+ elsif $showAllTags
40
+ @xml.tag!('gmd:userDeterminedLimitations')
41
+ end
42
+
43
+ # usage - user contact info - responsible party
44
+ aContacts = hUsage[:userContacts]
45
+ if !aContacts.empty?
46
+ aContacts.each do |rParty|
47
+ @xml.tag!('gmd:userContactInfo') do
48
+ rPartyClass.writeXML(rParty)
49
+ end
50
+ end
51
+ elsif $showAllTags
52
+ @xml.tag!('gmd:userContactInfo')
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,30 @@
1
+ # ISO <<Class>> MD_Constraints
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-10-31 original script
6
+
7
+ class MD_Constraints
8
+
9
+ def initialize(xml)
10
+ @xml = xml
11
+ end
12
+
13
+ def writeXML(aUseCons)
14
+
15
+ @xml.tag!('gmd:MD_Constraints') do
16
+
17
+ aUseCons.each do |useCon|
18
+
19
+ # use constraints - required
20
+ @xml.tag!('gmd:useLimitation') do
21
+ @xml.tag!('gco:CharacterString',useCon)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end