adiwg-mdtranslator 2.20.0.pre.beta.10 → 2.21.0.pre.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/Gemfile.lock +5 -5
  4. data/README.md +0 -21
  5. data/Rakefile +0 -1
  6. data/adiwg-mdtranslator.gemspec +2 -2
  7. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +45 -7
  8. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dataQuality.rb +37 -27
  9. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_acquisition.rb +133 -0
  10. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +0 -8
  11. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_environment.rb +47 -0
  12. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_event.rb +88 -0
  13. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_instrument.rb +73 -0
  14. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_instrumentationEvent.rb +77 -0
  15. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_instrumentationEventList.rb +62 -0
  16. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_metadata.rb +11 -0
  17. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_objective.rb +104 -0
  18. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_operation.rb +119 -0
  19. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_pass.rb +53 -0
  20. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_plan.rb +80 -0
  21. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_platform.rb +87 -0
  22. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_requestedDate.rb +51 -0
  23. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_requirement.rb +98 -0
  24. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_revision.rb +50 -0
  25. data/lib/adiwg/mdtranslator/version.rb +1 -1
  26. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_dataQuality.rb +185 -133
  27. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +1 -1
  28. data/lib/adiwg/mdtranslator/writers/html/sections/html_acquisition.rb +199 -0
  29. data/lib/adiwg/mdtranslator/writers/html/sections/html_body.rb +19 -0
  30. data/lib/adiwg/mdtranslator/writers/html/sections/html_environment.rb +58 -0
  31. data/lib/adiwg/mdtranslator/writers/html/sections/html_event.rb +121 -0
  32. data/lib/adiwg/mdtranslator/writers/html/sections/html_instrument.rb +98 -0
  33. data/lib/adiwg/mdtranslator/writers/html/sections/html_instrumentationEvent.rb +84 -0
  34. data/lib/adiwg/mdtranslator/writers/html/sections/html_instrumentationEventList.rb +90 -0
  35. data/lib/adiwg/mdtranslator/writers/html/sections/html_objective.rb +155 -0
  36. data/lib/adiwg/mdtranslator/writers/html/sections/html_operation.rb +178 -0
  37. data/lib/adiwg/mdtranslator/writers/html/sections/html_pass.rb +72 -0
  38. data/lib/adiwg/mdtranslator/writers/html/sections/html_plan.rb +93 -0
  39. data/lib/adiwg/mdtranslator/writers/html/sections/html_platform.rb +117 -0
  40. data/lib/adiwg/mdtranslator/writers/html/sections/html_requestedDate.rb +33 -0
  41. data/lib/adiwg/mdtranslator/writers/html/sections/html_requirement.rb +139 -0
  42. data/lib/adiwg/mdtranslator/writers/html/sections/html_revision.rb +55 -0
  43. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_mdMetadata.rb +0 -27
  44. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_timePeriod.rb +6 -2
  45. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_acquisition.rb +42 -0
  46. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +0 -1
  47. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_environment.rb +28 -0
  48. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_event.rb +37 -0
  49. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_instrument.rb +35 -0
  50. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_instrumentationEvent.rb +30 -0
  51. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_instrumentationEventList.rb +32 -0
  52. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_metadata.rb +2 -0
  53. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_objective.rb +37 -0
  54. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_operation.rb +34 -0
  55. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_pass.rb +30 -0
  56. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_plan.rb +32 -0
  57. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_platform.rb +35 -0
  58. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_requestedDate.rb +26 -0
  59. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_requirement.rb +36 -0
  60. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_revision.rb +28 -0
  61. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_allocation.rb +1 -1
  62. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_citation.rb +8 -8
  63. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_dataQualityReport.rb +3 -3
  64. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_geographicExtent.rb +1 -1
  65. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_lineage.rb +4 -4
  66. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_maintenance.rb +4 -4
  67. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_medium.rb +2 -2
  68. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_metadataInfo.rb +4 -4
  69. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_releasability.rb +1 -1
  70. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_resourceInfo.rb +5 -5
  71. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_responsibility.rb +1 -1
  72. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_spatialRepresentation.rb +4 -4
  73. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_taxonomy.rb +1 -1
  74. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timeInstant.rb +1 -1
  75. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_timePeriod.rb +5 -5
  76. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_transferOption.rb +2 -2
  77. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_usage.rb +5 -5
  78. data/lib/adiwg/mdtranslator/writers/simple_html/sections/html_vectorRepresentation.rb +2 -2
  79. data/lib/adiwg/mdtranslator_cli.rb +1 -1
  80. metadata +48 -41
  81. data/DCAT-US.md +0 -67
  82. data/lib/adiwg/mdtranslator/writers/dcat_us/dcat_us_writer.rb +0 -98
  83. data/lib/adiwg/mdtranslator/writers/dcat_us/readme.md +0 -10
  84. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_access_level.rb +0 -55
  85. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_access_url.rb +0 -17
  86. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_accrualPeriodicity.rb +0 -45
  87. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_bureau_code.rb +0 -33
  88. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_contact_point.rb +0 -29
  89. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_dcat_us.rb +0 -104
  90. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_described_by.rb +0 -29
  91. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_described_by_type.rb +0 -33
  92. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_description.rb +0 -19
  93. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_distribution.rb +0 -59
  94. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_download_url.rb +0 -17
  95. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb +0 -29
  96. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb +0 -27
  97. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_issued.rb +0 -19
  98. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_keyword.rb +0 -19
  99. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_landing_page.rb +0 -27
  100. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_language.rb +0 -23
  101. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_license.rb +0 -18
  102. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_media_type.rb +0 -17
  103. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_modified.rb +0 -29
  104. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_primaryITInvestmentUII.rb +0 -19
  105. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_program_code.rb +0 -33
  106. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_publisher.rb +0 -74
  107. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_references.rb +0 -50
  108. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_rights.rb +0 -32
  109. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_spatial.rb +0 -32
  110. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_system_of_records.rb +0 -28
  111. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_temporal.rb +0 -40
  112. data/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_theme.rb +0 -28
  113. data/lib/adiwg/mdtranslator/writers/dcat_us/version.rb +0 -14
  114. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_enumerationList.rb +0 -52
  115. data/lib/adiwg/mdtranslator/writers/iso19115_3/classes/class_extension.rb +0 -208
