diff --git a/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb b/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb index c333cdc5c..1787be068 100644 --- a/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +++ b/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb @@ -516,7 +516,6 @@ def newDistribution { description: nil, liabilityStatement: nil, - technicalPrerequisite: nil, distributor: [] } end @@ -565,7 +564,8 @@ def newResourceFormat { formatSpecification: {}, amendmentNumber: nil, - compressionMethod: nil + compressionMethod: nil, + technicalPrerequisite: nil } end diff --git a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_digitalForm.rb b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_digitalForm.rb index d2f8fef58..9b40552c7 100644 --- a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_digitalForm.rb +++ b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_digitalForm.rb @@ -18,7 +18,7 @@ module Fgdc module DigitalForm - def self.unpack(xDigiForm, hResponseObj) + def self.unpack(xDigiForm, techPre, hResponseObj) # instance classes needed in script intMetadataClass = InternalMetadata.new @@ -27,7 +27,7 @@ def self.unpack(xDigiForm, hResponseObj) # distribution 6.4.2.1 (digtinfo) - digital transfer information xTranInfo = xDigiForm.xpath('./digtinfo') unless xTranInfo.empty? - TransferInfo.unpack(xTranInfo, hTransfer, hResponseObj) + TransferInfo.unpack(xTranInfo, hTransfer, techPre, hResponseObj) end # distribution 6.4.2.2 (digtopt) - digital transfer option diff --git a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb index 49f260104..23d10f3ff 100644 --- a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb +++ b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb @@ -50,11 +50,16 @@ def self.unpack(xDistribution, hResponseObj) hDistribution[:liabilityStatement] = liability end + # distribution 6.6 (techpreq) - technical prerequisites + # -> distribution.distributor[all].transferOption[all].distributionFormat[all].technicalPrerequisite + # pass it down the line + techPre = xDistribution.xpath('./techpreq').text + # distribution 6.4 (stdorder) - standard order process [] axOrders = xDistribution.xpath('./stdorder') unless axOrders.empty? axOrders.each do |xOrder| - OrderProcess.unpack(xOrder, hDistributor, hResponseObj) + OrderProcess.unpack(xOrder, hDistributor, techPre, hResponseObj) end end @@ -67,13 +72,6 @@ def self.unpack(xDistribution, hResponseObj) hDistributor[:orderProcess] << hOrder end - # distribution 6.6 (techpreq) - technical prerequisites - # -> distribution.technicalPrerequisite - techPre = xDistribution.xpath('./techpreq').text - unless techPre.empty? - hDistribution[:technicalPrerequisite] = techPre - end - # distribution 6.7 (availabl) - available time period {time period} # -> distribution.distributor.orderProcess.plannedAvailability xTimePeriod = xDistribution.xpath('./availabl') diff --git a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_orderProcess.rb b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_orderProcess.rb index 8e180907d..934a916ce 100644 --- a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_orderProcess.rb +++ b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_orderProcess.rb @@ -15,7 +15,7 @@ module Fgdc module OrderProcess - def self.unpack(xOrder, hDistributor, hResponseObj) + def self.unpack(xOrder, hDistributor, techPre, hResponseObj) # instance classes needed in script intMetadataClass = InternalMetadata.new @@ -37,7 +37,7 @@ def self.unpack(xOrder, hDistributor, hResponseObj) axDigital = xOrder.xpath('./digform') unless axDigital.empty? axDigital.each do |xDigiForm| - hReturn = DigitalForm.unpack(xDigiForm, hResponseObj) + hReturn = DigitalForm.unpack(xDigiForm, techPre, hResponseObj) unless hReturn.nil? hDistributor[:transferOptions] << hReturn end diff --git a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_transferInfo.rb b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_transferInfo.rb index 014a82f30..db24b080a 100644 --- a/lib/adiwg/mdtranslator/readers/fgdc/modules/module_transferInfo.rb +++ b/lib/adiwg/mdtranslator/readers/fgdc/modules/module_transferInfo.rb @@ -15,7 +15,7 @@ module Fgdc module TransferInfo - def self.unpack(xTranInfo, hTransfer, hResponseObj) + def self.unpack(xTranInfo, hTransfer, techPre, hResponseObj) # instance classes needed in script intMetadataClass = InternalMetadata.new @@ -26,6 +26,11 @@ def self.unpack(xTranInfo, hTransfer, hResponseObj) hFormat[:formatSpecification] = hSpecification hTransfer[:distributionFormats] << hFormat + # add technical prerequisite to resourceFormat + unless techPre.empty? + hFormat[:technicalPrerequisite] = techPre + end + # distribution 6.4.2.1.1 (formname) - format name # -> transferOption.distributionFormat.formatSpecification.title # -> transferOption.distributionFormat.formatSpecification.identifier[].identifier diff --git a/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distribution.rb b/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distribution.rb index 389a7f66c..077e53f03 100644 --- a/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distribution.rb +++ b/lib/adiwg/mdtranslator/readers/mdJson/modules/module_distribution.rb @@ -2,7 +2,6 @@ # Reader - ADIwg JSON to internal data structure # History: -# Stan Smith 2018-01-30 add technicalPrerequisite # Stan Smith 2018-01-29 add liabilityStatement # Stan Smith 2016-10-21 original script @@ -42,13 +41,6 @@ def self.unpack(hDistribution, responseObj) end end - # distribution - technical prerequisite - if hDistribution.has_key?('technicalPrerequisite') - if hDistribution['technicalPrerequisite'] != '' - intDistribution[:technicalPrerequisite] = hDistribution['technicalPrerequisite'] - end - end - # distribution - distributor [distributor] if hDistribution.has_key?('distributor') aItems = hDistribution['distributor'] diff --git a/lib/adiwg/mdtranslator/readers/mdJson/modules/module_format.rb b/lib/adiwg/mdtranslator/readers/mdJson/modules/module_format.rb index 53918484e..39ce9f41b 100644 --- a/lib/adiwg/mdtranslator/readers/mdJson/modules/module_format.rb +++ b/lib/adiwg/mdtranslator/readers/mdJson/modules/module_format.rb @@ -2,67 +2,75 @@ # Reader - ADIwg JSON to internal data structure # History: +# Stan Smith 2018-02-05 add 'technicalPrerequisite' # Stan Smith 2016-10-20 original script require_relative 'module_citation' module ADIWG - module Mdtranslator - module Readers - module MdJson + module Mdtranslator + module Readers + module MdJson - module Format + module Format - def self.unpack(hFormat, responseObj) + def self.unpack(hFormat, responseObj) - # return nil object if input is empty - if hFormat.empty? - responseObj[:readerExecutionMessages] << 'Format object is empty' - responseObj[:readerExecutionPass] = false - return nil - end + # return nil object if input is empty + if hFormat.empty? + responseObj[:readerExecutionMessages] << 'Format object is empty' + responseObj[:readerExecutionPass] = false + return nil + end - # instance classes needed in script - intMetadataClass = InternalMetadata.new - intFormat = intMetadataClass.newResourceFormat + # instance classes needed in script + intMetadataClass = InternalMetadata.new + intFormat = intMetadataClass.newResourceFormat - # format - format specification {citation} (required) - if hFormat.has_key?('formatSpecification') - hObject = hFormat['formatSpecification'] - unless hObject.empty? - hReturn = Citation.unpack(hObject, responseObj) - unless hReturn.nil? - intFormat[:formatSpecification] = hReturn - end - end - end - if intFormat[:formatSpecification].empty? - responseObj[:readerExecutionMessages] << 'Format is missing formatSpecification' - responseObj[:readerExecutionPass] = false - return nil + # format - format specification {citation} (required) + if hFormat.has_key?('formatSpecification') + hObject = hFormat['formatSpecification'] + unless hObject.empty? + hReturn = Citation.unpack(hObject, responseObj) + unless hReturn.nil? + intFormat[:formatSpecification] = hReturn end + end + end + if intFormat[:formatSpecification].empty? + responseObj[:readerExecutionMessages] << 'Format is missing formatSpecification' + responseObj[:readerExecutionPass] = false + return nil + end - # format - amendment number - if hFormat.has_key?('amendmentNumber') - if hFormat['amendmentNumber'] != '' - intFormat[:amendmentNumber] = hFormat['amendmentNumber'] - end - end + # format - amendment number + if hFormat.has_key?('amendmentNumber') + if hFormat['amendmentNumber'] != '' + intFormat[:amendmentNumber] = hFormat['amendmentNumber'] + end + end - # format - compression method - if hFormat.has_key?('compressionMethod') - if hFormat['compressionMethod'] != '' - intFormat[:compressionMethod] = hFormat['compressionMethod'] - end - end + # format - compression method + if hFormat.has_key?('compressionMethod') + if hFormat['compressionMethod'] != '' + intFormat[:compressionMethod] = hFormat['compressionMethod'] + end + end - return intFormat + # format - compression method + if hFormat.has_key?('technicalPrerequisite') + if hFormat['technicalPrerequisite'] != '' + intFormat[:technicalPrerequisite] = hFormat['technicalPrerequisite'] + end + end - end + return intFormat - end + end end - end - end + + end + end + end end diff --git a/lib/adiwg/mdtranslator/version.rb b/lib/adiwg/mdtranslator/version.rb index d46c64003..14b04a667 100644 --- a/lib/adiwg/mdtranslator/version.rb +++ b/lib/adiwg/mdtranslator/version.rb @@ -1,6 +1,8 @@ # adiwg mdTranslator # version 2 history +# 2.9.1 2018-02-05 move 'technicalPrerequisite' to 'resourceFormat' +# 2.9.1 2018-02-05 fix variable name in fgdc spatial domain writer # 2.9.0 2018-02-01 added fgdc writer distribution information section # 2.9.0 2018-01-26 deprecate dictionaryFormat in favor of dictionaryFunctionalLanguage # 2.9.0 2018-01-25 added fgdc writer entity and attribute section @@ -61,7 +63,7 @@ module ADIWG module Mdtranslator # current mdtranslator version - VERSION = "2.9.0" + VERSION = "2.9.1" end end diff --git a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb index 97309870b..166b3dd57 100644 --- a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb +++ b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb @@ -115,11 +115,28 @@ def writeXML(hDistribution) end # distribution 6.6 (techpreq) - technical prerequisites - # <- distribution.technicalPrerequisite - unless hDistribution[:technicalPrerequisite].nil? - @xml.tag!('techpreq', hDistribution[:technicalPrerequisite]) + # -> distribution.distributor[all].transferOption[all].distributionFormat[all].technicalPrerequisite + # collect these and string unique together + techPre = '' + aTechPre = [] + unless hDistributor.empty? + hDistributor[:transferOptions].each do |hTransOpt| + hTransOpt[:distributionFormats].each do |hFormat| + unless hFormat[:technicalPrerequisite].nil? + aTechPre << hFormat[:technicalPrerequisite] + end + end + end + end + aTechPre = aTechPre.uniq + aTechPre.each do |prereq| + techPre += prereq + '; ' + end + techPre.chomp!('; ') + unless techPre == '' + @xml.tag!('techpreq', techPre) end - if hDistribution[:technicalPrerequisite].nil? + if techPre == '' @xml.tag!('techpreq') end diff --git a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb index a9e0395f1..c6cc1dc09 100644 --- a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb +++ b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_spatialDomain.rb @@ -2,7 +2,8 @@ # FGDC CSDGM writer output in XML # History: -# Stan Smith 2017-11-25 original script +# Stan Smith 2018-02-05 fixed typo in variable name 'aBPoly' +# Stan Smith 2017-11-25 original script module ADIWG module Mdtranslator @@ -18,7 +19,7 @@ def initialize(xml, hResponseObj) def writeXML(aExtents) - # spatial domain section is no required under bio extension rules + # spatial domain section is not required under biological extension rules # look for geographic description - take first # <- geographicExtent[:description] @@ -54,7 +55,7 @@ def writeXML(aExtents) # look for bounding polygon # <- geographicExtent[:geographicElements] - # polygon must be in FeatureCollection with properties description of 'FGDC bounding polygon' + # polygon must be in a FeatureCollection with properties description of 'FGDC bounding polygon' aBPoly = [] aExtents.each do |hExtent| unless hExtent.empty? @@ -81,7 +82,7 @@ def writeXML(aExtents) end # spatial domain 1.5 (spdom) - unless geoDescription.empty? && hBBox.empty? && hBPoly.empty? + unless geoDescription.empty? && hBBox.empty? && aBPoly.empty? @xml.tag!('spdom') do # spatial domain bio (descgeog) - geographic description (required) diff --git a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_transferInfo.rb b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_transferInfo.rb index df17b64a3..8c393e886 100644 --- a/lib/adiwg/mdtranslator/writers/fgdc/classes/class_transferInfo.rb +++ b/lib/adiwg/mdtranslator/writers/fgdc/classes/class_transferInfo.rb @@ -30,10 +30,15 @@ def writeXML(hTransOpt) # transfer information 6.4.2.1.1 (formname) - format name (required) # <- formatSpecification.identifier.identifier # FGDC requires a format name for digital options (online and offline) - # the format name is saved in the format specification of the first distribution format + # the format name is saved in the identifier of the format specification + # of the first distribution format + # as backup, allow specification title to serve as format name haveId = false unless hSpec.empty? - unless hSpec[:identifiers].empty? + if hSpec[:identifiers].empty? + @xml.tag!('formname', hSpec[:title]) + haveId = true + else unless hSpec[:identifiers][0][:identifier].nil? @xml.tag!('formname', hSpec[:identifiers][0][:identifier]) haveId = true @@ -42,7 +47,7 @@ def writeXML(hTransOpt) end unless haveId @hResponseObj[:writerPass] = false - @hResponseObj[:writerMessages] << 'Distribution Format is mission format name' + @hResponseObj[:writerMessages] << 'Distribution Format is missing format name' end # transfer information 6.4.2.1.2 (formvern) - format version number diff --git a/lib/adiwg/mdtranslator/writers/html/sections/html_distribution.rb b/lib/adiwg/mdtranslator/writers/html/sections/html_distribution.rb index e21a0cb9a..3c77693da 100644 --- a/lib/adiwg/mdtranslator/writers/html/sections/html_distribution.rb +++ b/lib/adiwg/mdtranslator/writers/html/sections/html_distribution.rb @@ -2,7 +2,6 @@ # distribution # History: -# Stan Smith 2018-01-30 add technicalPrerequisite # Stan Smith 2018-01-29 add liabilityStatement # Stan Smith 2017-04-04 original script @@ -40,14 +39,6 @@ def writeHtml(hDistribution) end end - # distribution - technical prerequisite - unless hDistribution[:technicalPrerequisite].nil? - @html.em('Technical Prerequisite:') - @html.section(:class => 'block') do - @html.text!(hDistribution[:technicalPrerequisite]) - end - end - # distribution - distributor [] {distributor} hDistribution[:distributor].each do |hDistributor| @html.details do diff --git a/lib/adiwg/mdtranslator/writers/html/sections/html_format.rb b/lib/adiwg/mdtranslator/writers/html/sections/html_format.rb index f44d9b6f2..3f61925d9 100644 --- a/lib/adiwg/mdtranslator/writers/html/sections/html_format.rb +++ b/lib/adiwg/mdtranslator/writers/html/sections/html_format.rb @@ -2,6 +2,7 @@ # format # History: +# Stan Smith 2018-02-05 add 'technicalPrerequisite' # Stan Smith 2017-04-03 refactored for mdTranslator 2.0 # Stan Smith 2015-09-21 added compression method element # Stan Smith 2015-03-27 original script @@ -48,6 +49,14 @@ def writeHtml(hFormat) @html.br end + # distribution - technical prerequisite + unless hFormat[:technicalPrerequisite].nil? + @html.em('Technical Prerequisite:') + @html.section(:class => 'block') do + @html.text!(hFormat[:technicalPrerequisite]) + end + end + end # writeHtml end # Html_Format diff --git a/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distribution.rb b/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distribution.rb index ddef99fcc..360d35149 100644 --- a/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distribution.rb +++ b/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distribution.rb @@ -21,7 +21,6 @@ def self.build(hDistribution) Jbuilder.new do |json| json.description hDistribution[:description] json.liabilityStatement hDistribution[:liabilityStatement] - json.technicalPrerequisite hDistribution[:technicalPrerequisite] json.distributor @Namespace.json_map(hDistribution[:distributor], Distributor) end diff --git a/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb b/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb index 847e5f8e6..63cfd3d9f 100644 --- a/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb +++ b/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb @@ -20,6 +20,7 @@ def self.build(hFormat) json.formatSpecification Citation.build(hFormat[:formatSpecification]) unless hFormat[:formatSpecification].empty? json.amendmentNumber hFormat[:amendmentNumber] json.compressionMethod hFormat[:compressionMethod] + json.technicalPrerequisite hFormat[:technicalPrerequisite] end end # build diff --git a/test/debug/debug_test_parent.rb b/test/debug/debug_test_parent.rb new file mode 100644 index 000000000..0744aac53 --- /dev/null +++ b/test/debug/debug_test_parent.rb @@ -0,0 +1,70 @@ +# MdTranslator - minitest of +# parent class for all example tests + +# History: +# Stan Smith 2017-11-17 original script + +require 'minitest/autorun' +require 'json' +require 'json-schema' +require 'nokogiri' +require 'rubygems' +require 'adiwg-mdjson_schemas' +require 'adiwg/mdtranslator' + +class TestDebugParent < MiniTest::Test + + @@responseObj = { + readerExecutionPass: true, + readerExecutionMessages: [] + } + + # get file for tests from testData folder + def self.get_json(fileName) + + file = File.join(File.dirname(__FILE__), 'userFiles', fileName) + '.json' + file = File.open(file, 'r') + jsonFile = file.read + file.close + return jsonFile + + end + + # get ruby hash for tests from testData folder + def self.get_hash(fileName) + + file = File.join(File.dirname(__FILE__), 'userFiles', fileName) + '.json' + file = File.open(file, 'r') + jsonFile = file.read + file.close + return JSON.parse(jsonFile) + + end + + # get fgdc XML for test reference from resultXML folder + def self.get_xml(fileName) + file = File.join(File.dirname(__FILE__), 'userFiles', fileName) + '.xml' + xDoc = Nokogiri::XML(File.read(file)) + return xDoc + end + + def self.get_complete(hIn, expectFile, path) + + # read the fgdc reference file + xFile = TestWriterFGDCParent.get_xml(expectFile) + xExpect = xFile.xpath(path) + expect = xExpect.to_s.squeeze(' ') + + hResponseObj = ADIWG::Mdtranslator.translate( + file: hIn.to_json, reader: 'mdJson', writer: 'fgdc', showAllTags: true, validate: 'none' + ) + + xMetadata = Nokogiri::XML(hResponseObj[:writerOutput]) + xGot = xMetadata.xpath(path) + got = xGot.to_s.squeeze(' ') + + return expect, got + + end + +end diff --git a/test/debug/test_fgdc_writer.rb b/test/debug/test_fgdc_writer.rb new file mode 100755 index 000000000..85bfa4ba4 --- /dev/null +++ b/test/debug/test_fgdc_writer.rb @@ -0,0 +1,46 @@ +# MdTranslator - test example mdJson files with errors + +# History: +# Stan Smith 2017-11-16 original script + +require_relative 'debug_test_parent' + +class TestFgdcWriterDebug < TestDebugParent + + def test_fgdc_writer + + # read the json input file + mdJson = TestDebugParent.get_json('schemaExample') + + hResponseObj = ADIWG::Mdtranslator.translate( + file: mdJson, reader: 'mdJson', writer: 'fgdc', showAllTags: true + ) + + xMetadata = Nokogiri::XML(hResponseObj[:writerOutput]) + got = xMetadata.xpath('./metadata') + + puts 'Structure Messages:' + unless hResponseObj[:readerStructurePass] + puts hResponseObj[:readerStructureMessages] + end + + puts 'Validation Messages:' + unless hResponseObj[:readerValidationPass] + puts hResponseObj[:readerValidationMessages] + end + + puts 'Reader Messages:' + unless hResponseObj[:readerExecutionPass] + puts hResponseObj[:readerExecutionMessages] + end + + puts 'Writer Messages:' + unless hResponseObj[:writerPass] + puts hResponseObj[:writerMessages] + end + + refute_nil got + + end + +end diff --git a/test/debug/userFiles/schemaExample.json b/test/debug/userFiles/schemaExample.json new file mode 100644 index 000000000..8109dcd97 --- /dev/null +++ b/test/debug/userFiles/schemaExample.json @@ -0,0 +1,3258 @@ +{ + "schema": { + "name": "mdJson", + "version": "2.4.0" + }, + "contact": [ + { + "contactId": "CID001", + "isOrganization": false, + "name": "Stan Smith", + "positionName": "Associate - retired", + "memberOfOrganization": [ + "CID002", + "CID003" + ], + "logoGraphic": [ + { + "fileName": "fileName0", + "fileDescription": "fileDescription0", + "fileType": "fileType0", + "fileConstraint": [ + { + "type": "use", + "useLimitation": [ + "useLimitation0", + "useLimitation1" + ] + }, + { + "type": "legal", + "legal": { + "useConstraint": [ + "useConstraint0", + "useConstraint1" + ], + "accessConstraint": [ + "accessConstraint0", + "accessConstraint1" + ], + "otherConstraint": [ + "otherConstraint0", + "otherConstraint1" + ] + } + }, + { + "type": "security", + "security": { + "classification": "classification", + "classificationSystem": "classificationSystem", + "userNote": "userNote", + "handlingDescription": "handlingDescription" + } + } + ], + "fileUri": [ + { + "uri": "http://ISO.uri/adiwg/0" + } + ] + }, + { + "fileName": "fileName1", + "fileDescription": "fileDescription1", + "fileType": "fileType1" + }, + { + "fileName": "fileName2" + } + ], + "phone": [ + { + "phoneName": "mobile", + "phoneNumber": "111-111-1111", + "service": [ + "voice", + "sms", + "message" + ] + }, + { + "phoneName": "office", + "phoneNumber": "222-222-2222", + "service": [ + "voice", + "message" + ] + } + ], + "address": [ + { + "addressType": [ + "mailing", + "physical" + ], + "description": "work location", + "deliveryPoint": [ + "address line 1", + "address line 2" + ], + "city": "city", + "administrativeArea": "state", + "postalCode": "zip", + "country": "country" + }, + { + "addressType": [ + "mailing" + ], + "description": "telework location", + "deliveryPoint": [ + "address line 3" + ], + "city": "city", + "administrativeArea": "state", + "postalCode": "zip", + "country": "country" + } + ], + "electronicMailAddress": [ + "e.mail@address.com1", + "e.mail@address.com2" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/1", + "protocol": "protocol", + "name": "name", + "description": "description", + "function": "function" + }, + { + "uri": "http://ISO.uri/adiwg/2" + } + ], + "hoursOfService": [ + "hoursOfService1", + "hoursOfService2" + ], + "contactInstructions": "contactInstructions", + "contactType": "individual" + }, + { + "contactId": "CID002", + "isOrganization": true, + "name": "US Geological Survey", + "memberOfOrganization": [ + "CID005" + ], + "logoGraphic": [ + { + "fileName": "fileName" + } + ], + "phone": [ + { + "phoneName": "single service", + "phoneNumber": "111-111-1111", + "service": [ + "voice" + ] + } + ], + "address": [ + { + "addressType": [ + "addressType" + ], + "city": "Anchorage", + "administrativeArea": "AK", + "postalCode": "99508" + } + ], + "electronicMailAddress": [ + "e.mail@address.com2" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/2" + } + ], + "hoursOfService": [ + "hoursOfService" + ], + "contactInstructions": "contactInstructions", + "contactType": "federal" + }, + { + "contactId": "CID003", + "isOrganization": true, + "name": "Arctic Landscape Conservation Cooperative", + "contactType": "federal", + "phone": [ + { + "phoneName": "single service", + "phoneNumber": "111-111-1111", + "service": [ + "voice" + ] + } + ], + "address": [ + { + "addressType": [ + "addressType" + ], + "city": "Anchorage", + "administrativeArea": "AK", + "postalCode": "99508" + } + ] + }, + { + "contactId": "CID004", + "isOrganization": false, + "name": "Joshua Bradley", + "positionName": "Data Manager", + "memberOfOrganization": [ + "CID003" + ], + "phone": [ + { + "phoneName": "single service", + "phoneNumber": "111-111-1111", + "service": [ + "voice" + ] + } + ], + "address": [ + { + "addressType": [ + "addressType" + ], + "city": "Anchorage", + "administrativeArea": "AK", + "postalCode": "99508" + } + ] + }, + { + "contactId": "CID005", + "isOrganization": true, + "name": "US Department of the Interior", + "contactType": "federal" + }, + { + "contactId": "CID006", + "isOrganization": false, + "name": "Dennis Walworth", + "memberOfOrganization": [ + "CID002" + ], + "contactType": "individual", + "phone": [ + { + "phoneName": "single service", + "phoneNumber": "111-111-1111", + "service": [ + "voice" + ] + } + ], + "address": [ + { + "addressType": [ + "addressType" + ], + "city": "Anchorage", + "administrativeArea": "AK", + "postalCode": "99508" + } + ] + } + ], + "metadata": { + "metadataInfo": { + "metadataIdentifier": { + "identifier": "e9e82406-8308-4231-98e3-8b70fd438ada", + "namespace": "https://www.uuidgenerator.net/", + "version": "version 1.0", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "authority": { + "title": "Metadata Identifier Authority Title", + "alternateTitle": [ + "alternateTitle0", + "alternateTitle1" + ] + } + }, + "parentMetadata": { + "title": "Metadata Authority Title", + "alternateTitle": [ + "alternateTitle0", + "alternateTitle1" + ], + "date": [ + { + "date": "2016-10-13", + "dateType": "dateType0" + }, + { + "date": "2016-10-22T16:15:14", + "dateType": "dateType1" + } + ], + "edition": "edition", + "responsibleParty": [ + { + "role": "principalInvestigator", + "roleExtent": [ + { + "description": "Extent 1: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + }, + { + "description": "Extent 2: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "geographicExtent": [ + { + "containsData": true, + "geographicElement": [ + { + "type": "Feature", + "id": "polygon-75", + "bbox": [ + -10.0, + -10.0, + 10.0, + 10.0 + ], + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -161.74223, + 67.663378 + ], + [ + -161.440345, + 67.630173 + ], + [ + -161.294611, + 67.656257 + ], + [ + -161.228063, + 67.625736 + ], + [ + -161.247712, + 67.585909 + ], + [ + -161.334662, + 67.591324 + ], + [ + -161.566245, + 67.491263 + ], + [ + -161.812338, + 67.455299 + ], + [ + -161.825019, + 67.40123 + ], + [ + -162.128301, + 67.414364 + ], + [ + -162.167825, + 67.363047 + ], + [ + -162.383403, + 67.293329 + ], + [ + -162.633432, + 67.272237 + ], + [ + -162.645587, + 67.356665 + ], + [ + -162.369023, + 67.455264 + ], + [ + -162.287324, + 67.551235 + ], + [ + -162.171139, + 67.559356 + ], + [ + -161.99344, + 67.646806 + ], + [ + -161.857964, + 67.620329 + ], + [ + -161.769431, + 67.629407 + ], + [ + -161.74223, + 67.663378 + ] + ] + ] + }, + "properties": { + "description": "Agashashok River site", + "featureName": [ + "Agashashok River", + "Camp Mosquito" + ], + "identifier": [ + { + "identifier": "AGAR" + }, + { + "identifier": "Kup25" + } + ], + "featureScope": "collectionSite", + "acquisitionMethod": "butterfly net", + "customField": "not in schema", + "customArray": [ + "string 1", + "string 2" + ] + } + } + ] + } + ] + } + ], + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "funder", + "party": [ + { + "contactId": "CID003", + "organizationMembers": [ + "CID004", + "CID001" + ] + } + ] + } + ], + "presentationForm": [ + "presentationForm0", + "presentationForm1" + ], + "identifier": [ + { + "identifier": "identifier0" + }, + { + "identifier": "identifier1" + } + ], + "series": { + "seriesName": "seriesName", + "seriesIssue": "seriesIssue", + "issuePage": "issuePage" + }, + "otherCitationDetails": [ + "otherCitationDetails0", + "otherCitationDetails1" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "graphic": [ + { + "fileName": "fileName" + }, + { + "fileName": "fileName" + } + ] + }, + "defaultMetadataLocale": { + "language": "language", + "country": "country", + "characterSet": "characterSet" + }, + "otherMetadataLocale": [ + { + "language": "language0", + "country": "country0", + "characterSet": "characterSet0" + }, + { + "language": "language1", + "country": "country1", + "characterSet": "characterSet1" + } + ], + "metadataContact": [ + { + "role": "author", + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID004" + }, + { + "contactId": "CID006" + } + ] + }, + { + "role": "custodian", + "party": [ + { + "contactId": "CID002" + } + ] + } + ], + "metadataDate": [ + { + "date": "2016-10-31", + "dateType": "dateType" + }, + { + "date": "2017-02-16", + "dateType": "creation" + }, + { + "date": "2016-10-31", + "dateType": "nextUpdate" + } + ], + "metadataOnlineResource": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "metadataMaintenance": { + "frequency": "monthly", + "date": [ + { + "date": "2016-10-12", + "dateType": "dateType00" + }, + { + "date": "2017-02-10", + "dateType": "nextUpdate" + } + ], + "scope": [ + { + "scopeCode": "dataset", + "scopeExtent": [ + { + "description": "Extent 1: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "temporalExtent": [ + { + "timeInstant": { + "dateTime": "2016-10-24T11:10:15.200-10:00" + } + }, + { + "timePeriod": { + "startDateTime": "2016-10-24T11:10:15.200-10:00" + } + } + ] + }, + { + "description": "Extent 2: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "geographicExtent": [ + { + "containsData": false, + "identifier": { + "identifier": "identifier" + }, + "boundingBox": { + "westLongitude": -140.0, + "eastLongitude": -120.0, + "southLatitude": 49.0, + "northLatitude": 70.0 + }, + "geographicElement": [ + { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + { + "type": "LineString", + "coordinates": [ + [ + 100.0, + 0.0 + ], + [ + 101.0, + 1.0 + ] + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [ + -161.74223, + 67.663378 + ], + [ + -161.440345, + 67.630173 + ], + [ + -161.294611, + 67.656257 + ], + [ + -161.228063, + 67.625736 + ], + [ + -161.247712, + 67.585909 + ], + [ + -161.334662, + 67.591324 + ], + [ + -161.566245, + 67.491263 + ], + [ + -161.812338, + 67.455299 + ], + [ + -161.825019, + 67.40123 + ], + [ + -162.128301, + 67.414364 + ], + [ + -162.167825, + 67.363047 + ], + [ + -162.383403, + 67.293329 + ], + [ + -162.633432, + 67.272237 + ], + [ + -162.645587, + 67.356665 + ], + [ + -162.369023, + 67.455264 + ], + [ + -162.287324, + 67.551235 + ], + [ + -162.171139, + 67.559356 + ], + [ + -161.99344, + 67.646806 + ], + [ + -161.857964, + 67.620329 + ], + [ + -161.769431, + 67.629407 + ], + [ + -161.74223, + 67.663378 + ] + ] + ] + } + ] + } + ] + } + ], + "scopeDescription": [ + { + "dataset": "CUSTOMER", + "attributes": "customer_id, invoice" + }, + { + "dataset": "dataset", + "attributes": "attributes", + "features": "features", + "other": "other" + } + ] + }, + { + "scopeCode": "fieldSeason" + } + ], + "note": [ + "note00", + "note01" + ], + "contact": [ + { + "role": "processor", + "party": [ + { + "contactId": "CID004" + } + ] + }, + { + "role": "contributor", + "party": [ + { + "contactId": "CID006" + } + ] + } + ] + }, + "alternateMetadataReference": [ + { + "title": "alternate metadata FGDC" + }, + { + "title": "alternate metadata NetCDF" + } + ], + "metadataStatus": "notAccepted" + }, + "resourceInfo": { + "resourceType": [ + { + "type": "tableDigital", + "name": "My Table Name" + }, + { + "type": "website", + "name": "My Website Name" + } + ], + "citation": { + "title": "Main Resource Title - Citation", + "alternateTitle": [ + "How I spent my summer", + "Research under the midnight-sun" + ], + "date": [ + { + "date": "2017-06-13", + "dateType": "publication" + }, + { + "date": "2017-06-22T16:15:14", + "dateType": "revision" + } + ], + "edition": "edition", + "responsibleParty": [ + { + "role": "principalInvestigator", + "roleExtent": [ + { + "description": "Extent 1: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + }, + { + "description": "Extent 2: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "geographicExtent": [ + { + "containsData": true, + "geographicElement": [ + { + "type": "Feature", + "id": "polygon-75", + "bbox": [ + -10.0, + -10.0, + 10.0, + 10.0 + ], + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -161.74223, + 67.663378 + ], + [ + -161.440345, + 67.630173 + ], + [ + -161.294611, + 67.656257 + ], + [ + -161.228063, + 67.625736 + ], + [ + -161.247712, + 67.585909 + ], + [ + -161.334662, + 67.591324 + ], + [ + -161.566245, + 67.491263 + ], + [ + -161.812338, + 67.455299 + ], + [ + -161.825019, + 67.40123 + ], + [ + -162.128301, + 67.414364 + ], + [ + -162.167825, + 67.363047 + ], + [ + -162.383403, + 67.293329 + ], + [ + -162.633432, + 67.272237 + ], + [ + -162.645587, + 67.356665 + ], + [ + -162.369023, + 67.455264 + ], + [ + -162.287324, + 67.551235 + ], + [ + -162.171139, + 67.559356 + ], + [ + -161.99344, + 67.646806 + ], + [ + -161.857964, + 67.620329 + ], + [ + -161.769431, + 67.629407 + ], + [ + -161.74223, + 67.663378 + ] + ] + ] + }, + "properties": { + "description": "Agashashok River site", + "featureName": [ + "Agashashok River", + "Camp Mosquito" + ], + "identifier": [ + { + "identifier": "AGAR" + }, + { + "identifier": "Kup25" + } + ], + "featureScope": "collectionSite", + "acquisitionMethod": "butterfly net", + "customField": "not in schema", + "customArray": [ + "string 1", + "string 2" + ] + } + } + ] + } + ] + } + ], + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "funder", + "party": [ + { + "contactId": "CID003", + "organizationMembers": [ + "CID004", + "CID001" + ] + } + ] + }, + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ], + "presentationForm": [ + "presentationForm0", + "presentationForm1" + ], + "identifier": [ + { + "identifier": "identifier0" + }, + { + "identifier": "identifier1" + } + ], + "series": { + "seriesName": "seriesName", + "seriesIssue": "seriesIssue", + "issuePage": "issuePage" + }, + "otherCitationDetails": [ + "otherCitationDetails0", + "otherCitationDetails1" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "graphic": [ + { + "fileName": "fileName" + }, + { + "fileName": "fileName" + } + ] + }, + "abstract": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "shortAbstract": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "purpose": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "resourceUsage": [ + { + "specificUsage": "My Specific Usage is quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.", + "temporalExtent": [ + { + "timeInstant": { + "dateTime": "2016-10-24T11:10:15.2-10:00", + "id": "instant_001", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identifier": { + "identifier": "HighTide", + "namespace": "namespace" + }, + "instantName": [ + "instantName 00", + "instantName 01" + ] + } + }, + { + "timePeriod": { + "id": "period_001", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identifier": { + "identifier": "SlackTide", + "namespace": "namespace" + }, + "periodName": [ + "periodName 00", + "periodName 01" + ], + "startDateTime": "2017", + "endDateTime": "2018", + "timeInterval": { + "interval": 9, + "units": "month" + }, + "duration": { + "months": 9 + } + } + }, + { + "timeInstant": { + "dateTime": "2017-03-25T23:10:15", + "id": "instant_002", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identifier": { + "identifier": "LowTide", + "namespace": "namespace", + "version": "version", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt,", + "authority": { + "title": "title", + "alternateTitle": [ + "alternateTitle0", + "alternateTitle1" + ], + "date": [ + { + "date": "2016-10-13", + "dateType": "dateType0" + }, + { + "date": "2016-10-22T16:15:14", + "dateType": "dateType1" + } + ], + "edition": "edition", + "responsibleParty": [ + { + "role": "principalInvestigator", + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "funder", + "party": [ + { + "contactId": "CID003", + "organizationMembers": [ + "CID004", + "CID001" + ] + } + ] + } + ], + "presentationForm": [ + "presentationForm0", + "presentationForm1" + ], + "identifier": [ + { + "identifier": "identifier0" + }, + { + "identifier": "identifier1" + } + ], + "series": { + "seriesName": "seriesName", + "seriesIssue": "seriesIssue", + "issuePage": "issuePage" + }, + "otherCitationDetails": [ + "otherCitationDetails0", + "otherCitationDetails1" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "graphic": [ + { + "fileName": "fileName" + }, + { + "fileName": "fileName" + } + ] + } + }, + "instantName": [ + "instantName 20", + "instantName 21" + ] + } + } + ], + "userDeterminedLimitation": "My Specific Limitation is quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.", + "limitationResponse": [ + "Exercitation ullamco laboris nisi ut aliquip ex ea commodo quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.", + "Nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo. My Specific Usage is quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo." + ], + "documentedIssue": { + "title": "My Documented Issue", + "date": [ + { + "date": "2016-10-13", + "dateType": "dateType0" + }, + { + "date": "2016-10-22T16:15:14", + "dateType": "dateType1" + } + ] + }, + "additionalDocumentation": [ + { + "title": "title1" + }, + { + "title": "title2" + } + ], + "userContactInfo": [ + { + "role": "administrator", + "party": [ + { + "contactId": "CID006" + } + ] + }, + { + "role": "coPrincipalInvestigator", + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID003" + } + ] + } + ] + }, + { + "specificUsage": "My specific usage is Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + } + ], + "status": [ + "incomplete", + "suspended" + ], + "pointOfContact": [ + { + "role": "pointOfContact", + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID006" + } + ] + }, + { + "role": "principalInvestigator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ], + "defaultResourceLocale": { + "language": "eng", + "country": "USA", + "characterSet": "UTF-8" + }, + "otherResourceLocale": [ + { + "language": "language0", + "country": "country0", + "characterSet": "characterSet0" + }, + { + "language": "language1", + "country": "country1", + "characterSet": "characterSet1" + } + ], + "credit": [ + "Lim, Sonny B. - Guitar", + "Peterson, Jeff - Slack Key Guitar", + "Kamakawiwo'ole, Israel - Vocal" + ], + "timePeriod": { + "description": "ground condition", + "startDateTime": "2016-06-01", + "endDateTime": "2016-08-15" + }, + "temporalResolution": [ + { + "years": 1, + "months": 8, + "days": 13 + }, + { + "seconds": 5 + } + ], + "spatialReferenceSystem": [ + { + "referenceSystemType": "referenceSystemType0", + "referenceSystemIdentifier": { + "identifier": "spatial reference system identifier", + "namespace": "namespace", + "version": "version", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "authority": { + "title": "title", + "alternateTitle": [ + "alternateTitle0", + "alternateTitle1" + ], + "date": [ + { + "date": "2016-10-13", + "dateType": "dateType0" + }, + { + "date": "2016-10-22T16:15:14", + "dateType": "dateType1" + } + ], + "edition": "edition", + "responsibleParty": [ + { + "role": "principalInvestigator", + "party": [ + { + "contactId": "CID001" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "funder", + "party": [ + { + "contactId": "CID003", + "organizationMembers": [ + "CID004", + "CID001" + ] + } + ] + } + ], + "presentationForm": [ + "presentationForm0", + "presentationForm1" + ], + "identifier": [ + { + "identifier": "identifier0" + }, + { + "identifier": "identifier1" + } + ], + "series": { + "seriesName": "seriesName", + "seriesIssue": "seriesIssue", + "issuePage": "issuePage" + }, + "otherCitationDetails": [ + "otherCitationDetails0", + "otherCitationDetails1" + ], + "onlineResource": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "graphic": [ + { + "fileName": "fileName" + }, + { + "fileName": "fileName" + } + ] + } + } + }, + { + "referenceSystemType": "referenceSystemType1" + }, + { + "referenceSystemIdentifier": { + "identifier": "identifier2" + } + } + ], + "spatialRepresentationType": [ + "vector", + "stereoModel" + ], + "spatialRepresentation": [ + { + "gridRepresentation": { + "numberOfDimensions": 9, + "dimension": [ + { + "dimensionType": "column", + "dimensionSize": 9, + "resolution": { + "type": "distance", + "value": 9.9, + "unitOfMeasure": "feet" + }, + "dimensionTitle": "COLUMN TITLE", + "dimensionDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + }, + { + "dimensionType": "row", + "dimensionSize": 9 + } + ], + "cellGeometry": "voxel", + "transformParamsAvailability": true + } + }, + { + "vectorRepresentation": { + "topologyLevel": "fullTopology3D", + "vectorObject": [ + { + "objectType": "object Type 0", + "objectCount": 9 + }, + { + "objectType": "object Type 1", + "objectCount": 9 + } + ] + } + }, + { + "georectifiedRepresentation": { + "gridRepresentation": { + "numberOfDimensions": 9, + "dimension": [ + { + "dimensionType": "row", + "dimensionSize": 90 + }, + { + "dimensionType": "column", + "dimensionSize": 91 + } + ], + "cellGeometry": "cellGeometry", + "transformationParameterAvailable": true + }, + "checkPointAvailable": true, + "checkPointDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "cornerPoints": [ + [ + 0.0, + 0.0 + ], + [ + 0.0, + 1.0 + ], + [ + 1.0, + 1.0 + ], + [ + 1.0, + 0.0 + ] + ], + "centerPoint": [ + 0.5, + 0.5 + ], + "pointInPixel": "upperRight", + "transformationDimensionDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "transformationDimensionMapping": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + } + }, + { + "georeferenceableRepresentation": { + "gridRepresentation": { + "numberOfDimensions": 9, + "dimension": [ + { + "dimensionType": "row", + "dimensionSize": 90 + }, + { + "dimensionType": "column", + "dimensionSize": 91 + } + ], + "cellGeometry": "cellGeometry", + "transformationParameterAvailable": true + }, + "controlPointAvailable": true, + "orientationParameterAvailable": true, + "orientationParameterDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "georeferencedParameter": "Georeferenced Parameter 00", + "parameterCitation": [ + { + "title": "title0" + }, + { + "title": "title1" + } + ] + } + } + ], + "spatialResolution": [ + { + "scaleFactor": 99999 + }, + { + "measure": { + "type": "distance", + "value": 99.9, + "unitOfMeasure": "unitOfMeasure" + } + }, + { + "levelOfDetail": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + } + ], + "keyword": [ + { + "keyword": [ + { + "keyword": "Barrow" + }, + { + "keyword": "Prudhoe Bay" + }, + { + "keyword": "Kaparuk" + } + ], + "keywordType": "place", + "thesaurus": { + "title": "USGS Geographic Names Information System" + } + }, + { + "keyword": [ + { + "keyword": "Brown Bear", + "keywordId": "TSN12365741" + }, + { + "keyword": "Polar Bear", + "keywordId": "TSN125415741" + }, + { + "keyword": "Black Bear", + "keywordId": "TSN123689426" + }, + { + "keyword": "Cinnamon Bear", + "keywordId": "TSN123842165" + }, + { + "keyword": "Teddy Bear" + } + ], + "keywordType": "taxon", + "thesaurus": { + "title": "ITIS - Integrated Taxonomic Information System" + } + }, + { + "keyword": [ + { + "keyword": "butter" + }, + { + "keyword": "sugar" + }, + { + "keyword": "eggs" + } + ], + "keywordType": "theme", + "thesaurus": { + "title": "Exploring Cookies" + } + }, + { + "keyword": [ + { + "keyword": "inlandWaters", + "keywordId": "012" + }, + { + "keyword": "location", + "keywordId": "013" + }, + { + "keyword": "climatologyMeteorologyAtmosphere", + "keywordId": "004" + } + ], + "keywordType": "isoTopicCategory", + "thesaurus": { + "title": "ISO Topic Categories" + } + }, + { + "keyword": [ + { + "keyword": "carbon dating" + }, + { + "keyword": "ionization" + } + ], + "keywordType": "method", + "thesaurus": { + "title": "Lineage Methodology keyword set" + } + } + ], + "taxonomy": { + "taxonomicSystem": [ + { + "citation": { + "title": "ITIS - Integrated Taxonomic Information System", + "alternateTitle": [ + "Citation for ITIS" + ], + "date": [ + { + "date": "2013-06-22", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + }, + "modifications": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + }, + { + "citation": { + "title": "Some OTHER Taxonomic System", + "date": [ + { + "date": "2013-06-22", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + } + } + ], + "generalScope": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identificationReference": [ + { + "identifier": "identifier0", + "namespace": "namespace0", + "version": "version0", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "authority": { + "title": "title0", + "date": [ + { + "date": "2013-06-22", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + } + }, + { + "identifier": "identifier1", + "namespace": "namespace1", + "version": "version1", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "authority": { + "title": "title1", + "date": [ + { + "date": "2013-06-22", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + } + } + ], + "observer": [ + { + "role": "coPrincipalInvestigator", + "party": [ + { + "contactId": "CID006" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "editor", + "party": [ + { + "contactId": "CID001" + } + ] + } + ], + "identificationProcedure": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identificationCompleteness": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "voucher": [ + { + "specimen": "bear claw", + "repository": { + "role": "custodian", + "party": [ + { + "contactId": "CID002" + } + ] + } + }, + { + "specimen": "moose tooth", + "repository": { + "role": "custodian", + "party": [ + { + "contactId": "CID002" + } + ] + } + } + ], + "taxonomicClassification": { + "taxonomicRank": "taxonomicRank0", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [ + { + "taxonomicSystemId": "taxonomicSystemId00", + "taxonomicRank": "taxonomicRank00", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [ + { + "taxonomicRank": "taxonomicRank000", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [ + { + "taxonomicSystemId": "taxonomicSystemId0000.1", + "taxonomicRank": "taxonomicRank0000.1", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [] + }, + { + "taxonomicSystemId": "taxonomicSystemId0000.2", + "taxonomicRank": "taxonomicRank0000.2", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [] + } + ] + } + ] + }, + { + "taxonomicRank": "taxonomicRank01", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [ + { + "taxonomicRank": "taxonomicRank010", + "latinName": "latinName", + "commonName": [ + "commonName0", + "commonName1" + ], + "subClassification": [] + } + ] + } + ] + } + }, + "graphicOverview": [ + { + "fileName": "fileName 0", + "fileDescription": "fileDescription 0", + "fileType": "fileType 0", + "fileConstraint": [ + { + "type": "use", + "useLimitation": [ + "useLimitation0", + "useLimitation1" + ] + }, + { + "type": "legal", + "legal": { + "useConstraint": [ + "useConstraint0", + "useConstraint1" + ], + "accessConstraint": [ + "accessConstraint0", + "accessConstraint1" + ], + "otherConstraint": [ + "otherConstraint0", + "otherConstraint1" + ] + } + } + ], + "fileUri": [ + { + "uri": "http://ISO.uri/adiwg/0" + } + ] + }, + { + "fileName": "fileName 1", + "fileDescription": "fileDescription 1", + "fileType": "fileType 1", + "fileUri": [ + { + "uri": "http://ISO.uri/adiwg/1" + } + ] + } + ], + "constraint": [ + { + "type": "use", + "useLimitation": [ + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + ], + "scope": { + "scopeCode": "scopeCode" + }, + "graphic": [ + { + "fileName": "fileName0" + }, + { + "fileName": "fileName1" + } + ], + "reference": [ + { + "title": "title0" + }, + { + "title": "title1" + } + ], + "releasability": { + "statement": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "addressee": [ + { + "role": "client", + "party": [ + { + "contactId": "CID001" + } + ] + }, + { + "role": "stakeholder", + "party": [ + { + "contactId": "CID002" + }, + { + "contactId": "CID003" + } + ] + } + ], + "disseminationConstraint": [ + "restricted", + "unrestricted" + ] + }, + "responsibleParty": [ + { + "role": "coAuthor", + "party": [ + { + "contactId": "CID006" + }, + { + "contactId": "CID004" + } + ] + }, + { + "role": "rightsHolder", + "party": [ + { + "contactId": "CID005" + } + ] + } + ] + }, + { + "type": "legal", + "useLimitation": [ + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + ], + "scope": { + "scopeCode": "scopeCode" + }, + "graphic": [ + { + "fileName": "fileName0" + }, + { + "fileName": "fileName1" + } + ], + "legal": { + "useConstraint": [ + "threatenedOrEndangered", + "otherRestrictions" + ], + "accessConstraint": [ + "otherRestrictions", + "in-confidence" + ], + "otherConstraint": [ + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure." + ] + } + }, + { + "type": "security", + "security": { + "classification": "secret", + "classificationSystem": "Classification System Name", + "userNote": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "handlingDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + } + } + ], + "coverageDescription": [ + { + "coverageName": "My First Coverage", + "coverageDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "processingLevelCode": { + "identifier": "processing level code" + }, + "attributeGroup": [ + { + "attributeContentType": [ + "thematicClassification", + "physicalMeasurement" + ], + "attribute": [ + { + "sequenceIdentifier": "sequenceIdentifier 1", + "sequenceIdentifierType": "sequenceIdentifierType", + "attributeDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "attributeIdentifier": [ + { + "identifier": "identifier 1" + }, + { + "identifier": "identifier 2" + } + ], + "minValue": 9.9, + "maxValue": 9.9, + "units": "units", + "scaleFactor": 999, + "offset": 999, + "meanValue": 9.9, + "numberOfValues": 999, + "standardDeviation": 9.9, + "bitsPerValue": 999, + "boundMin": 9.9, + "boundMax": 9.9, + "boundUnits": "boundUnits", + "peakResponse": 9.9, + "toneGradations": 999, + "bandBoundaryDefinition": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "nominalSpatialResolution": 9.9, + "transferFunctionType": "transferFunctionType", + "transmittedPolarization": "transmittedPolarization", + "detectedPolarization": "detectedPolarization" + }, + { + "sequenceIdentifier": "sequenceIdentifier 2", + "sequenceIdentifierType": "sequenceIdentifierType", + "attributeDescription": "attributeDescription", + "attributeIdentifier": [ + { + "identifier": "identifier" + } + ], + "minValue": 9.9, + "maxValue": 9.9, + "units": "units", + "scaleFactor": 999, + "offset": 999, + "meanValue": 9.9, + "numberOfValues": 999, + "standardDeviation": 9.9, + "bitsPerValue": 999 + } + ] + }, + { + "attributeContentType": [ + "modelResult" + ] + } + ], + "imageDescription": { + "illuminationElevationAngle": 9.9, + "illuminationAzimuthAngle": 9.9, + "imagingCondition": "imagingCondition", + "imageQualityCode": { + "identifier": "identifier" + }, + "cloudCoverPercent": 9.9, + "compressionQuantity": 9, + "triangulationIndicator": true, + "radiometricCalibrationAvailable": true, + "cameraCalibrationAvailable": true, + "filmDistortionAvailable": true, + "lensDistortionAvailable": true + } + }, + { + "coverageName": "My Second Coverage", + "coverageDescription": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "processingLevelCode": { + "identifier": "identifier" + }, + "attributeGroup": [ + { + "attributeContentType": [ + "attributeContentType" + ] + }, + { + "attributeContentType": [ + "attributeContentType" + ] + } + ], + "imageDescription": { + "illuminationElevationAngle": 60.0 + } + } + ], + "resourceFormat": [ + { + "formatSpecification": { + "title": "specification 1" + }, + "amendmentNumber": "amendmentNumber", + "compressionMethod": "compressionMethod" + }, + { + "formatSpecification": { + "title": "specification 2" + }, + "amendmentNumber": "amendmentNumber", + "compressionMethod": "compressionMethod" + } + ], + "resourceMaintenance": [ + { + "frequency": "semi-annually", + "date": [ + { + "date": "2016-10-12", + "dateType": "dateType" + }, + { + "date": "2016-10-12", + "dateType": "dateType" + } + ], + "scope": [ + { + "scopeCode": "scopeCode" + }, + { + "scopeCode": "scopeCode" + } + ], + "note": [ + "note0", + "note1" + ], + "contact": [ + { + "role": "custodian", + "party": [ + { + "contactId": "CID005" + } + ] + } + ] + }, + { + "frequency": "frequency1" + } + ], + "environmentDescription": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "supplementalInfo": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "extent": [ + { + "description": "Extent 1: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "geographicExtent": [ + { + "description": "geographic extent description", + "containsData": false, + "identifier": { + "identifier": "identifier" + }, + "boundingBox": { + "westLongitude": -140.0, + "eastLongitude": -120.0, + "southLatitude": 49.0, + "northLatitude": 70.0 + }, + "geographicElement": [ + { + "type": "Point", + "coordinates": [100.0, 0.0] + }, + { + "type": "LineString", + "coordinates": [ + [100.0, 0.0], + [101.0, 1.0] + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [-161.74223, 67.663378], + [-161.440345, 67.630173], + [-161.294611, 67.656257], + [-161.228063, 67.625736], + [-161.247712, 67.585909], + [-161.334662, 67.591324], + [-161.566245, 67.491263], + [-161.812338, 67.455299], + [-161.825019, 67.40123], + [-162.128301, 67.414364], + [-162.167825, 67.363047], + [-162.383403, 67.293329], + [-162.633432, 67.272237], + [-162.645587, 67.356665], + [-162.369023, 67.455264], + [-162.287324, 67.551235], + [-162.171139, 67.559356], + [-161.99344, 67.646806], + [-161.857964, 67.620329], + [-161.769431, 67.629407], + [-161.74223, 67.663378] + ] + ] + } + ] + }, + { + "containsData": true, + "geographicElement": [ + { + "type": "Polygon", + "coordinates": [ + [ + [-10.0, 50.0], + [90.0, 50.0], + [90.0, 25.0], + [-10.0, 25.0], + [-10.0, 50.0] + ] + ] + } + ] + }, + { + "containsData": true, + "geographicElement": [ + { + "type": "Polygon", + "coordinates": [ + [ + [140, 65], + [-170, 65], + [-170, 55], + [140, 55], + [140, 65] + ] + ] + } + ] + }, + { + "containsData": false, + "identifier": { + "identifier": "identifier" + }, + "geographicElement": [ + { + "type": "Polygon", + "coordinates": [ + [ + [-162, 65], + [-161, 65], + [-161, 60], + [-162, 60], + [-162, 65] + ] + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [100, 55], + [102, 55], + [102, 50], + [100, 50], + [100, 55] + ] + ] + } + ] + } + ], + "temporalExtent": [ + { + "timeInstant": { + "dateTime": "2016-10-24T11:10:15.200-10:00" + } + }, + { + "timePeriod": { + "startDateTime": "2016-10-24T11:10:15.200-10:00" + } + } + ], + "verticalExtent": [ + { + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "minValue": 9.9, + "maxValue": 9.9, + "crsId": { + "referenceSystemType": "referenceSystemType0", + "referenceSystemIdentifier": { + "identifier": "identifier0" + } + } + }, + { + "minValue": 99.99, + "maxValue": 99.99, + "crsId": { + "referenceSystemType": "referenceSystemType1", + "referenceSystemIdentifier": { + "identifier": "identifier1" + } + } + } + ] + }, + { + "description": "Extent 2: Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "geographicExtent": [ + { + "containsData": false, + "identifier": { + "identifier": "identifier" + }, + "geographicElement": [ + { + "type": "Polygon", + "coordinates": [ + [ + [-30, 25], + [-20, 25], + [-20, 20], + [-30, 20], + [-30, 25] + ] + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [10, 40], + [15, 35], + [15, 30], + [10, 30], + [10, 40] + ] + ] + } + ] + }, + { + "containsData": true, + "geographicElement": [ + { + "type": "GeometryCollection", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometries": [ + { + "type": "Point", + "coordinates": [100.0, 0.0] + }, + { + "type": "LineString", + "coordinates": [ + [101.0, 0.0], + [102.0, 1.0] + ] + } + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [10, 40], + [15, 35], + [15, 30], + [10, 30], + [10, 40] + ] + ] + } + ] + }, + { + "containsData": true, + "geographicElement": [ + { + "type": "Feature", + "id": "polygon-75", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [-161.74223, 67.663378], + [-161.440345, 67.630173], + [-161.294611, 67.656257], + [-161.228063, 67.625736], + [-161.247712, 67.585909], + [-161.334662, 67.591324], + [-161.566245, 67.491263], + [-161.812338, 67.455299], + [-161.825019, 67.40123], + [-162.128301, 67.414364], + [-162.167825, 67.363047], + [-162.383403, 67.293329], + [-162.633432, 67.272237], + [-162.645587, 67.356665], + [-162.369023, 67.455264], + [-162.287324, 67.551235], + [-162.171139, 67.559356], + [-161.99344, 67.646806], + [-161.857964, 67.620329], + [-161.769431, 67.629407], + [-161.74223, 67.663378] + ] + ] + }, + "properties": { + "description": "Agashashok River site", + "featureName": [ + "Agashashok River", + "Camp Mosquito" + ], + "identifier": [ + { + "identifier": "AGAR" + }, + { + "identifier": "Kup25" + } + ], + "featureScope": "collectionSite", + "acquisitionMethod": "butterfly net", + "customField": "not in schema", + "customArray": [ + "string 1", + "string 2" + ] + } + } + ] + }, + { + "containsData": true, + "geographicElement": [ + { + "type": "FeatureCollection", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "features": [ + { + "type": "Feature", + "id": "ALCC-BH55", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometry": { + "type": "Point", + "coordinates": [102.0, 0.5] + }, + "properties": { + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "featureName": [ + "fake name" + ] + } + }, + { + "type": "Feature", + "id": "ALCC-BH56", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometry": { + "type": "LineString", + "coordinates": [ + [102.0, 0.0], + [103.0, 1.0], + [104.0, 0.0], + [105.0, 1.0] + ] + }, + "properties": { + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + } + }, + { + "type": "Feature", + "id": "ALCC-Co81", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometry": { + "type": "GeometryCollection", + "bbox": [-10.0, -10.0, 10.0, 10.0], + "geometries": [ + { + "type": "Point", + "coordinates": [100.0, 0.0] + }, + { + "type": "LineString", + "coordinates": [ + [101.0, 0.0], + [102.0, 1.0] + ] + } + ] + }, + "properties": { + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + } + } + ] + } + ] + } + ] + } + ] + }, + "resourceLineage": [ + { + "statement": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "scope": { + "scopeCode": "scopeCode" + }, + "citation": [ + { + "title": "Lineage Title 1", + "date": [ + { + "date": "2017-10-13", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + }, + { + "title": "Lineage Title 2", + "date": [ + { + "date": "2017-10-13", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + } + ], + "source": [ + { + "sourceId": "SRC001", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "sourceCitation": { + "title": "Source Citation Title SRC001", + "date": [ + { + "date": "2017-10-13", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + }, + "metadataCitation": [ + { + "title": "First Source Metadata Citation" + }, + { + "title": "Next Source Metadata Citation" + } + ], + "spatialResolution": { + "scaleFactor": 99999 + }, + "referenceSystem": { + "referenceSystemType": "referenceSystemType", + "referenceSystemIdentifier": { + "identifier": "identifier" + } + }, + "sourceProcessStep": [ + { + "description": "description", + "timePeriod": { + "endDateTime": "2017-12-28T15:15" + } + }, + { + "description": "description", + "timePeriod": { + "endDateTime": "2017-12-28T15:16" + } + } + ], + "scope": { + "scopeCode": "scopeCode SRC001", + "scopeExtent": [ + { + "temporalExtent": [ + { + "timePeriod": { + "description": "publication date", + "startDateTime": "2016-11-01" + } + } + ] + } + ] + } + }, + { + "sourceId": "SRC002", + "description": "description", + "sourceCitation": { + "title": "Source Citation Title SRC002", + "date": [ + { + "date": "2017-10-13", + "dateType": "publication" + } + ], + "responsibleParty": [ + { + "role": "originator", + "party": [ + { + "contactId": "CID004" + } + ] + } + ] + }, + "scope": { + "scopeCode": "scopeCode SRC002", + "scopeExtent": [ + { + "temporalExtent": [ + { + "timePeriod": { + "description": "publication date", + "startDateTime": "2016-11-02" + } + } + ] + } + ] + } + } + ], + "processStep": [ + { + "stepId": "stepId", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "rationale": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "timePeriod": { + "id": "TimePeriod001", + "startDateTime": "2016-10-14T11:10:15.2-10:00", + "endDateTime": "2016-12-31", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identifier": { + "identifier": "TimePeriod Identifier", + "namespace": "namespace" + }, + "periodName": [ + "periodName0", + "periodName1" + ], + "timeInterval": { + "interval": 9.9, + "units": "year" + }, + "duration": { + "months": 9 + } + }, + "processor": [ + { + "role": "processor", + "party": [ + { + "contactId": "CID006" + } + ] + }, + { + "role": "reviewer", + "party": [ + { + "contactId": "CID004" + } + ] + } + ], + "reference": [ + { + "title": "Process Step Reference" + }, + { + "title": "Another Process Step Reference" + } + ], + "scope": { + "scopeCode": "scopeCode" + } + }, + { + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "timePeriod": { + "endDateTime": "2017-12-28T15:28" + } + } + ] + }, + { + "statement": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + } + ], + "resourceDistribution": [ + { + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "liabilityStatement": "Blah blah blah liability. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", + "distributor": [ + { + "contact": { + "role": "distributor", + "party": [ + { + "contactId": "CID002" + } + ] + }, + "orderProcess": [ + { + "fees": "10.00USD", + "plannedAvailability": "2016-10-21T00:00:00", + "orderingInstructions": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "turnaround": "turnaround" + }, + { + "fees": "2.00USD" + } + ], + "transferOption": [ + { + "unitsOfDistribution": "units of distribution", + "transferSize": 9.9, + "onlineOption": [ + { + "uri": "http://ISO.uri/adiwg/0" + }, + { + "uri": "http://ISO.uri/adiwg/1" + } + ], + "offlineOption": [ + { + "mediumSpecification": { + "title": "My Medium Specification Title" + }, + "density": 9.9, + "units": "units", + "numberOfVolumes": 9, + "mediumFormat": [ + "mediumFormat0", + "mediumFormat1" + ], + "note": "note", + "identifier": { + "identifier": "Medium Identifier" + } + }, + { + "mediumSpecification": { + "title": "dium specification title 1" + } + } + ], + "transferFrequency": { + "months": 9 + }, + "distributionFormat": [ + { + "formatSpecification": { + "title": "CSV" + }, + "amendmentNumber": "2.0.8-beta", + "compressionMethod": "7ZipUp", + "technicalPrerequisite": "Blah blah blah 2.0 technical prerequisite" + }, + { + "formatSpecification": { + "title": "format specification title 1" + } + } + ] + }, + { + "transferSize": 10.9, + "distributionFormat": [ + { + "formatSpecification": { + "title": "Microsoft Excel" + } + } + ] + } + ] + }, + { + "contact": { + "role": "distributor", + "party": [ + { + "contactId": "CID003" + } + ] + } + } + ] + } + ], + "associatedResource": [ + { + "resourceType": [ + { + "type": "modelHardcopy", + "name": "Hardcopy of Model" + }, + { + "type": "videoDigital", + "name": "Video of the Making" + } + ], + "associationType": "partOfSeamlessDatabase", + "initiativeType": "investigation", + "resourceCitation": { + "title": "Resource Citation Title" + }, + "metadataCitation": { + "title": "Metadata Citation Title" + } + }, + { + "resourceType": [ + { + "type": "type0", + "name": "name0" + }, + { + "type": "type1", + "name": "name1" + } + ], + "associationType": "associationType", + "initiativeType": "initiativeType", + "resourceCitation": { + "title": "title" + }, + "metadataCitation": { + "title": "title" + } + } + ], + "additionalDocumentation": [ + { + "resourceType": [ + { + "type": "webService", + "name": "ADIwg API" + }, + { + "type": "databaseDigital", + "name": "DMV Data" + } + ], + "citation": [ + { + "title": "A Good Additional Document" + }, + { + "title": "A More Better Additional Document" + } + ] + }, + { + "resourceType": [ + { + "type": "multimediaHardcopy", + "name": "Multi-Media Hard-Copy" + }, + { + "type": "physicalObject", + "name": "Lab Specimen" + } + ], + "citation": [ + { + "title": "A Much Mo Betha Additional Document" + } + ] + } + ], + "funding": [ + { + "allocation": [ + { + "sourceAllocationId": "A123FW009", + "amount": 9999.99, + "currency": "USD", + "sourceId": "CID005", + "recipientId": "CID006", + "matching": true, + "onlineResource": [ + { + "uri": "http://adiwg.org" + } + ], + "comment": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + }, + { + "amount": 999.99, + "currency": "CAD" + } + ], + "timePeriod": { + "startDateTime": "2016-10-14T11:10:15.2-10:00", + "endDateTime": "2016-12-31", + "id": "TimePeriod001", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "identifier": { + "identifier": "TimePeriod Identifier", + "namespace": "namespace" + }, + "periodName": [ + "periodName0", + "periodName1" + ], + "timeInterval": { + "interval": 9.9, + "units": "year" + }, + "duration": { + "months": 9 + } + } + }, + { + "allocation": [ + { + "amount": 9999.99, + "currency": "EUR" + } + ], + "timePeriod": { + "startDateTime": "2016-10-14" + } + } + ] + }, + "dataDictionary": [ + { + "citation": { + "title": "title" + }, + "subject": [ + "subject0", + "subject1" + ], + "recommendedUse": [ + "use0", + "use1" + ], + "locale": [ + { + "language": "language0", + "country": "country0", + "characterSet": "characterSet0" + }, + { + "language": "language1", + "country": "country1", + "characterSet": "characterSet1" + } + ], + "responsibleParty": { + "role": "author", + "party": [ + { + "contactId": "CID001" + } + ] + }, + "dictionaryFunctionalLanguage": "UML", + "dictionaryIncludedWithResource": true, + "domain": [ + { + "domainId": "DID001", + "commonName": "commonName", + "codeName": "codeName", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "domainItem": [ + { + "name": "name0", + "value": "value0", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + }, + { + "name": "name1", + "value": "value1", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + }, + { + "name": "name2", + "value": "value2", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + } + ] + }, + { + "domainId": "DID002", + "commonName": "commonName", + "codeName": "codeName", + "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "domainItem": [ + { + "name": "name0", + "value": "value0", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore." + } + ] + } + ], + "entity": [ + { + "entityId": "entityId0", + "commonName": "commonName", + "codeName": "codeName", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "entityReference": [ + { + "title": "entity reference citation 0" + } + ], + "primaryKeyAttributeCodeName": [ + "primaryAttribute0", + "primaryAttribute1" + ], + "index": [ + { + "codeName": "codeName0", + "allowDuplicates": false, + "attributeCodeName": [ + "attributeCodeName00", + "attributeCodeName01" + ] + }, + { + "codeName": "codeName1", + "allowDuplicates": true, + "attributeCodeName": [ + "attributeCodeName1" + ] + } + ], + "attribute": [ + { + "commonName": "Department ID", + "codeName": "codeName", + "alias": [ + "alias0", + "alias1" + ], + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "attributeReference": { + "title": "attribute reference citation Department ID" + }, + "dataType": "dataType", + "allowNull": true, + "allowMany": false, + "units": "units", + "domainId": "DID001", + "minValue": "minValue", + "maxValue": "maxValue" + }, + { + "commonName": "Employee ID", + "codeName": "empId", + "alias": [ + "employeeId", + "employeeNumber" + ], + "definition": "Numeric code to uniquely identify an employee of Acme Oil", + "attributeReference": { + "title": "attribute reference citation for Employee ID" + }, + "dataType": "numeric", + "allowNull": false, + "allowMany": true, + "units": "meters", + "domainId": "DID002", + "minValue": "1000000", + "maxValue": "5000000" + } + ], + "foreignKey": [ + { + "localAttributeCodeName": [ + "localAttributeCodeName0", + "localAttributeCodeName1" + ], + "referencedEntityCodeName": "referencedEntityCodeName", + "referencedAttributeCodeName": [ + "referencedAttributeCodeName0", + "referencedAttributeCodeName1" + ] + }, + { + "localAttributeCodeName": [ + "employeeID" + ], + "referencedEntityCodeName": "EMPLOYEE", + "referencedAttributeCodeName": [ + "employeeID" + ] + } + ] + }, + { + "entityId": "entityId1", + "commonName": "commonName", + "codeName": "codeName", + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "entityReference": [ + { + "title": "entity reference citation 1" + } + ], + "primaryKeyAttributeCodeName": [ + "primaryAttribute" + ], + "attribute": [ + { + "commonName": "Supervisor", + "codeName": "codeName", + "alias": [ + "alias0", + "alias1" + ], + "definition": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", + "attributeReference": { + "title": "attribute reference citation for supervisor" + }, + "dataType": "dataType", + "allowNull": true, + "allowMany": false, + "units": "units", + "domainId": "DID001", + "minValue": "minValue", + "maxValue": "maxValue" + }, + { + "commonName": "Grade", + "codeName": "empId", + "alias": [ + "employeeId", + "employeeNumber" + ], + "definition": "Numeric code to uniquely identify an employee of Acme Oil", + "attributeReference": { + "title": "attribute reference citation for grade" + }, + "dataType": "numeric", + "allowNull": false, + "allowMany": true, + "units": "meters", + "domainId": "DID002", + "minValue": "1000000", + "maxValue": "5000000" + } + ] + } + ] + }, + { + "citation": { + "title": "My Dictionary Title" + }, + "subject": [ + "birds", + "loons" + ], + "recommendedUse": [ + "Reconstruct database" + ], + "locale": [ + { + "language": "eng", + "country": "USA", + "characterSet": "UTF-8" + } + ], + "responsibleParty": { + "role": "author", + "party": [ + { + "contactId": "CID006" + } + ] + }, + "dictionaryFunctionalLanguage": "MSSQL", + "dictionaryIncludedWithResource": false + } + ], + "metadataRepository": [ + { + "repository": "USGS ScienceBase", + "metadataStandard": "FGDC" + }, + { + "repository": "data.gov", + "metadataStandard": "iso19115_2" + } + ] +} diff --git a/test/helpers/mdJson_hash_functions.rb b/test/helpers/mdJson_hash_functions.rb index 7328d1c95..82ac704ef 100644 --- a/test/helpers/mdJson_hash_functions.rb +++ b/test/helpers/mdJson_hash_functions.rb @@ -63,11 +63,10 @@ def build_dictionaryDomain(id = nil, common = nil, code = nil, description = nil return hDomain end - def build_distribution(description = nil, liability = nil, prereq = nil) + def build_distribution(description = nil, liability = nil) hDistribution = distribution hDistribution[:description] = description unless description.nil? hDistribution[:liabilityStatement] = liability unless liability.nil? - hDistribution[:technicalPrerequisite] = prereq unless prereq.nil? return hDistribution end @@ -574,9 +573,10 @@ def add_projection(hSpaceRef, projection, name = nil) return hSpaceRef end - def add_resourceFormat(hTransOpt, title = nil) + def add_resourceFormat(hTransOpt, title = nil, prereq = nil) hFormat = resourceFormat hFormat[:formatSpecification][:title] = title unless title.nil? + hFormat[:technicalPrerequisite] = prereq unless prereq.nil? hTransOpt[:distributionFormat] << hFormat return hTransOpt end diff --git a/test/helpers/mdJson_hash_objects.rb b/test/helpers/mdJson_hash_objects.rb index 380eeedf9..a5661b8a1 100644 --- a/test/helpers/mdJson_hash_objects.rb +++ b/test/helpers/mdJson_hash_objects.rb @@ -351,7 +351,6 @@ def distribution { description: 'distribution description', liabilityStatement: 'distribution liability statement', - technicalPrerequisite: 'distribution technical prerequisite', distributor: [] } end @@ -665,7 +664,8 @@ def resourceFormat ] }, amendmentNumber: 'amendment number', - compressionMethod: 'compression method' + compressionMethod: 'compression method', + technicalPrerequisite: 'format technical prerequisite' } end diff --git a/test/readers/fgdc/tc_fgdc_distribution.rb b/test/readers/fgdc/tc_fgdc_distribution.rb index a84095833..c487d7a6a 100644 --- a/test/readers/fgdc/tc_fgdc_distribution.rb +++ b/test/readers/fgdc/tc_fgdc_distribution.rb @@ -24,7 +24,6 @@ def test_distribution_complete refute_empty hDistribution assert_equal 'distribution description', hDistribution[:description] assert_equal 'distribution liability statement', hDistribution[:liabilityStatement] - assert_equal 'distribution technical prerequisite', hDistribution[:technicalPrerequisite] assert_equal 1, hDistribution[:distributor].length hDistributor = hDistribution[:distributor][0] diff --git a/test/readers/fgdc/tc_fgdc_transferInfo.rb b/test/readers/fgdc/tc_fgdc_transferInfo.rb index 76dc0241c..d850a7de6 100644 --- a/test/readers/fgdc/tc_fgdc_transferInfo.rb +++ b/test/readers/fgdc/tc_fgdc_transferInfo.rb @@ -41,6 +41,7 @@ def test_transferInfo_complete refute_empty hFormat0[:formatSpecification] assert_nil hFormat0[:amendmentNumber] assert_equal 'winzip legacy compression', hFormat0[:compressionMethod] + assert_equal 'distribution technical prerequisite', hFormat0[:technicalPrerequisite] hSpecification = hFormat0[:formatSpecification] assert_equal 'format specification', hSpecification[:title] diff --git a/test/readers/mdJson/tc_mdjson_distribution.rb b/test/readers/mdJson/tc_mdjson_distribution.rb index 1c19a3a02..b3e487a79 100644 --- a/test/readers/mdJson/tc_mdjson_distribution.rb +++ b/test/readers/mdJson/tc_mdjson_distribution.rb @@ -32,7 +32,6 @@ def test_complete_distribution_object assert_equal 'description', metadata[:description] assert_equal 'distribution liability statement', metadata[:liabilityStatement] - assert_equal 'distribution technical prerequisite', metadata[:technicalPrerequisite] assert_equal 2, metadata[:distributor].length assert hResponse[:readerExecutionPass] assert_empty hResponse[:readerExecutionMessages] @@ -45,7 +44,6 @@ def test_distribution_empty_elements hIn = Marshal::load(Marshal.dump(@@hIn)) hIn['description'] = '' hIn['liabilityStatement'] = '' - hIn['technicalPrerequisite'] = '' hIn['distributor'] = [] hResponse = Marshal::load(Marshal.dump(@@responseObj)) metadata = @@NameSpace.unpack(hIn, hResponse) @@ -64,7 +62,6 @@ def test_distribution_missing_elements hIn['nonElement'] = '' hIn.delete('description') hIn.delete('liabilityStatement') - hIn.delete('technicalPrerequisite') hIn.delete('distributor') hResponse = Marshal::load(Marshal.dump(@@responseObj)) metadata = @@NameSpace.unpack(hIn, hResponse) diff --git a/test/readers/mdJson/tc_mdjson_format.rb b/test/readers/mdJson/tc_mdjson_format.rb index 6f6b3a207..c05d3a133 100644 --- a/test/readers/mdJson/tc_mdjson_format.rb +++ b/test/readers/mdJson/tc_mdjson_format.rb @@ -10,99 +10,103 @@ class TestReaderMdJsonFormat < TestReaderMdJsonParent - # set variables for test - @@NameSpace = ADIWG::Mdtranslator::Readers::MdJson::Format - aIn = TestReaderMdJsonParent.getJson('format.json') - @@hIn = aIn['format'][0] + # set variables for test + @@NameSpace = ADIWG::Mdtranslator::Readers::MdJson::Format + aIn = TestReaderMdJsonParent.getJson('format.json') + @@hIn = aIn['format'][0] - def test_format_schema + # TODO reinstate after schema update + # def test_format_schema + # + # errors = TestReaderMdJsonParent.testSchema(@@hIn, 'format.json') + # assert_empty errors + # + # end - errors = TestReaderMdJsonParent.testSchema(@@hIn, 'format.json') - assert_empty errors + def test_complete_format_object - end + hIn = Marshal::load(Marshal.dump(@@hIn)) + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack(hIn, hResponse) - def test_complete_format_object + refute_empty metadata[:formatSpecification] + assert_equal 'amendmentNumber', metadata[:amendmentNumber] + assert_equal 'compressionMethod', metadata[:compressionMethod] + assert_equal 'formatTechnicalPrerequisite', metadata[:technicalPrerequisite] + assert hResponse[:readerExecutionPass] + assert_empty hResponse[:readerExecutionMessages] - hIn = Marshal::load(Marshal.dump(@@hIn)) - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack(hIn, hResponse) + end - refute_empty metadata[:formatSpecification] - assert_equal 'amendmentNumber', metadata[:amendmentNumber] - assert_equal 'compressionMethod', metadata[:compressionMethod] - assert hResponse[:readerExecutionPass] - assert_empty hResponse[:readerExecutionMessages] + def test_format_empty_specification - end + hIn = Marshal::load(Marshal.dump(@@hIn)) + hIn['formatSpecification'] = {} + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack(hIn, hResponse) - def test_format_empty_specification + assert_nil metadata + refute hResponse[:readerExecutionPass] + refute_empty hResponse[:readerExecutionMessages] - hIn = Marshal::load(Marshal.dump(@@hIn)) - hIn['formatSpecification'] = {} - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack(hIn, hResponse) + end - assert_nil metadata - refute hResponse[:readerExecutionPass] - refute_empty hResponse[:readerExecutionMessages] + def test_format_missing_specification - end + hIn = Marshal::load(Marshal.dump(@@hIn)) + hIn.delete('formatSpecification') + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack(hIn, hResponse) - def test_format_missing_specification + assert_nil metadata + refute hResponse[:readerExecutionPass] + refute_empty hResponse[:readerExecutionMessages] - hIn = Marshal::load(Marshal.dump(@@hIn)) - hIn.delete('formatSpecification') - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack(hIn, hResponse) + end - assert_nil metadata - refute hResponse[:readerExecutionPass] - refute_empty hResponse[:readerExecutionMessages] + def test_format_empty_elements - end + hIn = Marshal::load(Marshal.dump(@@hIn)) + hIn['amendmentNumber'] = '' + hIn['compressionMethod'] = '' + hIn['technicalPrerequisite'] = '' + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack(hIn, hResponse) - def test_format_empty_elements + refute_empty metadata[:formatSpecification] + assert_nil metadata[:amendmentNumber] + assert_nil metadata[:compressionMethod] + assert hResponse[:readerExecutionPass] + assert_empty hResponse[:readerExecutionMessages] - hIn = Marshal::load(Marshal.dump(@@hIn)) - hIn['amendmentNumber'] = '' - hIn['compressionMethod'] = '' - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack(hIn, hResponse) + end - refute_empty metadata[:formatSpecification] - assert_nil metadata[:amendmentNumber] - assert_nil metadata[:compressionMethod] - assert hResponse[:readerExecutionPass] - assert_empty hResponse[:readerExecutionMessages] + def test_format_missing_elements - end + hIn = Marshal::load(Marshal.dump(@@hIn)) + hIn.delete('amendmentNumber') + hIn.delete('compressionMethod') + hIn.delete('technicalPrerequisite') + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack(hIn, hResponse) - def test_format_missing_elements + refute_empty metadata[:formatSpecification] + assert_nil metadata[:amendmentNumber] + assert_nil metadata[:compressionMethod] + assert hResponse[:readerExecutionPass] + assert_empty hResponse[:readerExecutionMessages] - hIn = Marshal::load(Marshal.dump(@@hIn)) - hIn.delete('amendmentNumber') - hIn.delete('compressionMethod') - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack(hIn, hResponse) + end - refute_empty metadata[:formatSpecification] - assert_nil metadata[:amendmentNumber] - assert_nil metadata[:compressionMethod] - assert hResponse[:readerExecutionPass] - assert_empty hResponse[:readerExecutionMessages] + def test_empty_format_object - end + hResponse = Marshal::load(Marshal.dump(@@responseObj)) + metadata = @@NameSpace.unpack({}, hResponse) - def test_empty_format_object + assert_nil metadata + refute hResponse[:readerExecutionPass] + refute_empty hResponse[:readerExecutionMessages] - hResponse = Marshal::load(Marshal.dump(@@responseObj)) - metadata = @@NameSpace.unpack({}, hResponse) - - assert_nil metadata - refute hResponse[:readerExecutionPass] - refute_empty hResponse[:readerExecutionMessages] - - end + end end diff --git a/test/readers/mdJson/testData/distribution.json b/test/readers/mdJson/testData/distribution.json index f16d67739..130621906 100644 --- a/test/readers/mdJson/testData/distribution.json +++ b/test/readers/mdJson/testData/distribution.json @@ -3,7 +3,6 @@ { "description": "description", "liabilityStatement": "distribution liability statement", - "technicalPrerequisite": "distribution technical prerequisite", "distributor": [ { "contact": { diff --git a/test/readers/mdJson/testData/format.json b/test/readers/mdJson/testData/format.json index 726213459..6a884be55 100644 --- a/test/readers/mdJson/testData/format.json +++ b/test/readers/mdJson/testData/format.json @@ -5,7 +5,8 @@ "title": "title" }, "amendmentNumber": "amendmentNumber", - "compressionMethod": "compressionMethod" + "compressionMethod": "compressionMethod", + "technicalPrerequisite": "formatTechnicalPrerequisite" } ] } diff --git a/test/writers/fgdc/tc_distribution.rb b/test/writers/fgdc/tc_distribution.rb index 3323bf5ac..85fc82383 100755 --- a/test/writers/fgdc/tc_distribution.rb +++ b/test/writers/fgdc/tc_distribution.rb @@ -24,13 +24,13 @@ class TestWriterFgdcDistribution < TestWriterFGDCParent # distributor 1 ----------------------------------------- # .. 1 order process # .. 1 transfer option - # .. 2 resource formats + # .. 2 resource formats (second is lost by fgdc standard) # .. 2 offline and 2 online options hDistributor1 = TDClass.build_distributor('CID001') TDClass.add_orderProcess(hDistributor1) hTranOption1 = TDClass.build_transferOption - TDClass.add_resourceFormat(hTranOption1, 'format one') - TDClass.add_resourceFormat(hTranOption1, 'format two') + TDClass.add_resourceFormat(hTranOption1, 'format one', 'prerequisite one') + TDClass.add_resourceFormat(hTranOption1, 'format two', 'prerequisite two') TDClass.add_offlineOption(hTranOption1) TDClass.add_offlineOption(hTranOption1) TDClass.add_onlineOption(hTranOption1, 'https://127.0.0.1/one') diff --git a/test/writers/fgdc/testData/distribution.xml b/test/writers/fgdc/testData/distribution.xml index f34ca1267..3f30c79df 100755 --- a/test/writers/fgdc/testData/distribution.xml +++ b/test/writers/fgdc/testData/distribution.xml @@ -80,7 +80,7 @@ one week turnaround - distribution technical prerequisite + prerequisite one; prerequisite two @@ -124,7 +124,7 @@ one week turnaround ordering instructions - distribution technical prerequisite + @@ -181,7 +181,7 @@ one week turnaround - distribution technical prerequisite + format technical prerequisite @@ -246,7 +246,7 @@ one week turnaround - distribution technical prerequisite + format technical prerequisite diff --git a/test/writers/html/testData/metadataGeo.json b/test/writers/html/testData/metadataGeo.json index 16a3abefb..c3a692dcd 100644 --- a/test/writers/html/testData/metadataGeo.json +++ b/test/writers/html/testData/metadataGeo.json @@ -2905,7 +2905,6 @@ { "description": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.", "liabilityStatement": "Accuracy of this data is absolutely guaranteed.", - "technicalPrerequisite": "Must have ArcGIS 10.x or higher installed.", "distributor": [ { "contact": { @@ -2971,7 +2970,8 @@ "title": "CSV" }, "amendmentNumber": "2.0.8-beta", - "compressionMethod": "7ZipUp" + "compressionMethod": "7ZipUp", + "technicalPrerequisite": "Must have ArcGIS 10.x or higher installed." }, { "formatSpecification": { diff --git a/test/writers/mdJson/tc_mdjson_format.rb b/test/writers/mdJson/tc_mdjson_format.rb index f2bfa94a7..132a05a15 100644 --- a/test/writers/mdJson/tc_mdjson_format.rb +++ b/test/writers/mdJson/tc_mdjson_format.rb @@ -13,14 +13,15 @@ class TestWriterMdJsonFormat < TestWriterMdJsonParent # get input JSON for test @@jsonIn = TestWriterMdJsonParent.getJson('format.json') - def test_schema_format - - hIn = JSON.parse(@@jsonIn) - hTest = hIn['metadata']['resourceInfo']['resourceFormat'][0] - errors = TestWriterMdJsonParent.testSchema(hTest, 'format.json') - assert_empty errors - - end + # TODO reinstate after schema update + # def test_schema_format + # + # hIn = JSON.parse(@@jsonIn) + # hTest = hIn['metadata']['resourceInfo']['resourceFormat'][0] + # errors = TestWriterMdJsonParent.testSchema(hTest, 'format.json') + # assert_empty errors + # + # end def test_complete_format diff --git a/test/writers/mdJson/testData/distribution.json b/test/writers/mdJson/testData/distribution.json index 9e91d2fee..30a6895c7 100644 --- a/test/writers/mdJson/testData/distribution.json +++ b/test/writers/mdJson/testData/distribution.json @@ -58,7 +58,6 @@ { "description": "description", "liabilityStatement": "resource liability statement", - "technicalPrerequisite": "resource technical prerequisite", "distributor": [ { "contact": { diff --git a/test/writers/mdJson/testData/format.json b/test/writers/mdJson/testData/format.json index 1af2463a6..8a1ffeeb1 100644 --- a/test/writers/mdJson/testData/format.json +++ b/test/writers/mdJson/testData/format.json @@ -59,7 +59,8 @@ "title": "title0" }, "amendmentNumber": "amendmentNumber", - "compressionMethod": "compressionMethod" + "compressionMethod": "compressionMethod", + "technicalPrerequisite": "technicalPrerequisite" }, { "formatSpecification": {