From b0a58d105a717815101531330a6f55fe42d3d97f Mon Sep 17 00:00:00 2001
From: Mathieu Dartigues <mathieu@dartic.fr>
Date: Wed, 27 Nov 2024 17:51:53 +0100
Subject: [PATCH] Fixes for dataset descriptor * add provenance in sparql calls
 * hide fields not set in the dataset

---
 .../OcDescriptorDataset.vue                   | 54 +++++++------------
 src/sparql/datasets.ts                        | 33 +++++++++++-
 2 files changed, 50 insertions(+), 37 deletions(-)

diff --git a/src/components/descriptors/OcDescriptorDataset/OcDescriptorDataset.vue b/src/components/descriptors/OcDescriptorDataset/OcDescriptorDataset.vue
index a0d91b5..02446d5 100644
--- a/src/components/descriptors/OcDescriptorDataset/OcDescriptorDataset.vue
+++ b/src/components/descriptors/OcDescriptorDataset/OcDescriptorDataset.vue
@@ -42,14 +42,14 @@
         </div>
       </AccordionContent>
     </AccordionPanel>
-    <AccordionPanel value="1">
+    <AccordionPanel value="1" v-if="props.dataset.provenance?.length > 0">
       <AccordionHeader>
         <h2 class="text-xl font-medium mb-2 text-black">
           {{ t('descriptors.dataset.quality.title') }}
         </h2>
       </AccordionHeader>
       <AccordionContent>
-        <div v-if="props.dataset.provenance" class="mb-4">
+        <div class="mb-4">
           <h3>{{ t('descriptors.dataset.quality.provenance') }}</h3>
           <div
             class="mb-4 border bg-white rounded-md p-2"
@@ -59,18 +59,6 @@
             {{ translateValue(provenance.label) }}
           </div>
         </div>
-        <div v-if="props.dataset.input" class="mb-4">
-          <h3>{{ t('descriptors.dataset.quality.input') }}</h3>
-          <div v-for="input in props.dataset.input" :key="input['@id']">
-            {{ input.label }}
-          </div>
-        </div>
-        <div v-if="props.dataset.other" class="mb-4">
-          <h3>{{ t('descriptors.dataset.quality.other') }}</h3>
-          <div v-for="other in props.dataset.other" :key="other['@id']">
-            {{ other.label }}
-          </div>
-        </div>
       </AccordionContent>
     </AccordionPanel>
     <AccordionPanel value="2">
@@ -100,31 +88,36 @@
                 {{ globalTranslateValue(datasetMetadata.publisher.label) }}
               </td>
               <td class="py-2 px-1">
-                <a :href="dataset.publisher?.mbox" target="_blank">
-                  <i class="fa-regular fa-envelope mr-1"></i>
+                <template v-if="dataset.publisher?.mbox">
+                  <a :href="dataset.publisher?.mbox as string" target="_blank">
+                    <i class="fa-regular fa-envelope mr-1"></i>
+                    {{ translateValue(dataset.publisher?.name) }}
+                  </a>
+                </template>
+                <template v-else>
                   {{ translateValue(dataset.publisher?.name) }}
-                </a>
+                </template>
               </td>
             </tr>
-            <tr class="border">
+            <tr class="border" v-if="dataset.issued">
               <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
                 <OcFairBadge size="small" :badges="datasetMetadata.issued.fair" :popover="true" />
                 {{ globalTranslateValue(datasetMetadata.issued.label) }}
               </td>
               <td class="py-2 px-1">
-                {{ dataset.issued?.toLocaleDateString(locale) }}
+                {{ dataset.issued?.toLocaleDateString?.(locale) }}
               </td>
             </tr>
-            <tr class="border">
+            <tr class="border" v-if="dataset.modified">
               <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
                 <OcFairBadge size="small" :badges="datasetMetadata.modified.fair" :popover="true" />
                 {{ globalTranslateValue(datasetMetadata.modified.label) }}
               </td>
               <td class="py-2 px-1">