@@ -1,74 +0,0 @@
1
- module ADIWG
2
- module Mdtranslator
3
- module Writers
4
- module Dcat_us
5
- module Publisher
6
- def self.build(intObj)
7
- contacts = intObj.dig(:contacts)
8
- metadata = intObj.dig(:metadata)
9
- responsible_parties = metadata&.dig(:resourceInfo, :citation, :responsibleParties)
10
- resource_distributions = metadata&.dig(:distributorInfo)
11
-
12
- publisher = find_publisher(responsible_parties) || find_distributions_publisher(intObj)
13
-
14
- return if publisher.nil?
15
-
16
- name, org_name = extract_names(publisher, contacts)
17
-
18
- return if name.nil?
19
-
20
- build_json(name, org_name)
21
- end
22
-
23
- private
24
-
25
- def self.find_publisher(responsible_parties)
26
- responsible_parties&.detect do |party|
27
- party[:roleName] == 'publisher' && party.dig(:parties)&.first&.dig(:contactType) == 'organization'
28
- end
29
- end
30
-
31
- def self.find_distributions_publisher(intObj)
32
- distributor_info = intObj.dig(:metadata, :distributorInfo) || []
33
- distributor_info.each do |distribution|
34
- distributors = distribution[:distributor] || []
35
- distributors.each do |dist|
36
- contact_type = dist.dig(:contact, :parties, 0, :contactType)
37
- return dist[:contact] if contact_type == 'organization'
38
- end
39
- end
40
- nil
41
- end
42
-
43
- def self.extract_names(publisher, contacts)
44
- contact_id = publisher.dig(:parties)&.first&.dig(:contactId) || publisher[:contactId]
45
- related_contact = contacts&.detect { |contact| contact[:contactId] == contact_id }
46
- org_name = nil
47
- if related_contact
48
- member_of_org_ids = related_contact[:memberOfOrgs]
49
- member_of_orgs = contacts.select { |contact| member_of_org_ids&.include?(contact[:contactId]) && contact[:isOrganization] }
50
- org_name = member_of_orgs.first&.dig(:name)
51
- end
52
- name = publisher.dig(:parties)&.first&.dig(:contactName) || publisher[:contactName]
53
- [name, org_name]
54
- end
55
-
56
- def self.build_json(name, org_name)
57
- Jbuilder.new do |json|
58
- json.set!('@type', 'org:Organization')
59
- json.set!('name', name)
60
-
61
- if org_name
62
- json.subOrganizationOf do |json_sub|
63
- json_sub.set!('@type', 'org:Organization')
64
- json_sub.set!('name', org_name)
65
- end
66
- end
67
- end
68
- end
69
-
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,50 +0,0 @@
1
- require 'jbuilder'
2
-
3
- module ADIWG
4
- module Mdtranslator
5
- module Writers
6
- module Dcat_us
7
- module References
8
-
9
- def self.build(intObj)
10
- metadata = intObj.dig(:metadata)
11
- associated_resources = metadata&.dig(:associatedResources)
12
- additional_documents = metadata&.dig(:additionalDocuments)
13
- uris = []
14
-
15
- if associated_resources
16
- associated_resources.each do |associated|
17
- citation = associated.dig(:resourceCitation)
18
- online_resources = citation&.dig(:onlineResources)
19
- next unless online_resources
20
-
21
- online_resources.each do |online|
22
- uri = online.dig(:olResURI)
23
- uris << uri if uri
24
- end
25
- end
26
- end
27
-
28
- if additional_documents
29
- additional_documents.each do |additional|
30
- citations = additional&.dig(:citation) || []
31
- citations.each do |citation|
32
- online_resources = citation&.dig(:onlineResources)
33
- next unless online_resources
34
-
35
- online_resources.each do |online|
36
- uri = online.dig(:olResURI)
37
- uris << uri if uri
38
- end
39
- end
40
- end
41
- end
42
-
43
- uris.join(',')
44
- end
45
-
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,32 +0,0 @@
1
- module ADIWG
2
- module Mdtranslator
3
- module Writers
4
- module Dcat_us
5
- module Rights
6
-
7
- def self.build(intObj, accessLevel)
8
- resourceInfo = intObj.dig(:metadata, :resourceInfo)
9
- constraints = resourceInfo&.dig(:constraints)
10
-
11
- if accessLevel && ["restricted public", "non-public"].include?(accessLevel)
12
- constraints&.each do |constraint|
13
- if constraint[:type] == "use"
14
- statement = constraint.dig(:releasability, :statement)
15
- disseminationConstraints = constraint.dig(:releasability, :disseminationConstraint)
16
-
17
- if statement && disseminationConstraints
18
- combinedConstraints = disseminationConstraints.join(" ")
19
- return "#{statement} #{combinedConstraints}".strip
20
- end
21
- end
22
- end
23
- end
24
-
25
- nil
26
- end
27
-
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- module ADIWG
2
- module Mdtranslator
3
- module Writers
4
- module Dcat_us
5
- module Spatial
6
-
7
- def self.build(intObj)
8
- resourceInfo = intObj.dig(:metadata, :resourceInfo)
9
- extent = resourceInfo&.dig(:extents, 0)
10
- geographicExtent = extent&.dig(:geographicExtents, 0)
11
- boundingBox = geographicExtent&.dig(:boundingBox)
12
-
13
- if boundingBox
14
- return [
15
- boundingBox[:eastLongitude],
16
- boundingBox[:southLatitude],
17
- boundingBox[:westLongitude],
18
- boundingBox[:northLatitude]
19
- ].join(',')
20
- elsif geographicExtent&.dig(:geographicElement, 0, :type) == 'point'
21
- point = geographicExtent.dig(:geographicElement, 0, :coordinate)
22
- return "#{point[1]},#{point[0]}" if point&.length == 2
23
- end
24
-
25
- nil
26
- end
27
-
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,28 +0,0 @@
1
- require 'jbuilder'
2
-
3
- module ADIWG
4
- module Mdtranslator
5
- module Writers
6
- module Dcat_us
7
- module SystemOfRecords
8
-
9
- def self.build(intObj)
10
- associatedResources = intObj.dig(:metadata, :associatedResources)
11
-
12
- return nil if associatedResources.nil?
13
-
14
- associatedResources.each do |resource|
15
- if resource[:initiativeType] == 'sorn'
16
- onlineResources = resource.dig(:resourceCitation, :onlineResources)
17
- return onlineResources.first[:olResURI] if onlineResources&.first&.has_key?(:olResURI)
18
- end
19
- end
20
-
21
- return nil
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,40 +0,0 @@
1
- module ADIWG
2
- module Mdtranslator
3
- module Writers
4
- module Dcat_us
5
- module Temporal
6
-
7
- def self.build(intObj)
8
- resourceInfo = intObj.dig(:metadata, :resourceInfo)
9
- extent = resourceInfo&.dig(:extents, 0)
10
- temporalExtents = extent&.dig(:temporalExtents)
11
-
12
- if temporalExtents
13
- temporalExtents.each do |temporalExtent|
14
- timePeriod = temporalExtent&.dig(:timePeriod)
15
- next unless timePeriod
16
-
17
- startDateHash = timePeriod[:startDateTime]
18
- endDateHash = timePeriod[:endDateTime]
19
-
20
- startDate = startDateHash&.dig(:dateTime)
21
- endDate = endDateHash&.dig(:dateTime)
22
-
23
- if startDate && endDate
24
- return "#{startDate}/#{endDate}"
25
- elsif startDate
26
- return startDate
27
- elsif endDate
28
- return endDate
29
- end
30
- end
31
- end
32
-
33
- nil
34
- end
35
-
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,28 +0,0 @@
1
- require 'jbuilder'
2
-
3
- module ADIWG
4
- module Mdtranslator
5
- module Writers
6
- module Dcat_us
7
- module Theme
8
-
9
- def self.build(intObj)
10
- resourceInfo = intObj[:metadata][:resourceInfo]
11
- keywords_str = []
12
-
13
- resourceInfo[:keywords].each do |keyword_group|
14
- if keyword_group[:thesaurus][:title] == "ISO Topic Categories"
15
- keyword_group[:keywords].each do |keyword_obj|
16
- keywords_str << keyword_obj[:keyword]
17
- end
18
- end
19
- end
20
-
21
- return keywords_str.join(" ")
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,14 +0,0 @@
1
- # dcat_us version history
2
- # Johnathan Aspinwall 2023-06-22 created for mdJson/mdTranslator 2.0
3
-
4
- module ADIWG
5
- module Mdtranslator
6
- module Writers
7
- module Dcat_us
8
-
9
- VERSION = '1.0.0'
10
-
11
- end
12
- end
13
- end
14
- end
@@ -1,52 +0,0 @@
1
- # ISO <<CodeLists>> Enumerations
2
- # 19115-2 writer output in XML
3
-
4
- # History:
5
- # Stan Smith 2016-12-12 refactored for mdTranslator/mdJson 2.0
6
- # Stan Smith 2015-07-14 refactored to eliminate namespace globals $WriterNS and $IsoNS
7
- # Stan Smith 2015-07-14 refactored to make iso19110 independent of iso19115_2 classes
8
- # Stan Smith 2015-06-22 replace global ($response) with passed in object (responseObj)
9
- # Stan Smith 2015-06-12 refactored to use mdCodes gem for codelist contents
10
- # Stan Smith 2014-12-15 replaced NOAA CT_CodelistCatalogue with mdTranslator CT_CodelistCatalogue
11
- # Stan Smith 2014-12-12 refactored to handle namespacing readers and writers
12
- # Stan Smith 2014-10-15 allow non-ISO codesNames to be rendered
13
- # Stan Smith 2013-08-09 original script
14
-
15
- require 'adiwg-mdcodes'
16
-
17
- module ADIWG
18
- module Mdtranslator
19
- module Writers
20
- module Iso19115_3
21
-
22
- class MD_EnumerationList
23
-
24
- def initialize(xml, responseObj)
25
- @xml = xml
26
- @hResponseObj = responseObj
27
- end
28
-
29
- def writeXML(codeList, codeName)
30
-
31
- # get requested codelist from the adiwg-mdcodes gem
32
- mdCodelist = ADIWG::Mdcodes.getCodelistDetail(codeList)
33
-
34
- sourceName = mdCodelist['sourceName']
35
- codelist = mdCodelist['codelist']
36
-
37
- # search the codelist for a matching codeName
38
- # only valid enumeration values can be written in ISO
39
- codelist.each do |code|
40
- if code['codeName'] == codeName
41
- @xml.tag!('gmd:' + "#{sourceName}", codeName)
42
- break
43
- end
44
- end
45
-
46
- end # writeXML
47
- end # MD_EnumerationList class
48
-
49
- end
50
- end
51
- end
52
- end
@@ -1,208 +0,0 @@
1
- # ISO <<Class>> MD_MetadataExtensionInformation
2
- # 19115-2 writer output in XML
3
-
4
- # History:
5
- # Stan Smith 2019-03-22 replaced Enumeration class with method
6
- # Stan Smith 2018-04-09 add error and warning messaging
7
- # Stan Smith 2015-07-14 refactored to eliminate namespace globals $WriterNS and $IsoNS
8
- # Stan Smith 2015-07-14 refactored to make iso19110 independent of iso19115_2 classes
9
- # Stan Smith 2015-06-22 replace global ($response) with passed in object (hResponseObj)
10
- # Stan Smith 2015-06-11 change all codelists to use 'class_codelist' method
11
- # Stan Smith 2014-12-12 refactored to handle namespacing readers and writers
12
- # Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
13
- # Stan Smith 2013-11-22 original script.
14
-
15
- require 'adiwg/mdtranslator/internal/module_codelistFun'
16
- require_relative '../iso19115_3_writer'
17
- require_relative 'class_codelist'
18
- require_relative 'class_enumerationList'
19
- require_relative 'class_onlineResource'
20
-
21
- module ADIWG
22
- module Mdtranslator
23
- module Writers
24
- module Iso19115_3
25
-
26
- class MD_MetadataExtensionInformation
27
-
28
- def initialize(xml, hResponseObj)
29
- @xml = xml
30
- @hResponseObj = hResponseObj
31
- @NameSpace = ADIWG::Mdtranslator::Writers::Iso19115_3
32
- end
33
-
34
- def writeXML(hExtension)
35
-
36
- # classes used
37
- codelistClass = MD_Codelist.new(@xml, @hResponseObj)
38
- olResClass = CI_OnlineResource.new(@xml, @hResponseObj)
39
-
40
- outContext = 'extension information'
41
- outContext = 'extension name ' + hExtension[:name] unless hExtension[:name].nil?
42
-
43
- @xml.tag!('gmd:MD_MetadataExtensionInformation') do
44
-
45
- # metadata extension - online resource {CI_OnLineResource}
46
- hOLResource = hExtension[:onLineResource]
47
- unless hOLResource.empty?
48
- @xml.tag!('gmd:extensionOnLineResource') do
49
- olResClass.writeXML(hOLResource, outContext)
50
- end
51
- end
52
- if hOLResource.empty? && @hResponseObj[:writerShowTags]
53
- @xml.tag!('gmd:extensionOnLineResource')
54
- end
55
-
56
- # metadata extension = extended element information
57
- @xml.tag!('gmd:extendedElementInformation') do
58
- @xml.tag!('gmd:MD_ExtendedElementInformation') do
59
-
60
- # extended element info - name (required)
61
- s = hExtension[:name]
62
- unless s.nil?
63
- @xml.tag!('gmd:name') do
64
- @xml.tag!('gco:CharacterString', s)
65
- end
66
- end
67
- if s.nil?
68
- @NameSpace.issueWarning(100, 'gmd:name')
69
- end
70
-
71
- # extended element info - short name
72
- s = hExtension[:shortName]
73
- unless s.nil?
74
- @xml.tag!('gmd:shortName') do
75
- @xml.tag!('gco:CharacterString', s)
76
- end
77
- end
78
- if s.nil? && @hResponseObj[:writerShowTags]
79
- @xml.tag!('gmd:shortName')
80
- end
81
-
82
- # extended element info - definition (required)
83
- s = hExtension[:definition]
84
- unless s.nil?
85
- @xml.tag!('gmd:definition') do
86
- @xml.tag!('gco:CharacterString', s)
87
- end
88
- end
89
- if s.nil?
90
- @NameSpace.issueWarning(101, 'gmd:definition', outContext)
91
- end
92
-
93
- # extended element info - obligation {MD_ObligationCode}
94
- obligation = hExtension[:obligation]
95
- unless obligation.nil?
96
- if CodelistFun.validateItem('iso_obligation', obligation)
97
- @xml.tag!('gmd:obligation') do
98
- @xml.tag!('gmd:MD_ObligationCode', obligation)
99
- end
100
- else
101
- @NameSpace.issueWarning(380, 'gmd:obligation', "#{obligation}")
102
- end
103
- end
104
- if obligation.nil? && @hResponseObj[:writerShowTags]
105
- @xml.tag!('gmd:obligation')
106
- end
107
-
108
- # extended element info - data type (required)
109
- s = hExtension[:dataType]
110
- unless s.nil?
111
- @xml.tag!('gmd:dataType') do
112
- codelistClass.writeXML('gmd', 'iso_entityClass', s)
113
- end
114
- end
115
- if s.nil?
116
- @NameSpace.issueWarning(102, 'gmd:dataType', outContext)
117
- end
118
-
119
- # extended element info - maximum occurrence
120
- s = hExtension[:maxOccurrence]
121
- unless s.nil?
122
- @xml.tag!('gmd:maximumOccurrence') do
123
- @xml.tag!('gco:CharacterString', s)
124
- end
125
- end
126
- if s.nil? && @hResponseObj[:writerShowTags]
127
- @xml.tag!('gmd:maximumOccurrence')
128
- end
129
-
130
- # extended element info - parent entity [] (required)
131
- aParents = hExtension[:parentEntities]
132
- aParents.each do |parent|
133
- @xml.tag!('gmd:parentEntity') do
134
- @xml.tag!('gco:CharacterString', parent)
135
- end
136
- end
137
- if aParents.empty?
138
- @NameSpace.issueWarning(103, 'gmd:parentEntity', outContext)
139
- end
140
-
141
- # extended element info - rule
142
- s = hExtension[:rule]
143
- unless s.nil?
144
- @xml.tag!('gmd:rule') do
145
- @xml.tag!('gco:CharacterString', s)
146
- end
147
- end
148
- if s.nil?
149
- @NameSpace.issueWarning(104, 'gmd:rule', outContext)
150
- end
151
-
152
- # extended element info - rationale []
153
- aRations = hExtension[:rationales]
154
- aRations.each do |ration|
155
- @xml.tag!('gmd:rationale') do
156
- @xml.tag!('gco:CharacterString', ration)
157
- end
158
- end
159
- if aRations.empty? && @hResponseObj[:writerShowTags]
160
- @xml.tag!('gmd:rationale')
161
- end
162
-
163
- # extended element info - source [] (required)
164
- # only allowing 1 for now
165
- role = hExtension[:sourceRole]
166
- unless role.nil?
167
- @xml.tag!('gmd:source') do
168
- @xml.tag!('gmd:CI_ResponsibleParty') do
169
- orgName = hExtension[:sourceOrganization]
170
- unless orgName.nil?
171
- @xml.tag!('gmd:organisationName') do
172
- @xml.tag!('gco:CharacterString', orgName)
173
- end
174
- end
175
- uri = hExtension[:sourceURI]
176
- unless uri.nil?
177
- @xml.tag!('gmd:contactInfo') do
178
- @xml.tag!('gmd:CI_Contact') do
179
- @xml.tag!('gmd:onlineResource') do
180
- @xml.tag!('gmd:CI_OnlineResource') do
181
- @xml.tag!('gmd:linkage') do
182
- @xml.tag!('gmd:URL', uri)
183
- end
184
- end
185
- end
186
- end
187
- end
188
- end
189
- @xml.tag!('gmd:role') do
190
- codelistClass.writeXML('gmd', 'iso_role', role)
191
- end
192
- end
193
- end
194
- end
195
- if role.nil?
196
- @NameSpace.issueWarning(105, 'gmd:source', outContext)
197
- end
198
-
199
- end # gmd:MD_ExtendedElementInformation tag
200
- end # gmd:extendedElementInformation
201
- end # gmd:MD_MetadataExtensionInformation
202
- end # writeXML
203
- end # MD_MetadataExtensionInformation class
204
-
205
- end
206
- end
207
- end
208
- end