adiwg-mdtranslator 2.13.0 → 2.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +26 -14
  3. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +1 -0
  4. data/lib/adiwg/mdtranslator/readers/fgdc/modules/module_dateTime.rb +56 -41
  5. data/lib/adiwg/mdtranslator/readers/fgdc/version.rb +3 -1
  6. data/lib/adiwg/mdtranslator/readers/mdJson/mdJson_reader.rb +1 -0
  7. data/lib/adiwg/mdtranslator/readers/mdJson/mdJson_reader_messages_eng.yml +377 -0
  8. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_additionalDocumentation.rb +6 -8
  9. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_address.rb +6 -6
  10. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_allocation.rb +6 -7
  11. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_associatedResource.rb +7 -11
  12. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_attribute.rb +12 -13
  13. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_attributeGroup.rb +10 -6
  14. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_bearingDistanceResolution.rb +11 -21
  15. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_boundingBox.rb +18 -38
  16. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_citation.rb +10 -8
  17. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_constraint.rb +22 -28
  18. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_contact.rb +17 -18
  19. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_contactPostprocess.rb +5 -3
  20. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_coordinateResolution.rb +9 -15
  21. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_coverageDescription.rb +6 -8
  22. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dataDictionary.rb +8 -13
  23. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_date.rb +8 -12
  24. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dateTime.rb +6 -6
  25. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_dimension.rb +7 -11
  26. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distribution.rb +6 -5
  27. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distributor.rb +17 -8
  28. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_domain.rb +12 -12
  29. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_domainItem.rb +9 -13
  30. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_duration.rb +6 -6
  31. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_entity.rb +14 -12
  32. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_entityAttribute.rb +20 -19
  33. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_entityForeignKey.rb +8 -15
  34. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_entityIndex.rb +7 -10
  35. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_extent.rb +12 -10
  36. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_featureCollection.rb +8 -13
  37. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_format.rb +10 -7
  38. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_funding.rb +8 -6
  39. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geoJson.rb +8 -3
  40. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geodetic.rb +11 -8
  41. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geographicExtent.rb +12 -10
  42. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geographicResolution.rb +10 -13
  43. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geologicAge.rb +11 -10
  44. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryCollection.rb +8 -12
  45. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryFeature.rb +8 -12
  46. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryObject.rb +7 -12
  47. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryProperties.rb +4 -2
  48. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_georectifiedRepresentation.rb +13 -20
  49. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_georeferenceableRepresentation.rb +12 -14
  50. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_gmlIdentifier.rb +8 -8
  51. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_graphic.rb +6 -6
  52. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_gridRepresentation.rb +12 -13
  53. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_identifier.rb +10 -7
  54. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_imageDescription.rb +9 -3
  55. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_keyword.rb +8 -6
  56. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_keywordObject.rb +6 -5
  57. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_legalConstraint.rb +6 -6
  58. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_lineage.rb +10 -10
  59. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_locale.rb +7 -9
  60. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_maintenance.rb +12 -10
  61. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_mdJson.rb +59 -17
  62. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_measure.rb +9 -16
  63. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_medium.rb +10 -5
  64. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_metadata.rb +6 -9
  65. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_metadataInfo.rb +16 -16
  66. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_metadataRepository.rb +8 -6
  67. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_obliqueLinePoint.rb +7 -12
  68. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_onlineResource.rb +6 -6
  69. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_orderProcess.rb +5 -3
  70. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_party.rb +25 -28
  71. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_phone.rb +7 -7
  72. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_processStep.rb +15 -12
  73. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_projectionParameters.rb +11 -10
  74. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_referenceSystemParameters.rb +12 -11
  75. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_releasability.rb +10 -8
  76. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_resourceInfo.rb +29 -40
  77. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_resourceType.rb +6 -6
  78. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_resourceUsage.rb +5 -5
  79. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_responsibleParty.rb +12 -11
  80. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_schema.rb +6 -9
  81. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_scope.rb +11 -8
  82. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_scopeDescription.rb +6 -7
  83. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_securityConstraint.rb +6 -6
  84. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_series.rb +5 -3
  85. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_source.rb +15 -13
  86. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_spatialReference.rb +10 -9
  87. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_spatialRepresentation.rb +14 -11
  88. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_spatialResolution.rb +14 -10
  89. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_taxonomicClassification.rb +8 -15
  90. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_taxonomicSystem.rb +5 -5
  91. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_taxonomy.rb +7 -11
  92. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_temporalExtent.rb +12 -9
  93. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_timeInstant.rb +12 -9
  94. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_timeInterval.rb +9 -13
  95. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_timePeriod.rb +22 -26
  96. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_transferOption.rb +13 -9
  97. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_valueRange.rb +7 -9
  98. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_vectorObject.rb +6 -6
  99. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_vectorRepresentation.rb +12 -10
  100. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_verticalDatum.rb +10 -8
  101. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_verticalExtent.rb +12 -13
  102. data/lib/adiwg/mdtranslator/readers/mdJson/modules/module_voucher.rb +10 -10
  103. data/lib/adiwg/mdtranslator/version.rb +8 -3
  104. data/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialOrganization.rb +78 -84
  105. data/lib/adiwg/mdtranslator/writers/html/sections/html_responsibility.rb +3 -3
  106. data/lib/adiwg/mdtranslator/writers/iso19110/iso19110_writer.rb +23 -14
  107. data/lib/adiwg/mdtranslator/writers/iso19110/iso19110_writer_messages_eng.yml +2 -1
  108. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +10 -2
  109. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_date.rb +1 -0
  110. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +1 -1
  111. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_geographicExtent.rb +1 -1
  112. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_mdJson.rb +5 -5
  113. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_medium.rb +1 -1
  114. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_party.rb +1 -5
  115. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_repository.rb +4 -2
  116. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_verticalDatumParameters.rb +1 -0
  117. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_citation.rb +11 -11
  118. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c53862414e84e7d0b81437fcb696fce2a6ecbc3b
