diff --git a/Gemfile.lock b/Gemfile.lock index be931c90..7001bb95 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -71,9 +71,7 @@ GEM nokogiri (>= 1.12.0) minitest (5.23.1) mutex_m (0.2.0) - nokogiri (1.16.6-arm64-darwin) - racc (~> 1.4) - nokogiri (1.16.6-x86_64-darwin) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) parallel (1.25.1) parser (3.3.3.0) @@ -124,6 +122,7 @@ GEM PLATFORMS arm64-darwin-23 x86_64-darwin-23 + x86_64-linux DEPENDENCIES adiwg-mdtranslator! 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..3b1773a1 100644 --- a/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb +++ b/lib/adiwg/mdtranslator/readers/iso19115_2/modules/module_metadata.rb @@ -11,6 +11,8 @@ module Iso191152 module Metadata @@identificationInfoXPath = 'gmd:identificationInfo' @@dataIdentificationXPath = 'gmd:MD_DataIdentification' + @@fileIdentifierXPath = 'gmd:fileIdentifier//gco:CharacterString' + @@parentIdentifierXPath = 'gmd:parentIdentifier//gco:CharacterString' def self.unpack(xMetadata, hResponseObj) intMetadataClass = InternalMetadata.new intMetadata = intMetadataClass.newMetadata @@ -42,6 +44,12 @@ def self.unpack(xMetadata, hResponseObj) intMetadata[:resourceInfo] = ResourceInformation.unpack(xDataIdentification, hResponseObj) + fileIdentifier = xMetadata.xpath(@@fileIdentifierXPath)[0] + intMetadata[:fileIdentifier] = fileIdentifier.text unless fileIdentifier.nil? + + parentIdentifier = xMetadata.xpath(@@parentIdentifierXPath)[0] + intMetadata[:parentIdentifier] = parentIdentifier.text unless parentIdentifier.nil? + # :distributorInfo # :associatedResources # :additionalDocuments 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..a7f4f15f 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,20 @@ module Dcat_us module Identifier def self.build(intObj) + fileIdentifier = intObj.dig(:metadata, :fileIdentifier) + return fileIdentifier unless fileIdentifier.nil? + 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..26ff232e 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) + parentIdentifier = intObj.dig(:metadata, :parentIdentifier) + return parentIdentifier unless parentIdentifier.nil? + 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..b9f29e6a 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 @@ -92,5 +91,16 @@ def test_theme dcatusNS = ADIWG::Mdtranslator::Writers::Dcat_us::Theme res = dcatusNS.build(@@intMetadata) assert_equal('biota farming', res) + + def test_identifier + expected = 'ISO19115-2-ID-123456' + + assert_equal(expected, @@intMetadata[:metadata][:fileIdentifier]) + end + + def test_is_part_of + expected = 'ISO19115-2-ID-123456-parent' + + assert_equal(expected, @@intMetadata[:metadata][:parentIdentifier]) end end 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 +