adiwg-mdtranslator 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +24 -0
- data/README.md +31 -0
- data/Rakefile +13 -0
- data/adiwg-mdtranslator.gemspec +31 -0
- data/bin/mdtranslator +164 -0
- data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
- data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
- data/lib/adiwg/mdtranslator/validator.rb +43 -0
- data/lib/adiwg/mdtranslator/version.rb +7 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
- data/lib/adiwg/mdtranslator.rb +97 -0
- data/lib/adiwg-mdtranslator.rb +1 -0
- data/mdtranslator.rb +178 -0
- data/test/adiwgJson_full_test_example.json +1717 -0
- data/test/adiwgJson_template.json +977 -0
- data/test/dev.rb +32 -0
- data/test/tc_translation.rb +31 -0
- metadata +317 -0
|
@@ -0,0 +1,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
|