4
- data.tar.gz: 5a749d352492b147252d482d0dd71d16c4180e52
3
+ metadata.gz: 79cfaca2da52fe74b86aea2367ececbc1860562c
4
+ data.tar.gz: b37d8e8d9b5bfa47f7e2c556493ffe88794f1e6e
5
5
  SHA512:
6
- metadata.gz: e571c2edbd822f32dea0cd2387517bd6a1746ae253b9581e3fb059b6cac9ab2e5cecc6be96a1bb1fdefb31b109a51815f03f5c08baf931b139a41a190194055d
7
- data.tar.gz: a59a0aedd8178f11d1d8fe7cd006f5d60ea48d494844b041efcbfd2ce2a2a80d8d6d669b465e056bba27c62ac99f55fd1a398feff54c894972b05cf115ba5474
6
+ metadata.gz: 4651683398b739398aa3941766a579834d54f9f0618d8dd855fa60f8174282aa3c31d16ec374316223a5eda870cf92c973f2520f5dac7ebf6f4c3af9e966b9f5
7
+ data.tar.gz: 22222ad09d4b1a0df9b03c2a9884a746b2e5cfe3a60a3f90d67281ca59e818c392919677c9494bd35348e247845b4f62b68cb57e70878b8b2370a951515f36c9
data/Rakefile CHANGED
@@ -1,22 +1,34 @@
1
+
1
2
  require 'bundler/gem_tasks'
2
3
  require 'rake/testtask'
3
4
 
4
5
  Rake::TestTask.new do |t|
5
- t.libs << 'test'
6
- t.test_files = FileList[
7
- 'test/readers/mdJson/tc*.rb',
8
- 'test/readers/sbJson/tc*.rb',
9
- 'test/readers/fgdc/tc*.rb',
10
- 'test/writers/iso19115-2/tc*.rb',
11
- 'test/writers/iso19110/tc*.rb',
12
- 'test/writers/mdJson/tc*.rb',
13
- 'test/writers/sbJson/tc*.rb',
14
- 'test/writers/html/tc*.rb',
15
- 'test/writers/fgdc/tc*.rb',
16
- 'test/translator/tc*.rb'
17
- ]
18
- t.verbose = true
6
+ t.libs << 'test'
7
+ t.test_files = FileList[
8
+ 'test/readers/mdJson/tc*.rb',
9
+ 'test/readers/sbJson/tc*.rb',
10
+ 'test/readers/fgdc/tc*.rb',
11
+ 'test/writers/iso19115-2/tc*.rb',
12
+ 'test/writers/iso19110/tc*.rb',
13
+ 'test/writers/mdJson/tc*.rb',
14
+ 'test/writers/sbJson/tc*.rb',
15
+ 'test/writers/html/tc*.rb',
16
+ 'test/writers/fgdc/tc*.rb',
17
+ 'test/translator/tc*.rb'
18
+ ]
19
+ t.verbose = true
19
20
  end
20
21
 
21
22
  desc 'Run tests'
22
23
  task :default => :test
