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,157 @@
1
+ # ISO <<Class>> CI_Citation
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-26 original script
6
+ # Stan Smith 2013-12-30 added ISBN, ISSN
7
+ # Stan Smith 2014-05-16 modified for JSON schema 0.4.0
8
+ # Stan Smith 2014-05-16 added MD_Identifier
9
+ # Stan Smith 2014-05-28 modified for json schema 0.5.0
10
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
11
+ # Stan Smith 2014-08-18 modify identifier section for schema 0.6.0
12
+ # Stan Smith 2014-08-18 process isbn and issn from identifier section per 0.6.0
13
+
14
+ require 'code_presentationForm'
15
+ require 'class_responsibleParty'
16
+ require 'class_date'
17
+ require 'class_identifier'
18
+
19
+ class CI_Citation
20
+
21
+ def initialize(xml)
22
+ @xml = xml
23
+ end
24
+
25
+ def writeXML(hCitation)
26
+
27
+ # classes used in MD_Metadata
28
+ presFormClass = CI_PresentationFormCode.new(@xml)
29
+ rPartyClass = CI_ResponsibleParty.new(@xml)
30
+ dateClass = CI_Date.new(@xml)
31
+ idClass = MD_Identifier.new(@xml)
32
+
33
+ @xml.tag!('gmd:CI_Citation') do
34
+
35
+ # citation - title - required
36
+ s = hCitation[:citTitle]
37
+ if s.nil?
38
+ @xml.tag!('gmd:title',{'gco:nilReason'=>'missing'})
39
+ else
40
+ @xml.tag!('gmd:title') do
41
+ @xml.tag!('gco:CharacterString',s)
42
+ end
43
+ end
44
+
45
+ # citation - date - required
46
+ aDate = hCitation[:citDate]
47
+ if aDate.empty?
48
+ @xml.tag!('gmd:date', {'gco:nilReason' => 'missing'})
49
+ else
50
+ aDate.each do |hDate|
51
+ @xml.tag!('gmd:date') do
52
+ dateClass.writeXML(hDate)
53
+ end
54
+ end
55
+ end
56
+
57
+ # citation - edition
58
+ s = hCitation[:citEdition]
59
+ if !s.nil?
60
+ @xml.tag!('gmd:edition') do
61
+ @xml.tag!('gco:CharacterString',s)
62
+ end
63
+ elsif $showAllTags
64
+ @xml.tag!('gmd:edition')
65
+ end
66
+
67
+ # citation - resource identifiers - MD_Identifier
68
+ # do not process ISBN and ISSN as MD_identifier(s)
69
+ # ... these are processed separately in ISO 19115-2
70
+ aResIDs = hCitation[:citResourceIDs]
71
+ if !aResIDs.empty?
72
+ aResIDs.each do |hResID|
73
+ if !hResID[:identifierType].nil?
74
+ next if hResID[:identifierType].downcase == 'isbn'
75
+ next if hResID[:identifierType].downcase == 'issn'
76
+ end
77
+ @xml.tag!('gmd:identifier') do
78
+ idClass.writeXML(hResID)
79
+ end
80
+ end
81
+ elsif $showAllTags
82
+ @xml.tag!('gmd:identifier')
83
+ end
84
+
85
+ # citation - cited responsible party
86
+ aResParty = hCitation[:citResponsibleParty]
87
+ if !aResParty.empty?
88
+ aResParty.each do |rParty|
89
+ @xml.tag!('gmd:citedResponsibleParty') do
90
+ rPartyClass.writeXML(rParty)
91
+ end
92
+ end
93
+ elsif $showAllTags
94
+ @xml.tag!('gmd:citedResponsibleParty')
95
+ end
96
+
97
+ # citation - presentation forms - CI_PresentationFormCode
98
+ aPresForms = hCitation[:citResourceForms]
99
+ if !aPresForms.empty?
100
+ aPresForms.each do |presForm|
101
+ @xml.tag!('gmd:presentationForm') do
102
+ presFormClass.writeXML(presForm)
103
+ end
104
+ end
105
+ elsif $showAllTags
106
+ @xml.tag!('gmd:presentationForm')
107
+ end
108
+
109
+ # citation - ISBN
110
+ needTag = true
111
+ aResIDs = hCitation[:citResourceIDs]
112
+ if !aResIDs.empty?
113
+ aResIDs.each do |hResID|
114
+ if !hResID[:identifierType].nil?
115
+ if hResID[:identifierType].downcase == 'isbn'
116
+ s = hResID[:identifier]
117
+ if !s.nil?
118
+ @xml.tag!('gmd:ISBN') do
119
+ @xml.tag!('gco:CharacterString',s)
120
+ needTag = false
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ if $showAllTags && needTag
128
+ @xml.tag!('gmd:ISBN')
129
+ end
130
+
131
+ # citation - ISSN
132
+ needTag = true
133
+ aResIDs = hCitation[:citResourceIDs]
134
+ if !aResIDs.empty?
135
+ aResIDs.each do |hResID|
136
+ if !hResID[:identifierType].nil?
137
+ if hResID[:identifierType].downcase == 'issn'
138
+ s = hResID[:identifier]
139
+ if !s.nil?
140
+ @xml.tag!('gmd:ISSN') do
141
+ @xml.tag!('gco:CharacterString',s)
142
+ needTag = false
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ if $showAllTags && needTag
150
+ @xml.tag!('gmd:ISSN')
151
+ end
152
+
153
+ end
154
+
155
+ end
156
+
157
+ end
@@ -0,0 +1,85 @@
1
+ # ISO <<Class>> CI_Contact
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-12 original script
6
+ # Stan Smith 2014-05-14 modified for JSON schema version 0.4.0
7
+ # Stan Smith 2014-05-16 added method to return contact from array
8
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
9
+
10
+ require 'class_telephone'
11
+ require 'class_address'
12
+ require 'class_onlineResource'
13
+
14
+ class CI_Contact
15
+
16
+ def initialize(xml)
17
+ @xml = xml
18
+ end
19
+
20
+ def writeXML(hContact)
21
+
22
+ # classes used in MD_Metadata
23
+ pBookClass = CI_Telephone.new(@xml)
24
+ addClass = CI_Address.new(@xml)
25
+ resourceClass = CI_OnlineResource.new(@xml)
26
+
27
+ @xml.tag!('gmd:CI_Contact') do
28
+
29
+ # contact - phone list - all services
30
+ aPhones = hContact[:phones]
31
+ if !aPhones.empty?
32
+ @xml.tag!('gmd:phone') do
33
+ pBookClass.writeXML(aPhones)
34
+ end
35
+ elsif $showAllTags
36
+ @xml.tag!('gmd:phone')
37
+ end
38
+
39
+ # contact - address
40
+ hAddress = hContact[:address]
41
+ if !hAddress.empty?
42
+ @xml.tag!('gmd:address') do
43
+ addClass.writeXML(hAddress)
44
+ end
45
+ elsif $showAllTags
46
+ @xml.tag!('gmd:address')
47
+ end
48
+
49
+ # contact - online resource
50
+ aResource = hContact[:onlineRes]
51
+ if !aResource.empty?
52
+ @xml.tag!('gmd:onlineResource') do
53
+ resourceClass.writeXML(aResource[0])
54
+ end
55
+ elsif $showAllTags
56
+ @xml.tag!('gmd:onlineResource')
57
+ end
58
+
59
+ # contact - contact instructions
60
+ s = hContact[:contactInstructions]
61
+ if !s.nil?
62
+ @xml.tag!('gmd:contactInstructions') do
63
+ @xml.tag!('gco:CharacterString',hContact[:contactInstructions])
64
+ end
65
+ elsif $showAllTags
66
+ @xml.tag!('gmd:contactInstructions')
67
+ end
68
+
69
+ end
70
+ end
71
+
72
+ def getContact(contactID)
73
+
74
+ # find contact in contact array and return the hash
75
+ $intContactList.each do |hContact|
76
+ if hContact[:contactID] == contactID
77
+ return hContact
78
+ end
79
+ end
80
+
81
+ return {}
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,338 @@
1
+ # ISO <<Class>> MD_DataIdentification
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-26 original script
6
+ # Stan Smith 2013-09-18 add descriptive keywords
7
+ # Stan Smith 2013-11-01 add constraints
8
+ # Stan Smith 2013-11-08 add extents
9
+ # Stan Smith 2013-11-21 add taxonomy
10
+ # Stan Smith 2013-11-22 add metadata extension
11
+ # Stan Smith 2013-11-25 add resource usage
12
+ # Stan Smith 2013-11-25 add spatial resolution
13
+ # Stan Smith 2014-05-15 modify to support JSON schema version 0.4.0
14
+ # Stan Smith 2014-05-21 added aggregate information section
15
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
16
+
17
+ require 'code_progress'
18
+ require 'code_topicCategory'
19
+ require 'code_spatialRepresentationType'
20
+ require 'class_citation'
21
+ require 'class_responsibleParty'
22
+ require 'class_maintenanceInformation'
23
+ require 'class_browseGraphic'
24
+ require 'class_format'
25
+ require 'class_keyword'
26
+ require 'class_usage'
27
+ require 'class_useConstraints'
28
+ require 'class_legalConstraints'
29
+ require 'class_securityConstraints'
30
+ require 'class_aggregateInformation'
31
+ require 'class_taxonSystem'
32
+ require 'class_resolution'
33
+ require 'class_extent'
34
+
35
+ class MD_DataIdentification
36
+
37
+ def initialize(xml)
38
+ @xml = xml
39
+ end
40
+
41
+ def writeXML(hDataId, aAssocRes)
42
+
43
+ # codes used by MD_Metadata
44
+ progressCode = MD_ProgressCode.new(@xml)
45
+ spatialCode = MD_SpatialRepresentationTypeCode.new(@xml)
46
+ topicCode = MD_TopicCategoryCode.new(@xml)
47
+
48
+ # classes used by MD_Metadata
49
+ citationClass = CI_Citation.new(@xml)
50
+ rPartyClass = CI_ResponsibleParty.new(@xml)
51
+ mInfoClass = MD_MaintenanceInformation.new(@xml)
52
+ bGraphicClass = MD_BrowseGraphic.new(@xml)
53
+ rFormatClass = MD_Format.new(@xml)
54
+ keywordClass = MD_Keywords.new(@xml)
55
+ useClass = MD_Usage.new(@xml)
56
+ uConClass = MD_Constraints.new(@xml)
57
+ lConClass = MD_LegalConstraints.new(@xml)
58
+ sConClass = MD_SecurityConstraints.new(@xml)
59
+ aggInfoClass = MD_AggregateInformation.new(@xml)
60
+ taxClass = MD_TaxonSys.new(@xml)
61
+ resolutionClass = MD_Resolution.new(@xml)
62
+ extentClass = EX_Extent.new(@xml)
63
+
64
+ # data identification
65
+ @xml.tag!('gmd:MD_DataIdentification') do
66
+
67
+ # data identification - citation - required
68
+ hCitation = hDataId[:citation]
69
+ if hCitation.empty?
70
+ @xml.tag!('gmd:citation', {'gco:nilReason' => 'missing'})
71
+ else
72
+ @xml.tag!('gmd:citation') do
73
+ citationClass.writeXML(hCitation)
74
+ end
75
+ end
76
+
77
+ # data identification - abstract - required
78
+ s = hDataId[:abstract]
79
+ if s.nil?
80
+ @xml.tag!('gmd:abstract', {'gco:nilReason' => 'missing'})
81
+ else
82
+ @xml.tag!('gmd:abstract') do
83
+ @xml.tag!('gco:CharacterString', s)
84
+ end
85
+ end
86
+
87
+ # data identification - purpose
88
+ s = hDataId[:purpose]
89
+ if !s.nil?
90
+ @xml.tag!('gmd:purpose') do
91
+ @xml.tag!('gco:CharacterString', s)
92
+ end
93
+ elsif $showAllTags
94
+ @xml.tag!('gmd:purpose')
95
+ end
96
+
97
+ # data identification - credit
98
+ aCredits = hDataId[:credits]
99
+ if !aCredits.empty?
100
+ aCredits.each do |credit|
101
+ @xml.tag!('gmd:credit') do
102
+ @xml.tag!('gco:CharacterString', credit)
103
+ end
104
+ end
105
+ elsif $showAllTags
106
+ @xml.tag!('gmd:credit')
107
+ end
108
+
109
+ # data identification - status - required
110
+ s = hDataId[:status]
111
+ if s.nil?
112
+ @xml.tag!('gmd:status', {'gco:nilReason' => 'missing'})
113
+ else
114
+ @xml.tag!('gmd:status') do
115
+ progressCode.writeXML(s)
116
+ end
117
+ end
118
+
119
+ # data identification - point of contact
120
+ aPOCs = hDataId[:pointsOfContact]
121
+ if !aPOCs.empty?
122
+ aPOCs.each do |hPContact|
123
+ @xml.tag!('gmd:pointOfContact') do
124
+ rPartyClass.writeXML(hPContact)
125
+ end
126
+ end
127
+ elsif $showAllTags
128
+ @xml.tag!('gmd:pointOfContact')
129
+ end
130
+
131
+ # data identification - resource maintenance
132
+ aMaintInfo = hDataId[:resourceMaint]
133
+ if !aMaintInfo.empty?
134
+ aMaintInfo.each do |hResMaintInfo|
135
+ @xml.tag!('gmd:resourceMaintenance') do
136
+ mInfoClass.writeXML(hResMaintInfo)
137
+ end
138
+ end
139
+ elsif $showAllTags
140
+ @xml.tag!('gmd:resourceMaintenance')
141
+ end
142
+
143
+ # data identification - graphic overview
144
+ aGOverview = hDataId[:graphicOverview]
145
+ if !aGOverview.empty?
146
+ aGOverview.each do |graphic|
147
+ gLink = graphic[:bGURI]
148
+ attributes = {}
149
+ attributes['xlink:href'] = gLink if gLink
150
+ @xml.tag!('gmd:graphicOverview', attributes) do
151
+ bGraphicClass.writeXML(graphic)
152
+ end
153
+ end
154
+ elsif $showAllTags
155
+ @xml.tag!('gmd:graphicOverview')
156
+ end
157
+
158
+ # data identification - resource format
159
+ aResFormats = hDataId[:resourceFormats]
160
+ if !aResFormats.empty?
161
+ aResFormats.each do |hResFormat|
162
+ @xml.tag!('gmd:resourceFormat') do
163
+ rFormatClass.writeXML(hResFormat)
164
+ end
165
+ end
166
+ elsif $showAllTags
167
+ @xml.tag!('gmd:resourceFormat')
168
+ end
169
+
170
+ # data identification - descriptive keywords
171
+ aDesKeywords = hDataId[:descriptiveKeywords]
172
+ if !aDesKeywords.empty?
173
+ aDesKeywords.each do |hDKeyword|
174
+ @xml.tag!('gmd:descriptiveKeywords') do
175
+ keywordClass.writeXML(hDKeyword)
176
+ end
177
+ end
178
+ elsif $showAllTags
179
+ @xml.tag!('gmd:descriptiveKeywords')
180
+ end
181
+
182
+ # data identification - resource specific usage
183
+ aResUses = hDataId[:resourceUses]
184
+ if !aResUses.empty?
185
+ aResUses.each do |hResUse|
186
+ @xml.tag!('gmd:resourceSpecificUsage') do
187
+ useClass.writeXML(hResUse)
188
+ end
189
+ end
190
+ elsif $showAllTags
191
+ @xml.tag!('gmd:resourceSpecificUsage')
192
+ end
193
+
194
+ # data identification - resource constraints - use constraints
195
+ aUseLimits = hDataId[:useConstraints]
196
+ if !aUseLimits.empty?
197
+ @xml.tag!('gmd:resourceConstraints') do
198
+ uConClass.writeXML(aUseLimits)
199
+ end
200
+ elsif $showAllTags
201
+ @xml.tag!('gmd:resourceConstraints') do
202
+ @xml.tag!('gmd:MD_Constraints')
203
+ end
204
+ end
205
+
206
+ # data identification - resource constraints - legal constraints
207
+ aLegalCons = hDataId[:legalConstraints]
208
+ if !aLegalCons.empty?
209
+ aLegalCons.each do |hLegalCon|
210
+ @xml.tag!('gmd:resourceConstraints') do
211
+ lConClass.writeXML(hLegalCon)
212
+ end
213
+ end
214
+ elsif $showAllTags
215
+ @xml.tag!('gmd:resourceConstraints') do
216
+ @xml.tag!('gmd:MD_LegalConstraints')
217
+ end
218
+ end
219
+
220
+ # data identification - resource constraints - security constraints
221
+ # empty tag cannot be shown for security constraints - XSD issue
222
+ aSecurityCons = hDataId[:securityConstraints]
223
+ unless aSecurityCons.empty?
224
+ aSecurityCons.each do |hSecCon|
225
+ @xml.tag!('gmd:resourceConstraints') do
226
+ sConClass.writeXML(hSecCon)
227
+ end
228
+ end
229
+ end
230
+
231
+ # data identification - aggregate information
232
+ if !aAssocRes.empty?
233
+ aAssocRes.each do |hAssocRes|
234
+ @xml.tag!('gmd:aggregationInfo') do
235
+ aggInfoClass.writeXML(hAssocRes)
236
+ end
237
+ end
238
+ elsif $showAllTags
239
+ @xml.tag!('gmd:aggregationInfo')
240
+ end
241
+
242
+ # data identification - taxonomy
243
+ hTaxonomy = hDataId[:taxonomy]
244
+ if !hTaxonomy.empty?
245
+ @xml.tag!('gmd:taxonomy') do
246
+ taxClass.writeXML(hTaxonomy)
247
+ end
248
+ elsif $showAllTags
249
+ @xml.tag!('gmd:taxonomy')
250
+ end
251
+
252
+ # data identification - spatial representation type
253
+ aSpatialType = hDataId[:spatialRepresentationTypes]
254
+ if !aSpatialType.empty?
255
+ aSpatialType.each do |spType|
256
+ @xml.tag!('gmd:spatialRepresentationType') do
257
+ spatialCode.writeXML(spType)
258
+ end
259
+ end
260
+ elsif $showAllTags
261
+ @xml.tag!('gmd:spatialRepresentationType')
262
+ end
263
+
264
+ # data identification - spatial resolution
265
+ aSpatialRes = hDataId[:spatialResolutions]
266
+ if !aSpatialRes.empty?
267
+ aSpatialRes.each do |hSpRes|
268
+ @xml.tag!('gmd:spatialResolution') do
269
+ resolutionClass.writeXML(hSpRes)
270
+ end
271
+ end
272
+ elsif $showAllTags
273
+ @xml.tag!('gmd:spatialResolution')
274
+ end
275
+
276
+ # data identification - language - required - default of english applied
277
+ aLanguages = hDataId[:resourceLanguages]
278
+ if !aLanguages.empty?
279
+ aLanguages.each do |language|
280
+ @xml.tag!('gmd:language') do
281
+ @xml.tag!('gco:CharacterString', language)
282
+ end
283
+ end
284
+ else
285
+ @xml.tag!('gmd:language') do
286
+ @xml.tag!('gco:CharacterString', 'eng; USA')
287
+ end
288
+ end
289
+
290
+ # data identification - topic category
291
+ aTopics = hDataId[:topicCategories]
292
+ if !aTopics.empty?
293
+ aTopics.each do |spType|
294
+ @xml.tag!('gmd:topicCategory') do
295
+ topicCode.writeXML(spType)
296
+ end
297
+ end
298
+ elsif $showAllTags
299
+ @xml.tag!('gmd:topicCategory')
300
+ end
301
+
302
+ # data identification - environment description
303
+ s = hDataId[:environmentDescription]
304
+ if !s.nil?
305
+ @xml.tag!('gmd:environmentDescription') do
306
+ @xml.tag!('gco:CharacterString', s)
307
+ end
308
+ elsif $showAllTags
309
+ @xml.tag!('gmd:environmentDescription')
310
+ end
311
+
312
+ # data identification - extent
313
+ aExtents = hDataId[:extents]
314
+ if !aExtents.empty?
315
+ aExtents.each do |hExtent|
316
+ @xml.tag!('gmd:extent') do
317
+ extentClass.writeXML(hExtent)
318
+ end
319
+ end
320
+ elsif $showAllTags
321
+ @xml.tag!('gmd:extent')
322
+ end
323
+
324
+ # data identification - supplemental info
325
+ s = hDataId[:supplementalInfo]
326
+ if !s.nil?
327
+ @xml.tag!('gmd:supplementalInformation') do
328
+ @xml.tag!('gco:CharacterString', s)
329
+ end
330
+ elsif $showAllTags
331
+ @xml.tag!('gmd:supplementalInformation')
332
+ end
333
+
334
+ end
335
+
336
+ end
337
+
338
+ end
@@ -0,0 +1,55 @@
1
+ # ISO <<Class>> DQ_DataQuality
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 'code_scope'
9
+ require 'class_lineage'
10
+
11
+ class DQ_DataQuality
12
+
13
+ def initialize(xml)
14
+ @xml = xml
15
+ end
16
+
17
+ def writeXML(hDataQ)
18
+
19
+ # classes used
20
+ scopeCode = MD_ScopeCode.new(@xml)
21
+ lineClass = LI_Lineage.new(@xml)
22
+
23
+ @xml.tag!('gmd:DQ_DataQuality') do
24
+
25
+ # data quality - scope - required
26
+ s = hDataQ[:dataScope]
27
+ if s.nil?
28
+ @xml.tag!('gmd:scope',{'gco:nilReason'=>'missing'})
29
+ else
30
+ @xml.tag!('gmd:scope') do
31
+ @xml.tag!('gmd:DQ_Scope') do
32
+ @xml.tag!('gmd:level') do
33
+ scopeCode.writeXML(s)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # date quality - report
40
+
41
+ # data quality - lineage
42
+ hLineage = hDataQ[:dataLineage]
43
+ if !hLineage.empty?
44
+ @xml.tag!('gmd:lineage') do
45
+ lineClass.writeXML(hLineage)
46
+ end
47
+ elsif $showAllTags
48
+ @xml.tag!('gmd:lineage')
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,60 @@
1
+ # ISO <<Class>> CI_Date
2
+ # writer output in XML
3
+
4
+ # History:
5
+ # Stan Smith 2013-08-26 original script
6
+ # Stan Smith 2013-11-21 support for date or datetime
7
+ # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
8
+
9
+ require 'module_dateTimeFun'
10
+ require 'code_dateType'
11
+
12
+ class CI_Date
13
+
14
+ def initialize(xml)
15
+ @xml = xml
16
+ end
17
+
18
+ def writeXML(hDate)
19
+
20
+ # classes used
21
+ dateTypeCode = CI_DateTypeCode.new(@xml)
22
+
23
+ citDateTime = hDate[:dateTime]
24
+ citDateRes = hDate[:dateResolution]
25
+ citDateType = hDate[:dateType]
26
+
27
+ @xml.tag!('gmd:CI_Date') do
28
+
29
+ # date - date - required
30
+ if citDateTime.nil?
31
+ @xml.tag!('gmd:date',{'gco:nilReason'=>'missing'})
32
+ else
33
+ @xml.tag!('gmd:date') do
34
+
35
+ if citDateRes.length > 3
36
+ # if time, requires all time fields
37
+ dateStr = AdiwgDateTimeFun.stringDateTimeFromDateTime(citDateTime,'YMDhmsZ')
38
+ @xml.tag!('gco:DateTime',dateStr)
39
+ else
40
+ dateStr = AdiwgDateTimeFun.stringDateFromDateTime(citDateTime,citDateRes)
41
+ @xml.tag!('gco:Date',dateStr)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ # date - date type - required
49
+ if citDateType.nil?
50
+ @xml.tag!('gmd:dateType',{'gco:nilReason'=>'missing'})
51
+ else
52
+ @xml.tag!('gmd:dateType') do
53
+ dateTypeCode.writeXML(citDateType)
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ end