diff --git a/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb b/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb index 39c5dbb7..0e119791 100644 --- a/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb +++ b/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb @@ -3,6 +3,7 @@ require 'nokogiri' require 'adiwg/mdtranslator/internal/internal_metadata_obj' require_relative 'module_resource_info' +require_relative 'module_metadata_info' module ADIWG module Mdtranslator @@ -42,6 +43,8 @@ def self.unpack(xMetadata, hResponseObj) intMetadata[:resourceInfo] = ResourceInformation.unpack(xDataIdentification, hResponseObj) + intMetadata[:metadataInfo] = MetadataInformation.unpack(xMetadata, hResponseObj) + # :distributorInfo # :associatedResources # :additionalDocuments diff --git a/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata_info.rb b/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata_info.rb new file mode 100644 index 00000000..0b52953a --- /dev/null +++ b/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata_info.rb @@ -0,0 +1,34 @@ +require 'nokogiri' +require 'adiwg/mdtranslator/internal/internal_metadata_obj' + +module ADIWG + module Mdtranslator + module Readers + module Iso191152 + module MetadataInformation + @@fileIdentifierXPath = 'gmd:fileIdentifier//gco:CharacterString' + @@parentIdentifierXPath = 'gmd:parentIdentifier//gco:CharacterString' + def self.unpack(xMetadata, hResponseObj) + + # instance classes needed in script + intMetadataClass = InternalMetadata.new + hMetadataInfo = intMetadataClass.newMetadataInfo + + # + fileIdentifier = xMetadata.xpath(@@fileIdentifierXPath)[0] + hMetadataInfo[:metadataIdentifier][:identifier] = fileIdentifier.text unless fileIdentifier.nil? + + # + parentIdentifier = xMetadata.xpath(@@parentIdentifierXPath)[0] + hMetadataInfo[:parentMetadata][:identifier] = [{"identifier":parentIdentifier.text}] unless parentIdentifier.nil? + + return hMetadataInfo + + end + + end + + end + end + end +end diff --git a/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb b/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb index 040981a0..1d4dc779 100644 --- a/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb +++ b/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_identifier.rb @@ -5,19 +5,22 @@ module Dcat_us module Identifier def self.build(intObj) + # identifier from metadataInfo has priority + identifier = intObj.dig(:metadata, :metadataInfo, :metadataIdentifier, :identifier) + return identifier unless identifier.nil? + + # identifier from resourceInfo citation = intObj.dig(:metadata, :resourceInfo, :citation) identifiers = citation&.dig(:identifiers) onlineResources = citation&.dig(:onlineResources) uri = onlineResources.dig(0, :olResURI) - # return uri if it exists, or the first identifier found + # uri is supposed to be more descriptive than identifiers return uri unless uri.nil? return identifiers[0][:identifier] unless identifiers.nil? || identifiers.empty? nil end - - end end end diff --git a/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb b/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb index c0986fd0..a90d52d3 100644 --- a/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb +++ b/lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_is_part_of.rb @@ -7,6 +7,9 @@ module Dcat_us module IsPartOf def self.build(intObj) + parentIdentifiers = intObj.dig(:metadata, :metadataInfo, :parentMetadata, :identifier) + return parentIdentifiers[0][:identifier] unless parentIdentifiers.nil? || parentIdentifiers.empty? + associatedResources = intObj.dig(:metadata, :associatedResources) associatedResources.each do |resource| diff --git a/test/readers/iso19115_2/testData/iso19115-2.xml b/test/readers/iso19115_2/testData/iso19115-2.xml index 320780fe..d7046048 100644 --- a/test/readers/iso19115_2/testData/iso19115-2.xml +++ b/test/readers/iso19115_2/testData/iso19115-2.xml @@ -20,7 +20,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.isotc211.org/2005/gmi ftp://ftp.ncddc.noaa.gov/pub/Metadata/Online_ISO_Training/Intro_to_ISO/schemas/ISObio/schema.xsd"> - + + ISO19115-2-ID-123456 + + + ISO19115-2-ID-123456-parent + diff --git a/test/translator/tc_iso19115_2_to_dcatus.rb b/test/translator/tc_iso19115_2_to_dcatus.rb index ba17cfa6..886cfbf6 100644 --- a/test/translator/tc_iso19115_2_to_dcatus.rb +++ b/test/translator/tc_iso19115_2_to_dcatus.rb @@ -9,7 +9,6 @@ require 'adiwg/mdtranslator' require 'adiwg/mdtranslator/readers/iso19115_2/modules/module_iso19115_2' require 'adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_dcat_us' -require 'debug' # these tests are organized according to how data is processed in # the dcat_us writer lib/adiwg/mdtranslator/writers/dcat_us/sections/dcat_us_dcat_us.rb @@ -93,4 +92,18 @@ def test_theme res = dcatusNS.build(@@intMetadata) assert_equal('biota farming', res) end + + def test_identifier + dcatusNS = ADIWG::Mdtranslator::Writers::Dcat_us::Identifier + res = dcatusNS.build(@@intMetadata) + + assert_equal('ISO19115-2-ID-123456', res) + end + + def test_is_part_of + dcatusNS = ADIWG::Mdtranslator::Writers::Dcat_us::IsPartOf + res = dcatusNS.build(@@intMetadata) + + assert_equal('ISO19115-2-ID-123456-parent', res) + end end diff --git a/test/translator/tc_iso19115_3_to_dcatus.rb b/test/translator/tc_iso19115_3_to_dcatus.rb index e3a77a3a..1bdef777 100644 --- a/test/translator/tc_iso19115_3_to_dcatus.rb +++ b/test/translator/tc_iso19115_3_to_dcatus.rb @@ -133,7 +133,7 @@ def test_identifier_translate dcatusNS = ADIWG::Mdtranslator::Writers::Dcat_us::Identifier res = dcatusNS.build(@@intMetadata) - assert_equal('http://dx.doi.org/10.5066/F7DV1H10', res) + assert_equal('57d97341e4b090824ffb0e6f', res) end def test_distribution_translate diff --git a/test/translator/testData/iso19115-2.xml b/test/translator/testData/iso19115-2.xml index 320780fe..d7046048 100644 --- a/test/translator/testData/iso19115-2.xml +++ b/test/translator/testData/iso19115-2.xml @@ -20,7 +20,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.isotc211.org/2005/gmi ftp://ftp.ncddc.noaa.gov/pub/Metadata/Online_ISO_Training/Intro_to_ISO/schemas/ISObio/schema.xsd"> - + + ISO19115-2-ID-123456 + + + ISO19115-2-ID-123456-parent + diff --git a/test/translator/testData/iso19115-3-to-dcatus.json b/test/translator/testData/iso19115-3-to-dcatus.json index 81d3fb28..903d2b4b 100644 --- a/test/translator/testData/iso19115-3-to-dcatus.json +++ b/test/translator/testData/iso19115-3-to-dcatus.json @@ -1 +1 @@ -{"@type":"dcat:Dataset","title":"Spatial data: A large-scale database of modeled contemporary and future water temperature data for 10,774 Michigan, Minnesota and Wisconsin Lakes","description":"Climate change has been shown to influence lake temperatures globally. To better understand the diversity of lake responses to climate change and give managers tools to manage individual lakes, we modelled daily water temperature profiles for 10,774 lakes in Michigan, Minnesota and Wisconsin for contemporary (1979-2015) and future (2020-2040 and 2080-2100) time periods with climate models based on the Representative Concentration Pathway 8.5, the worst-case emission scenario.","keyword":["water","temperate lakes","reservoirs","modeling","climate change","thermal profiles","environment","inlandWaters","007","012","Illinois","Indiana","Iowa","Michigan","Minnesota","South Dakota","Wisconsin","United States","US","Illinois","IL","Indiana","IN","Iowa","IA","Michigan","MI","Minnesota","MN","South Dakota","SD","Wisconsin","WI","Northeast CSC","Rivers, Streams and Lakes","Fish","Climate and Ecosystem Modeling"],"modified":"2017-04-06T20:04:58+00:00","publisher":{"@type":"org:Organization","name":"U.S. Geological Survey - ScienceBase"},"contactPoint":{"@type":"vcard:Contact","fn":"Robert G Test","hasEmail":"email@address.com"},"identifier":"http://dx.doi.org/10.5066/F7DV1H10","accessLevel":"non-public","bureauCode":[],"programCode":[],"distribution":[{"@type":"dcat:Distribution","description":"distribution description","downloadURL":"https://distributiontransfer.com/onlineresource.png","mediaType":"format specification","title":"name test 123"}],"license":"MD ID common constraint licence title","rights":"this is a releasability statement. it's important topSecret superSecret","spatial":"-83.0573307815185,41.7553570685206,-96.8589114267623,48.7289513243629","temporal":"1980-01-01T00:00:00+00:00/1995-12-31T00:00:00+00:00","issued":"2016-09-14T15:56:49+00:00","accrualPeriodicity":"R/P2M or R/P0.5M","language":["eng","test_lang_code","test_lang_code2"],"theme":"United States US Illinois IL Indiana IN Iowa IA Michigan MI Minnesota MN South Dakota SD Wisconsin WI","references":"http://resource.associated.org/10/F7DV1H10,http://as0d1028h3.associated.org/10/F7DV1H10,http://dx.doi.org/10.5066/F7DV1H10,http://additional.doc/10/F7DV1H10,http://additional.doc/56/data.json","landingPage":"http://dx.doi.org/10.5066/F7DV1H10","isPartOf":"http://resource.associated.org/10/F7DV1H10","systemOfRecords":"http://as0d1028h3.associated.org/10/F7DV1H10","primaryITInvestmentUII":"57d97341e4b090824ffb0e6f","describedBy":"http://test.something.org/10/F7DV1H10","describedByType":"https"} \ No newline at end of file +{"@type":"dcat:Dataset","title":"Spatial data: A large-scale database of modeled contemporary and future water temperature data for 10,774 Michigan, Minnesota and Wisconsin Lakes","description":"Climate change has been shown to influence lake temperatures globally. To better understand the diversity of lake responses to climate change and give managers tools to manage individual lakes, we modelled daily water temperature profiles for 10,774 lakes in Michigan, Minnesota and Wisconsin for contemporary (1979-2015) and future (2020-2040 and 2080-2100) time periods with climate models based on the Representative Concentration Pathway 8.5, the worst-case emission scenario.","keyword":["water","temperate lakes","reservoirs","modeling","climate change","thermal profiles","environment","inlandWaters","007","012","Illinois","Indiana","Iowa","Michigan","Minnesota","South Dakota","Wisconsin","United States","US","Illinois","IL","Indiana","IN","Iowa","IA","Michigan","MI","Minnesota","MN","South Dakota","SD","Wisconsin","WI","Northeast CSC","Rivers, Streams and Lakes","Fish","Climate and Ecosystem Modeling"],"modified":"2017-04-06T20:04:58+00:00","publisher":{"@type":"org:Organization","name":"U.S. Geological Survey - ScienceBase"},"contactPoint":{"@type":"vcard:Contact","fn":"Robert G Test","hasEmail":"email@address.com"},"identifier":"57d97341e4b090824ffb0e6f","accessLevel":"non-public","bureauCode":[],"programCode":[],"distribution":[{"@type":"dcat:Distribution","description":"distribution description","downloadURL":"https://distributiontransfer.com/onlineresource.png","mediaType":"format specification","title":"name test 123"}],"license":"MD ID common constraint licence title","rights":"this is a releasability statement. it's important topSecret superSecret","spatial":"-83.0573307815185,41.7553570685206,-96.8589114267623,48.7289513243629","temporal":"1980-01-01T00:00:00+00:00/1995-12-31T00:00:00+00:00","issued":"2016-09-14T15:56:49+00:00","accrualPeriodicity":"R/P2M or R/P0.5M","language":["eng","test_lang_code","test_lang_code2"],"theme":"United States US Illinois IL Indiana IN Iowa IA Michigan MI Minnesota MN South Dakota SD Wisconsin WI","references":"http://resource.associated.org/10/F7DV1H10,http://as0d1028h3.associated.org/10/F7DV1H10,http://dx.doi.org/10.5066/F7DV1H10,http://additional.doc/10/F7DV1H10,http://additional.doc/56/data.json","landingPage":"http://dx.doi.org/10.5066/F7DV1H10","isPartOf":"http://resource.associated.org/10/F7DV1H10","systemOfRecords":"http://as0d1028h3.associated.org/10/F7DV1H10","primaryITInvestmentUII":"57d97341e4b090824ffb0e6f","describedBy":"http://test.something.org/10/F7DV1H10","describedByType":"https"} \ No newline at end of file diff --git a/test/writers/dcat_us/tc_dcat_us_identifier.rb b/test/writers/dcat_us/tc_dcat_us_identifier.rb index 97e4eaed..e5cbf50d 100644 --- a/test/writers/dcat_us/tc_dcat_us_identifier.rb +++ b/test/writers/dcat_us/tc_dcat_us_identifier.rb @@ -8,6 +8,7 @@ class TestWriterDcatUsIdentifier < TestWriterDcatUsParent # get input JSON for test @@jsonIn = TestWriterDcatUsParent.getJson('identifier.json') @@jsonIn2 = TestWriterDcatUsParent.getJson('identifier2.json') + @@jsonIn3 = TestWriterDcatUsParent.getJson('identifier3.json') def test_identifier_namespace metadata = ADIWG::Mdtranslator.translate( @@ -31,4 +32,15 @@ def test_identifier_url assert_equal 'http://myOnlineResource-doi.com', got end + def test_identifier_metadataInfo + metadata = ADIWG::Mdtranslator.translate( + file: @@jsonIn3, reader: 'mdJson', validate: 'normal', + writer: 'dcat_us', showAllTags: false) + + hJsonOut = JSON.parse(metadata[:writerOutput]) + got = hJsonOut['identifier'] + + assert_equal 'myMetadataIdentifierID', got + end + end diff --git a/test/writers/dcat_us/testData/identifier.json b/test/writers/dcat_us/testData/identifier.json index fff11049..2a9d6e68 100644 --- a/test/writers/dcat_us/testData/identifier.json +++ b/test/writers/dcat_us/testData/identifier.json @@ -12,11 +12,6 @@ ], "metadata": { "metadataInfo": { - "metadataIdentifier": { - "identifier": "myMetadataIdentifierID", - "namespace": "gov.sciencebase.catalog", - "description": "metadata identifier" - }, "metadataContact": [ { "role": "metadataContact", diff --git a/test/writers/dcat_us/testData/identifier2.json b/test/writers/dcat_us/testData/identifier2.json index 72df8d0e..fbd7a741 100644 --- a/test/writers/dcat_us/testData/identifier2.json +++ b/test/writers/dcat_us/testData/identifier2.json @@ -12,11 +12,6 @@ ], "metadata": { "metadataInfo": { - "metadataIdentifier": { - "identifier": "myMetadataIdentifierID", - "namespace": "gov.sciencebase.catalog", - "description": "metadata identifier" - }, "metadataContact": [ { "role": "metadataContact", diff --git a/test/writers/dcat_us/testData/identifier3.json b/test/writers/dcat_us/testData/identifier3.json new file mode 100644 index 00000000..7da35a36 --- /dev/null +++ b/test/writers/dcat_us/testData/identifier3.json @@ -0,0 +1,89 @@ +{ + "schema": { + "name": "mdJson", + "version": "2.0.0" + }, + "contact": [ + { + "contactId": "CID001", + "isOrganization": false, + "name": "Person 001" + } + ], + "metadata": { + "metadataInfo": { + "metadataIdentifier": { + "identifier": "myMetadataIdentifierID", + "namespace": "gov.sciencebase.catalog", + "description": "metadata identifier" + }, + "metadataContact": [ + { + "role": "metadataContact", + "party": [ + { + "contactId": "CID001" + } + ] + } + ] + }, + "resourceInfo": { + "resourceType": [ + { + "type": "type", + "name": "name" + } + ], + "citation": { + "title": "myCitationTitle", + "identifier": [ + { + "identifier": "myDoiIdentifier0", + "namespace": "ISBN", + "description": "myDescription0" + }, + { + "identifier": "myIdentifier1", + "namespace": "mySchema1", + "description": "myDescription1" + }, + { + "identifier": "myIdentifier1", + "namespace": "mySchema1", + "description": "myDescription1" + }, + { + "identifier": "myIdentifier0", + "namespace": "mySchema0", + "description": "myDescription1" + } + ], + "onlineResource": [ + { + "uri": "http://myOnlineResource-doi.com" + } + ] + }, + "abstract": "myBody", + "status": [ + "status" + ], + "pointOfContact": [ + { + "role": "pointOfContact", + "party": [ + { + "contactId": "CID001" + } + ] + } + ], + "defaultResourceLocale": { + "language": "eng", + "country": "USA", + "characterSet": "UTF-8" + } + } + } +}