24
+
25
+ # 'test/readers/mdJson/tc*.rb'
26
+ # 'test/readers/sbJson/tc*.rb',
27
+ # 'test/readers/fgdc/tc*.rb',
28
+ # 'test/writers/iso19115-2/tc*.rb',
29
+ # 'test/writers/iso19110/tc*.rb',
30
+ # 'test/writers/mdJson/tc*.rb',
31
+ # 'test/writers/sbJson/tc*.rb',
32
+ # 'test/writers/html/tc*.rb',
33
+ # 'test/writers/fgdc/tc*.rb',
34
+ # 'test/translator/tc*.rb'
@@ -802,6 +802,7 @@ class InternalMetadata
802
802
  contactId: nil,
803
803
  contactIndex: nil,
804
804
  contactType: nil,
805
+ contactName: nil,
805
806
  organizationMembers: []
806
807
  }
807
808
  end
@@ -2,6 +2,7 @@
2
2
  # unpack fgdc metadata date
3
3
 
4
4
  # History:
5
+ # Stan Smith 2018-06-12 change default time zone to UTC
5
6
  # Stan Smith 2017-08-15 original script
6
7
 
7
8
  require 'date'
@@ -36,52 +37,67 @@ module ADIWG
36
37
  time = ''
37
38
  end
38
39
 
40
+ # determine if date/time is universal (default) or local
41
+ zoneFlag = Fgdc.get_metadata_time_convention
42
+ zoneFlag = 'universal time' if zoneFlag.nil? || zoneFlag == ''
43
+
39
44
  # convert date from fgdc to iso format
40
45
  year = date.byteslice(0,4)
41
46
  month = date.byteslice(4,2)
42
47
  day = date.byteslice(6,2)
43
- month = '01' if month.nil? || month == ''
44
- day = '01' if day.nil? || day == ''
45
- dtIn = year + '-' + month + '-' + day
46
48
 
47
- # add time element to date string
48
- if time.empty?
49
- dtIn = dtIn + 'T' + '00:00:00'
50
- else
51
- aScan = time.scan(/:/)
52
- if aScan.empty?
53
- hour = time.byteslice(0,2)
54
- minute = time.byteslice(2,2)
55
- second = time.byteslice(4,2)
56
- else
57
- aTime = time.split(':')
58
- hour = aTime[0]
59
- minute = aTime[1]
60
- second = aTime[2]
49
+ haveFullDate = false
50
+ dtIn = year
51
+ unless month.nil? || month == ''
52
+ dtIn += '-' + month
53
+ unless day.nil? || day == ''
54
+ dtIn += '-' + day
55
+ haveFullDate = true
61
56
  end
62
- minute = '00' if minute.nil? || minute == ''
63
- second = '00' if second.nil? || second == ''
64
- dtIn = dtIn + 'T' + hour + ':' + minute + ':' + second
65
57
  end
66
58
 
67
- # determine if date/time is 'universal time' or other
68
- timeFlag = Fgdc.get_metadata_time_convention
69
- timeFlag = 'local time' if timeFlag.nil? || timeFlag == ''
59
+ # if have full date and some time expression
60
+ # add time element to date string
61
+ if haveFullDate
62
+ unless time == ''
63
+ aScan = time.scan(/:/)
64
+ if aScan.empty?
65
+ hour = time.byteslice(0,2)
66
+ minute = time.byteslice(2,2)
67
+ second = time.byteslice(4,2)
68
+ else
69
+ aTime = time.split(':')
70
+ hour = aTime[0]
71
+ minute = aTime[1]
72
+ second = aTime[2]
73
+ end
74
+
75
+ # all times must include timezone
76
+ # timezone format requires hours, minutes, and seconds
77
+ hour = '00' if hour.nil? || hour == ''
78
+ minute = '00' if minute.nil? || minute == ''
79
+ second = '00' if second.nil? || second == ''
80
+ tmIn = 'T' + hour + ':' + minute + ':' + second
81
+
82
+ dtIn += tmIn
83
+
84
+ # add offset to date/time string
85
+ if zoneFlag == 'universal time'
86
+ dtIn = dtIn + '+00:00'
87
+ else
88
+ timeOffset = Time.now.gmt_offset
89
+ aOffset = timeOffset.divmod(3600)
90
+ hourOff = aOffset[0]
91
+ minOff = aOffset[1] * 60
92
+ if hourOff >= 0
93
+ zone = '+' + '%02d' % hourOff + ':' + '%02d' % minOff
94
+ else
95
+ zone = '%03d' % hourOff + ':' + '%02d' % minOff
96
+ end
97
+ dtIn = dtIn + zone
98
+ end
70
99
 
