From 28e17aff68d1a8cedc25698dd83e57e8809728a5 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 5 Jan 2024 13:59:27 +1100 Subject: [PATCH] Fix DFC context in spec to resolve product types The `dfc-b:hasType` value can only be parsed as object id if the context contains: ``` "dfc-b:hasType":{ "@type":"@id" }, ``` The standard context includes this and it's easier to use. Now that the URIs of product types are correctly resolved, we don't need to substitute the URI manually. Also dropped an old unneeded spec for backwards compatibility. --- .../connector/importer.rb | 7 +--- .../connector/importer_spec.rb | 35 ++----------------- .../spec/requests/supplied_products_spec.rb | 9 +---- swagger/dfc.yaml | 7 +--- 4 files changed, 5 insertions(+), 53 deletions(-) diff --git a/engines/dfc_provider/lib/data_food_consortium/connector/importer.rb b/engines/dfc_provider/lib/data_food_consortium/connector/importer.rb index 21da91b2a7..d668facf3b 100644 --- a/engines/dfc_provider/lib/data_food_consortium/connector/importer.rb +++ b/engines/dfc_provider/lib/data_food_consortium/connector/importer.rb @@ -120,18 +120,13 @@ module DataFoodConsortium end def skos_concept(object) - # Sometimes we get given a literal object with a value referring to skos concept - # ie "dfc-pt:drink" - return unless object.value.match(":") || object.uri? + return unless object.uri? id = object.value.sub( "http://static.datafoodconsortium.org/data/measures.rdf#", "dfc-m:" ).sub( "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/measures.rdf#", "dfc-m:" - ).sub( - "dfc-pt:", - "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/productTypes.rdf#" ) SKOSParser.concepts[id] diff --git a/engines/dfc_provider/spec/lib/data_food_consortium/connector/importer_spec.rb b/engines/dfc_provider/spec/lib/data_food_consortium/connector/importer_spec.rb index e292468818..465fadac45 100644 --- a/engines/dfc_provider/spec/lib/data_food_consortium/connector/importer_spec.rb +++ b/engines/dfc_provider/spec/lib/data_food_consortium/connector/importer_spec.rb @@ -42,33 +42,14 @@ describe DataFoodConsortium::Connector::Importer do } JSON end - let(:product_data_with_context) do - <<~JSON - { - "@context": { - "dfc-b": "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#", - "dfc-m": "http://static.datafoodconsortium.org/data/measures.rdf#", - "dfc-pt": "http://static.datafoodconsortium.org/data/productTypes.rdf#" - }, - "@id":"https://example.net/tomato", - "@type":"dfc-b:SuppliedProduct", - "dfc-b:name":"Tomato", - "dfc-b:description":"Awesome tomato", - "dfc-b:alcoholPercentage":0.0, - "dfc-b:lifetime":"", - "dfc-b:usageOrStorageCondition":"", - "dfc-b:totalTheoreticalStock":3, - "dfc-b:hasType": "dfc-pt:non-local-vegetable" - } - JSON - end let(:product_data_with_context_v1_8) do <<~JSON { "@context": { "dfc-b": "https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#", "dfc-m": "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/measures.rdf#", - "dfc-pt": "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/productTypes.rdf#" + "dfc-pt": "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/productTypes.rdf#", + "dfc-b:hasType":{"@type":"@id"} }, "@id":"https://example.net/tomato", "@type":"dfc-b:SuppliedProduct", @@ -130,18 +111,6 @@ describe DataFoodConsortium::Connector::Importer do expect(result.totalTheoreticalStock).to eq 3 end - it "imports an object with included context" do - result = connector.import(product_data_with_context) - - expect(result).to be_a DataFoodConsortium::Connector::SuppliedProduct - expect(result.semanticType).to eq "dfc-b:SuppliedProduct" - expect(result.semanticId).to eq "https://example.net/tomato" - expect(result.name).to eq "Tomato" - expect(result.description).to eq "Awesome tomato" - expect(result.productType).to eq non_local_vegetable - expect(result.totalTheoreticalStock).to eq 3 - end - it "imports an object with DFC v1.8 context" do result = connector.import(product_data_with_context_v1_8) diff --git a/engines/dfc_provider/spec/requests/supplied_products_spec.rb b/engines/dfc_provider/spec/requests/supplied_products_spec.rb index 7111939654..a920082e71 100644 --- a/engines/dfc_provider/spec/requests/supplied_products_spec.rb +++ b/engines/dfc_provider/spec/requests/supplied_products_spec.rb @@ -44,14 +44,7 @@ describe "SuppliedProducts", type: :request, swagger_doc: "dfc.yaml", rswag_auto parameter name: :supplied_product, in: :body, schema: { example: { - '@context': { - 'dfc-b': "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#", - 'dfc-m': "http://static.datafoodconsortium.org/data/measures.rdf#", - 'dfc-pt': "http://static.datafoodconsortium.org/data/productTypes.rdf#", - 'dfc-b:hasUnit': { - '@type': "@id" - }, - }, + '@context': "https://www.datafoodconsortium.org", '@id': "http://test.host/api/dfc/enterprises/6201/supplied_products/0", '@type': "dfc-b:SuppliedProduct", 'dfc-b:name': "Apple", diff --git a/swagger/dfc.yaml b/swagger/dfc.yaml index fc70f05a7a..b592fa742e 100644 --- a/swagger/dfc.yaml +++ b/swagger/dfc.yaml @@ -553,12 +553,7 @@ paths: application/json: schema: example: - "@context": - dfc-b: http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl# - dfc-m: http://static.datafoodconsortium.org/data/measures.rdf# - dfc-pt: http://static.datafoodconsortium.org/data/productTypes.rdf# - dfc-b:hasUnit: - "@type": "@id" + "@context": https://www.datafoodconsortium.org "@id": http://test.host/api/dfc/enterprises/6201/supplied_products/0 "@type": dfc-b:SuppliedProduct dfc-b:name: Apple