-                {{ dataset.modified?.toLocaleDateString(locale) }}
+                {{ dataset.modified?.toLocaleDateString?.(locale) }}
               </td>
             </tr>
-            <tr class="border">
+            <tr class="border" v-if="dataset.conformsTo">
               <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
                 <OcFairBadge
                   size="small"
@@ -134,19 +127,19 @@
                 {{ globalTranslateValue(datasetMetadata.conformsTo.label) }}
               </td>
               <td class="py-2 px-1">
-                {{ dataset.conformsTo }}
+                {{ translateValue(dataset.conformsTo?.prefLabel) }}
               </td>
             </tr>
-            <tr class="border">
+            <tr class="border" v-if="dataset.license">
               <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
                 <OcFairBadge size="small" :badges="datasetMetadata.license.fair" :popover="true" />
                 {{ globalTranslateValue(datasetMetadata.license.label) }}
               </td>
               <td class="py-2 px-1">
-                {{ dataset.license }}
+                {{ translateValue(dataset.license?.prefLabel) }}
               </td>
             </tr>
-            <tr class="border">
+            <tr class="border" v-if="dataset.landingPage">
               <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
                 <OcFairBadge
                   size="small"
@@ -159,15 +152,6 @@
                 {{ dataset.landingPage }}
               </td>
             </tr>
-            <tr class="border">
-              <td class="font-medium py-2 px-1 border-r flex w-[16rem] items-center">
-                <OcFairBadge size="small" :badges="datasetMetadata.isPartOf.fair" :popover="true" />
-                {{ globalTranslateValue(datasetMetadata.isPartOf.label) }}
-              </td>
-              <td class="py-2 px-1">
-                {{ dataset.isPartOf }}
-              </td>
-            </tr>
           </tbody>
         </table>
       </AccordionContent>
diff --git a/src/sparql/datasets.ts b/src/sparql/datasets.ts
index cf925b6..5ef73ee 100644
--- a/src/sparql/datasets.ts
+++ b/src/sparql/datasets.ts
@@ -7,7 +7,8 @@ import type {
   OcOrganization,
   OcDatasetSummary,
   OcAdmsIdentifier,
-  OcGeometry
+  OcGeometry,
+  OcProvenance
 } from '@/declarations'
 import {
   defaultLocalizedPropFormatter,
@@ -261,6 +262,32 @@ export async function getDataset(identifier: string, auth?: Credentials): Promis
     }
   )
 
+  /**
+   * Provenance
+   */
+  const datasetProvenancePromise = executeSparqlConstruct<OcProvenance>(
+    `
+    CONSTRUCT {
+      ?provenance ?p ?o.
+    }
+    WHERE {
+      <${datasetUri}> dct:provenance ?provenance.
+      OPTIONAL {
+        ?provenance ?p ?o.
+      }
+    }
+  `,
+    {
+      auth,
+      context: {
+        label: {
+          '@id': 'http://www.w3.org/2000/01/rdf-schema#label',
+          '@container': '@language'
+        }
+      }
+    }
+  )
+
   /**
    * Creators
    */
@@ -637,7 +664,8 @@ export async function getDataset(identifier: string, auth?: Credentials): Promis
     datasetAccrualPeriodicityPromise, // 11
     datasetLicensePromise, // 12
     datasetConformsToPromise, // 13
-    datasetSpatialGeometryPromise // 14
+    datasetSpatialGeometryPromise, // 14
+    datasetProvenancePromise // 15
   ])
 
   dataset.temporal = datasetResponse[0].map<[Date, Date]>((temporal) => [
@@ -657,6 +685,7 @@ export async function getDataset(identifier: string, auth?: Credentials): Promis
   dataset.accrualPeriodicity = datasetResponse[11][0]
   dataset.license = datasetResponse[12][0]
   dataset.conformsTo = datasetResponse[13][0]
+  dataset.provenance = datasetResponse[15]
 
   // Format Dates
   // dataset.issued = dataset.issued ? new Date(Date.parse(dataset.issued)) : dataset.issued
-- 
GitLab