71
- # add offset to date/time string
72
- if timeFlag == 'universal time'
73
- dtIn = dtIn + '+00:00'
74
- else
75
- timeOffset = Time.now.gmt_offset
76
- aOffset = timeOffset.divmod(3600)
77
- hourOff = aOffset[0]
78
- minOff = aOffset[1] * 60
79
- if hourOff >= 0
80
- zone = '+' + '%02d' % hourOff + ':' + '%02d' % minOff
81
- else
82
- zone = '%03d' % hourOff + ':' + '%02d' % minOff
83
100
  end
84
- dtIn = dtIn + zone
85
101
  end
86
102
 
87
103
  # if dateTimeFromString fails, [0] = nil; [1] = 'ERROR'
@@ -92,12 +108,11 @@ module ADIWG
92
108
  return nil
93
109
  end
94
110
 
95
- # if not 'universal time' change the offset to utc
96
- dateTimeReturn = aDateTimeReturn[0]
97
- if timeFlag == 'universal time'
98
- utc = dateTimeReturn
111
+ # always output 'universal time'
112
+ if zoneFlag == 'universal time'
113
+ utc = aDateTimeReturn[0]
99
114
  else
100
- utc = dateTimeReturn.new_offset(Rational(0,24))
115
+ utc = aDateTimeReturn[0].new_offset(Rational(0,24))
101
116
  end
102
117
 
103
118
  # build internal dateTime object
@@ -1,6 +1,8 @@
1
1
  # adiwg mdTranslator / readers / fgdc
2
2
 
3
3
  # version 1 history
4
+ # 1.0.2 2018-06-12 change default time stamps from 'local' to UTC
5
+ # 1.0.2 2018-06-11 fix bug #179 remove 0 time value from date string when time not present
4
6
  # 1.0.1 2018-02-15 add messaging
5
7
  # 1.0.0 2017-07-11 version 1 FGDC CSDGM
6
8
 
@@ -8,7 +10,7 @@ module ADIWG
8
10
  module Mdtranslator
9
11
  module Readers
10
12
  module Fgdc
11
- VERSION = "1.0.1"
13
+ VERSION = "1.0.2"
12
14
  end
13
15
  end
14
16
  end
@@ -1,6 +1,7 @@
1
1
  # mdJson reader - process and direct mdJson ingest to internal data structure
2
2
 
3
3
  # History:
4
+ # Stan Smith 2018-06-12 refactor messaging support
4
5
  # Stan Smith 2016-11-12 refactor for mdTranslator 2.0
5
6
  # Stan Smith 2016-10-09 modify 'findContact' to also return contact index and type
6
7
  # Stan Smith 2016-10-07 refactored 'readerModule' to remove mdJson version checking
