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,74 @@
|
|
|
1
|
+
# ISO <<Class>> LineString
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-13 original script
|
|
6
|
+
# Stan Smith 2014-05-30 modified for version 0.5.0
|
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
8
|
+
|
|
9
|
+
require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
|
|
10
|
+
|
|
11
|
+
class LineString
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hGeoElement)
|
|
18
|
+
|
|
19
|
+
# gml:LineString attributes
|
|
20
|
+
attributes = {}
|
|
21
|
+
|
|
22
|
+
# gml:LineString attributes - gml:id - required
|
|
23
|
+
lineID = hGeoElement[:elementId]
|
|
24
|
+
if lineID.nil?
|
|
25
|
+
$idCount = $idCount.succ
|
|
26
|
+
lineID = 'line' + $idCount
|
|
27
|
+
end
|
|
28
|
+
attributes['gml:id'] = lineID
|
|
29
|
+
|
|
30
|
+
# gml:LineString attributes - srsDimension
|
|
31
|
+
s = hGeoElement[:elementGeometry][:dimension]
|
|
32
|
+
if !s.nil?
|
|
33
|
+
attributes[:srsDimension] = s
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# gml:LineString attributes - srsName
|
|
37
|
+
s = hGeoElement[:elementSrs][:srsName]
|
|
38
|
+
if !s.nil?
|
|
39
|
+
attributes[:srsName] = s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
@xml.tag!('gml:LineString',attributes) do
|
|
43
|
+
|
|
44
|
+
# lineString - description
|
|
45
|
+
s = hGeoElement[:elementDescription]
|
|
46
|
+
if !s.nil?
|
|
47
|
+
@xml.tag!('gml:description',s)
|
|
48
|
+
elsif $showAllTags
|
|
49
|
+
@xml.tag!('gml:description')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# lineString - name
|
|
53
|
+
s = hGeoElement[:elementName]
|
|
54
|
+
if !s.nil?
|
|
55
|
+
@xml.tag!('gml:name',s)
|
|
56
|
+
elsif $showAllTags
|
|
57
|
+
@xml.tag!('gml:name')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# lineString - coordinates - required
|
|
61
|
+
# gml does not support nilReason for coordinates
|
|
62
|
+
# convert coordinate string from geoJSON to gml
|
|
63
|
+
s = hGeoElement[:elementGeometry][:geometry]
|
|
64
|
+
if !s.nil?
|
|
65
|
+
s = Adiwg_Coordinates.unpack(s)
|
|
66
|
+
@xml.tag!('gml:coordinates',s)
|
|
67
|
+
else
|
|
68
|
+
@xml.tag!('gml:coordinates')
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ISO <<Class>> LI_Lineage
|
|
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_processStep'
|
|
9
|
+
require 'class_source'
|
|
10
|
+
|
|
11
|
+
class LI_Lineage
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hLineage)
|
|
18
|
+
|
|
19
|
+
# classes used
|
|
20
|
+
sourceClass = LI_Source.new(@xml)
|
|
21
|
+
pStepClass = LI_ProcessStep.new(@xml)
|
|
22
|
+
|
|
23
|
+
@xml.tag!('gmd:LI_Lineage') do
|
|
24
|
+
|
|
25
|
+
# lineage - statement
|
|
26
|
+
s = hLineage[:statement]
|
|
27
|
+
if !s.nil?
|
|
28
|
+
@xml.tag!('gmd:statement') do
|
|
29
|
+
@xml.tag!('gco:CharacterString',s)
|
|
30
|
+
end
|
|
31
|
+
elsif $showAllTags
|
|
32
|
+
@xml.tag!('gmd:statement')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# lineage - processing steps
|
|
36
|
+
aProcSteps = hLineage[:processSteps]
|
|
37
|
+
if !aProcSteps.empty?
|
|
38
|
+
aProcSteps.each do |pStep|
|
|
39
|
+
@xml.tag!('gmd:processStep') do
|
|
40
|
+
pStepClass.writeXML(pStep)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
elsif $showAllTags
|
|
44
|
+
@xml.tag!('gmd:processStep')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# lineage - data sources
|
|
48
|
+
aSources = hLineage[:dataSources]
|
|
49
|
+
if !aSources.empty?
|
|
50
|
+
aSources.each do |hSource|
|
|
51
|
+
@xml.tag!('gmd:source') do
|
|
52
|
+
sourceClass.writeXML(hSource)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
elsif $showAllTags
|
|
56
|
+
@xml.tag!('gmd:source')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# ISO <<Class>> MD_MaintenanceInformation
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-10-31 original script
|
|
6
|
+
# Stan Smith 2013-12-18 added contact
|
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
8
|
+
|
|
9
|
+
require 'code_maintenanceFrequency'
|
|
10
|
+
require 'class_responsibleParty'
|
|
11
|
+
|
|
12
|
+
class MD_MaintenanceInformation
|
|
13
|
+
|
|
14
|
+
def initialize(xml)
|
|
15
|
+
@xml = xml
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def writeXML(hMaintInfo)
|
|
19
|
+
|
|
20
|
+
# classes used
|
|
21
|
+
maintFreqCode = MD_MaintenanceFrequencyCode.new(@xml)
|
|
22
|
+
rPartyClass = CI_ResponsibleParty.new(@xml)
|
|
23
|
+
|
|
24
|
+
@xml.tag! 'gmd:MD_MaintenanceInformation' do
|
|
25
|
+
|
|
26
|
+
# maintenance information - frequency code - required
|
|
27
|
+
s = hMaintInfo[:maintFreq]
|
|
28
|
+
if s.nil?
|
|
29
|
+
@xml.tag!('gmd:maintenanceAndUpdateFrequency', {'gco:nilReason'=>'unknown'})
|
|
30
|
+
else
|
|
31
|
+
@xml.tag!('gmd:maintenanceAndUpdateFrequency') do
|
|
32
|
+
maintFreqCode.writeXML(s)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# maintenance information - note
|
|
37
|
+
aNotes = hMaintInfo[:maintNotes]
|
|
38
|
+
if !aNotes.empty?
|
|
39
|
+
aNotes.each do |note|
|
|
40
|
+
@xml.tag!('gmd:maintenanceNote') do
|
|
41
|
+
@xml.tag!('gco:CharacterString',note)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
elsif $showAllTags
|
|
45
|
+
@xml.tag!('gmd:maintenanceNote')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# maintenance information - contact - CI_ResponsibleParty
|
|
49
|
+
aContacts = hMaintInfo[:maintContacts]
|
|
50
|
+
if aContacts.empty? && $shoeEmpty
|
|
51
|
+
@xml.tag!('gmd:contact')
|
|
52
|
+
else
|
|
53
|
+
aContacts.each do |hContact|
|
|
54
|
+
@xml.tag!('gmd:contact') do
|
|
55
|
+
rPartyClass.writeXML(hContact)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# ISO <<Class>> MD_Medium
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-09-26 original script
|
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
7
|
+
|
|
8
|
+
require 'code_mediumName'
|
|
9
|
+
require 'code_mediumFormat'
|
|
10
|
+
|
|
11
|
+
class MD_Medium
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(medium)
|
|
18
|
+
|
|
19
|
+
# classes used
|
|
20
|
+
medFormatCode = MD_MediumFormatCode.new(@xml)
|
|
21
|
+
medNameCode = MD_MediumNameCode.new(@xml)
|
|
22
|
+
|
|
23
|
+
@xml.tag!('gmd:MD_Medium') do
|
|
24
|
+
|
|
25
|
+
# medium - name - MD_MediumNameCode
|
|
26
|
+
s = medium[:mediumName]
|
|
27
|
+
if !s.nil?
|
|
28
|
+
@xml.tag!('gmd:name') do
|
|
29
|
+
medNameCode.writeXML(s)
|
|
30
|
+
end
|
|
31
|
+
elsif $showAllTags
|
|
32
|
+
@xml.tag!('gmd:name')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# medium - medium format - MD_MediumFormatCode
|
|
36
|
+
s = medium[:mediumFormat]
|
|
37
|
+
if !s.nil?
|
|
38
|
+
@xml.tag!('gmd:mediumFormat') do
|
|
39
|
+
medFormatCode.writeXML(s)
|
|
40
|
+
end
|
|
41
|
+
elsif $showAllTags
|
|
42
|
+
@xml.tag!('gmd:mediumFormat')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# medium - medium note
|
|
46
|
+
s = medium[:mediumNote]
|
|
47
|
+
if !s.nil?
|
|
48
|
+
@xml.tag!('gmd:mediumNote') do
|
|
49
|
+
@xml.tag!('gco:CharacterString',s)
|
|
50
|
+
end
|
|
51
|
+
elsif $showAllTags
|
|
52
|
+
@xml.tag!('gmd:mediumNote')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# ISO <<Class>> MI_Metadata
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-08-09 original script
|
|
6
|
+
# Stan Smith 2013-09-25 added distribution
|
|
7
|
+
# Stan Smith 2013-09-25 added data quality
|
|
8
|
+
# Stan Smith 2013-09-25 added metadata maintenance
|
|
9
|
+
# Stan Smith 2013-09-25 added reference system info
|
|
10
|
+
# Stan Smith 2013-12-27 added parent identifier
|
|
11
|
+
# Stan Smith 2014-05-14 modify for JSON schema 0.4.0
|
|
12
|
+
# Stan Smith 2014-05-14 refactored method calls to be consistent w/ other classes
|
|
13
|
+
# Stan Smith 2014-05-28 added resource URI
|
|
14
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
15
|
+
# Stan Smith 2014-08-18 add dataSetURI
|
|
16
|
+
# Stan Smith 2014-09-03 replaced spatial reference system code with named, epsg, and
|
|
17
|
+
# ... wkt reference system descriptions using RS_Identifier for 0.7.0
|
|
18
|
+
# Stan Smith 2014-09-19 changed file identifier to read from internal storage as
|
|
19
|
+
# ... an MD_Identifier class. To support version 0.8.0 json.
|
|
20
|
+
|
|
21
|
+
require 'code_characterSet'
|
|
22
|
+
require 'code_scope'
|
|
23
|
+
require 'class_responsibleParty'
|
|
24
|
+
require 'class_metadataExtension'
|
|
25
|
+
require 'class_dataIdentification'
|
|
26
|
+
require 'class_distribution'
|
|
27
|
+
require 'class_dataQuality'
|
|
28
|
+
require 'class_maintenanceInformation'
|
|
29
|
+
require 'class_referenceSystem'
|
|
30
|
+
require 'module_dateTimeFun'
|
|
31
|
+
|
|
32
|
+
class MI_Metadata
|
|
33
|
+
|
|
34
|
+
def initialize(xml)
|
|
35
|
+
@xml = xml
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def writeXML(internalObj)
|
|
39
|
+
|
|
40
|
+
# # classes used in MD_Metadata
|
|
41
|
+
charCode = MD_CharacterSetCode.new(@xml)
|
|
42
|
+
scopeCode = MD_ScopeCode.new(@xml)
|
|
43
|
+
rPartyClass = CI_ResponsibleParty.new(@xml)
|
|
44
|
+
mdExtClass = MD_MetadataExtensionInformation.new(@xml)
|
|
45
|
+
dataIdClass = MD_DataIdentification.new(@xml)
|
|
46
|
+
distClass = MD_Distribution.new(@xml)
|
|
47
|
+
dqClass = DQ_DataQuality.new(@xml)
|
|
48
|
+
metaMaintClass = MD_MaintenanceInformation.new(@xml)
|
|
49
|
+
refSysClass = MD_ReferenceSystem.new(@xml)
|
|
50
|
+
|
|
51
|
+
intMetadata = internalObj[:metadata]
|
|
52
|
+
hMetaInfo = intMetadata[:metadataInfo]
|
|
53
|
+
hResInfo = intMetadata[:resourceInfo]
|
|
54
|
+
aAssocRes = intMetadata[:associatedResources]
|
|
55
|
+
$intContactList = internalObj[:contacts]
|
|
56
|
+
|
|
57
|
+
# document head
|
|
58
|
+
@xml.instruct! :xml, encoding: 'UTF-8'
|
|
59
|
+
@xml.comment!('core gmi based instance document ISO 19115-2')
|
|
60
|
+
@xml.tag!('gmi:MI_Metadata',{'xmlns:gmi' => 'http://www.isotc211.org/2005/gmi',
|
|
61
|
+
'xmlns:gmd' => 'http://www.isotc211.org/2005/gmd',
|
|
62
|
+
'xmlns:gco' => 'http://www.isotc211.org/2005/gco',
|
|
63
|
+
'xmlns:gml' => 'http://www.opengis.net/gml/3.2',
|
|
64
|
+
'xmlns:gsr' => 'http://www.isotc211.org/2005/gsr',
|
|
65
|
+
'xmlns:gss' => 'http://www.isotc211.org/2005/gss',
|
|
66
|
+
'xmlns:gst' => 'http://www.isotc211.org/2005/gst',
|
|
67
|
+
'xmlns:gmx' => 'http://www.isotc211.org/2005/gmx',
|
|
68
|
+
'xmlns:gfc' => 'http://www.isotc211.org/2005/gfc',
|
|
69
|
+
'xmlns:srv' => 'http://www.isotc211.org/2005/srv',
|
|
70
|
+
'xmlns:xlink' => 'http://www.w3.org/1999/xlink',
|
|
71
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
|
72
|
+
'xsi:schemaLocation' => 'http://www.isotc211.org/2005/gmi ftp://ftp.ncddc.noaa.gov/pub/Metadata/Online_ISO_Training/Intro_to_ISO/schemas/ISObio/schema.xsd'}) do
|
|
73
|
+
|
|
74
|
+
# metadata information - file identifier - default
|
|
75
|
+
# the internal object stores the file identifier as a MD_Identifier to support 19115-1
|
|
76
|
+
# ISO 19115-2 only support the file identifier as a character string
|
|
77
|
+
@xml.tag!('gmd:fileIdentifier') do
|
|
78
|
+
hMetadataId = hMetaInfo[:metadataId]
|
|
79
|
+
if hMetadataId[:identifier].nil?
|
|
80
|
+
# generate fileIdentifier if one not provided
|
|
81
|
+
@xml.tag!('gco:CharacterString',UUIDTools::UUID.random_create.to_s)
|
|
82
|
+
else
|
|
83
|
+
@xml.tag!('gco:CharacterString',hMetadataId[:identifier])
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# metadata information - file language - default
|
|
88
|
+
@xml.tag!('gmd:language') do
|
|
89
|
+
# all xml is written in US English
|
|
90
|
+
@xml.tag!('gco:CharacterString','eng; USA')
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# metadata information - character set - default
|
|
94
|
+
@xml.tag!('gmd:characterSet') do
|
|
95
|
+
# all out put is in utf8
|
|
96
|
+
charCode.writeXML('utf8')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# metadata information - parent identifier
|
|
100
|
+
# the internal object stores the parent identifier as a CI_Citation to support 19115-1
|
|
101
|
+
# ISO 19115-2 only support the parent identifier as a character string
|
|
102
|
+
hParent = hMetaInfo[:parentMetadata]
|
|
103
|
+
if !hParent.empty?
|
|
104
|
+
@xml.tag!('gmd:parentIdentifier') do
|
|
105
|
+
s = hParent[:citTitle]
|
|
106
|
+
aResIds = hParent[:citResourceIDs]
|
|
107
|
+
if aResIds.length > 0
|
|
108
|
+
s += ' ids: | '
|
|
109
|
+
aResIds.each do |resource|
|
|
110
|
+
s += resource[:identifierType] + ': ' + resource[:identifier] + ' | '
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
@xml.tag!('gco:CharacterString',s)
|
|
114
|
+
end
|
|
115
|
+
elsif $showAllTags
|
|
116
|
+
@xml.tag!('gmd:parentIdentifier')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# metadata information - file hierarchy - default dataset
|
|
120
|
+
aHierarchy = hMetaInfo[:metadataScope]
|
|
121
|
+
if aHierarchy.empty?
|
|
122
|
+
@xml.tag!('gmd:hierarchyLevel') do
|
|
123
|
+
scopeCode.writeXML('dataset')
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
aHierarchy.each do |hierarchy|
|
|
127
|
+
@xml.tag!('gmd:hierarchyLevel') do
|
|
128
|
+
scopeCode.writeXML(hierarchy)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# metadata information - metadata custodian - required
|
|
134
|
+
aCustodians = hMetaInfo[:metadataCustodians]
|
|
135
|
+
if aCustodians.empty?
|
|
136
|
+
@xml.tag!('gmd:contact', {'gco:nilReason' => 'missing'})
|
|
137
|
+
else
|
|
138
|
+
aCustodians.each do |hCustodian|
|
|
139
|
+
@xml.tag!('gmd:contact') do
|
|
140
|
+
rPartyClass.writeXML(hCustodian)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# metadata information - date stamp - required - default to now()
|
|
146
|
+
@xml.tag!('gmd:dateStamp') do
|
|
147
|
+
|
|
148
|
+
# if date not supplied, fill with today's date
|
|
149
|
+
hDate = hMetaInfo[:metadataCreateDate]
|
|
150
|
+
if hDate.empty?
|
|
151
|
+
mDate = AdiwgDateTimeFun.stringDateFromDateTime(DateTime.now, 'YMD')
|
|
152
|
+
else
|
|
153
|
+
mDateTime = hDate[:dateTime]
|
|
154
|
+
mDateRes = hDate[:dateResolution]
|
|
155
|
+
if mDateTime.nil?
|
|
156
|
+
mDate = AdiwgDateTimeFun.stringDateFromDateTime(DateTime.now, 'YMD')
|
|
157
|
+
else
|
|
158
|
+
mDate = AdiwgDateTimeFun.stringDateFromDateTime(mDateTime, mDateRes)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
@xml.tag!('gco:Date',mDate)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# metadata information - metadata standard name - default
|
|
166
|
+
@xml.tag!('gmd:metadataStandardName') do
|
|
167
|
+
@xml.tag!('gco:CharacterString','ISO 19115-2')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# metadata information - metadata standard version - default
|
|
171
|
+
@xml.tag!('gmd:metadataStandardVersion') do
|
|
172
|
+
@xml.tag!('gco:CharacterString','ISO 19115-2:2009(E)')
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# metadata information - dataset URI
|
|
176
|
+
s = hMetaInfo[:metadataURI]
|
|
177
|
+
if !s.nil?
|
|
178
|
+
@xml.tag!('gmd:dataSetURI') do
|
|
179
|
+
@xml.tag!('gco:CharacterString',s)
|
|
180
|
+
end
|
|
181
|
+
elsif $showAllTags
|
|
182
|
+
@xml.tag!('gmd:dataSetURI')
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# metadata information - reference system
|
|
186
|
+
hRefSystems = hResInfo[:spatialReferenceSystem]
|
|
187
|
+
if !hRefSystems.empty?
|
|
188
|
+
|
|
189
|
+
# named reference systems
|
|
190
|
+
aRefNames = hRefSystems[:sRNames]
|
|
191
|
+
aRefNames.each do |refName|
|
|
192
|
+
@xml.tag!('gmd:referenceSystemInfo') do
|
|
193
|
+
refSysClass.writeXML(refName, 'name')
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# epsg reference systems
|
|
198
|
+
aRefNames = hRefSystems[:sREPSGs]
|
|
199
|
+
aRefNames.each do |refName|
|
|
200
|
+
@xml.tag!('gmd:referenceSystemInfo') do
|
|
201
|
+
refSysClass.writeXML(refName, 'epsg')
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# wkt reference systems
|
|
206
|
+
aRefNames = hRefSystems[:sRWKTs]
|
|
207
|
+
aRefNames.each do |refName|
|
|
208
|
+
@xml.tag!('gmd:referenceSystemInfo') do
|
|
209
|
+
refSysClass.writeXML(refName, 'wkt')
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
elsif $showAllTags
|
|
214
|
+
@xml.tag!('gmd:referenceSystemInfo')
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# metadata information - metadata extension info
|
|
218
|
+
aExtensions = hMetaInfo[:extensions]
|
|
219
|
+
if !aExtensions.empty?
|
|
220
|
+
aExtensions.each do |hExtension|
|
|
221
|
+
@xml.tag!('gmd:metadataExtensionInfo') do
|
|
222
|
+
mdExtClass.writeXML(hExtension)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
elsif $showAllTags
|
|
226
|
+
@xml.tag!('gmd:metadataExtensionInfo')
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# metadata information - identification info - required
|
|
230
|
+
if hResInfo.empty?
|
|
231
|
+
@xml.tag!('gmd:identificationInfo', {'gco:nilReason' => 'missing'})
|
|
232
|
+
else
|
|
233
|
+
@xml.tag!('gmd:identificationInfo') do
|
|
234
|
+
dataIdClass.writeXML(hResInfo, aAssocRes)
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# metadata information - content info
|
|
239
|
+
# ... information about data and link to 19110
|
|
240
|
+
# ... on hold until 19115-1 release
|
|
241
|
+
|
|
242
|
+
# metadata information - distribution info []
|
|
243
|
+
aDistInfo = intMetadata[:distributorInfo]
|
|
244
|
+
if !aDistInfo.empty?
|
|
245
|
+
@xml.tag!('gmd:distributionInfo') do
|
|
246
|
+
distClass.writeXML(aDistInfo)
|
|
247
|
+
end
|
|
248
|
+
elsif $showAllTags
|
|
249
|
+
@xml.tag!('gmd:distributionInfo')
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# metadata information - data quality info
|
|
253
|
+
aDQInfo = hResInfo[:dataQualityInfo]
|
|
254
|
+
if !aDQInfo.empty?
|
|
255
|
+
aDQInfo.each do |hDQInfo|
|
|
256
|
+
@xml.tag!('gmd:dataQualityInfo') do
|
|
257
|
+
dqClass.writeXML(hDQInfo)
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
elsif $showAllTags
|
|
261
|
+
xml.tag!('gmd:dataQualityInfo')
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# metadata information - metadata maintenance
|
|
265
|
+
hMetaMaint = hMetaInfo[:maintInfo]
|
|
266
|
+
if !hMetaMaint.empty?
|
|
267
|
+
@xml.tag!('gmd:metadataMaintenance') do
|
|
268
|
+
metaMaintClass.writeXML(hMetaMaint)
|
|
269
|
+
end
|
|
270
|
+
elsif $showAllTags
|
|
271
|
+
xml.tag!('gmd:metadataMaintenance')
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# ISO <<Class>> MD_MetadataExtensionInformation
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-22 original script
|
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
7
|
+
|
|
8
|
+
require 'code_obligation'
|
|
9
|
+
require 'code_datatype'
|
|
10
|
+
require 'class_onlineResource'
|
|
11
|
+
require 'class_responsibleParty'
|
|
12
|
+
|
|
13
|
+
class MD_MetadataExtensionInformation
|
|
14
|
+
|
|
15
|
+
def initialize(xml)
|
|
16
|
+
@xml = xml
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def writeXML(hExtension)
|
|
20
|
+
|
|
21
|
+
# classes used
|
|
22
|
+
olResClass = CI_OnlineResource.new(@xml)
|
|
23
|
+
rPartyClass = CI_ResponsibleParty.new(@xml)
|
|
24
|
+
obCode = MD_ObligationCode.new(@xml)
|
|
25
|
+
dataTCode = MD_DatatypeCode.new(@xml)
|
|
26
|
+
|
|
27
|
+
@xml.tag!('gmd:MD_MetadataExtensionInformation') do
|
|
28
|
+
|
|
29
|
+
# metadata extension - online resource - CI_OnLineResource
|
|
30
|
+
hOLResource = hExtension[:onLineResource]
|
|
31
|
+
if !hOLResource.empty?
|
|
32
|
+
@xml.tag!('gmd:extensionOnLineResource') do
|
|
33
|
+
olResClass.writeXML(hOLResource)
|
|
34
|
+
end
|
|
35
|
+
elsif $showAllTags
|
|
36
|
+
@xml.tag!('gmd:extensionOnLineResource')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# metadata extension = extended element information
|
|
40
|
+
@xml.tag!('gmd:extendedElementInformation') do
|
|
41
|
+
@xml.tag!('gmd:MD_ExtendedElementInformation') do
|
|
42
|
+
|
|
43
|
+
# extended element info - name - required
|
|
44
|
+
s = hExtension[:extName]
|
|
45
|
+
if s.nil?
|
|
46
|
+
@xml.tag!('gmd:name',{'gco:nilReason'=>'missing'})
|
|
47
|
+
else
|
|
48
|
+
@xml.tag!('gmd:name') do
|
|
49
|
+
@xml.tag!('gco:CharacterString',s)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# extended element info - short name
|
|
54
|
+
s = hExtension[:extShortName]
|
|
55
|
+
if !s.nil?
|
|
56
|
+
@xml.tag!('gmd:shortName') do
|
|
57
|
+
@xml.tag!('gco:CharacterString',s)
|
|
58
|
+
end
|
|
59
|
+
elsif $showAllTags
|
|
60
|
+
@xml.tag!('gmd:shortName')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# extended element info - definition - required
|
|
64
|
+
s = hExtension[:extDefinition]
|
|
65
|
+
if s.nil?
|
|
66
|
+
@xml.tag!('gmd:definition',{'gco:nilReason'=>'missing'})
|
|
67
|
+
else
|
|
68
|
+
@xml.tag!('gmd:definition') do
|
|
69
|
+
@xml.tag!('gco:CharacterString',s)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# extended element info - obligation
|
|
74
|
+
s = hExtension[:obligation]
|
|
75
|
+
if !s.nil?
|
|
76
|
+
@xml.tag!('gmd:obligation') do
|
|
77
|
+
obCode.writeXML(s)
|
|
78
|
+
end
|
|
79
|
+
elsif $showAllTags
|
|
80
|
+
@xml.tag!('gmd:obligation')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# extended element info - data type - required
|
|
84
|
+
s = hExtension[:dataType]
|
|
85
|
+
if s.nil?
|
|
86
|
+
@xml.tag!('gmd:dataType',{'gco:nilReason'=>'missing'})
|
|
87
|
+
else
|
|
88
|
+
@xml.tag!('gmd:dataType') do
|
|
89
|
+
dataTCode.writeXML(s)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# extended element info - maximum occurrence
|
|
94
|
+
s = hExtension[:maxOccurrence]
|
|
95
|
+
if !s.nil?
|
|
96
|
+
@xml.tag!('gmd:maximumOccurrence') do
|
|
97
|
+
@xml.tag!('gco:CharacterString',s)
|
|
98
|
+
end
|
|
99
|
+
elsif $showAllTags
|
|
100
|
+
@xml.tag!('gmd:maximumOccurrence')
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# extended element info - parent entity - required
|
|
104
|
+
aParents = hExtension[:parentEntities]
|
|
105
|
+
if aParents.empty?
|
|
106
|
+
@xml.tag!('gmd:parentEntity',{'gco:nilReason'=>'missing'})
|
|
107
|
+
else
|
|
108
|
+
aParents.each do |parent|
|
|
109
|
+
@xml.tag!('gmd:parentEntity') do
|
|
110
|
+
@xml.tag!('gco:CharacterString',parent)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# extended element info - rule
|
|
116
|
+
s = hExtension[:rule]
|
|
117
|
+
if s.nil?
|
|
118
|
+
@xml.tag!('gmd:rule',{'gco:nilReason'=>'missing'})
|
|
119
|
+
else
|
|
120
|
+
@xml.tag!('gmd:rule') do
|
|
121
|
+
@xml.tag!('gco:CharacterString',s)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# extended element info - rationale
|
|
126
|
+
aRations = hExtension[:rationales]
|
|
127
|
+
if aRations.empty?
|
|
128
|
+
@xml.tag!('gmd:rationale')
|
|
129
|
+
else
|
|
130
|
+
aRations.each do |ration|
|
|
131
|
+
@xml.tag!('gmd:rationale') do
|
|
132
|
+
@xml.tag!('gco:CharacterString', ration)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# extended element info - source - CI_ResponsibleParty
|
|
138
|
+
aSources = hExtension[:extSources]
|
|
139
|
+
if aSources.empty?
|
|
140
|
+
@xml.tag!('gmd:source',{'gco:nilReason'=>'missing'})
|
|
141
|
+
else
|
|
142
|
+
aSources.each do |hSource|
|
|
143
|
+
@xml.tag!('gmd:source') do
|
|
144
|
+
rPartyClass.writeXML(hSource)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|