From 1b225fb4a5f0765db0a9830b2a4157c2002ca3ec Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 2 Oct 2024 11:59:00 +0200 Subject: [PATCH 1/8] Taxonomic schema revisions Taxonomic schema revisions --- src/sources/dataModel/taxonomic-service.json | 382 +++++++++++++++---- 1 file changed, 312 insertions(+), 70 deletions(-) diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index 3ba6723..3f9bd65 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -31,9 +31,9 @@ "2023-07-10T12:02:00.000Z" ] }, - "schema:dateModified": { + "schema:datePublished": { "type": "string", - "description": "The date on which the Taxonomic Service was most recently modified or when the item's entry was modified within a DataFeed.", + "description": "Date the service was published", "format": "date-time", "examples": [ "2023-07-10T12:02:00.000Z" @@ -51,27 +51,141 @@ "schema:license": { "type": "string", "description": "A license document that applies to this content, typically indicated by URL", + "enum": [ + "https://spdx.org/licenses/CC-BY-1.0.html", + "https://spdx.org/licenses/CC-BY-2.0.html", + "https://spdx.org/licenses/CC-BY-2.5.html", + "https://spdx.org/licenses/CC-BY-2.5-AU.html", + "https://spdx.org/licenses/CC-BY-3.0.html", + "https://spdx.org/licenses/CC-BY-3.0-AT.html", + "https://spdx.org/licenses/CC-BY-3.0-AU.html", + "https://spdx.org/licenses/CC-BY-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-3.0-IGO.html", + "https://spdx.org/licenses/CC-BY-3.0-NL.html", + "https://spdx.org/licenses/CC-BY-3.0-US.html", + "https://spdx.org/licenses/CC-BY-4.0.html", + "https://spdx.org/licenses/CC-BY-NC-1.0.html", + "https://spdx.org/licenses/CC-BY-NC-2.0.html", + "https://spdx.org/licenses/CC-BY-NC-2.5.html", + "https://spdx.org/licenses/CC-BY-NC-3.0.html", + "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-NC-4.0.html", + "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", + "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", + "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", + "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", + "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", + "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", + "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", + "https://spdx.org/licenses/CC-BY-ND-1.0.html", + "https://spdx.org/licenses/CC-BY-ND-2.0.html", + "https://spdx.org/licenses/CC-BY-ND-2.5.html", + "https://spdx.org/licenses/CC-BY-ND-3.0.html", + "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-ND-4.0.html", + "https://spdx.org/licenses/CC-BY-SA-1.0.html", + "https://spdx.org/licenses/CC-BY-SA-2.0.html", + "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", + "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", + "https://spdx.org/licenses/CC-BY-SA-2.5.html", + "https://spdx.org/licenses/CC-BY-SA-3.0.html", + "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", + "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", + "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", + "https://spdx.org/licenses/CC-BY-SA-4.0.html", + "https://spdx.org/licenses/CC-PDDC.html", + "https://spdx.org/licenses/CC0-1.0.html", + "https://spdx.org/licenses/DL-DE-BY-2.0.html", + "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", + "https://www.govdata.de/dl-de/by-1-0", + "https://www.govdata.de/dl-de/by-nc-1-0", + "https://spdx.org/licenses/EUPL-1.0.html", + "https://spdx.org/licenses/EPL-2.0.html", + "https://spdx.org/licenses/EUPL-1.2.html", + "https://www.etalab.gouv.fr/licence-ouverte-open-licence/", + "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.1-only.html", + "https://spdx.org/licenses/GFDL-1.1-or-later.html", + "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.2-only.html", + "https://spdx.org/licenses/GFDL-1.2-or-later.html", + "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", + "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", + "https://spdx.org/licenses/GFDL-1.3-only.html", + "https://spdx.org/licenses/GFDL-1.3-or-later.html", + "https://data.gov.hr/open-licence-republic-croatia", + "https://www.dati.gov.it/iodl/2.0/", + "https://spdx.org/licenses/NLOD-1.0.html", + "https://spdx.org/licenses/NLOD-2.0.html", + "https://spdx.org/licenses/ODC-By-1.0.html", + "https://spdx.org/licenses/ODbL-1.0.html", + "https://spdx.org/licenses/PDDL-1.0.html", + "https://spdx.org/licenses/OGL-Canada-2.0.html", + "https://spdx.org/licenses/OGL-UK-1.0.html", + "https://spdx.org/licenses/OGL-UK-2.0.html", + "https://spdx.org/licenses/OGL-UK-3.0.html", + "https://data.gov.ro/pages/licence" + ], "examples": [ - "https://creativecommons.org/public-domain/cc0/" + "https://spdx.org/licenses/CC-BY-1.0.html" ] }, "schema:availableLanguage": { "type": "array", "description": "A language someone may use with or at the item, service or place. Please use one of the language codes from the IETF BCP 47 standard.", + "enum": [ + "bg", + "hr", + "cs", + "da", + "lb", + "nl", + "en", + "et", + "fi", + "fr", + "de", + "el", + "hu", + "ga", + "it", + "lv", + "lt", + "mt", + "pl", + "pt", + "ro", + "ru", + "sk", + "es", + "sv", + "tk", + "uk" + ], "items": { "type": "string" } }, - "schema:version": { - "type": "string", - "description": "The version of the Service embodied by a specified resource.", - "examples": [ - "1", - "1.1", - "2.0.1" - ] - }, "ods:topicDiscipline": { + "type": "array", "description": "The topic discipline relevant to the taxonomic range of the service", "enum": [ "Anthropology", @@ -83,24 +197,38 @@ "Other Biodiversity", "Unclassified" ], - "examples": [ - "Botany" - ] + "items": { + "type": "string" + } }, "schema:taxonomicRange": { "type": "array", - "description": "The taxonomic grouping of the organism.", + "description": "The taxonomic grouping of the organism, e.g. 'No specific range' or 'Agromyzidae, Braconidae'", "items": { "type": "string" } }, "schema:geographicArea": { "type": "string", - "description": "The geographic area associated with the service.", + "description": "The geographic area associated with the service, e.g. World, Palearctic, South-East Europe, Mediterranean", "examples": [ "Annen" ] }, + "schema:url": { + "type": "string", + "description": "URL of the item that leads to the resource of the service", + "examples": [ + "cetaf.org" + ] + }, + "schema:about": { + "type": "string", + "description": "The subject matter of the service including a summary of the Resource features updated from the previous version.", + "examples": [ + "A piece of software. Latest changes: upgrade of user interface, correction of minor bugs." + ] + }, "schema:documentation": { "type": "string", "description": "URL to further documentation describing the service in more detail.", @@ -125,26 +253,81 @@ "This service is rejected, because..." ] }, + "additionalProperty": { + "type": "array", + "description": "Generic property for additional properties not covered by schema.org", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "The type of the additional property", + "const": "ods:PropertyValue" + }, + "name": { + "type": "string", + "description": "The name of the additional property", + "examples": [ + "updateFrequency", + "organismGroup", + "availableOnAppStore", + "paymentModel" + ] + }, + "description": { + "type": "string", + "description": "A description of the additional property", + "examples": [ + "Indicator if the service is frequently updated or not, 'frequently updated' if the resource is updated multiple times a year.", + "Common names for groups of organisms.", + "Application is available on the following app stores, relevant for apps.", + "URL to webpage with the supported payment models and restrictions that apply to the Resource." + ] + }, + "value": { + "type": [ + "string", + "array" + ], + "description": "The value of the additional property", + "examples": [ + "yes", + [ + "Bees" + ], + [ + "Google Play Store" + ], + "Free" + ] + } + } + } + }, "schema:Service": { "type": "object", "description": "A service provided by an organization, e.g. delivery service, print services, etc.", "properties": { "schema:serviceType": { - "type": "string", + "type": "array", "description": "A type that defines the kind of taxonomic service", - "enum": [ - "AITrainingDataset", - "communityGroup", - "crowdSourcing", - "dataTool", - "e-LearningService", - "factsheet", - "identification", - "inventory", - "referenceCollection", - "specimenDatasetNotInGBIF", - "website" - ] + "items": { + "type": "string", + "enum": [ + "AITrainingDataset", + "communityGroup", + "crowdSourcing", + "dataTool", + "e-LearningService", + "factsheet", + "identification tool", + "knowledge website", + "mobile app", + "service inventory", + "referenceCollection", + "specimenDatasetNotInGBIF" + ] + } }, "schema:name": { "type": "string", @@ -184,7 +367,7 @@ }, "schema:termsOfService": { "type": "string", - "description": "Human-readable terms of service documentation.", + "description": "URL pointing to Terms of Service, Terms of Use or Terms and Conditions, the legal agreements between a service provider and a person who wants to use that service.", "examples": [ "http://service-name.service-provid-er.eu/TermsOfUse" ] @@ -210,14 +393,7 @@ }, "schema:url": { "type": "string", - "description": "URL of the item that leads to the point of contact", - "examples": [ - "cetaf.org" - ] - }, - "schema:sameAs": { - "type": "string", - "description": "URL of a reference Web page that unambiguously indicates the item's identity. E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website.", + "description": "URL to a contact webpage or contact form for the resource.", "examples": [ "cetaf.org" ] @@ -225,19 +401,72 @@ }, "additionalProperties": false }, - "schema:Maintainer": { + "schema:Author": { "type": "array", - "description": "An array of maintainers of a Dataset, software package (SoftwareApplication), or other Project. A maintainer is a Person or Organization that manages contributions to, and/or publication of, some (typically complex) artefact.", + "description": "An array of authors of this service.", "items": { "type": "object", "properties": { "schema:identifier": { + "@id": "orcid", + "@type": "PropertyValue", + "propertyID": "https://registry.identifiers.org/registry/orcid", "type": "string", - "description": "A unique identifier to identify the maintainer; ORCID or Wikidata identifiers are valid", + "description": "A unique identifier to identify the author; ORCID identifiers are valid", "examples": [ - "https://orcid.org/0000-0000-0000-0000" + "https://api.github.com/users/username" ] }, + "schema:affiliation": { + "type": "object", + "properties": { + "schema:identifier": { + "type": "string", + "description": "A unique identifier to identify the author's affiliation; ROR identifiers are valid", + "examples": [ + "https://ror.org/0566bfb96" + ] + }, + "schema:name": { + "type": "string", + "description": "Full name of the author's affiliated orgnisation", + "examples": [ + "Naturalis Biodiversity Center" + ] + } + } + } + } + } + }, + "schema:Maintainer": { + "type": "array", + "description": "An array of maintainers of a Dataset, software package (SoftwareApplication), or other Project. A maintainer is a Person or Organization that manages contributions to, and/or publication of, some (typically complex) artefact.", + "items": { + "type": "object", + "properties": { + "schema:identifier": [ + { + "@id": "github", + "@type": "PropertyValue", + "propertyID": "https://registry.identifiers.org/registry/github", + "type": "string", + "description": "A unique identifier to identify the maintainer; GitHub identifiers are valid", + "examples": [ + "https://api.github.com/users/username" + ] + }, + { + "@id": "orcid", + "@type": "PropertyValue", + "propertyID": "https://registry.identifiers.org/registry/orcid", + "type": "string", + "description": "A unique identifier to identify the maintainer; ORCID identifiers are valid", + "examples": [ + "https://api.github.com/users/username" + ] + } + ], "schema:name": { "type": "string", "description": "Full name of the maintainer", @@ -245,17 +474,23 @@ "John Doe" ] }, - "schema:Organization": { + "schema:affiliation": { "type": "object", "description": "The organisation the maintainer is affiliated with", "properties": { "schema:identifier": { "type": "string", - "description": "The ROR identifier of the organisation." + "description": "A unique identifier to identify the maintainer's affiliation; ROR identifiers are valid", + "examples": [ + "https://ror.org/0566bfb96" + ] }, - "schema:legalName": { + "schema:name": { "type": "string", - "description": "The official name of the organization, e.g. the registered company name." + "description": "Full name of the maintainer's affiliated orgnisation", + "examples": [ + "Naturalis Biodiversity Center" + ] } }, "additionalProperties": false @@ -268,14 +503,37 @@ "type": "object", "description": "A FundingScheme combines organizational, project and policy aspects of grant-based funding that sets guidelines, principles and mechanisms to support other kinds of projects and activities.", "properties": { - "schema:url": { + "schema:award": { "type": "string", - "description": "URL to webpage with the supported payment models and restrictions that apply to the Resource." + "description": "An award won by or for this service", + "examples": [ + "National Award 2024" + ] }, - "schema:Funder": { + "schema:Funding": { "type": "object", - "description": "A person or organization that supports (sponsors) something through some kind of financial contribution.", + "description": "A Grant that directly or indirectly provide funding or sponsorship for this service", + "properties": { + "schema:description": { + "type": "string", + "description": "A description of the service's grant", + "examples": [ + "This grant was given for exceptional performance" + ] + } + } + }, + "schema:Funder": { + "type": "array", + "description": "An organization that supports (sponsors) something through some kind of financial contribution.", "properties": { + "schema:identifier": { + "type": "string", + "description": "A unique identifier to identify the funder organisation; ROR identifiers are valid", + "examples": [ + "https://ror.org/0566bfb96" + ] + }, "schema:name": { "type": "string", "description": "The name of the funder (funding program)", @@ -300,13 +558,6 @@ "https://github.com/DiSSCo/tettris-marketplace" ] }, - "schema:about": { - "type": "string", - "description": "The subject matter of the content including a summary of the Resource features updated from the previous version.", - "examples": [ - "A piece of software. Latest changes: upgrade of user interface, correction of minor bugs." - ] - }, "schema:runtimePlatform": { "type": "string", "description": "Runtime platform or script interpreter dependencies (example: Java v1, Python 2.3, .NET Framework 3.0).", @@ -353,14 +604,7 @@ "properties": { "schema:contentUrl": { "type": "string", - "description": "Actual bytes of the media object, for example the image file or video file." - }, - "schema:license": { - "type": "string", - "description": "A license document that applies to this content, typically indicated by URL", - "examples": [ - "https://creativecommons.org/public-domain/cc0/" - ] + "description": "JPG, PNG or SVG file showing a screenshot or other relevant illustration of the resource. Add only files that are public domain." } }, "required": [ @@ -374,11 +618,9 @@ "@id", "@type", "schema:dateCreated", - "schema:dateModified", "schema:status", "schema:availableLanguage", "schema:ratingValue", "schema:Service" - ], - "additionalProperties": false + ] } \ No newline at end of file From d11b6a89f0ae784c1d286fa359c62a09faa62a9e Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 2 Oct 2024 13:21:53 +0200 Subject: [PATCH 2/8] Add isOpenSource to additional property of software source code Add isOpenSource to additional property of software source code --- src/sources/dataModel/taxonomic-service.json | 40 ++++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index 3f9bd65..7318bf1 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -262,7 +262,7 @@ "@type": { "type": "string", "description": "The type of the additional property", - "const": "ods:PropertyValue" + "const": "PropertyValue" }, "name": { "type": "string", @@ -589,12 +589,46 @@ "examples": [ "https://creativecommons.org/public-domain/cc0/" ] + }, + "additionalProperty": { + "type": "array", + "description": "Generic property for additional properties not covered by schema.org", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "The type of the additional property", + "const": "PropertyValue" + }, + "name": { + "type": "string", + "description": "The name of the additional property", + "examples": [ + "isOpenSource" + ] + }, + "description": { + "type": "string", + "description": "A description of the additional property", + "examples": [ + "Boolean indicating is the software source code is available by open source." + ] + }, + "value": { + "type": "boolean", + "description": "The value of the additional property", + "examples": [ + true + ] + } + } + } } }, "required": [ "schema:codeRepository" - ], - "additionalProperties": false + ] }, "schema:AssociatedMedia": { "type": "array", From 2040e9bab381cbc494b9fe9c610bb46b14ba4899 Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 2 Oct 2024 14:11:55 +0200 Subject: [PATCH 3/8] Readd date modified for taxonomic service, but remove for service sub level and move updatedFrequently into the service sub class Readd date modified for taxonomic service, but remove for service sub level and move updatedFrequently into the service sub class --- src/sources/dataModel/taxonomic-service.json | 58 ++++++++++++++++---- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index 7318bf1..c2f7415 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -31,6 +31,14 @@ "2023-07-10T12:02:00.000Z" ] }, + "schema:dateModified": { + "type": "string", + "description": "The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed.", + "format": "date-time", + "examples": [ + "2023-07-10T12:02:00.000Z" + ] + }, "schema:datePublished": { "type": "string", "description": "Date the service was published", @@ -268,7 +276,6 @@ "type": "string", "description": "The name of the additional property", "examples": [ - "updateFrequency", "organismGroup", "availableOnAppStore", "paymentModel" @@ -278,7 +285,6 @@ "type": "string", "description": "A description of the additional property", "examples": [ - "Indicator if the service is frequently updated or not, 'frequently updated' if the resource is updated multiple times a year.", "Common names for groups of organisms.", "Application is available on the following app stores, relevant for apps.", "URL to webpage with the supported payment models and restrictions that apply to the Resource." @@ -291,7 +297,6 @@ ], "description": "The value of the additional property", "examples": [ - "yes", [ "Bees" ], @@ -357,20 +362,51 @@ "https://eosc.eu/wp-content/uploads/2022/09/New-guidelines-for-EOSC-family-branding.jpg" ] }, - "schema:dateModified": { - "type": "string", - "description": "The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed.", - "format": "date-time", - "examples": [ - "2023-07-10T12:02:00.000Z" - ] - }, + "schema:termsOfService": { "type": "string", "description": "URL pointing to Terms of Service, Terms of Use or Terms and Conditions, the legal agreements between a service provider and a person who wants to use that service.", "examples": [ "http://service-name.service-provid-er.eu/TermsOfUse" ] + }, + "additionalProperty": { + "type": "array", + "description": "Generic property for additional properties not covered by schema.org", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "The type of the additional property", + "const": "PropertyValue" + }, + "name": { + "type": "string", + "description": "The name of the additional property", + "examples": [ + "updateFrequency" + ] + }, + "description": { + "type": "string", + "description": "A description of the additional property", + "examples": [ + "Indicator if the service is frequently updated or not, 'frequently updated' if the resource is updated multiple times a year." + ] + }, + "value": { + "type": [ + "string", + "array" + ], + "description": "The value of the additional property", + "examples": [ + "yes" + ] + } + } + } } }, "required": [ From eb5c9ca2c193e5400fb47c65437ae073b567ef10 Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 9 Oct 2024 08:51:33 +0200 Subject: [PATCH 4/8] Review commit Commit addressing the review comments --- src/sources/dataModel/taxonomic-service.json | 314 ++++++++++++------- 1 file changed, 193 insertions(+), 121 deletions(-) diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index c2f7415..d48809a 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -25,7 +25,7 @@ }, "schema:dateCreated": { "type": "string", - "description": "The date on which the Taxonomic Service was created or the item was added to a DataFeed.", + "description": "The date on which the Taxonomic Service was created or the item was added to a DataFeed, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "format": "date-time", "examples": [ "2023-07-10T12:02:00.000Z" @@ -33,7 +33,7 @@ }, "schema:dateModified": { "type": "string", - "description": "The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed.", + "description": "The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "format": "date-time", "examples": [ "2023-07-10T12:02:00.000Z" @@ -41,7 +41,7 @@ }, "schema:datePublished": { "type": "string", - "description": "Date the service was published", + "description": "Date the service was published, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "format": "date-time", "examples": [ "2023-07-10T12:02:00.000Z" @@ -60,100 +60,100 @@ "type": "string", "description": "A license document that applies to this content, typically indicated by URL", "enum": [ - "https://spdx.org/licenses/CC-BY-1.0.html", - "https://spdx.org/licenses/CC-BY-2.0.html", - "https://spdx.org/licenses/CC-BY-2.5.html", - "https://spdx.org/licenses/CC-BY-2.5-AU.html", - "https://spdx.org/licenses/CC-BY-3.0.html", - "https://spdx.org/licenses/CC-BY-3.0-AT.html", - "https://spdx.org/licenses/CC-BY-3.0-AU.html", - "https://spdx.org/licenses/CC-BY-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-3.0-IGO.html", - "https://spdx.org/licenses/CC-BY-3.0-NL.html", - "https://spdx.org/licenses/CC-BY-3.0-US.html", - "https://spdx.org/licenses/CC-BY-4.0.html", - "https://spdx.org/licenses/CC-BY-NC-1.0.html", - "https://spdx.org/licenses/CC-BY-NC-2.0.html", - "https://spdx.org/licenses/CC-BY-NC-2.5.html", - "https://spdx.org/licenses/CC-BY-NC-3.0.html", - "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-NC-4.0.html", - "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", - "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", - "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", - "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", - "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", - "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", - "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", - "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", - "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", - "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", - "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", - "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", - "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", - "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", - "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", - "https://spdx.org/licenses/CC-BY-ND-1.0.html", - "https://spdx.org/licenses/CC-BY-ND-2.0.html", - "https://spdx.org/licenses/CC-BY-ND-2.5.html", - "https://spdx.org/licenses/CC-BY-ND-3.0.html", - "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-ND-4.0.html", - "https://spdx.org/licenses/CC-BY-SA-1.0.html", - "https://spdx.org/licenses/CC-BY-SA-2.0.html", - "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", - "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", - "https://spdx.org/licenses/CC-BY-SA-2.5.html", - "https://spdx.org/licenses/CC-BY-SA-3.0.html", - "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", - "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", - "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", - "https://spdx.org/licenses/CC-BY-SA-4.0.html", - "https://spdx.org/licenses/CC-PDDC.html", - "https://spdx.org/licenses/CC0-1.0.html", - "https://spdx.org/licenses/DL-DE-BY-2.0.html", - "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", + "https://spdx.org/licenses/CC-BY-1.0.json", + "https://spdx.org/licenses/CC-BY-2.0.json", + "https://spdx.org/licenses/CC-BY-2.5.json", + "https://spdx.org/licenses/CC-BY-2.5-AU.json", + "https://spdx.org/licenses/CC-BY-3.0.json", + "https://spdx.org/licenses/CC-BY-3.0-AT.json", + "https://spdx.org/licenses/CC-BY-3.0-AU.json", + "https://spdx.org/licenses/CC-BY-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-3.0-IGO.json", + "https://spdx.org/licenses/CC-BY-3.0-NL.json", + "https://spdx.org/licenses/CC-BY-3.0-US.json", + "https://spdx.org/licenses/CC-BY-4.0.json", + "https://spdx.org/licenses/CC-BY-NC-1.0.json", + "https://spdx.org/licenses/CC-BY-NC-2.0.json", + "https://spdx.org/licenses/CC-BY-NC-2.5.json", + "https://spdx.org/licenses/CC-BY-NC-3.0.json", + "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-NC-4.0.json", + "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json", + "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json", + "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json", + "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json", + "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json", + "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json", + "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json", + "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json", + "https://spdx.org/licenses/CC-BY-ND-1.0.json", + "https://spdx.org/licenses/CC-BY-ND-2.0.json", + "https://spdx.org/licenses/CC-BY-ND-2.5.json", + "https://spdx.org/licenses/CC-BY-ND-3.0.json", + "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-ND-4.0.json", + "https://spdx.org/licenses/CC-BY-SA-1.0.json", + "https://spdx.org/licenses/CC-BY-SA-2.0.json", + "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json", + "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json", + "https://spdx.org/licenses/CC-BY-SA-2.5.json", + "https://spdx.org/licenses/CC-BY-SA-3.0.json", + "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json", + "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json", + "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json", + "https://spdx.org/licenses/CC-BY-SA-4.0.json", + "https://spdx.org/licenses/CC-PDDC.json", + "https://spdx.org/licenses/CC0-1.0.json", + "https://spdx.org/licenses/DL-DE-BY-2.0.json", + "https://spdx.org/licenses/DL-DE-ZERO-2.0.json", "https://www.govdata.de/dl-de/by-1-0", "https://www.govdata.de/dl-de/by-nc-1-0", - "https://spdx.org/licenses/EUPL-1.0.html", - "https://spdx.org/licenses/EPL-2.0.html", - "https://spdx.org/licenses/EUPL-1.2.html", + "https://spdx.org/licenses/EUPL-1.0.json", + "https://spdx.org/licenses/EPL-2.0.json", + "https://spdx.org/licenses/EUPL-1.2.json", "https://www.etalab.gouv.fr/licence-ouverte-open-licence/", - "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.1-only.html", - "https://spdx.org/licenses/GFDL-1.1-or-later.html", - "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.2-only.html", - "https://spdx.org/licenses/GFDL-1.2-or-later.html", - "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", - "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", - "https://spdx.org/licenses/GFDL-1.3-only.html", - "https://spdx.org/licenses/GFDL-1.3-or-later.html", + "https://spdx.org/licenses/GFDL-1.1-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.1-only.json", + "https://spdx.org/licenses/GFDL-1.1-or-later.json", + "https://spdx.org/licenses/GFDL-1.2-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.2-only.json", + "https://spdx.org/licenses/GFDL-1.2-or-later.json", + "https://spdx.org/licenses/GFDL-1.3-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json", + "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json", + "https://spdx.org/licenses/GFDL-1.3-only.json", + "https://spdx.org/licenses/GFDL-1.3-or-later.json", "https://data.gov.hr/open-licence-republic-croatia", "https://www.dati.gov.it/iodl/2.0/", - "https://spdx.org/licenses/NLOD-1.0.html", - "https://spdx.org/licenses/NLOD-2.0.html", - "https://spdx.org/licenses/ODC-By-1.0.html", - "https://spdx.org/licenses/ODbL-1.0.html", - "https://spdx.org/licenses/PDDL-1.0.html", - "https://spdx.org/licenses/OGL-Canada-2.0.html", - "https://spdx.org/licenses/OGL-UK-1.0.html", - "https://spdx.org/licenses/OGL-UK-2.0.html", - "https://spdx.org/licenses/OGL-UK-3.0.html", + "https://spdx.org/licenses/NLOD-1.0.json", + "https://spdx.org/licenses/NLOD-2.0.json", + "https://spdx.org/licenses/ODC-By-1.0.json", + "https://spdx.org/licenses/ODbL-1.0.json", + "https://spdx.org/licenses/PDDL-1.0.json", + "https://spdx.org/licenses/OGL-Canada-2.0.json", + "https://spdx.org/licenses/OGL-UK-1.0.json", + "https://spdx.org/licenses/OGL-UK-2.0.json", + "https://spdx.org/licenses/OGL-UK-3.0.json", "https://data.gov.ro/pages/licence" ], "examples": [ - "https://spdx.org/licenses/CC-BY-1.0.html" + "https://spdx.org/licenses/CC-BY-1.0.json" ] }, "schema:availableLanguage": { @@ -195,18 +195,18 @@ "ods:topicDiscipline": { "type": "array", "description": "The topic discipline relevant to the taxonomic range of the service", - "enum": [ - "Anthropology", - "Botany", - "Microbiology", - "Palaeontology", - "Zoology", - "Ecology", - "Other Biodiversity", - "Unclassified" - ], "items": { - "type": "string" + "type": "string", + "enum": [ + "Anthropology", + "Botany", + "Microbiology", + "Palaeontology", + "Zoology", + "Ecology", + "Other Biodiversity", + "Unclassified" + ] } }, "schema:taxonomicRange": { @@ -226,6 +226,7 @@ "schema:url": { "type": "string", "description": "URL of the item that leads to the resource of the service", + "format": "url", "examples": [ "cetaf.org" ] @@ -261,7 +262,7 @@ "This service is rejected, because..." ] }, - "additionalProperty": { + "schema:additionalProperty": { "type": "array", "description": "Generic property for additional properties not covered by schema.org", "items": { @@ -306,7 +307,14 @@ "Free" ] } - } + }, + "required": [ + "@type", + "name", + "description", + "value" + ], + "additionalProperties": false } }, "schema:Service": { @@ -362,7 +370,6 @@ "https://eosc.eu/wp-content/uploads/2022/09/New-guidelines-for-EOSC-family-branding.jpg" ] }, - "schema:termsOfService": { "type": "string", "description": "URL pointing to Terms of Service, Terms of Use or Terms and Conditions, the legal agreements between a service provider and a person who wants to use that service.", @@ -370,7 +377,7 @@ "http://service-name.service-provid-er.eu/TermsOfUse" ] }, - "additionalProperty": { + "schema:additionalProperty": { "type": "array", "description": "Generic property for additional properties not covered by schema.org", "items": { @@ -405,7 +412,14 @@ "yes" ] } - } + }, + "required": [ + "@type", + "name", + "description", + "value" + ], + "additionalProperties": false } } }, @@ -443,19 +457,26 @@ "items": { "type": "object", "properties": { + "@type": { + "type": "string", + "description": "The type of the author", + "const": "schema:Person" + }, "schema:identifier": { - "@id": "orcid", - "@type": "PropertyValue", - "propertyID": "https://registry.identifiers.org/registry/orcid", "type": "string", "description": "A unique identifier to identify the author; ORCID identifiers are valid", "examples": [ - "https://api.github.com/users/username" + "https://orcid.org/0000-0001-9790-9277" ] }, "schema:affiliation": { "type": "object", "properties": { + "@type": { + "type": "string", + "description": "The type of the affiliation", + "const": "schema:Organization" + }, "schema:identifier": { "type": "string", "description": "A unique identifier to identify the author's affiliation; ROR identifiers are valid", @@ -470,9 +491,20 @@ "Naturalis Biodiversity Center" ] } - } + }, + "required": [ + "@type", + "schema:identifier" + ], + "additionalProperties": false } - } + }, + "required": [ + "@type", + "schema:identifier", + "schema:affiliation" + ], + "additionalProperties": false } }, "schema:Maintainer": { @@ -481,11 +513,13 @@ "items": { "type": "object", "properties": { + "@type": { + "type": "string", + "description": "The type of the maintainer", + "const": "schema:Person" + }, "schema:identifier": [ { - "@id": "github", - "@type": "PropertyValue", - "propertyID": "https://registry.identifiers.org/registry/github", "type": "string", "description": "A unique identifier to identify the maintainer; GitHub identifiers are valid", "examples": [ @@ -493,13 +527,10 @@ ] }, { - "@id": "orcid", - "@type": "PropertyValue", - "propertyID": "https://registry.identifiers.org/registry/orcid", "type": "string", "description": "A unique identifier to identify the maintainer; ORCID identifiers are valid", "examples": [ - "https://api.github.com/users/username" + "https://orcid.org/0000-0001-9790-9277" ] } ], @@ -514,6 +545,11 @@ "type": "object", "description": "The organisation the maintainer is affiliated with", "properties": { + "@type": { + "type": "string", + "description": "The type of the affiliation", + "const": "schema:Organization" + }, "schema:identifier": { "type": "string", "description": "A unique identifier to identify the maintainer's affiliation; ROR identifiers are valid", @@ -529,9 +565,18 @@ ] } }, + "required": [ + "@type", + "schema:identifier" + ], "additionalProperties": false } }, + "required": [ + "@type", + "schema:identifier", + "schema:affiliation" + ], "additionalProperties": false } }, @@ -550,6 +595,13 @@ "type": "object", "description": "A Grant that directly or indirectly provide funding or sponsorship for this service", "properties": { + "schema:identifier": { + "type": "string", + "description": "A unique identifier to identify the funder organisation; ROR identifiers are valid", + "examples": [ + "101081903" + ] + }, "schema:description": { "type": "string", "description": "A description of the service's grant", @@ -557,12 +609,21 @@ "This grant was given for exceptional performance" ] } - } + }, + "required": [ + "schema:identifier" + ], + "additionalProperties": false }, "schema:Funder": { "type": "array", "description": "An organization that supports (sponsors) something through some kind of financial contribution.", "properties": { + "@type": { + "type": "string", + "description": "The type of funder", + "const": "schema:Organization" + }, "schema:identifier": { "type": "string", "description": "A unique identifier to identify the funder organisation; ROR identifiers are valid", @@ -578,6 +639,10 @@ ] } }, + "required": [ + "@type", + "schema:identifier" + ], "additionalProperties": false } }, @@ -626,7 +691,7 @@ "https://creativecommons.org/public-domain/cc0/" ] }, - "additionalProperty": { + "schema:additionalProperty": { "type": "array", "description": "Generic property for additional properties not covered by schema.org", "items": { @@ -658,7 +723,14 @@ true ] } - } + }, + "required": [ + "@type", + "name", + "description", + "value" + ], + "additionalProperties": false } } }, From c4c4c6b8c176dd3a58677613c745137c3712a7a3 Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 9 Oct 2024 15:39:01 +0200 Subject: [PATCH 5/8] Review commit 2 Changes based on second review --- src/sources/dataModel/taxonomic-service.json | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index d48809a..7a1fe7b 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -220,7 +220,7 @@ "type": "string", "description": "The geographic area associated with the service, e.g. World, Palearctic, South-East Europe, Mediterranean", "examples": [ - "Annen" + "Mediterranean" ] }, "schema:url": { @@ -264,7 +264,7 @@ }, "schema:additionalProperty": { "type": "array", - "description": "Generic property for additional properties not covered by schema.org", + "description": "Generic property for handling domain specific values.", "items": { "type": "object", "properties": { @@ -327,18 +327,18 @@ "items": { "type": "string", "enum": [ - "AITrainingDataset", - "communityGroup", - "crowdSourcing", - "dataTool", - "e-LearningService", - "factsheet", - "identification tool", - "knowledge website", - "mobile app", - "service inventory", - "referenceCollection", - "specimenDatasetNotInGBIF" + "AI training dataset", + "Community group", + "CrowdSourcing", + "Data tool", + "e-Learning service", + "Factsheet", + "Identification tool", + "Knowledge website", + "Mobile app", + "Service inventory", + "Reference collection", + "Specimen dataset not in GBIF" ] } }, @@ -379,7 +379,7 @@ }, "schema:additionalProperty": { "type": "array", - "description": "Generic property for additional properties not covered by schema.org", + "description": "Generic property for handling domain specific values.", "items": { "type": "object", "properties": { @@ -599,7 +599,7 @@ "type": "string", "description": "A unique identifier to identify the funder organisation; ROR identifiers are valid", "examples": [ - "101081903" + "https://ror.org/0566bfb96" ] }, "schema:description": { @@ -693,7 +693,7 @@ }, "schema:additionalProperty": { "type": "array", - "description": "Generic property for additional properties not covered by schema.org", + "description": "Generic property for handling domain specific values.", "items": { "type": "object", "properties": { From 12ea59901053e63f1bf8b8c834eb07f7d8ebf100 Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 16 Oct 2024 08:41:39 +0200 Subject: [PATCH 6/8] Update taxonomic service JSON Update taxonomic service JSON --- src/app/types/TaxonomicService.d.ts | 313 +++++++++++++++++++++++----- 1 file changed, 256 insertions(+), 57 deletions(-) diff --git a/src/app/types/TaxonomicService.d.ts b/src/app/types/TaxonomicService.d.ts index 95a6d9e..5ca8b9e 100644 --- a/src/app/types/TaxonomicService.d.ts +++ b/src/app/types/TaxonomicService.d.ts @@ -18,13 +18,17 @@ export interface TaxonomicService { */ "@type": "TaxonomicService"; /** - * The date on which the Taxonomic Service was created or the item was added to a DataFeed. + * The date on which the Taxonomic Service was created or the item was added to a DataFeed, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX */ "schema:dateCreated": string; /** - * The date on which the Taxonomic Service was most recently modified or when the item's entry was modified within a DataFeed. + * The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX */ - "schema:dateModified": string; + "schema:dateModified"?: string; + /** + * Date the service was published, following the ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX + */ + "schema:datePublished"?: string; /** * The status of the record */ @@ -32,38 +36,131 @@ export interface TaxonomicService { /** * A license document that applies to this content, typically indicated by URL */ - "schema:license"?: string; + "schema:license"?: + | "https://spdx.org/licenses/CC-BY-1.0.json" + | "https://spdx.org/licenses/CC-BY-2.0.json" + | "https://spdx.org/licenses/CC-BY-2.5.json" + | "https://spdx.org/licenses/CC-BY-2.5-AU.json" + | "https://spdx.org/licenses/CC-BY-3.0.json" + | "https://spdx.org/licenses/CC-BY-3.0-AT.json" + | "https://spdx.org/licenses/CC-BY-3.0-AU.json" + | "https://spdx.org/licenses/CC-BY-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-3.0-IGO.json" + | "https://spdx.org/licenses/CC-BY-3.0-NL.json" + | "https://spdx.org/licenses/CC-BY-3.0-US.json" + | "https://spdx.org/licenses/CC-BY-4.0.json" + | "https://spdx.org/licenses/CC-BY-NC-1.0.json" + | "https://spdx.org/licenses/CC-BY-NC-2.0.json" + | "https://spdx.org/licenses/CC-BY-NC-2.5.json" + | "https://spdx.org/licenses/CC-BY-NC-3.0.json" + | "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-NC-4.0.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json" + | "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json" + | "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json" + | "https://spdx.org/licenses/CC-BY-ND-1.0.json" + | "https://spdx.org/licenses/CC-BY-ND-2.0.json" + | "https://spdx.org/licenses/CC-BY-ND-2.5.json" + | "https://spdx.org/licenses/CC-BY-ND-3.0.json" + | "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-ND-4.0.json" + | "https://spdx.org/licenses/CC-BY-SA-1.0.json" + | "https://spdx.org/licenses/CC-BY-SA-2.0.json" + | "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json" + | "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json" + | "https://spdx.org/licenses/CC-BY-SA-2.5.json" + | "https://spdx.org/licenses/CC-BY-SA-3.0.json" + | "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json" + | "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json" + | "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json" + | "https://spdx.org/licenses/CC-BY-SA-4.0.json" + | "https://spdx.org/licenses/CC-PDDC.json" + | "https://spdx.org/licenses/CC0-1.0.json" + | "https://spdx.org/licenses/DL-DE-BY-2.0.json" + | "https://spdx.org/licenses/DL-DE-ZERO-2.0.json" + | "https://www.govdata.de/dl-de/by-1-0" + | "https://www.govdata.de/dl-de/by-nc-1-0" + | "https://spdx.org/licenses/EUPL-1.0.json" + | "https://spdx.org/licenses/EPL-2.0.json" + | "https://spdx.org/licenses/EUPL-1.2.json" + | "https://www.etalab.gouv.fr/licence-ouverte-open-licence/" + | "https://spdx.org/licenses/GFDL-1.1-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.1-only.json" + | "https://spdx.org/licenses/GFDL-1.1-or-later.json" + | "https://spdx.org/licenses/GFDL-1.2-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.2-only.json" + | "https://spdx.org/licenses/GFDL-1.2-or-later.json" + | "https://spdx.org/licenses/GFDL-1.3-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json" + | "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json" + | "https://spdx.org/licenses/GFDL-1.3-only.json" + | "https://spdx.org/licenses/GFDL-1.3-or-later.json" + | "https://data.gov.hr/open-licence-republic-croatia" + | "https://www.dati.gov.it/iodl/2.0/" + | "https://spdx.org/licenses/NLOD-1.0.json" + | "https://spdx.org/licenses/NLOD-2.0.json" + | "https://spdx.org/licenses/ODC-By-1.0.json" + | "https://spdx.org/licenses/ODbL-1.0.json" + | "https://spdx.org/licenses/PDDL-1.0.json" + | "https://spdx.org/licenses/OGL-Canada-2.0.json" + | "https://spdx.org/licenses/OGL-UK-1.0.json" + | "https://spdx.org/licenses/OGL-UK-2.0.json" + | "https://spdx.org/licenses/OGL-UK-3.0.json" + | "https://data.gov.ro/pages/licence"; /** * A language someone may use with or at the item, service or place. Please use one of the language codes from the IETF BCP 47 standard. */ "schema:availableLanguage": string[]; - /** - * The version of the Service embodied by a specified resource. - */ - "schema:version"?: string; /** * The topic discipline relevant to the taxonomic range of the service */ - "ods:topicDiscipline"?: + "ods:topicDiscipline"?: ( | "Anthropology" | "Botany" - | "Astrogeology" - | "Geology" | "Microbiology" | "Palaeontology" | "Zoology" | "Ecology" | "Other Biodiversity" - | "Other Geodiversity" - | "Unclassified"; + | "Unclassified" + )[]; /** - * The taxonomic grouping of the organism. + * The taxonomic grouping of the organism, e.g. 'No specific range' or 'Agromyzidae, Braconidae' */ "schema:taxonomicRange"?: string[]; /** - * The geographic area associated with the service. + * The geographic area associated with the service, e.g. World, Palearctic, South-East Europe, Mediterranean */ "schema:geographicArea"?: string; + /** + * URL of the item that leads to the resource of the service + */ + "schema:url"?: string; + /** + * The subject matter of the service including a summary of the Resource features updated from the previous version. + */ + "schema:about"?: string; /** * URL to further documentation describing the service in more detail. */ @@ -76,6 +173,27 @@ export interface TaxonomicService { * A short explanation (e.g. one to two sentences) providing background context and other information that led to the conclusion expressed in the rating. */ "schema:ratingExplanation"?: string; + /** + * Generic property for handling domain specific values. + */ + "schema:additionalProperty"?: { + /** + * The type of the additional property + */ + "@type": "PropertyValue"; + /** + * The name of the additional property + */ + name: string; + /** + * A description of the additional property + */ + description: string; + /** + * The value of the additional property + */ + value: string | unknown[]; + }[]; /** * A service provided by an organization, e.g. delivery service, print services, etc. */ @@ -83,18 +201,20 @@ export interface TaxonomicService { /** * A type that defines the kind of taxonomic service */ - "schema:serviceType": - | "AITrainingDataset" - | "communityGroup" - | "crowdSourcing" - | "dataTool" - | "e-LearningService" - | "factsheet" - | "identification" - | "inventory" - | "referenceCollection" - | "specimenDatasetNotInGBIF" - | "website"; + "schema:serviceType": ( + | "AI training dataset" + | "Community group" + | "CrowdSourcing" + | "Data tool" + | "e-Learning service" + | "Factsheet" + | "Identification tool" + | "Knowledge website" + | "Mobile app" + | "Service inventory" + | "Reference collection" + | "Specimen dataset not in GBIF" + )[]; /** * The preferred name of the service (can be in any language) */ @@ -112,13 +232,30 @@ export interface TaxonomicService { */ "schema:logo"?: string; /** - * The date on which the Service was most recently modified or when the item's entry was modified within a DataFeed. + * URL pointing to Terms of Service, Terms of Use or Terms and Conditions, the legal agreements between a service provider and a person who wants to use that service. */ - "schema:dateModified"?: string; + "schema:termsOfService"?: string; /** - * Human-readable terms of service documentation. + * Generic property for handling domain specific values. */ - "schema:termsOfService"?: string; + "schema:additionalProperty"?: { + /** + * The type of the additional property + */ + "@type": "PropertyValue"; + /** + * The name of the additional property + */ + name: string; + /** + * A description of the additional property + */ + description: string; + /** + * The value of the additional property + */ + value: string | unknown[]; + }[]; }; /** * A contact point—for example, a Customer Complaints department. @@ -129,22 +266,57 @@ export interface TaxonomicService { */ "schema:email"?: string; /** - * URL of the item that leads to the point of contact + * URL to a contact webpage or contact form for the resource. */ "schema:url"?: string; + }; + /** + * An array of authors of this service. + */ + "schema:Author"?: { /** - * URL of a reference Web page that unambiguously indicates the item's identity. E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website. + * The type of the author */ - "schema:sameAs"?: string; - }; + "@type": "schema:Person"; + /** + * A unique identifier to identify the author; ORCID identifiers are valid + */ + "schema:identifier": string; + "schema:affiliation": { + /** + * The type of the affiliation + */ + "@type": "schema:Organization"; + /** + * A unique identifier to identify the author's affiliation; ROR identifiers are valid + */ + "schema:identifier": string; + /** + * Full name of the author's affiliated orgnisation + */ + "schema:name"?: string; + }; + }[]; /** * An array of maintainers of a Dataset, software package (SoftwareApplication), or other Project. A maintainer is a Person or Organization that manages contributions to, and/or publication of, some (typically complex) artefact. */ "schema:Maintainer"?: { /** - * A unique identifier to identify the maintainer; ORCID or Wikidata identifiers are valid + * The type of the maintainer */ - "schema:identifier"?: string; + "@type": "schema:Person"; + "schema:identifier": [ + { + type: "string"; + description: "A unique identifier to identify the maintainer; GitHub identifiers are valid"; + examples: ["https://api.github.com/users/username"]; + }, + { + type: "string"; + description: "A unique identifier to identify the maintainer; ORCID identifiers are valid"; + examples: ["https://orcid.org/0000-0001-9790-9277"]; + } + ]; /** * Full name of the maintainer */ @@ -152,15 +324,19 @@ export interface TaxonomicService { /** * The organisation the maintainer is affiliated with */ - "schema:Organization"?: { + "schema:affiliation": { + /** + * The type of the affiliation + */ + "@type": "schema:Organization"; /** - * The ROR identifier of the organisation. + * A unique identifier to identify the maintainer's affiliation; ROR identifiers are valid */ - "schema:identifier"?: string; + "schema:identifier": string; /** - * The official name of the organization, e.g. the registered company name. + * Full name of the maintainer's affiliated orgnisation */ - "schema:legalName"?: string; + "schema:name"?: string; }; }[]; /** @@ -168,18 +344,26 @@ export interface TaxonomicService { */ "schema:FundingScheme"?: { /** - * URL to webpage with the supported payment models and restrictions that apply to the Resource. + * An award won by or for this service */ - "schema:url"?: string; + "schema:award"?: string; /** - * A person or organization that supports (sponsors) something through some kind of financial contribution. + * A Grant that directly or indirectly provide funding or sponsorship for this service */ - "schema:Funder"?: { + "schema:Funding"?: { /** - * The name of the funder (funding program) + * A unique identifier to identify the funder organisation; ROR identifiers are valid */ - "schema:name"?: string; + "schema:identifier": string; + /** + * A description of the service's grant + */ + "schema:description"?: string; }; + /** + * An organization that supports (sponsors) something through some kind of financial contribution. + */ + "schema:Funder"?: unknown[]; }; /** * Object representing the service's software source code @@ -189,10 +373,6 @@ export interface TaxonomicService { * Link to the repository where the un-compiled, human readable code and related code is located (SVN, GitHub, CodePlex). */ "schema:codeRepository": string; - /** - * The subject matter of the content including a summary of the Resource features updated from the previous version. - */ - "schema:about"?: string; /** * Runtime platform or script interpreter dependencies (example: Java v1, Python 2.3, .NET Framework 3.0). */ @@ -209,18 +389,37 @@ export interface TaxonomicService { * A license document that applies to this content, typically indicated by URL. */ "schema:license"?: string; + /** + * Generic property for handling domain specific values. + */ + "schema:additionalProperty"?: { + /** + * The type of the additional property + */ + "@type": "PropertyValue"; + /** + * The name of the additional property + */ + name: string; + /** + * A description of the additional property + */ + description: string; + /** + * The value of the additional property + */ + value: boolean; + }[]; + [k: string]: unknown; }; /** * Array of media objects that encodes this Service. This property is a synonym for encoding. */ "schema:AssociatedMedia"?: { /** - * Actual bytes of the media object, for example the image file or video file. + * JPG, PNG or SVG file showing a screenshot or other relevant illustration of the resource. Add only files that are public domain. */ "schema:contentUrl": string; - /** - * A license document that applies to this content, typically indicated by URL - */ - "schema:license"?: string; }[]; + [k: string]: unknown; } From 075eb3d6c516e21f52c9ac5d311a181060c8d2cb Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 16 Oct 2024 10:23:57 +0200 Subject: [PATCH 7/8] Fix schema errors Fix schema errors --- src/app/Types.ts | 6 ++++-- src/components/search/components/SearchResult.tsx | 2 +- src/components/taxonomicService/TaxonomicService.tsx | 11 +++++------ .../taxonomicService/components/DescriptionBlock.tsx | 2 +- src/sources/dataModel/taxonomic-service.json | 4 ++-- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/app/Types.ts b/src/app/Types.ts index e8cbb3a..baae8c0 100644 --- a/src/app/Types.ts +++ b/src/app/Types.ts @@ -37,9 +37,11 @@ export type TaxonomicService = { /* Type for an Agent */ export type Maintainer = { - "schema:identifier"?: string; + "@type": string, + "schema:identifier"?: string | Dict[]; "schema:name"?: string; - "schema:Organization"?: { + "schema:Affiliation"?: { + "@type": string, "schema:identifier"?: string; "schema:legalName"?: string; }; diff --git a/src/components/search/components/SearchResult.tsx b/src/components/search/components/SearchResult.tsx index 597823e..1ecac69 100644 --- a/src/components/search/components/SearchResult.tsx +++ b/src/components/search/components/SearchResult.tsx @@ -96,7 +96,7 @@ const SearchResult = (props: Props) => { {/* Service Type and Publishing Date if preview image is not present */} <Row> <Col> - <p className="fs-5 fs-lg-4">{MakeReadableString(taxonomicService.taxonomicService['schema:Service']['schema:serviceType'] ?? 'Taxonomic Service')}</p> + <p className="fs-5 fs-lg-4">{taxonomicService.taxonomicService['schema:Service']['schema:serviceType']}</p> </Col> {(!previewImage || window.innerWidth < 768) && <Col xs="auto" lg="auto"> diff --git a/src/components/taxonomicService/TaxonomicService.tsx b/src/components/taxonomicService/TaxonomicService.tsx index c69fe05..a6d4307 100644 --- a/src/components/taxonomicService/TaxonomicService.tsx +++ b/src/components/taxonomicService/TaxonomicService.tsx @@ -132,10 +132,9 @@ const TaxonomicService = () => { topicDiscipline: taxonomicService.taxonomicService['ods:topicDiscipline'], geographicArea: taxonomicService.taxonomicService['schema:geographicArea'], licence: taxonomicService.taxonomicService['schema:license'], - version: taxonomicService.taxonomicService['schema:version'], - lastUpdated: moment(taxonomicService.taxonomicService['schema:Service']['schema:dateModified']).format('MMM DD - YYYY'), - paymentModel: taxonomicService.taxonomicService['schema:FundingScheme']?.['schema:url'], - fundingProgram: taxonomicService.taxonomicService['schema:FundingScheme']?.['schema:Funder']?.['schema:name'] + published: moment(taxonomicService.taxonomicService['schema:datePublished']).format('MMM DD - YYYY'), + paymentModel: taxonomicService.taxonomicService['schema:FundingScheme']?.['schema:Funding']?.['schema:identifier'], + fundingProgram: taxonomicService.taxonomicService['schema:FundingScheme']?.['schema:Funding']?.['schema:description'] }} /> </Col> @@ -147,7 +146,7 @@ const TaxonomicService = () => { properties={{ contactEmail: taxonomicService.taxonomicService['schema:ContactPoint']?.['schema:email'], contactWebpage: taxonomicService.taxonomicService['schema:ContactPoint']?.['schema:url'], - webpage: taxonomicService.taxonomicService['schema:ContactPoint']?.['schema:sameAs'], + webpage: taxonomicService.taxonomicService['schema:ContactPoint']?.['schema:url'], documentationWebpage: taxonomicService.taxonomicService['schema:documentation'], maintainers: taxonomicService.taxonomicService['schema:Maintainer'] }} @@ -164,7 +163,7 @@ const TaxonomicService = () => { codeRepository: taxonomicService.taxonomicService['schema:SoftwareSourceCode']['schema:codeRepository'], runtimePlatform: taxonomicService.taxonomicService['schema:SoftwareSourceCode']['schema:runtimePlatform'], status: taxonomicService.taxonomicService['schema:SoftwareSourceCode']['schema:creativeWorkStatus'], - changeLog: taxonomicService.taxonomicService['schema:SoftwareSourceCode']['schema:about'], + changeLog: taxonomicService.taxonomicService['schema:about'], programmingLanguages: taxonomicService.taxonomicService['schema:SoftwareSourceCode']['schema:programmingLanguage'] }} /> diff --git a/src/components/taxonomicService/components/DescriptionBlock.tsx b/src/components/taxonomicService/components/DescriptionBlock.tsx index 74a9331..16bfd22 100644 --- a/src/components/taxonomicService/components/DescriptionBlock.tsx +++ b/src/components/taxonomicService/components/DescriptionBlock.tsx @@ -64,7 +64,7 @@ const DescriptionBlock = (props: Props) => { {/* Type */} <Col xs={{ span: 12 }} lg="auto"> <p className="fs-5 fw-bold">Taxonomic service type</p> - <p className="tc-primary fw-bold">{MakeReadableString(taxonomicService.taxonomicService['schema:Service']['schema:serviceType'])}</p> + <p className="tc-primary fw-bold">{taxonomicService.taxonomicService['schema:Service']['schema:serviceType']}</p> </Col> {/* Taxonomic scope */} <Col xs={{ span: 12 }} lg={{ span: 3 }} diff --git a/src/sources/dataModel/taxonomic-service.json b/src/sources/dataModel/taxonomic-service.json index 7a1fe7b..98d4e89 100644 --- a/src/sources/dataModel/taxonomic-service.json +++ b/src/sources/dataModel/taxonomic-service.json @@ -469,7 +469,7 @@ "https://orcid.org/0000-0001-9790-9277" ] }, - "schema:affiliation": { + "schema:Affiliation": { "type": "object", "properties": { "@type": { @@ -541,7 +541,7 @@ "John Doe" ] }, - "schema:affiliation": { + "schema:Affiliation": { "type": "object", "description": "The organisation the maintainer is affiliated with", "properties": { From 9125c3704e17da66c97929572fc22f6d626e5ef6 Mon Sep 17 00:00:00 2001 From: TomDijkema <tom.dijkema@naturalis.nl> Date: Wed, 16 Oct 2024 15:33:14 +0200 Subject: [PATCH 8/8] Sonar commit Commit for resolving Sonar Cloud issues --- src/components/search/components/SearchResult.tsx | 3 --- .../taxonomicService/components/DescriptionBlock.tsx | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/components/search/components/SearchResult.tsx b/src/components/search/components/SearchResult.tsx index 1ecac69..6e01730 100644 --- a/src/components/search/components/SearchResult.tsx +++ b/src/components/search/components/SearchResult.tsx @@ -4,9 +4,6 @@ import classNames from 'classnames'; import moment from 'moment'; import { Row, Col } from 'react-bootstrap'; -/* Import Utilities */ -import { MakeReadableString } from 'app/Utilities'; - /* Import Hooks */ import { useAppDispatch } from 'app/Hooks'; diff --git a/src/components/taxonomicService/components/DescriptionBlock.tsx b/src/components/taxonomicService/components/DescriptionBlock.tsx index 16bfd22..94f2546 100644 --- a/src/components/taxonomicService/components/DescriptionBlock.tsx +++ b/src/components/taxonomicService/components/DescriptionBlock.tsx @@ -4,9 +4,6 @@ import MarkdownIt from 'markdown-it'; import moment from 'moment'; import { Row, Col } from 'react-bootstrap'; -/* Import Utilities */ -import { MakeReadableString } from 'app/Utilities'; - /* Import Types */ import { TaxonomicService } from 'app/Types';