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..4f2a30c9 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,16 @@ def test_theme res = dcatusNS.build(@@intMetadata) assert_equal('biota farming', res) end + + 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 +