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