@@ -0,0 +1,377 @@
1
+ # Writer - messages for mdJson 2.x reader
2
+
3
+ # History:
4
+ # Stan Smith 2018-05-12 original script
5
+
6
+ messageList:
7
+ - {id: 1, message: "additional documentation object is empty"}
8
+ - {id: 2, message: "additional documentation resource type is missing"}
9
+ - {id: 3, message: "additional documentation citation is missing"}
10
+
11
+ - {id: 10, message: "address object is empty"}
12
+ - {id: 11, message: "address type is missing"}
13
+
14
+ - {id: 20, message: "budget allocation object is empty"}
15
+ - {id: 21, message: "budget allocation amount is missing"}
16
+ - {id: 22, message: "budget allocation currency type is missing"}
17
+
18
+ - {id: 30, message: "associated resource object is empty"}
19
+ - {id: 31, message: "associated resource resource type is missing"}
20
+ - {id: 32, message: "associated resource association type is missing"}
21
+ - {id: 33, message: "associated resource citation is missing"}
22
+
23
+ - {id: 40, message: "attribute object is empty"}
24
+ - {id: 41, message: "attribute sequence identifierType is missing"}
25
+ - {id: 42, message: "attribute units are missing"}
26
+ - {id: 43, message: "attribute bounds units are missing"}
27
+
28
+ - {id: 50, message: "attribute group object is empty"}
29
+ - {id: 51, message: "attribute group attribute content type is missing"}
30
+
31
+ - {id: 60, message: "bearing distance resolution object is empty"}
32
+ - {id: 61, message: "bearing distance resolution distance resolution is missing"}
33
+ - {id: 62, message: "bearing distance resolution distance units are missing"}
34
+ - {id: 63, message: "bearing distance resolution bearing resolution is missing"}
35
+ - {id: 64, message: "bearing distance resolution bearing units are missing"}
36
+ - {id: 65, message: "bearing distance resolution bearing direction is missing"}
37
+ - {id: 66, message: "bearing distance resolution bearing meridian is missing"}
38
+
39
+ - {id: 70, message: "bounding box object is empty"}
40
+ - {id: 71, message: "bounding box west boundary is missing"}
41
+ - {id: 72, message: "bounding box longitude must be between -180 and +180"}
42
+ - {id: 73, message: "bounding box east boundary is missing"}
43
+ - {id: 74, message: "bounding box south boundary is missing"}
44
+ - {id: 75, message: "bounding box latitude must be between -90 and +90"}
45
+ - {id: 76, message: "bounding box north boundary is missing"}
46
+ - {id: 77, message: "bounding box altitude units of measure are missing"}
47
+
48
+ - {id: 80, message: "citation object is empty"}
49
+ - {id: 81, message: "citation title is missing"}
50
+
51
+ - {id: 90, message: "constraint object is empty"}
52
+ - {id: 91, message: "constraint type must be use, legal, or security"}
53
+ - {id: 92, message: "constraint type is missing"}
54
+ - {id: 93, message: "legal constraint object is missing"}
55
+ - {id: 94, message: "security constraint object is missing"}
56
+
57
+ - {id: 100, message: "contact object is empty"}
58
+ - {id: 101, message: "contact id is missing"}
59
+ - {id: 102, message: "organization name is missing"}
60
+ - {id: 103, message: "individual name and/or position are missing"}
61
+
62
+ - {id: 110, message: "contact membership organization not found"}
63
+
64
+ - {id: 120, message: "coordinate resolution object is empty"}
65
+ - {id: 121, message: "coordinate resolution abscissa resolution is missing"}
66
+ - {id: 122, message: "coordinate resolution ordinate resolution is missing"}
67
+ - {id: 123, message: "coordinate resolution units are missing"}
68
+
69
+ - {id: 130, message: "coverage description object is empty"}
70
+ - {id: 131, message: "coverage description name is missing"}
71
+ - {id: 132, message: "coverage description description is missing"}
72
+
73
+ - {id: 140, message: "data dictionary object is empty"}
74
+ - {id: 141, message: "data dictionary citation is missing"}
75
+ - {id: 142, message: "data dictionary subject is missing"}
76
+ - {id: 143, message: "data dictionary responsible party is missing"}
77
+ - {id: 144, message: "data dictionary dictionaryFormat is deprecated, use dictionaryFunctionalLanguage"}
78
+
79
+ - {id: 150, message: "date object is empty"}
80
+ - {id: 151, message: "date string is invalid"}
81
+ - {id: 152, message: "date string is missing"}
82
+ - {id: 153, message: "date type is missing"}
83
+
84
+ - {id: 160, message: "dateTime string is empty"}
85
+ - {id: 161, message: "dateTime string is invalid"}
86
+
87
+ - {id: 170, message: "dimension object is empty"}
88
+ - {id: 171, message: "dimension type is missing"}
89
+ - {id: 172, message: "dimension size is missing"}
90
+
91
+ - {id: 180, message: "distribution object is empty"}
92
+ - {id: 181, message: "distribution must have a description or distributor"}
93
+
94
+ - {id: 190, message: "distributor object is empty"}
95
+ - {id: 191, message: "distributor contact is missing"}
96
+
97
+ - {id: 200, message: "data dictionary domain object is empty"}
98
+ - {id: 201, message: "data dictionary domain ID is missing"}
99
+ - {id: 202, message: "data dictionary domain code is missing"}
100
+ - {id: 203, message: "data dictionary domain description is missing"}
101
+
102
+ - {id: 210, message: "domain item object is empty"}
103
+ - {id: 211, message: "domain item name is missing"}
104
+ - {id: 212, message: "domain item value is missing"}
105
+ - {id: 213, message: "domain item definition is missing"}
106
+
107
+ - {id: 220, message: "duration object is empty"}
108
+ - {id: 221, message: "duration was not specified"}
109
+
110
+ - {id: 230, message: "data dictionary entity object is empty"}
111
+ - {id: 231, message: "data dictionary entity code name is missing"}
112
+ - {id: 232, message: "data dictionary entity definition is missing"}
113
+
114
+ - {id: 240, message: "data dictionary entity attribute object is empty"}
115
+ - {id: 241, message: "data dictionary entity attribute code name is missing"}
116
+ - {id: 242, message: "data dictionary entity attribute definition is missing"}
117
+ - {id: 243, message: "data dictionary entity attribute data type is missing"}
118
+ - {id: 244, message: "data dictionary entity attribute 'allowMany' is deprecated, use 'mustBeUnique'"}
119
+
120
+ - {id: 250, message: "data dictionary entity foreign key object is empty"}
121
+ - {id: 251, message: "data dictionary entity foreign key local attribute code name is missing"}
122
+ - {id: 252, message: "data dictionary entity foreign key referenced entity name is missing"}
123
+ - {id: 253, message: "data dictionary entity foreign key referenced attribute name is missing"}
124
+
125
+ - {id: 260, message: "data dictionary entity index object is empty"}
126
+ - {id: 261, message: "data dictionary entity index code name is missing"}
127
+ - {id: 262, message: "data dictionary entity index attribute list is missing"}
128
+
129
+ - {id: 270, message: "extent object is empty"}
130
+ - {id: 271, message: "extent must have description or at least one geographic, temporal, or vertical extent"}
131
+
132
+ - {id: 280, message: "GeoJSON feature collection object is empty"}
133
+ - {id: 281, message: "GeoJSON feature collection type must be FeatureCollection"}
134
+ - {id: 282, message: "GeoJSON feature collection type is missing"}
135
+ - {id: 283, message: "GeoJSON feature collection features are missing"}
136
+
137
+ - {id: 290, message: "distribution format object is empty"}
138
+ - {id: 291, message: "distribution format specification is missing"}
139
+
140
+ - {id: 300, message: "funding object is empty"}
141
+ - {id: 301, message: "funding must have either an allocation or timePeriod"}
142
+
143
+ - {id: 310, message: "geodetic object is empty"}
144
+ - {id: 311, message: "geodetic ellipsoid name is missing"}
145
+
146
+ - {id: 320, message: "geographic extent object is empty"}
147
+ - {id: 321, message: "geographic extent must have at least one description, identifier, bounding box, or geographic element"}
148
+
149
+ - {id: 330, message: "geographic resolution object is empty"}
150
+ - {id: 331, message: "geographic resolution latitude resolution is missing"}
151
+ - {id: 332, message: "geographic resolution longitude resolution is missing"}
152
+ - {id: 333, message: "geographic resolution units are missing"}
153
+
154
+ - {id: 340, message: "GeoJSON object is empty"}
155
+ - {id: 341, message: "GeoJSON object type not recognized"}
156
+
157
+ - {id: 350, message: "geologic age object is empty"}
158
+ - {id: 351, message: "geologic age time scale is missing"}
159
+ - {id: 352, message: "geologic age age-estimate is missing"}
160
+
161
+ - {id: 360, message: "GeoJSON geometry collection object is empty"}
162
+ - {id: 361, message: "GeoJSON geometry collection type must be GeometryCollection"}
163
+ - {id: 362, message: "GeoJSON geometry collection type is missing"}
164
+ - {id: 363, message: "GeoJSON geometry collection geometries are missing"}
165
+
166
+ - {id: 370, message: "GeoJSON feature object is empty"}
167
+ - {id: 371, message: "GeoJSON feature type must be Feature"}
168
+ - {id: 372, message: "GeoJSON feature type is missing"}
169
+ - {id: 373, message: "GeoJSON feature geometry is missing"}
170
+
171
+ - {id: 380, message: "GeoJSON geometry object is empty"}
172
+ - {id: 381, message: "GeoJSON geometry object type must be Point, LineString, Polygon, MultiPoint, MultiLineString, or MultiPolygon"}
173
+ - {id: 382, message: "GeoJSON geometry object type is missing"}
174
+ - {id: 383, message: "GeoJSON geometry object coordinates are missing"}
175
+
176
+ - {id: 390, message: "GeoJSON properties object is empty"}
177
+
178
+ - {id: 400, message: "georectified representation object is empty"}
179
+ - {id: 401, message: "georectified representation grid representation is missing"}
180
+ - {id: 402, message: "georectified representation must have either 2 or 4 corner points"}
181
+ - {id: 403, message: "georectified representation center point must be single 2D coordinate"}
182
+ - {id: 404, message: "georectified representation point-in-pixel is missing"}
183
+
184
+ - {id: 410, message: "georeferenceable representation object is empty"}
185
+ - {id: 411, message: "georeferenceable representation grid representation is missing"}
186
+ - {id: 412, message: "georeferenceable representation georeferenced parameters are missing"}
187
+
188
+ - {id: 420, message: "GML Identifier object is empty"}
189
+ - {id: 421, message: "GML Identifier identifier is missing"}
190
+ - {id: 422, message: "GML Identifier namespace is missing"}
191
+
192
+ - {id: 430, message: "graphic overview object is empty"}
193
+ - {id: 431, message: "graphic overview file name is missing"}
194
+
195
+ - {id: 440, message: "grid representation object is empty"}
196
+ - {id: 441, message: "grid representation number-of-dimensions is missing"}
197
+ - {id: 442, message: "grid representation dimensions are missing"}
198
+ - {id: 443, message: "grid representation cell geometry is missing"}
199
+
200
+ - {id: 450, message: "identifier object is empty"}
201
+ - {id: 451, message: "identifier object identifier is missing"}
202
+
203
+ - {id: 460, message: "image description object is empty"}
204
+
205
+ - {id: 470, message: "keyword object is empty"}
206
+ - {id: 471, message: "keyword list is missing"}
207
+
208
+ - {id: 480, message: "keyword object is empty"}
209
+ - {id: 481, message: "keyword object is missing keyword"}
210
+
211
+ - {id: 490, message: "legal constraint object is empty"}
212
+ - {id: 491, message: "legal constraint was not defined"}
213
+
214
+ - {id: 500, message: "resource lineage object is empty"}
215
+ - {id: 501, message: "resource lineage must have at least one statement, process step, or source"}
216
+
217
+ - {id: 510, message: "locale object is empty"}
218
+ - {id: 511, message: "locale language code is missing"}
219
+ - {id: 512, message: "locale character set code is missing"}
220
+
221
+ - {id: 520, message: "maintenance object is empty"}
222
+ - {id: 521, message: "maintenance frequency is missing"}
223
+
224
+ - {id: 530, message: "mdJSON object is empty"}
225
+ - {id: 531, message: "mdJSON schema object is missing"}
226
+ - {id: 532, message: "mdJSON contact object is missing"}
227
+ - {id: 533, message: "mdJSON metadata object is missing"}
228
+
229
+ - {id: 540, message: "measure object is empty"}
230
+ - {id: 541, message: "measure type must be distance, length, vertical, or angle"}
231
+ - {id: 542, message: "measure type is missing"}
232
+ - {id: 543, message: "measure value is missing"}
233
+ - {id: 544, message: "measure unit-of-measure is missing"}
234
+
235
+ - {id: 550, message: "offline option (medium) is empty"}
236
+
237
+ - {id: 560, message: "metadata object is empty"}
238
+ - {id: 561, message: "metadata-info object is missing"}
239
+ - {id: 562, message: "resource-info object is missing"}
240
+
241
+ - {id: 570, message: "metadata-info object is empty"}
242
+ - {id: 571, message: "metadata contact is missing"}
243
+
244
+ - {id: 580, message: "metadata repository object is empty"}
245
+ - {id: 581, message: "metadata repository name is missing"}
246
+
247
+ - {id: 590, message: "oblique line-point object is empty"}
248
+ - {id: 591, message: "oblique line-point latitude is missing"}
249
+ - {id: 592, message: "oblique line-point longitude is missing"}
250
+
251
+ - {id: 600, message: "online resource object is empty"}
252
+ - {id: 601, message: "online resource URI is missing"}
253
+
254
+ - {id: 610, message: "order process object is empty"}
255
+
256
+ - {id: 620, message: "party object is empty"}
257
+ - {id: 621, message: "party contact ID is missing"}
258
+ - {id: 622, message: "party contact not in contacts list"}
259
+ - {id: 623, message: "party organization member contact not in contacts list"}
260
+
261
+ - {id: 630, message: "phone object is empty"}
262
+ - {id: 631, message: "phone number is missing"}
263
+ - {id: 632, message: "phone service type is missing"}
264
+
265
+ - {id: 640, message: "process step object is empty"}
266
+ - {id: 641, message: "process step description is missing"}
267
+
268
+ - {id: 650, message: "projection parameters object is empty"}
269
+ - {id: 651, message: "projection parameters projection code is missing"}
270
+
271
+ - {id: 660, message: "reference system parameter set is empty"}
272
+ - {id: 661, message: "reference system parameter set must have at least one projection, geodetic, or vertical datum"}
273
+
274
+ - {id: 670, message: "releasability object is empty"}
275
+ - {id: 671, message: "releasability must have at least one addressee or statement"}
276
+
277
+ - {id: 680, message: "resource info object is empty"}
278
+ - {id: 681, message: "resource type is missing"}
279
+ - {id: 682, message: "resource citation is missing"}
280
+ - {id: 683, message: "resource abstract is missing"}
281
+ - {id: 684, message: "resource status is missing"}
282
+ - {id: 685, message: "topicCategory is deprecated, items were moved to keywords, keywordType 'isoTopicCategory'"}
283
+ - {id: 686, message: "resource point-of-contact is missing"}
284
+ - {id: 687, message: "taxonomy is now an array, the single taxonomy object was deprecated"}
285
+ - {id: 688, message: "resource default locale is missing"}
286
+
287
+ - {id: 690, message: "resource type object is empty"}
288
+ - {id: 691, message: "resource type is missing"}
289
+
290
+ - {id: 700, message: "resource usage object is empty"}
291
+ - {id: 701, message: "resource specific usage is missing"}
292
+
293
+ - {id: 710, message: "responsible party object is empty"}
294
+ - {id: 711, message: "responsible party role is missing"}
295
+ - {id: 712, message: "responsible party must have at least one party"}
296
+
297
+ - {id: 720, message: "schema object is empty"}
298
+ - {id: 721, message: "schema name is missing"}
299
+ - {id: 722, message: "schema version is missing"}
300
+
301
+ - {id: 730, message: "scope object is empty"}
302
+ - {id: 731, message: "scope code is missing"}
303
+
304
+ - {id: 740, message: "scope description object is empty"}
305
+ - {id: 741, message: "scope description needs at least one dataset, attribute, feature, or other"}
306
+
307
+ - {id: 750, message: "security constraint object is empty"}
308
+ - {id: 751, message: "security constraint classification is missing"}
309
+
310
+ - {id: 760, message: "series object is empty"}
311
+
312
+ - {id: 770, message: "source object is empty"}
313
+ - {id: 771, message: "source requires a description or scope"}
314
+
315
+ - {id: 780, message: "spatial reference system object is empty"}
316
+ - {id: 781, message: "spatial reference system must provide a reference system type, identifier, WKT, or parameter set"}
317
+
318
+ - {id: 790, message: "spatial representation object is empty"}
319
+ - {id: 791, message: "spatial representation did not have an object of supported type"}
320
+
321
+ - {id: 800, message: "spatial resolution object is empty"}
322
+ - {id: 801, message: "spatial resolution did not have an object of supported type"}
323
+
324
+ - {id: 810, message: "taxonomic classification object is empty"}
325
+ - {id: 811, message: "taxonomic classification taxonomicRank is deprecated, use taxonomicLevel"}
326
+ - {id: 812, message: "taxonomic classification level is missing"}
327
+ - {id: 813, message: "taxonomic classification latinName is deprecated, use taxonomicName"}
328
+ - {id: 814, message: "taxonomic classification name is missing"}
329
+
330
+ - {id: 820, message: "taxonomic system object is empty"}
331
+ - {id: 821, message: "taxonomic system citation is missing"}
332
+
333
+ - {id: 830, message: "taxonomy object is empty"}
334
+ - {id: 831, message: "taxonomic classification system object is missing"}
335
+ - {id: 832, message: "taxonomic identification procedure is missing"}
336
+ - {id: 833, message: "taxonomic classification is missing"}
337
+
338
+ - {id: 840, message: "temporal extent object is empty"}
339
+ - {id: 841, message: "temporal extent must have a time period or time instant"}
340
+
341
+ - {id: 850, message: "time instant object is empty"}
342
+ - {id: 851, message: "time instant must have dateTime or geologic age"}
343
+
344
+ - {id: 860, message: "time interval object is empty"}
345
+ - {id: 861, message: "time interval must be an integer"}
346
+ - {id: 862, message: "time interval is missing"}
347
+ - {id: 863, message: "time interval units are missing or invalid"}
348
+
349
+ - {id: 870, message: "time period object is empty"}
350
+ - {id: 871, message: "time period must have a start and/or end dateTime, or geologic age"}
351
+ - {id: 872, message: "time interval must be accompanied by a start and/or end dateTime"}
352
+ - {id: 873, message: "duration must be accompanied by a start and/or end dateTime"}
353
+
354
+ - {id: 880, message: "transfer option object is empty"}
355
+ - {id: 881, message: "transfer option did not provide an online or offline option"}
356
+
357
+ - {id: 890, message: "value range object is empty"}
358
+ - {id: 891, message: "value range minimum is missing"}
359
+ - {id: 892, message: "value range maximum is missing"}
360
+
361
+ - {id: 900, message: "vector object is empty"}
362
+ - {id: 901, message: "vector object type is missing"}
363
+
364
+ - {id: 910, message: "vector representation object is empty"}
365
+ - {id: 911, message: "vector representation must have a topology level or vector object"}
366
+
367
+ - {id: 920, message: "vertical datum object is empty"}
368
+ - {id: 921, message: "vertical datum must have an identifier or all other elements"}
369
+
370
+ - {id: 930, message: "vertical extent object is empty"}
371
+ - {id: 931, message: "vertical extent minimum value is missing"}
372
+ - {id: 932, message: "vertical extent maximum value is missing"}
373
+ - {id: 933, message: "vertical extent CRS identifier is missing"}
374
+
375
+ - {id: 940, message: "voucher object is empty"}
376
+ - {id: 941, message: "voucher specimen is missing"}
377
+ - {id: 942, message: "voucher repository is missing"}