From 1adfb5463a5fbd474ac072aed6053980f0e43339 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 25 May 2023 12:49:05 +1000 Subject: [PATCH] Import DFC measures --- .../connector/importer.rb | 13 +++++++++- .../connector/skos_parser.rb | 24 +++++++++++++++++++ .../connector/importer_spec.rb | 5 +--- 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 lib/data_food_consortium/connector/skos_parser.rb diff --git a/lib/data_food_consortium/connector/importer.rb b/lib/data_food_consortium/connector/importer.rb index 1ac146873a..606e302835 100644 --- a/lib/data_food_consortium/connector/importer.rb +++ b/lib/data_food_consortium/connector/importer.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require_relative "skos_parser" + module DataFoodConsortium module Connector class Importer @@ -88,7 +90,16 @@ module DataFoodConsortium end def resolve_object(object) - @subjects[object] || object.object + @subjects[object] || skos_concept(object) || object.object + end + + def skos_concept(object) + return unless object.uri? + + id = object.value.sub( + "http://static.datafoodconsortium.org/data/measures.rdf#", "dfc-m:" + ) + SKOSParser.concepts[id] end def guess_setter_name(predicate) diff --git a/lib/data_food_consortium/connector/skos_parser.rb b/lib/data_food_consortium/connector/skos_parser.rb new file mode 100644 index 0000000000..7e3e02fcfa --- /dev/null +++ b/lib/data_food_consortium/connector/skos_parser.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +# Overriding the current implementation to store all parsed concepts for +# lookup later. Otherwise the importer can't associate these. +# This is just a workaround and needs to be solved upstream. +module DataFoodConsortium + module Connector + class SKOSParser + def self.concepts + @concepts ||= {} + end + + protected + + def createSKOSConcept(element) # rubocop:disable Naming/MethodName + concept = DataFoodConsortium::Connector::SKOSConcept.new + concept.semanticId = element.id + concept.semanticType = element.type + self.class.concepts[element.id] = concept + concept + end + end + end +end diff --git a/spec/lib/data_food_consortium/connector/importer_spec.rb b/spec/lib/data_food_consortium/connector/importer_spec.rb index b04a3237fb..3ac97a7f1f 100644 --- a/spec/lib/data_food_consortium/connector/importer_spec.rb +++ b/spec/lib/data_food_consortium/connector/importer_spec.rb @@ -79,10 +79,7 @@ describe DataFoodConsortium::Connector::Importer, vcr: true do expect(tomato.name).to eq "Tomato" expect(tomato.quantity).to eq items expect(items.value).to eq 5 - expect(items.unit[:fragment]).to eq "Piece" - - # Pending matching concepts: - #expect(items.unit).to eq piece + expect(items.unit).to eq piece end it "imports properties with lists" do