From f08e9c9ead4175f59d7f8d2862cce1ab053e8b80 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Fri, 24 May 2024 15:14:36 +0200 Subject: [PATCH 01/13] feat: initial --- DEPENDENCIES_BACKEND | 14 + backend/pom.xml | 23 + .../edc/logic/service/EdcAdapterService.java | 14 +- .../edc/logic/util/EdcRequestBodyBuilder.java | 6 +- .../resources/json-ld/cx-policy-v1.jsonld | 22 + .../src/main/resources/json-ld/dcat.jsonld | 3923 +++++++++++++++++ .../src/main/resources/json-ld/dspace.jsonld | 62 + .../src/main/resources/json-ld/edc-v1.jsonld | 47 + .../src/main/resources/json-ld/odrl.jsonld | 200 + .../main/resources/json-ld/tx-auth-v1.jsonld | 12 + .../src/main/resources/json-ld/tx-v1.jsonld | 9 + .../common/edc/EdcAdapterServiceTest.java | 557 +++ .../resources/json-ld/cx-policy-v1.jsonld | 22 + .../src/test/resources/json-ld/dcat.jsonld | 3923 +++++++++++++++++ .../src/test/resources/json-ld/dspace.jsonld | 62 + .../src/test/resources/json-ld/edc-v1.jsonld | 47 + .../src/test/resources/json-ld/odrl.jsonld | 200 + .../test/resources/json-ld/tx-auth-v1.jsonld | 12 + .../src/test/resources/json-ld/tx-v1.jsonld | 9 + 19 files changed, 9162 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/resources/json-ld/cx-policy-v1.jsonld create mode 100644 backend/src/main/resources/json-ld/dcat.jsonld create mode 100644 backend/src/main/resources/json-ld/dspace.jsonld create mode 100644 backend/src/main/resources/json-ld/edc-v1.jsonld create mode 100644 backend/src/main/resources/json-ld/odrl.jsonld create mode 100644 backend/src/main/resources/json-ld/tx-auth-v1.jsonld create mode 100644 backend/src/main/resources/json-ld/tx-v1.jsonld create mode 100644 backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java create mode 100644 backend/src/test/resources/json-ld/cx-policy-v1.jsonld create mode 100644 backend/src/test/resources/json-ld/dcat.jsonld create mode 100644 backend/src/test/resources/json-ld/dspace.jsonld create mode 100644 backend/src/test/resources/json-ld/edc-v1.jsonld create mode 100644 backend/src/test/resources/json-ld/odrl.jsonld create mode 100644 backend/src/test/resources/json-ld/tx-auth-v1.jsonld create mode 100644 backend/src/test/resources/json-ld/tx-v1.jsonld diff --git a/DEPENDENCIES_BACKEND b/DEPENDENCIES_BACKEND index 97753ba3..3846b3f7 100644 --- a/DEPENDENCIES_BACKEND +++ b/DEPENDENCIES_BACKEND @@ -1,9 +1,11 @@ maven/mavencentral/ch.qos.logback/logback-classic/1.4.14, EPL-1.0 OR LGPL-2.1-only, approved, #3435 maven/mavencentral/ch.qos.logback/logback-core/1.4.14, EPL-1.0 OR LGPL-2.1-only, approved, #3373 +maven/mavencentral/com.apicatalog/titanium-json-ld/1.4.0, Apache-2.0, approved, #13683 maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.15.4, Apache-2.0, approved, #7947 maven/mavencentral/com.fasterxml.jackson.core/jackson-core/2.15.4, MIT AND Apache-2.0, approved, #7932 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.15.4, Apache-2.0, approved, #7934 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.15.4, Apache-2.0, approved, #8802 +maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.15.4, Apache-2.0, approved, #9179 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.15.4, Apache-2.0, approved, #8808 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.15.4, Apache-2.0, approved, #7930 maven/mavencentral/com.fasterxml.jackson.module/jackson-module-parameter-names/2.15.4, Apache-2.0, approved, #8803 @@ -16,8 +18,11 @@ maven/mavencentral/com.squareup.okio/okio/3.6.0, Apache-2.0, approved, #11155 maven/mavencentral/com.sun.istack/istack-commons-runtime/4.1.2, BSD-3-Clause, approved, #2590 maven/mavencentral/com.vaadin.external.google/android-json/0.0.20131108.vaadin1, Apache-2.0, approved, CQ21310 maven/mavencentral/com.zaxxer/HikariCP/5.0.1, Apache-2.0, approved, clearlydefined +maven/mavencentral/dev.failsafe/failsafe/3.3.2, Apache-2.0, approved, #9268 maven/mavencentral/io.micrometer/micrometer-commons/1.12.5, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #11679 maven/mavencentral/io.micrometer/micrometer-observation/1.12.5, Apache-2.0, approved, #11680 +maven/mavencentral/io.opentelemetry/opentelemetry-api/1.31.0, Apache-2.0, approved, #11087 +maven/mavencentral/io.opentelemetry/opentelemetry-context/1.31.0, Apache-2.0, approved, #11088 maven/mavencentral/io.smallrye/jandex/3.1.2, Apache-2.0, approved, clearlydefined maven/mavencentral/io.swagger.core.v3/swagger-annotations-jakarta/2.2.21, Apache-2.0, approved, #5947 maven/mavencentral/io.swagger.core.v3/swagger-core-jakarta/2.2.21, Apache-2.0, approved, #5929 @@ -25,6 +30,7 @@ maven/mavencentral/io.swagger.core.v3/swagger-models-jakarta/2.2.21, Apache-2.0, maven/mavencentral/jakarta.activation/jakarta.activation-api/2.1.3, EPL-2.0 OR BSD-3-Clause OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jaf maven/mavencentral/jakarta.annotation/jakarta.annotation-api/2.1.1, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.ca maven/mavencentral/jakarta.inject/jakarta.inject-api/2.0.1, Apache-2.0, approved, ee4j.cdi +maven/mavencentral/jakarta.json/jakarta.json-api/2.1.3, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jsonp maven/mavencentral/jakarta.persistence/jakarta.persistence-api/3.1.0, EPL-2.0 OR BSD-3-Clause, approved, ee4j.jpa maven/mavencentral/jakarta.transaction/jakarta.transaction-api/2.0.1, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jta maven/mavencentral/jakarta.validation/jakarta.validation-api/3.0.2, Apache-2.0, approved, ee4j.validation @@ -47,9 +53,17 @@ maven/mavencentral/org.assertj/assertj-core/3.24.2, Apache-2.0, approved, #6161 maven/mavencentral/org.awaitility/awaitility/4.2.1, Apache-2.0, approved, #14178 maven/mavencentral/org.checkerframework/checker-qual/3.42.0, MIT, approved, clearlydefined maven/mavencentral/org.eclipse.angus/angus-activation/2.0.2, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.angus +maven/mavencentral/org.eclipse.edc/boot-spi/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/core-spi/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld-lib/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld-spi/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-model/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.7.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transform-spi/0.7.0, Apache-2.0, approved, technology.edc maven/mavencentral/org.glassfish.jaxb/jaxb-core/4.0.5, BSD-3-Clause, approved, ee4j.jaxb-impl maven/mavencentral/org.glassfish.jaxb/jaxb-runtime/4.0.5, BSD-3-Clause, approved, ee4j.jaxb-impl maven/mavencentral/org.glassfish.jaxb/txw2/4.0.5, BSD-3-Clause, approved, ee4j.jaxb-impl +maven/mavencentral/org.glassfish/jakarta.json/2.0.1, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jsonp maven/mavencentral/org.hamcrest/hamcrest-core/2.2, BSD-3-Clause, approved, clearlydefined maven/mavencentral/org.hamcrest/hamcrest/2.2, BSD-3-Clause, approved, clearlydefined maven/mavencentral/org.hibernate.common/hibernate-commons-annotations/6.0.6.Final, LGPL-2.1-only, approved, #6962 diff --git a/backend/pom.xml b/backend/pom.xml index 85cb0e63..04be7dbe 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -122,6 +122,29 @@ modelmapper ${modelmapper.version} + + + org.eclipse.edc + json-ld-lib + 0.7.0 + + + + org.eclipse.edc + json-ld-spi + 0.7.0 + + + + + + + + + + + + diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java index e3d278fe..bcf047ca 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java @@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import okhttp3.*; +import org.eclipse.edc.jsonld.TitaniumJsonLd; +import org.eclipse.edc.spi.monitor.ConsoleMonitor; import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; import org.eclipse.tractusx.puris.backend.common.edc.logic.dto.EdrDto; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; @@ -40,7 +42,6 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Pattern; - /** * Service Layer of EDC Adapter. Builds and sends requests to a productEDC. * The EDC connection is configured using the application.properties file. @@ -48,6 +49,14 @@ @Service @Slf4j public class EdcAdapterService { + + + private static TitaniumJsonLd titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); + + static { + + } + private static final OkHttpClient CLIENT = new OkHttpClient(); @Autowired private VariablesService variablesService; @@ -64,6 +73,9 @@ public EdcAdapterService(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } + + + /** * Util method for issuing a GET request to the management api of your control plane. * Any caller of this method has the responsibility to close diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java index 34d8abe8..2195ab69 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java @@ -56,9 +56,13 @@ public class EdcRequestBodyBuilder { public static final String CX_TAXO_NAMESPACE = "https://w3id.org/catenax/taxonomy#"; public static final String CX_COMMON_NAMESPACE = "https://w3id.org/catenax/ontology/common#"; public static final String CX_POLICY_NAMESPACE = "https://w3id.org/catenax/policy/"; - public static final String DCT_NAMESPACE = "https://purl.org/dc/terms/"; + public static final String DCT_NAMESPACE = "http://purl.org/dc/terms/"; public static final String AAS_SEMANTICS_NAMESPACE = "https://admin-shell.io/aas/3/0/HasSemantics/"; public static final String CONTRACT_POLICY_ID = "Contract_Policy"; + public static final String TX_NAMESPACE = "https://w3id.org/tractusx/v0.0.1/ns/"; + public static final String TX_AUTH_NAMESPACE = "https://w3id.org/tractusx/auth/"; + public static final String DCAT_NAMESPACE = "http://www.w3.org/ns/dcat#"; + public static final String DSPACE_NAMESPACE = "https://w3id.org/dspace/v0.8/"; /** * helper class to encapsulate PolicyConstraint diff --git a/backend/src/main/resources/json-ld/cx-policy-v1.jsonld b/backend/src/main/resources/json-ld/cx-policy-v1.jsonld new file mode 100644 index 00000000..a4d09fc0 --- /dev/null +++ b/backend/src/main/resources/json-ld/cx-policy-v1.jsonld @@ -0,0 +1,22 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "cred": "https://www.w3.org/2018/credentials#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "cx-policy": "https://w3id.org/catenax/policy/", + "Dismantler": "cx-policy:Dismantler", + "Dismantler.activityType": "cx-policy:Dismantler.activityType", + "Dismantler.allowedBrands": "cx-policy:Dismantler.allowedBrands", + "Membership": "cx-policy:Membership", + "UsagePurpose": "cx-policy:UsagePurpose", + "ContractReference": "cx-policy:ContractReference", + "FrameworkAgreement": "cx-policy:FrameworkAgreement", + "FrameworkAgreement.behavioraltwin": "cx-policy:FrameworkAgreement.behavioraltwin", + "FrameworkAgreement.pcf": "cx-policy:FrameworkAgreement.pcf", + "FrameworkAgreement.quality": "cx-policy:FrameworkAgreement.quality", + "FrameworkAgreement.resiliency": "cx-policy:FrameworkAgreement.resiliency", + "FrameworkAgreement.sustainability": "cx-policy:FrameworkAgreement.sustainability", + "FrameworkAgreement.traceability": "cx-policy:FrameworkAgreement.traceability" + } +} \ No newline at end of file diff --git a/backend/src/main/resources/json-ld/dcat.jsonld b/backend/src/main/resources/json-ld/dcat.jsonld new file mode 100644 index 00000000..5aff9966 --- /dev/null +++ b/backend/src/main/resources/json-ld/dcat.jsonld @@ -0,0 +1,3923 @@ +{ + "@graph" : [ { + "@id" : "_:b0", + "homepage" : "http://stfc.ac.uk", + "foaf:name" : "Science and Technology Facilities Council, UK" + }, { + "@id" : "_:b11", + "homepage" : "http://www.asahi-net.or.jp/~ax2s-kmtn/", + "foaf:name" : "Shuji Kamitsuna" + }, { + "@id" : "_:b12", + "seeAlso" : "http://fadmaa.me/foaf.ttl", + "foaf:name" : "Fadi Maali" + }, { + "@id" : "_:b13", + "foaf:name" : "Marios Meimaris" + }, { + "@id" : "_:b14", + "seeAlso" : "http://www.eurecom.fr/~atemezin/gatemezing-foaf.rdf", + "foaf:name" : "Ghislain Auguste Atemezing" + }, { + "@id" : "_:b15", + "seeAlso" : "http://makxdekkers.com/makxdekkers.rdf#me", + "homepage" : "http://makxdekkers.com/", + "foaf:name" : "Makx Dekkers" + }, { + "@id" : "_:b16", + "foaf:name" : "Richard Cyganiak" + }, { + "@id" : "_:b17", + "homepage" : "http://okfn.org", + "foaf:name" : "Open Knowledge Foundation" + }, { + "@id" : "_:b18", + "affiliation" : "_:b17", + "foaf:name" : "Rufus Pollock" + }, { + "@id" : "_:b19", + "foaf:name" : "John Erickson" + }, { + "@id" : "_:b2", + "seeAlso" : "https://orcid.org/0000-0001-5648-2713", + "homepage" : [ "https://w3id.org/people/ralbertoni/", "http://www.imati.cnr.it/index.php/people/8-curricula/178-riccardo-albertoni" ], + "foaf:name" : "Riccardo Albertoni" + }, { + "@id" : "_:b20", + "foaf:name" : "Boris Villazón-Terrazas" + }, { + "@id" : "_:b21", + "affiliation" : "http://www.w3.org/data#W3C", + "seeAlso" : "http://philarcher.org/foaf.rdf#me", + "homepage" : "http://www.w3.org/People/all#phila", + "foaf:name" : "Phil Archer" + }, { + "@id" : "_:b22", + "seeAlso" : "https://jakub.klímek.com/#me", + "homepage" : "https://jakub.klímek.com/", + "foaf:name" : "Jakub Klímek" + }, { + "@id" : "_:b23", + "homepage" : "http://www.w3.org/2011/gld/", + "foaf:name" : "Government Linked Data WG" + }, { + "@id" : "_:b24", + "affiliation" : "_:b0", + "seeAlso" : "https://orcid.org/0000-0003-3499-8262", + "homepage" : "https://agbeltran.github.io", + "foaf:name" : "Alejandra Gonzalez-Beltran" + }, { + "@id" : "_:b25", + "affiliation" : "_:b4", + "foaf:name" : "Vassilios Peristeras" + }, { + "@id" : "_:b26", + "affiliation" : "_:b29", + "foaf:name" : "David Browning" + }, { + "@id" : "_:b28", + "@type" : "owl:Restriction", + "cardinality" : "1", + "onProperty" : "foaf:primaryTopic" + }, { + "@id" : "_:b29", + "homepage" : "http://www.refinitiv.com", + "foaf:name" : "Refinitiv" + }, { + "@id" : "_:b3", + "foaf:name" : "Martin Alvarez-Espinar" + }, { + "@id" : "_:b30", + "@type" : "owl:Restriction", + "allValuesFrom" : "dcat:Resource", + "onProperty" : "foaf:primaryTopic" + }, { + "@id" : "_:b4", + "homepage" : "http://ec.europa.eu/dgs/informatics/", + "foaf:name" : "European Commission, DG DIGIT" + }, { + "@id" : "_:b5", + "@type" : "foaf:Person", + "affiliation" : "_:b6", + "seeAlso" : "https://orcid.org/0000-0002-3884-3420", + "foaf:name" : "Simon J D Cox", + "workInfoHomepage" : "http://people.csiro.au/Simon-Cox" + }, { + "@id" : "_:b6", + "homepage" : "https://csiro.au", + "foaf:name" : "Commonwealth Scientific and Industrial Research Organisation" + }, { + "@id" : "_:b7", + "seeAlso" : "https://orcid.org/0000-0001-9300-2694", + "homepage" : "http://www.andrea-perego.name/foaf/#me", + "foaf:name" : "Andrea Perego" + }, { + "@id" : "_:b8", + "@type" : "owl:Class", + "unionOf" : { + "@list" : [ "prov:Attribution", "dcat:Relationship" ] + } + }, { + "@id" : "http://www.w3.org/ns/dcat", + "@type" : "owl:Ontology", + "contributor" : [ "_:b11", "_:b13", "_:b7", "_:b5", "_:b3", "_:b20", "_:b18", "_:b21", "_:b22", "_:b2", "_:b14", "_:b24", "_:b25", "_:b15", "_:b26", "_:b16" ], + "creator" : [ "_:b19", "_:b12" ], + "license" : "https://creativecommons.org/licenses/by/4.0/", + "modified" : [ "2020-11-30", "2012-04-24", "2017-12-19", "2013-09-20", "2013-11-28", "2021-09-14" ], + "dct:modified" : "2019", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "DCAT er et RDF-vokabular som har til formål at understøtte interoperabilitet mellem datakataloger udgivet på nettet. Ved at anvende DCAT til at beskrive datasæt i datakataloger, kan udgivere øge findbarhed og gøre det gøre det lettere for applikationer at anvende metadata fra forskellige kataloger. Derudover understøttes decentraliseret udstilling af kataloger og fødererede datasætsøgninger på tværs af websider. Aggregerede DCAT-metadata kan fungere som fortegnelsesfiler der kan understøtte digital bevaring. DCAT er defineret på http://www.w3.org/TR/vocab-dcat/. Enhver forskel mellem det normative dokument og dette schema er en fejl i dette schema." + }, { + "@language" : "fr", + "@value" : "DCAT est un vocabulaire développé pour faciliter l'interopérabilité entre les jeux de données publiées sur le Web. En utilisant DCAT pour décrire les jeux de données dans les catalogues de données, les fournisseurs de données augmentent leur découverte et permettent que les applications facilement les métadonnées de plusieurs catalogues. Il permet en plus la publication décentralisée des catalogues et facilitent la recherche fédérée des données entre plusieurs sites. Les métadonnées DCAT aggrégées peuvent servir comme un manifeste pour faciliter la préservation digitale des ressources. DCAT est définie à l'adresse http://www.w3.org/TR/vocab-dcat/. Une quelconque version de ce document normatif et ce vocabulaire est une erreur dans ce vocabulaire." + }, { + "@language" : "cs", + "@value" : "DCAT je RDF slovník navržený pro zprostředkování interoperability mezi datovými katalogy publikovanými na Webu. Poskytovatelé dat používáním slovníku DCAT pro popis datových sad v datových katalozích zvyšují jejich dohledatelnost a umožňují aplikacím konzumovat metadata z více katalogů. Dále je umožňena decentralizovaná publikace katalogů a federované dotazování na datové sady napříč katalogy. Agregovaná DCAT metadata mohou také sloužit jako průvodka umožňující digitální uchování informace. DCAT je definován na http://www.w3.org/TR/vocab-dcat/. Jakýkoliv nesoulad mezi odkazovaným dokumentem a tímto schématem je chybou v tomto schématu." + }, { + "@language" : "ar", + "@value" : "هي أنطولوجية تسهل تبادل البيانات بين مختلف الفهارس على الوب. استخدام هذه الأنطولوجية يساعد على اكتشاف قوائم البيانات المنشورة على الوب و يمكن التطبيقات المختلفة من الاستفادة أتوماتيكيا من البيانات المتاحة من مختلف الفهارس." + }, { + "@language" : "ja", + "@value" : "DCATは、ウェブ上で公開されたデータ・カタログ間の相互運用性の促進を目的とするRDFの語彙です。このドキュメントでは、その利用のために、スキーマを定義し、例を提供します。データ・カタログ内のデータセットを記述するためにDCATを用いると、公開者が、発見可能性を増加させ、アプリケーションが複数のカタログのメタデータを容易に利用できるようになります。さらに、カタログの分散公開を可能にし、複数のサイトにまたがるデータセットの統合検索を促進します。集約されたDCATメタデータは、ディジタル保存を促進するためのマニフェスト・ファイルとして使用できます。" + }, { + "@language" : "en", + "@value" : "DCAT is an RDF vocabulary designed to facilitate interoperability between data catalogs published on the Web. By using DCAT to describe datasets in data catalogs, publishers increase discoverability and enable applications easily to consume metadata from multiple catalogs. It further enables decentralized publishing of catalogs and facilitates federated dataset search across sites. Aggregated DCAT metadata can serve as a manifest file to facilitate digital preservation. DCAT is defined at http://www.w3.org/TR/vocab-dcat/. Any variance between that normative document and this schema is an error in this schema." + }, { + "@language" : "es", + "@value" : "DCAT es un vocabulario RDF diseñado para facilitar la interoperabilidad entre catálogos de datos publicados en la Web. Utilizando DCAT para describir datos disponibles en catálogos se aumenta la posibilidad de que sean descubiertos y se permite que las aplicaciones consuman fácilmente los metadatos de varios catálogos." + }, { + "@language" : "el", + "@value" : "Το DCAT είναι ένα RDF λεξιλόγιο που σχεδιάσθηκε για να κάνει εφικτή τη διαλειτουργικότητα μεταξύ καταλόγων δεδομένων στον Παγκόσμιο Ιστό. Χρησιμοποιώντας το DCAT για την περιγραφή συνόλων δεδομένων, οι εκδότες αυτών αυξάνουν την ανακαλυψιμότητα και επιτρέπουν στις εφαρμογές την εύκολη κατανάλωση μεταδεδομένων από πολλαπλούς καταλόγους. Επιπλέον, δίνει τη δυνατότητα για αποκεντρωμένη έκδοση και διάθεση καταλόγων και επιτρέπει δυνατότητες ενοποιημένης αναζήτησης μεταξύ διαφορετικών πηγών. Συγκεντρωτικά μεταδεδομένα που έχουν περιγραφεί με το DCAT μπορούν να χρησιμοποιηθούν σαν ένα δηλωτικό αρχείο (manifest file) ώστε να διευκολύνουν την ψηφιακή συντήρηση." + }, { + "@language" : "it", + "@value" : "DCAT è un vocabolario RDF progettato per facilitare l'interoperabilità tra i cataloghi di dati pubblicati nel Web. Utilizzando DCAT per descrivere i dataset nei cataloghi di dati, i fornitori migliorano la capacità di individuazione dei dati e abilitano le applicazioni al consumo di dati provenienti da cataloghi differenti. DCAT permette di decentralizzare la pubblicazione di cataloghi e facilita la ricerca federata dei dataset. L'aggregazione dei metadati federati può fungere da file manifesto per facilitare la conservazione digitale. DCAT è definito all'indirizzo http://www.w3.org/TR/vocab-dcat/. Qualsiasi scostamento tra tale definizione normativa e questo schema è da considerarsi un errore di questo schema." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "Slovník pro datové katalogy" + }, { + "@language" : "it", + "@value" : "Il vocabolario del catalogo dei dati" + }, { + "@language" : "fr", + "@value" : "Le vocabulaire des jeux de données" + }, { + "@language" : "es", + "@value" : "El vocabulario de catálogo de datos" + }, { + "@language" : "da", + "@value" : "Datakatalogvokabular" + }, { + "@language" : "ar", + "@value" : "أنطولوجية فهارس قوائم البيانات" + }, { + "@language" : "el", + "@value" : "Το λεξιλόγιο των καταλόγων δεδομένων" + }, { + "@language" : "ja", + "@value" : "データ・カタログ語彙(DCAT)" + }, { + "@language" : "en", + "@value" : "The data catalog vocabulary" + } ], + "imports" : [ "http://www.w3.org/2004/02/skos/core", "http://www.w3.org/ns/prov-o#", "http://purl.org/dc/terms/" ], + "owl:versionInfo" : [ { + "@language" : "en", + "@value" : "Questa è una copia aggiornata del vocabolario DCAT v2.0 disponibile in https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "en", + "@value" : "This is an updated copy of v2.0 of the DCAT vocabulary, taken from https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "es", + "@value" : "Esta es una copia del vocabulario DCAT v2.0 disponible en https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "da", + "@value" : "Dette er en opdateret kopi af DCAT v. 2.0 som er tilgænglig på https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "cs", + "@value" : "Toto je aktualizovaná kopie slovníku DCAT verze 2.0, převzatá z https://www.w3.org/ns/dcat.ttl" + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English language definitions updated in this revision in line with ED. Multilingual text unevenly updated." + }, + "maker" : "_:b23" + }, { + "@id" : "dcat:Catalog", + "@type" : [ "rdfs:Class", "owl:Class" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A curated collection of metadata about resources (e.g., datasets and data services in the context of a data catalog)." + }, { + "@language" : "it", + "@value" : "Una raccolta curata di metadati sulle risorse (ad es. sui dataset e relativi servizi nel contesto di cataloghi di dati)." + }, { + "@language" : "cs", + "@value" : "Řízená kolekce metadat o datových sadách a datových službách" + }, { + "@language" : "es", + "@value" : "Una colección curada de metadatos sobre recursos (por ejemplo, conjuntos de datos y servicios de datos en el contexto de un catálogo de datos)." + }, { + "@language" : "el", + "@value" : "Μια επιμελημένη συλλογή μεταδεδομένων περί συνόλων δεδομένων" + }, { + "@language" : "fr", + "@value" : "Une collection élaborée de métadonnées sur les jeux de données" + }, { + "@language" : "ar", + "@value" : "مجموعة من توصيفات قوائم البيانات" + }, { + "@language" : "da", + "@value" : "En udvalgt og arrangeret samling af metadata om ressourcer (fx datasæt og datatjenester i kontekst af et datakatalog). " + }, { + "@language" : "ja", + "@value" : "データ・カタログは、データセットに関するキュレートされたメタデータの集合です。" + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "Katalog" + }, { + "@language" : "cs", + "@value" : "Katalog" + }, { + "@language" : "el", + "@value" : "Κατάλογος" + }, { + "@language" : "it", + "@value" : "Catalogo" + }, { + "@language" : "ar", + "@value" : "فهرس قوائم البيانات" + }, { + "@language" : "ja", + "@value" : "カタログ" + }, { + "@language" : "es", + "@value" : "Catálogo" + }, { + "@language" : "en", + "@value" : "Catalog" + }, { + "@language" : "fr", + "@value" : "Catalogue" + } ], + "subClassOf" : "dcat:Dataset", + "skos:definition" : [ { + "@language" : "ja", + "@value" : "データ・カタログは、データセットに関するキュレートされたメタデータの集合です。" + }, { + "@language" : "cs", + "@value" : "Řízená kolekce metadat o datových sadách a datových službách." + }, { + "@language" : "it", + "@value" : "Una raccolta curata di metadati sulle risorse (ad es. sui dataset e relativi servizi nel contesto di cataloghi di dati)." + }, { + "@language" : "ar", + "@value" : "مجموعة من توصيفات قوائم البيانات" + }, { + "@language" : "es", + "@value" : "Una colección curada de metadatos sobre recursos (por ejemplo, conjuntos de datos y servicios de datos en el contexto de un catálogo de datos)." + }, { + "@language" : "el", + "@value" : "Μια επιμελημένη συλλογή μεταδεδομένων περί συνόλων δεδομένων." + }, { + "@language" : "fr", + "@value" : "Une collection élaborée de métadonnées sur les jeux de données." + }, { + "@language" : "da", + "@value" : "En samling af metadata om ressourcer (fx datasæt og datatjenester i kontekst af et datakatalog)." + }, { + "@language" : "en", + "@value" : "A curated collection of metadata about resources (e.g., datasets and data services in the context of a data catalog)." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English, Italian, Spanish definitions updated in this revision. Multilingual text not yet updated." + }, + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Normalmente, un catálogo de datos disponible en la web se representa como una única instancia de esta clase." + }, { + "@language" : "da", + "@value" : "Et webbaseret datakatalog repræsenteres typisk ved en enkelt instans af denne klasse." + }, { + "@language" : "el", + "@value" : "Συνήθως, ένας κατάλογος δεδομένων στον Παγκόσμιο Ιστό αναπαρίσταται ως ένα στιγμιότυπο αυτής της κλάσης." + }, { + "@language" : "cs", + "@value" : "Webový datový katalog je typicky reprezentován jako jedna instance této třídy." + }, { + "@language" : "en", + "@value" : "A web-based data catalog is typically represented as a single instance of this class." + }, { + "@language" : "it", + "@value" : "Normalmente, un catalogo di dati nel web viene rappresentato come una singola istanza di questa classe." + }, { + "@language" : "ja", + "@value" : "通常、ウェブ・ベースのデータ・カタログは、このクラスの1つのインスタンスとして表わされます。" + } ] + }, { + "@id" : "dcat:CatalogRecord", + "@type" : [ "owl:Class", "rdfs:Class" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A record in a data catalog, describing the registration of a single dataset or data service." + }, { + "@language" : "ja", + "@value" : "1つのデータセットを記述したデータ・カタログ内のレコード。" + }, { + "@language" : "da", + "@value" : "En post i et datakatalog der beskriver registreringen af et enkelt datasæt eller en datatjeneste." + }, { + "@language" : "cs", + "@value" : "Záznam v datovém katalogu popisující jednu datovou sadu či datovou službu." + }, { + "@language" : "fr", + "@value" : "Un registre du catalogue ou une entrée du catalogue, décrivant un seul jeu de données." + }, { + "@language" : "el", + "@value" : "Μία καταγραφή ενός καταλόγου, η οποία περιγράφει ένα συγκεκριμένο σύνολο δεδομένων." + }, { + "@language" : "it", + "@value" : "Un record in un catalogo di dati che descrive un singolo dataset o servizio di dati." + }, { + "@language" : "es", + "@value" : "Un registro en un catálogo de datos que describe un solo conjunto de datos o un servicio de datos." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "カタログ・レコード" + }, { + "@language" : "el", + "@value" : "Καταγραφή καταλόγου" + }, { + "@language" : "ar", + "@value" : "سجل" + }, { + "@language" : "es", + "@value" : "Registro del catálogo" + }, { + "@language" : "it", + "@value" : "Record di catalogo" + }, { + "@language" : "en", + "@value" : "Catalog Record" + }, { + "@language" : "da", + "@value" : "Katalogpost" + }, { + "@language" : "cs", + "@value" : "Katalogizační záznam" + }, { + "@language" : "fr", + "@value" : "Registre du catalogue" + } ], + "subClassOf" : [ "_:b28", "_:b30" ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Un record in un catalogo di dati che descrive un singolo dataset o servizio di dati." + }, { + "@language" : "cs", + "@value" : "Záznam v datovém katalogu popisující jednu datovou sadu či datovou službu." + }, { + "@language" : "es", + "@value" : "Un registro en un catálogo de datos que describe un solo conjunto de datos o un servicio de datos." + }, { + "@language" : "da", + "@value" : "En post i et datakatalog der beskriver registreringen af et enkelt datasæt eller en datatjeneste." + }, { + "@language" : "ja", + "@value" : "1つのデータセットを記述したデータ・カタログ内のレコード。" + }, { + "@language" : "el", + "@value" : "Μία καταγραφή ενός καταλόγου, η οποία περιγράφει ένα συγκεκριμένο σύνολο δεδομένων." + }, { + "@language" : "fr", + "@value" : "Un registre du catalogue ou une entrée du catalogue, décrivant un seul jeu de données." + }, { + "@language" : "en", + "@value" : "A record in a data catalog, describing the registration of a single dataset or data service." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English definition updated in this revision. Multilingual text not yet updated except the Spanish one and the Czech one and Italian one." + }, + "skos:scopeNote" : [ { + "@language" : "ja", + "@value" : "このクラスはオプションで、すべてのカタログがそれを用いるとは限りません。これは、データセットに関するメタデータとカタログ内のデータセットのエントリーに関するメタデータとで区別が行われるカタログのために存在しています。例えば、データセットの公開日プロパティーは、公開機関が情報を最初に利用可能とした日付を示しますが、カタログ・レコードの公開日は、データセットがカタログに追加された日付です。両方の日付が異っていたり、後者だけが分かっている場合は、カタログ・レコードに対してのみ公開日を指定すべきです。W3CのPROVオントロジー[prov-o]を用いれば、データセットに対する特定の変更に関連するプロセスやエージェントの詳細などの、さらに詳しい来歴情報の記述が可能となることに注意してください。" + }, { + "@language" : "it", + "@value" : "Questa classe è opzionale e non tutti i cataloghi la utilizzeranno. Esiste per cataloghi in cui si opera una distinzione tra i metadati relativi al dataset ed i metadati relativi alla gestione del dataset nel catalogo. Ad esempio, la proprietà per indicare la data di pubblicazione del dataset rifletterà la data in cui l'informazione è stata originariamente messa a disposizione dalla casa editrice, mentre la data di pubblicazione per il record nel catalogo rifletterà la data in cui il dataset è stato aggiunto al catalogo. Nei casi dove solo quest'ultima sia nota, si utilizzerà esclusivamente la data di pubblicazione relativa al record del catalogo. Si noti che l'Ontologia W3C PROV permette di descrivere ulteriori informazioni sulla provenienza, quali i dettagli del processo, la procedura e l'agente coinvolto in una particolare modifica di un dataset." + }, { + "@language" : "cs", + "@value" : "Tato třída je volitelná a ne všechny katalogy ji využijí. Existuje pro katalogy, ve kterých se rozlišují metadata datové sady či datové služby a metadata o záznamu o datové sadě či datové službě v katalogu. Například datum publikace datové sady odráží datum, kdy byla datová sada původně zveřejněna poskytovatelem dat, zatímco datum publikace katalogizačního záznamu je datum zanesení datové sady do katalogu. V případech kdy se obě data liší, nebo je známo jen to druhé, by mělo být specifikováno jen datum publikace katalogizačního záznamu. Všimněte si, že ontologie W3C PROV umožňuje popsat další informace o původu jako například podrobnosti o procesu konkrétní změny datové sady a jeho účastnících." + }, { + "@language" : "es", + "@value" : "Esta clase es opcional y no todos los catálogos la utilizarán. Esta clase existe para catálogos que hacen una distinción entre los metadatos acerca de un conjunto de datos o un servicio de datos y los metadatos acerca de una entrada en ese conjunto de datos en el catálogo. Por ejemplo, la propiedad sobre la fecha de la publicación de los datos refleja la fecha en que la información fue originalmente publicada, mientras que la fecha de publicación del registro del catálogo es la fecha en que los datos se agregaron al mismo. En caso en que ambas fechas fueran diferentes, o en que sólo la fecha de publicación del registro del catálogo estuviera disponible, sólo debe especificarse en el registro del catálogo. Tengan en cuenta que la ontología PROV de W3C permite describir otra información sobre la proveniencia de los datos, como por ejemplo detalles del proceso y de los agentes involucrados en algún cambio específico a los datos." + }, { + "@language" : "en", + "@value" : "This class is optional and not all catalogs will use it. It exists for catalogs where a distinction is made between metadata about a dataset or data service and metadata about the entry for the dataset or data service in the catalog. For example, the publication date property of the dataset reflects the date when the information was originally made available by the publishing agency, while the publication date of the catalog record is the date when the dataset was added to the catalog. In cases where both dates differ, or where only the latter is known, the publication date should only be specified for the catalog record. Notice that the W3C PROV Ontology allows describing further provenance information such as the details of the process and the agent involved in a particular change to a dataset." + }, { + "@language" : "el", + "@value" : "Αυτή η κλάση είναι προαιρετική και δεν χρησιμοποιείται από όλους τους καταλόγους. Υπάρχει για τις περιπτώσεις καταλόγων όπου γίνεται διαχωρισμός μεταξύ των μεταδεδομένων για το σύνολο των δεδομένων και των μεταδεδομένων για την καταγραφή του συνόλου δεδομένων εντός του καταλόγου. Για παράδειγμα, η ιδιότητα της ημερομηνίας δημοσίευσης του συνόλου δεδομένων δείχνει την ημερομηνία κατά την οποία οι πληροφορίες έγιναν διαθέσιμες από τον φορέα δημοσίευσης, ενώ η ημερομηνία δημοσίευσης της καταγραφής του καταλόγου δείχνει την ημερομηνία που το σύνολο δεδομένων προστέθηκε στον κατάλογο. Σε περιπτώσεις που οι δύο ημερομηνίες διαφέρουν, ή που μόνο η τελευταία είναι γνωστή, η ημερομηνία δημοσίευσης θα πρέπει να δίνεται για την καταγραφή του καταλόγου. Να σημειωθεί πως η οντολογία W3C PROV επιτρέπει την περιγραφή επιπλέον πληροφοριών ιστορικού όπως λεπτομέρειες για τη διαδικασία και τον δράστη που εμπλέκονται σε μία συγκεκριμένη αλλαγή εντός του συνόλου δεδομένων." + }, { + "@language" : "da", + "@value" : "Denne klasse er valgfri og ikke alle kataloger vil anvende denne klasse. Den kan anvendes i de kataloger hvor der skelnes mellem metadata om datasættet eller datatjenesten og metadata om selve posten til registreringen af datasættet eller datatjenesten i kataloget. Udgivelsesdatoen for datasættet afspejler for eksempel den dato hvor informationerne oprindeligt blev gjort tilgængelige af udgiveren, hvorimod udgivelsesdatoen for katalogposten er den dato hvor datasættet blev føjet til kataloget. I de tilfælde hvor de to datoer er forskellige eller hvor blot sidstnævnte er kendt, bør udgivelsesdatoen kun angives for katalogposten. Bemærk at W3Cs PROV ontologi gør til muligt at tilføje yderligere proveniensoplysninger eksempelvis om processen eller aktøren involveret i en given ændring af datasættet." + }, { + "@language" : "fr", + "@value" : "C'est une classe facultative et tous les catalogues ne l'utiliseront pas. Cette classe existe pour les catalogues\tayant une distinction entre les métadonnées sur le jeu de données et les métadonnées sur une entrée du jeu de données dans le catalogue." + } ] + }, { + "@id" : "dcat:DataService", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A site or end-point providing operations related to the discovery of, access to, or processing functions on, data or related resources." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod poskytující operace související s hledáním, přistupem k, či výkonem funkcí na datech či souvisejících zdrojích." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der udstiller operationer relateret til opdagelse af, adgang til eller behandlende funktioner på data eller relaterede ressourcer." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que provee operaciones relacionadas a funciones de descubrimiento, acceso, o procesamiento de datos o recursos relacionados." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che fornisce operazioni relative alla scoperta, all'accesso o all'elaborazione di funzioni su dati o risorse correlate." + } ], + "rdfs:label" : [ { + "@language" : "it", + "@value" : "Servizio di dati" + }, { + "@language" : "en", + "@value" : "Data service" + }, { + "@language" : "es", + "@value" : "Servicio de datos" + }, { + "@language" : "da", + "@value" : "Datatjeneste" + } ], + "subClassOf" : [ "dctype:Service", "dcat:Resource" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "Dataservice" + }, + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse tilføjet i DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase añadida en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "Un sitio o end-point que provee operaciones relacionadas a funciones de descubrimiento, acceso, o procesamiento de datos o recursos relacionados." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod poskytující operace související s hledáním, přistupem k, či výkonem funkcí na datech či souvisejících zdrojích." + }, { + "@language" : "en", + "@value" : "A site or end-point providing operations related to the discovery of, access to, or processing functions on, data or related resources." + }, { + "@language" : "da", + "@value" : "Et site eller endpoint der udstiller operationer relateret til opdagelse af, adgang til eller behandlende funktioner på data eller relaterede ressourcer." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che fornisce operazioni relative alla scoperta, all'accesso o all'elaborazione di funzioni su dati o risorse correlate." + } ], + "skos:scopeNote" : [ { + "@language" : "cs", + "@value" : "Pokud je dcat:DataService navázána na jednu či více Datových sad, jsou tyto indikovány vlstností dcat:servesDataset." + }, { + "@language" : "es", + "@value" : "El tipo de servicio puede indicarse usando la propiedad dct:type. Su valor puede provenir de un vocabulario controlado, como por ejemplo el vocabulario de servicios de datos espaciales de INSPIRE." + }, { + "@language" : "da", + "@value" : "Hvis en dcat:DataService er bundet til en eller flere specifikke datasæt kan dette indikeres ved hjælp af egenskaben dcat:servesDataset. " + }, { + "@language" : "cs", + "@value" : "Druh služby může být indikován vlastností dct:type. Její hodnota může být z řízeného slovníku, kterým je například slovník typů prostorových datových služeb INSPIRE." + }, { + "@language" : "en", + "@value" : "If a dcat:DataService is bound to one or more specified Datasets, they are indicated by the dcat:servesDataset property." + }, { + "@language" : "es", + "@value" : "Si un dcat:DataService está asociado con uno o más conjuntos de datos especificados, dichos conjuntos de datos pueden indicarse con la propiedad dcat:servesDataset." + }, { + "@language" : "it", + "@value" : "Il tipo di servizio può essere indicato usando la proprietà dct:type. Il suo valore può essere preso da un vocabolario controllato come il vocabolario dei tipi di servizi per dati spaziali di INSPIRE." + }, { + "@language" : "da", + "@value" : "Datatjenestetypen kan indikeres ved hjælp af egenskaben dct:type. Værdien kan tages fra kontrollerede udfaldsrum såsom INSPIRE spatial data service vocabulary." + }, { + "@language" : "en", + "@value" : "The kind of service can be indicated using the dct:type property. Its value may be taken from a controlled vocabulary such as the INSPIRE spatial data service type vocabulary." + }, { + "@language" : "it", + "@value" : "Se un dcat:DataService è associato a uno o più Dataset specificati, questi sono indicati dalla proprietà dcat:serveDataset." + } ] + }, { + "@id" : "dcat:Dataset", + "@type" : [ "rdfs:Class", "owl:Class" ], + "rdfs:comment" : [ { + "@language" : "ja", + "@value" : "1つのエージェントによって公開またはキュレートされ、1つ以上の形式でアクセスまたはダウンロードできるデータの集合。" + }, { + "@language" : "it", + "@value" : "Raccolta di dati, pubblicati o curati da un'unica fonte, disponibili per l'accesso o il download in uno o più formati." + }, { + "@language" : "el", + "@value" : "Μία συλλογή από δεδομένα, δημοσιευμένη ή επιμελημένη από μία και μόνο πηγή, διαθέσιμη δε προς πρόσβαση ή μεταφόρτωση σε μία ή περισσότερες μορφές." + }, { + "@language" : "ar", + "@value" : "قائمة بيانات منشورة أو مجموعة من قبل مصدر ما و متاح الوصول إليها أو تحميلها" + }, { + "@language" : "en", + "@value" : "A collection of data, published or curated by a single source, and available for access or download in one or more representations." + }, { + "@language" : "fr", + "@value" : "Une collection de données, publiée ou élaborée par une seule source, et disponible pour accès ou téléchargement dans un ou plusieurs formats." + }, { + "@language" : "cs", + "@value" : "Kolekce dat poskytovaná či řízená jedním zdrojem, která je k dispozici pro přístup či stažení v jednom či více formátech." + }, { + "@language" : "es", + "@value" : "Una colección de datos, publicados o conservados por una única fuente, y disponibles para ser accedidos o descargados en uno o más formatos." + }, { + "@language" : "da", + "@value" : "En samling af data, udgivet eller udvalgt og arrangeret af en enkelt kilde og som er til råde for adgang til eller download af i en eller flere repræsentationer." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "データセット" + }, { + "@language" : "en", + "@value" : "Dataset" + }, { + "@language" : "it", + "@value" : "Dataset" + }, { + "@language" : "ar", + "@value" : "قائمة بيانات" + }, { + "@language" : "es", + "@value" : "Conjunto de datos" + }, { + "@language" : "el", + "@value" : "Σύνολο Δεδομένων" + }, { + "@language" : "fr", + "@value" : "Jeu de données" + }, { + "@language" : "cs", + "@value" : "Datová sada" + }, { + "@language" : "da", + "@value" : "Datasæt" + } ], + "subClassOf" : "dcat:Resource", + "skos:altLabel" : { + "@language" : "da", + "@value" : "Datasamling" + }, + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "2018-02 - subklasse af dctype:Dataset fjernet da scope af dcat:Dataset omfatter flere forskellige typer fra dctype-vokabularet." + }, { + "@language" : "cs", + "@value" : "2018-02 - odstraněno tvrzení o podtřídě dctype:Dataset, jelikož rozsah dcat:Dataset zahrnuje několik dalších typů ze slovníku dctype." + }, { + "@language" : "en", + "@value" : "2018-02 - subclass of dctype:Dataset removed because scope of dcat:Dataset includes several other types from the dctype vocabulary." + }, { + "@language" : "es", + "@value" : "2018-02 - se eliminó el axioma de subclase con dctype:Dataset porque el alcance de dcat:Dataset incluye muchos otros tipos del vocabulario dctype." + }, { + "@language" : "it", + "@value" : "2018-02 - sottoclasse di dctype:Dataset rimosso perché l'ambito di dcat:Dataset include diversi altri tipi dal vocabolario dctype." + } ], + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Une collection de données, publiée ou élaborée par une seule source, et disponible pour accès ou téléchargement dans un ou plusieurs formats." + }, { + "@language" : "ar", + "@value" : "قائمة بيانات منشورة أو مجموعة من قبل مصدر ما و متاح الوصول إليها أو تحميلها" + }, { + "@language" : "es", + "@value" : "Una colección de datos, publicados o conservados por una única fuente, y disponibles para ser accedidos o descargados en uno o más formatos." + }, { + "@language" : "it", + "@value" : "Raccolta di dati, pubblicati o curati da un'unica fonte, disponibili per l'accesso o il download in uno o più formati." + }, { + "@language" : "cs", + "@value" : "Kolekce dat poskytovaná či řízená jedním zdrojem, která je k dispozici pro přístup či stažení v jednom či více formátech." + }, { + "@language" : "da", + "@value" : "En samling a data, udgivet eller udvalgt og arrangeret af en enkelt kilde og som der er adgang til i en eller flere repræsentationer." + }, { + "@language" : "ja", + "@value" : "1つのエージェントによって公開またはキュレートされ、1つ以上の形式でアクセスまたはダウンロードできるデータの集合。" + }, { + "@language" : "el", + "@value" : "Μία συλλογή από δεδομένα, δημοσιευμένη ή επιμελημένη από μία και μόνο πηγή, διαθέσιμη δε προς πρόσβαση ή μεταφόρτωση σε μία ή περισσότερες μορφές." + }, { + "@language" : "en", + "@value" : "A collection of data, published or curated by a single source, and available for access or download in one or more represenations." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "2020-03-16 A new scopenote added and need to be translated" + }, + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa classe rappresenta il dataset come pubblicato dall’editore. Nel caso in cui sia necessario operare una distinzione fra i metadati originali del dataset e il record dei metadati ad esso associato nel catalogo (ad esempio, per distinguere la data di modifica del dataset da quella del dataset nel catalogo) si può impiegare la classe catalog record." + }, { + "@language" : "fr", + "@value" : "Cette classe représente le jeu de données publié par le fournisseur de données. Dans les cas où une distinction est nécessaire entre le jeu de donénes et son entrée dans le catalogue, la classe registre de données peut être utilisée pour ce dernier." + }, { + "@language" : "es", + "@value" : "Esta clase representa el conjunto de datos publicados. En los casos donde es necesario distinguir entre el conjunto de datos y su entrada en el catálogo de datos, se debe utilizar la clase 'registro del catálogo'." + }, { + "@language" : "el", + "@value" : "Η κλάση αυτή αναπαριστά το σύνολο δεδομένων αυτό καθ'εαυτό, όπως έχει δημοσιευθεί από τον εκδότη. Σε περιπτώσεις όπου είναι απαραίτητος ο διαχωρισμός μεταξύ του συνόλου δεδομένων και της καταγραφής αυτού στον κατάλογο (γιατί μεταδεδομένα όπως η ημερομηνία αλλαγής και ο συντηρητής μπορεί να διαφέρουν) η κλάση της καταγραφής καταλόγου μπορεί να χρησιμοποιηθεί για το τελευταίο." + }, { + "@language" : "en", + "@value" : "This class represents the actual dataset as published by the dataset provider. In cases where a distinction between the actual dataset and its entry in the catalog is necessary (because metadata such as modification date and maintainer might differ), the catalog record class can be used for the latter." + }, { + "@language" : "cs", + "@value" : "Tato třída reprezentuje datovou sadu tak, jak je publikována poskytovatelem dat. V případě potřeby rozlišení datové sady a jejího katalogizačního záznamu (jelikož metadata jako datum modifikace se mohou lišit) pro něj může být použita třída \"katalogizační záznam\"." + }, { + "@language" : "it", + "@value" : "Questa classe descrive il dataset dal punto di vista concettuale. Possono essere disponibili una o più rappresentazioni, con diversi layout e formati schematici o serializzazioni." + }, { + "@language" : "en", + "@value" : "This class describes the conceptual dataset. One or more representations might be available, with differing schematic layouts and formats or serializations." + }, { + "@language" : "ja", + "@value" : "このクラスは、データセットの公開者が公開する実際のデータセットを表わします。カタログ内の実際のデータセットとそのエントリーとの区別が必要な場合(修正日と維持者などのメタデータが異なるかもしれないので)は、後者にcatalog recordというクラスを使用できます。" + }, { + "@language" : "en", + "@value" : "The notion of dataset in DCAT is broad and inclusive, with the intention of accommodating resource types arising from all communities. Data comes in many forms including numbers, text, pixels, imagery, sound and other multi-media, and potentially other types, any of which might be collected into a dataset." + }, { + "@language" : "da", + "@value" : "Denne klasse beskriver det konceptuelle datasæt. En eller flere repræsentationer kan være tilgængelige med forskellige skematiske opsætninger, formater eller serialiseringer." + }, { + "@language" : "da", + "@value" : "Denne klasse repræsenterer det konkrete datasæt som det udgives af datasætleverandøren. I de tilfælde hvor det er nødvendigt at skelne mellem det konkrete datasæt og dets registrering i kataloget (fordi metadata såsom ændringsdato og vedligeholder er forskellige), så kan klassen katalogpost anvendes. " + } ] + }, { + "@id" : "dcat:Distribution", + "@type" : [ "owl:Class", "rdfs:Class" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "En specifik repræsentation af et datasæt. Et datasæt kan være tilgængelig i mange serialiseringer der kan variere på forskellige vis, herunder sprog, medietype eller format, systemorganisering, tidslig- og geografisk opløsning, detaljeringsniveau eller profiler (der kan specificere en eller flere af ovenstående)." + }, { + "@language" : "fr", + "@value" : "Représente une forme spécifique d'un jeu de données. Caque jeu de données peut être disponible sous différentes formes, celles-ci pouvant représenter différents formats du jeu de données ou différents endpoint. Des exemples de distribution sont des fichirs CSV, des API ou des flux RSS." + }, { + "@language" : "el", + "@value" : "Αναπαριστά μία συγκεκριμένη διαθέσιμη μορφή ενός συνόλου δεδομένων. Κάθε σύνολο δεδομενων μπορεί να είναι διαθέσιμο σε διαφορετικές μορφές, οι μορφές αυτές μπορεί να αναπαριστούν διαφορετικές μορφές αρχείων ή διαφορετικά σημεία διάθεσης. Παραδείγματα διανομών συμπεριλαμβάνουν ένα μεταφορτώσιμο αρχείο μορφής CSV, ένα API ή ένα RSS feed." + }, { + "@language" : "ar", + "@value" : "شكل محدد لقائمة البيانات يمكن الوصول إليه. قائمة بيانات ما يمكن أن تكون متاحه باشكال و أنواع متعددة. ملف يمكن تحميله أو واجهة برمجية يمكن من خلالها الوصول إلى البيانات هي أمثلة على ذلك." + }, { + "@language" : "cs", + "@value" : "Konkrétní reprezentace datové sady. Datová sada může být dostupná v různých serializacích, které se mohou navzájem lišit různými způsoby, mimo jiné přirozeným jazykem, media-typem či formátem, schematickou organizací, časovým a prostorovým rozlišením, úrovní detailu či profily (které mohou specifikovat některé či všechny tyto rozdíly)." + }, { + "@language" : "ja", + "@value" : "データセットの特定の利用可能な形式を表わします。各データセットは、異なる形式で利用できることがあり、これらの形式は、データセットの異なる形式や、異なるエンドポイントを表わす可能性があります。配信の例には、ダウンロード可能なCSVファイル、API、RSSフィードが含まれます。" + }, { + "@language" : "it", + "@value" : "Rappresenta una forma disponibile e specifica del dataset. Ciascun dataset può essere disponibile in forme differenti, che possono rappresentare formati diversi o diversi punti di accesso per un dataset. Esempi di distribuzioni sono un file CSV scaricabile, una API o un RSS feed." + }, { + "@language" : "en", + "@value" : "A specific representation of a dataset. A dataset might be available in multiple serializations that may differ in various ways, including natural language, media-type or format, schematic organization, temporal and spatial resolution, level of detail or profiles (which might specify any or all of the above)." + }, { + "@language" : "es", + "@value" : "Una representación específica de los datos. Cada conjunto de datos puede estar disponible en formas diferentes, las cuáles pueden variar en distintas formas, incluyendo el idioma, 'media-type' o formato, organización esquemática, resolución temporal y espacial, nivel de detalle o perfiles (que pueden especificar cualquiera o todas las diferencias anteriores)." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ar", + "@value" : "التوزيع" + }, { + "@language" : "el", + "@value" : "Διανομή" + }, { + "@language" : "cs", + "@value" : "Distribuce" + }, { + "@language" : "it", + "@value" : "Distribuzione" + }, { + "@language" : "ja", + "@value" : "配信" + }, { + "@language" : "en", + "@value" : "Distribution" + }, { + "@language" : "fr", + "@value" : "Distribution" + }, { + "@language" : "da", + "@value" : "Distribution" + }, { + "@language" : "es", + "@value" : "Distribución" + } ], + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "Datamanifestation" + }, { + "@language" : "da", + "@value" : "Datarepræsentation" + }, { + "@language" : "da", + "@value" : "Dataudstilling" + }, { + "@language" : "da", + "@value" : "Datadistribution" + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Konkrétní reprezentace datové sady. Datová sada může být dostupná v různých serializacích, které se mohou navzájem lišit různými způsoby, mimo jiné přirozeným jazykem, media-typem či formátem, schematickou organizací, časovým a prostorovým rozlišením, úrovní detailu či profily (které mohou specifikovat některé či všechny tyto rozdíly)." + }, { + "@language" : "it", + "@value" : "Rappresenta una forma disponibile e specifica del dataset. Ciascun dataset può essere disponibile in forme differenti, che possono rappresentare formati diversi o diversi punti di accesso per un dataset. Esempi di distribuzioni sono un file CSV scaricabile, una API o un RSS feed." + }, { + "@language" : "es", + "@value" : "Una representación específica de los datos. Cada conjunto de datos puede estar disponible en formas diferentes, las cuáles pueden variar en distintas formas, incluyendo el idioma, 'media-type' o formato, organización esquemática, resolución temporal y espacial, nivel de detalle o perfiles (que pueden especificar cualquiera o todas las diferencias anteriores)." + }, { + "@language" : "fr", + "@value" : "Représente une forme spécifique d'un jeu de données. Caque jeu de données peut être disponible sous différentes formes, celles-ci pouvant représenter différents formats du jeu de données ou différents endpoint. Des exemples de distribution sont des fichirs CSV, des API ou des flux RSS." + }, { + "@language" : "en", + "@value" : "A specific representation of a dataset. A dataset might be available in multiple serializations that may differ in various ways, including natural language, media-type or format, schematic organization, temporal and spatial resolution, level of detail or profiles (which might specify any or all of the above)." + }, { + "@language" : "el", + "@value" : "Αναπαριστά μία συγκεκριμένη διαθέσιμη μορφή ενός συνόλου δεδομένων. Κάθε σύνολο δεδομενων μπορεί να είναι διαθέσιμο σε διαφορετικές μορφές, οι μορφές αυτές μπορεί να αναπαριστούν διαφορετικές μορφές αρχείων ή διαφορετικά σημεία διάθεσης. Παραδείγματα διανομών συμπεριλαμβάνουν ένα μεταφορτώσιμο αρχείο μορφής CSV, ένα API ή ένα RSS feed." + }, { + "@language" : "ja", + "@value" : "データセットの特定の利用可能な形式を表わします。各データセットは、異なる形式で利用できることがあり、これらの形式は、データセットの異なる形式や、異なるエンドポイントを表わす可能性があります。配信の例には、ダウンロード可能なCSVファイル、API、RSSフィードが含まれます。" + }, { + "@language" : "ar", + "@value" : "شكل محدد لقائمة البيانات يمكن الوصول إليه. قائمة بيانات ما يمكن أن تكون متاحه باشكال و أنواع متعددة. ملف يمكن تحميله أو واجهة برمجية يمكن من خلالها الوصول إلى البيانات هي أمثلة على ذلك." + }, { + "@language" : "da", + "@value" : "En specifik repræsentation af et datasæt. Et datasæt kan være tilgængelig i mange serialiseringer der kan variere på forskellige vis, herunder sprog, medietype eller format, systemorganisering, tidslig- og geografisk opløsning, detaljeringsniveau eller profiler (der kan specificere en eller flere af ovenstående)." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Esta clase representa una disponibilidad general de un conjunto de datos, e implica que no existe información acerca del método de acceso real a los datos, i.e., si es un enlace de descarga directa o a través de una página Web." + }, { + "@language" : "ja", + "@value" : "これは、データセットの一般的な利用可能性を表わし、データの実際のアクセス方式に関する情報(つまり、直接ダウンロードなのか、APIなのか、ウェブページを介したものなのか)を意味しません。dcat:downloadURLプロパティーの使用は、直接ダウンロード可能な配信を意味します。" + }, { + "@language" : "fr", + "@value" : "Ceci représente une disponibilité générale du jeu de données, et implique qu'il n'existe pas d'information sur la méthode d'accès réelle des données, par exple, si c'est un lien de téléchargement direct ou à travers une page Web." + }, { + "@language" : "da", + "@value" : "Denne klasse repræsenterer datasættets overordnede tilgængelighed og giver ikke oplysninger om hvilken metode der kan anvendes til at få adgang til data, dvs. om adgang til datasættet realiseres ved direkte download, API eller via et websted. Anvendelsen af egenskaben dcat:downloadURL indikerer at distributionen kan downloades direkte." + }, { + "@language" : "el", + "@value" : "Αυτό αναπαριστά μία γενική διαθεσιμότητα ενός συνόλου δεδομένων και δεν υπονοεί τίποτα περί του πραγματικού τρόπου πρόσβασης στα δεδομένα, αν είναι άμεσα μεταφορτώσιμα, μέσω API ή μέσω μίας ιστοσελίδας. Η χρήση της ιδιότητας dcat:downloadURL δείχνει μόνο άμεσα μεταφορτώσιμες διανομές." + }, { + "@language" : "en", + "@value" : "This represents a general availability of a dataset it implies no information about the actual access method of the data, i.e. whether by direct download, API, or through a Web page. The use of dcat:downloadURL property indicates directly downloadable distributions." + }, { + "@language" : "cs", + "@value" : "Toto popisuje obecnou dostupnost datové sady. Neimplikuje žádnou informaci o skutečné metodě přístupu k datům, tj. zda jsou přímo ke stažení, skrze API či přes webovou stránku. Použití vlastnosti dcat:downloadURL indikuje přímo stažitelné distribuce." + }, { + "@language" : "it", + "@value" : "Questa classe rappresenta una disponibilità generale di un dataset e non implica alcuna informazione sul metodo di accesso effettivo ai dati, ad esempio se si tratta di un accesso a download diretto, API, o attraverso una pagina Web. L'utilizzo della proprietà dcat:downloadURL indica distribuzioni direttamente scaricabili." + } ] + }, { + "@id" : "dcat:Relationship", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una clase de asociación para adjuntar información adicional a una relación entre recursos DCAT." + }, { + "@language" : "cs", + "@value" : "Asociační třída pro připojení dodatečných informací ke vztahu mezi zdroji DCAT." + }, { + "@language" : "en", + "@value" : "An association class for attaching additional information to a relationship between DCAT Resources." + }, { + "@language" : "da", + "@value" : "En associationsklasse til brug for tilknytning af yderligere information til en relation mellem DCAT-ressourcer." + }, { + "@language" : "it", + "@value" : "Una classe di associazione per il collegamento di informazioni aggiuntive a una relazione tra le risorse DCAT." + } ], + "rdfs:label" : [ { + "@language" : "it", + "@value" : "Relazione" + }, { + "@language" : "da", + "@value" : "Relation" + }, { + "@language" : "cs", + "@value" : "Vztah" + }, { + "@language" : "es", + "@value" : "Relación" + }, { + "@language" : "en", + "@value" : "Relationship" + } ], + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase añadida en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "An association class for attaching additional information to a relationship between DCAT Resources." + }, { + "@language" : "it", + "@value" : "Una classe di associazione per il collegamento di informazioni aggiuntive a una relazione tra le risorse DCAT." + }, { + "@language" : "da", + "@value" : "En associationsklasse til brug for tilknytning af yderligere information til en relation mellem DCAT-ressourcer." + }, { + "@language" : "cs", + "@value" : "Asociační třída pro připojení dodatečných informací ke vztahu mezi zdroji DCAT." + }, { + "@language" : "es", + "@value" : "Una clase de asociación para adjuntar información adicional a una relación entre recursos DCAT." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Se usa para caracterizar la relación entre conjuntos de datos, y potencialmente otros recursos, donde la naturaleza de la relación se conoce pero no está caracterizada adecuadamente con propiedades del estándar 'Dublin Core' (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "en", + "@value" : "Use to characterize a relationship between datasets, and potentially other resources, where the nature of the relationship is known but is not adequately characterized by the standard Dublin Core properties (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "da", + "@value" : "Anvendes til at karakterisere en relation mellem datasæt, og potentielt andre ressourcer, hvor relationen er kendt men ikke tilstrækkeligt beskrevet af de standardiserede egenskaber i Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) eller PROV-O-egenskaber (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "cs", + "@value" : "Používá se pro charakterizaci vztahu mezi datovými sadami a případně i jinými zdroji, kde druh vztahu je sice znám, ale není přiměřeně charakterizován standardními vlastnostmi slovníku Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) či vlastnostmi slovníku PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "it", + "@value" : "Viene utilizzato per caratterizzare la relazione tra insiemi di dati, e potenzialmente altri tipi di risorse, nei casi in cui la natura della relazione è nota ma non adeguatamente caratterizzata dalle proprietà dello standard 'Dublin Core' (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:require, dct:isRequiredBy) o dalle propietà fornite da PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov: hadPrimarySource, prov:alternateOf, prov:specializationOf)." + } ] + }, { + "@id" : "dcat:Resource", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "Ressource udgivet eller udvalgt og arrangeret af en enkelt aktør." + }, { + "@language" : "es", + "@value" : "Recurso publicado o curado por un agente único." + }, { + "@language" : "it", + "@value" : "Risorsa pubblicata o curata da un singolo agente." + }, { + "@language" : "cs", + "@value" : "Zdroj publikovaný či řízený jediným činitelem." + }, { + "@language" : "en", + "@value" : "Resource published or curated by a single agent." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "Katalogizovaný zdroj" + }, { + "@language" : "es", + "@value" : "Recurso catalogado" + }, { + "@language" : "it", + "@value" : "Risorsa catalogata" + }, { + "@language" : "da", + "@value" : "Katalogiseret ressource" + }, { + "@language" : "en", + "@value" : "Catalogued resource" + } ], + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "Resource published or curated by a single agent." + }, { + "@language" : "it", + "@value" : "Risorsa pubblicata o curata da un singolo agente." + }, { + "@language" : "da", + "@value" : "Ressource udgivet eller udvalgt og arrangeret af en enkelt aktør." + }, { + "@language" : "es", + "@value" : "Recurso publicado o curado por un agente único." + }, { + "@language" : "cs", + "@value" : "Zdroj publikovaný či řízený jediným činitelem." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "dcat:Resource es un punto de extensión que permite la definición de cualquier tipo de catálogo. Se pueden definir subclases adicionales en perfil de DCAT o una aplicación para catálogos de otro tipo de recursos." + }, { + "@language" : "cs", + "@value" : "dcat:Resource je bod pro rozšíření umožňující definici různých druhů katalogů. Další podtřídy lze definovat v profilech DCAT či aplikacích pro katalogy zdrojů jiných druhů." + }, { + "@language" : "da", + "@value" : "Klassen for alle katalogiserede ressourcer, den overordnede klasse for dcat:Dataset, dcat:DataService, dcat:Catalog og enhvert medlem af et dcat:Catalog. Denne klasse bærer egenskaber der gælder alle katalogiserede ressourcer, herunder dataset og datatjenester. Det anbefales kraftigt at mere specifikke subklasser oprettes. Når der beskrives ressourcer der ikke er dcat:Dataset eller dcat:DataService, anbefales det at oprette passende subklasser af dcat:Resource eller at dcat:Resource anvendes sammen med egenskaben dct:type til opmærkning med en specifik typeangivelse." + }, { + "@language" : "cs", + "@value" : "Třída všech katalogizovaných zdrojů, nadtřída dcat:Dataset, dcat:DataService, dcat:Catalog a všech ostatních členů dcat:Catalog. Tato třída nese vlastnosti společné všem katalogizovaným zdrojům včetně datových sad a datových služeb. Je silně doporučeno používat specifičtější podtřídy, pokud je to možné. Při popisu zdroje, který není ani dcat:Dataset, ani dcat:DataService se doporučuje vytvořit odpovídající podtřídu dcat:Resrouce a nebo použít dcat:Resource s vlastností dct:type pro určení konkrétního typu." + }, { + "@language" : "it", + "@value" : "dcat:Resource è un punto di estensione che consente la definizione di qualsiasi tipo di catalogo. Sottoclassi aggiuntive possono essere definite in un profilo DCAT o in un'applicazione per cataloghi di altri tipi di risorse." + }, { + "@language" : "it", + "@value" : "La classe di tutte le risorse catalogate, la Superclasse di dcat:Dataset, dcat:DataService, dcat:Catalog e qualsiasi altro membro di dcat:Catalog. Questa classe porta proprietà comuni a tutte le risorse catalogate, inclusi set di dati e servizi dati. Si raccomanda vivamente di utilizzare una sottoclasse più specifica. Quando si descrive una risorsa che non è un dcat:Dataset o dcat:DataService, si raccomanda di creare una sottoclasse di dcat:Resource appropriata, o utilizzare dcat:Resource con la proprietà dct:type per indicare il tipo specifico." + }, { + "@language" : "en", + "@value" : "The class of all catalogued resources, the Superclass of dcat:Dataset, dcat:DataService, dcat:Catalog and any other member of a dcat:Catalog. This class carries properties common to all catalogued resources, including datasets and data services. It is strongly recommended to use a more specific sub-class. When describing a resource which is not a dcat:Dataset or dcat:DataService, it is recommended to create a suitable sub-class of dcat:Resource, or use dcat:Resource with the dct:type property to indicate the specific type." + }, { + "@language" : "es", + "@value" : "La clase de todos los recursos catalogados, la superclase de dcat:Dataset, dcat:DataService, dcat:Catalog y cualquier otro miembro de un dcat:Catalog. Esta clase tiene propiedades comunes a todos los recursos catalogados, incluyendo conjuntos de datos y servicios de datos. Se recomienda fuertemente que se use una clase más específica. Cuando se describe un recurso que no es un dcat:Dataset o dcat:DataService, se recomienda crear una sub-clase apropiada de dcat:Resource, o usar dcat:Resource con la propiedad dct:type to indicar el tipo específico." + }, { + "@language" : "da", + "@value" : "dcat:Resource er et udvidelsespunkt der tillader oprettelsen af enhver type af kataloger. Yderligere subklasser kan defineres i en DCAT-profil eller i en applikation til kataloger med andre typer af ressourcer." + }, { + "@language" : "en", + "@value" : "dcat:Resource is an extension point that enables the definition of any kind of catalog. Additional subclasses may be defined in a DCAT profile or application for catalogs of other kinds of resources." + } ] + }, { + "@id" : "dcat:Role", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Role je funkce zdroje či agenta ve vztahu k jinému zdroji, v kontextu přiřazení zdrojů či vztahů mezi zdroji." + }, { + "@language" : "es", + "@value" : "Un rol es la función de un recurso o agente con respecto a otro recuros, en el contexto de atribución del recurso o de las relaciones entre recursos." + }, { + "@language" : "en", + "@value" : "A role is the function of a resource or agent with respect to another resource, in the context of resource attribution or resource relationships." + }, { + "@language" : "da", + "@value" : "En rolle er den funktion en ressource eller aktør har i forhold til en anden ressource, i forbindelse med ressourcekreditering eller ressourcerelationer." + }, { + "@language" : "it", + "@value" : "Un ruolo è la funzione di una risorsa o di un agente rispetto ad un'altra risorsa, nel contesto dell'attribuzione delle risorse o delle relazioni tra risorse." + } ], + "rdfs:label" : [ { + "@language" : "da", + "@value" : "Rolle" + }, { + "@language" : "es", + "@value" : "Rol" + }, { + "@language" : "it", + "@value" : "Ruolo" + }, { + "@language" : "en", + "@value" : "Role" + }, { + "@language" : "cs", + "@value" : "Role" + } ], + "seeAlso" : "dcat:hadRole", + "subClassOf" : "skos:Concept", + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase agregada en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "Ny klasse tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Role je funkce zdroje či agenta ve vztahu k jinému zdroji, v kontextu přiřazení zdrojů či vztahů mezi zdroji." + }, { + "@language" : "en", + "@value" : "A role is the function of a resource or agent with respect to another resource, in the context of resource attribution or resource relationships." + }, { + "@language" : "it", + "@value" : "Un ruolo è la funzione di una risorsa o di un agente rispetto ad un'altra risorsa, nel contesto dell'attribuzione delle risorse o delle relazioni tra risorse." + }, { + "@language" : "es", + "@value" : "Un rol es la función de un recurso o agente con respecto a otro recuros, en el contexto de atribución del recurso o de las relaciones entre recursos." + }, { + "@language" : "da", + "@value" : "En rolle er den funktion en ressource eller aktør har i forhold til en anden ressource, i forbindelse med ressourcekreditering eller ressourcerelationer." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Introduced into DCAT to complement prov:Role (whose use is limited to roles in the context of an activity, as the range of prov:hadRole)." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT for at supplere prov:Role (hvis anvendelse er begrænset til roller i forbindelse med en aktivitet, som er rækkevidde for prov:hadRole)." + }, { + "@language" : "cs", + "@value" : "Přidáno do DCAT pro doplnění třídy prov:Role (jejíž užití je omezeno na role v kontextu aktivit, jakožto obor hodnot vlastnosti prov:hadRole)." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per completare prov:Role (il cui uso è limitato ai ruoli nel contesto di un'attività, in conseguenza alla definizione del codominio di prov:hadRole)." + }, { + "@language" : "es", + "@value" : "Incluída en DCAT para complementar prov:Role (cuyo uso está limitado a roles en el contexto de una actividad, ya que es el rango es prov:hadRole)." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Se usa en una relación cualificada para especificar el rol de una Entidad con respecto a otra Entidad. Se recomienda que los valores se administren como los valores de un vocabulario controlado de roles de entidad como por ejemplo: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; el esquema de metadatos de DataCite; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "Used in a qualified-attribution to specify the role of an Agent with respect to an Entity. It is recommended that the values be managed as a controlled vocabulary of agent roles, such as http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Anvendes i forbindelse med kvalificerede krediteringer til at angive aktørens rolle i forhold til en entitet. Det anbefales at værdierne styres som et kontrolleret udfaldsrum med aktørroller, såsom http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "en", + "@value" : "Used in a qualified-relation to specify the role of an Entity with respect to another Entity. It is recommended that the values be managed as a controlled vocabulary of entity roles such as: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Použito v kvalifikovaném přiřazení pro specifikaci role Agenta ve vztahu k Entitě. Je doporučeno množinu hodnot spravovat jako řízený slovník rolí agentů, jako například http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Se usa en una atribución cualificada para especificar el rol de un Agente con respecto a una Entidad. Se recomienda que los valores se administren como un vocabulario controlado de roles de agente, como por ejemplo http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "it", + "@value" : "Utilizzato in un'attribuzione qualificata per specificare il ruolo di un agente rispetto a un'entità. Si consiglia di attribuire i valori considerando un vocabolario controllato dei ruoli dell'agente, ad esempio http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Anvendes i forbindelse med kvalificerede relationer til at specificere en entitets rolle i forhold til en anden entitet. Det anbefales at værdierne styres med et kontrolleret udfaldsrum for for entitetsroller såsom: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "it", + "@value" : "Utilizzato in una relazione qualificata per specificare il ruolo di un'entità rispetto a un'altra entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di entità come ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, o MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Použito v kvalifikovaném vztahu pro specifikaci role Entity ve vztahu k jiné Entitě. Je doporučeno množinu hodnot spravovat jako řízený slovník rolí entit, jako například ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, či MARC relators https://id.loc.gov/vocabulary/relators." + } ] + }, { + "@id" : "dcat:accessService", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A site or end-point that gives access to the distribution of the dataset." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che dà accesso alla distribuzione del set di dati." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que da acceso a la distribución de un conjunto de datos." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod zpřístupňující distribuci datové sady." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der giver adgang til en repræsentation af datasættet." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "služba pro přístup k datům" + }, { + "@language" : "en", + "@value" : "data access service" + }, { + "@language" : "es", + "@value" : "servicio de acceso de datos" + }, { + "@language" : "da", + "@value" : "dataadgangstjeneste" + }, { + "@language" : "it", + "@value" : "servizio di accesso ai dati" + } ], + "range" : "dcat:DataService", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Umístění či přístupový bod zpřístupňující distribuci datové sady." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che dà accesso alla distribuzione del set di dati." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que da acceso a la distribución de un conjunto de datos." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der giver adgang til en repræsentation af datasættet." + }, { + "@language" : "en", + "@value" : "A site or end-point that gives access to the distribution of the dataset." + } ] + }, { + "@id" : "dcat:accessURL", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A URL of a resource that gives access to a distribution of the dataset. E.g. landing page, feed, SPARQL endpoint. Use for all cases except a simple download link, in which case downloadURL is preferred." + }, { + "@language" : "es", + "@value" : "Puede ser cualquier tipo de URL que de acceso a una distribución del conjunto de datos, e.g., página de destino, descarga, URL feed, punto de acceso SPARQL. Esta propriedad se debe usar cuando su catálogo de datos no tiene información sobre donde está o cuando no se puede descargar." + }, { + "@language" : "da", + "@value" : "En URL for en ressource som giver adgang til en repræsentation af datsættet. Fx destinationsside, feed, SPARQL-endpoint. Anvendes i alle sammenhænge undtagen til angivelse af et simpelt download link hvor anvendelse af egenskaben downloadURL foretrækkes." + }, { + "@language" : "cs", + "@value" : "URL zdroje, přes které je přístupná distribuce datové sady. Příkladem může být vstupní stránka, RSS kanál či SPARQL endpoint. Použijte ve všech případech kromě URL souboru ke stažení, pro které je lepší použít dcat:downloadURL." + }, { + "@language" : "el", + "@value" : "Μπορεί να είναι οποιουδήποτε είδους URL που δίνει πρόσβαση στη διανομή ενός συνόλου δεδομένων. Π.χ. ιστοσελίδα αρχικής πρόσβασης, μεταφόρτωση, feed URL, σημείο διάθεσης SPARQL. Να χρησιμοποιείται όταν ο κατάλογος δεν περιέχει πληροφορίες εαν πρόκειται ή όχι για μεταφορτώσιμο αρχείο." + }, { + "@language" : "it", + "@value" : "Un URL di una risorsa che consente di accedere a una distribuzione del set di dati. Per esempio, pagina di destinazione, feed, endpoint SPARQL. Da utilizzare per tutti i casi, tranne quando si tratta di un semplice link per il download nel qual caso è preferito downloadURL." + }, { + "@language" : "ja", + "@value" : "データセットの配信にアクセス権を与えるランディング・ページ、フィード、SPARQLエンドポイント、その他の種類の資源。" + }, { + "@language" : "fr", + "@value" : "Ceci peut être tout type d'URL qui donne accès à une distribution du jeu de données. Par exemple, un lien à une page HTML contenant un lien au jeu de données, un Flux RSS, un point d'accès SPARQL. Utilisez le lorsque votre catalogue ne contient pas d'information sur quoi il est ou quand ce n'est pas téléchargeable." + }, { + "@language" : "ar", + "@value" : "أي رابط يتيح الوصول إلى البيانات. إذا كان الرابط هو ربط مباشر لملف يمكن تحميله استخدم الخاصية downloadURL" + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "přístupová adresa" + }, { + "@language" : "fr", + "@value" : "URL d'accès" + }, { + "@language" : "ja", + "@value" : "アクセスURL" + }, { + "@language" : "en", + "@value" : "access address" + }, { + "@language" : "el", + "@value" : "URL πρόσβασης" + }, { + "@language" : "ar", + "@value" : "رابط وصول" + }, { + "@language" : "es", + "@value" : "URL de acceso" + }, { + "@language" : "it", + "@value" : "indirizzo di accesso" + }, { + "@language" : "da", + "@value" : "adgangsadresse" + } ], + "range" : "rdfs:Resource", + "propertyChainAxiom" : { + "@list" : [ "dcat:accessService", "dcat:endpointURL" ] + }, + "skos:altLabel" : { + "@language" : "da", + "@value" : "adgangsURL" + }, + "skos:definition" : [ { + "@language" : "da", + "@value" : "En URL for en ressource som giver adgang til en repræsentation af datsættet. Fx destinationsside, feed, SPARQL-endpoint. Anvendes i alle sammenhænge undtagen til angivelse af et simpelt download link hvor anvendelse af egenskaben downloadURL foretrækkes." + }, { + "@language" : "ja", + "@value" : "データセットの配信にアクセス権を与えるランディング・ページ、フィード、SPARQLエンドポイント、その他の種類の資源。" + }, { + "@language" : "en", + "@value" : "A URL of a resource that gives access to a distribution of the dataset. E.g. landing page, feed, SPARQL endpoint. Use for all cases except a simple download link, in which case downloadURL is preferred." + }, { + "@language" : "fr", + "@value" : "Ceci peut être tout type d'URL qui donne accès à une distribution du jeu de données. Par exemple, un lien à une page HTML contenant un lien au jeu de données, un Flux RSS, un point d'accès SPARQL. Utilisez le lorsque votre catalogue ne contient pas d'information sur quoi il est ou quand ce n'est pas téléchargeable." + }, { + "@language" : "it", + "@value" : "Un URL di una risorsa che consente di accedere a una distribuzione del set di dati. Per esempio, pagina di destinazione, feed, endpoint SPARQL. Da utilizzare per tutti i casi, tranne quando si tratta di un semplice link per il download nel qual caso è preferito downloadURL." + }, { + "@language" : "el", + "@value" : "Μπορεί να είναι οποιουδήποτε είδους URL που δίνει πρόσβαση στη διανομή ενός συνόλου δεδομένων. Π.χ. ιστοσελίδα αρχικής πρόσβασης, μεταφόρτωση, feed URL, σημείο διάθεσης SPARQL. Να χρησιμοποιείται όταν ο κατάλογος δεν περιέχει πληροφορίες εαν πρόκειται ή όχι για μεταφορτώσιμο αρχείο." + }, { + "@language" : "es", + "@value" : "Puede ser cualquier tipo de URL que de acceso a una distribución del conjunto de datos, e.g., página de destino, descarga, URL feed, punto de acceso SPARQL. Esta propriedad se debe usar cuando su catálogo de datos no tiene información sobre donde está o cuando no se puede descargar." + }, { + "@language" : "cs", + "@value" : "URL zdroje, přes které je přístupná distribuce datové sady. Příkladem může být vstupní stránka, RSS kanál či SPARQL endpoint. Použijte ve všech případech kromě URL souboru ke stažení, pro které je lepší použít dcat:downloadURL." + }, { + "@language" : "ar", + "@value" : "أي رابط يتيح الوصول إلى البيانات. إذا كان الرابط هو ربط مباشر لملف يمكن تحميله استخدم الخاصية downloadURL" + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "rdfs:label, rdfs:comment and skos:scopeNote have been modified. Non-english versions except for Italian must be updated." + }, { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, updated Italian and Czech translation provided, translations for other languages pending." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Se le distribuzioni sono accessibili solo attraverso una pagina web (ad esempio, gli URL per il download diretto non sono noti), allora il link della pagina web deve essere duplicato come accessURL sulla distribuzione." + }, { + "@language" : "da", + "@value" : "Hvis en eller flere distributioner kun er tilgængelige via en destinationsside (dvs. en URL til direkte download er ikke kendt), så bør destinationssidelinket gentages som adgangsadresse for distributionen." + }, { + "@language" : "cs", + "@value" : "Pokud jsou distribuce přístupné pouze přes vstupní stránku (tj. URL pro přímé stažení nejsou známa), pak by URL přístupové stránky mělo být duplikováno ve vlastnosti distribuce accessURL." + }, { + "@language" : "es", + "@value" : "El rango es una URL. Si la distribución es accesible solamente través de una página de destino (es decir, si no se conoce una URL de descarga directa), entonces el enlance a la página de destino debe ser duplicado como accessURL en la distribución." + }, { + "@language" : "el", + "@value" : "Η τιμή είναι ένα URL. Αν η/οι διανομή/ές είναι προσβάσιμη/ες μόνο μέσω μίας ιστοσελίδας αρχικής πρόσβασης (δηλαδή αν δεν υπάρχουν γνωστές διευθύνσεις άμεσης μεταφόρτωσης), τότε ο σύνδεσμος της ιστοσελίδας αρχικής πρόσβασης πρέπει να αναπαραχθεί ως accessURL σε μία διανομή." + }, { + "@language" : "fr", + "@value" : "La valeur est une URL. Si la distribution est accessible seulement au travers d'une page d'atterrissage (c-à-dire on n'ignore une URL de téléchargement direct), alors le lien à la page d'atterrissage doit être dupliqué comee accessURL sur la distribution." + }, { + "@language" : "ja", + "@value" : "確実にダウンロードでない場合や、ダウンロードかどうかが不明である場合は、downloadURLではなく、accessURLを用いてください。ランディング・ページを通じてしか配信にアクセスできない場合(つまり、直接的なダウンロードURLが不明)は、配信におけるaccessURLとしてランディング・ページのリンクをコピーすべきです(SHOULD)。" + }, { + "@language" : "en", + "@value" : "If the distribution(s) are accessible only through a landing page (i.e. direct download URLs are not known), then the landing page link should be duplicated as accessURL on a distribution." + } ] + }, { + "@id" : "dcat:bbox", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:Location", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "bounding box" + }, { + "@language" : "en", + "@value" : "bounding box" + }, { + "@language" : "es", + "@value" : "cuadro delimitador" + }, { + "@language" : "cs", + "@value" : "ohraničení oblasti" + }, { + "@language" : "it", + "@value" : "quadro di delimitazione" + } ], + "range" : "rdfs:Literal", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Propiedad nueva agregada en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Den geografiske omskrevne firkant af en ressource." + }, { + "@language" : "it", + "@value" : "Il riquadro di delimitazione geografica di una risorsa." + }, { + "@language" : "cs", + "@value" : "Ohraničení geografické oblasti zdroje." + }, { + "@language" : "es", + "@value" : "El cuadro delimitador geográfico para un recurso." + }, { + "@language" : "en", + "@value" : "The geographic bounding box of a resource." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintas codificaciones geométricas. Por ejemplo, la geometría puede ser codificada como WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different geometry encodings. E.g., the geometry could be encoded with as WKT (geosparql:wktLiteral [GeoSPARQL]) or [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generica, con lo scopo di consentire diverse codifiche geometriche. Ad esempio, la geometria potrebbe essere codificata con WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé kódování geometrií. Geometrie by kupříkladu mohla být kódována jako WKT (geosparql:wktLiteral [GeoSPARQL]) či [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "da", + "@value" : "Rækkevidden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige kodninger af geometrier. Geometrien kan eksempelvis repræsenteres som WKT (geosparql:asWKT [GeoSPARQL]) eller [GML] (geosparql:asGML [GeoSPARQL])." + } ] + }, { + "@id" : "dcat:byteSize", + "@type" : [ "owl:DatatypeProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "ar", + "@value" : "الحجم بالبايتات " + }, { + "@language" : "el", + "@value" : "Το μέγεθος μιας διανομής σε bytes." + }, { + "@language" : "en", + "@value" : "The size of a distribution in bytes." + }, { + "@language" : "cs", + "@value" : "Velikost distribuce v bajtech." + }, { + "@language" : "ja", + "@value" : "バイトによる配信のサイズ。" + }, { + "@language" : "fr", + "@value" : "La taille de la distribution en octects" + }, { + "@language" : "da", + "@value" : "Størrelsen af en distributionen angivet i bytes." + }, { + "@language" : "it", + "@value" : "La dimensione di una distribuzione in byte." + }, { + "@language" : "es", + "@value" : "El tamaño de una distribución en bytes." + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "el", + "@value" : "μέγεθος σε bytes" + }, { + "@language" : "cs", + "@value" : "velikost v bajtech" + }, { + "@language" : "en", + "@value" : "byte size" + }, { + "@language" : "es", + "@value" : "tamaño en bytes" + }, { + "@language" : "it", + "@value" : "dimensione in byte" + }, { + "@language" : "ar", + "@value" : "الحجم بالبايت" + }, { + "@language" : "ja", + "@value" : "バイト・サイズ" + }, { + "@language" : "fr", + "@value" : "taille en octects" + }, { + "@language" : "da", + "@value" : "bytestørrelse" + } ], + "range" : "rdfs:Literal", + "skos:definition" : [ { + "@language" : "el", + "@value" : "Το μέγεθος μιας διανομής σε bytes." + }, { + "@language" : "da", + "@value" : "Størrelsen af en distribution angivet i bytes." + }, { + "@language" : "ar", + "@value" : "الحجم بالبايتات " + }, { + "@language" : "es", + "@value" : "El tamaño de una distribución en bytes." + }, { + "@language" : "cs", + "@value" : "Velikost distribuce v bajtech." + }, { + "@language" : "it", + "@value" : "La dimensione di una distribuzione in byte." + }, { + "@language" : "en", + "@value" : "The size of a distribution in bytes." + }, { + "@language" : "fr", + "@value" : "La taille de la distribution en octects." + }, { + "@language" : "ja", + "@value" : "バイトによる配信のサイズ。" + } ], + "skos:scopeNote" : [ { + "@language" : "el", + "@value" : "Το μέγεθος σε bytes μπορεί να προσεγγιστεί όταν η ακριβής τιμή δεν είναι γνωστή. Η τιμή της dcat:byteSize θα πρέπει να δίνεται με τύπο δεδομένων xsd:decimal." + }, { + "@language" : "ar", + "@value" : "الحجم يمكن أن يكون تقريبي إذا كان الحجم الدقيق غير معروف" + }, { + "@language" : "da", + "@value" : "Bytestørrelsen kan approximeres hvis den præcise størrelse ikke er kendt. Værdien af dcat:byteSize bør angives som xsd:decimal." + }, { + "@language" : "cs", + "@value" : "Velikost v bajtech může být přibližná, pokud její přesná hodnota není známa. Literál s hodnotou dcat:byteSize by měl mít datový typ xsd:decimal." + }, { + "@language" : "es", + "@value" : "El tamaño en bytes puede ser aproximado cuando se desconoce el tamaño exacto. El valor literal de dcat:byteSize debe tener tipo 'xsd:decimal'." + }, { + "@language" : "ja", + "@value" : "正確なサイズが不明である場合、サイズは、バイトによる近似値を示すことができます。" + }, { + "@language" : "fr", + "@value" : "La taille en octects peut être approximative lorsque l'on ignore la taille réelle. La valeur littérale de dcat:byteSize doit être de type xsd:decimal." + }, { + "@language" : "en", + "@value" : "The size in bytes can be approximated when the precise size is not known. The literal value of dcat:byteSize should by typed as xsd:decimal." + }, { + "@language" : "it", + "@value" : "La dimensione in byte può essere approssimata quando non si conosce la dimensione precisa. Il valore di dcat:byteSize dovrebbe essere espresso come un xsd:decimal." + } ] + }, { + "@id" : "dcat:catalog", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Un catálogo cuyo contenido es de interés en el contexto del catálogo que está siendo descripto." + }, { + "@language" : "it", + "@value" : "Un catalogo i cui contenuti sono di interesse nel contesto di questo catalogo." + }, { + "@language" : "da", + "@value" : "Et katalog hvis indhold er relevant i forhold til det aktuelle katalog." + }, { + "@language" : "cs", + "@value" : "Katalog, jehož obsah je v kontextu tohoto katalogu zajímavý." + }, { + "@language" : "en", + "@value" : "A catalog whose contents are of interest in the context of this catalog." + } ], + "domain" : "dcat:Catalog", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "catálogo" + }, { + "@language" : "it", + "@value" : "catalogo" + }, { + "@language" : "da", + "@value" : "katalog" + }, { + "@language" : "cs", + "@value" : "katalog" + }, { + "@language" : "en", + "@value" : "catalog" + } ], + "range" : "dcat:Catalog", + "subPropertyOf" : [ "rdfs:member", "dct:hasPart" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "har delkatalog" + }, + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Un catalogo i cui contenuti sono di interesse nel contesto di questo catalogo." + }, { + "@language" : "cs", + "@value" : "Katalog, jehož obsah je v kontextu tohoto katalogu zajímavý." + }, { + "@language" : "da", + "@value" : "Et katalog hvis indhold er relevant i forhold til det aktuelle katalog." + }, { + "@language" : "es", + "@value" : "Un catálogo cuyo contenido es de interés en el contexto del catálogo que está siendo descripto." + }, { + "@language" : "en", + "@value" : "A catalog whose contents are of interest in the context of this catalog." + } ] + }, { + "@id" : "dcat:centroid", + "@type" : [ "owl:DatatypeProperty", "rdf:Property" ], + "domain" : "dct:Location", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "centroide" + }, { + "@language" : "it", + "@value" : "centroide" + }, { + "@language" : "en", + "@value" : "centroid" + }, { + "@language" : "cs", + "@value" : "centroid" + }, { + "@language" : "da", + "@value" : "geometrisk tyngdepunkt" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "centroide" + }, + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Il centro geografico (centroide) di una risorsa." + }, { + "@language" : "cs", + "@value" : "Geografický střed (centroid) zdroje." + }, { + "@language" : "da", + "@value" : "Det geometrisk tyngdepunkt (centroid) for en ressource." + }, { + "@language" : "es", + "@value" : "El centro geográfico (centroide) de un recurso." + }, { + "@language" : "en", + "@value" : "The geographic center (centroid) of a resource." + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Rækkevidden for denne egenskab er bevidst generisk definere med det formål at tillade forskellige geokodninger. Geometrien kan eksempelvis repræsenteres som WKT (geosparql:asWKT [GeoSPARQL]) eller [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different geometry encodings. E.g., the geometry could be encoded with as WKT (geosparql:wktLiteral [GeoSPARQL]) or [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé kódování geometrií. Geometrie by kupříkladu mohla být kódována jako WKT (geosparql:wktLiteral [GeoSPARQL]) či [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el objetivo de permitir distintas codificaciones geométricas. Por ejemplo, la geometría puede codificarse como WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generica, con lo scopo di consentire diverse codifiche geometriche. Ad esempio, la geometria potrebbe essere codificata con WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + } ] + }, { + "@id" : "dcat:compressFormat", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il formato di compressione della distribuzione nel quale i dati sono in forma compressa, ad es. per ridurre le dimensioni del file da scaricare." + }, { + "@language" : "cs", + "@value" : "Formát komprese souboru, ve kterém jsou data poskytována v komprimované podobě, např. ke snížení velikosti souboru ke stažení." + }, { + "@language" : "en", + "@value" : "The compression format of the distribution in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file." + }, { + "@language" : "da", + "@value" : "Kompressionsformatet for distributionen som indeholder data i et komprimeret format, fx for at reducere størrelsen af downloadfilen." + }, { + "@language" : "es", + "@value" : "El formato de la distribución en el que los datos están en forma comprimida, e.g. para reducir el tamaño del archivo a bajar." + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "https://www.w3.org/TR/vocab-dcat-2/", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "compression format" + }, { + "@language" : "da", + "@value" : "kompressionsformat" + }, { + "@language" : "es", + "@value" : "formato de compresión" + }, { + "@language" : "it", + "@value" : "formato di compressione" + }, { + "@language" : "cs", + "@value" : "formát komprese" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Kompressionsformatet for distributionen som indeholder data i et komprimeret format, fx for at reducere størrelsen af downloadfilen." + }, { + "@language" : "cs", + "@value" : "Formát komprese souboru, ve kterém jsou data poskytována v komprimované podobě, např. ke snížení velikosti souboru ke stažení." + }, { + "@language" : "es", + "@value" : "El formato de la distribución en el que los datos están en forma comprimida, e.g. para reducir el tamaño del archivo a bajar." + }, { + "@language" : "it", + "@value" : "Il formato di compressione della distribuzione nel quale i dati sono in forma compressa, ad es. per ridurre le dimensioni del file da scaricare." + }, { + "@language" : "en", + "@value" : "The compression format of the distribution in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà deve essere utilizzata quando i file nella distribuzione sono compressi, ad es. in un file ZIP. Il formato DOVREBBE essere espresso usando un tipo di media come definito dal registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, se disponibile." + }, { + "@language" : "da", + "@value" : "Denne egenskab kan anvendes når filerne i en distribution er blevet komprimeret, fx i en ZIP-fil. Formatet BØR udtrykkes ved en medietype som defineret i 'IANA media types registry', hvis der optræder en relevant medietype dér: https://www.iana.org/assignments/media-types/." + }, { + "@language" : "en", + "@value" : "This property is to be used when the files in the distribution are compressed, e.g. in a ZIP file. The format SHOULD be expressed using a media type as defined by IANA media types registry https://www.iana.org/assignments/media-types/, if available." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost se použije, když jsou soubory v distribuci komprimovány, např. v ZIP souboru. Formát BY MĚL být vyjádřen pomocí typu média definovaného v registru IANA https://www.iana.org/assignments/media-types/, pokud existuje." + }, { + "@language" : "es", + "@value" : "Esta propiedad se debe usar cuando los archivos de la distribución están comprimidos, por ejemplo en un archivo ZIP. El formato DEBERÍA expresarse usando un 'media type', tales como los definidos en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, si está disponibles." + } ] + }, { + "@id" : "dcat:contactPoint", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "Relevante kontaktoplysninger for den katalogiserede ressource. Anvendelse af vCard anbefales." + }, { + "@language" : "en", + "@value" : "Relevant contact information for the catalogued resource. Use of vCard is recommended." + }, { + "@language" : "fr", + "@value" : "Relie un jeu de données à une information de contact utile en utilisant VCard." + }, { + "@language" : "es", + "@value" : "Información relevante de contacto para el recurso catalogado. Se recomienda el uso de vCard." + }, { + "@language" : "it", + "@value" : "Informazioni di contatto rilevanti per la risorsa catalogata. Si raccomanda l'uso di vCard." + }, { + "@language" : "ja", + "@value" : "データセットを、VCardを用いて提供されている適切な連絡先情報にリンクします。" + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بعنوان اتصال موصف باستخدام VCard" + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με ένα σχετικό σημείο επικοινωνίας, μέσω VCard." + }, { + "@language" : "cs", + "@value" : "Relevantní kontaktní informace pro katalogizovaný zdroj. Doporučuje se použít slovník VCard." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "fr", + "@value" : "point de contact" + }, { + "@language" : "ar", + "@value" : "عنوان اتصال" + }, { + "@language" : "ja", + "@value" : "窓口" + }, { + "@language" : "en", + "@value" : "contact point" + }, { + "@language" : "el", + "@value" : "σημείο επικοινωνίας" + }, { + "@language" : "cs", + "@value" : "kontaktní bod" + }, { + "@language" : "it", + "@value" : "punto di contatto" + }, { + "@language" : "es", + "@value" : "Punto de contacto" + }, { + "@language" : "da", + "@value" : "kontaktpunkt" + } ], + "range" : "vcard:Kind", + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Relie un jeu de données à une information de contact utile en utilisant VCard." + }, { + "@language" : "it", + "@value" : "Informazioni di contatto rilevanti per la risorsa catalogata. Si raccomanda l'uso di vCard." + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με ένα σχετικό σημείο επικοινωνίας, μέσω VCard." + }, { + "@language" : "en", + "@value" : "Relevant contact information for the catalogued resource. Use of vCard is recommended." + }, { + "@language" : "es", + "@value" : "Información relevante de contacto para el recurso catalogado. Se recomienda el uso de vCard." + }, { + "@language" : "ja", + "@value" : "データセットを、VCardを用いて提供されている適切な連絡先情報にリンクします。" + }, { + "@language" : "da", + "@value" : "Relevante kontaktoplysninger for den katalogiserede ressource. Anvendelse af vCard anbefales." + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بعنوان اتصال موصف باستخدام VCard" + }, { + "@language" : "cs", + "@value" : "Relevantní kontaktní informace pro katalogizovaný zdroj. Doporučuje se použít slovník VCard." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translations provided, other translations pending." + } + }, { + "@id" : "dcat:dataset", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Kolekce dat, která je katalogizována v katalogu." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che è elencata nel catalogo." + }, { + "@language" : "es", + "@value" : "Un conjunto de datos que se lista en el catálogo." + }, { + "@language" : "da", + "@value" : "En samling af data som er opført i kataloget." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بقائمة بيانات ضمنه" + }, { + "@language" : "en", + "@value" : "A collection of data that is listed in the catalog." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるデータセット。" + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à un jeu de données faisant partie de ce catalogue." + }, { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με ένα σύνολο δεδομένων το οποίο ανήκει στον εν λόγω κατάλογο." + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "el", + "@value" : "σύνολο δεδομένων" + }, { + "@language" : "ar", + "@value" : "قائمة بيانات" + }, { + "@language" : "es", + "@value" : "conjunto de datos" + }, { + "@language" : "cs", + "@value" : "datová sada" + }, { + "@language" : "it", + "@value" : "dataset" + }, { + "@language" : "en", + "@value" : "dataset" + }, { + "@language" : "fr", + "@value" : "jeu de données" + }, { + "@language" : "ja", + "@value" : "データセット" + }, { + "@language" : "da", + "@value" : "datasæt" + } ], + "range" : "dcat:Dataset", + "subPropertyOf" : [ "rdfs:member", "dct:hasPart" ], + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "har datasæt" + }, { + "@language" : "da", + "@value" : "datasamling" + } ], + "skos:definition" : [ { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με ένα σύνολο δεδομένων το οποίο ανήκει στον εν λόγω κατάλογο." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるデータセット。" + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à un jeu de données faisant partie de ce catalogue." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, která je katalogizována v katalogu." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che è elencata nel catalogo." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بقائمة بيانات ضمنه" + }, { + "@language" : "en", + "@value" : "A collection of data that is listed in the catalog." + }, { + "@language" : "da", + "@value" : "En samling af data som er opført i kataloget." + }, { + "@language" : "es", + "@value" : "Un conjunto de datos que se lista en el catálogo." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translation provided, other translations pending." + } + }, { + "@id" : "dcat:distribution", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "fr", + "@value" : "Connecte un jeu de données à des distributions disponibles." + }, { + "@language" : "es", + "@value" : "Una distribución disponible del conjunto de datos." + }, { + "@language" : "en", + "@value" : "An available distribution of the dataset." + }, { + "@language" : "da", + "@value" : "En tilgængelig repræsentation af datasættet." + }, { + "@language" : "it", + "@value" : "Una distribuzione disponibile per il set di dati." + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بطريقة أو بشكل يسمح الوصول الى البيانات" + }, { + "@language" : "ja", + "@value" : "データセットを、その利用可能な配信に接続します。" + }, { + "@language" : "cs", + "@value" : "Dostupná distribuce datové sady." + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με μία από τις διαθέσιμες διανομές του." + } ], + "domain" : "dcat:Dataset", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "データセット配信" + }, { + "@language" : "da", + "@value" : "distribution" + }, { + "@language" : "fr", + "@value" : "distribution" + }, { + "@language" : "en", + "@value" : "distribution" + }, { + "@language" : "it", + "@value" : "distribuzione" + }, { + "@language" : "el", + "@value" : "διανομή" + }, { + "@language" : "ar", + "@value" : "توزيع" + }, { + "@language" : "es", + "@value" : "distribución" + }, { + "@language" : "cs", + "@value" : "distribuce" + } ], + "range" : "dcat:Distribution", + "subPropertyOf" : "dct:relation", + "skos:altLabel" : { + "@language" : "da", + "@value" : "har distribution" + }, + "skos:definition" : [ { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με μία από τις διαθέσιμες διανομές του." + }, { + "@language" : "fr", + "@value" : "Connecte un jeu de données à des distributions disponibles." + }, { + "@language" : "es", + "@value" : "Una distribución disponible del conjunto de datos." + }, { + "@language" : "ja", + "@value" : "データセットを、その利用可能な配信に接続します。" + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بطريقة أو بشكل يسمح الوصول الى البيانات" + }, { + "@language" : "da", + "@value" : "En tilgængelig repræsentation af datasættet." + }, { + "@language" : "it", + "@value" : "Una distribuzione disponibile per il set di dati." + }, { + "@language" : "en", + "@value" : "An available distribution of the dataset." + }, { + "@language" : "cs", + "@value" : "Dostupná distribuce datové sady." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, translations pending (except for Italian, Spanish and Czech)." + } + }, { + "@id" : "dcat:downloadURL", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "URL til fil der kan downloades i et bestemt format. Fx en CSV-fil eller en RDF-fil. Formatet for distributionen angives ved hjælp af egenskaberne dct:format og/eller dcat:mediaType." + }, { + "@language" : "en", + "@value" : "The URL of the downloadable file in a given format. E.g. CSV file or RDF file. The format is indicated by the distribution's dct:format and/or dcat:mediaType." + }, { + "@language" : "fr", + "@value" : "Ceci est un lien direct à un fichier téléchargeable en un format donnée. Exple fichier CSV ou RDF. Le format est décrit par les propriétés de distribution dct:format et/ou dcat:mediaType." + }, { + "@language" : "es", + "@value" : "La URL de un archivo descargable en el formato dato. Por ejemplo, archivo CSV o archivo RDF. El formato se describe con las propiedades de la distribución dct:format y/o dcat:mediaType." + }, { + "@language" : "it", + "@value" : "Questo è un link diretto al file scaricabile in un dato formato. E.g. un file CSV o un file RDF. Il formato è descritto dal dct:format e/o dal dcat:mediaType della distribuzione." + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení v daném formátu, například CSV nebo RDF soubor. Formát je popsán vlastností distribuce dct:format a/nebo dcat:mediaType." + }, { + "@language" : "ja", + "@value" : "dcat:downloadURLはdcat:accessURLの特定の形式です。しかし、DCATプロファイルが非ダウンロード・ロケーションに対してのみaccessURLを用いる場合には、より強い分離を課すことを望む可能性があるため、この含意を強化しないように、DCATは、dcat:downloadURLをdcat:accessURLのサブプロパティーであると定義しません。" + }, { + "@language" : "el", + "@value" : "Είναι ένας σύνδεσμος άμεσης μεταφόρτωσης ενός αρχείου σε μια δεδομένη μορφή. Π.χ. ένα αρχείο CSV ή RDF. Η μορφη αρχείου περιγράφεται από τις ιδιότητες dct:format ή/και dcat:mediaType της διανομής." + }, { + "@language" : "ar", + "@value" : "رابط مباشر لملف يمكن تحميله. نوع الملف يتم توصيفه باستخدام الخاصية dct:format dcat:mediaType " + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "downloadURL" + }, { + "@language" : "es", + "@value" : "URL de descarga" + }, { + "@language" : "ar", + "@value" : "رابط تحميل" + }, { + "@language" : "ja", + "@value" : "ダウンロードURL" + }, { + "@language" : "it", + "@value" : "URL di scarico" + }, { + "@language" : "en", + "@value" : "download URL" + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení" + }, { + "@language" : "el", + "@value" : "URL μεταφόρτωσης" + }, { + "@language" : "fr", + "@value" : "URL de téléchargement" + } ], + "range" : "rdfs:Resource", + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Ceci est un lien direct à un fichier téléchargeable en un format donnée. Exple fichier CSV ou RDF. Le format est décrit par les propriétés de distribution dct:format et/ou dcat:mediaType." + }, { + "@language" : "ja", + "@value" : "dcat:downloadURLはdcat:accessURLの特定の形式です。しかし、DCATプロファイルが非ダウンロード・ロケーションに対してのみaccessURLを用いる場合には、より強い分離を課すことを望む可能性があるため、この含意を強化しないように、DCATは、dcat:downloadURLをdcat:accessURLのサブプロパティーであると定義しません。" + }, { + "@language" : "it", + "@value" : "Questo è un link diretto al file scaricabile in un dato formato. E.g. un file CSV o un file RDF. Il formato è descritto dal dct:format e/o dal dcat:mediaType della distribuzione." + }, { + "@language" : "en", + "@value" : "The URL of the downloadable file in a given format. E.g. CSV file or RDF file. The format is indicated by the distribution's dct:format and/or dcat:mediaType." + }, { + "@language" : "ar", + "@value" : "رابط مباشر لملف يمكن تحميله. نوع الملف يتم توصيفه باستخدام الخاصية dct:format dcat:mediaType " + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení v daném formátu, například CSV nebo RDF soubor. Formát je popsán vlastností distribuce dct:format a/nebo dcat:mediaType." + }, { + "@language" : "el", + "@value" : "Είναι ένας σύνδεσμος άμεσης μεταφόρτωσης ενός αρχείου σε μια δεδομένη μορφή. Π.χ. ένα αρχείο CSV ή RDF. Η μορφη αρχείου περιγράφεται από τις ιδιότητες dct:format ή/και dcat:mediaType της διανομής." + }, { + "@language" : "da", + "@value" : "URL til fil der kan downloades i et bestemt format. Fx en CSV-fil eller en RDF-fil. Formatet for distributionen angives ved hjælp af egenskaberne dct:format og/eller dcat:mediaType." + }, { + "@language" : "es", + "@value" : "La URL de un archivo descargable en el formato dato. Por ejemplo, archivo CSV o archivo RDF. El formato se describe con las propiedades de la distribución dct:format y/o dcat:mediaType." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translation updated, other translations pending." + }, { + "@language" : "en", + "@value" : "rdfs:label, rdfs:comment and/or skos:scopeNote have been modified. Non-english versions must be updated." + } ], + "skos:scopeNote" : [ { + "@language" : "fr", + "@value" : "La valeur est une URL." + }, { + "@language" : "en", + "@value" : "dcat:downloadURL SHOULD be used for the address at which this distribution is available directly, typically through a HTTP Get request." + }, { + "@language" : "cs", + "@value" : "dcat:downloadURL BY MĚLA být použita pro adresu, ze které je distribuce přímo přístupná, typicky skrze požadavek HTTP Get." + }, { + "@language" : "it", + "@value" : "dcat:downloadURL DOVREBBE essere utilizzato per l'indirizzo a cui questa distribuzione è disponibile direttamente, in genere attraverso una richiesta Get HTTP." + }, { + "@language" : "es", + "@value" : "El valor es una URL." + }, { + "@language" : "da", + "@value" : "dcat:downloadURL BØR anvendes til angivelse af den adresse hvor distributionen er tilgængelig direkte, typisk gennem et HTTP Get request." + }, { + "@language" : "el", + "@value" : "Η τιμή είναι ένα URL." + } ] + }, { + "@id" : "dcat:endDate", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:PeriodOfTime", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "data di fine" + }, { + "@language" : "cs", + "@value" : "datum konce" + }, { + "@language" : "da", + "@value" : "slutdato" + }, { + "@language" : "en", + "@value" : "end date" + }, { + "@language" : "es", + "@value" : "fecha final" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "sluttidspunkt" + }, + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "El fin del período." + }, { + "@language" : "da", + "@value" : "Slutningen på perioden." + }, { + "@language" : "it", + "@value" : "La fine del periodo." + }, { + "@language" : "cs", + "@value" : "Konec doby trvání." + }, { + "@language" : "en", + "@value" : "The end of the period." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "La range di questa proprietà è volutamente generico, con lo scopo di consentire diversi livelli di precisione temporale per specificare la fine di un periodo. Ad esempio, può essere espresso con una data (xsd:date), una data e un'ora (xsd:dateTime), o un anno (xsd:gYear)." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé úrovně časového rozlišení pro specifikaci konce doby trvání. Ten může být kupříkladu vyjádřen datumem (xsd:date), datumem a časem (xsd:dateTime) či rokem (xsd:gYear)." + }, { + "@language" : "da", + "@value" : "Rækkeviden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige niveauer af tidslig præcision ifm. angivelse af slutdatoen for en periode. Den kan eksempelvis udtrykkes som en dato (xsd:date), en dato og et tidspunkt (xsd:dateTime), eller et årstal (xsd:gYear)." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintos niveles de precisión temporal para especificar el fin del período. Por ejemplo, puede expresarse como una fecha (xsd:date), una fecha y un tiempo (xsd:dateTime), o un año (xsd:gYear)." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different level of temporal precision for specifying the end of a period. E.g., it can be expressed with a date (xsd:date), a date and time (xsd:dateTime), or a year (xsd:gYear)." + } ] + }, { + "@id" : "dcat:endpointDescription", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "En beskrivelse af det pågældende tjenesteendpoint, inklusiv dets operationer, parametre etc." + }, { + "@language" : "es", + "@value" : "Una descripción del end-point del servicio, incluyendo sus operaciones, parámetros, etc." + }, { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint del servizio, incluse le sue operazioni, parametri, ecc." + }, { + "@language" : "en", + "@value" : "A description of the service end-point, including its operations, parameters etc." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu služby včetně operací, parametrů apod." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "endpointbeskrivelse" + }, { + "@language" : "es", + "@value" : "descripción del end-point del servicio" + }, { + "@language" : "en", + "@value" : "description of service end-point" + }, { + "@language" : "cs", + "@value" : "popis přístupového bodu služby" + }, { + "@language" : "it", + "@value" : "descrizione dell'endpoint del servizio" + } ], + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab i DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "A description of the service end-point, including its operations, parameters etc." + }, { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint del servizio, incluse le sue operazioni, parametri, ecc." + }, { + "@language" : "da", + "@value" : "En beskrivelse af det pågældende tjenesteendpoint, inklusiv dets operationer, parametre etc." + }, { + "@language" : "es", + "@value" : "Una descripción del end-point del servicio, incluyendo sus operaciones, parámetros, etc.." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu služby včetně operací, parametrů apod." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint può essere espressa in un formato leggibile dalla macchina, come una descrizione OpenAPI (Swagger), una risposta GetCapabilities OGC, una descrizione del servizio SPARQL, un documento OpenSearch o WSDL, una descrizione API Hydra, o con del testo o qualche altra modalità informale se una rappresentazione formale non è possibile." + }, { + "@language" : "es", + "@value" : "La descripción del endpoint brinda detalles específicos de la instancia del endpoint, mientras que dct:conformsTo se usa para indicar el estándar general o especificación que implementa el endpoint." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu dává specifické detaily jeho konkrétní instance, zatímco dct:conformsTo indikuje obecný standard či specifikaci kterou přístupový bod implementuje." + }, { + "@language" : "en", + "@value" : "The endpoint description gives specific details of the actual endpoint instance, while dct:conformsTo is used to indicate the general standard or specification that the endpoint implements." + }, { + "@language" : "es", + "@value" : "Una descripción del endpoint del servicio puede expresarse en un formato que la máquina puede interpretar, tal como una descripción basada en OpenAPI (Swagger), una respuesta OGC GetCapabilities, una descripción de un servicio SPARQL, un documento OpenSearch o WSDL, una descripción con la Hydra API, o en texto u otro modo informal si la representación formal no es posible." + }, { + "@language" : "it", + "@value" : "La descrizione dell'endpoint fornisce dettagli specifici dell'istanza dell'endpoint reale, mentre dct:conformsTo viene utilizzato per indicare lo standard o le specifiche implementate dall'endpoint." + }, { + "@language" : "da", + "@value" : "En beskrivelse af et endpoint kan udtrykkes i et maskinlæsbart format, såsom OpenAPI (Swagger)-beskrivelser, et OGC GetCapabilities svar, en SPARQL tjenestebeskrivelse, en OpenSearch- eller et WSDL-dokument, en Hydra-API-beskrivelse, eller i tekstformat eller i et andet uformelt format, hvis en formel repræsentation ikke er mulig." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu může být vyjádřen ve strojově čitelné formě, například jako popis OpenAPI (Swagger), odpověď služby OGC getCapabilities, pomocí slovníku SPARQL Service Description, jako OpenSearch či WSDL document, jako popis API dle slovníku Hydra, a nebo textově nebo jiným neformálním způsobem, pokud není možno použít formální reprezentaci." + }, { + "@language" : "en", + "@value" : "An endpoint description may be expressed in a machine-readable form, such as an OpenAPI (Swagger) description, an OGC GetCapabilities response, a SPARQL Service Description, an OpenSearch or WSDL document, a Hydra API description, else in text or some other informal mode if a formal representation is not possible." + }, { + "@language" : "da", + "@value" : "Endpointbeskrivelsen giver specifikke oplysninger om den konkrete endpointinstans, mens dct:conformsTo anvendes til at indikere den overordnede standard eller specifikation som endpointet er i overensstemmelse med." + } ] + }, { + "@id" : "dcat:endpointURL", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "La posición raíz o end-point principal del servicio (una IRI web)." + }, { + "@language" : "it", + "@value" : "La locazione principale o l'endpoint primario del servizio (un IRI risolvibile via web)." + }, { + "@language" : "en", + "@value" : "The root location or primary endpoint of the service (a web-resolvable IRI)." + }, { + "@language" : "cs", + "@value" : "Kořenové umístění nebo hlavní přístupový bod služby (IRI přístupné přes Web)." + }, { + "@language" : "da", + "@value" : "Rodplaceringen eller det primære endpoint for en tjeneste (en web-resolverbar IRI)." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "end-point del servizio" + }, { + "@language" : "en", + "@value" : "service end-point" + }, { + "@language" : "es", + "@value" : "end-point del servicio" + }, { + "@language" : "cs", + "@value" : "přístupový bod služby" + }, { + "@language" : "da", + "@value" : "tjenesteendpoint" + } ], + "range" : "rdfs:Resource", + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Rodplaceringen eller det primære endpoint for en tjeneste (en web-resolverbar IRI)." + }, { + "@language" : "en", + "@value" : "The root location or primary endpoint of the service (a web-resolvable IRI)." + }, { + "@language" : "it", + "@value" : "La locazione principale o l'endpoint primario del servizio (un IRI risolvibile via web)." + }, { + "@language" : "cs", + "@value" : "Kořenové umístění nebo hlavní přístupový bod služby (IRI přístupné přes Web)." + }, { + "@language" : "es", + "@value" : "La posición raíz o end-point principal del servicio (una IRI web)." + } ] + }, { + "@id" : "dcat:hadRole", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "La función de una entidad o agente con respecto a otra entidad o recurso." + }, { + "@language" : "it", + "@value" : "La funzione di un'entità o un agente rispetto ad un'altra entità o risorsa." + }, { + "@language" : "da", + "@value" : "Den funktion en entitet eller aktør har i forhold til en anden ressource." + }, { + "@language" : "cs", + "@value" : "Funkce entity či agenta ve vztahu k jiné entitě či zdroji." + }, { + "@language" : "en", + "@value" : "The function of an entity or agent with respect to another entity or resource." + } ], + "domain" : "_:b8", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "tiene rol" + }, { + "@language" : "cs", + "@value" : "sehraná role" + }, { + "@language" : "en", + "@value" : "hadRole" + }, { + "@language" : "da", + "@value" : "havde rolle" + }, { + "@language" : "it", + "@value" : "haRuolo" + } ], + "range" : "dcat:Role", + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Den funktion en entitet eller aktør har i forhold til en anden ressource." + }, { + "@language" : "it", + "@value" : "La funzione di un'entità o un agente rispetto ad un'altra entità o risorsa." + }, { + "@language" : "en", + "@value" : "The function of an entity or agent with respect to another entity or resource." + }, { + "@language" : "es", + "@value" : "La función de una entidad o agente con respecto a otra entidad o recurso." + }, { + "@language" : "cs", + "@value" : "Funkce entity či agenta ve vztahu k jiné entitě či zdroji." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Přidáno do DCAT pro doplnění vlastnosti prov:hadRole (jejíž užití je omezeno na role v kontextu aktivity, s definičním oborem prov:Association)." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT for at supplere prov:hadRole (hvis anvendelse er begrænset til roller i forbindelse med en aktivitet med domænet prov:Association)." + }, { + "@language" : "en", + "@value" : "Introduced into DCAT to complement prov:hadRole (whose use is limited to roles in the context of an activity, with the domain of prov:Association." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per completare prov:hadRole (il cui uso è limitato ai ruoli nel contesto di un'attività, con il dominio di prov:Association." + }, { + "@language" : "es", + "@value" : "Agregada en DCAT para complementar prov:hadRole (cuyo uso está limitado a roles en el contexto de una actividad, con dominio prov:Association." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Può essere utilizzata in una relazione qualificata per specificare il ruolo di un'entità rispetto a un'altra entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di entità come ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, o MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Může být použito v kvalifikovaném vztahu pro specifikaci role Entity ve vztahu k jiné Entitě. Je doporučeno použít hodnotu z řízeného slovníku rolí entit, jako například ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "May be used in a qualified-relation to specify the role of an Entity with respect to another Entity. It is recommended that the value be taken from a controlled vocabulary of entity roles such as: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "May be used in a qualified-attribution to specify the role of an Agent with respect to an Entity. It is recommended that the value be taken from a controlled vocabulary of agent roles, such as http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "cs", + "@value" : "Může být použito v kvalifikovaném přiřazení pro specifikaci role Agenta ve vztahu k Entitě. Je doporučeno hodnotu vybrat z řízeného slovníku rolí agentů, jako například http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "it", + "@value" : "Può essere utilizzato in un'attribuzione qualificata per specificare il ruolo di un agente rispetto a un'entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di agente, come ad esempio http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Puede usarse en una atribución cualificada para especificar el rol de un Agente con respecto a una Entidad. Se recomienda que el valor sea de un vocabulario controlado de roles de agentes, como por ejemplo http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Kan vendes ved kvalificerede krediteringer til at angive en aktørs rolle i forhold en entitet. Det anbefales at værdierne styres som et kontrolleret udfaldsrum med aktørroller, såsom http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Puede usarse en una atribución cualificada para especificar el rol de una Entidad con respecto a otra Entidad. Se recomienda que su valor se tome de un vocabulario controlado de roles de entidades como por ejemplo: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; esquema de metadatos de DataCite; MARC relators https://id.loc.gov/vocabulary/relators." + } ] + }, { + "@id" : "dcat:keyword", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Una parola chiave o un'etichetta per descrivere la risorsa." + }, { + "@language" : "da", + "@value" : "Et nøgleord eller tag til beskrivelse af en ressource." + }, { + "@language" : "el", + "@value" : "Μία λέξη-κλειδί ή μία ετικέτα που περιγράφει το σύνολο δεδομένων." + }, { + "@language" : "fr", + "@value" : "Un mot-clé ou étiquette décrivant une ressource." + }, { + "@language" : "es", + "@value" : "Una palabra clave o etiqueta que describe un recurso." + }, { + "@language" : "cs", + "@value" : "Klíčové slovo nebo značka popisující zdroj." + }, { + "@language" : "en", + "@value" : "A keyword or tag describing a resource." + }, { + "@language" : "ja", + "@value" : "データセットを記述しているキーワードまたはタグ。" + }, { + "@language" : "ar", + "@value" : "كلمة مفتاحيه توصف قائمة البيانات" + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ar", + "@value" : "كلمة مفتاحية " + }, { + "@language" : "fr", + "@value" : "mot-clés " + }, { + "@language" : "el", + "@value" : "λέξη-κλειδί" + }, { + "@language" : "ja", + "@value" : "キーワード/タグ" + }, { + "@language" : "da", + "@value" : "nøgleord" + }, { + "@language" : "es", + "@value" : "palabra clave" + }, { + "@language" : "en", + "@value" : "keyword" + }, { + "@language" : "it", + "@value" : "parola chiave" + }, { + "@language" : "cs", + "@value" : "klíčové slovo" + } ], + "range" : "rdfs:Literal", + "subPropertyOf" : "dct:subject", + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Klíčové slovo nebo značka popisující zdroj." + }, { + "@language" : "ja", + "@value" : "データセットを記述しているキーワードまたはタグ。" + }, { + "@language" : "fr", + "@value" : "Un mot-clé ou étiquette décrivant une ressource." + }, { + "@language" : "en", + "@value" : "A keyword or tag describing a resource." + }, { + "@language" : "es", + "@value" : "Una palabra clave o etiqueta que describe un recurso." + }, { + "@language" : "da", + "@value" : "Et nøgleord eller tag til beskrivelse af en ressource." + }, { + "@language" : "ar", + "@value" : "كلمة مفتاحيه توصف قائمة البيانات" + }, { + "@language" : "el", + "@value" : "Μία λέξη-κλειδί ή μία ετικέτα που περιγράφει το σύνολο δεδομένων." + }, { + "@language" : "it", + "@value" : "Una parola chiave o un'etichetta per descrivere la risorsa." + } ] + }, { + "@id" : "dcat:landingPage", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una página web que puede ser visitada en un explorador Web para tener acceso el catálogo, un conjunto de datos, sus distribuciones y/o información adicional." + }, { + "@language" : "en", + "@value" : "A Web page that can be navigated to in a Web browser to gain access to the catalog, a dataset, its distributions and/or additional information." + }, { + "@language" : "el", + "@value" : "Μία ιστοσελίδα πλοηγίσιμη μέσω ενός φυλλομετρητή (Web browser) που δίνει πρόσβαση στο σύνολο δεδομένων, τις διανομές αυτού ή/και επιπρόσθετες πληροφορίες." + }, { + "@language" : "it", + "@value" : "Una pagina web che può essere navigata per ottenere l'accesso al catalogo, ad un dataset, alle distribuzioni del dataset e/o ad informazioni addizionali." + }, { + "@language" : "ja", + "@value" : "データセット、その配信および(または)追加情報にアクセスするためにウエブ・ブラウザでナビゲートできるウェブページ。" + }, { + "@language" : "ar", + "@value" : "صفحة وب يمكن من خلالها الوصول الى قائمة البيانات أو إلى معلومات إضافية متعلقة بها " + }, { + "@language" : "da", + "@value" : "En webside som der kan navigeres til i en webbrowser for at få adgang til kataloget, et datasæt, dets distributioner og/eller yderligere information." + }, { + "@language" : "cs", + "@value" : "Webová stránka, na kterou lze pro získání přístupu ke katalogu, datové sadě, jejím distribucím a/nebo dalším informacím přistoupit webovým prohlížečem." + }, { + "@language" : "fr", + "@value" : "Une page Web accessible par un navigateur Web donnant accès au catalogue, un jeu de données, ses distributions et/ou des informations additionnelles." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "página de destino" + }, { + "@language" : "en", + "@value" : "landing page" + }, { + "@language" : "cs", + "@value" : "vstupní stránka" + }, { + "@language" : "da", + "@value" : "destinationsside" + }, { + "@language" : "ja", + "@value" : "ランディング・ページ" + }, { + "@language" : "fr", + "@value" : "page d'atterrissage" + }, { + "@language" : "ar", + "@value" : "صفحة وصول" + }, { + "@language" : "it", + "@value" : "pagina di destinazione" + }, { + "@language" : "el", + "@value" : "ιστοσελίδα αρχικής πρόσβασης" + } ], + "range" : "foaf:Document", + "subPropertyOf" : "foaf:page", + "skos:definition" : [ { + "@language" : "it", + "@value" : "Una pagina web che può essere navigata per ottenere l'accesso al catalogo, ad un dataset, alle distribuzioni del dataset e/o ad informazioni addizionali." + }, { + "@language" : "en", + "@value" : "A Web page that can be navigated to in a Web browser to gain access to the catalog, a dataset, its distributions and/or additional information." + }, { + "@language" : "es", + "@value" : "Una página web que puede ser visitada en un explorador Web para tener acceso el catálogo, un conjunto de datos, sus distribuciones y/o información adicional." + }, { + "@language" : "ar", + "@value" : "صفحة وب يمكن من خلالها الوصول الى قائمة البيانات أو إلى معلومات إضافية متعلقة بها " + }, { + "@language" : "da", + "@value" : "En webside som en webbrowser kan navigeres til for at få adgang til kataloget, et datasæt, dets distritbutioner og/eller yderligere information." + }, { + "@language" : "cs", + "@value" : "Webová stránka, na kterou lze pro získání přístupu ke katalogu, datové sadě, jejím distribucím a/nebo dalším informacím přistoupit webovým prohlížečem." + }, { + "@language" : "el", + "@value" : "Μία ιστοσελίδα πλοηγίσιμη μέσω ενός φυλλομετρητή (Web browser) που δίνει πρόσβαση στο σύνολο δεδομένων, τις διανομές αυτού ή/και επιπρόσθετες πληροφορίες." + }, { + "@language" : "fr", + "@value" : "Une page Web accessible par un navigateur Web donnant accès au catalogue, un jeu de données, ses distributions et/ou des informations additionnelles." + }, { + "@language" : "ja", + "@value" : "データセット、その配信および(または)追加情報にアクセスするためにウエブ・ブラウザでナビゲートできるウェブページ。" + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Hvis en eller flere distributioner kun er tilgængelige via en destinationsside (dvs. en URL til direkte download er ikke kendt), så bør destinationssidelinket gentages som adgangsadresse for en distribution." + }, { + "@language" : "es", + "@value" : "Si la distribución es accesible solamente través de una página de aterrizaje (i.e., no se conoce una URL de descarga directa), entonces el enlance a la página de aterrizaje debe ser duplicado como accessURL sobre la distribución." + }, { + "@language" : "ja", + "@value" : "ランディング・ページを通じてしか配信にアクセスできない場合(つまり、直接的なダウンロードURLが不明)には、配信におけるaccessURLとしてランディング・ページのリンクをコピーすべきです(SHOULD)。" + }, { + "@language" : "en", + "@value" : "If the distribution(s) are accessible only through a landing page (i.e. direct download URLs are not known), then the landing page link should be duplicated as accessURL on a distribution." + }, { + "@language" : "el", + "@value" : "Αν η/οι διανομή/ές είναι προσβάσιμη/ες μόνο μέσω μίας ιστοσελίδας αρχικής πρόσβασης (δηλαδή αν δεν υπάρχουν γνωστές διευθύνσεις άμεσης μεταφόρτωσης), τότε ο σύνδεσμος της ιστοσελίδας αρχικής πρόσβασης πρέπει να αναπαραχθεί ως accessURL σε μία διανομή." + }, { + "@language" : "cs", + "@value" : "Pokud je distribuce dostupná pouze přes vstupní stránku, t.j. přímý URL odkaz ke stažení není znám, URL přístupové stránky by mělo být duplikováno ve vlastnosti distribuce accessURL." + }, { + "@language" : "it", + "@value" : "Se la distribuzione è accessibile solo attraverso una pagina di destinazione (cioè, un URL di download diretto non è noto), il link alla pagina di destinazione deve essere duplicato come accessURL sulla distribuzione." + }, { + "@language" : "fr", + "@value" : "Si la distribution est seulement accessible à travers une page d'atterrissage (exple. pas de connaissance d'URLS de téléchargement direct ), alors le lien de la page d'atterrissage doit être dupliqué comme accessURL sur la distribution." + } ] + }, { + "@id" : "dcat:mediaType", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il tipo di media della distribuzione come definito da IANA" + }, { + "@language" : "ja", + "@value" : "このプロパティーは、配信のメディア・タイプがIANAで定義されているときに使用すべきで(SHOULD)、そうでない場合には、dct:formatを様々な値と共に使用できます(MAY)。" + }, { + "@language" : "el", + "@value" : "Η ιδιότητα αυτή ΘΑ ΠΡΕΠΕΙ να χρησιμοποιείται όταν ο τύπος μέσου μίας διανομής είναι ορισμένος στο IANA, αλλιώς η ιδιότητα dct:format ΔΥΝΑΤΑΙ να χρησιμοποιηθεί με διαφορετικές τιμές." + }, { + "@language" : "fr", + "@value" : "Cette propriété doit être utilisée quand c'est définit le type de média de la distribution en IANA, sinon dct:format DOIT être utilisé avec différentes valeurs." + }, { + "@language" : "en", + "@value" : "The media type of the distribution as defined by IANA" + }, { + "@language" : "ar", + "@value" : "يجب استخدام هذه الخاصية إذا كان نوع الملف معرف ضمن IANA" + }, { + "@language" : "da", + "@value" : "Medietypen for distributionen som den er defineret af IANA." + }, { + "@language" : "cs", + "@value" : "Typ média distribuce definovaný v IANA." + }, { + "@language" : "es", + "@value" : "Esta propiedad debe ser usada cuando está definido el tipo de media de la distribución en IANA, de otra manera dct:format puede ser utilizado con diferentes valores" + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "tipo de media" + }, { + "@language" : "en", + "@value" : "media type" + }, { + "@language" : "ar", + "@value" : "نوع الميديا" + }, { + "@language" : "cs", + "@value" : "typ média" + }, { + "@language" : "ja", + "@value" : "メディア・タイプ" + }, { + "@language" : "fr", + "@value" : "type de média" + }, { + "@language" : "el", + "@value" : "τύπος μέσου" + }, { + "@language" : "da", + "@value" : "medietype" + }, { + "@language" : "it", + "@value" : "tipo di media" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Obor hodnot dcat:mediaType byl zúžen v této revizi DCAT." + }, { + "@language" : "it", + "@value" : "Il range di dcat:mediaType è stato ristretto come parte della revisione di DCAT." + }, { + "@language" : "en", + "@value" : "The range of dcat:mediaType has been tightened as part of the revision of DCAT." + } ], + "skos:definition" : [ { + "@language" : "ar", + "@value" : "يجب استخدام هذه الخاصية إذا كان نوع الملف معرف ضمن IANA" + }, { + "@language" : "el", + "@value" : "Η ιδιότητα αυτή ΘΑ ΠΡΕΠΕΙ να χρησιμοποιείται όταν ο τύπος μέσου μίας διανομής είναι ορισμένος στο IANA, αλλιώς η ιδιότητα dct:format ΔΥΝΑΤΑΙ να χρησιμοποιηθεί με διαφορετικές τιμές." + }, { + "@language" : "fr", + "@value" : "Cette propriété doit être utilisée quand c'est définit le type de média de la distribution en IANA, sinon dct:format DOIT être utilisé avec différentes valeurs." + }, { + "@language" : "es", + "@value" : "Esta propiedad debe ser usada cuando está definido el tipo de media de la distribución en IANA, de otra manera dct:format puede ser utilizado con diferentes valores." + }, { + "@language" : "it", + "@value" : "Il tipo di media della distribuzione come definito da IANA." + }, { + "@language" : "en", + "@value" : "The media type of the distribution as defined by IANA." + }, { + "@language" : "ja", + "@value" : "このプロパティーは、配信のメディア・タイプがIANAで定義されているときに使用すべきで(SHOULD)、そうでない場合には、dct:formatを様々な値と共に使用できます(MAY)。" + }, { + "@language" : "cs", + "@value" : "Typ média distribuce definovaný v IANA." + }, { + "@language" : "da", + "@value" : "Medietypen for distributionen som den er defineret af IANA." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian and Czech translation provided, other translations pending. Note some inconsistency on def vs. usage." + }, + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà DEVE essere usata quando il tipo di media della distribuzione è definito nel registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, altrimenti dct:format PUO 'essere usato con differenti valori." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost BY MĚLA být použita, je-li typ média distribuce definován v registru IANA https://www.iana.org/assignments/media-types/. V ostatních případech MŮŽE být použita vlastnost dct:format s jinými hodnotami." + }, { + "@language" : "es", + "@value" : "Esta propiedad DEBERÍA usarse cuando el 'media type' de la distribución está definido en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, de lo contrario, dct:format PUEDE usarse con distintos valores." + }, { + "@language" : "en", + "@value" : "This property SHOULD be used when the media type of the distribution is defined in the IANA media types registry https://www.iana.org/assignments/media-types/, otherwise dct:format MAY be used with different values." + }, { + "@language" : "da", + "@value" : "Denne egenskab BØR anvendes hvis distributionens medietype optræder i 'IANA media types registry' https://www.iana.org/assignments/media-types/, ellers KAN egenskaben dct:format anvendes med et andet udfaldsrum." + } ] + }, { + "@id" : "dcat:packageFormat", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "The package format of the distribution in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together." + }, { + "@language" : "cs", + "@value" : "Balíčkový formát souboru, ve kterém je jeden či více souborů seskupeno dohromady, např. aby bylo možné stáhnout sadu souvisejících souborů naráz." + }, { + "@language" : "it", + "@value" : "Il formato di impacchettamento della distribuzione in cui uno o più file di dati sono raggruppati insieme, ad es. per abilitare un insieme di file correlati da scaricare insieme." + }, { + "@language" : "es", + "@value" : "El formato del archivo en que se agrupan uno o más archivos de datos, e.g. para permitir que un conjunto de archivos relacionados se bajen juntos." + }, { + "@language" : "da", + "@value" : "Format til pakning af data med henblik på distribution af en eller flere relaterede datafiler der samles til en enhed med henblik på samlet distribution. " + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "https://www.w3.org/TR/vocab-dcat-2/", + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "formát balíčku" + }, { + "@language" : "en", + "@value" : "packaging format" + }, { + "@language" : "it", + "@value" : "formato di impacchettamento" + }, { + "@language" : "da", + "@value" : "pakkeformat" + }, { + "@language" : "es", + "@value" : "formato de empaquetado" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Il formato di impacchettamento della distribuzione in cui uno o più file di dati sono raggruppati insieme, ad es. per abilitare un insieme di file correlati da scaricare insieme." + }, { + "@language" : "en", + "@value" : "The package format of the distribution in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together." + }, { + "@language" : "es", + "@value" : "El formato del archivo en que se agrupan uno o más archivos de datos, e.g. para permitir que un conjunto de archivos relacionados se bajen juntos." + }, { + "@language" : "cs", + "@value" : "Balíčkový formát souboru, ve kterém je jeden či více souborů seskupeno dohromady, např. aby bylo možné stáhnout sadu souvisejících souborů naráz." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà deve essere utilizzata quando i file nella distribuzione sono impacchettati, ad esempio in un file TAR, Frictionless Data Package o Bagit. Il formato DOVREBBE essere espresso utilizzando un tipo di supporto come definito dal registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, se disponibili." + }, { + "@language" : "es", + "@value" : "Esta propiedad se debe usar cuando los archivos de la distribución están empaquetados, por ejemplo en un archivo TAR, Frictionless Data Package o Bagit. El formato DEBERÍA expresarse usando un 'media type', tales como los definidos en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, si está disponibles." + }, { + "@language" : "da", + "@value" : "Denne egenskab kan anvendes hvis filerne i en distribution er pakket, fx i en TAR-fil, en Frictionless Data Package eller en Bagit-fil. Formatet BØR udtrykkes ved en medietype som defineret i 'IANA media types registry', hvis der optræder en relevant medietype dér: https://www.iana.org/assignments/media-types/." + }, { + "@language" : "en", + "@value" : "This property to be used when the files in the distribution are packaged, e.g. in a TAR file, a Frictionless Data Package or a Bagit file. The format SHOULD be expressed using a media type as defined by IANA media types registry https://www.iana.org/assignments/media-types/, if available." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost se použije, když jsou soubory v distribuci zabaleny, např. v souboru TAR, v balíčku Frictionless Data Package nebo v souboru Bagit. Formát BY MĚL být vyjádřen pomocí typu média definovaného v registru IANA https://www.iana.org/assignments/media-types/, pokud existuje." + } ] + }, { + "@id" : "dcat:qualifiedRelation", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Odkaz na popis vztahu s jiným zdrojem." + }, { + "@language" : "it", + "@value" : "Link a una descrizione di una relazione con un'altra risorsa." + }, { + "@language" : "en", + "@value" : "Link to a description of a relationship with another resource." + }, { + "@language" : "es", + "@value" : "Enlace a una descripción de la relación con otro recurso." + }, { + "@language" : "da", + "@value" : "Reference til en beskrivelse af en relation til en anden ressource." + } ], + "domain" : "dcat:Resource", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "qualified relation" + }, { + "@language" : "it", + "@value" : "relazione qualificata" + }, { + "@language" : "da", + "@value" : "Kvalificeret relation" + }, { + "@language" : "es", + "@value" : "relación calificada" + }, { + "@language" : "cs", + "@value" : "kvalifikovaný vztah" + } ], + "range" : "dcat:Relationship", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Propiedad nueva añadida en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Odkaz na popis vztahu s jiným zdrojem." + }, { + "@language" : "da", + "@value" : "Reference til en beskrivelse af en relation til en anden ressource." + }, { + "@language" : "it", + "@value" : "Link a una descrizione di una relazione con un'altra risorsa." + }, { + "@language" : "es", + "@value" : "Enlace a una descripción de la relación con otro recurso." + }, { + "@language" : "en", + "@value" : "Link to a description of a relationship with another resource." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Introduced into DCAT to complement the other PROV qualified relations. " + }, { + "@language" : "cs", + "@value" : "Přidáno do DCAT k doplnění jiných kvalifikovaných vztahů ze slovníku PROV." + }, { + "@language" : "es", + "@value" : "Se incluyó en DCAT para complementar las relaciones calificadas disponibles en PROV." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per integrare le altre relazioni qualificate di PROV." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT med henblik på at supplere de øvrige kvalificerede relationer fra PROV. " + } ], + "skos:scopeNote" : [ { + "@language" : "en", + "@value" : "Used to link to another resource where the nature of the relationship is known but does not match one of the standard Dublin Core properties (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "da", + "@value" : "Anvendes til at referere til en anden ressource hvor relationens betydning er kendt men ikke matcher en af de standardiserede egenskaber fra Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) eller PROV-O-egenskaber (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "it", + "@value" : "Viene utilizzato per associarsi a un'altra risorsa nei casi per i quali la natura della relazione è nota ma non è alcuna delle proprietà fornite dallo standard Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat , dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:require, dct:isRequiredBy) o dalle proprietà fornite da PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom , prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "cs", + "@value" : "Použito pro odkazování na jiný zdroj, kde druh vztahu je znám, ale neodpovídá standardním vlastnostem ze slovníku Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) či slovníku PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "es", + "@value" : "Se usa para asociar con otro recurso para el cuál la naturaleza de la relación es conocida pero no es ninguna de las propiedades que provee el estándar Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + } ] + }, { + "@id" : "dcat:record", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με τις καταγραφές του." + }, { + "@language" : "it", + "@value" : "Un record che descrive la registrazione di un singolo set di dati o di un servizio dati che fa parte del catalogo." + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à ses registres." + }, { + "@language" : "cs", + "@value" : "Propojuje katalog a jeho záznamy." + }, { + "@language" : "es", + "@value" : "Describe la registración de un conjunto de datos o un servicio de datos en el catálogo." + }, { + "@language" : "cs", + "@value" : "Záznam popisující registraci jedné datové sady či datové služby jakožto součásti katalogu." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بسجل ضمنه" + }, { + "@language" : "da", + "@value" : "En post der beskriver registreringen af et enkelt datasæt eller en datatjeneste som er opført i kataloget." + }, { + "@language" : "en", + "@value" : "A record describing the registration of a single dataset or data service that is part of the catalog." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるカタログ・レコード。" + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "カタログ・レコード" + }, { + "@language" : "ar", + "@value" : "سجل" + }, { + "@language" : "fr", + "@value" : "registre" + }, { + "@language" : "cs", + "@value" : "záznam" + }, { + "@language" : "it", + "@value" : "record" + }, { + "@language" : "en", + "@value" : "record" + }, { + "@language" : "es", + "@value" : "registro" + }, { + "@language" : "el", + "@value" : "καταγραφή" + }, { + "@language" : "da", + "@value" : "post" + } ], + "range" : "dcat:CatalogRecord", + "skos:altLabel" : { + "@language" : "da", + "@value" : "har post" + }, + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Propojuje katalog a jeho záznamy." + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à ses registres." + }, { + "@language" : "cs", + "@value" : "Záznam popisující registraci jedné datové sady či datové služby jakožto součásti katalogu." + }, { + "@language" : "da", + "@value" : "En post der beskriver registreringen af et enkelt datasæt eller en datatjeneste som er opført i kataloget." + }, { + "@language" : "it", + "@value" : "Un record che descrive la registrazione di un singolo set di dati o di un servizio dati che fa parte del catalogo." + }, { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με τις καταγραφές του." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるカタログ・レコード。" + }, { + "@language" : "es", + "@value" : "Describe la registración de un conjunto de datos o un servicio de datos en el catálogo." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بسجل ضمنه" + }, { + "@language" : "en", + "@value" : "A record describing the registration of a single dataset or data service that is part of the catalog." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English, Italian, Spanish and Czech Definitions modified by DCAT revision team, other translations pending." + } + }, { + "@id" : "dcat:servesDataset", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una colección de datos que este Servicio de Datos puede distribuir." + }, { + "@language" : "da", + "@value" : "En samling af data som denne datatjeneste kan distribuere." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che questo DataService può distribuire." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, kterou je tato Datová služba schopna poskytnout." + }, { + "@language" : "en", + "@value" : "A collection of data that this DataService can distribute." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "datatjeneste for datasæt" + }, { + "@language" : "it", + "@value" : "serve set di dati" + }, { + "@language" : "cs", + "@value" : "poskytuje datovou sadu" + }, { + "@language" : "en", + "@value" : "serves dataset" + }, { + "@language" : "es", + "@value" : "provee conjunto de datos" + } ], + "range" : "dcat:Dataset", + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "udstiller" + }, { + "@language" : "da", + "@value" : "ekspederer" + }, { + "@language" : "da", + "@value" : "distribuerer" + } ], + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "En samling af data som denne datatjeneste kan distribuere." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che questo DataService può distribuire." + }, { + "@language" : "en", + "@value" : "A collection of data that this DataService can distribute." + }, { + "@language" : "es", + "@value" : "Una colección de datos que este Servicio de Datos puede distribuir." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, kterou je tato Datová služba schopna poskytnout." + } ] + }, { + "@id" : "dcat:service", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Umístění či přístupový bod registrovaný v katalogu." + }, { + "@language" : "en", + "@value" : "A site or endpoint that is listed in the catalog." + }, { + "@language" : "it", + "@value" : "Un sito o endpoint elencato nel catalogo." + }, { + "@language" : "da", + "@value" : "Et websted eller et endpoint som er opført i kataloget." + }, { + "@language" : "es", + "@value" : "Un sitio o 'endpoint' que está listado en el catálogo." + } ], + "domain" : "dcat:Catalog", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "service" + }, { + "@language" : "da", + "@value" : "datatjeneste" + }, { + "@language" : "es", + "@value" : "servicio" + }, { + "@language" : "it", + "@value" : "servizio" + }, { + "@language" : "cs", + "@value" : "služba" + } ], + "range" : "dcat:DataService", + "subPropertyOf" : [ "dct:hasPart", "rdfs:member" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "har datatjeneste" + }, + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "Un sitio o 'endpoint' que está listado en el catálogo." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod registrovaný v katalogu." + }, { + "@language" : "da", + "@value" : "Et websted eller et endpoint som er opført i kataloget." + }, { + "@language" : "en", + "@value" : "A site or endpoint that is listed in the catalog." + }, { + "@language" : "it", + "@value" : "Un sito o endpoint elencato nel catalogo." + } ] + }, { + "@id" : "dcat:spatialResolutionInMeters", + "@type" : "owl:DatatypeProperty", + "rdfs:comment" : [ { + "@language" : "en-gb", + "@value" : "minimum spatial separation resolvable in a dataset, measured in metres." + }, { + "@language" : "en-us", + "@value" : "minimum spatial separation resolvable in a dataset, measured in meters." + }, { + "@language" : "es", + "@value" : "mínima separacíon espacial disponible en un conjunto de datos, medida en metros." + }, { + "@language" : "it", + "@value" : "separazione spaziale minima risolvibile in un set di dati, misurata in metri." + }, { + "@language" : "da", + "@value" : "mindste geografiske afstand som kan erkendes i et datasæt, målt i meter." + }, { + "@language" : "cs", + "@value" : "minimální prostorový rozestup rozeznatelný v datové sadě, měřeno v metrech." + } ], + "rdfs:label" : [ { + "@language" : "es", + "@value" : "resolución espacial (metros)" + }, { + "@language" : "en-gb", + "@value" : "spatial resolution (metres)" + }, { + "@language" : "en-us", + "@value" : "spatial resolution (meters)" + }, { + "@language" : "cs", + "@value" : "prostorové rozlišení (metry)" + }, { + "@language" : "it", + "@value" : "risoluzione spaziale (metros)" + }, { + "@language" : "da", + "@value" : "geografisk opløsning (meter)" + } ], + "range" : "xsd:decimal", + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny genskab tilføjet i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en-us", + "@value" : "minimum spatial separation resolvable in a dataset, measured in meters." + }, { + "@language" : "it", + "@value" : "separazione spaziale minima risolvibile in un set di dati, misurata in metri." + }, { + "@language" : "cs", + "@value" : "minimální prostorový rozestup rozeznatelný v datové sadě, měřeno v metrech." + }, { + "@language" : "en-gb", + "@value" : "minimum spatial separation resolvable in a dataset, measured in metres." + }, { + "@language" : "es", + "@value" : "mínima separacíon espacial disponible en un conjunto de datos, medida en metros." + }, { + "@language" : "da", + "@value" : "mindste geografiske afstand som kan resolveres i et datasæt, målt i meter." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Může se vyskytnout v popisu Datové sady nebo Distribuce, takže nebyl specifikován definiční obor." + }, { + "@language" : "en", + "@value" : "Might appear in the description of a Dataset or a Distribution, so no domain is specified." + }, { + "@language" : "da", + "@value" : "Kan optræde i forbindelse med beskrivelse af datasættet eller datasætditributionen, så der er ikke angivet et domæne for egenskaben." + } ], + "skos:scopeNote" : [ { + "@language" : "cs", + "@value" : "Pokud je datová sada obraz či mřížka, měla by tato vlastnost odpovídat rozestupu položek. Pro ostatní druhy prostorových datových sad bude tato vlastnost obvykle indikovat nejmenší vzdálenost mezi položkami této datové sady." + }, { + "@language" : "da", + "@value" : "Hvis datasættet udgøres af et billede eller et grid, så bør dette svare til afstanden mellem elementerne. For andre typer af spatiale datasæt, vil denne egenskab typisk indikere den mindste afstand mellem elementerne i datasættet." + }, { + "@language" : "cs", + "@value" : "Různá prostorová rozlišení mohou být poskytována jako různé distribuce datové sady." + }, { + "@language" : "es", + "@value" : "Distintas distribuciones de un conjunto de datos pueden tener resoluciones espaciales diferentes." + }, { + "@language" : "da", + "@value" : "Alternative geografiske opløsninger kan leveres som forskellige datasætdistributioner." + }, { + "@language" : "it", + "@value" : "Se il set di dati è un'immagine o una griglia, questo dovrebbe corrispondere alla spaziatura degli elementi. Per altri tipi di set di dati spaziali, questa proprietà di solito indica la distanza minima tra gli elementi nel set di dati." + }, { + "@language" : "en", + "@value" : "Alternative spatial resolutions might be provided as different dataset distributions." + }, { + "@language" : "it", + "@value" : "Risoluzioni spaziali alternative possono essere fornite come diverse distribuzioni di set di dati." + }, { + "@language" : "es", + "@value" : "Si el conjunto de datos es una imágen o grilla, esta propiedad corresponde al espaciado de los elementos. Para otro tipo de conjunto de datos espaciales, esta propieda usualmente indica la menor distancia entre los elementos de dichos datos." + }, { + "@language" : "en", + "@value" : "If the dataset is an image or grid this should correspond to the spacing of items. For other kinds of spatial dataset, this property will usually indicate the smallest distance between items in the dataset." + } ] + }, { + "@id" : "dcat:startDate", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:PeriodOfTime", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "data di inizio" + }, { + "@language" : "cs", + "@value" : "datum začátku" + }, { + "@language" : "en", + "@value" : "start date" + }, { + "@language" : "da", + "@value" : "startdato" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "starttidspunkt" + }, + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "El comienzo del período" + }, { + "@language" : "cs", + "@value" : "Začátek doby trvání" + }, { + "@language" : "en", + "@value" : "The start of the period" + }, { + "@language" : "da", + "@value" : "Start på perioden." + }, { + "@language" : "it", + "@value" : "L'inizio del periodo" + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Rækkeviden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige niveauer af tidslig præcision ifm. angivelse af startdatoen for en periode. Den kan eksempelvis udtrykkes som en dato (xsd:date), en dato og et tidspunkt (xsd:dateTime), eller et årstal (xsd:gYear)." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different level of temporal precision for specifying the start of a period. E.g., it can be expressed with a date (xsd:date), a date and time (xsd:dateTime), or a year (xsd:gYear)." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé úrovně časového rozlišení pro specifikaci začátku doby trvání. Ten může být kupříkladu vyjádřen datumem (xsd:date), datumem a časem (xsd:dateTime) či rokem (xsd:gYear)." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generico, con lo scopo di consentire diversi livelli di precisione temporale per specificare l'inizio di un periodo. Ad esempio, può essere espresso con una data (xsd:date), una data e un'ora (xsd:dateTime), o un anno (xsd:gYear)." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintos niveles de precisión temporal para especificar el comienzo de un período. Por ejemplo, puede expresarse como una fecha (xsd:date), una fecha y un tiempo (xsd:dateTime), o un año (xsd:gYear)." + } ] + }, { + "@id" : "dcat:temporalResolution", + "@type" : "owl:DatatypeProperty", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "minimum time period resolvable in a dataset." + }, { + "@language" : "cs", + "@value" : "minimální doba trvání rozlišitelná v datové sadě." + }, { + "@language" : "es", + "@value" : "período de tiempo mínimo en el conjunto de datos." + }, { + "@language" : "da", + "@value" : "mindste tidsperiode der kan resolveres i datasættet." + }, { + "@language" : "it", + "@value" : "periodo di tempo minimo risolvibile in un set di dati." + } ], + "rdfs:label" : [ { + "@language" : "es", + "@value" : "resolución temporal" + }, { + "@language" : "da", + "@value" : "tidslig opløsning" + }, { + "@language" : "en", + "@value" : "temporal resolution" + }, { + "@language" : "cs", + "@value" : "časové rozlišení" + }, { + "@language" : "it", + "@value" : "risoluzione temporale" + } ], + "range" : "xsd:duration", + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "minimální doba trvání rozlišitelná v datové sadě." + }, { + "@language" : "es", + "@value" : "período de tiempo mínimo en el conjunto de datos." + }, { + "@language" : "en", + "@value" : "minimum time period resolvable in a dataset." + }, { + "@language" : "it", + "@value" : "periodo di tempo minimo risolvibile in un set di dati." + }, { + "@language" : "da", + "@value" : "mindste tidsperiode der kan resolveres i datasættet." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Může se vyskytnout v popisu Datové sady nebo Distribuce, takže nebyl specifikován definiční obor." + }, { + "@language" : "en", + "@value" : "Might appear in the description of a Dataset or a Distribution, so no domain is specified." + }, { + "@language" : "da", + "@value" : "Kan optræde i forbindelse med beskrivelse af datasættet eller datasætditributionen, så der er ikke angivet et domæne for egenskaben." + } ], + "skos:scopeNote" : [ { + "@language" : "en", + "@value" : "Alternative temporal resolutions might be provided as different dataset distributions." + }, { + "@language" : "cs", + "@value" : "Různá časová rozlišení mohou být poskytována jako různé distribuce datové sady." + }, { + "@language" : "da", + "@value" : "Alternative tidslige opløsninger kan leveres som forskellige datasætdistributioner." + }, { + "@language" : "es", + "@value" : "Si el conjunto de datos es una serie temporal, debe corresponder al espaciado de los elementos de la serie. Para otro tipo de conjuntos de datos, esta propiedad indicará usualmente la menor diferencia de tiempo entre elementos en el dataset." + }, { + "@language" : "cs", + "@value" : "Pokud je datová sada časovou řadou, měla by tato vlastnost odpovídat rozestupu položek v řadě. Pro ostatní druhy datových sad bude tato vlastnost obvykle indikovat nejmenší časovou vzdálenost mezi položkami této datové sady." + }, { + "@language" : "es", + "@value" : "Distintas distribuciones del conjunto de datos pueden tener resoluciones temporales diferentes." + }, { + "@language" : "en", + "@value" : "If the dataset is a time-series this should correspond to the spacing of items in the series. For other kinds of dataset, this property will usually indicate the smallest time difference between items in the dataset." + }, { + "@language" : "it", + "@value" : "Se il set di dati è una serie temporale, questo dovrebbe corrispondere alla spaziatura degli elementi della serie. Per altri tipi di set di dati, questa proprietà di solito indica la più piccola differenza di tempo tra gli elementi nel set di dati." + }, { + "@language" : "da", + "@value" : "Hvis datasættet er en tidsserie, så bør denne egenskab svare til afstanden mellem elementerne i tidsserien. For andre typer af datasæt indikerer denne egenskab den mindste tidsforskel mellem elementer i datasættet." + }, { + "@language" : "it", + "@value" : "Risoluzioni temporali alternative potrebbero essere fornite come diverse distribuzioni di set di dati." + } ] + }, { + "@id" : "dcat:theme", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "La categoria principale della risorsa. Una risorsa può avere più temi." + }, { + "@language" : "cs", + "@value" : "Hlavní téma zdroje. Zdroj může mít více témat." + }, { + "@language" : "es", + "@value" : "La categoría principal del recurso. Un recurso puede tener varios temas." + }, { + "@language" : "en", + "@value" : "A main category of the resource. A resource can have multiple themes." + }, { + "@language" : "ar", + "@value" : "التصنيف الرئيسي لقائمة البيانات. قائمة البيانات يمكن أن تملك أكثر من تصنيف رئيسي واحد." + }, { + "@language" : "da", + "@value" : "Et centralt emne for ressourcen. En ressource kan have flere centrale emner." + }, { + "@language" : "fr", + "@value" : "La catégorie principale de la ressource. Une ressource peut avoir plusieurs thèmes." + }, { + "@language" : "ja", + "@value" : "データセットの主要カテゴリー。データセットは複数のテーマを持つことができます。" + }, { + "@language" : "el", + "@value" : "Η κύρια κατηγορία του συνόλου δεδομένων. Ένα σύνολο δεδομένων δύναται να έχει πολλαπλά θέματα." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "emne" + }, { + "@language" : "el", + "@value" : "Θέμα" + }, { + "@language" : "en", + "@value" : "theme" + }, { + "@language" : "es", + "@value" : "tema" + }, { + "@language" : "it", + "@value" : "tema" + }, { + "@language" : "ja", + "@value" : "テーマ/カテゴリー" + }, { + "@language" : "cs", + "@value" : "téma" + }, { + "@language" : "ar", + "@value" : "التصنيف" + }, { + "@language" : "fr", + "@value" : "thème" + } ], + "range" : "skos:Concept", + "subPropertyOf" : "dct:subject", + "skos:altLabel" : { + "@language" : "da", + "@value" : "tema" + }, + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Hlavní téma zdroje. Zdroj může mít více témat." + }, { + "@language" : "fr", + "@value" : "La catégorie principale de la ressource. Une ressource peut avoir plusieurs thèmes." + }, { + "@language" : "es", + "@value" : "La categoría principal del recurso. Un recurso puede tener varios temas." + }, { + "@language" : "el", + "@value" : "Η κύρια κατηγορία του συνόλου δεδομένων. Ένα σύνολο δεδομένων δύναται να έχει πολλαπλά θέματα." + }, { + "@language" : "it", + "@value" : "La categoria principale della risorsa. Una risorsa può avere più temi." + }, { + "@language" : "ja", + "@value" : "データセットの主要カテゴリー。データセットは複数のテーマを持つことができます。" + }, { + "@language" : "en", + "@value" : "A main category of the resource. A resource can have multiple themes." + }, { + "@language" : "da", + "@value" : "Et centralt emne for ressourcen. En ressource kan have flere centrale emner." + }, { + "@language" : "ar", + "@value" : "التصنيف الرئيسي لقائمة البيانات. قائمة البيانات يمكن أن تملك أكثر من تصنيف رئيسي واحد." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, all except for Italian and Czech translations are pending." + }, + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "El conjunto de skos:Concepts utilizados para categorizar los recursos están organizados en un skos:ConceptScheme que describe todas las categorías y sus relaciones en el catálogo." + }, { + "@language" : "ja", + "@value" : "データセットを分類するために用いられるskos:Conceptの集合は、カタログのすべてのカテゴリーとそれらの関係を記述しているskos:ConceptSchemeで組織化されます。" + }, { + "@language" : "cs", + "@value" : "Sada instancí třídy skos:Concept použitá pro kategorizaci zdrojů je organizována do schématu konceptů skos:ConceptScheme, které popisuje všechny kategorie v katalogu a jejich vztahy." + }, { + "@language" : "it", + "@value" : "Il set di concetti skos usati per categorizzare le risorse sono organizzati in skos:ConceptScheme che descrive tutte le categorie e le loro relazioni nel catalogo." + }, { + "@language" : "da", + "@value" : "Samlingen af begreber (skos:Concept) der anvendes til at emneinddele ressourcer organiseres i et begrebssystem (skos:ConceptScheme) som beskriver alle emnerne og deres relationer i kataloget." + }, { + "@language" : "fr", + "@value" : "Un ensemble de skos:Concepts utilisés pour catégoriser les ressources sont organisés en un skos:ConceptScheme décrivant toutes les catégories et ses relations dans le catalogue." + }, { + "@language" : "en", + "@value" : "The set of skos:Concepts used to categorize the resources are organized in a skos:ConceptScheme describing all the categories and their relations in the catalog." + }, { + "@language" : "el", + "@value" : "Το σετ των skos:Concepts που χρησιμοποιείται για να κατηγοριοποιήσει τα σύνολα δεδομένων είναι οργανωμένο εντός ενός skos:ConceptScheme που περιγράφει όλες τις κατηγορίες και τις σχέσεις αυτών στον κατάλογο." + } ] + }, { + "@id" : "dcat:themeTaxonomy", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rangeIncludes" : [ "skos:ConceptScheme", "owl:Ontology", "skos:Collection" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il sistema di organizzazione della conoscenza (KOS) usato per classificare i dataset del catalogo." + }, { + "@language" : "en", + "@value" : "The knowledge organization system (KOS) used to classify catalog's datasets." + }, { + "@language" : "fr", + "@value" : "Le systhème d'ogranisation de connaissances utilisé pour classifier les jeux de données du catalogue." + }, { + "@language" : "es", + "@value" : "El sistema de organización del conocimiento utilizado para clasificar conjuntos de datos de catálogos." + }, { + "@language" : "da", + "@value" : "Vidensorganiseringssystem (KOS) som anvendes til at klassificere datasæt i kataloget." + }, { + "@language" : "cs", + "@value" : "Systém organizace znalostí (KOS) použitý pro klasifikaci datových sad v katalogu." + }, { + "@language" : "ja", + "@value" : "カタログのデータセットを分類するために用いられる知識組織化体系(KOS;knowledge organization system)。" + }, { + "@language" : "ar", + "@value" : "لائحة التصنيفات المستخدمه لتصنيف قوائم البيانات ضمن الفهرس" + }, { + "@language" : "el", + "@value" : "Το σύστημα οργάνωσης γνώσης που χρησιμοποιείται για την κατηγοριοποίηση των συνόλων δεδομένων του καταλόγου." + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "fr", + "@value" : "taxonomie de thèmes" + }, { + "@language" : "it", + "@value" : "tassonomia dei temi" + }, { + "@language" : "ja", + "@value" : "テーマ" + }, { + "@language" : "en", + "@value" : "theme taxonomy" + }, { + "@language" : "ar", + "@value" : "قائمة التصنيفات" + }, { + "@language" : "el", + "@value" : "Ταξινομία θεματικών κατηγοριών." + }, { + "@language" : "da", + "@value" : "emnetaksonomi" + }, { + "@language" : "cs", + "@value" : "taxonomie témat" + }, { + "@language" : "es", + "@value" : "taxonomía de temas" + } ], + "range" : "rdfs:Resource", + "skos:altLabel" : { + "@language" : "da", + "@value" : "temataksonomi" + }, + "skos:definition" : [ { + "@language" : "da", + "@value" : "Vidensorganiseringssystem (KOS) som anvendes til at klassificere datasæt i kataloget." + }, { + "@language" : "ar", + "@value" : "لائحة التصنيفات المستخدمه لتصنيف قوائم البيانات ضمن الفهرس" + }, { + "@language" : "es", + "@value" : "El sistema de organización del conocimiento utilizado para clasificar conjuntos de datos de catálogos." + }, { + "@language" : "cs", + "@value" : "Systém organizace znalostí (KOS) použitý pro klasifikaci datových sad v katalogu." + }, { + "@language" : "ja", + "@value" : "カタログのデータセットを分類するために用いられる知識組織化体系(KOS;knowledge organization system)。" + }, { + "@language" : "en", + "@value" : "The knowledge organization system (KOS) used to classify catalog's datasets." + }, { + "@language" : "it", + "@value" : "Il sistema di organizzazione della conoscenza (KOS) usato per classificare i dataset del catalogo." + }, { + "@language" : "el", + "@value" : "Το σύστημα οργάνωσης γνώσης που χρησιμοποιείται για την κατηγοριοποίηση των συνόλων δεδομένων του καταλόγου." + }, { + "@language" : "fr", + "@value" : "Le systhème d'ogranisation de connaissances utilisé pour classifier les jeux de données du catalogue." + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Det anbefales at taksonomien organiseres i et skos:ConceptScheme, skos:Collection, owl:Ontology eller lignende, som giver mulighed for at ethvert medlem af taksonomien kan forsynes med en IRI og udgives som linked-data." + }, { + "@language" : "en", + "@value" : "It is recommended that the taxonomy is organized in a skos:ConceptScheme, skos:Collection, owl:Ontology or similar, which allows each member to be denoted by an IRI and published as linked-data." + }, { + "@language" : "cs", + "@value" : "Je doporučeno, aby byla taxonomie vyjádřena jako skos:ConceptScheme, skos:Collection, owl:Ontology nebo podobné, aby mohla být každá položka identifikována pomocí IRI a publikována jako propojená data." + }, { + "@language" : "es", + "@value" : "Se recomienda que la taxonomía se organice como un skos:ConceptScheme, skos:Collection, owl:Ontology o similar, los cuáles permiten que cada miembro se denote con una IRI y se publique como datos enlazados." + }, { + "@language" : "it", + "@value" : "Si raccomanda che la tassonomia sia organizzata in uno skos:ConceptScheme, skos:Collection, owl:Ontology o simili, che permette ad ogni membro di essere indicato da un IRI e pubblicato come linked-data." + } ] + }, { + "@id" : "foaf:homepage", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : "This axiom needed so that Protege loads DCAT2 without errors." + }, { + "@id" : "foaf:primaryTopic", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : "This axiom needed so that Protege loads DCAT2 without errors." + } ], + "@context" : { + "domain" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#domain", + "@type" : "@id" + }, + "scopeNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#scopeNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "label" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#label", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "isDefinedBy" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#isDefinedBy", + "@type" : "@id" + }, + "comment" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#comment", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "changeNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#changeNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "definition" : { + "@id" : "http://www.w3.org/2004/02/skos/core#definition", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "subPropertyOf" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#subPropertyOf", + "@type" : "@id" + }, + "range" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#range", + "@type" : "@id" + }, + "name" : { + "@id" : "http://xmlns.com/foaf/0.1/name", + "@type" : "http://www.w3.org/2001/XMLSchema#string" + }, + "homepage" : { + "@id" : "http://xmlns.com/foaf/0.1/homepage", + "@type" : "@id" + }, + "rest" : { + "@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest", + "@type" : "@id" + }, + "first" : { + "@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#first", + "@type" : "@id" + }, + "seeAlso" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#seeAlso", + "@type" : "@id" + }, + "editorialNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#editorialNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "altLabel" : { + "@id" : "http://www.w3.org/2004/02/skos/core#altLabel", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "workInfoHomepage" : { + "@id" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "@type" : "@id" + }, + "affiliation" : { + "@id" : "http://schema.org/affiliation", + "@type" : "@id" + }, + "rangeIncludes" : { + "@id" : "http://schema.org/rangeIncludes", + "@type" : "@id" + }, + "unionOf" : { + "@id" : "http://www.w3.org/2002/07/owl#unionOf", + "@type" : "@id" + }, + "creator" : { + "@id" : "http://purl.org/dc/terms/creator", + "@type" : "@id" + }, + "versionInfo" : { + "@id" : "http://www.w3.org/2002/07/owl#versionInfo", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "contributor" : { + "@id" : "http://purl.org/dc/terms/contributor", + "@type" : "@id" + }, + "modified" : { + "@id" : "http://purl.org/dc/terms/modified", + "@type" : "http://www.w3.org/2001/XMLSchema#date" + }, + "imports" : { + "@id" : "http://www.w3.org/2002/07/owl#imports", + "@type" : "@id" + }, + "license" : { + "@id" : "http://purl.org/dc/terms/license", + "@type" : "@id" + }, + "maker" : { + "@id" : "http://xmlns.com/foaf/0.1/maker", + "@type" : "@id" + }, + "subClassOf" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#subClassOf", + "@type" : "@id" + }, + "propertyChainAxiom" : { + "@id" : "http://www.w3.org/2002/07/owl#propertyChainAxiom", + "@type" : "@id" + }, + "onProperty" : { + "@id" : "http://www.w3.org/2002/07/owl#onProperty", + "@type" : "@id" + }, + "cardinality" : { + "@id" : "http://www.w3.org/2002/07/owl#cardinality", + "@type" : "http://www.w3.org/2001/XMLSchema#nonNegativeInteger" + }, + "allValuesFrom" : { + "@id" : "http://www.w3.org/2002/07/owl#allValuesFrom", + "@type" : "@id" + }, + "dct" : "http://purl.org/dc/terms/", + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "dctype" : "http://purl.org/dc/dcmitype/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "skos" : "http://www.w3.org/2004/02/skos/core#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#", + "vcard" : "http://www.w3.org/2006/vcard/ns#", + "dcat" : "http://www.w3.org/ns/dcat#", + "prov" : "http://www.w3.org/ns/prov#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "sdo" : "http://schema.org/" + } +} diff --git a/backend/src/main/resources/json-ld/dspace.jsonld b/backend/src/main/resources/json-ld/dspace.jsonld new file mode 100644 index 00000000..f475b235 --- /dev/null +++ b/backend/src/main/resources/json-ld/dspace.jsonld @@ -0,0 +1,62 @@ +{ + "@context": { + "odrl": "http://www.w3.org/ns/odrl/2/", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "cred": "https://www.w3.org/2018/credentials#", + "sec": "https://w3id.org/security#", + "foaf": "http://xmlns.com/foaf/0.1/", + "cc": "http://creativecommons.org/ns#", + "dct": "http://purl.org/dc/terms/", + "dcat": "http://www.w3.org/ns/dcat#", + "dspace": "https://w3id.org/dspace/2024/1/", + + "dct:title": { "@language": "en" }, + "dct:creator": { "@type": "@id" }, + "dct:description": { "@container": "@set" }, + "dct:issued": { "@type": "xsd:dateTime" }, + "dct:modified": { "@type": "xsd:dateTime" }, + + "dcat:byteSize": { "@type": "xsd:decimal" }, + "dcat:distribution": { "@container": "@set" }, + "dcat:theme": { "@type": "@id" }, + "dcat:conformsTo": { "@type": "@id" }, + "dcat:dataset": { "@container": "@set" }, + "dcat:endpointURL": { "@type": "xsd:anyURI" }, + "dcat:endpointDescription": { "@type": "xsd:anyURI" }, + "dcat:keyword": { "@container": "@set" }, + "dcat:servesDataset": {"@container": "@set" }, + "dcat:service": { "@container": "@set" }, + "dcat:accessService": { "@container": "@set" }, + + "dspace:agreementId": { "@type": "@id" }, + "dspace:dataset": { "@type": "@id" }, + "dspace:transportType": { "@type": "@id" }, + "dspace:state": { "@type": "@id" }, + "dspace:providerId": { "@type": "@id" }, + "dspace:consumerId": { "@type": "@id" }, + "dspace:participantId": { "@type": "@id" }, + "dspace:reason": { "@container": "@set" }, + "dspace:catalog": { "@container": "@set" }, + "dspace:filter": { "@container": "@set" }, + "dspace:timestamp": { "@type": "xsd:dateTime" }, + "dspace:callbackAddress": { "@type": "xsd:anyURI" }, + "dspace:endpointProperties": { "@container": "@set" }, + + "foaf:homepage": { "@type": "xsd:anyURI" }, + + "odrl:hasPolicy": { "@container": "@set" }, + "odrl:permission": { "@container": "@set" }, + "odrl:prohibition": { "@container": "@set" }, + "odrl:obligation": { "@container": "@set" }, + "odrl:duty": { "@container": "@set" }, + "odrl:constraint": { "@container": "@set" }, + "odrl:action": { "@type": "@id" }, + "odrl:target": { "@type": "@id" }, + "odrl:leftOperand": { "@type": "@id" }, + "odrl:operator": { "@type": "@id" }, + "odrl:rightOperandReference": { "@type": "@id" }, + "odrl:profile": { "@container": "@set" } + "odrl:assigner": { "@type": "@id" }, + "odrl:assignee": { "@type": "@id" } + } +} diff --git a/backend/src/main/resources/json-ld/edc-v1.jsonld b/backend/src/main/resources/json-ld/edc-v1.jsonld new file mode 100644 index 00000000..d539d3e0 --- /dev/null +++ b/backend/src/main/resources/json-ld/edc-v1.jsonld @@ -0,0 +1,47 @@ +{ + "@context": { + "edc": "https://w3id.org/edc/v0.0.1/ns/", + "@vocab": "https://w3id.org/edc/v0.0.1/ns/", + "schema": "http://schema.org/", + "PolicyDefinition": "edc:PolicyDefinition", + "AssetEntryNewDto": "edc:AssetEntryNewDto", + "DataAddress": "edc:DataAddress", + "NegotiationState": "edc:NegotiationState", + "TerminateNegotiation": "edc:TerminateNegotiation", + "ContractRequest": "edc:ContractRequest", + "policy": { + "@id": "edc:policy", + "@type": "@id", + "@context": [ + "http://www.w3.org/ns/odrl.jsonld" + ] + }, + "createdAt": "edc:createdAt", + "properties": "edc:properties", + "privateProperties": "edc:privateProperties", + "dataAddress": "edc:dataAddress", + "type": "edc:type", + "counterPartyAddress": "edc:counterPartyAddress", + "protocol": "edc:protocol", + "querySpec": "edc:querySpec", + "accessPolicyId": "edc:accessPolicyId", + "contractPolicyId": "edc:contractPolicyId", + "assetsSelector": "edc:assetsSelector", + "state": "edc:state", + "reason": "edc:reason", + "connectorAddress": "edc:connectorAddress", + "offer": "edc:offer", + "asset": "edc:asset", + "offerId": "edc:offerId", + "assetId": "edc:assetId", + "contractId": "edc:contractId", + "connectorId": "edc:connectorId", + "callbackAddresses": "edc:callbackAddresses", + "dataDestination": "edc:dataDestination", + "baseUrl": "edc:baseUrl", + "providerId": "edc:providerId", + "uri": "edc:uri", + "events": "edc:events", + "transactional": "edc:transactional" + } +} \ No newline at end of file diff --git a/backend/src/main/resources/json-ld/odrl.jsonld b/backend/src/main/resources/json-ld/odrl.jsonld new file mode 100644 index 00000000..e779e87f --- /dev/null +++ b/backend/src/main/resources/json-ld/odrl.jsonld @@ -0,0 +1,200 @@ +{ + "@context": { + "odrl": "http://www.w3.org/ns/odrl/2/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "owl": "http://www.w3.org/2002/07/owl#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "dct": "http://purl.org/dc/terms/", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "vcard": "http://www.w3.org/2006/vcard/ns#", + "foaf": "http://xmlns.com/foaf/0.1/", + "schema": "http://schema.org/", + "cc": "http://creativecommons.org/ns#", + + "uid": "@id", + "type": "@type", + + "Policy": "odrl:Policy", + "Rule": "odrl:Rule", + "profile": {"@type": "@id", "@id": "odrl:profile"}, + + "inheritFrom": {"@type": "@id", "@id": "odrl:inheritFrom"}, + + "ConflictTerm": "odrl:ConflictTerm", + "conflict": {"@type": "@vocab", "@id": "odrl:conflict"}, + "perm": "odrl:perm", + "prohibit": "odrl:prohibit", + "invalid": "odrl:invalid", + + "Agreement": "odrl:Agreement", + "Assertion": "odrl:Assertion", + "Offer": "odrl:Offer", + "Privacy": "odrl:Privacy", + "Request": "odrl:Request", + "Set": "odrl:Set", + "Ticket": "odrl:Ticket", + + "Asset": "odrl:Asset", + "AssetCollection": "odrl:AssetCollection", + "relation": {"@type": "@id", "@id": "odrl:relation"}, + "hasPolicy": {"@type": "@id", "@id": "odrl:hasPolicy"}, + + "target": {"@type": "@id", "@id": "odrl:target"}, + "output": {"@type": "@id", "@id": "odrl:output"}, + + "partOf": {"@type": "@id", "@id": "odrl:partOf"}, + "source": {"@type": "@id", "@id": "odrl:source"}, + + "Party": "odrl:Party", + "PartyCollection": "odrl:PartyCollection", + "function": {"@type": "@vocab", "@id": "odrl:function"}, + "PartyScope": "odrl:PartyScope", + + "assignee": {"@type": "@id", "@id": "odrl:assignee"}, + "assigner": {"@type": "@id", "@id": "odrl:assigner"}, + "assigneeOf": {"@type": "@id", "@id": "odrl:assigneeOf"}, + "assignerOf": {"@type": "@id", "@id": "odrl:assignerOf"}, + "attributedParty": {"@type": "@id", "@id": "odrl:attributedParty"}, + "attributingParty": {"@type": "@id", "@id": "odrl:attributingParty"}, + "compensatedParty": {"@type": "@id", "@id": "odrl:compensatedParty"}, + "compensatingParty": {"@type": "@id", "@id": "odrl:compensatingParty"}, + "consentingParty": {"@type": "@id", "@id": "odrl:consentingParty"}, + "consentedParty": {"@type": "@id", "@id": "odrl:consentedParty"}, + "informedParty": {"@type": "@id", "@id": "odrl:informedParty"}, + "informingParty": {"@type": "@id", "@id": "odrl:informingParty"}, + "trackingParty": {"@type": "@id", "@id": "odrl:trackingParty"}, + "trackedParty": {"@type": "@id", "@id": "odrl:trackedParty"}, + "contractingParty": {"@type": "@id", "@id": "odrl:contractingParty"}, + "contractedParty": {"@type": "@id", "@id": "odrl:contractedParty"}, + + "Action": "odrl:Action", + "action": {"@type": "@vocab", "@id": "odrl:action"}, + "includedIn": {"@type": "@id", "@id": "odrl:includedIn"}, + "implies": {"@type": "@id", "@id": "odrl:implies"}, + + "Permission": "odrl:Permission", + "permission": {"@type": "@id", "@id": "odrl:permission"}, + + "Prohibition": "odrl:Prohibition", + "prohibition": {"@type": "@id", "@id": "odrl:prohibition"}, + + "obligation": {"@type": "@id", "@id": "odrl:obligation"}, + + "use": "odrl:use", + "grantUse": "odrl:grantUse", + "aggregate": "odrl:aggregate", + "annotate": "odrl:annotate", + "anonymize": "odrl:anonymize", + "archive": "odrl:archive", + "concurrentUse": "odrl:concurrentUse", + "derive": "odrl:derive", + "digitize": "odrl:digitize", + "display": "odrl:display", + "distribute": "odrl:distribute", + "execute": "odrl:execute", + "extract": "odrl:extract", + "give": "odrl:give", + "index": "odrl:index", + "install": "odrl:install", + "modify": "odrl:modify", + "move": "odrl:move", + "play": "odrl:play", + "present": "odrl:present", + "print": "odrl:print", + "read": "odrl:read", + "reproduce": "odrl:reproduce", + "sell": "odrl:sell", + "stream": "odrl:stream", + "textToSpeech": "odrl:textToSpeech", + "transfer": "odrl:transfer", + "transform": "odrl:transform", + "translate": "odrl:translate", + + "Duty": "odrl:Duty", + "duty": {"@type": "@id", "@id": "odrl:duty"}, + "consequence": {"@type": "@id", "@id": "odrl:consequence"}, + "remedy": {"@type": "@id", "@id": "odrl:remedy"}, + + "acceptTracking": "odrl:acceptTracking", + "attribute": "odrl:attribute", + "compensate": "odrl:compensate", + "delete": "odrl:delete", + "ensureExclusivity": "odrl:ensureExclusivity", + "include": "odrl:include", + "inform": "odrl:inform", + "nextPolicy": "odrl:nextPolicy", + "obtainConsent": "odrl:obtainConsent", + "reviewPolicy": "odrl:reviewPolicy", + "uninstall": "odrl:uninstall", + "watermark": "odrl:watermark", + + "Constraint": "odrl:Constraint", + "LogicalConstraint": "odrl:LogicalConstraint", + "constraint": {"@type": "@id", "@id": "odrl:constraint"}, + "refinement": {"@type": "@id", "@id": "odrl:refinement"}, + "Operator": "odrl:Operator", + "operator": {"@type": "@vocab", "@id": "odrl:operator"}, + "RightOperand": "odrl:RightOperand", + "rightOperand": "odrl:rightOperand", + "rightOperandReference":{"@type": "xsd:anyURI", "@id": "odrl:rightOperandReference"}, + "LeftOperand": "odrl:LeftOperand", + "leftOperand": {"@type": "@vocab", "@id": "odrl:leftOperand"}, + "unit": "odrl:unit", + "dataType": {"@type": "xsd:anyType", "@id": "odrl:datatype"}, + "status": "odrl:status", + + "absolutePosition": "odrl:absolutePosition", + "absoluteSpatialPosition": "odrl:absoluteSpatialPosition", + "absoluteTemporalPosition":"odrl:absoluteTemporalPosition", + "absoluteSize": "odrl:absoluteSize", + "count": "odrl:count", + "dateTime": "odrl:dateTime", + "delayPeriod": "odrl:delayPeriod", + "deliveryChannel": "odrl:deliveryChannel", + "elapsedTime": "odrl:elapsedTime", + "event": "odrl:event", + "fileFormat": "odrl:fileFormat", + "industry": "odrl:industry:", + "language": "odrl:language", + "media": "odrl:media", + "meteredTime": "odrl:meteredTime", + "payAmount": "odrl:payAmount", + "percentage": "odrl:percentage", + "product": "odrl:product", + "purpose": "odrl:purpose", + "recipient": "odrl:recipient", + "relativePosition": "odrl:relativePosition", + "relativeSpatialPosition": "odrl:relativeSpatialPosition", + "relativeTemporalPosition":"odrl:relativeTemporalPosition", + "relativeSize": "odrl:relativeSize", + "resolution": "odrl:resolution", + "spatial": "odrl:spatial", + "spatialCoordinates": "odrl:spatialCoordinates", + "systemDevice": "odrl:systemDevice", + "timeInterval": "odrl:timeInterval", + "unitOfCount": "odrl:unitOfCount", + "version": "odrl:version", + "virtualLocation": "odrl:virtualLocation", + + "eq": "odrl:eq", + "gt": "odrl:gt", + "gteq": "odrl:gteq", + "lt": "odrl:lt", + "lteq": "odrl:lteq", + "neq": "odrl:neg", + "isA": "odrl:isA", + "hasPart": "odrl:hasPart", + "isPartOf": "odrl:isPartOf", + "isAllOf": "odrl:isAllOf", + "isAnyOf": "odrl:isAnyOf", + "isNoneOf": "odrl:isNoneOf", + "or": "odrl:or", + "xone": "odrl:xone", + "and": "odrl:and", + "andSequence": "odrl:andSequence", + + "policyUsage": "odrl:policyUsage" + + } +} diff --git a/backend/src/main/resources/json-ld/tx-auth-v1.jsonld b/backend/src/main/resources/json-ld/tx-auth-v1.jsonld new file mode 100644 index 00000000..9be52439 --- /dev/null +++ b/backend/src/main/resources/json-ld/tx-auth-v1.jsonld @@ -0,0 +1,12 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "tx-auth": "https://w3id.org/tractusx/auth/", + "refreshToken": "tx-auth:refreshToken", + "refreshEndpoint": "tx-auth:refreshEndpoint", + "refreshAudience": "tx-auth:refreshAudience", + "audience": "tx-auth:audience", + "expiresIn": "tx-auth:expiresIn" + } +} diff --git a/backend/src/main/resources/json-ld/tx-v1.jsonld b/backend/src/main/resources/json-ld/tx-v1.jsonld new file mode 100644 index 00000000..96342b95 --- /dev/null +++ b/backend/src/main/resources/json-ld/tx-v1.jsonld @@ -0,0 +1,9 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "tx": "https://w3id.org/tractusx/v0.0.1/ns/", + "BusinessPartnerNumber": "tx:BusinessPartnerNumber", + "BusinessPartnerGroup": "tx:BusinessPartnerGroup" + } +} diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java new file mode 100644 index 00000000..e4e324fa --- /dev/null +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java @@ -0,0 +1,557 @@ +package org.eclipse.tractusx.puris.backend.common.edc; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import org.eclipse.edc.jsonld.TitaniumJsonLd; +import org.eclipse.edc.jsonld.spi.JsonLdKeywords; +import org.eclipse.edc.spi.monitor.ConsoleMonitor; +import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcContractMappingService; +import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; +import org.eclipse.tractusx.puris.backend.common.util.PatternStore; +import org.eclipse.tractusx.puris.backend.common.util.VariablesService; +import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.io.File; +import java.io.StringReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; +import java.util.regex.Pattern; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +public class EdcAdapterServiceTest { + + @Mock + private VariablesService variablesService; + private final ObjectMapper objectMapper = new ObjectMapper(); + @Mock + private EdcRequestBodyBuilder edcRequestBodyBuilder; + @Mock + private EdcContractMappingService edcContractMappingService; + private final Pattern urlPattern = PatternStore.URL_PATTERN; + private static TitaniumJsonLd titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + private void allContexts() { + titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); + titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); + titaniumJsonLd.registerContext("https://w3id.org/tractusx/edc/v0.0.1"); + + titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); + + titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-policy", EdcRequestBodyBuilder.CX_POLICY_NAMESPACE); + +// titaniumJsonLd.registerNamespace("odrl", EdcRequestBodyBuilder.ODRL_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); + +// titaniumJsonLd.registerNamespace("tx-auth", EdcRequestBodyBuilder.TX_AUTH_NAMESPACE); + + titaniumJsonLd.registerNamespace("tx", EdcRequestBodyBuilder.TX_NAMESPACE); + + titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); + + titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); + + String PREFIX = "json-ld" + File.separator; + Map FILES = Map.of( + "https://w3id.org/tractusx/edc/v0.0.1", PREFIX + "tx-v1.jsonld", + "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", +// EdcRequestBodyBuilder.TX_AUTH_NAMESPACE, PREFIX + "tx-auth-v1.jsonld", + "https://w3id.org/edc/v0.0.1", PREFIX + "edc-v1.jsonld", + EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld" + +// EdcRequestBodyBuilder.DSPACE_NAMESPACE, PREFIX + "dspace.jsonld" + ); + + for (var e : FILES.entrySet()) { + var file = mapToFile(e); + titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); + } + } + + private void smallContexts() { + titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); + + titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); + + titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); + +// titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); +// +// titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); +// +// titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); +// +// titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); +// +// titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); + + String PREFIX = "json-ld" + File.separator; + Map FILES = Map.of( + "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", + EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld" + ); + + for (var e : FILES.entrySet()) { + var file = mapToFile(e); + titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); + } + } + + private void allContextsBackup() { + titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); + titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); + + titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); + + titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-policy", EdcRequestBodyBuilder.CX_POLICY_NAMESPACE); + + titaniumJsonLd.registerNamespace("odrl", EdcRequestBodyBuilder.ODRL_NAMESPACE); + + titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); + + titaniumJsonLd.registerNamespace("tx-auth", EdcRequestBodyBuilder.TX_AUTH_NAMESPACE); + + titaniumJsonLd.registerNamespace("tx", EdcRequestBodyBuilder.TX_NAMESPACE); + + titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); + + titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); + + String PREFIX = "json-ld" + File.separator; + Map FILES = Map.of( + EdcRequestBodyBuilder.TX_NAMESPACE, PREFIX + "tx-v1.jsonld", + "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", + EdcRequestBodyBuilder.TX_AUTH_NAMESPACE, PREFIX + "tx-auth-v1.jsonld", + EdcRequestBodyBuilder.EDC_NAMESPACE, PREFIX + "edc-v1.jsonld", + EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld", + + EdcRequestBodyBuilder.DSPACE_NAMESPACE, PREFIX + "dspace.jsonld" + ); + + for (var e : FILES.entrySet()) { + var file = mapToFile(e); + titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); + } + } + + private Map.Entry mapToFile(Map.Entry fileEntry) { + return Map.entry(fileEntry.getKey(), getResourceFile(fileEntry.getValue())); + } + + private File getResourceFile(String name) { + try (var stream = getClass().getClassLoader().getResourceAsStream(name)) { + if (stream == null) { + return null; + } + var filename = Path.of(name).getFileName().toString(); + var parts = filename.split("\\."); + var tempFile = Files.createTempFile(parts[0], "." + parts[1]); + Files.copy(stream, tempFile, REPLACE_EXISTING); + return tempFile.toFile(); + } catch (Exception e) { + System.out.println("Failure" + e); + return null; + } + } + + public static JsonObject convertObjectNodeToJsonObject(ObjectNode objectNode) { + try { + // Convert ObjectNode to JSON String + ObjectMapper mapper = new ObjectMapper(); + String jsonString = mapper.writeValueAsString(objectNode); + + // Create JsonReader from JSON String + JsonReader jsonReader = Json.createReader(new StringReader(jsonString)); + + // Get JsonObject from JsonReader + JsonObject jsonObject = jsonReader.readObject(); + + // Close the JsonReader + jsonReader.close(); + + return jsonObject; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + + @Test + public void expandCatalog() throws Exception{ + // GIVEN + var catalogJson = objectMapper.readTree(test1); + + var jakartaJson = convertObjectNodeToJsonObject((ObjectNode) catalogJson); + + smallContexts(); + + var x= titaniumJsonLd.expand(jakartaJson).getContent(); + + System.out.println(x); + + var y = titaniumJsonLd.compact(x).getContent(); + + System.out.println("###\n".repeat(2)); + + System.out.println(y); + + // WHEN + + // THEN + } + + static String test1 = "{\n" + + " \"@id\" : \"473e5307-c0c5-491f-96b4-68b9e25d4699\",\n" + + " \"@type\" : \"dcat:Catalog\",\n" + + " \"dspace:participantId\" : \"BPNL1234567890ZZ\",\n" + + " \"dcat:dataset\" : {\n" + + " \"@id\" : \"PartTypeInformationSubmodelApi@BPNL1234567890ZZ\",\n" + + " \"@type\" : \"dcat:Dataset\",\n" + + " \"odrl:hasPolicy\" : {\n" + + " \"@id\" : \"QlBOTDQ0NDQ0NDQ0NDRYWF9jb250cmFjdGRlZmluaXRpb25fZm9yX1BhcnRUeXBlSW5mb3JtYXRpb25TdWJtb2RlbEFwaUBCUE5MMTIzNDU2Nzg5MFpa:UGFydFR5cGVJbmZvcm1hdGlvblN1Ym1vZGVsQXBpQEJQTkwxMjM0NTY3ODkwWlo=:ZjdkMTJiYzYtNWYzZi00MTU3LWI3N2QtZTc1MjY1NjU1YTY4\",\n" + + " \"@type\" : \"odrl:Offer\",\n" + + " \"odrl:permission\" : {\n" + + " \"odrl:action\" : {\n" + + " \"@id\" : \"odrl:use\"\n" + + " },\n" + + " \"odrl:constraint\" : {\n" + + " \"odrl:and\" : [ {\n" + + " \"odrl:leftOperand\" : {\n" + + " \"@id\" : \"cx-policy:FrameworkAgreement\"\n" + + " },\n" + + " \"odrl:operator\" : {\n" + + " \"@id\" : \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\" : \"Puris:1.0\"\n" + + " }, {\n" + + " \"odrl:leftOperand\" : {\n" + + " \"@id\" : \"cx-policy:UsagePurpose\"\n" + + " },\n" + + " \"odrl:operator\" : {\n" + + " \"@id\" : \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\" : \"cx.puris.base:1\"\n" + + " } ]\n" + + " }\n" + + " },\n" + + " \"odrl:prohibition\" : [ ],\n" + + " \"odrl:obligation\" : [ ]\n" + + " },\n" + + " \"dcat:distribution\" : [ {\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + " \"dct:format\" : {\n" + + " \"@id\" : \"HttpData-PULL\"\n" + + " },\n" + + " \"dcat:accessService\" : {\n" + + " \"@id\" : \"e5fe796d-a985-42fb-874f-a3d8be5d9609\",\n" + + " \"@type\" : \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + " \"dcat:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + " \"dct:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " }\n" + + " }, {\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + " \"dct:format\" : {\n" + + " \"@id\" : \"HttpData-PUSH\"\n" + + " },\n" + + " \"dcat:accessService\" : {\n" + + " \"@id\" : \"e5fe796d-a985-42fb-874f-a3d8be5d9609\",\n" + + " \"@type\" : \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + " \"dcat:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + " \"dct:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " }\n" + + " } ],\n" + + " \"https://admin-shell.io/aas/3/0/HasSemantics/semanticId\" : {\n" + + " \"@id\" : \"urn:samm:io.catenax.part_type_information:1.0.0#PartTypeInformation\"\n" + + " },\n" + + " \"https://w3id.org/catenax/ontology/common#version\" : \"3.0\",\n" + + " \"id\" : \"PartTypeInformationSubmodelApi@BPNL1234567890ZZ\",\n" + + " \"https://purl.org/dc/terms/type\" : {\n" + + " \"@id\" : \"https://w3id.org/catenax/taxonomy#Submodel\"\n" + + " }\n" + + " },\n" + + " \"dcat:service\" : {\n" + + " \"@id\" : \"e5fe796d-a985-42fb-874f-a3d8be5d9609\",\n" + + " \"@type\" : \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + " \"dcat:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + " \"dct:endpointUrl\" : \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " },\n" + + " \"participantId\" : \"BPNL1234567890ZZ\",\n" + + " \"@context\" : {\n" + + " \"@vocab\" : \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\" : \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\" : \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\" : \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\" : \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\" : \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\" : \"http://purl.org/dc/terms/\",\n" + + " \"odrl\" : \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\" : \"https://w3id.org/dspace/v0.8/\"\n" + + " }\n" + + "}"; + + static String test2 = "\n" + + "{\n" + + "\n" + + " \"@id\" : \"f26d8d04-5ee5-4478-8de7-2e347b1f6685\",\n" + + "\n" + + " \"@type\" : \"dcat:Catalog\",\n" + + "\n" + + " \"dspace:participantId\" : \"BPNL00000007RXRX\",\n" + + "\n" + + " \"dcat:dataset\" : {\n" + + "\n" + + " \"@id\" : \"PartTypeInformationSubmodelApi@BPNL00000007RXRX\",\n" + + "\n" + + " \"@type\" : \"dcat:Dataset\",\n" + + "\n" + + " \"odrl:hasPolicy\" : {\n" + + "\n" + + " \"@id\" : \"QlBOTDAwMDAwMDA3UlRVUF9jb250cmFjdGRlZmluaXRpb25fZm9yX1BhcnRUeXBlSW5mb3JtYXRpb25TdWJtb2RlbEFwaUBCUE5MMDAwMDAwMDdSWFJY:UGFydFR5cGVJbmZvcm1hdGlvblN1Ym1vZGVsQXBpQEJQTkwwMDAwMDAwN1JYUlg=:NzE3MGJmZDMtYTg5NS00YmU2LWI5Y2EtMDVhYTUwY2VjMDk2\",\n" + + "\n" + + " \"@type\" : \"odrl:Offer\",\n" + + "\n" + + " \"odrl:permission\" : {\n" + + "\n" + + " \"odrl:action\" : {\n" + + "\n" + + " \"odrl:type\" : \"http://www.w3.org/ns/odrl/2/use\"\n" + + "\n" + + " },\n" + + "\n" + + " \"odrl:constraint\" : {\n" + + "\n" + + " \"odrl:and\" : [ {\n" + + "\n" + + " \"odrl:leftOperand\" : \"https://w3id.org/catenax/policy/FrameworkAgreement\",\n" + + "\n" + + " \"odrl:operator\" : {\n" + + "\n" + + " \"@id\" : \"odrl:eq\"\n" + + "\n" + + " },\n" + + "\n" + + " \"odrl:rightOperand\" : \"Puris:1.0\"\n" + + "\n" + + " }, {\n" + + "\n" + + " \"odrl:leftOperand\" : \"https://w3id.org/catenax/policy/UsagePurpose\",\n" + + "\n" + + " \"odrl:operator\" : {\n" + + "\n" + + " \"@id\" : \"odrl:eq\"\n" + + "\n" + + " },\n" + + "\n" + + " \"odrl:rightOperand\" : \"cx.puris.base:1\"\n" + + "\n" + + " } ]\n" + + "\n" + + " }\n" + + "\n" + + " },\n" + + "\n" + + " \"odrl:prohibition\" : [ ],\n" + + "\n" + + " \"odrl:obligation\" : [ ]\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:distribution\" : [ {\n" + + "\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + "\n" + + " \"dct:format\" : {\n" + + "\n" + + " \"@id\" : \"AzureStorage-PUSH\"\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:accessService\" : {\n" + + "\n" + + " \"@id\" : \"80ab93d7-847a-42d2-81d0-1f74b89b81b8\",\n" + + "\n" + + " \"@type\" : \"dcat:DataService\",\n" + + "\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + "\n" + + " \"dcat:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\",\n" + + "\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + "\n" + + " \"dct:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\"\n" + + "\n" + + " }\n" + + "\n" + + " }, {\n" + + "\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + "\n" + + " \"dct:format\" : {\n" + + "\n" + + " \"@id\" : \"HttpData-PULL\"\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:accessService\" : {\n" + + "\n" + + " \"@id\" : \"80ab93d7-847a-42d2-81d0-1f74b89b81b8\",\n" + + "\n" + + " \"@type\" : \"dcat:DataService\",\n" + + "\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + "\n" + + " \"dcat:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\",\n" + + "\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + "\n" + + " \"dct:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\"\n" + + "\n" + + " }\n" + + "\n" + + " }, {\n" + + "\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + "\n" + + " \"dct:format\" : {\n" + + "\n" + + " \"@id\" : \"HttpData-PUSH\"\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:accessService\" : {\n" + + "\n" + + " \"@id\" : \"80ab93d7-847a-42d2-81d0-1f74b89b81b8\",\n" + + "\n" + + " \"@type\" : \"dcat:DataService\",\n" + + "\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + "\n" + + " \"dcat:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\",\n" + + "\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + "\n" + + " \"dct:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\"\n" + + "\n" + + " }\n" + + "\n" + + " }, {\n" + + "\n" + + " \"@type\" : \"dcat:Distribution\",\n" + + "\n" + + " \"dct:format\" : {\n" + + "\n" + + " \"@id\" : \"AmazonS3-PUSH\"\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:accessService\" : {\n" + + "\n" + + " \"@id\" : \"80ab93d7-847a-42d2-81d0-1f74b89b81b8\",\n" + + "\n" + + " \"@type\" : \"dcat:DataService\",\n" + + "\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + "\n" + + " \"dcat:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\",\n" + + "\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + "\n" + + " \"dct:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\"\n" + + "\n" + + " }\n" + + "\n" + + " } ],\n" + + "\n" + + " \"https://admin-shell.io/aas/3/0/HasSemantics/semanticId\" : {\n" + + "\n" + + " \"@id\" : \"urn:samm:io.catenax.part_type_information:1.0.0#PartTypeInformation\"\n" + + "\n" + + " },\n" + + "\n" + + " \"https://w3id.org/catenax/ontology/common#version\" : \"3.0\",\n" + + "\n" + + " \"id\" : \"PartTypeInformationSubmodelApi@BPNL00000007RXRX\",\n" + + "\n" + + " \"https://purl.org/dc/terms/type\" : {\n" + + "\n" + + " \"@id\" : \"https://w3id.org/catenax/taxonomy#Submodel\"\n" + + "\n" + + " }\n" + + "\n" + + " },\n" + + "\n" + + " \"dcat:service\" : {\n" + + "\n" + + " \"@id\" : \"80ab93d7-847a-42d2-81d0-1f74b89b81b8\",\n" + + "\n" + + " \"@type\" : \"dcat:DataService\",\n" + + "\n" + + " \"dcat:endpointDescription\" : \"dspace:connector\",\n" + + "\n" + + " \"dcat:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\",\n" + + "\n" + + " \"dct:terms\" : \"dspace:connector\",\n" + + "\n" + + " \"dct:endpointUrl\" : \"https://isst-edc-supplier.int.demo.catena-x.net/api/v1/dsp\"\n" + + "\n" + + " },\n" + + "\n" + + " \"participantId\" : \"BPNL00000007RXRX\",\n" + + "\n" + + " \"@context\" : {\n" + + "\n" + + " \"@vocab\" : \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + "\n" + + " \"edc\" : \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + "\n" + + " \"tx\" : \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + "\n" + + " \"tx-auth\" : \"https://w3id.org/tractusx/auth/\",\n" + + "\n" + + " \"cx-policy\" : \"https://w3id.org/catenax/policy/\",\n" + + "\n" + + " \"dcat\" : \"http://www.w3.org/ns/dcat#\",\n" + + "\n" + + " \"dct\" : \"http://purl.org/dc/terms/\",\n" + + "\n" + + " \"odrl\" : \"http://www.w3.org/ns/odrl/2/\",\n" + + "\n" + + " \"dspace\" : \"https://w3id.org/dspace/v0.8/\"\n" + + "\n" + + " }\n" + + "\n" + + "}"; + +} diff --git a/backend/src/test/resources/json-ld/cx-policy-v1.jsonld b/backend/src/test/resources/json-ld/cx-policy-v1.jsonld new file mode 100644 index 00000000..a4d09fc0 --- /dev/null +++ b/backend/src/test/resources/json-ld/cx-policy-v1.jsonld @@ -0,0 +1,22 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "cred": "https://www.w3.org/2018/credentials#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "cx-policy": "https://w3id.org/catenax/policy/", + "Dismantler": "cx-policy:Dismantler", + "Dismantler.activityType": "cx-policy:Dismantler.activityType", + "Dismantler.allowedBrands": "cx-policy:Dismantler.allowedBrands", + "Membership": "cx-policy:Membership", + "UsagePurpose": "cx-policy:UsagePurpose", + "ContractReference": "cx-policy:ContractReference", + "FrameworkAgreement": "cx-policy:FrameworkAgreement", + "FrameworkAgreement.behavioraltwin": "cx-policy:FrameworkAgreement.behavioraltwin", + "FrameworkAgreement.pcf": "cx-policy:FrameworkAgreement.pcf", + "FrameworkAgreement.quality": "cx-policy:FrameworkAgreement.quality", + "FrameworkAgreement.resiliency": "cx-policy:FrameworkAgreement.resiliency", + "FrameworkAgreement.sustainability": "cx-policy:FrameworkAgreement.sustainability", + "FrameworkAgreement.traceability": "cx-policy:FrameworkAgreement.traceability" + } +} \ No newline at end of file diff --git a/backend/src/test/resources/json-ld/dcat.jsonld b/backend/src/test/resources/json-ld/dcat.jsonld new file mode 100644 index 00000000..5aff9966 --- /dev/null +++ b/backend/src/test/resources/json-ld/dcat.jsonld @@ -0,0 +1,3923 @@ +{ + "@graph" : [ { + "@id" : "_:b0", + "homepage" : "http://stfc.ac.uk", + "foaf:name" : "Science and Technology Facilities Council, UK" + }, { + "@id" : "_:b11", + "homepage" : "http://www.asahi-net.or.jp/~ax2s-kmtn/", + "foaf:name" : "Shuji Kamitsuna" + }, { + "@id" : "_:b12", + "seeAlso" : "http://fadmaa.me/foaf.ttl", + "foaf:name" : "Fadi Maali" + }, { + "@id" : "_:b13", + "foaf:name" : "Marios Meimaris" + }, { + "@id" : "_:b14", + "seeAlso" : "http://www.eurecom.fr/~atemezin/gatemezing-foaf.rdf", + "foaf:name" : "Ghislain Auguste Atemezing" + }, { + "@id" : "_:b15", + "seeAlso" : "http://makxdekkers.com/makxdekkers.rdf#me", + "homepage" : "http://makxdekkers.com/", + "foaf:name" : "Makx Dekkers" + }, { + "@id" : "_:b16", + "foaf:name" : "Richard Cyganiak" + }, { + "@id" : "_:b17", + "homepage" : "http://okfn.org", + "foaf:name" : "Open Knowledge Foundation" + }, { + "@id" : "_:b18", + "affiliation" : "_:b17", + "foaf:name" : "Rufus Pollock" + }, { + "@id" : "_:b19", + "foaf:name" : "John Erickson" + }, { + "@id" : "_:b2", + "seeAlso" : "https://orcid.org/0000-0001-5648-2713", + "homepage" : [ "https://w3id.org/people/ralbertoni/", "http://www.imati.cnr.it/index.php/people/8-curricula/178-riccardo-albertoni" ], + "foaf:name" : "Riccardo Albertoni" + }, { + "@id" : "_:b20", + "foaf:name" : "Boris Villazón-Terrazas" + }, { + "@id" : "_:b21", + "affiliation" : "http://www.w3.org/data#W3C", + "seeAlso" : "http://philarcher.org/foaf.rdf#me", + "homepage" : "http://www.w3.org/People/all#phila", + "foaf:name" : "Phil Archer" + }, { + "@id" : "_:b22", + "seeAlso" : "https://jakub.klímek.com/#me", + "homepage" : "https://jakub.klímek.com/", + "foaf:name" : "Jakub Klímek" + }, { + "@id" : "_:b23", + "homepage" : "http://www.w3.org/2011/gld/", + "foaf:name" : "Government Linked Data WG" + }, { + "@id" : "_:b24", + "affiliation" : "_:b0", + "seeAlso" : "https://orcid.org/0000-0003-3499-8262", + "homepage" : "https://agbeltran.github.io", + "foaf:name" : "Alejandra Gonzalez-Beltran" + }, { + "@id" : "_:b25", + "affiliation" : "_:b4", + "foaf:name" : "Vassilios Peristeras" + }, { + "@id" : "_:b26", + "affiliation" : "_:b29", + "foaf:name" : "David Browning" + }, { + "@id" : "_:b28", + "@type" : "owl:Restriction", + "cardinality" : "1", + "onProperty" : "foaf:primaryTopic" + }, { + "@id" : "_:b29", + "homepage" : "http://www.refinitiv.com", + "foaf:name" : "Refinitiv" + }, { + "@id" : "_:b3", + "foaf:name" : "Martin Alvarez-Espinar" + }, { + "@id" : "_:b30", + "@type" : "owl:Restriction", + "allValuesFrom" : "dcat:Resource", + "onProperty" : "foaf:primaryTopic" + }, { + "@id" : "_:b4", + "homepage" : "http://ec.europa.eu/dgs/informatics/", + "foaf:name" : "European Commission, DG DIGIT" + }, { + "@id" : "_:b5", + "@type" : "foaf:Person", + "affiliation" : "_:b6", + "seeAlso" : "https://orcid.org/0000-0002-3884-3420", + "foaf:name" : "Simon J D Cox", + "workInfoHomepage" : "http://people.csiro.au/Simon-Cox" + }, { + "@id" : "_:b6", + "homepage" : "https://csiro.au", + "foaf:name" : "Commonwealth Scientific and Industrial Research Organisation" + }, { + "@id" : "_:b7", + "seeAlso" : "https://orcid.org/0000-0001-9300-2694", + "homepage" : "http://www.andrea-perego.name/foaf/#me", + "foaf:name" : "Andrea Perego" + }, { + "@id" : "_:b8", + "@type" : "owl:Class", + "unionOf" : { + "@list" : [ "prov:Attribution", "dcat:Relationship" ] + } + }, { + "@id" : "http://www.w3.org/ns/dcat", + "@type" : "owl:Ontology", + "contributor" : [ "_:b11", "_:b13", "_:b7", "_:b5", "_:b3", "_:b20", "_:b18", "_:b21", "_:b22", "_:b2", "_:b14", "_:b24", "_:b25", "_:b15", "_:b26", "_:b16" ], + "creator" : [ "_:b19", "_:b12" ], + "license" : "https://creativecommons.org/licenses/by/4.0/", + "modified" : [ "2020-11-30", "2012-04-24", "2017-12-19", "2013-09-20", "2013-11-28", "2021-09-14" ], + "dct:modified" : "2019", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "DCAT er et RDF-vokabular som har til formål at understøtte interoperabilitet mellem datakataloger udgivet på nettet. Ved at anvende DCAT til at beskrive datasæt i datakataloger, kan udgivere øge findbarhed og gøre det gøre det lettere for applikationer at anvende metadata fra forskellige kataloger. Derudover understøttes decentraliseret udstilling af kataloger og fødererede datasætsøgninger på tværs af websider. Aggregerede DCAT-metadata kan fungere som fortegnelsesfiler der kan understøtte digital bevaring. DCAT er defineret på http://www.w3.org/TR/vocab-dcat/. Enhver forskel mellem det normative dokument og dette schema er en fejl i dette schema." + }, { + "@language" : "fr", + "@value" : "DCAT est un vocabulaire développé pour faciliter l'interopérabilité entre les jeux de données publiées sur le Web. En utilisant DCAT pour décrire les jeux de données dans les catalogues de données, les fournisseurs de données augmentent leur découverte et permettent que les applications facilement les métadonnées de plusieurs catalogues. Il permet en plus la publication décentralisée des catalogues et facilitent la recherche fédérée des données entre plusieurs sites. Les métadonnées DCAT aggrégées peuvent servir comme un manifeste pour faciliter la préservation digitale des ressources. DCAT est définie à l'adresse http://www.w3.org/TR/vocab-dcat/. Une quelconque version de ce document normatif et ce vocabulaire est une erreur dans ce vocabulaire." + }, { + "@language" : "cs", + "@value" : "DCAT je RDF slovník navržený pro zprostředkování interoperability mezi datovými katalogy publikovanými na Webu. Poskytovatelé dat používáním slovníku DCAT pro popis datových sad v datových katalozích zvyšují jejich dohledatelnost a umožňují aplikacím konzumovat metadata z více katalogů. Dále je umožňena decentralizovaná publikace katalogů a federované dotazování na datové sady napříč katalogy. Agregovaná DCAT metadata mohou také sloužit jako průvodka umožňující digitální uchování informace. DCAT je definován na http://www.w3.org/TR/vocab-dcat/. Jakýkoliv nesoulad mezi odkazovaným dokumentem a tímto schématem je chybou v tomto schématu." + }, { + "@language" : "ar", + "@value" : "هي أنطولوجية تسهل تبادل البيانات بين مختلف الفهارس على الوب. استخدام هذه الأنطولوجية يساعد على اكتشاف قوائم البيانات المنشورة على الوب و يمكن التطبيقات المختلفة من الاستفادة أتوماتيكيا من البيانات المتاحة من مختلف الفهارس." + }, { + "@language" : "ja", + "@value" : "DCATは、ウェブ上で公開されたデータ・カタログ間の相互運用性の促進を目的とするRDFの語彙です。このドキュメントでは、その利用のために、スキーマを定義し、例を提供します。データ・カタログ内のデータセットを記述するためにDCATを用いると、公開者が、発見可能性を増加させ、アプリケーションが複数のカタログのメタデータを容易に利用できるようになります。さらに、カタログの分散公開を可能にし、複数のサイトにまたがるデータセットの統合検索を促進します。集約されたDCATメタデータは、ディジタル保存を促進するためのマニフェスト・ファイルとして使用できます。" + }, { + "@language" : "en", + "@value" : "DCAT is an RDF vocabulary designed to facilitate interoperability between data catalogs published on the Web. By using DCAT to describe datasets in data catalogs, publishers increase discoverability and enable applications easily to consume metadata from multiple catalogs. It further enables decentralized publishing of catalogs and facilitates federated dataset search across sites. Aggregated DCAT metadata can serve as a manifest file to facilitate digital preservation. DCAT is defined at http://www.w3.org/TR/vocab-dcat/. Any variance between that normative document and this schema is an error in this schema." + }, { + "@language" : "es", + "@value" : "DCAT es un vocabulario RDF diseñado para facilitar la interoperabilidad entre catálogos de datos publicados en la Web. Utilizando DCAT para describir datos disponibles en catálogos se aumenta la posibilidad de que sean descubiertos y se permite que las aplicaciones consuman fácilmente los metadatos de varios catálogos." + }, { + "@language" : "el", + "@value" : "Το DCAT είναι ένα RDF λεξιλόγιο που σχεδιάσθηκε για να κάνει εφικτή τη διαλειτουργικότητα μεταξύ καταλόγων δεδομένων στον Παγκόσμιο Ιστό. Χρησιμοποιώντας το DCAT για την περιγραφή συνόλων δεδομένων, οι εκδότες αυτών αυξάνουν την ανακαλυψιμότητα και επιτρέπουν στις εφαρμογές την εύκολη κατανάλωση μεταδεδομένων από πολλαπλούς καταλόγους. Επιπλέον, δίνει τη δυνατότητα για αποκεντρωμένη έκδοση και διάθεση καταλόγων και επιτρέπει δυνατότητες ενοποιημένης αναζήτησης μεταξύ διαφορετικών πηγών. Συγκεντρωτικά μεταδεδομένα που έχουν περιγραφεί με το DCAT μπορούν να χρησιμοποιηθούν σαν ένα δηλωτικό αρχείο (manifest file) ώστε να διευκολύνουν την ψηφιακή συντήρηση." + }, { + "@language" : "it", + "@value" : "DCAT è un vocabolario RDF progettato per facilitare l'interoperabilità tra i cataloghi di dati pubblicati nel Web. Utilizzando DCAT per descrivere i dataset nei cataloghi di dati, i fornitori migliorano la capacità di individuazione dei dati e abilitano le applicazioni al consumo di dati provenienti da cataloghi differenti. DCAT permette di decentralizzare la pubblicazione di cataloghi e facilita la ricerca federata dei dataset. L'aggregazione dei metadati federati può fungere da file manifesto per facilitare la conservazione digitale. DCAT è definito all'indirizzo http://www.w3.org/TR/vocab-dcat/. Qualsiasi scostamento tra tale definizione normativa e questo schema è da considerarsi un errore di questo schema." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "Slovník pro datové katalogy" + }, { + "@language" : "it", + "@value" : "Il vocabolario del catalogo dei dati" + }, { + "@language" : "fr", + "@value" : "Le vocabulaire des jeux de données" + }, { + "@language" : "es", + "@value" : "El vocabulario de catálogo de datos" + }, { + "@language" : "da", + "@value" : "Datakatalogvokabular" + }, { + "@language" : "ar", + "@value" : "أنطولوجية فهارس قوائم البيانات" + }, { + "@language" : "el", + "@value" : "Το λεξιλόγιο των καταλόγων δεδομένων" + }, { + "@language" : "ja", + "@value" : "データ・カタログ語彙(DCAT)" + }, { + "@language" : "en", + "@value" : "The data catalog vocabulary" + } ], + "imports" : [ "http://www.w3.org/2004/02/skos/core", "http://www.w3.org/ns/prov-o#", "http://purl.org/dc/terms/" ], + "owl:versionInfo" : [ { + "@language" : "en", + "@value" : "Questa è una copia aggiornata del vocabolario DCAT v2.0 disponibile in https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "en", + "@value" : "This is an updated copy of v2.0 of the DCAT vocabulary, taken from https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "es", + "@value" : "Esta es una copia del vocabulario DCAT v2.0 disponible en https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "da", + "@value" : "Dette er en opdateret kopi af DCAT v. 2.0 som er tilgænglig på https://www.w3.org/ns/dcat.ttl" + }, { + "@language" : "cs", + "@value" : "Toto je aktualizovaná kopie slovníku DCAT verze 2.0, převzatá z https://www.w3.org/ns/dcat.ttl" + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English language definitions updated in this revision in line with ED. Multilingual text unevenly updated." + }, + "maker" : "_:b23" + }, { + "@id" : "dcat:Catalog", + "@type" : [ "rdfs:Class", "owl:Class" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A curated collection of metadata about resources (e.g., datasets and data services in the context of a data catalog)." + }, { + "@language" : "it", + "@value" : "Una raccolta curata di metadati sulle risorse (ad es. sui dataset e relativi servizi nel contesto di cataloghi di dati)." + }, { + "@language" : "cs", + "@value" : "Řízená kolekce metadat o datových sadách a datových službách" + }, { + "@language" : "es", + "@value" : "Una colección curada de metadatos sobre recursos (por ejemplo, conjuntos de datos y servicios de datos en el contexto de un catálogo de datos)." + }, { + "@language" : "el", + "@value" : "Μια επιμελημένη συλλογή μεταδεδομένων περί συνόλων δεδομένων" + }, { + "@language" : "fr", + "@value" : "Une collection élaborée de métadonnées sur les jeux de données" + }, { + "@language" : "ar", + "@value" : "مجموعة من توصيفات قوائم البيانات" + }, { + "@language" : "da", + "@value" : "En udvalgt og arrangeret samling af metadata om ressourcer (fx datasæt og datatjenester i kontekst af et datakatalog). " + }, { + "@language" : "ja", + "@value" : "データ・カタログは、データセットに関するキュレートされたメタデータの集合です。" + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "Katalog" + }, { + "@language" : "cs", + "@value" : "Katalog" + }, { + "@language" : "el", + "@value" : "Κατάλογος" + }, { + "@language" : "it", + "@value" : "Catalogo" + }, { + "@language" : "ar", + "@value" : "فهرس قوائم البيانات" + }, { + "@language" : "ja", + "@value" : "カタログ" + }, { + "@language" : "es", + "@value" : "Catálogo" + }, { + "@language" : "en", + "@value" : "Catalog" + }, { + "@language" : "fr", + "@value" : "Catalogue" + } ], + "subClassOf" : "dcat:Dataset", + "skos:definition" : [ { + "@language" : "ja", + "@value" : "データ・カタログは、データセットに関するキュレートされたメタデータの集合です。" + }, { + "@language" : "cs", + "@value" : "Řízená kolekce metadat o datových sadách a datových službách." + }, { + "@language" : "it", + "@value" : "Una raccolta curata di metadati sulle risorse (ad es. sui dataset e relativi servizi nel contesto di cataloghi di dati)." + }, { + "@language" : "ar", + "@value" : "مجموعة من توصيفات قوائم البيانات" + }, { + "@language" : "es", + "@value" : "Una colección curada de metadatos sobre recursos (por ejemplo, conjuntos de datos y servicios de datos en el contexto de un catálogo de datos)." + }, { + "@language" : "el", + "@value" : "Μια επιμελημένη συλλογή μεταδεδομένων περί συνόλων δεδομένων." + }, { + "@language" : "fr", + "@value" : "Une collection élaborée de métadonnées sur les jeux de données." + }, { + "@language" : "da", + "@value" : "En samling af metadata om ressourcer (fx datasæt og datatjenester i kontekst af et datakatalog)." + }, { + "@language" : "en", + "@value" : "A curated collection of metadata about resources (e.g., datasets and data services in the context of a data catalog)." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English, Italian, Spanish definitions updated in this revision. Multilingual text not yet updated." + }, + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Normalmente, un catálogo de datos disponible en la web se representa como una única instancia de esta clase." + }, { + "@language" : "da", + "@value" : "Et webbaseret datakatalog repræsenteres typisk ved en enkelt instans af denne klasse." + }, { + "@language" : "el", + "@value" : "Συνήθως, ένας κατάλογος δεδομένων στον Παγκόσμιο Ιστό αναπαρίσταται ως ένα στιγμιότυπο αυτής της κλάσης." + }, { + "@language" : "cs", + "@value" : "Webový datový katalog je typicky reprezentován jako jedna instance této třídy." + }, { + "@language" : "en", + "@value" : "A web-based data catalog is typically represented as a single instance of this class." + }, { + "@language" : "it", + "@value" : "Normalmente, un catalogo di dati nel web viene rappresentato come una singola istanza di questa classe." + }, { + "@language" : "ja", + "@value" : "通常、ウェブ・ベースのデータ・カタログは、このクラスの1つのインスタンスとして表わされます。" + } ] + }, { + "@id" : "dcat:CatalogRecord", + "@type" : [ "owl:Class", "rdfs:Class" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A record in a data catalog, describing the registration of a single dataset or data service." + }, { + "@language" : "ja", + "@value" : "1つのデータセットを記述したデータ・カタログ内のレコード。" + }, { + "@language" : "da", + "@value" : "En post i et datakatalog der beskriver registreringen af et enkelt datasæt eller en datatjeneste." + }, { + "@language" : "cs", + "@value" : "Záznam v datovém katalogu popisující jednu datovou sadu či datovou službu." + }, { + "@language" : "fr", + "@value" : "Un registre du catalogue ou une entrée du catalogue, décrivant un seul jeu de données." + }, { + "@language" : "el", + "@value" : "Μία καταγραφή ενός καταλόγου, η οποία περιγράφει ένα συγκεκριμένο σύνολο δεδομένων." + }, { + "@language" : "it", + "@value" : "Un record in un catalogo di dati che descrive un singolo dataset o servizio di dati." + }, { + "@language" : "es", + "@value" : "Un registro en un catálogo de datos que describe un solo conjunto de datos o un servicio de datos." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "カタログ・レコード" + }, { + "@language" : "el", + "@value" : "Καταγραφή καταλόγου" + }, { + "@language" : "ar", + "@value" : "سجل" + }, { + "@language" : "es", + "@value" : "Registro del catálogo" + }, { + "@language" : "it", + "@value" : "Record di catalogo" + }, { + "@language" : "en", + "@value" : "Catalog Record" + }, { + "@language" : "da", + "@value" : "Katalogpost" + }, { + "@language" : "cs", + "@value" : "Katalogizační záznam" + }, { + "@language" : "fr", + "@value" : "Registre du catalogue" + } ], + "subClassOf" : [ "_:b28", "_:b30" ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Un record in un catalogo di dati che descrive un singolo dataset o servizio di dati." + }, { + "@language" : "cs", + "@value" : "Záznam v datovém katalogu popisující jednu datovou sadu či datovou službu." + }, { + "@language" : "es", + "@value" : "Un registro en un catálogo de datos que describe un solo conjunto de datos o un servicio de datos." + }, { + "@language" : "da", + "@value" : "En post i et datakatalog der beskriver registreringen af et enkelt datasæt eller en datatjeneste." + }, { + "@language" : "ja", + "@value" : "1つのデータセットを記述したデータ・カタログ内のレコード。" + }, { + "@language" : "el", + "@value" : "Μία καταγραφή ενός καταλόγου, η οποία περιγράφει ένα συγκεκριμένο σύνολο δεδομένων." + }, { + "@language" : "fr", + "@value" : "Un registre du catalogue ou une entrée du catalogue, décrivant un seul jeu de données." + }, { + "@language" : "en", + "@value" : "A record in a data catalog, describing the registration of a single dataset or data service." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "English definition updated in this revision. Multilingual text not yet updated except the Spanish one and the Czech one and Italian one." + }, + "skos:scopeNote" : [ { + "@language" : "ja", + "@value" : "このクラスはオプションで、すべてのカタログがそれを用いるとは限りません。これは、データセットに関するメタデータとカタログ内のデータセットのエントリーに関するメタデータとで区別が行われるカタログのために存在しています。例えば、データセットの公開日プロパティーは、公開機関が情報を最初に利用可能とした日付を示しますが、カタログ・レコードの公開日は、データセットがカタログに追加された日付です。両方の日付が異っていたり、後者だけが分かっている場合は、カタログ・レコードに対してのみ公開日を指定すべきです。W3CのPROVオントロジー[prov-o]を用いれば、データセットに対する特定の変更に関連するプロセスやエージェントの詳細などの、さらに詳しい来歴情報の記述が可能となることに注意してください。" + }, { + "@language" : "it", + "@value" : "Questa classe è opzionale e non tutti i cataloghi la utilizzeranno. Esiste per cataloghi in cui si opera una distinzione tra i metadati relativi al dataset ed i metadati relativi alla gestione del dataset nel catalogo. Ad esempio, la proprietà per indicare la data di pubblicazione del dataset rifletterà la data in cui l'informazione è stata originariamente messa a disposizione dalla casa editrice, mentre la data di pubblicazione per il record nel catalogo rifletterà la data in cui il dataset è stato aggiunto al catalogo. Nei casi dove solo quest'ultima sia nota, si utilizzerà esclusivamente la data di pubblicazione relativa al record del catalogo. Si noti che l'Ontologia W3C PROV permette di descrivere ulteriori informazioni sulla provenienza, quali i dettagli del processo, la procedura e l'agente coinvolto in una particolare modifica di un dataset." + }, { + "@language" : "cs", + "@value" : "Tato třída je volitelná a ne všechny katalogy ji využijí. Existuje pro katalogy, ve kterých se rozlišují metadata datové sady či datové služby a metadata o záznamu o datové sadě či datové službě v katalogu. Například datum publikace datové sady odráží datum, kdy byla datová sada původně zveřejněna poskytovatelem dat, zatímco datum publikace katalogizačního záznamu je datum zanesení datové sady do katalogu. V případech kdy se obě data liší, nebo je známo jen to druhé, by mělo být specifikováno jen datum publikace katalogizačního záznamu. Všimněte si, že ontologie W3C PROV umožňuje popsat další informace o původu jako například podrobnosti o procesu konkrétní změny datové sady a jeho účastnících." + }, { + "@language" : "es", + "@value" : "Esta clase es opcional y no todos los catálogos la utilizarán. Esta clase existe para catálogos que hacen una distinción entre los metadatos acerca de un conjunto de datos o un servicio de datos y los metadatos acerca de una entrada en ese conjunto de datos en el catálogo. Por ejemplo, la propiedad sobre la fecha de la publicación de los datos refleja la fecha en que la información fue originalmente publicada, mientras que la fecha de publicación del registro del catálogo es la fecha en que los datos se agregaron al mismo. En caso en que ambas fechas fueran diferentes, o en que sólo la fecha de publicación del registro del catálogo estuviera disponible, sólo debe especificarse en el registro del catálogo. Tengan en cuenta que la ontología PROV de W3C permite describir otra información sobre la proveniencia de los datos, como por ejemplo detalles del proceso y de los agentes involucrados en algún cambio específico a los datos." + }, { + "@language" : "en", + "@value" : "This class is optional and not all catalogs will use it. It exists for catalogs where a distinction is made between metadata about a dataset or data service and metadata about the entry for the dataset or data service in the catalog. For example, the publication date property of the dataset reflects the date when the information was originally made available by the publishing agency, while the publication date of the catalog record is the date when the dataset was added to the catalog. In cases where both dates differ, or where only the latter is known, the publication date should only be specified for the catalog record. Notice that the W3C PROV Ontology allows describing further provenance information such as the details of the process and the agent involved in a particular change to a dataset." + }, { + "@language" : "el", + "@value" : "Αυτή η κλάση είναι προαιρετική και δεν χρησιμοποιείται από όλους τους καταλόγους. Υπάρχει για τις περιπτώσεις καταλόγων όπου γίνεται διαχωρισμός μεταξύ των μεταδεδομένων για το σύνολο των δεδομένων και των μεταδεδομένων για την καταγραφή του συνόλου δεδομένων εντός του καταλόγου. Για παράδειγμα, η ιδιότητα της ημερομηνίας δημοσίευσης του συνόλου δεδομένων δείχνει την ημερομηνία κατά την οποία οι πληροφορίες έγιναν διαθέσιμες από τον φορέα δημοσίευσης, ενώ η ημερομηνία δημοσίευσης της καταγραφής του καταλόγου δείχνει την ημερομηνία που το σύνολο δεδομένων προστέθηκε στον κατάλογο. Σε περιπτώσεις που οι δύο ημερομηνίες διαφέρουν, ή που μόνο η τελευταία είναι γνωστή, η ημερομηνία δημοσίευσης θα πρέπει να δίνεται για την καταγραφή του καταλόγου. Να σημειωθεί πως η οντολογία W3C PROV επιτρέπει την περιγραφή επιπλέον πληροφοριών ιστορικού όπως λεπτομέρειες για τη διαδικασία και τον δράστη που εμπλέκονται σε μία συγκεκριμένη αλλαγή εντός του συνόλου δεδομένων." + }, { + "@language" : "da", + "@value" : "Denne klasse er valgfri og ikke alle kataloger vil anvende denne klasse. Den kan anvendes i de kataloger hvor der skelnes mellem metadata om datasættet eller datatjenesten og metadata om selve posten til registreringen af datasættet eller datatjenesten i kataloget. Udgivelsesdatoen for datasættet afspejler for eksempel den dato hvor informationerne oprindeligt blev gjort tilgængelige af udgiveren, hvorimod udgivelsesdatoen for katalogposten er den dato hvor datasættet blev føjet til kataloget. I de tilfælde hvor de to datoer er forskellige eller hvor blot sidstnævnte er kendt, bør udgivelsesdatoen kun angives for katalogposten. Bemærk at W3Cs PROV ontologi gør til muligt at tilføje yderligere proveniensoplysninger eksempelvis om processen eller aktøren involveret i en given ændring af datasættet." + }, { + "@language" : "fr", + "@value" : "C'est une classe facultative et tous les catalogues ne l'utiliseront pas. Cette classe existe pour les catalogues\tayant une distinction entre les métadonnées sur le jeu de données et les métadonnées sur une entrée du jeu de données dans le catalogue." + } ] + }, { + "@id" : "dcat:DataService", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A site or end-point providing operations related to the discovery of, access to, or processing functions on, data or related resources." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod poskytující operace související s hledáním, přistupem k, či výkonem funkcí na datech či souvisejících zdrojích." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der udstiller operationer relateret til opdagelse af, adgang til eller behandlende funktioner på data eller relaterede ressourcer." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que provee operaciones relacionadas a funciones de descubrimiento, acceso, o procesamiento de datos o recursos relacionados." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che fornisce operazioni relative alla scoperta, all'accesso o all'elaborazione di funzioni su dati o risorse correlate." + } ], + "rdfs:label" : [ { + "@language" : "it", + "@value" : "Servizio di dati" + }, { + "@language" : "en", + "@value" : "Data service" + }, { + "@language" : "es", + "@value" : "Servicio de datos" + }, { + "@language" : "da", + "@value" : "Datatjeneste" + } ], + "subClassOf" : [ "dctype:Service", "dcat:Resource" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "Dataservice" + }, + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse tilføjet i DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase añadida en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "Un sitio o end-point que provee operaciones relacionadas a funciones de descubrimiento, acceso, o procesamiento de datos o recursos relacionados." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod poskytující operace související s hledáním, přistupem k, či výkonem funkcí na datech či souvisejících zdrojích." + }, { + "@language" : "en", + "@value" : "A site or end-point providing operations related to the discovery of, access to, or processing functions on, data or related resources." + }, { + "@language" : "da", + "@value" : "Et site eller endpoint der udstiller operationer relateret til opdagelse af, adgang til eller behandlende funktioner på data eller relaterede ressourcer." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che fornisce operazioni relative alla scoperta, all'accesso o all'elaborazione di funzioni su dati o risorse correlate." + } ], + "skos:scopeNote" : [ { + "@language" : "cs", + "@value" : "Pokud je dcat:DataService navázána na jednu či více Datových sad, jsou tyto indikovány vlstností dcat:servesDataset." + }, { + "@language" : "es", + "@value" : "El tipo de servicio puede indicarse usando la propiedad dct:type. Su valor puede provenir de un vocabulario controlado, como por ejemplo el vocabulario de servicios de datos espaciales de INSPIRE." + }, { + "@language" : "da", + "@value" : "Hvis en dcat:DataService er bundet til en eller flere specifikke datasæt kan dette indikeres ved hjælp af egenskaben dcat:servesDataset. " + }, { + "@language" : "cs", + "@value" : "Druh služby může být indikován vlastností dct:type. Její hodnota může být z řízeného slovníku, kterým je například slovník typů prostorových datových služeb INSPIRE." + }, { + "@language" : "en", + "@value" : "If a dcat:DataService is bound to one or more specified Datasets, they are indicated by the dcat:servesDataset property." + }, { + "@language" : "es", + "@value" : "Si un dcat:DataService está asociado con uno o más conjuntos de datos especificados, dichos conjuntos de datos pueden indicarse con la propiedad dcat:servesDataset." + }, { + "@language" : "it", + "@value" : "Il tipo di servizio può essere indicato usando la proprietà dct:type. Il suo valore può essere preso da un vocabolario controllato come il vocabolario dei tipi di servizi per dati spaziali di INSPIRE." + }, { + "@language" : "da", + "@value" : "Datatjenestetypen kan indikeres ved hjælp af egenskaben dct:type. Værdien kan tages fra kontrollerede udfaldsrum såsom INSPIRE spatial data service vocabulary." + }, { + "@language" : "en", + "@value" : "The kind of service can be indicated using the dct:type property. Its value may be taken from a controlled vocabulary such as the INSPIRE spatial data service type vocabulary." + }, { + "@language" : "it", + "@value" : "Se un dcat:DataService è associato a uno o più Dataset specificati, questi sono indicati dalla proprietà dcat:serveDataset." + } ] + }, { + "@id" : "dcat:Dataset", + "@type" : [ "rdfs:Class", "owl:Class" ], + "rdfs:comment" : [ { + "@language" : "ja", + "@value" : "1つのエージェントによって公開またはキュレートされ、1つ以上の形式でアクセスまたはダウンロードできるデータの集合。" + }, { + "@language" : "it", + "@value" : "Raccolta di dati, pubblicati o curati da un'unica fonte, disponibili per l'accesso o il download in uno o più formati." + }, { + "@language" : "el", + "@value" : "Μία συλλογή από δεδομένα, δημοσιευμένη ή επιμελημένη από μία και μόνο πηγή, διαθέσιμη δε προς πρόσβαση ή μεταφόρτωση σε μία ή περισσότερες μορφές." + }, { + "@language" : "ar", + "@value" : "قائمة بيانات منشورة أو مجموعة من قبل مصدر ما و متاح الوصول إليها أو تحميلها" + }, { + "@language" : "en", + "@value" : "A collection of data, published or curated by a single source, and available for access or download in one or more representations." + }, { + "@language" : "fr", + "@value" : "Une collection de données, publiée ou élaborée par une seule source, et disponible pour accès ou téléchargement dans un ou plusieurs formats." + }, { + "@language" : "cs", + "@value" : "Kolekce dat poskytovaná či řízená jedním zdrojem, která je k dispozici pro přístup či stažení v jednom či více formátech." + }, { + "@language" : "es", + "@value" : "Una colección de datos, publicados o conservados por una única fuente, y disponibles para ser accedidos o descargados en uno o más formatos." + }, { + "@language" : "da", + "@value" : "En samling af data, udgivet eller udvalgt og arrangeret af en enkelt kilde og som er til råde for adgang til eller download af i en eller flere repræsentationer." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "データセット" + }, { + "@language" : "en", + "@value" : "Dataset" + }, { + "@language" : "it", + "@value" : "Dataset" + }, { + "@language" : "ar", + "@value" : "قائمة بيانات" + }, { + "@language" : "es", + "@value" : "Conjunto de datos" + }, { + "@language" : "el", + "@value" : "Σύνολο Δεδομένων" + }, { + "@language" : "fr", + "@value" : "Jeu de données" + }, { + "@language" : "cs", + "@value" : "Datová sada" + }, { + "@language" : "da", + "@value" : "Datasæt" + } ], + "subClassOf" : "dcat:Resource", + "skos:altLabel" : { + "@language" : "da", + "@value" : "Datasamling" + }, + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "2018-02 - subklasse af dctype:Dataset fjernet da scope af dcat:Dataset omfatter flere forskellige typer fra dctype-vokabularet." + }, { + "@language" : "cs", + "@value" : "2018-02 - odstraněno tvrzení o podtřídě dctype:Dataset, jelikož rozsah dcat:Dataset zahrnuje několik dalších typů ze slovníku dctype." + }, { + "@language" : "en", + "@value" : "2018-02 - subclass of dctype:Dataset removed because scope of dcat:Dataset includes several other types from the dctype vocabulary." + }, { + "@language" : "es", + "@value" : "2018-02 - se eliminó el axioma de subclase con dctype:Dataset porque el alcance de dcat:Dataset incluye muchos otros tipos del vocabulario dctype." + }, { + "@language" : "it", + "@value" : "2018-02 - sottoclasse di dctype:Dataset rimosso perché l'ambito di dcat:Dataset include diversi altri tipi dal vocabolario dctype." + } ], + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Une collection de données, publiée ou élaborée par une seule source, et disponible pour accès ou téléchargement dans un ou plusieurs formats." + }, { + "@language" : "ar", + "@value" : "قائمة بيانات منشورة أو مجموعة من قبل مصدر ما و متاح الوصول إليها أو تحميلها" + }, { + "@language" : "es", + "@value" : "Una colección de datos, publicados o conservados por una única fuente, y disponibles para ser accedidos o descargados en uno o más formatos." + }, { + "@language" : "it", + "@value" : "Raccolta di dati, pubblicati o curati da un'unica fonte, disponibili per l'accesso o il download in uno o più formati." + }, { + "@language" : "cs", + "@value" : "Kolekce dat poskytovaná či řízená jedním zdrojem, která je k dispozici pro přístup či stažení v jednom či více formátech." + }, { + "@language" : "da", + "@value" : "En samling a data, udgivet eller udvalgt og arrangeret af en enkelt kilde og som der er adgang til i en eller flere repræsentationer." + }, { + "@language" : "ja", + "@value" : "1つのエージェントによって公開またはキュレートされ、1つ以上の形式でアクセスまたはダウンロードできるデータの集合。" + }, { + "@language" : "el", + "@value" : "Μία συλλογή από δεδομένα, δημοσιευμένη ή επιμελημένη από μία και μόνο πηγή, διαθέσιμη δε προς πρόσβαση ή μεταφόρτωση σε μία ή περισσότερες μορφές." + }, { + "@language" : "en", + "@value" : "A collection of data, published or curated by a single source, and available for access or download in one or more represenations." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "2020-03-16 A new scopenote added and need to be translated" + }, + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa classe rappresenta il dataset come pubblicato dall’editore. Nel caso in cui sia necessario operare una distinzione fra i metadati originali del dataset e il record dei metadati ad esso associato nel catalogo (ad esempio, per distinguere la data di modifica del dataset da quella del dataset nel catalogo) si può impiegare la classe catalog record." + }, { + "@language" : "fr", + "@value" : "Cette classe représente le jeu de données publié par le fournisseur de données. Dans les cas où une distinction est nécessaire entre le jeu de donénes et son entrée dans le catalogue, la classe registre de données peut être utilisée pour ce dernier." + }, { + "@language" : "es", + "@value" : "Esta clase representa el conjunto de datos publicados. En los casos donde es necesario distinguir entre el conjunto de datos y su entrada en el catálogo de datos, se debe utilizar la clase 'registro del catálogo'." + }, { + "@language" : "el", + "@value" : "Η κλάση αυτή αναπαριστά το σύνολο δεδομένων αυτό καθ'εαυτό, όπως έχει δημοσιευθεί από τον εκδότη. Σε περιπτώσεις όπου είναι απαραίτητος ο διαχωρισμός μεταξύ του συνόλου δεδομένων και της καταγραφής αυτού στον κατάλογο (γιατί μεταδεδομένα όπως η ημερομηνία αλλαγής και ο συντηρητής μπορεί να διαφέρουν) η κλάση της καταγραφής καταλόγου μπορεί να χρησιμοποιηθεί για το τελευταίο." + }, { + "@language" : "en", + "@value" : "This class represents the actual dataset as published by the dataset provider. In cases where a distinction between the actual dataset and its entry in the catalog is necessary (because metadata such as modification date and maintainer might differ), the catalog record class can be used for the latter." + }, { + "@language" : "cs", + "@value" : "Tato třída reprezentuje datovou sadu tak, jak je publikována poskytovatelem dat. V případě potřeby rozlišení datové sady a jejího katalogizačního záznamu (jelikož metadata jako datum modifikace se mohou lišit) pro něj může být použita třída \"katalogizační záznam\"." + }, { + "@language" : "it", + "@value" : "Questa classe descrive il dataset dal punto di vista concettuale. Possono essere disponibili una o più rappresentazioni, con diversi layout e formati schematici o serializzazioni." + }, { + "@language" : "en", + "@value" : "This class describes the conceptual dataset. One or more representations might be available, with differing schematic layouts and formats or serializations." + }, { + "@language" : "ja", + "@value" : "このクラスは、データセットの公開者が公開する実際のデータセットを表わします。カタログ内の実際のデータセットとそのエントリーとの区別が必要な場合(修正日と維持者などのメタデータが異なるかもしれないので)は、後者にcatalog recordというクラスを使用できます。" + }, { + "@language" : "en", + "@value" : "The notion of dataset in DCAT is broad and inclusive, with the intention of accommodating resource types arising from all communities. Data comes in many forms including numbers, text, pixels, imagery, sound and other multi-media, and potentially other types, any of which might be collected into a dataset." + }, { + "@language" : "da", + "@value" : "Denne klasse beskriver det konceptuelle datasæt. En eller flere repræsentationer kan være tilgængelige med forskellige skematiske opsætninger, formater eller serialiseringer." + }, { + "@language" : "da", + "@value" : "Denne klasse repræsenterer det konkrete datasæt som det udgives af datasætleverandøren. I de tilfælde hvor det er nødvendigt at skelne mellem det konkrete datasæt og dets registrering i kataloget (fordi metadata såsom ændringsdato og vedligeholder er forskellige), så kan klassen katalogpost anvendes. " + } ] + }, { + "@id" : "dcat:Distribution", + "@type" : [ "owl:Class", "rdfs:Class" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "En specifik repræsentation af et datasæt. Et datasæt kan være tilgængelig i mange serialiseringer der kan variere på forskellige vis, herunder sprog, medietype eller format, systemorganisering, tidslig- og geografisk opløsning, detaljeringsniveau eller profiler (der kan specificere en eller flere af ovenstående)." + }, { + "@language" : "fr", + "@value" : "Représente une forme spécifique d'un jeu de données. Caque jeu de données peut être disponible sous différentes formes, celles-ci pouvant représenter différents formats du jeu de données ou différents endpoint. Des exemples de distribution sont des fichirs CSV, des API ou des flux RSS." + }, { + "@language" : "el", + "@value" : "Αναπαριστά μία συγκεκριμένη διαθέσιμη μορφή ενός συνόλου δεδομένων. Κάθε σύνολο δεδομενων μπορεί να είναι διαθέσιμο σε διαφορετικές μορφές, οι μορφές αυτές μπορεί να αναπαριστούν διαφορετικές μορφές αρχείων ή διαφορετικά σημεία διάθεσης. Παραδείγματα διανομών συμπεριλαμβάνουν ένα μεταφορτώσιμο αρχείο μορφής CSV, ένα API ή ένα RSS feed." + }, { + "@language" : "ar", + "@value" : "شكل محدد لقائمة البيانات يمكن الوصول إليه. قائمة بيانات ما يمكن أن تكون متاحه باشكال و أنواع متعددة. ملف يمكن تحميله أو واجهة برمجية يمكن من خلالها الوصول إلى البيانات هي أمثلة على ذلك." + }, { + "@language" : "cs", + "@value" : "Konkrétní reprezentace datové sady. Datová sada může být dostupná v různých serializacích, které se mohou navzájem lišit různými způsoby, mimo jiné přirozeným jazykem, media-typem či formátem, schematickou organizací, časovým a prostorovým rozlišením, úrovní detailu či profily (které mohou specifikovat některé či všechny tyto rozdíly)." + }, { + "@language" : "ja", + "@value" : "データセットの特定の利用可能な形式を表わします。各データセットは、異なる形式で利用できることがあり、これらの形式は、データセットの異なる形式や、異なるエンドポイントを表わす可能性があります。配信の例には、ダウンロード可能なCSVファイル、API、RSSフィードが含まれます。" + }, { + "@language" : "it", + "@value" : "Rappresenta una forma disponibile e specifica del dataset. Ciascun dataset può essere disponibile in forme differenti, che possono rappresentare formati diversi o diversi punti di accesso per un dataset. Esempi di distribuzioni sono un file CSV scaricabile, una API o un RSS feed." + }, { + "@language" : "en", + "@value" : "A specific representation of a dataset. A dataset might be available in multiple serializations that may differ in various ways, including natural language, media-type or format, schematic organization, temporal and spatial resolution, level of detail or profiles (which might specify any or all of the above)." + }, { + "@language" : "es", + "@value" : "Una representación específica de los datos. Cada conjunto de datos puede estar disponible en formas diferentes, las cuáles pueden variar en distintas formas, incluyendo el idioma, 'media-type' o formato, organización esquemática, resolución temporal y espacial, nivel de detalle o perfiles (que pueden especificar cualquiera o todas las diferencias anteriores)." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ar", + "@value" : "التوزيع" + }, { + "@language" : "el", + "@value" : "Διανομή" + }, { + "@language" : "cs", + "@value" : "Distribuce" + }, { + "@language" : "it", + "@value" : "Distribuzione" + }, { + "@language" : "ja", + "@value" : "配信" + }, { + "@language" : "en", + "@value" : "Distribution" + }, { + "@language" : "fr", + "@value" : "Distribution" + }, { + "@language" : "da", + "@value" : "Distribution" + }, { + "@language" : "es", + "@value" : "Distribución" + } ], + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "Datamanifestation" + }, { + "@language" : "da", + "@value" : "Datarepræsentation" + }, { + "@language" : "da", + "@value" : "Dataudstilling" + }, { + "@language" : "da", + "@value" : "Datadistribution" + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Konkrétní reprezentace datové sady. Datová sada může být dostupná v různých serializacích, které se mohou navzájem lišit různými způsoby, mimo jiné přirozeným jazykem, media-typem či formátem, schematickou organizací, časovým a prostorovým rozlišením, úrovní detailu či profily (které mohou specifikovat některé či všechny tyto rozdíly)." + }, { + "@language" : "it", + "@value" : "Rappresenta una forma disponibile e specifica del dataset. Ciascun dataset può essere disponibile in forme differenti, che possono rappresentare formati diversi o diversi punti di accesso per un dataset. Esempi di distribuzioni sono un file CSV scaricabile, una API o un RSS feed." + }, { + "@language" : "es", + "@value" : "Una representación específica de los datos. Cada conjunto de datos puede estar disponible en formas diferentes, las cuáles pueden variar en distintas formas, incluyendo el idioma, 'media-type' o formato, organización esquemática, resolución temporal y espacial, nivel de detalle o perfiles (que pueden especificar cualquiera o todas las diferencias anteriores)." + }, { + "@language" : "fr", + "@value" : "Représente une forme spécifique d'un jeu de données. Caque jeu de données peut être disponible sous différentes formes, celles-ci pouvant représenter différents formats du jeu de données ou différents endpoint. Des exemples de distribution sont des fichirs CSV, des API ou des flux RSS." + }, { + "@language" : "en", + "@value" : "A specific representation of a dataset. A dataset might be available in multiple serializations that may differ in various ways, including natural language, media-type or format, schematic organization, temporal and spatial resolution, level of detail or profiles (which might specify any or all of the above)." + }, { + "@language" : "el", + "@value" : "Αναπαριστά μία συγκεκριμένη διαθέσιμη μορφή ενός συνόλου δεδομένων. Κάθε σύνολο δεδομενων μπορεί να είναι διαθέσιμο σε διαφορετικές μορφές, οι μορφές αυτές μπορεί να αναπαριστούν διαφορετικές μορφές αρχείων ή διαφορετικά σημεία διάθεσης. Παραδείγματα διανομών συμπεριλαμβάνουν ένα μεταφορτώσιμο αρχείο μορφής CSV, ένα API ή ένα RSS feed." + }, { + "@language" : "ja", + "@value" : "データセットの特定の利用可能な形式を表わします。各データセットは、異なる形式で利用できることがあり、これらの形式は、データセットの異なる形式や、異なるエンドポイントを表わす可能性があります。配信の例には、ダウンロード可能なCSVファイル、API、RSSフィードが含まれます。" + }, { + "@language" : "ar", + "@value" : "شكل محدد لقائمة البيانات يمكن الوصول إليه. قائمة بيانات ما يمكن أن تكون متاحه باشكال و أنواع متعددة. ملف يمكن تحميله أو واجهة برمجية يمكن من خلالها الوصول إلى البيانات هي أمثلة على ذلك." + }, { + "@language" : "da", + "@value" : "En specifik repræsentation af et datasæt. Et datasæt kan være tilgængelig i mange serialiseringer der kan variere på forskellige vis, herunder sprog, medietype eller format, systemorganisering, tidslig- og geografisk opløsning, detaljeringsniveau eller profiler (der kan specificere en eller flere af ovenstående)." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Esta clase representa una disponibilidad general de un conjunto de datos, e implica que no existe información acerca del método de acceso real a los datos, i.e., si es un enlace de descarga directa o a través de una página Web." + }, { + "@language" : "ja", + "@value" : "これは、データセットの一般的な利用可能性を表わし、データの実際のアクセス方式に関する情報(つまり、直接ダウンロードなのか、APIなのか、ウェブページを介したものなのか)を意味しません。dcat:downloadURLプロパティーの使用は、直接ダウンロード可能な配信を意味します。" + }, { + "@language" : "fr", + "@value" : "Ceci représente une disponibilité générale du jeu de données, et implique qu'il n'existe pas d'information sur la méthode d'accès réelle des données, par exple, si c'est un lien de téléchargement direct ou à travers une page Web." + }, { + "@language" : "da", + "@value" : "Denne klasse repræsenterer datasættets overordnede tilgængelighed og giver ikke oplysninger om hvilken metode der kan anvendes til at få adgang til data, dvs. om adgang til datasættet realiseres ved direkte download, API eller via et websted. Anvendelsen af egenskaben dcat:downloadURL indikerer at distributionen kan downloades direkte." + }, { + "@language" : "el", + "@value" : "Αυτό αναπαριστά μία γενική διαθεσιμότητα ενός συνόλου δεδομένων και δεν υπονοεί τίποτα περί του πραγματικού τρόπου πρόσβασης στα δεδομένα, αν είναι άμεσα μεταφορτώσιμα, μέσω API ή μέσω μίας ιστοσελίδας. Η χρήση της ιδιότητας dcat:downloadURL δείχνει μόνο άμεσα μεταφορτώσιμες διανομές." + }, { + "@language" : "en", + "@value" : "This represents a general availability of a dataset it implies no information about the actual access method of the data, i.e. whether by direct download, API, or through a Web page. The use of dcat:downloadURL property indicates directly downloadable distributions." + }, { + "@language" : "cs", + "@value" : "Toto popisuje obecnou dostupnost datové sady. Neimplikuje žádnou informaci o skutečné metodě přístupu k datům, tj. zda jsou přímo ke stažení, skrze API či přes webovou stránku. Použití vlastnosti dcat:downloadURL indikuje přímo stažitelné distribuce." + }, { + "@language" : "it", + "@value" : "Questa classe rappresenta una disponibilità generale di un dataset e non implica alcuna informazione sul metodo di accesso effettivo ai dati, ad esempio se si tratta di un accesso a download diretto, API, o attraverso una pagina Web. L'utilizzo della proprietà dcat:downloadURL indica distribuzioni direttamente scaricabili." + } ] + }, { + "@id" : "dcat:Relationship", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una clase de asociación para adjuntar información adicional a una relación entre recursos DCAT." + }, { + "@language" : "cs", + "@value" : "Asociační třída pro připojení dodatečných informací ke vztahu mezi zdroji DCAT." + }, { + "@language" : "en", + "@value" : "An association class for attaching additional information to a relationship between DCAT Resources." + }, { + "@language" : "da", + "@value" : "En associationsklasse til brug for tilknytning af yderligere information til en relation mellem DCAT-ressourcer." + }, { + "@language" : "it", + "@value" : "Una classe di associazione per il collegamento di informazioni aggiuntive a una relazione tra le risorse DCAT." + } ], + "rdfs:label" : [ { + "@language" : "it", + "@value" : "Relazione" + }, { + "@language" : "da", + "@value" : "Relation" + }, { + "@language" : "cs", + "@value" : "Vztah" + }, { + "@language" : "es", + "@value" : "Relación" + }, { + "@language" : "en", + "@value" : "Relationship" + } ], + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase añadida en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "An association class for attaching additional information to a relationship between DCAT Resources." + }, { + "@language" : "it", + "@value" : "Una classe di associazione per il collegamento di informazioni aggiuntive a una relazione tra le risorse DCAT." + }, { + "@language" : "da", + "@value" : "En associationsklasse til brug for tilknytning af yderligere information til en relation mellem DCAT-ressourcer." + }, { + "@language" : "cs", + "@value" : "Asociační třída pro připojení dodatečných informací ke vztahu mezi zdroji DCAT." + }, { + "@language" : "es", + "@value" : "Una clase de asociación para adjuntar información adicional a una relación entre recursos DCAT." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Se usa para caracterizar la relación entre conjuntos de datos, y potencialmente otros recursos, donde la naturaleza de la relación se conoce pero no está caracterizada adecuadamente con propiedades del estándar 'Dublin Core' (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "en", + "@value" : "Use to characterize a relationship between datasets, and potentially other resources, where the nature of the relationship is known but is not adequately characterized by the standard Dublin Core properties (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "da", + "@value" : "Anvendes til at karakterisere en relation mellem datasæt, og potentielt andre ressourcer, hvor relationen er kendt men ikke tilstrækkeligt beskrevet af de standardiserede egenskaber i Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) eller PROV-O-egenskaber (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "cs", + "@value" : "Používá se pro charakterizaci vztahu mezi datovými sadami a případně i jinými zdroji, kde druh vztahu je sice znám, ale není přiměřeně charakterizován standardními vlastnostmi slovníku Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) či vlastnostmi slovníku PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "it", + "@value" : "Viene utilizzato per caratterizzare la relazione tra insiemi di dati, e potenzialmente altri tipi di risorse, nei casi in cui la natura della relazione è nota ma non adeguatamente caratterizzata dalle proprietà dello standard 'Dublin Core' (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:require, dct:isRequiredBy) o dalle propietà fornite da PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov: hadPrimarySource, prov:alternateOf, prov:specializationOf)." + } ] + }, { + "@id" : "dcat:Resource", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "Ressource udgivet eller udvalgt og arrangeret af en enkelt aktør." + }, { + "@language" : "es", + "@value" : "Recurso publicado o curado por un agente único." + }, { + "@language" : "it", + "@value" : "Risorsa pubblicata o curata da un singolo agente." + }, { + "@language" : "cs", + "@value" : "Zdroj publikovaný či řízený jediným činitelem." + }, { + "@language" : "en", + "@value" : "Resource published or curated by a single agent." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "Katalogizovaný zdroj" + }, { + "@language" : "es", + "@value" : "Recurso catalogado" + }, { + "@language" : "it", + "@value" : "Risorsa catalogata" + }, { + "@language" : "da", + "@value" : "Katalogiseret ressource" + }, { + "@language" : "en", + "@value" : "Catalogued resource" + } ], + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny klasse i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "Resource published or curated by a single agent." + }, { + "@language" : "it", + "@value" : "Risorsa pubblicata o curata da un singolo agente." + }, { + "@language" : "da", + "@value" : "Ressource udgivet eller udvalgt og arrangeret af en enkelt aktør." + }, { + "@language" : "es", + "@value" : "Recurso publicado o curado por un agente único." + }, { + "@language" : "cs", + "@value" : "Zdroj publikovaný či řízený jediným činitelem." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "dcat:Resource es un punto de extensión que permite la definición de cualquier tipo de catálogo. Se pueden definir subclases adicionales en perfil de DCAT o una aplicación para catálogos de otro tipo de recursos." + }, { + "@language" : "cs", + "@value" : "dcat:Resource je bod pro rozšíření umožňující definici různých druhů katalogů. Další podtřídy lze definovat v profilech DCAT či aplikacích pro katalogy zdrojů jiných druhů." + }, { + "@language" : "da", + "@value" : "Klassen for alle katalogiserede ressourcer, den overordnede klasse for dcat:Dataset, dcat:DataService, dcat:Catalog og enhvert medlem af et dcat:Catalog. Denne klasse bærer egenskaber der gælder alle katalogiserede ressourcer, herunder dataset og datatjenester. Det anbefales kraftigt at mere specifikke subklasser oprettes. Når der beskrives ressourcer der ikke er dcat:Dataset eller dcat:DataService, anbefales det at oprette passende subklasser af dcat:Resource eller at dcat:Resource anvendes sammen med egenskaben dct:type til opmærkning med en specifik typeangivelse." + }, { + "@language" : "cs", + "@value" : "Třída všech katalogizovaných zdrojů, nadtřída dcat:Dataset, dcat:DataService, dcat:Catalog a všech ostatních členů dcat:Catalog. Tato třída nese vlastnosti společné všem katalogizovaným zdrojům včetně datových sad a datových služeb. Je silně doporučeno používat specifičtější podtřídy, pokud je to možné. Při popisu zdroje, který není ani dcat:Dataset, ani dcat:DataService se doporučuje vytvořit odpovídající podtřídu dcat:Resrouce a nebo použít dcat:Resource s vlastností dct:type pro určení konkrétního typu." + }, { + "@language" : "it", + "@value" : "dcat:Resource è un punto di estensione che consente la definizione di qualsiasi tipo di catalogo. Sottoclassi aggiuntive possono essere definite in un profilo DCAT o in un'applicazione per cataloghi di altri tipi di risorse." + }, { + "@language" : "it", + "@value" : "La classe di tutte le risorse catalogate, la Superclasse di dcat:Dataset, dcat:DataService, dcat:Catalog e qualsiasi altro membro di dcat:Catalog. Questa classe porta proprietà comuni a tutte le risorse catalogate, inclusi set di dati e servizi dati. Si raccomanda vivamente di utilizzare una sottoclasse più specifica. Quando si descrive una risorsa che non è un dcat:Dataset o dcat:DataService, si raccomanda di creare una sottoclasse di dcat:Resource appropriata, o utilizzare dcat:Resource con la proprietà dct:type per indicare il tipo specifico." + }, { + "@language" : "en", + "@value" : "The class of all catalogued resources, the Superclass of dcat:Dataset, dcat:DataService, dcat:Catalog and any other member of a dcat:Catalog. This class carries properties common to all catalogued resources, including datasets and data services. It is strongly recommended to use a more specific sub-class. When describing a resource which is not a dcat:Dataset or dcat:DataService, it is recommended to create a suitable sub-class of dcat:Resource, or use dcat:Resource with the dct:type property to indicate the specific type." + }, { + "@language" : "es", + "@value" : "La clase de todos los recursos catalogados, la superclase de dcat:Dataset, dcat:DataService, dcat:Catalog y cualquier otro miembro de un dcat:Catalog. Esta clase tiene propiedades comunes a todos los recursos catalogados, incluyendo conjuntos de datos y servicios de datos. Se recomienda fuertemente que se use una clase más específica. Cuando se describe un recurso que no es un dcat:Dataset o dcat:DataService, se recomienda crear una sub-clase apropiada de dcat:Resource, o usar dcat:Resource con la propiedad dct:type to indicar el tipo específico." + }, { + "@language" : "da", + "@value" : "dcat:Resource er et udvidelsespunkt der tillader oprettelsen af enhver type af kataloger. Yderligere subklasser kan defineres i en DCAT-profil eller i en applikation til kataloger med andre typer af ressourcer." + }, { + "@language" : "en", + "@value" : "dcat:Resource is an extension point that enables the definition of any kind of catalog. Additional subclasses may be defined in a DCAT profile or application for catalogs of other kinds of resources." + } ] + }, { + "@id" : "dcat:Role", + "@type" : "owl:Class", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Role je funkce zdroje či agenta ve vztahu k jinému zdroji, v kontextu přiřazení zdrojů či vztahů mezi zdroji." + }, { + "@language" : "es", + "@value" : "Un rol es la función de un recurso o agente con respecto a otro recuros, en el contexto de atribución del recurso o de las relaciones entre recursos." + }, { + "@language" : "en", + "@value" : "A role is the function of a resource or agent with respect to another resource, in the context of resource attribution or resource relationships." + }, { + "@language" : "da", + "@value" : "En rolle er den funktion en ressource eller aktør har i forhold til en anden ressource, i forbindelse med ressourcekreditering eller ressourcerelationer." + }, { + "@language" : "it", + "@value" : "Un ruolo è la funzione di una risorsa o di un agente rispetto ad un'altra risorsa, nel contesto dell'attribuzione delle risorse o delle relazioni tra risorse." + } ], + "rdfs:label" : [ { + "@language" : "da", + "@value" : "Rolle" + }, { + "@language" : "es", + "@value" : "Rol" + }, { + "@language" : "it", + "@value" : "Ruolo" + }, { + "@language" : "en", + "@value" : "Role" + }, { + "@language" : "cs", + "@value" : "Role" + } ], + "seeAlso" : "dcat:hadRole", + "subClassOf" : "skos:Concept", + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova classe aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva clase agregada en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "Ny klasse tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová třída přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New class added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Role je funkce zdroje či agenta ve vztahu k jinému zdroji, v kontextu přiřazení zdrojů či vztahů mezi zdroji." + }, { + "@language" : "en", + "@value" : "A role is the function of a resource or agent with respect to another resource, in the context of resource attribution or resource relationships." + }, { + "@language" : "it", + "@value" : "Un ruolo è la funzione di una risorsa o di un agente rispetto ad un'altra risorsa, nel contesto dell'attribuzione delle risorse o delle relazioni tra risorse." + }, { + "@language" : "es", + "@value" : "Un rol es la función de un recurso o agente con respecto a otro recuros, en el contexto de atribución del recurso o de las relaciones entre recursos." + }, { + "@language" : "da", + "@value" : "En rolle er den funktion en ressource eller aktør har i forhold til en anden ressource, i forbindelse med ressourcekreditering eller ressourcerelationer." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Introduced into DCAT to complement prov:Role (whose use is limited to roles in the context of an activity, as the range of prov:hadRole)." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT for at supplere prov:Role (hvis anvendelse er begrænset til roller i forbindelse med en aktivitet, som er rækkevidde for prov:hadRole)." + }, { + "@language" : "cs", + "@value" : "Přidáno do DCAT pro doplnění třídy prov:Role (jejíž užití je omezeno na role v kontextu aktivit, jakožto obor hodnot vlastnosti prov:hadRole)." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per completare prov:Role (il cui uso è limitato ai ruoli nel contesto di un'attività, in conseguenza alla definizione del codominio di prov:hadRole)." + }, { + "@language" : "es", + "@value" : "Incluída en DCAT para complementar prov:Role (cuyo uso está limitado a roles en el contexto de una actividad, ya que es el rango es prov:hadRole)." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "Se usa en una relación cualificada para especificar el rol de una Entidad con respecto a otra Entidad. Se recomienda que los valores se administren como los valores de un vocabulario controlado de roles de entidad como por ejemplo: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; el esquema de metadatos de DataCite; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "Used in a qualified-attribution to specify the role of an Agent with respect to an Entity. It is recommended that the values be managed as a controlled vocabulary of agent roles, such as http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Anvendes i forbindelse med kvalificerede krediteringer til at angive aktørens rolle i forhold til en entitet. Det anbefales at værdierne styres som et kontrolleret udfaldsrum med aktørroller, såsom http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "en", + "@value" : "Used in a qualified-relation to specify the role of an Entity with respect to another Entity. It is recommended that the values be managed as a controlled vocabulary of entity roles such as: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Použito v kvalifikovaném přiřazení pro specifikaci role Agenta ve vztahu k Entitě. Je doporučeno množinu hodnot spravovat jako řízený slovník rolí agentů, jako například http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Se usa en una atribución cualificada para especificar el rol de un Agente con respecto a una Entidad. Se recomienda que los valores se administren como un vocabulario controlado de roles de agente, como por ejemplo http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "it", + "@value" : "Utilizzato in un'attribuzione qualificata per specificare il ruolo di un agente rispetto a un'entità. Si consiglia di attribuire i valori considerando un vocabolario controllato dei ruoli dell'agente, ad esempio http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Anvendes i forbindelse med kvalificerede relationer til at specificere en entitets rolle i forhold til en anden entitet. Det anbefales at værdierne styres med et kontrolleret udfaldsrum for for entitetsroller såsom: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "it", + "@value" : "Utilizzato in una relazione qualificata per specificare il ruolo di un'entità rispetto a un'altra entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di entità come ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, o MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Použito v kvalifikovaném vztahu pro specifikaci role Entity ve vztahu k jiné Entitě. Je doporučeno množinu hodnot spravovat jako řízený slovník rolí entit, jako například ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, či MARC relators https://id.loc.gov/vocabulary/relators." + } ] + }, { + "@id" : "dcat:accessService", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A site or end-point that gives access to the distribution of the dataset." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che dà accesso alla distribuzione del set di dati." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que da acceso a la distribución de un conjunto de datos." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod zpřístupňující distribuci datové sady." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der giver adgang til en repræsentation af datasættet." + } ], + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "služba pro přístup k datům" + }, { + "@language" : "en", + "@value" : "data access service" + }, { + "@language" : "es", + "@value" : "servicio de acceso de datos" + }, { + "@language" : "da", + "@value" : "dataadgangstjeneste" + }, { + "@language" : "it", + "@value" : "servizio di accesso ai dati" + } ], + "range" : "dcat:DataService", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Umístění či přístupový bod zpřístupňující distribuci datové sady." + }, { + "@language" : "it", + "@value" : "Un sito o end-point che dà accesso alla distribuzione del set di dati." + }, { + "@language" : "es", + "@value" : "Un sitio o end-point que da acceso a la distribución de un conjunto de datos." + }, { + "@language" : "da", + "@value" : "Et websted eller endpoint der giver adgang til en repræsentation af datasættet." + }, { + "@language" : "en", + "@value" : "A site or end-point that gives access to the distribution of the dataset." + } ] + }, { + "@id" : "dcat:accessURL", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "A URL of a resource that gives access to a distribution of the dataset. E.g. landing page, feed, SPARQL endpoint. Use for all cases except a simple download link, in which case downloadURL is preferred." + }, { + "@language" : "es", + "@value" : "Puede ser cualquier tipo de URL que de acceso a una distribución del conjunto de datos, e.g., página de destino, descarga, URL feed, punto de acceso SPARQL. Esta propriedad se debe usar cuando su catálogo de datos no tiene información sobre donde está o cuando no se puede descargar." + }, { + "@language" : "da", + "@value" : "En URL for en ressource som giver adgang til en repræsentation af datsættet. Fx destinationsside, feed, SPARQL-endpoint. Anvendes i alle sammenhænge undtagen til angivelse af et simpelt download link hvor anvendelse af egenskaben downloadURL foretrækkes." + }, { + "@language" : "cs", + "@value" : "URL zdroje, přes které je přístupná distribuce datové sady. Příkladem může být vstupní stránka, RSS kanál či SPARQL endpoint. Použijte ve všech případech kromě URL souboru ke stažení, pro které je lepší použít dcat:downloadURL." + }, { + "@language" : "el", + "@value" : "Μπορεί να είναι οποιουδήποτε είδους URL που δίνει πρόσβαση στη διανομή ενός συνόλου δεδομένων. Π.χ. ιστοσελίδα αρχικής πρόσβασης, μεταφόρτωση, feed URL, σημείο διάθεσης SPARQL. Να χρησιμοποιείται όταν ο κατάλογος δεν περιέχει πληροφορίες εαν πρόκειται ή όχι για μεταφορτώσιμο αρχείο." + }, { + "@language" : "it", + "@value" : "Un URL di una risorsa che consente di accedere a una distribuzione del set di dati. Per esempio, pagina di destinazione, feed, endpoint SPARQL. Da utilizzare per tutti i casi, tranne quando si tratta di un semplice link per il download nel qual caso è preferito downloadURL." + }, { + "@language" : "ja", + "@value" : "データセットの配信にアクセス権を与えるランディング・ページ、フィード、SPARQLエンドポイント、その他の種類の資源。" + }, { + "@language" : "fr", + "@value" : "Ceci peut être tout type d'URL qui donne accès à une distribution du jeu de données. Par exemple, un lien à une page HTML contenant un lien au jeu de données, un Flux RSS, un point d'accès SPARQL. Utilisez le lorsque votre catalogue ne contient pas d'information sur quoi il est ou quand ce n'est pas téléchargeable." + }, { + "@language" : "ar", + "@value" : "أي رابط يتيح الوصول إلى البيانات. إذا كان الرابط هو ربط مباشر لملف يمكن تحميله استخدم الخاصية downloadURL" + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "přístupová adresa" + }, { + "@language" : "fr", + "@value" : "URL d'accès" + }, { + "@language" : "ja", + "@value" : "アクセスURL" + }, { + "@language" : "en", + "@value" : "access address" + }, { + "@language" : "el", + "@value" : "URL πρόσβασης" + }, { + "@language" : "ar", + "@value" : "رابط وصول" + }, { + "@language" : "es", + "@value" : "URL de acceso" + }, { + "@language" : "it", + "@value" : "indirizzo di accesso" + }, { + "@language" : "da", + "@value" : "adgangsadresse" + } ], + "range" : "rdfs:Resource", + "propertyChainAxiom" : { + "@list" : [ "dcat:accessService", "dcat:endpointURL" ] + }, + "skos:altLabel" : { + "@language" : "da", + "@value" : "adgangsURL" + }, + "skos:definition" : [ { + "@language" : "da", + "@value" : "En URL for en ressource som giver adgang til en repræsentation af datsættet. Fx destinationsside, feed, SPARQL-endpoint. Anvendes i alle sammenhænge undtagen til angivelse af et simpelt download link hvor anvendelse af egenskaben downloadURL foretrækkes." + }, { + "@language" : "ja", + "@value" : "データセットの配信にアクセス権を与えるランディング・ページ、フィード、SPARQLエンドポイント、その他の種類の資源。" + }, { + "@language" : "en", + "@value" : "A URL of a resource that gives access to a distribution of the dataset. E.g. landing page, feed, SPARQL endpoint. Use for all cases except a simple download link, in which case downloadURL is preferred." + }, { + "@language" : "fr", + "@value" : "Ceci peut être tout type d'URL qui donne accès à une distribution du jeu de données. Par exemple, un lien à une page HTML contenant un lien au jeu de données, un Flux RSS, un point d'accès SPARQL. Utilisez le lorsque votre catalogue ne contient pas d'information sur quoi il est ou quand ce n'est pas téléchargeable." + }, { + "@language" : "it", + "@value" : "Un URL di una risorsa che consente di accedere a una distribuzione del set di dati. Per esempio, pagina di destinazione, feed, endpoint SPARQL. Da utilizzare per tutti i casi, tranne quando si tratta di un semplice link per il download nel qual caso è preferito downloadURL." + }, { + "@language" : "el", + "@value" : "Μπορεί να είναι οποιουδήποτε είδους URL που δίνει πρόσβαση στη διανομή ενός συνόλου δεδομένων. Π.χ. ιστοσελίδα αρχικής πρόσβασης, μεταφόρτωση, feed URL, σημείο διάθεσης SPARQL. Να χρησιμοποιείται όταν ο κατάλογος δεν περιέχει πληροφορίες εαν πρόκειται ή όχι για μεταφορτώσιμο αρχείο." + }, { + "@language" : "es", + "@value" : "Puede ser cualquier tipo de URL que de acceso a una distribución del conjunto de datos, e.g., página de destino, descarga, URL feed, punto de acceso SPARQL. Esta propriedad se debe usar cuando su catálogo de datos no tiene información sobre donde está o cuando no se puede descargar." + }, { + "@language" : "cs", + "@value" : "URL zdroje, přes které je přístupná distribuce datové sady. Příkladem může být vstupní stránka, RSS kanál či SPARQL endpoint. Použijte ve všech případech kromě URL souboru ke stažení, pro které je lepší použít dcat:downloadURL." + }, { + "@language" : "ar", + "@value" : "أي رابط يتيح الوصول إلى البيانات. إذا كان الرابط هو ربط مباشر لملف يمكن تحميله استخدم الخاصية downloadURL" + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "rdfs:label, rdfs:comment and skos:scopeNote have been modified. Non-english versions except for Italian must be updated." + }, { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, updated Italian and Czech translation provided, translations for other languages pending." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Se le distribuzioni sono accessibili solo attraverso una pagina web (ad esempio, gli URL per il download diretto non sono noti), allora il link della pagina web deve essere duplicato come accessURL sulla distribuzione." + }, { + "@language" : "da", + "@value" : "Hvis en eller flere distributioner kun er tilgængelige via en destinationsside (dvs. en URL til direkte download er ikke kendt), så bør destinationssidelinket gentages som adgangsadresse for distributionen." + }, { + "@language" : "cs", + "@value" : "Pokud jsou distribuce přístupné pouze přes vstupní stránku (tj. URL pro přímé stažení nejsou známa), pak by URL přístupové stránky mělo být duplikováno ve vlastnosti distribuce accessURL." + }, { + "@language" : "es", + "@value" : "El rango es una URL. Si la distribución es accesible solamente través de una página de destino (es decir, si no se conoce una URL de descarga directa), entonces el enlance a la página de destino debe ser duplicado como accessURL en la distribución." + }, { + "@language" : "el", + "@value" : "Η τιμή είναι ένα URL. Αν η/οι διανομή/ές είναι προσβάσιμη/ες μόνο μέσω μίας ιστοσελίδας αρχικής πρόσβασης (δηλαδή αν δεν υπάρχουν γνωστές διευθύνσεις άμεσης μεταφόρτωσης), τότε ο σύνδεσμος της ιστοσελίδας αρχικής πρόσβασης πρέπει να αναπαραχθεί ως accessURL σε μία διανομή." + }, { + "@language" : "fr", + "@value" : "La valeur est une URL. Si la distribution est accessible seulement au travers d'une page d'atterrissage (c-à-dire on n'ignore une URL de téléchargement direct), alors le lien à la page d'atterrissage doit être dupliqué comee accessURL sur la distribution." + }, { + "@language" : "ja", + "@value" : "確実にダウンロードでない場合や、ダウンロードかどうかが不明である場合は、downloadURLではなく、accessURLを用いてください。ランディング・ページを通じてしか配信にアクセスできない場合(つまり、直接的なダウンロードURLが不明)は、配信におけるaccessURLとしてランディング・ページのリンクをコピーすべきです(SHOULD)。" + }, { + "@language" : "en", + "@value" : "If the distribution(s) are accessible only through a landing page (i.e. direct download URLs are not known), then the landing page link should be duplicated as accessURL on a distribution." + } ] + }, { + "@id" : "dcat:bbox", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:Location", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "bounding box" + }, { + "@language" : "en", + "@value" : "bounding box" + }, { + "@language" : "es", + "@value" : "cuadro delimitador" + }, { + "@language" : "cs", + "@value" : "ohraničení oblasti" + }, { + "@language" : "it", + "@value" : "quadro di delimitazione" + } ], + "range" : "rdfs:Literal", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Propiedad nueva agregada en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Den geografiske omskrevne firkant af en ressource." + }, { + "@language" : "it", + "@value" : "Il riquadro di delimitazione geografica di una risorsa." + }, { + "@language" : "cs", + "@value" : "Ohraničení geografické oblasti zdroje." + }, { + "@language" : "es", + "@value" : "El cuadro delimitador geográfico para un recurso." + }, { + "@language" : "en", + "@value" : "The geographic bounding box of a resource." + } ], + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintas codificaciones geométricas. Por ejemplo, la geometría puede ser codificada como WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different geometry encodings. E.g., the geometry could be encoded with as WKT (geosparql:wktLiteral [GeoSPARQL]) or [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generica, con lo scopo di consentire diverse codifiche geometriche. Ad esempio, la geometria potrebbe essere codificata con WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé kódování geometrií. Geometrie by kupříkladu mohla být kódována jako WKT (geosparql:wktLiteral [GeoSPARQL]) či [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "da", + "@value" : "Rækkevidden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige kodninger af geometrier. Geometrien kan eksempelvis repræsenteres som WKT (geosparql:asWKT [GeoSPARQL]) eller [GML] (geosparql:asGML [GeoSPARQL])." + } ] + }, { + "@id" : "dcat:byteSize", + "@type" : [ "owl:DatatypeProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "ar", + "@value" : "الحجم بالبايتات " + }, { + "@language" : "el", + "@value" : "Το μέγεθος μιας διανομής σε bytes." + }, { + "@language" : "en", + "@value" : "The size of a distribution in bytes." + }, { + "@language" : "cs", + "@value" : "Velikost distribuce v bajtech." + }, { + "@language" : "ja", + "@value" : "バイトによる配信のサイズ。" + }, { + "@language" : "fr", + "@value" : "La taille de la distribution en octects" + }, { + "@language" : "da", + "@value" : "Størrelsen af en distributionen angivet i bytes." + }, { + "@language" : "it", + "@value" : "La dimensione di una distribuzione in byte." + }, { + "@language" : "es", + "@value" : "El tamaño de una distribución en bytes." + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "el", + "@value" : "μέγεθος σε bytes" + }, { + "@language" : "cs", + "@value" : "velikost v bajtech" + }, { + "@language" : "en", + "@value" : "byte size" + }, { + "@language" : "es", + "@value" : "tamaño en bytes" + }, { + "@language" : "it", + "@value" : "dimensione in byte" + }, { + "@language" : "ar", + "@value" : "الحجم بالبايت" + }, { + "@language" : "ja", + "@value" : "バイト・サイズ" + }, { + "@language" : "fr", + "@value" : "taille en octects" + }, { + "@language" : "da", + "@value" : "bytestørrelse" + } ], + "range" : "rdfs:Literal", + "skos:definition" : [ { + "@language" : "el", + "@value" : "Το μέγεθος μιας διανομής σε bytes." + }, { + "@language" : "da", + "@value" : "Størrelsen af en distribution angivet i bytes." + }, { + "@language" : "ar", + "@value" : "الحجم بالبايتات " + }, { + "@language" : "es", + "@value" : "El tamaño de una distribución en bytes." + }, { + "@language" : "cs", + "@value" : "Velikost distribuce v bajtech." + }, { + "@language" : "it", + "@value" : "La dimensione di una distribuzione in byte." + }, { + "@language" : "en", + "@value" : "The size of a distribution in bytes." + }, { + "@language" : "fr", + "@value" : "La taille de la distribution en octects." + }, { + "@language" : "ja", + "@value" : "バイトによる配信のサイズ。" + } ], + "skos:scopeNote" : [ { + "@language" : "el", + "@value" : "Το μέγεθος σε bytes μπορεί να προσεγγιστεί όταν η ακριβής τιμή δεν είναι γνωστή. Η τιμή της dcat:byteSize θα πρέπει να δίνεται με τύπο δεδομένων xsd:decimal." + }, { + "@language" : "ar", + "@value" : "الحجم يمكن أن يكون تقريبي إذا كان الحجم الدقيق غير معروف" + }, { + "@language" : "da", + "@value" : "Bytestørrelsen kan approximeres hvis den præcise størrelse ikke er kendt. Værdien af dcat:byteSize bør angives som xsd:decimal." + }, { + "@language" : "cs", + "@value" : "Velikost v bajtech může být přibližná, pokud její přesná hodnota není známa. Literál s hodnotou dcat:byteSize by měl mít datový typ xsd:decimal." + }, { + "@language" : "es", + "@value" : "El tamaño en bytes puede ser aproximado cuando se desconoce el tamaño exacto. El valor literal de dcat:byteSize debe tener tipo 'xsd:decimal'." + }, { + "@language" : "ja", + "@value" : "正確なサイズが不明である場合、サイズは、バイトによる近似値を示すことができます。" + }, { + "@language" : "fr", + "@value" : "La taille en octects peut être approximative lorsque l'on ignore la taille réelle. La valeur littérale de dcat:byteSize doit être de type xsd:decimal." + }, { + "@language" : "en", + "@value" : "The size in bytes can be approximated when the precise size is not known. The literal value of dcat:byteSize should by typed as xsd:decimal." + }, { + "@language" : "it", + "@value" : "La dimensione in byte può essere approssimata quando non si conosce la dimensione precisa. Il valore di dcat:byteSize dovrebbe essere espresso come un xsd:decimal." + } ] + }, { + "@id" : "dcat:catalog", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Un catálogo cuyo contenido es de interés en el contexto del catálogo que está siendo descripto." + }, { + "@language" : "it", + "@value" : "Un catalogo i cui contenuti sono di interesse nel contesto di questo catalogo." + }, { + "@language" : "da", + "@value" : "Et katalog hvis indhold er relevant i forhold til det aktuelle katalog." + }, { + "@language" : "cs", + "@value" : "Katalog, jehož obsah je v kontextu tohoto katalogu zajímavý." + }, { + "@language" : "en", + "@value" : "A catalog whose contents are of interest in the context of this catalog." + } ], + "domain" : "dcat:Catalog", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "catálogo" + }, { + "@language" : "it", + "@value" : "catalogo" + }, { + "@language" : "da", + "@value" : "katalog" + }, { + "@language" : "cs", + "@value" : "katalog" + }, { + "@language" : "en", + "@value" : "catalog" + } ], + "range" : "dcat:Catalog", + "subPropertyOf" : [ "rdfs:member", "dct:hasPart" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "har delkatalog" + }, + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Un catalogo i cui contenuti sono di interesse nel contesto di questo catalogo." + }, { + "@language" : "cs", + "@value" : "Katalog, jehož obsah je v kontextu tohoto katalogu zajímavý." + }, { + "@language" : "da", + "@value" : "Et katalog hvis indhold er relevant i forhold til det aktuelle katalog." + }, { + "@language" : "es", + "@value" : "Un catálogo cuyo contenido es de interés en el contexto del catálogo que está siendo descripto." + }, { + "@language" : "en", + "@value" : "A catalog whose contents are of interest in the context of this catalog." + } ] + }, { + "@id" : "dcat:centroid", + "@type" : [ "owl:DatatypeProperty", "rdf:Property" ], + "domain" : "dct:Location", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "centroide" + }, { + "@language" : "it", + "@value" : "centroide" + }, { + "@language" : "en", + "@value" : "centroid" + }, { + "@language" : "cs", + "@value" : "centroid" + }, { + "@language" : "da", + "@value" : "geometrisk tyngdepunkt" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "centroide" + }, + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Il centro geografico (centroide) di una risorsa." + }, { + "@language" : "cs", + "@value" : "Geografický střed (centroid) zdroje." + }, { + "@language" : "da", + "@value" : "Det geometrisk tyngdepunkt (centroid) for en ressource." + }, { + "@language" : "es", + "@value" : "El centro geográfico (centroide) de un recurso." + }, { + "@language" : "en", + "@value" : "The geographic center (centroid) of a resource." + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Rækkevidden for denne egenskab er bevidst generisk definere med det formål at tillade forskellige geokodninger. Geometrien kan eksempelvis repræsenteres som WKT (geosparql:asWKT [GeoSPARQL]) eller [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different geometry encodings. E.g., the geometry could be encoded with as WKT (geosparql:wktLiteral [GeoSPARQL]) or [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé kódování geometrií. Geometrie by kupříkladu mohla být kódována jako WKT (geosparql:wktLiteral [GeoSPARQL]) či [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el objetivo de permitir distintas codificaciones geométricas. Por ejemplo, la geometría puede codificarse como WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generica, con lo scopo di consentire diverse codifiche geometriche. Ad esempio, la geometria potrebbe essere codificata con WKT (geosparql:wktLiteral [GeoSPARQL]) o [GML] (geosparql:asGML [GeoSPARQL])." + } ] + }, { + "@id" : "dcat:compressFormat", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il formato di compressione della distribuzione nel quale i dati sono in forma compressa, ad es. per ridurre le dimensioni del file da scaricare." + }, { + "@language" : "cs", + "@value" : "Formát komprese souboru, ve kterém jsou data poskytována v komprimované podobě, např. ke snížení velikosti souboru ke stažení." + }, { + "@language" : "en", + "@value" : "The compression format of the distribution in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file." + }, { + "@language" : "da", + "@value" : "Kompressionsformatet for distributionen som indeholder data i et komprimeret format, fx for at reducere størrelsen af downloadfilen." + }, { + "@language" : "es", + "@value" : "El formato de la distribución en el que los datos están en forma comprimida, e.g. para reducir el tamaño del archivo a bajar." + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "https://www.w3.org/TR/vocab-dcat-2/", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "compression format" + }, { + "@language" : "da", + "@value" : "kompressionsformat" + }, { + "@language" : "es", + "@value" : "formato de compresión" + }, { + "@language" : "it", + "@value" : "formato di compressione" + }, { + "@language" : "cs", + "@value" : "formát komprese" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Kompressionsformatet for distributionen som indeholder data i et komprimeret format, fx for at reducere størrelsen af downloadfilen." + }, { + "@language" : "cs", + "@value" : "Formát komprese souboru, ve kterém jsou data poskytována v komprimované podobě, např. ke snížení velikosti souboru ke stažení." + }, { + "@language" : "es", + "@value" : "El formato de la distribución en el que los datos están en forma comprimida, e.g. para reducir el tamaño del archivo a bajar." + }, { + "@language" : "it", + "@value" : "Il formato di compressione della distribuzione nel quale i dati sono in forma compressa, ad es. per ridurre le dimensioni del file da scaricare." + }, { + "@language" : "en", + "@value" : "The compression format of the distribution in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà deve essere utilizzata quando i file nella distribuzione sono compressi, ad es. in un file ZIP. Il formato DOVREBBE essere espresso usando un tipo di media come definito dal registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, se disponibile." + }, { + "@language" : "da", + "@value" : "Denne egenskab kan anvendes når filerne i en distribution er blevet komprimeret, fx i en ZIP-fil. Formatet BØR udtrykkes ved en medietype som defineret i 'IANA media types registry', hvis der optræder en relevant medietype dér: https://www.iana.org/assignments/media-types/." + }, { + "@language" : "en", + "@value" : "This property is to be used when the files in the distribution are compressed, e.g. in a ZIP file. The format SHOULD be expressed using a media type as defined by IANA media types registry https://www.iana.org/assignments/media-types/, if available." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost se použije, když jsou soubory v distribuci komprimovány, např. v ZIP souboru. Formát BY MĚL být vyjádřen pomocí typu média definovaného v registru IANA https://www.iana.org/assignments/media-types/, pokud existuje." + }, { + "@language" : "es", + "@value" : "Esta propiedad se debe usar cuando los archivos de la distribución están comprimidos, por ejemplo en un archivo ZIP. El formato DEBERÍA expresarse usando un 'media type', tales como los definidos en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, si está disponibles." + } ] + }, { + "@id" : "dcat:contactPoint", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "Relevante kontaktoplysninger for den katalogiserede ressource. Anvendelse af vCard anbefales." + }, { + "@language" : "en", + "@value" : "Relevant contact information for the catalogued resource. Use of vCard is recommended." + }, { + "@language" : "fr", + "@value" : "Relie un jeu de données à une information de contact utile en utilisant VCard." + }, { + "@language" : "es", + "@value" : "Información relevante de contacto para el recurso catalogado. Se recomienda el uso de vCard." + }, { + "@language" : "it", + "@value" : "Informazioni di contatto rilevanti per la risorsa catalogata. Si raccomanda l'uso di vCard." + }, { + "@language" : "ja", + "@value" : "データセットを、VCardを用いて提供されている適切な連絡先情報にリンクします。" + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بعنوان اتصال موصف باستخدام VCard" + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με ένα σχετικό σημείο επικοινωνίας, μέσω VCard." + }, { + "@language" : "cs", + "@value" : "Relevantní kontaktní informace pro katalogizovaný zdroj. Doporučuje se použít slovník VCard." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "fr", + "@value" : "point de contact" + }, { + "@language" : "ar", + "@value" : "عنوان اتصال" + }, { + "@language" : "ja", + "@value" : "窓口" + }, { + "@language" : "en", + "@value" : "contact point" + }, { + "@language" : "el", + "@value" : "σημείο επικοινωνίας" + }, { + "@language" : "cs", + "@value" : "kontaktní bod" + }, { + "@language" : "it", + "@value" : "punto di contatto" + }, { + "@language" : "es", + "@value" : "Punto de contacto" + }, { + "@language" : "da", + "@value" : "kontaktpunkt" + } ], + "range" : "vcard:Kind", + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Relie un jeu de données à une information de contact utile en utilisant VCard." + }, { + "@language" : "it", + "@value" : "Informazioni di contatto rilevanti per la risorsa catalogata. Si raccomanda l'uso di vCard." + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με ένα σχετικό σημείο επικοινωνίας, μέσω VCard." + }, { + "@language" : "en", + "@value" : "Relevant contact information for the catalogued resource. Use of vCard is recommended." + }, { + "@language" : "es", + "@value" : "Información relevante de contacto para el recurso catalogado. Se recomienda el uso de vCard." + }, { + "@language" : "ja", + "@value" : "データセットを、VCardを用いて提供されている適切な連絡先情報にリンクします。" + }, { + "@language" : "da", + "@value" : "Relevante kontaktoplysninger for den katalogiserede ressource. Anvendelse af vCard anbefales." + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بعنوان اتصال موصف باستخدام VCard" + }, { + "@language" : "cs", + "@value" : "Relevantní kontaktní informace pro katalogizovaný zdroj. Doporučuje se použít slovník VCard." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translations provided, other translations pending." + } + }, { + "@id" : "dcat:dataset", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Kolekce dat, která je katalogizována v katalogu." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che è elencata nel catalogo." + }, { + "@language" : "es", + "@value" : "Un conjunto de datos que se lista en el catálogo." + }, { + "@language" : "da", + "@value" : "En samling af data som er opført i kataloget." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بقائمة بيانات ضمنه" + }, { + "@language" : "en", + "@value" : "A collection of data that is listed in the catalog." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるデータセット。" + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à un jeu de données faisant partie de ce catalogue." + }, { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με ένα σύνολο δεδομένων το οποίο ανήκει στον εν λόγω κατάλογο." + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "el", + "@value" : "σύνολο δεδομένων" + }, { + "@language" : "ar", + "@value" : "قائمة بيانات" + }, { + "@language" : "es", + "@value" : "conjunto de datos" + }, { + "@language" : "cs", + "@value" : "datová sada" + }, { + "@language" : "it", + "@value" : "dataset" + }, { + "@language" : "en", + "@value" : "dataset" + }, { + "@language" : "fr", + "@value" : "jeu de données" + }, { + "@language" : "ja", + "@value" : "データセット" + }, { + "@language" : "da", + "@value" : "datasæt" + } ], + "range" : "dcat:Dataset", + "subPropertyOf" : [ "rdfs:member", "dct:hasPart" ], + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "har datasæt" + }, { + "@language" : "da", + "@value" : "datasamling" + } ], + "skos:definition" : [ { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με ένα σύνολο δεδομένων το οποίο ανήκει στον εν λόγω κατάλογο." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるデータセット。" + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à un jeu de données faisant partie de ce catalogue." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, která je katalogizována v katalogu." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che è elencata nel catalogo." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بقائمة بيانات ضمنه" + }, { + "@language" : "en", + "@value" : "A collection of data that is listed in the catalog." + }, { + "@language" : "da", + "@value" : "En samling af data som er opført i kataloget." + }, { + "@language" : "es", + "@value" : "Un conjunto de datos que se lista en el catálogo." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translation provided, other translations pending." + } + }, { + "@id" : "dcat:distribution", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "fr", + "@value" : "Connecte un jeu de données à des distributions disponibles." + }, { + "@language" : "es", + "@value" : "Una distribución disponible del conjunto de datos." + }, { + "@language" : "en", + "@value" : "An available distribution of the dataset." + }, { + "@language" : "da", + "@value" : "En tilgængelig repræsentation af datasættet." + }, { + "@language" : "it", + "@value" : "Una distribuzione disponibile per il set di dati." + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بطريقة أو بشكل يسمح الوصول الى البيانات" + }, { + "@language" : "ja", + "@value" : "データセットを、その利用可能な配信に接続します。" + }, { + "@language" : "cs", + "@value" : "Dostupná distribuce datové sady." + }, { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με μία από τις διαθέσιμες διανομές του." + } ], + "domain" : "dcat:Dataset", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "データセット配信" + }, { + "@language" : "da", + "@value" : "distribution" + }, { + "@language" : "fr", + "@value" : "distribution" + }, { + "@language" : "en", + "@value" : "distribution" + }, { + "@language" : "it", + "@value" : "distribuzione" + }, { + "@language" : "el", + "@value" : "διανομή" + }, { + "@language" : "ar", + "@value" : "توزيع" + }, { + "@language" : "es", + "@value" : "distribución" + }, { + "@language" : "cs", + "@value" : "distribuce" + } ], + "range" : "dcat:Distribution", + "subPropertyOf" : "dct:relation", + "skos:altLabel" : { + "@language" : "da", + "@value" : "har distribution" + }, + "skos:definition" : [ { + "@language" : "el", + "@value" : "Συνδέει ένα σύνολο δεδομένων με μία από τις διαθέσιμες διανομές του." + }, { + "@language" : "fr", + "@value" : "Connecte un jeu de données à des distributions disponibles." + }, { + "@language" : "es", + "@value" : "Una distribución disponible del conjunto de datos." + }, { + "@language" : "ja", + "@value" : "データセットを、その利用可能な配信に接続します。" + }, { + "@language" : "ar", + "@value" : "تربط قائمة البيانات بطريقة أو بشكل يسمح الوصول الى البيانات" + }, { + "@language" : "da", + "@value" : "En tilgængelig repræsentation af datasættet." + }, { + "@language" : "it", + "@value" : "Una distribuzione disponibile per il set di dati." + }, { + "@language" : "en", + "@value" : "An available distribution of the dataset." + }, { + "@language" : "cs", + "@value" : "Dostupná distribuce datové sady." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, translations pending (except for Italian, Spanish and Czech)." + } + }, { + "@id" : "dcat:downloadURL", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "URL til fil der kan downloades i et bestemt format. Fx en CSV-fil eller en RDF-fil. Formatet for distributionen angives ved hjælp af egenskaberne dct:format og/eller dcat:mediaType." + }, { + "@language" : "en", + "@value" : "The URL of the downloadable file in a given format. E.g. CSV file or RDF file. The format is indicated by the distribution's dct:format and/or dcat:mediaType." + }, { + "@language" : "fr", + "@value" : "Ceci est un lien direct à un fichier téléchargeable en un format donnée. Exple fichier CSV ou RDF. Le format est décrit par les propriétés de distribution dct:format et/ou dcat:mediaType." + }, { + "@language" : "es", + "@value" : "La URL de un archivo descargable en el formato dato. Por ejemplo, archivo CSV o archivo RDF. El formato se describe con las propiedades de la distribución dct:format y/o dcat:mediaType." + }, { + "@language" : "it", + "@value" : "Questo è un link diretto al file scaricabile in un dato formato. E.g. un file CSV o un file RDF. Il formato è descritto dal dct:format e/o dal dcat:mediaType della distribuzione." + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení v daném formátu, například CSV nebo RDF soubor. Formát je popsán vlastností distribuce dct:format a/nebo dcat:mediaType." + }, { + "@language" : "ja", + "@value" : "dcat:downloadURLはdcat:accessURLの特定の形式です。しかし、DCATプロファイルが非ダウンロード・ロケーションに対してのみaccessURLを用いる場合には、より強い分離を課すことを望む可能性があるため、この含意を強化しないように、DCATは、dcat:downloadURLをdcat:accessURLのサブプロパティーであると定義しません。" + }, { + "@language" : "el", + "@value" : "Είναι ένας σύνδεσμος άμεσης μεταφόρτωσης ενός αρχείου σε μια δεδομένη μορφή. Π.χ. ένα αρχείο CSV ή RDF. Η μορφη αρχείου περιγράφεται από τις ιδιότητες dct:format ή/και dcat:mediaType της διανομής." + }, { + "@language" : "ar", + "@value" : "رابط مباشر لملف يمكن تحميله. نوع الملف يتم توصيفه باستخدام الخاصية dct:format dcat:mediaType " + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "downloadURL" + }, { + "@language" : "es", + "@value" : "URL de descarga" + }, { + "@language" : "ar", + "@value" : "رابط تحميل" + }, { + "@language" : "ja", + "@value" : "ダウンロードURL" + }, { + "@language" : "it", + "@value" : "URL di scarico" + }, { + "@language" : "en", + "@value" : "download URL" + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení" + }, { + "@language" : "el", + "@value" : "URL μεταφόρτωσης" + }, { + "@language" : "fr", + "@value" : "URL de téléchargement" + } ], + "range" : "rdfs:Resource", + "skos:definition" : [ { + "@language" : "fr", + "@value" : "Ceci est un lien direct à un fichier téléchargeable en un format donnée. Exple fichier CSV ou RDF. Le format est décrit par les propriétés de distribution dct:format et/ou dcat:mediaType." + }, { + "@language" : "ja", + "@value" : "dcat:downloadURLはdcat:accessURLの特定の形式です。しかし、DCATプロファイルが非ダウンロード・ロケーションに対してのみaccessURLを用いる場合には、より強い分離を課すことを望む可能性があるため、この含意を強化しないように、DCATは、dcat:downloadURLをdcat:accessURLのサブプロパティーであると定義しません。" + }, { + "@language" : "it", + "@value" : "Questo è un link diretto al file scaricabile in un dato formato. E.g. un file CSV o un file RDF. Il formato è descritto dal dct:format e/o dal dcat:mediaType della distribuzione." + }, { + "@language" : "en", + "@value" : "The URL of the downloadable file in a given format. E.g. CSV file or RDF file. The format is indicated by the distribution's dct:format and/or dcat:mediaType." + }, { + "@language" : "ar", + "@value" : "رابط مباشر لملف يمكن تحميله. نوع الملف يتم توصيفه باستخدام الخاصية dct:format dcat:mediaType " + }, { + "@language" : "cs", + "@value" : "URL souboru ke stažení v daném formátu, například CSV nebo RDF soubor. Formát je popsán vlastností distribuce dct:format a/nebo dcat:mediaType." + }, { + "@language" : "el", + "@value" : "Είναι ένας σύνδεσμος άμεσης μεταφόρτωσης ενός αρχείου σε μια δεδομένη μορφή. Π.χ. ένα αρχείο CSV ή RDF. Η μορφη αρχείου περιγράφεται από τις ιδιότητες dct:format ή/και dcat:mediaType της διανομής." + }, { + "@language" : "da", + "@value" : "URL til fil der kan downloades i et bestemt format. Fx en CSV-fil eller en RDF-fil. Formatet for distributionen angives ved hjælp af egenskaberne dct:format og/eller dcat:mediaType." + }, { + "@language" : "es", + "@value" : "La URL de un archivo descargable en el formato dato. Por ejemplo, archivo CSV o archivo RDF. El formato se describe con las propiedades de la distribución dct:format y/o dcat:mediaType." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian, Spanish and Czech translation updated, other translations pending." + }, { + "@language" : "en", + "@value" : "rdfs:label, rdfs:comment and/or skos:scopeNote have been modified. Non-english versions must be updated." + } ], + "skos:scopeNote" : [ { + "@language" : "fr", + "@value" : "La valeur est une URL." + }, { + "@language" : "en", + "@value" : "dcat:downloadURL SHOULD be used for the address at which this distribution is available directly, typically through a HTTP Get request." + }, { + "@language" : "cs", + "@value" : "dcat:downloadURL BY MĚLA být použita pro adresu, ze které je distribuce přímo přístupná, typicky skrze požadavek HTTP Get." + }, { + "@language" : "it", + "@value" : "dcat:downloadURL DOVREBBE essere utilizzato per l'indirizzo a cui questa distribuzione è disponibile direttamente, in genere attraverso una richiesta Get HTTP." + }, { + "@language" : "es", + "@value" : "El valor es una URL." + }, { + "@language" : "da", + "@value" : "dcat:downloadURL BØR anvendes til angivelse af den adresse hvor distributionen er tilgængelig direkte, typisk gennem et HTTP Get request." + }, { + "@language" : "el", + "@value" : "Η τιμή είναι ένα URL." + } ] + }, { + "@id" : "dcat:endDate", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:PeriodOfTime", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "data di fine" + }, { + "@language" : "cs", + "@value" : "datum konce" + }, { + "@language" : "da", + "@value" : "slutdato" + }, { + "@language" : "en", + "@value" : "end date" + }, { + "@language" : "es", + "@value" : "fecha final" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "sluttidspunkt" + }, + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "El fin del período." + }, { + "@language" : "da", + "@value" : "Slutningen på perioden." + }, { + "@language" : "it", + "@value" : "La fine del periodo." + }, { + "@language" : "cs", + "@value" : "Konec doby trvání." + }, { + "@language" : "en", + "@value" : "The end of the period." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "La range di questa proprietà è volutamente generico, con lo scopo di consentire diversi livelli di precisione temporale per specificare la fine di un periodo. Ad esempio, può essere espresso con una data (xsd:date), una data e un'ora (xsd:dateTime), o un anno (xsd:gYear)." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé úrovně časového rozlišení pro specifikaci konce doby trvání. Ten může být kupříkladu vyjádřen datumem (xsd:date), datumem a časem (xsd:dateTime) či rokem (xsd:gYear)." + }, { + "@language" : "da", + "@value" : "Rækkeviden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige niveauer af tidslig præcision ifm. angivelse af slutdatoen for en periode. Den kan eksempelvis udtrykkes som en dato (xsd:date), en dato og et tidspunkt (xsd:dateTime), eller et årstal (xsd:gYear)." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintos niveles de precisión temporal para especificar el fin del período. Por ejemplo, puede expresarse como una fecha (xsd:date), una fecha y un tiempo (xsd:dateTime), o un año (xsd:gYear)." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different level of temporal precision for specifying the end of a period. E.g., it can be expressed with a date (xsd:date), a date and time (xsd:dateTime), or a year (xsd:gYear)." + } ] + }, { + "@id" : "dcat:endpointDescription", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "da", + "@value" : "En beskrivelse af det pågældende tjenesteendpoint, inklusiv dets operationer, parametre etc." + }, { + "@language" : "es", + "@value" : "Una descripción del end-point del servicio, incluyendo sus operaciones, parámetros, etc." + }, { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint del servizio, incluse le sue operazioni, parametri, ecc." + }, { + "@language" : "en", + "@value" : "A description of the service end-point, including its operations, parameters etc." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu služby včetně operací, parametrů apod." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "endpointbeskrivelse" + }, { + "@language" : "es", + "@value" : "descripción del end-point del servicio" + }, { + "@language" : "en", + "@value" : "description of service end-point" + }, { + "@language" : "cs", + "@value" : "popis přístupového bodu služby" + }, { + "@language" : "it", + "@value" : "descrizione dell'endpoint del servizio" + } ], + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab i DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en", + "@value" : "A description of the service end-point, including its operations, parameters etc." + }, { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint del servizio, incluse le sue operazioni, parametri, ecc." + }, { + "@language" : "da", + "@value" : "En beskrivelse af det pågældende tjenesteendpoint, inklusiv dets operationer, parametre etc." + }, { + "@language" : "es", + "@value" : "Una descripción del end-point del servicio, incluyendo sus operaciones, parámetros, etc.." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu služby včetně operací, parametrů apod." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Una descrizione dell'endpoint può essere espressa in un formato leggibile dalla macchina, come una descrizione OpenAPI (Swagger), una risposta GetCapabilities OGC, una descrizione del servizio SPARQL, un documento OpenSearch o WSDL, una descrizione API Hydra, o con del testo o qualche altra modalità informale se una rappresentazione formale non è possibile." + }, { + "@language" : "es", + "@value" : "La descripción del endpoint brinda detalles específicos de la instancia del endpoint, mientras que dct:conformsTo se usa para indicar el estándar general o especificación que implementa el endpoint." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu dává specifické detaily jeho konkrétní instance, zatímco dct:conformsTo indikuje obecný standard či specifikaci kterou přístupový bod implementuje." + }, { + "@language" : "en", + "@value" : "The endpoint description gives specific details of the actual endpoint instance, while dct:conformsTo is used to indicate the general standard or specification that the endpoint implements." + }, { + "@language" : "es", + "@value" : "Una descripción del endpoint del servicio puede expresarse en un formato que la máquina puede interpretar, tal como una descripción basada en OpenAPI (Swagger), una respuesta OGC GetCapabilities, una descripción de un servicio SPARQL, un documento OpenSearch o WSDL, una descripción con la Hydra API, o en texto u otro modo informal si la representación formal no es posible." + }, { + "@language" : "it", + "@value" : "La descrizione dell'endpoint fornisce dettagli specifici dell'istanza dell'endpoint reale, mentre dct:conformsTo viene utilizzato per indicare lo standard o le specifiche implementate dall'endpoint." + }, { + "@language" : "da", + "@value" : "En beskrivelse af et endpoint kan udtrykkes i et maskinlæsbart format, såsom OpenAPI (Swagger)-beskrivelser, et OGC GetCapabilities svar, en SPARQL tjenestebeskrivelse, en OpenSearch- eller et WSDL-dokument, en Hydra-API-beskrivelse, eller i tekstformat eller i et andet uformelt format, hvis en formel repræsentation ikke er mulig." + }, { + "@language" : "cs", + "@value" : "Popis přístupového bodu může být vyjádřen ve strojově čitelné formě, například jako popis OpenAPI (Swagger), odpověď služby OGC getCapabilities, pomocí slovníku SPARQL Service Description, jako OpenSearch či WSDL document, jako popis API dle slovníku Hydra, a nebo textově nebo jiným neformálním způsobem, pokud není možno použít formální reprezentaci." + }, { + "@language" : "en", + "@value" : "An endpoint description may be expressed in a machine-readable form, such as an OpenAPI (Swagger) description, an OGC GetCapabilities response, a SPARQL Service Description, an OpenSearch or WSDL document, a Hydra API description, else in text or some other informal mode if a formal representation is not possible." + }, { + "@language" : "da", + "@value" : "Endpointbeskrivelsen giver specifikke oplysninger om den konkrete endpointinstans, mens dct:conformsTo anvendes til at indikere den overordnede standard eller specifikation som endpointet er i overensstemmelse med." + } ] + }, { + "@id" : "dcat:endpointURL", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "La posición raíz o end-point principal del servicio (una IRI web)." + }, { + "@language" : "it", + "@value" : "La locazione principale o l'endpoint primario del servizio (un IRI risolvibile via web)." + }, { + "@language" : "en", + "@value" : "The root location or primary endpoint of the service (a web-resolvable IRI)." + }, { + "@language" : "cs", + "@value" : "Kořenové umístění nebo hlavní přístupový bod služby (IRI přístupné přes Web)." + }, { + "@language" : "da", + "@value" : "Rodplaceringen eller det primære endpoint for en tjeneste (en web-resolverbar IRI)." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "end-point del servizio" + }, { + "@language" : "en", + "@value" : "service end-point" + }, { + "@language" : "es", + "@value" : "end-point del servicio" + }, { + "@language" : "cs", + "@value" : "přístupový bod služby" + }, { + "@language" : "da", + "@value" : "tjenesteendpoint" + } ], + "range" : "rdfs:Resource", + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Rodplaceringen eller det primære endpoint for en tjeneste (en web-resolverbar IRI)." + }, { + "@language" : "en", + "@value" : "The root location or primary endpoint of the service (a web-resolvable IRI)." + }, { + "@language" : "it", + "@value" : "La locazione principale o l'endpoint primario del servizio (un IRI risolvibile via web)." + }, { + "@language" : "cs", + "@value" : "Kořenové umístění nebo hlavní přístupový bod služby (IRI přístupné přes Web)." + }, { + "@language" : "es", + "@value" : "La posición raíz o end-point principal del servicio (una IRI web)." + } ] + }, { + "@id" : "dcat:hadRole", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "La función de una entidad o agente con respecto a otra entidad o recurso." + }, { + "@language" : "it", + "@value" : "La funzione di un'entità o un agente rispetto ad un'altra entità o risorsa." + }, { + "@language" : "da", + "@value" : "Den funktion en entitet eller aktør har i forhold til en anden ressource." + }, { + "@language" : "cs", + "@value" : "Funkce entity či agenta ve vztahu k jiné entitě či zdroji." + }, { + "@language" : "en", + "@value" : "The function of an entity or agent with respect to another entity or resource." + } ], + "domain" : "_:b8", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "tiene rol" + }, { + "@language" : "cs", + "@value" : "sehraná role" + }, { + "@language" : "en", + "@value" : "hadRole" + }, { + "@language" : "da", + "@value" : "havde rolle" + }, { + "@language" : "it", + "@value" : "haRuolo" + } ], + "range" : "dcat:Role", + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "Den funktion en entitet eller aktør har i forhold til en anden ressource." + }, { + "@language" : "it", + "@value" : "La funzione di un'entità o un agente rispetto ad un'altra entità o risorsa." + }, { + "@language" : "en", + "@value" : "The function of an entity or agent with respect to another entity or resource." + }, { + "@language" : "es", + "@value" : "La función de una entidad o agente con respecto a otra entidad o recurso." + }, { + "@language" : "cs", + "@value" : "Funkce entity či agenta ve vztahu k jiné entitě či zdroji." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Přidáno do DCAT pro doplnění vlastnosti prov:hadRole (jejíž užití je omezeno na role v kontextu aktivity, s definičním oborem prov:Association)." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT for at supplere prov:hadRole (hvis anvendelse er begrænset til roller i forbindelse med en aktivitet med domænet prov:Association)." + }, { + "@language" : "en", + "@value" : "Introduced into DCAT to complement prov:hadRole (whose use is limited to roles in the context of an activity, with the domain of prov:Association." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per completare prov:hadRole (il cui uso è limitato ai ruoli nel contesto di un'attività, con il dominio di prov:Association." + }, { + "@language" : "es", + "@value" : "Agregada en DCAT para complementar prov:hadRole (cuyo uso está limitado a roles en el contexto de una actividad, con dominio prov:Association." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Può essere utilizzata in una relazione qualificata per specificare il ruolo di un'entità rispetto a un'altra entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di entità come ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, o MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "cs", + "@value" : "Může být použito v kvalifikovaném vztahu pro specifikaci role Entity ve vztahu k jiné Entitě. Je doporučeno použít hodnotu z řízeného slovníku rolí entit, jako například ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode, IANA Registry of Link Relations https://www.iana.org/assignments/link-relation, DataCite metadata schema, MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "May be used in a qualified-relation to specify the role of an Entity with respect to another Entity. It is recommended that the value be taken from a controlled vocabulary of entity roles such as: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; DataCite metadata schema; MARC relators https://id.loc.gov/vocabulary/relators." + }, { + "@language" : "en", + "@value" : "May be used in a qualified-attribution to specify the role of an Agent with respect to an Entity. It is recommended that the value be taken from a controlled vocabulary of agent roles, such as http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "cs", + "@value" : "Může být použito v kvalifikovaném přiřazení pro specifikaci role Agenta ve vztahu k Entitě. Je doporučeno hodnotu vybrat z řízeného slovníku rolí agentů, jako například http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "it", + "@value" : "Può essere utilizzato in un'attribuzione qualificata per specificare il ruolo di un agente rispetto a un'entità. Si raccomanda che il valore sia preso da un vocabolario controllato di ruoli di agente, come ad esempio http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Puede usarse en una atribución cualificada para especificar el rol de un Agente con respecto a una Entidad. Se recomienda que el valor sea de un vocabulario controlado de roles de agentes, como por ejemplo http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "da", + "@value" : "Kan vendes ved kvalificerede krediteringer til at angive en aktørs rolle i forhold en entitet. Det anbefales at værdierne styres som et kontrolleret udfaldsrum med aktørroller, såsom http://registry.it.csiro.au/def/isotc211/CI_RoleCode." + }, { + "@language" : "es", + "@value" : "Puede usarse en una atribución cualificada para especificar el rol de una Entidad con respecto a otra Entidad. Se recomienda que su valor se tome de un vocabulario controlado de roles de entidades como por ejemplo: ISO 19115 DS_AssociationTypeCode http://registry.it.csiro.au/def/isotc211/DS_AssociationTypeCode; IANA Registry of Link Relations https://www.iana.org/assignments/link-relation; esquema de metadatos de DataCite; MARC relators https://id.loc.gov/vocabulary/relators." + } ] + }, { + "@id" : "dcat:keyword", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Una parola chiave o un'etichetta per descrivere la risorsa." + }, { + "@language" : "da", + "@value" : "Et nøgleord eller tag til beskrivelse af en ressource." + }, { + "@language" : "el", + "@value" : "Μία λέξη-κλειδί ή μία ετικέτα που περιγράφει το σύνολο δεδομένων." + }, { + "@language" : "fr", + "@value" : "Un mot-clé ou étiquette décrivant une ressource." + }, { + "@language" : "es", + "@value" : "Una palabra clave o etiqueta que describe un recurso." + }, { + "@language" : "cs", + "@value" : "Klíčové slovo nebo značka popisující zdroj." + }, { + "@language" : "en", + "@value" : "A keyword or tag describing a resource." + }, { + "@language" : "ja", + "@value" : "データセットを記述しているキーワードまたはタグ。" + }, { + "@language" : "ar", + "@value" : "كلمة مفتاحيه توصف قائمة البيانات" + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ar", + "@value" : "كلمة مفتاحية " + }, { + "@language" : "fr", + "@value" : "mot-clés " + }, { + "@language" : "el", + "@value" : "λέξη-κλειδί" + }, { + "@language" : "ja", + "@value" : "キーワード/タグ" + }, { + "@language" : "da", + "@value" : "nøgleord" + }, { + "@language" : "es", + "@value" : "palabra clave" + }, { + "@language" : "en", + "@value" : "keyword" + }, { + "@language" : "it", + "@value" : "parola chiave" + }, { + "@language" : "cs", + "@value" : "klíčové slovo" + } ], + "range" : "rdfs:Literal", + "subPropertyOf" : "dct:subject", + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Klíčové slovo nebo značka popisující zdroj." + }, { + "@language" : "ja", + "@value" : "データセットを記述しているキーワードまたはタグ。" + }, { + "@language" : "fr", + "@value" : "Un mot-clé ou étiquette décrivant une ressource." + }, { + "@language" : "en", + "@value" : "A keyword or tag describing a resource." + }, { + "@language" : "es", + "@value" : "Una palabra clave o etiqueta que describe un recurso." + }, { + "@language" : "da", + "@value" : "Et nøgleord eller tag til beskrivelse af en ressource." + }, { + "@language" : "ar", + "@value" : "كلمة مفتاحيه توصف قائمة البيانات" + }, { + "@language" : "el", + "@value" : "Μία λέξη-κλειδί ή μία ετικέτα που περιγράφει το σύνολο δεδομένων." + }, { + "@language" : "it", + "@value" : "Una parola chiave o un'etichetta per descrivere la risorsa." + } ] + }, { + "@id" : "dcat:landingPage", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una página web que puede ser visitada en un explorador Web para tener acceso el catálogo, un conjunto de datos, sus distribuciones y/o información adicional." + }, { + "@language" : "en", + "@value" : "A Web page that can be navigated to in a Web browser to gain access to the catalog, a dataset, its distributions and/or additional information." + }, { + "@language" : "el", + "@value" : "Μία ιστοσελίδα πλοηγίσιμη μέσω ενός φυλλομετρητή (Web browser) που δίνει πρόσβαση στο σύνολο δεδομένων, τις διανομές αυτού ή/και επιπρόσθετες πληροφορίες." + }, { + "@language" : "it", + "@value" : "Una pagina web che può essere navigata per ottenere l'accesso al catalogo, ad un dataset, alle distribuzioni del dataset e/o ad informazioni addizionali." + }, { + "@language" : "ja", + "@value" : "データセット、その配信および(または)追加情報にアクセスするためにウエブ・ブラウザでナビゲートできるウェブページ。" + }, { + "@language" : "ar", + "@value" : "صفحة وب يمكن من خلالها الوصول الى قائمة البيانات أو إلى معلومات إضافية متعلقة بها " + }, { + "@language" : "da", + "@value" : "En webside som der kan navigeres til i en webbrowser for at få adgang til kataloget, et datasæt, dets distributioner og/eller yderligere information." + }, { + "@language" : "cs", + "@value" : "Webová stránka, na kterou lze pro získání přístupu ke katalogu, datové sadě, jejím distribucím a/nebo dalším informacím přistoupit webovým prohlížečem." + }, { + "@language" : "fr", + "@value" : "Une page Web accessible par un navigateur Web donnant accès au catalogue, un jeu de données, ses distributions et/ou des informations additionnelles." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "página de destino" + }, { + "@language" : "en", + "@value" : "landing page" + }, { + "@language" : "cs", + "@value" : "vstupní stránka" + }, { + "@language" : "da", + "@value" : "destinationsside" + }, { + "@language" : "ja", + "@value" : "ランディング・ページ" + }, { + "@language" : "fr", + "@value" : "page d'atterrissage" + }, { + "@language" : "ar", + "@value" : "صفحة وصول" + }, { + "@language" : "it", + "@value" : "pagina di destinazione" + }, { + "@language" : "el", + "@value" : "ιστοσελίδα αρχικής πρόσβασης" + } ], + "range" : "foaf:Document", + "subPropertyOf" : "foaf:page", + "skos:definition" : [ { + "@language" : "it", + "@value" : "Una pagina web che può essere navigata per ottenere l'accesso al catalogo, ad un dataset, alle distribuzioni del dataset e/o ad informazioni addizionali." + }, { + "@language" : "en", + "@value" : "A Web page that can be navigated to in a Web browser to gain access to the catalog, a dataset, its distributions and/or additional information." + }, { + "@language" : "es", + "@value" : "Una página web que puede ser visitada en un explorador Web para tener acceso el catálogo, un conjunto de datos, sus distribuciones y/o información adicional." + }, { + "@language" : "ar", + "@value" : "صفحة وب يمكن من خلالها الوصول الى قائمة البيانات أو إلى معلومات إضافية متعلقة بها " + }, { + "@language" : "da", + "@value" : "En webside som en webbrowser kan navigeres til for at få adgang til kataloget, et datasæt, dets distritbutioner og/eller yderligere information." + }, { + "@language" : "cs", + "@value" : "Webová stránka, na kterou lze pro získání přístupu ke katalogu, datové sadě, jejím distribucím a/nebo dalším informacím přistoupit webovým prohlížečem." + }, { + "@language" : "el", + "@value" : "Μία ιστοσελίδα πλοηγίσιμη μέσω ενός φυλλομετρητή (Web browser) που δίνει πρόσβαση στο σύνολο δεδομένων, τις διανομές αυτού ή/και επιπρόσθετες πληροφορίες." + }, { + "@language" : "fr", + "@value" : "Une page Web accessible par un navigateur Web donnant accès au catalogue, un jeu de données, ses distributions et/ou des informations additionnelles." + }, { + "@language" : "ja", + "@value" : "データセット、その配信および(または)追加情報にアクセスするためにウエブ・ブラウザでナビゲートできるウェブページ。" + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Hvis en eller flere distributioner kun er tilgængelige via en destinationsside (dvs. en URL til direkte download er ikke kendt), så bør destinationssidelinket gentages som adgangsadresse for en distribution." + }, { + "@language" : "es", + "@value" : "Si la distribución es accesible solamente través de una página de aterrizaje (i.e., no se conoce una URL de descarga directa), entonces el enlance a la página de aterrizaje debe ser duplicado como accessURL sobre la distribución." + }, { + "@language" : "ja", + "@value" : "ランディング・ページを通じてしか配信にアクセスできない場合(つまり、直接的なダウンロードURLが不明)には、配信におけるaccessURLとしてランディング・ページのリンクをコピーすべきです(SHOULD)。" + }, { + "@language" : "en", + "@value" : "If the distribution(s) are accessible only through a landing page (i.e. direct download URLs are not known), then the landing page link should be duplicated as accessURL on a distribution." + }, { + "@language" : "el", + "@value" : "Αν η/οι διανομή/ές είναι προσβάσιμη/ες μόνο μέσω μίας ιστοσελίδας αρχικής πρόσβασης (δηλαδή αν δεν υπάρχουν γνωστές διευθύνσεις άμεσης μεταφόρτωσης), τότε ο σύνδεσμος της ιστοσελίδας αρχικής πρόσβασης πρέπει να αναπαραχθεί ως accessURL σε μία διανομή." + }, { + "@language" : "cs", + "@value" : "Pokud je distribuce dostupná pouze přes vstupní stránku, t.j. přímý URL odkaz ke stažení není znám, URL přístupové stránky by mělo být duplikováno ve vlastnosti distribuce accessURL." + }, { + "@language" : "it", + "@value" : "Se la distribuzione è accessibile solo attraverso una pagina di destinazione (cioè, un URL di download diretto non è noto), il link alla pagina di destinazione deve essere duplicato come accessURL sulla distribuzione." + }, { + "@language" : "fr", + "@value" : "Si la distribution est seulement accessible à travers une page d'atterrissage (exple. pas de connaissance d'URLS de téléchargement direct ), alors le lien de la page d'atterrissage doit être dupliqué comme accessURL sur la distribution." + } ] + }, { + "@id" : "dcat:mediaType", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il tipo di media della distribuzione come definito da IANA" + }, { + "@language" : "ja", + "@value" : "このプロパティーは、配信のメディア・タイプがIANAで定義されているときに使用すべきで(SHOULD)、そうでない場合には、dct:formatを様々な値と共に使用できます(MAY)。" + }, { + "@language" : "el", + "@value" : "Η ιδιότητα αυτή ΘΑ ΠΡΕΠΕΙ να χρησιμοποιείται όταν ο τύπος μέσου μίας διανομής είναι ορισμένος στο IANA, αλλιώς η ιδιότητα dct:format ΔΥΝΑΤΑΙ να χρησιμοποιηθεί με διαφορετικές τιμές." + }, { + "@language" : "fr", + "@value" : "Cette propriété doit être utilisée quand c'est définit le type de média de la distribution en IANA, sinon dct:format DOIT être utilisé avec différentes valeurs." + }, { + "@language" : "en", + "@value" : "The media type of the distribution as defined by IANA" + }, { + "@language" : "ar", + "@value" : "يجب استخدام هذه الخاصية إذا كان نوع الملف معرف ضمن IANA" + }, { + "@language" : "da", + "@value" : "Medietypen for distributionen som den er defineret af IANA." + }, { + "@language" : "cs", + "@value" : "Typ média distribuce definovaný v IANA." + }, { + "@language" : "es", + "@value" : "Esta propiedad debe ser usada cuando está definido el tipo de media de la distribución en IANA, de otra manera dct:format puede ser utilizado con diferentes valores" + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "es", + "@value" : "tipo de media" + }, { + "@language" : "en", + "@value" : "media type" + }, { + "@language" : "ar", + "@value" : "نوع الميديا" + }, { + "@language" : "cs", + "@value" : "typ média" + }, { + "@language" : "ja", + "@value" : "メディア・タイプ" + }, { + "@language" : "fr", + "@value" : "type de média" + }, { + "@language" : "el", + "@value" : "τύπος μέσου" + }, { + "@language" : "da", + "@value" : "medietype" + }, { + "@language" : "it", + "@value" : "tipo di media" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Obor hodnot dcat:mediaType byl zúžen v této revizi DCAT." + }, { + "@language" : "it", + "@value" : "Il range di dcat:mediaType è stato ristretto come parte della revisione di DCAT." + }, { + "@language" : "en", + "@value" : "The range of dcat:mediaType has been tightened as part of the revision of DCAT." + } ], + "skos:definition" : [ { + "@language" : "ar", + "@value" : "يجب استخدام هذه الخاصية إذا كان نوع الملف معرف ضمن IANA" + }, { + "@language" : "el", + "@value" : "Η ιδιότητα αυτή ΘΑ ΠΡΕΠΕΙ να χρησιμοποιείται όταν ο τύπος μέσου μίας διανομής είναι ορισμένος στο IANA, αλλιώς η ιδιότητα dct:format ΔΥΝΑΤΑΙ να χρησιμοποιηθεί με διαφορετικές τιμές." + }, { + "@language" : "fr", + "@value" : "Cette propriété doit être utilisée quand c'est définit le type de média de la distribution en IANA, sinon dct:format DOIT être utilisé avec différentes valeurs." + }, { + "@language" : "es", + "@value" : "Esta propiedad debe ser usada cuando está definido el tipo de media de la distribución en IANA, de otra manera dct:format puede ser utilizado con diferentes valores." + }, { + "@language" : "it", + "@value" : "Il tipo di media della distribuzione come definito da IANA." + }, { + "@language" : "en", + "@value" : "The media type of the distribution as defined by IANA." + }, { + "@language" : "ja", + "@value" : "このプロパティーは、配信のメディア・タイプがIANAで定義されているときに使用すべきで(SHOULD)、そうでない場合には、dct:formatを様々な値と共に使用できます(MAY)。" + }, { + "@language" : "cs", + "@value" : "Typ média distribuce definovaný v IANA." + }, { + "@language" : "da", + "@value" : "Medietypen for distributionen som den er defineret af IANA." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, Italian and Czech translation provided, other translations pending. Note some inconsistency on def vs. usage." + }, + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà DEVE essere usata quando il tipo di media della distribuzione è definito nel registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, altrimenti dct:format PUO 'essere usato con differenti valori." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost BY MĚLA být použita, je-li typ média distribuce definován v registru IANA https://www.iana.org/assignments/media-types/. V ostatních případech MŮŽE být použita vlastnost dct:format s jinými hodnotami." + }, { + "@language" : "es", + "@value" : "Esta propiedad DEBERÍA usarse cuando el 'media type' de la distribución está definido en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, de lo contrario, dct:format PUEDE usarse con distintos valores." + }, { + "@language" : "en", + "@value" : "This property SHOULD be used when the media type of the distribution is defined in the IANA media types registry https://www.iana.org/assignments/media-types/, otherwise dct:format MAY be used with different values." + }, { + "@language" : "da", + "@value" : "Denne egenskab BØR anvendes hvis distributionens medietype optræder i 'IANA media types registry' https://www.iana.org/assignments/media-types/, ellers KAN egenskaben dct:format anvendes med et andet udfaldsrum." + } ] + }, { + "@id" : "dcat:packageFormat", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "The package format of the distribution in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together." + }, { + "@language" : "cs", + "@value" : "Balíčkový formát souboru, ve kterém je jeden či více souborů seskupeno dohromady, např. aby bylo možné stáhnout sadu souvisejících souborů naráz." + }, { + "@language" : "it", + "@value" : "Il formato di impacchettamento della distribuzione in cui uno o più file di dati sono raggruppati insieme, ad es. per abilitare un insieme di file correlati da scaricare insieme." + }, { + "@language" : "es", + "@value" : "El formato del archivo en que se agrupan uno o más archivos de datos, e.g. para permitir que un conjunto de archivos relacionados se bajen juntos." + }, { + "@language" : "da", + "@value" : "Format til pakning af data med henblik på distribution af en eller flere relaterede datafiler der samles til en enhed med henblik på samlet distribution. " + } ], + "domain" : "dcat:Distribution", + "isDefinedBy" : "https://www.w3.org/TR/vocab-dcat-2/", + "rdfs:label" : [ { + "@language" : "cs", + "@value" : "formát balíčku" + }, { + "@language" : "en", + "@value" : "packaging format" + }, { + "@language" : "it", + "@value" : "formato di impacchettamento" + }, { + "@language" : "da", + "@value" : "pakkeformat" + }, { + "@language" : "es", + "@value" : "formato de empaquetado" + } ], + "range" : "dct:MediaType", + "subPropertyOf" : "dct:format", + "skos:changeNote" : [ { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "it", + "@value" : "Il formato di impacchettamento della distribuzione in cui uno o più file di dati sono raggruppati insieme, ad es. per abilitare un insieme di file correlati da scaricare insieme." + }, { + "@language" : "en", + "@value" : "The package format of the distribution in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together." + }, { + "@language" : "es", + "@value" : "El formato del archivo en que se agrupan uno o más archivos de datos, e.g. para permitir que un conjunto de archivos relacionados se bajen juntos." + }, { + "@language" : "cs", + "@value" : "Balíčkový formát souboru, ve kterém je jeden či více souborů seskupeno dohromady, např. aby bylo možné stáhnout sadu souvisejících souborů naráz." + } ], + "skos:scopeNote" : [ { + "@language" : "it", + "@value" : "Questa proprietà deve essere utilizzata quando i file nella distribuzione sono impacchettati, ad esempio in un file TAR, Frictionless Data Package o Bagit. Il formato DOVREBBE essere espresso utilizzando un tipo di supporto come definito dal registro dei tipi di media IANA https://www.iana.org/assignments/media-types/, se disponibili." + }, { + "@language" : "es", + "@value" : "Esta propiedad se debe usar cuando los archivos de la distribución están empaquetados, por ejemplo en un archivo TAR, Frictionless Data Package o Bagit. El formato DEBERÍA expresarse usando un 'media type', tales como los definidos en el registro IANA de 'media types' https://www.iana.org/assignments/media-types/, si está disponibles." + }, { + "@language" : "da", + "@value" : "Denne egenskab kan anvendes hvis filerne i en distribution er pakket, fx i en TAR-fil, en Frictionless Data Package eller en Bagit-fil. Formatet BØR udtrykkes ved en medietype som defineret i 'IANA media types registry', hvis der optræder en relevant medietype dér: https://www.iana.org/assignments/media-types/." + }, { + "@language" : "en", + "@value" : "This property to be used when the files in the distribution are packaged, e.g. in a TAR file, a Frictionless Data Package or a Bagit file. The format SHOULD be expressed using a media type as defined by IANA media types registry https://www.iana.org/assignments/media-types/, if available." + }, { + "@language" : "cs", + "@value" : "Tato vlastnost se použije, když jsou soubory v distribuci zabaleny, např. v souboru TAR, v balíčku Frictionless Data Package nebo v souboru Bagit. Formát BY MĚL být vyjádřen pomocí typu média definovaného v registru IANA https://www.iana.org/assignments/media-types/, pokud existuje." + } ] + }, { + "@id" : "dcat:qualifiedRelation", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Odkaz na popis vztahu s jiným zdrojem." + }, { + "@language" : "it", + "@value" : "Link a una descrizione di una relazione con un'altra risorsa." + }, { + "@language" : "en", + "@value" : "Link to a description of a relationship with another resource." + }, { + "@language" : "es", + "@value" : "Enlace a una descripción de la relación con otro recurso." + }, { + "@language" : "da", + "@value" : "Reference til en beskrivelse af en relation til en anden ressource." + } ], + "domain" : "dcat:Resource", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "qualified relation" + }, { + "@language" : "it", + "@value" : "relazione qualificata" + }, { + "@language" : "da", + "@value" : "Kvalificeret relation" + }, { + "@language" : "es", + "@value" : "relación calificada" + }, { + "@language" : "cs", + "@value" : "kvalifikovaný vztah" + } ], + "range" : "dcat:Relationship", + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Propiedad nueva añadida en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Odkaz na popis vztahu s jiným zdrojem." + }, { + "@language" : "da", + "@value" : "Reference til en beskrivelse af en relation til en anden ressource." + }, { + "@language" : "it", + "@value" : "Link a una descrizione di una relazione con un'altra risorsa." + }, { + "@language" : "es", + "@value" : "Enlace a una descripción de la relación con otro recurso." + }, { + "@language" : "en", + "@value" : "Link to a description of a relationship with another resource." + } ], + "skos:editorialNote" : [ { + "@language" : "en", + "@value" : "Introduced into DCAT to complement the other PROV qualified relations. " + }, { + "@language" : "cs", + "@value" : "Přidáno do DCAT k doplnění jiných kvalifikovaných vztahů ze slovníku PROV." + }, { + "@language" : "es", + "@value" : "Se incluyó en DCAT para complementar las relaciones calificadas disponibles en PROV." + }, { + "@language" : "it", + "@value" : "Introdotta in DCAT per integrare le altre relazioni qualificate di PROV." + }, { + "@language" : "da", + "@value" : "Introduceret i DCAT med henblik på at supplere de øvrige kvalificerede relationer fra PROV. " + } ], + "skos:scopeNote" : [ { + "@language" : "en", + "@value" : "Used to link to another resource where the nature of the relationship is known but does not match one of the standard Dublin Core properties (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "da", + "@value" : "Anvendes til at referere til en anden ressource hvor relationens betydning er kendt men ikke matcher en af de standardiserede egenskaber fra Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) eller PROV-O-egenskaber (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "it", + "@value" : "Viene utilizzato per associarsi a un'altra risorsa nei casi per i quali la natura della relazione è nota ma non è alcuna delle proprietà fornite dallo standard Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat , dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:require, dct:isRequiredBy) o dalle proprietà fornite da PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom , prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "cs", + "@value" : "Použito pro odkazování na jiný zdroj, kde druh vztahu je znám, ale neodpovídá standardním vlastnostem ze slovníku Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) či slovníku PROV-O (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + }, { + "@language" : "es", + "@value" : "Se usa para asociar con otro recurso para el cuál la naturaleza de la relación es conocida pero no es ninguna de las propiedades que provee el estándar Dublin Core (dct:hasPart, dct:isPartOf, dct:conformsTo, dct:isFormatOf, dct:hasFormat, dct:isVersionOf, dct:hasVersion, dct:replaces, dct:isReplacedBy, dct:references, dct:isReferencedBy, dct:requires, dct:isRequiredBy) or PROV-O properties (prov:wasDerivedFrom, prov:wasInfluencedBy, prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource, prov:alternateOf, prov:specializationOf)." + } ] + }, { + "@id" : "dcat:record", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rdfs:comment" : [ { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με τις καταγραφές του." + }, { + "@language" : "it", + "@value" : "Un record che descrive la registrazione di un singolo set di dati o di un servizio dati che fa parte del catalogo." + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à ses registres." + }, { + "@language" : "cs", + "@value" : "Propojuje katalog a jeho záznamy." + }, { + "@language" : "es", + "@value" : "Describe la registración de un conjunto de datos o un servicio de datos en el catálogo." + }, { + "@language" : "cs", + "@value" : "Záznam popisující registraci jedné datové sady či datové služby jakožto součásti katalogu." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بسجل ضمنه" + }, { + "@language" : "da", + "@value" : "En post der beskriver registreringen af et enkelt datasæt eller en datatjeneste som er opført i kataloget." + }, { + "@language" : "en", + "@value" : "A record describing the registration of a single dataset or data service that is part of the catalog." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるカタログ・レコード。" + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "ja", + "@value" : "カタログ・レコード" + }, { + "@language" : "ar", + "@value" : "سجل" + }, { + "@language" : "fr", + "@value" : "registre" + }, { + "@language" : "cs", + "@value" : "záznam" + }, { + "@language" : "it", + "@value" : "record" + }, { + "@language" : "en", + "@value" : "record" + }, { + "@language" : "es", + "@value" : "registro" + }, { + "@language" : "el", + "@value" : "καταγραφή" + }, { + "@language" : "da", + "@value" : "post" + } ], + "range" : "dcat:CatalogRecord", + "skos:altLabel" : { + "@language" : "da", + "@value" : "har post" + }, + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Propojuje katalog a jeho záznamy." + }, { + "@language" : "fr", + "@value" : "Relie un catalogue à ses registres." + }, { + "@language" : "cs", + "@value" : "Záznam popisující registraci jedné datové sady či datové služby jakožto součásti katalogu." + }, { + "@language" : "da", + "@value" : "En post der beskriver registreringen af et enkelt datasæt eller en datatjeneste som er opført i kataloget." + }, { + "@language" : "it", + "@value" : "Un record che descrive la registrazione di un singolo set di dati o di un servizio dati che fa parte del catalogo." + }, { + "@language" : "el", + "@value" : "Συνδέει έναν κατάλογο με τις καταγραφές του." + }, { + "@language" : "ja", + "@value" : "カタログの一部であるカタログ・レコード。" + }, { + "@language" : "es", + "@value" : "Describe la registración de un conjunto de datos o un servicio de datos en el catálogo." + }, { + "@language" : "ar", + "@value" : "تربط الفهرس بسجل ضمنه" + }, { + "@language" : "en", + "@value" : "A record describing the registration of a single dataset or data service that is part of the catalog." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English, Italian, Spanish and Czech Definitions modified by DCAT revision team, other translations pending." + } + }, { + "@id" : "dcat:servesDataset", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "es", + "@value" : "Una colección de datos que este Servicio de Datos puede distribuir." + }, { + "@language" : "da", + "@value" : "En samling af data som denne datatjeneste kan distribuere." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che questo DataService può distribuire." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, kterou je tato Datová služba schopna poskytnout." + }, { + "@language" : "en", + "@value" : "A collection of data that this DataService can distribute." + } ], + "domain" : "dcat:DataService", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "datatjeneste for datasæt" + }, { + "@language" : "it", + "@value" : "serve set di dati" + }, { + "@language" : "cs", + "@value" : "poskytuje datovou sadu" + }, { + "@language" : "en", + "@value" : "serves dataset" + }, { + "@language" : "es", + "@value" : "provee conjunto de datos" + } ], + "range" : "dcat:Dataset", + "skos:altLabel" : [ { + "@language" : "da", + "@value" : "udstiller" + }, { + "@language" : "da", + "@value" : "ekspederer" + }, { + "@language" : "da", + "@value" : "distribuerer" + } ], + "skos:changeNote" : [ { + "@language" : "en", + "@value" : "New property in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "da", + "@value" : "En samling af data som denne datatjeneste kan distribuere." + }, { + "@language" : "it", + "@value" : "Una raccolta di dati che questo DataService può distribuire." + }, { + "@language" : "en", + "@value" : "A collection of data that this DataService can distribute." + }, { + "@language" : "es", + "@value" : "Una colección de datos que este Servicio de Datos puede distribuir." + }, { + "@language" : "cs", + "@value" : "Kolekce dat, kterou je tato Datová služba schopna poskytnout." + } ] + }, { + "@id" : "dcat:service", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : [ { + "@language" : "cs", + "@value" : "Umístění či přístupový bod registrovaný v katalogu." + }, { + "@language" : "en", + "@value" : "A site or endpoint that is listed in the catalog." + }, { + "@language" : "it", + "@value" : "Un sito o endpoint elencato nel catalogo." + }, { + "@language" : "da", + "@value" : "Et websted eller et endpoint som er opført i kataloget." + }, { + "@language" : "es", + "@value" : "Un sitio o 'endpoint' que está listado en el catálogo." + } ], + "domain" : "dcat:Catalog", + "rdfs:label" : [ { + "@language" : "en", + "@value" : "service" + }, { + "@language" : "da", + "@value" : "datatjeneste" + }, { + "@language" : "es", + "@value" : "servicio" + }, { + "@language" : "it", + "@value" : "servizio" + }, { + "@language" : "cs", + "@value" : "služba" + } ], + "range" : "dcat:DataService", + "subPropertyOf" : [ "dct:hasPart", "rdfs:member" ], + "skos:altLabel" : { + "@language" : "da", + "@value" : "har datatjeneste" + }, + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "Un sitio o 'endpoint' que está listado en el catálogo." + }, { + "@language" : "cs", + "@value" : "Umístění či přístupový bod registrovaný v katalogu." + }, { + "@language" : "da", + "@value" : "Et websted eller et endpoint som er opført i kataloget." + }, { + "@language" : "en", + "@value" : "A site or endpoint that is listed in the catalog." + }, { + "@language" : "it", + "@value" : "Un sito o endpoint elencato nel catalogo." + } ] + }, { + "@id" : "dcat:spatialResolutionInMeters", + "@type" : "owl:DatatypeProperty", + "rdfs:comment" : [ { + "@language" : "en-gb", + "@value" : "minimum spatial separation resolvable in a dataset, measured in metres." + }, { + "@language" : "en-us", + "@value" : "minimum spatial separation resolvable in a dataset, measured in meters." + }, { + "@language" : "es", + "@value" : "mínima separacíon espacial disponible en un conjunto de datos, medida en metros." + }, { + "@language" : "it", + "@value" : "separazione spaziale minima risolvibile in un set di dati, misurata in metri." + }, { + "@language" : "da", + "@value" : "mindste geografiske afstand som kan erkendes i et datasæt, målt i meter." + }, { + "@language" : "cs", + "@value" : "minimální prostorový rozestup rozeznatelný v datové sadě, měřeno v metrech." + } ], + "rdfs:label" : [ { + "@language" : "es", + "@value" : "resolución espacial (metros)" + }, { + "@language" : "en-gb", + "@value" : "spatial resolution (metres)" + }, { + "@language" : "en-us", + "@value" : "spatial resolution (meters)" + }, { + "@language" : "cs", + "@value" : "prostorové rozlišení (metry)" + }, { + "@language" : "it", + "@value" : "risoluzione spaziale (metros)" + }, { + "@language" : "da", + "@value" : "geografisk opløsning (meter)" + } ], + "range" : "xsd:decimal", + "skos:changeNote" : [ { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny genskab tilføjet i DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "en-us", + "@value" : "minimum spatial separation resolvable in a dataset, measured in meters." + }, { + "@language" : "it", + "@value" : "separazione spaziale minima risolvibile in un set di dati, misurata in metri." + }, { + "@language" : "cs", + "@value" : "minimální prostorový rozestup rozeznatelný v datové sadě, měřeno v metrech." + }, { + "@language" : "en-gb", + "@value" : "minimum spatial separation resolvable in a dataset, measured in metres." + }, { + "@language" : "es", + "@value" : "mínima separacíon espacial disponible en un conjunto de datos, medida en metros." + }, { + "@language" : "da", + "@value" : "mindste geografiske afstand som kan resolveres i et datasæt, målt i meter." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Může se vyskytnout v popisu Datové sady nebo Distribuce, takže nebyl specifikován definiční obor." + }, { + "@language" : "en", + "@value" : "Might appear in the description of a Dataset or a Distribution, so no domain is specified." + }, { + "@language" : "da", + "@value" : "Kan optræde i forbindelse med beskrivelse af datasættet eller datasætditributionen, så der er ikke angivet et domæne for egenskaben." + } ], + "skos:scopeNote" : [ { + "@language" : "cs", + "@value" : "Pokud je datová sada obraz či mřížka, měla by tato vlastnost odpovídat rozestupu položek. Pro ostatní druhy prostorových datových sad bude tato vlastnost obvykle indikovat nejmenší vzdálenost mezi položkami této datové sady." + }, { + "@language" : "da", + "@value" : "Hvis datasættet udgøres af et billede eller et grid, så bør dette svare til afstanden mellem elementerne. For andre typer af spatiale datasæt, vil denne egenskab typisk indikere den mindste afstand mellem elementerne i datasættet." + }, { + "@language" : "cs", + "@value" : "Různá prostorová rozlišení mohou být poskytována jako různé distribuce datové sady." + }, { + "@language" : "es", + "@value" : "Distintas distribuciones de un conjunto de datos pueden tener resoluciones espaciales diferentes." + }, { + "@language" : "da", + "@value" : "Alternative geografiske opløsninger kan leveres som forskellige datasætdistributioner." + }, { + "@language" : "it", + "@value" : "Se il set di dati è un'immagine o una griglia, questo dovrebbe corrispondere alla spaziatura degli elementi. Per altri tipi di set di dati spaziali, questa proprietà di solito indica la distanza minima tra gli elementi nel set di dati." + }, { + "@language" : "en", + "@value" : "Alternative spatial resolutions might be provided as different dataset distributions." + }, { + "@language" : "it", + "@value" : "Risoluzioni spaziali alternative possono essere fornite come diverse distribuzioni di set di dati." + }, { + "@language" : "es", + "@value" : "Si el conjunto de datos es una imágen o grilla, esta propiedad corresponde al espaciado de los elementos. Para otro tipo de conjunto de datos espaciales, esta propieda usualmente indica la menor distancia entre los elementos de dichos datos." + }, { + "@language" : "en", + "@value" : "If the dataset is an image or grid this should correspond to the spacing of items. For other kinds of spatial dataset, this property will usually indicate the smallest distance between items in the dataset." + } ] + }, { + "@id" : "dcat:startDate", + "@type" : [ "rdf:Property", "owl:DatatypeProperty" ], + "domain" : "dct:PeriodOfTime", + "rdfs:label" : [ { + "@language" : "it", + "@value" : "data di inizio" + }, { + "@language" : "cs", + "@value" : "datum začátku" + }, { + "@language" : "en", + "@value" : "start date" + }, { + "@language" : "da", + "@value" : "startdato" + } ], + "range" : "rdfs:Literal", + "skos:altLabel" : { + "@language" : "da", + "@value" : "starttidspunkt" + }, + "skos:changeNote" : [ { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "da", + "@value" : "Ny egenskab tilføjet i DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "es", + "@value" : "Nueva propiedad agregada en DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "es", + "@value" : "El comienzo del período" + }, { + "@language" : "cs", + "@value" : "Začátek doby trvání" + }, { + "@language" : "en", + "@value" : "The start of the period" + }, { + "@language" : "da", + "@value" : "Start på perioden." + }, { + "@language" : "it", + "@value" : "L'inizio del periodo" + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Rækkeviden for denne egenskab er bevidst generisk defineret med det formål at tillade forskellige niveauer af tidslig præcision ifm. angivelse af startdatoen for en periode. Den kan eksempelvis udtrykkes som en dato (xsd:date), en dato og et tidspunkt (xsd:dateTime), eller et årstal (xsd:gYear)." + }, { + "@language" : "en", + "@value" : "The range of this property is intentionally generic, with the purpose of allowing different level of temporal precision for specifying the start of a period. E.g., it can be expressed with a date (xsd:date), a date and time (xsd:dateTime), or a year (xsd:gYear)." + }, { + "@language" : "cs", + "@value" : "Obor hodnot této vlastnosti je úmyslně obecný, aby umožnil různé úrovně časového rozlišení pro specifikaci začátku doby trvání. Ten může být kupříkladu vyjádřen datumem (xsd:date), datumem a časem (xsd:dateTime) či rokem (xsd:gYear)." + }, { + "@language" : "it", + "@value" : "Il range di questa proprietà è volutamente generico, con lo scopo di consentire diversi livelli di precisione temporale per specificare l'inizio di un periodo. Ad esempio, può essere espresso con una data (xsd:date), una data e un'ora (xsd:dateTime), o un anno (xsd:gYear)." + }, { + "@language" : "es", + "@value" : "El rango de esta propiedad es intencionalmente genérico con el propósito de permitir distintos niveles de precisión temporal para especificar el comienzo de un período. Por ejemplo, puede expresarse como una fecha (xsd:date), una fecha y un tiempo (xsd:dateTime), o un año (xsd:gYear)." + } ] + }, { + "@id" : "dcat:temporalResolution", + "@type" : "owl:DatatypeProperty", + "rdfs:comment" : [ { + "@language" : "en", + "@value" : "minimum time period resolvable in a dataset." + }, { + "@language" : "cs", + "@value" : "minimální doba trvání rozlišitelná v datové sadě." + }, { + "@language" : "es", + "@value" : "período de tiempo mínimo en el conjunto de datos." + }, { + "@language" : "da", + "@value" : "mindste tidsperiode der kan resolveres i datasættet." + }, { + "@language" : "it", + "@value" : "periodo di tempo minimo risolvibile in un set di dati." + } ], + "rdfs:label" : [ { + "@language" : "es", + "@value" : "resolución temporal" + }, { + "@language" : "da", + "@value" : "tidslig opløsning" + }, { + "@language" : "en", + "@value" : "temporal resolution" + }, { + "@language" : "cs", + "@value" : "časové rozlišení" + }, { + "@language" : "it", + "@value" : "risoluzione temporale" + } ], + "range" : "xsd:duration", + "skos:changeNote" : [ { + "@language" : "es", + "@value" : "Nueva propiedad añadida en DCAT 2.0." + }, { + "@language" : "en", + "@value" : "New property added in DCAT 2.0." + }, { + "@language" : "it", + "@value" : "Nuova proprietà aggiunta in DCAT 2.0." + }, { + "@language" : "cs", + "@value" : "Nová vlastnost přidaná ve verzi DCAT 2.0." + } ], + "skos:definition" : [ { + "@language" : "cs", + "@value" : "minimální doba trvání rozlišitelná v datové sadě." + }, { + "@language" : "es", + "@value" : "período de tiempo mínimo en el conjunto de datos." + }, { + "@language" : "en", + "@value" : "minimum time period resolvable in a dataset." + }, { + "@language" : "it", + "@value" : "periodo di tempo minimo risolvibile in un set di dati." + }, { + "@language" : "da", + "@value" : "mindste tidsperiode der kan resolveres i datasættet." + } ], + "skos:editorialNote" : [ { + "@language" : "cs", + "@value" : "Může se vyskytnout v popisu Datové sady nebo Distribuce, takže nebyl specifikován definiční obor." + }, { + "@language" : "en", + "@value" : "Might appear in the description of a Dataset or a Distribution, so no domain is specified." + }, { + "@language" : "da", + "@value" : "Kan optræde i forbindelse med beskrivelse af datasættet eller datasætditributionen, så der er ikke angivet et domæne for egenskaben." + } ], + "skos:scopeNote" : [ { + "@language" : "en", + "@value" : "Alternative temporal resolutions might be provided as different dataset distributions." + }, { + "@language" : "cs", + "@value" : "Různá časová rozlišení mohou být poskytována jako různé distribuce datové sady." + }, { + "@language" : "da", + "@value" : "Alternative tidslige opløsninger kan leveres som forskellige datasætdistributioner." + }, { + "@language" : "es", + "@value" : "Si el conjunto de datos es una serie temporal, debe corresponder al espaciado de los elementos de la serie. Para otro tipo de conjuntos de datos, esta propiedad indicará usualmente la menor diferencia de tiempo entre elementos en el dataset." + }, { + "@language" : "cs", + "@value" : "Pokud je datová sada časovou řadou, měla by tato vlastnost odpovídat rozestupu položek v řadě. Pro ostatní druhy datových sad bude tato vlastnost obvykle indikovat nejmenší časovou vzdálenost mezi položkami této datové sady." + }, { + "@language" : "es", + "@value" : "Distintas distribuciones del conjunto de datos pueden tener resoluciones temporales diferentes." + }, { + "@language" : "en", + "@value" : "If the dataset is a time-series this should correspond to the spacing of items in the series. For other kinds of dataset, this property will usually indicate the smallest time difference between items in the dataset." + }, { + "@language" : "it", + "@value" : "Se il set di dati è una serie temporale, questo dovrebbe corrispondere alla spaziatura degli elementi della serie. Per altri tipi di set di dati, questa proprietà di solito indica la più piccola differenza di tempo tra gli elementi nel set di dati." + }, { + "@language" : "da", + "@value" : "Hvis datasættet er en tidsserie, så bør denne egenskab svare til afstanden mellem elementerne i tidsserien. For andre typer af datasæt indikerer denne egenskab den mindste tidsforskel mellem elementer i datasættet." + }, { + "@language" : "it", + "@value" : "Risoluzioni temporali alternative potrebbero essere fornite come diverse distribuzioni di set di dati." + } ] + }, { + "@id" : "dcat:theme", + "@type" : [ "rdf:Property", "owl:ObjectProperty" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "La categoria principale della risorsa. Una risorsa può avere più temi." + }, { + "@language" : "cs", + "@value" : "Hlavní téma zdroje. Zdroj může mít více témat." + }, { + "@language" : "es", + "@value" : "La categoría principal del recurso. Un recurso puede tener varios temas." + }, { + "@language" : "en", + "@value" : "A main category of the resource. A resource can have multiple themes." + }, { + "@language" : "ar", + "@value" : "التصنيف الرئيسي لقائمة البيانات. قائمة البيانات يمكن أن تملك أكثر من تصنيف رئيسي واحد." + }, { + "@language" : "da", + "@value" : "Et centralt emne for ressourcen. En ressource kan have flere centrale emner." + }, { + "@language" : "fr", + "@value" : "La catégorie principale de la ressource. Une ressource peut avoir plusieurs thèmes." + }, { + "@language" : "ja", + "@value" : "データセットの主要カテゴリー。データセットは複数のテーマを持つことができます。" + }, { + "@language" : "el", + "@value" : "Η κύρια κατηγορία του συνόλου δεδομένων. Ένα σύνολο δεδομένων δύναται να έχει πολλαπλά θέματα." + } ], + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "da", + "@value" : "emne" + }, { + "@language" : "el", + "@value" : "Θέμα" + }, { + "@language" : "en", + "@value" : "theme" + }, { + "@language" : "es", + "@value" : "tema" + }, { + "@language" : "it", + "@value" : "tema" + }, { + "@language" : "ja", + "@value" : "テーマ/カテゴリー" + }, { + "@language" : "cs", + "@value" : "téma" + }, { + "@language" : "ar", + "@value" : "التصنيف" + }, { + "@language" : "fr", + "@value" : "thème" + } ], + "range" : "skos:Concept", + "subPropertyOf" : "dct:subject", + "skos:altLabel" : { + "@language" : "da", + "@value" : "tema" + }, + "skos:definition" : [ { + "@language" : "cs", + "@value" : "Hlavní téma zdroje. Zdroj může mít více témat." + }, { + "@language" : "fr", + "@value" : "La catégorie principale de la ressource. Une ressource peut avoir plusieurs thèmes." + }, { + "@language" : "es", + "@value" : "La categoría principal del recurso. Un recurso puede tener varios temas." + }, { + "@language" : "el", + "@value" : "Η κύρια κατηγορία του συνόλου δεδομένων. Ένα σύνολο δεδομένων δύναται να έχει πολλαπλά θέματα." + }, { + "@language" : "it", + "@value" : "La categoria principale della risorsa. Una risorsa può avere più temi." + }, { + "@language" : "ja", + "@value" : "データセットの主要カテゴリー。データセットは複数のテーマを持つことができます。" + }, { + "@language" : "en", + "@value" : "A main category of the resource. A resource can have multiple themes." + }, { + "@language" : "da", + "@value" : "Et centralt emne for ressourcen. En ressource kan have flere centrale emner." + }, { + "@language" : "ar", + "@value" : "التصنيف الرئيسي لقائمة البيانات. قائمة البيانات يمكن أن تملك أكثر من تصنيف رئيسي واحد." + } ], + "skos:editorialNote" : { + "@language" : "en", + "@value" : "Status: English Definition text modified by DCAT revision team, all except for Italian and Czech translations are pending." + }, + "skos:scopeNote" : [ { + "@language" : "es", + "@value" : "El conjunto de skos:Concepts utilizados para categorizar los recursos están organizados en un skos:ConceptScheme que describe todas las categorías y sus relaciones en el catálogo." + }, { + "@language" : "ja", + "@value" : "データセットを分類するために用いられるskos:Conceptの集合は、カタログのすべてのカテゴリーとそれらの関係を記述しているskos:ConceptSchemeで組織化されます。" + }, { + "@language" : "cs", + "@value" : "Sada instancí třídy skos:Concept použitá pro kategorizaci zdrojů je organizována do schématu konceptů skos:ConceptScheme, které popisuje všechny kategorie v katalogu a jejich vztahy." + }, { + "@language" : "it", + "@value" : "Il set di concetti skos usati per categorizzare le risorse sono organizzati in skos:ConceptScheme che descrive tutte le categorie e le loro relazioni nel catalogo." + }, { + "@language" : "da", + "@value" : "Samlingen af begreber (skos:Concept) der anvendes til at emneinddele ressourcer organiseres i et begrebssystem (skos:ConceptScheme) som beskriver alle emnerne og deres relationer i kataloget." + }, { + "@language" : "fr", + "@value" : "Un ensemble de skos:Concepts utilisés pour catégoriser les ressources sont organisés en un skos:ConceptScheme décrivant toutes les catégories et ses relations dans le catalogue." + }, { + "@language" : "en", + "@value" : "The set of skos:Concepts used to categorize the resources are organized in a skos:ConceptScheme describing all the categories and their relations in the catalog." + }, { + "@language" : "el", + "@value" : "Το σετ των skos:Concepts που χρησιμοποιείται για να κατηγοριοποιήσει τα σύνολα δεδομένων είναι οργανωμένο εντός ενός skos:ConceptScheme που περιγράφει όλες τις κατηγορίες και τις σχέσεις αυτών στον κατάλογο." + } ] + }, { + "@id" : "dcat:themeTaxonomy", + "@type" : [ "owl:ObjectProperty", "rdf:Property" ], + "rangeIncludes" : [ "skos:ConceptScheme", "owl:Ontology", "skos:Collection" ], + "rdfs:comment" : [ { + "@language" : "it", + "@value" : "Il sistema di organizzazione della conoscenza (KOS) usato per classificare i dataset del catalogo." + }, { + "@language" : "en", + "@value" : "The knowledge organization system (KOS) used to classify catalog's datasets." + }, { + "@language" : "fr", + "@value" : "Le systhème d'ogranisation de connaissances utilisé pour classifier les jeux de données du catalogue." + }, { + "@language" : "es", + "@value" : "El sistema de organización del conocimiento utilizado para clasificar conjuntos de datos de catálogos." + }, { + "@language" : "da", + "@value" : "Vidensorganiseringssystem (KOS) som anvendes til at klassificere datasæt i kataloget." + }, { + "@language" : "cs", + "@value" : "Systém organizace znalostí (KOS) použitý pro klasifikaci datových sad v katalogu." + }, { + "@language" : "ja", + "@value" : "カタログのデータセットを分類するために用いられる知識組織化体系(KOS;knowledge organization system)。" + }, { + "@language" : "ar", + "@value" : "لائحة التصنيفات المستخدمه لتصنيف قوائم البيانات ضمن الفهرس" + }, { + "@language" : "el", + "@value" : "Το σύστημα οργάνωσης γνώσης που χρησιμοποιείται για την κατηγοριοποίηση των συνόλων δεδομένων του καταλόγου." + } ], + "domain" : "dcat:Catalog", + "isDefinedBy" : "http://www.w3.org/TR/vocab-dcat/", + "rdfs:label" : [ { + "@language" : "fr", + "@value" : "taxonomie de thèmes" + }, { + "@language" : "it", + "@value" : "tassonomia dei temi" + }, { + "@language" : "ja", + "@value" : "テーマ" + }, { + "@language" : "en", + "@value" : "theme taxonomy" + }, { + "@language" : "ar", + "@value" : "قائمة التصنيفات" + }, { + "@language" : "el", + "@value" : "Ταξινομία θεματικών κατηγοριών." + }, { + "@language" : "da", + "@value" : "emnetaksonomi" + }, { + "@language" : "cs", + "@value" : "taxonomie témat" + }, { + "@language" : "es", + "@value" : "taxonomía de temas" + } ], + "range" : "rdfs:Resource", + "skos:altLabel" : { + "@language" : "da", + "@value" : "temataksonomi" + }, + "skos:definition" : [ { + "@language" : "da", + "@value" : "Vidensorganiseringssystem (KOS) som anvendes til at klassificere datasæt i kataloget." + }, { + "@language" : "ar", + "@value" : "لائحة التصنيفات المستخدمه لتصنيف قوائم البيانات ضمن الفهرس" + }, { + "@language" : "es", + "@value" : "El sistema de organización del conocimiento utilizado para clasificar conjuntos de datos de catálogos." + }, { + "@language" : "cs", + "@value" : "Systém organizace znalostí (KOS) použitý pro klasifikaci datových sad v katalogu." + }, { + "@language" : "ja", + "@value" : "カタログのデータセットを分類するために用いられる知識組織化体系(KOS;knowledge organization system)。" + }, { + "@language" : "en", + "@value" : "The knowledge organization system (KOS) used to classify catalog's datasets." + }, { + "@language" : "it", + "@value" : "Il sistema di organizzazione della conoscenza (KOS) usato per classificare i dataset del catalogo." + }, { + "@language" : "el", + "@value" : "Το σύστημα οργάνωσης γνώσης που χρησιμοποιείται για την κατηγοριοποίηση των συνόλων δεδομένων του καταλόγου." + }, { + "@language" : "fr", + "@value" : "Le systhème d'ogranisation de connaissances utilisé pour classifier les jeux de données du catalogue." + } ], + "skos:scopeNote" : [ { + "@language" : "da", + "@value" : "Det anbefales at taksonomien organiseres i et skos:ConceptScheme, skos:Collection, owl:Ontology eller lignende, som giver mulighed for at ethvert medlem af taksonomien kan forsynes med en IRI og udgives som linked-data." + }, { + "@language" : "en", + "@value" : "It is recommended that the taxonomy is organized in a skos:ConceptScheme, skos:Collection, owl:Ontology or similar, which allows each member to be denoted by an IRI and published as linked-data." + }, { + "@language" : "cs", + "@value" : "Je doporučeno, aby byla taxonomie vyjádřena jako skos:ConceptScheme, skos:Collection, owl:Ontology nebo podobné, aby mohla být každá položka identifikována pomocí IRI a publikována jako propojená data." + }, { + "@language" : "es", + "@value" : "Se recomienda que la taxonomía se organice como un skos:ConceptScheme, skos:Collection, owl:Ontology o similar, los cuáles permiten que cada miembro se denote con una IRI y se publique como datos enlazados." + }, { + "@language" : "it", + "@value" : "Si raccomanda che la tassonomia sia organizzata in uno skos:ConceptScheme, skos:Collection, owl:Ontology o simili, che permette ad ogni membro di essere indicato da un IRI e pubblicato come linked-data." + } ] + }, { + "@id" : "foaf:homepage", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : "This axiom needed so that Protege loads DCAT2 without errors." + }, { + "@id" : "foaf:primaryTopic", + "@type" : "owl:ObjectProperty", + "rdfs:comment" : "This axiom needed so that Protege loads DCAT2 without errors." + } ], + "@context" : { + "domain" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#domain", + "@type" : "@id" + }, + "scopeNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#scopeNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "label" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#label", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "isDefinedBy" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#isDefinedBy", + "@type" : "@id" + }, + "comment" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#comment", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "changeNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#changeNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "definition" : { + "@id" : "http://www.w3.org/2004/02/skos/core#definition", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "subPropertyOf" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#subPropertyOf", + "@type" : "@id" + }, + "range" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#range", + "@type" : "@id" + }, + "name" : { + "@id" : "http://xmlns.com/foaf/0.1/name", + "@type" : "http://www.w3.org/2001/XMLSchema#string" + }, + "homepage" : { + "@id" : "http://xmlns.com/foaf/0.1/homepage", + "@type" : "@id" + }, + "rest" : { + "@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest", + "@type" : "@id" + }, + "first" : { + "@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#first", + "@type" : "@id" + }, + "seeAlso" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#seeAlso", + "@type" : "@id" + }, + "editorialNote" : { + "@id" : "http://www.w3.org/2004/02/skos/core#editorialNote", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "altLabel" : { + "@id" : "http://www.w3.org/2004/02/skos/core#altLabel", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "workInfoHomepage" : { + "@id" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "@type" : "@id" + }, + "affiliation" : { + "@id" : "http://schema.org/affiliation", + "@type" : "@id" + }, + "rangeIncludes" : { + "@id" : "http://schema.org/rangeIncludes", + "@type" : "@id" + }, + "unionOf" : { + "@id" : "http://www.w3.org/2002/07/owl#unionOf", + "@type" : "@id" + }, + "creator" : { + "@id" : "http://purl.org/dc/terms/creator", + "@type" : "@id" + }, + "versionInfo" : { + "@id" : "http://www.w3.org/2002/07/owl#versionInfo", + "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + }, + "contributor" : { + "@id" : "http://purl.org/dc/terms/contributor", + "@type" : "@id" + }, + "modified" : { + "@id" : "http://purl.org/dc/terms/modified", + "@type" : "http://www.w3.org/2001/XMLSchema#date" + }, + "imports" : { + "@id" : "http://www.w3.org/2002/07/owl#imports", + "@type" : "@id" + }, + "license" : { + "@id" : "http://purl.org/dc/terms/license", + "@type" : "@id" + }, + "maker" : { + "@id" : "http://xmlns.com/foaf/0.1/maker", + "@type" : "@id" + }, + "subClassOf" : { + "@id" : "http://www.w3.org/2000/01/rdf-schema#subClassOf", + "@type" : "@id" + }, + "propertyChainAxiom" : { + "@id" : "http://www.w3.org/2002/07/owl#propertyChainAxiom", + "@type" : "@id" + }, + "onProperty" : { + "@id" : "http://www.w3.org/2002/07/owl#onProperty", + "@type" : "@id" + }, + "cardinality" : { + "@id" : "http://www.w3.org/2002/07/owl#cardinality", + "@type" : "http://www.w3.org/2001/XMLSchema#nonNegativeInteger" + }, + "allValuesFrom" : { + "@id" : "http://www.w3.org/2002/07/owl#allValuesFrom", + "@type" : "@id" + }, + "dct" : "http://purl.org/dc/terms/", + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "dctype" : "http://purl.org/dc/dcmitype/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "skos" : "http://www.w3.org/2004/02/skos/core#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#", + "vcard" : "http://www.w3.org/2006/vcard/ns#", + "dcat" : "http://www.w3.org/ns/dcat#", + "prov" : "http://www.w3.org/ns/prov#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "sdo" : "http://schema.org/" + } +} diff --git a/backend/src/test/resources/json-ld/dspace.jsonld b/backend/src/test/resources/json-ld/dspace.jsonld new file mode 100644 index 00000000..f475b235 --- /dev/null +++ b/backend/src/test/resources/json-ld/dspace.jsonld @@ -0,0 +1,62 @@ +{ + "@context": { + "odrl": "http://www.w3.org/ns/odrl/2/", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "cred": "https://www.w3.org/2018/credentials#", + "sec": "https://w3id.org/security#", + "foaf": "http://xmlns.com/foaf/0.1/", + "cc": "http://creativecommons.org/ns#", + "dct": "http://purl.org/dc/terms/", + "dcat": "http://www.w3.org/ns/dcat#", + "dspace": "https://w3id.org/dspace/2024/1/", + + "dct:title": { "@language": "en" }, + "dct:creator": { "@type": "@id" }, + "dct:description": { "@container": "@set" }, + "dct:issued": { "@type": "xsd:dateTime" }, + "dct:modified": { "@type": "xsd:dateTime" }, + + "dcat:byteSize": { "@type": "xsd:decimal" }, + "dcat:distribution": { "@container": "@set" }, + "dcat:theme": { "@type": "@id" }, + "dcat:conformsTo": { "@type": "@id" }, + "dcat:dataset": { "@container": "@set" }, + "dcat:endpointURL": { "@type": "xsd:anyURI" }, + "dcat:endpointDescription": { "@type": "xsd:anyURI" }, + "dcat:keyword": { "@container": "@set" }, + "dcat:servesDataset": {"@container": "@set" }, + "dcat:service": { "@container": "@set" }, + "dcat:accessService": { "@container": "@set" }, + + "dspace:agreementId": { "@type": "@id" }, + "dspace:dataset": { "@type": "@id" }, + "dspace:transportType": { "@type": "@id" }, + "dspace:state": { "@type": "@id" }, + "dspace:providerId": { "@type": "@id" }, + "dspace:consumerId": { "@type": "@id" }, + "dspace:participantId": { "@type": "@id" }, + "dspace:reason": { "@container": "@set" }, + "dspace:catalog": { "@container": "@set" }, + "dspace:filter": { "@container": "@set" }, + "dspace:timestamp": { "@type": "xsd:dateTime" }, + "dspace:callbackAddress": { "@type": "xsd:anyURI" }, + "dspace:endpointProperties": { "@container": "@set" }, + + "foaf:homepage": { "@type": "xsd:anyURI" }, + + "odrl:hasPolicy": { "@container": "@set" }, + "odrl:permission": { "@container": "@set" }, + "odrl:prohibition": { "@container": "@set" }, + "odrl:obligation": { "@container": "@set" }, + "odrl:duty": { "@container": "@set" }, + "odrl:constraint": { "@container": "@set" }, + "odrl:action": { "@type": "@id" }, + "odrl:target": { "@type": "@id" }, + "odrl:leftOperand": { "@type": "@id" }, + "odrl:operator": { "@type": "@id" }, + "odrl:rightOperandReference": { "@type": "@id" }, + "odrl:profile": { "@container": "@set" } + "odrl:assigner": { "@type": "@id" }, + "odrl:assignee": { "@type": "@id" } + } +} diff --git a/backend/src/test/resources/json-ld/edc-v1.jsonld b/backend/src/test/resources/json-ld/edc-v1.jsonld new file mode 100644 index 00000000..d539d3e0 --- /dev/null +++ b/backend/src/test/resources/json-ld/edc-v1.jsonld @@ -0,0 +1,47 @@ +{ + "@context": { + "edc": "https://w3id.org/edc/v0.0.1/ns/", + "@vocab": "https://w3id.org/edc/v0.0.1/ns/", + "schema": "http://schema.org/", + "PolicyDefinition": "edc:PolicyDefinition", + "AssetEntryNewDto": "edc:AssetEntryNewDto", + "DataAddress": "edc:DataAddress", + "NegotiationState": "edc:NegotiationState", + "TerminateNegotiation": "edc:TerminateNegotiation", + "ContractRequest": "edc:ContractRequest", + "policy": { + "@id": "edc:policy", + "@type": "@id", + "@context": [ + "http://www.w3.org/ns/odrl.jsonld" + ] + }, + "createdAt": "edc:createdAt", + "properties": "edc:properties", + "privateProperties": "edc:privateProperties", + "dataAddress": "edc:dataAddress", + "type": "edc:type", + "counterPartyAddress": "edc:counterPartyAddress", + "protocol": "edc:protocol", + "querySpec": "edc:querySpec", + "accessPolicyId": "edc:accessPolicyId", + "contractPolicyId": "edc:contractPolicyId", + "assetsSelector": "edc:assetsSelector", + "state": "edc:state", + "reason": "edc:reason", + "connectorAddress": "edc:connectorAddress", + "offer": "edc:offer", + "asset": "edc:asset", + "offerId": "edc:offerId", + "assetId": "edc:assetId", + "contractId": "edc:contractId", + "connectorId": "edc:connectorId", + "callbackAddresses": "edc:callbackAddresses", + "dataDestination": "edc:dataDestination", + "baseUrl": "edc:baseUrl", + "providerId": "edc:providerId", + "uri": "edc:uri", + "events": "edc:events", + "transactional": "edc:transactional" + } +} \ No newline at end of file diff --git a/backend/src/test/resources/json-ld/odrl.jsonld b/backend/src/test/resources/json-ld/odrl.jsonld new file mode 100644 index 00000000..e779e87f --- /dev/null +++ b/backend/src/test/resources/json-ld/odrl.jsonld @@ -0,0 +1,200 @@ +{ + "@context": { + "odrl": "http://www.w3.org/ns/odrl/2/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "owl": "http://www.w3.org/2002/07/owl#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "dct": "http://purl.org/dc/terms/", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "vcard": "http://www.w3.org/2006/vcard/ns#", + "foaf": "http://xmlns.com/foaf/0.1/", + "schema": "http://schema.org/", + "cc": "http://creativecommons.org/ns#", + + "uid": "@id", + "type": "@type", + + "Policy": "odrl:Policy", + "Rule": "odrl:Rule", + "profile": {"@type": "@id", "@id": "odrl:profile"}, + + "inheritFrom": {"@type": "@id", "@id": "odrl:inheritFrom"}, + + "ConflictTerm": "odrl:ConflictTerm", + "conflict": {"@type": "@vocab", "@id": "odrl:conflict"}, + "perm": "odrl:perm", + "prohibit": "odrl:prohibit", + "invalid": "odrl:invalid", + + "Agreement": "odrl:Agreement", + "Assertion": "odrl:Assertion", + "Offer": "odrl:Offer", + "Privacy": "odrl:Privacy", + "Request": "odrl:Request", + "Set": "odrl:Set", + "Ticket": "odrl:Ticket", + + "Asset": "odrl:Asset", + "AssetCollection": "odrl:AssetCollection", + "relation": {"@type": "@id", "@id": "odrl:relation"}, + "hasPolicy": {"@type": "@id", "@id": "odrl:hasPolicy"}, + + "target": {"@type": "@id", "@id": "odrl:target"}, + "output": {"@type": "@id", "@id": "odrl:output"}, + + "partOf": {"@type": "@id", "@id": "odrl:partOf"}, + "source": {"@type": "@id", "@id": "odrl:source"}, + + "Party": "odrl:Party", + "PartyCollection": "odrl:PartyCollection", + "function": {"@type": "@vocab", "@id": "odrl:function"}, + "PartyScope": "odrl:PartyScope", + + "assignee": {"@type": "@id", "@id": "odrl:assignee"}, + "assigner": {"@type": "@id", "@id": "odrl:assigner"}, + "assigneeOf": {"@type": "@id", "@id": "odrl:assigneeOf"}, + "assignerOf": {"@type": "@id", "@id": "odrl:assignerOf"}, + "attributedParty": {"@type": "@id", "@id": "odrl:attributedParty"}, + "attributingParty": {"@type": "@id", "@id": "odrl:attributingParty"}, + "compensatedParty": {"@type": "@id", "@id": "odrl:compensatedParty"}, + "compensatingParty": {"@type": "@id", "@id": "odrl:compensatingParty"}, + "consentingParty": {"@type": "@id", "@id": "odrl:consentingParty"}, + "consentedParty": {"@type": "@id", "@id": "odrl:consentedParty"}, + "informedParty": {"@type": "@id", "@id": "odrl:informedParty"}, + "informingParty": {"@type": "@id", "@id": "odrl:informingParty"}, + "trackingParty": {"@type": "@id", "@id": "odrl:trackingParty"}, + "trackedParty": {"@type": "@id", "@id": "odrl:trackedParty"}, + "contractingParty": {"@type": "@id", "@id": "odrl:contractingParty"}, + "contractedParty": {"@type": "@id", "@id": "odrl:contractedParty"}, + + "Action": "odrl:Action", + "action": {"@type": "@vocab", "@id": "odrl:action"}, + "includedIn": {"@type": "@id", "@id": "odrl:includedIn"}, + "implies": {"@type": "@id", "@id": "odrl:implies"}, + + "Permission": "odrl:Permission", + "permission": {"@type": "@id", "@id": "odrl:permission"}, + + "Prohibition": "odrl:Prohibition", + "prohibition": {"@type": "@id", "@id": "odrl:prohibition"}, + + "obligation": {"@type": "@id", "@id": "odrl:obligation"}, + + "use": "odrl:use", + "grantUse": "odrl:grantUse", + "aggregate": "odrl:aggregate", + "annotate": "odrl:annotate", + "anonymize": "odrl:anonymize", + "archive": "odrl:archive", + "concurrentUse": "odrl:concurrentUse", + "derive": "odrl:derive", + "digitize": "odrl:digitize", + "display": "odrl:display", + "distribute": "odrl:distribute", + "execute": "odrl:execute", + "extract": "odrl:extract", + "give": "odrl:give", + "index": "odrl:index", + "install": "odrl:install", + "modify": "odrl:modify", + "move": "odrl:move", + "play": "odrl:play", + "present": "odrl:present", + "print": "odrl:print", + "read": "odrl:read", + "reproduce": "odrl:reproduce", + "sell": "odrl:sell", + "stream": "odrl:stream", + "textToSpeech": "odrl:textToSpeech", + "transfer": "odrl:transfer", + "transform": "odrl:transform", + "translate": "odrl:translate", + + "Duty": "odrl:Duty", + "duty": {"@type": "@id", "@id": "odrl:duty"}, + "consequence": {"@type": "@id", "@id": "odrl:consequence"}, + "remedy": {"@type": "@id", "@id": "odrl:remedy"}, + + "acceptTracking": "odrl:acceptTracking", + "attribute": "odrl:attribute", + "compensate": "odrl:compensate", + "delete": "odrl:delete", + "ensureExclusivity": "odrl:ensureExclusivity", + "include": "odrl:include", + "inform": "odrl:inform", + "nextPolicy": "odrl:nextPolicy", + "obtainConsent": "odrl:obtainConsent", + "reviewPolicy": "odrl:reviewPolicy", + "uninstall": "odrl:uninstall", + "watermark": "odrl:watermark", + + "Constraint": "odrl:Constraint", + "LogicalConstraint": "odrl:LogicalConstraint", + "constraint": {"@type": "@id", "@id": "odrl:constraint"}, + "refinement": {"@type": "@id", "@id": "odrl:refinement"}, + "Operator": "odrl:Operator", + "operator": {"@type": "@vocab", "@id": "odrl:operator"}, + "RightOperand": "odrl:RightOperand", + "rightOperand": "odrl:rightOperand", + "rightOperandReference":{"@type": "xsd:anyURI", "@id": "odrl:rightOperandReference"}, + "LeftOperand": "odrl:LeftOperand", + "leftOperand": {"@type": "@vocab", "@id": "odrl:leftOperand"}, + "unit": "odrl:unit", + "dataType": {"@type": "xsd:anyType", "@id": "odrl:datatype"}, + "status": "odrl:status", + + "absolutePosition": "odrl:absolutePosition", + "absoluteSpatialPosition": "odrl:absoluteSpatialPosition", + "absoluteTemporalPosition":"odrl:absoluteTemporalPosition", + "absoluteSize": "odrl:absoluteSize", + "count": "odrl:count", + "dateTime": "odrl:dateTime", + "delayPeriod": "odrl:delayPeriod", + "deliveryChannel": "odrl:deliveryChannel", + "elapsedTime": "odrl:elapsedTime", + "event": "odrl:event", + "fileFormat": "odrl:fileFormat", + "industry": "odrl:industry:", + "language": "odrl:language", + "media": "odrl:media", + "meteredTime": "odrl:meteredTime", + "payAmount": "odrl:payAmount", + "percentage": "odrl:percentage", + "product": "odrl:product", + "purpose": "odrl:purpose", + "recipient": "odrl:recipient", + "relativePosition": "odrl:relativePosition", + "relativeSpatialPosition": "odrl:relativeSpatialPosition", + "relativeTemporalPosition":"odrl:relativeTemporalPosition", + "relativeSize": "odrl:relativeSize", + "resolution": "odrl:resolution", + "spatial": "odrl:spatial", + "spatialCoordinates": "odrl:spatialCoordinates", + "systemDevice": "odrl:systemDevice", + "timeInterval": "odrl:timeInterval", + "unitOfCount": "odrl:unitOfCount", + "version": "odrl:version", + "virtualLocation": "odrl:virtualLocation", + + "eq": "odrl:eq", + "gt": "odrl:gt", + "gteq": "odrl:gteq", + "lt": "odrl:lt", + "lteq": "odrl:lteq", + "neq": "odrl:neg", + "isA": "odrl:isA", + "hasPart": "odrl:hasPart", + "isPartOf": "odrl:isPartOf", + "isAllOf": "odrl:isAllOf", + "isAnyOf": "odrl:isAnyOf", + "isNoneOf": "odrl:isNoneOf", + "or": "odrl:or", + "xone": "odrl:xone", + "and": "odrl:and", + "andSequence": "odrl:andSequence", + + "policyUsage": "odrl:policyUsage" + + } +} diff --git a/backend/src/test/resources/json-ld/tx-auth-v1.jsonld b/backend/src/test/resources/json-ld/tx-auth-v1.jsonld new file mode 100644 index 00000000..9be52439 --- /dev/null +++ b/backend/src/test/resources/json-ld/tx-auth-v1.jsonld @@ -0,0 +1,12 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "tx-auth": "https://w3id.org/tractusx/auth/", + "refreshToken": "tx-auth:refreshToken", + "refreshEndpoint": "tx-auth:refreshEndpoint", + "refreshAudience": "tx-auth:refreshAudience", + "audience": "tx-auth:audience", + "expiresIn": "tx-auth:expiresIn" + } +} diff --git a/backend/src/test/resources/json-ld/tx-v1.jsonld b/backend/src/test/resources/json-ld/tx-v1.jsonld new file mode 100644 index 00000000..96342b95 --- /dev/null +++ b/backend/src/test/resources/json-ld/tx-v1.jsonld @@ -0,0 +1,9 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + "tx": "https://w3id.org/tractusx/v0.0.1/ns/", + "BusinessPartnerNumber": "tx:BusinessPartnerNumber", + "BusinessPartnerGroup": "tx:BusinessPartnerGroup" + } +} From abaa4efa914ba6c94c9fd403bf9dfe1375fca572 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Mon, 27 May 2024 10:30:56 +0200 Subject: [PATCH 02/13] feat: added repeated expansion --- .../common/edc/EdcAdapterServiceTest.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java index e4e324fa..5bd0641d 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java @@ -12,7 +12,7 @@ import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; import org.eclipse.tractusx.puris.backend.common.util.PatternStore; import org.eclipse.tractusx.puris.backend.common.util.VariablesService; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -25,6 +25,7 @@ import java.util.regex.Pattern; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import static org.junit.jupiter.api.Assertions.assertEquals; public class EdcAdapterServiceTest { @@ -91,19 +92,7 @@ private void smallContexts() { titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); - titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); - -// titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); -// -// titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); -// -// titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); -// -// titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); -// -// titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); - String PREFIX = "json-ld" + File.separator; Map FILES = Map.of( "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", @@ -205,21 +194,33 @@ public static JsonObject convertObjectNodeToJsonObject(ObjectNode objectNode) { @Test public void expandCatalog() throws Exception{ // GIVEN - var catalogJson = objectMapper.readTree(test1); + var catalogJson = objectMapper.readTree(test2); + + System.out.println("Input data \n" + catalogJson.toPrettyString()); var jakartaJson = convertObjectNodeToJsonObject((ObjectNode) catalogJson); smallContexts(); + System.out.println("Expanded: "); var x= titaniumJsonLd.expand(jakartaJson).getContent(); - System.out.println(x); + System.out.println(objectMapper.readTree(x.toString()).toPrettyString()); var y = titaniumJsonLd.compact(x).getContent(); System.out.println("###\n".repeat(2)); - System.out.println(y); + System.out.println("Compacted: "); + System.out.println(objectMapper.readTree(y.toString()).toPrettyString()); + + var z = titaniumJsonLd.expand(y).getContent(); + + + System.out.println("Expanded again: \n" + objectMapper.readTree(z.toString()).toPrettyString()); + + System.out.println(x.toString().equals(z.toString())); + assertEquals(x, z); // WHEN From d24de10372532252b32a04782951ac8b359e137c Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Mon, 27 May 2024 13:48:43 +0200 Subject: [PATCH 03/13] feat: added JsonLdUtils --- .../edc/logic/service/EdcAdapterService.java | 32 +-- .../edc/logic/util/EdcRequestBodyBuilder.java | 1 + .../common/edc/logic/util/JsonLdUtils.java | 141 ++++++++++ ...rServiceTest.java => JsonLdUtilsTest.java} | 252 +++--------------- 4 files changed, 199 insertions(+), 227 deletions(-) create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java rename backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/{EdcAdapterServiceTest.java => JsonLdUtilsTest.java} (61%) diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java index bcf047ca..9aac9562 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java @@ -24,8 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import okhttp3.*; -import org.eclipse.edc.jsonld.TitaniumJsonLd; -import org.eclipse.edc.spi.monitor.ConsoleMonitor; import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; import org.eclipse.tractusx.puris.backend.common.edc.logic.dto.EdrDto; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; @@ -42,6 +40,9 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Pattern; + +import static org.eclipse.tractusx.puris.backend.common.edc.logic.util.JsonLdUtils.expand; + /** * Service Layer of EDC Adapter. Builds and sends requests to a productEDC. * The EDC connection is configured using the application.properties file. @@ -50,13 +51,6 @@ @Slf4j public class EdcAdapterService { - - private static TitaniumJsonLd titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); - - static { - - } - private static final OkHttpClient CLIENT = new OkHttpClient(); @Autowired private VariablesService variablesService; @@ -1058,11 +1052,13 @@ public String getCxIdFromPartTypeInformation(MaterialPartnerRelation mpr) { * @return true, if the policy matches yours, otherwise false */ private boolean testContractPolicyConstraints(JsonNode catalogEntry) { + catalogEntry = expand(catalogEntry); + log.info("Expanded catalog entry for policy constraint test " + catalogEntry.toPrettyString()); log.debug("Testing constraints in the following catalogEntry: {}", catalogEntry.toPrettyString()); var constraint = Optional.ofNullable(catalogEntry.get("odrl:hasPolicy")) - .map(policy -> policy.get("odrl:permission")) - .map(permission -> permission.get("odrl:constraint")) - .map(con -> con.get("odrl:and")); + .map(policy -> policy.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "permission")) + .map(permission -> permission.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "constraint")) + .map(con -> con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "and")); if (constraint.isEmpty()) { log.debug("Constraint mismatch: we expect to have a constraint in permission node."); return false; @@ -1074,7 +1070,7 @@ private boolean testContractPolicyConstraints(JsonNode catalogEntry) { Optional purposeConstraint = Optional.empty(); for (JsonNode con : constraint.get()) { // Iterate over array elements and find the nodes - JsonNode leftOperandNode = con.get("odrl:leftOperand"); + JsonNode leftOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "leftOperand"); if (leftOperandNode != null && (EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "FrameworkAgreement").equals(leftOperandNode.asText())) { frameworkAgreementConstraint = Optional.of(con); } @@ -1087,7 +1083,7 @@ private boolean testContractPolicyConstraints(JsonNode catalogEntry) { result = result && testSingleConstraint( frameworkAgreementConstraint, EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "FrameworkAgreement", - "odrl:eq", + EdcRequestBodyBuilder.ODRL_NAMESPACE + "eq", variablesService.getPurisFrameworkAgreementWithVersion() ); } else { @@ -1098,7 +1094,7 @@ private boolean testContractPolicyConstraints(JsonNode catalogEntry) { result = result && testSingleConstraint( purposeConstraint, EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "UsagePurpose", - "odrl:eq", + EdcRequestBodyBuilder.ODRL_NAMESPACE + "eq", variablesService.getPurisPuposeWithVersion() ); } else { @@ -1121,14 +1117,14 @@ private boolean testSingleConstraint(Optional constraintToTest, String JsonNode con = constraintToTest.get(); - JsonNode leftOperandNode = con.get("odrl:leftOperand"); + JsonNode leftOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "leftOperand"); if (leftOperandNode == null || !targetLeftOperand.equals(leftOperandNode.asText())) { String leftOperand = leftOperandNode == null ? "null" : leftOperandNode.asText(); log.debug("Left operand '{}' does not equal expected value '{}'.", leftOperand, targetLeftOperand); return false; } - JsonNode operatorNode = con.get("odrl:operator"); + JsonNode operatorNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "operator"); operatorNode = operatorNode == null ? null : operatorNode.get("@id"); if (operatorNode == null || !targetOperator.equals(operatorNode.asText())) { String operator = operatorNode == null ? "null" : operatorNode.asText(); @@ -1136,7 +1132,7 @@ private boolean testSingleConstraint(Optional constraintToTest, String return false; } - JsonNode rightOperandNode = con.get("odrl:rightOperand"); + JsonNode rightOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "rightOperand"); if (rightOperandNode == null || !targetRightOperand.equals(rightOperandNode.asText())) { String rightOperand = rightOperandNode == null ? "null" : rightOperandNode.asText(); log.debug("Right operand '{}' odes not equal expected value '{}'.", rightOperand, targetRightOperand); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java index 2195ab69..7508df44 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java @@ -63,6 +63,7 @@ public class EdcRequestBodyBuilder { public static final String TX_AUTH_NAMESPACE = "https://w3id.org/tractusx/auth/"; public static final String DCAT_NAMESPACE = "http://www.w3.org/ns/dcat#"; public static final String DSPACE_NAMESPACE = "https://w3id.org/dspace/v0.8/"; + public static final String TX_POLICY_CONTEXT = "https://w3id.org/tractusx/policy/v1.0.0"; /** * helper class to encapsulate PolicyConstraint diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java new file mode 100644 index 00000000..bef6bbfd --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.puris.backend.common.edc.logic.util; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.json.Json; +import jakarta.json.JsonReader; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.edc.jsonld.TitaniumJsonLd; +import org.eclipse.edc.jsonld.spi.JsonLdKeywords; +import org.eclipse.edc.spi.monitor.Monitor; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.net.URI; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Supplier; + +@Slf4j +public class JsonLdUtils { + + private final static ObjectMapper MAPPER = new ObjectMapper(); + + private final static TitaniumJsonLd TITANIUM_JSON_LD = new TitaniumJsonLd(new MonitorAdapter()); + + static { + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.TX_POLICY_CONTEXT); + TITANIUM_JSON_LD.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); + final String prefix = "json-ld" + File.separator; + Map filesMap = Map.of( + EdcRequestBodyBuilder.TX_POLICY_CONTEXT, prefix + "cx-policy-v1.jsonld", + EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, prefix + "odrl.jsonld" + ); + + Function uriFunction = fileName -> { + Resource resource = new ClassPathResource(fileName); + try { + return resource.getURI(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }; + + for (var entry : filesMap.entrySet()) { + TITANIUM_JSON_LD.registerCachedDocument(entry.getKey(), uriFunction.apply(entry.getValue())); + } + } + + public static ObjectNode expand(JsonNode node) { + JsonReader jsonReader = Json.createReader(new StringReader(node.toString())); + var jakartaJson = jsonReader.readObject(); + var expandedJakartaJson = TITANIUM_JSON_LD.expand(jakartaJson).getContent(); + try { + return (ObjectNode) MAPPER.readTree(expandedJakartaJson.toString()); + } catch (Exception e) { + log.error("Failure expanding json node: \n{}", node.toPrettyString(), e); + return null; + } + } + + public static ObjectNode compact(JsonNode node) { + JsonReader jsonReader = Json.createReader(new StringReader(node.toString())); + var jakartaJson = jsonReader.readObject(); + var expandedJakartaJson = TITANIUM_JSON_LD.compact(jakartaJson).getContent(); + try { + return (ObjectNode) MAPPER.readTree(expandedJakartaJson.toString()); + } catch (Exception e) { + log.error("Failure compacting json node: \n{}", node.toPrettyString(), e); + return null; + } + } + + + + private static class MonitorAdapter implements Monitor { + + @Override + public void severe(Supplier supplier, Throwable... errors) { + log.error(supplier.get()); + if (errors != null) { + for (var error : errors) { + log.error("{} \n{}", error.getMessage(), error.getStackTrace()); + } + } + } + + @Override + public void severe(Map data) { + for(var entry : data.entrySet()){ + log.error(entry.getKey(), entry.getValue()); + } + } + + @Override + public void warning(Supplier supplier, Throwable... errors) { + log.warn(supplier.get()); + if (errors != null) { + for (var error : errors) { + log.warn("{} \n{}", error.getMessage(), error.getStackTrace()); + } + } + } + + @Override + public void info(Supplier supplier, Throwable... errors) { + log.info(supplier.get(), (Object[]) errors); + } + + @Override + public void debug(Supplier supplier, Throwable... errors) { + log.debug(supplier.get(), (Object[]) errors); + } + + + } +} diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java similarity index 61% rename from backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java rename to backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java index 5bd0641d..65e18002 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/EdcAdapterServiceTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java @@ -1,233 +1,67 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + package org.eclipse.tractusx.puris.backend.common.edc; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import jakarta.json.Json; -import jakarta.json.JsonObject; -import jakarta.json.JsonReader; -import org.eclipse.edc.jsonld.TitaniumJsonLd; -import org.eclipse.edc.jsonld.spi.JsonLdKeywords; -import org.eclipse.edc.spi.monitor.ConsoleMonitor; -import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcContractMappingService; -import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; -import org.eclipse.tractusx.puris.backend.common.util.PatternStore; -import org.eclipse.tractusx.puris.backend.common.util.VariablesService; -import org.junit.jupiter.api.Test; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.puris.backend.common.edc.logic.util.JsonLdUtils; import org.junit.jupiter.api.BeforeEach; -import org.mockito.Mock; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.MockitoAnnotations; -import java.io.File; -import java.io.StringReader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Map; -import java.util.regex.Pattern; - -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static org.junit.jupiter.api.Assertions.assertEquals; -public class EdcAdapterServiceTest { +@Slf4j +public class JsonLdUtilsTest { + - @Mock - private VariablesService variablesService; private final ObjectMapper objectMapper = new ObjectMapper(); - @Mock - private EdcRequestBodyBuilder edcRequestBodyBuilder; - @Mock - private EdcContractMappingService edcContractMappingService; - private final Pattern urlPattern = PatternStore.URL_PATTERN; - private static TitaniumJsonLd titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); } - private void allContexts() { - titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); - titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); - titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); - titaniumJsonLd.registerContext("https://w3id.org/tractusx/edc/v0.0.1"); - - titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); - - titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-policy", EdcRequestBodyBuilder.CX_POLICY_NAMESPACE); - -// titaniumJsonLd.registerNamespace("odrl", EdcRequestBodyBuilder.ODRL_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); - -// titaniumJsonLd.registerNamespace("tx-auth", EdcRequestBodyBuilder.TX_AUTH_NAMESPACE); - - titaniumJsonLd.registerNamespace("tx", EdcRequestBodyBuilder.TX_NAMESPACE); - - titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); - - titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); - - String PREFIX = "json-ld" + File.separator; - Map FILES = Map.of( - "https://w3id.org/tractusx/edc/v0.0.1", PREFIX + "tx-v1.jsonld", - "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", -// EdcRequestBodyBuilder.TX_AUTH_NAMESPACE, PREFIX + "tx-auth-v1.jsonld", - "https://w3id.org/edc/v0.0.1", PREFIX + "edc-v1.jsonld", - EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld" - -// EdcRequestBodyBuilder.DSPACE_NAMESPACE, PREFIX + "dspace.jsonld" - ); - - for (var e : FILES.entrySet()) { - var file = mapToFile(e); - titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); - } - } - - private void smallContexts() { - titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); - - titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); - titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); - titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); - String PREFIX = "json-ld" + File.separator; - Map FILES = Map.of( - "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", - EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld" - ); - - for (var e : FILES.entrySet()) { - var file = mapToFile(e); - titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); - } - } - - private void allContextsBackup() { - titaniumJsonLd = new TitaniumJsonLd(new ConsoleMonitor()); - titaniumJsonLd.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); - titaniumJsonLd.registerContext("https://w3id.org/tractusx/policy/v1.0.0"); - - titaniumJsonLd.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); - - titaniumJsonLd.registerNamespace("aas-semantics", EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-common", EdcRequestBodyBuilder.CX_COMMON_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-policy", EdcRequestBodyBuilder.CX_POLICY_NAMESPACE); - - titaniumJsonLd.registerNamespace("odrl", EdcRequestBodyBuilder.ODRL_NAMESPACE); - - titaniumJsonLd.registerNamespace("cx-taxo", EdcRequestBodyBuilder.CX_TAXO_NAMESPACE); - - titaniumJsonLd.registerNamespace("tx-auth", EdcRequestBodyBuilder.TX_AUTH_NAMESPACE); - - titaniumJsonLd.registerNamespace("tx", EdcRequestBodyBuilder.TX_NAMESPACE); - - titaniumJsonLd.registerNamespace("dcat", EdcRequestBodyBuilder.DCAT_NAMESPACE); - - titaniumJsonLd.registerNamespace("dspace", EdcRequestBodyBuilder.DSPACE_NAMESPACE); - - String PREFIX = "json-ld" + File.separator; - Map FILES = Map.of( - EdcRequestBodyBuilder.TX_NAMESPACE, PREFIX + "tx-v1.jsonld", - "https://w3id.org/tractusx/policy/v1.0.0", PREFIX + "cx-policy-v1.jsonld", - EdcRequestBodyBuilder.TX_AUTH_NAMESPACE, PREFIX + "tx-auth-v1.jsonld", - EdcRequestBodyBuilder.EDC_NAMESPACE, PREFIX + "edc-v1.jsonld", - EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, PREFIX + "odrl.jsonld", - - EdcRequestBodyBuilder.DSPACE_NAMESPACE, PREFIX + "dspace.jsonld" - ); - - for (var e : FILES.entrySet()) { - var file = mapToFile(e); - titaniumJsonLd.registerCachedDocument(e.getKey(), file.getValue().toURI()); - } - } - - private Map.Entry mapToFile(Map.Entry fileEntry) { - return Map.entry(fileEntry.getKey(), getResourceFile(fileEntry.getValue())); - } - - private File getResourceFile(String name) { - try (var stream = getClass().getClassLoader().getResourceAsStream(name)) { - if (stream == null) { - return null; - } - var filename = Path.of(name).getFileName().toString(); - var parts = filename.split("\\."); - var tempFile = Files.createTempFile(parts[0], "." + parts[1]); - Files.copy(stream, tempFile, REPLACE_EXISTING); - return tempFile.toFile(); - } catch (Exception e) { - System.out.println("Failure" + e); - return null; - } - } - - public static JsonObject convertObjectNodeToJsonObject(ObjectNode objectNode) { - try { - // Convert ObjectNode to JSON String - ObjectMapper mapper = new ObjectMapper(); - String jsonString = mapper.writeValueAsString(objectNode); - - // Create JsonReader from JSON String - JsonReader jsonReader = Json.createReader(new StringReader(jsonString)); - - // Get JsonObject from JsonReader - JsonObject jsonObject = jsonReader.readObject(); - - // Close the JsonReader - jsonReader.close(); - - return jsonObject; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - - - @Test - public void expandCatalog() throws Exception{ + @ParameterizedTest + @ValueSource(strings = {test1, test2}) + public void testUtilClass(String input) throws Exception { // GIVEN - var catalogJson = objectMapper.readTree(test2); - - System.out.println("Input data \n" + catalogJson.toPrettyString()); - - var jakartaJson = convertObjectNodeToJsonObject((ObjectNode) catalogJson); - - smallContexts(); - - System.out.println("Expanded: "); - var x= titaniumJsonLd.expand(jakartaJson).getContent(); - - System.out.println(objectMapper.readTree(x.toString()).toPrettyString()); - - var y = titaniumJsonLd.compact(x).getContent(); + var catalogJson = objectMapper.readTree(input); + log.info("Input:\n" + catalogJson.toPrettyString()); - System.out.println("###\n".repeat(2)); - - System.out.println("Compacted: "); - System.out.println(objectMapper.readTree(y.toString()).toPrettyString()); - - var z = titaniumJsonLd.expand(y).getContent(); - - - System.out.println("Expanded again: \n" + objectMapper.readTree(z.toString()).toPrettyString()); - - System.out.println(x.toString().equals(z.toString())); - assertEquals(x, z); - - // WHEN + //WHEN + var expanded = JsonLdUtils.expand(catalogJson); + log.info("Expanded first time:\n"+ expanded.toPrettyString()); + var compacted = JsonLdUtils.compact(expanded); + log.info("Compacted:\n" + compacted.toPrettyString()); + var expandedAgain = JsonLdUtils.expand(compacted); + log.info("Expanded again:\n" + expandedAgain.toPrettyString()); // THEN + assertEquals(expandedAgain, expanded); } - static String test1 = "{\n" + + + final static String test1 = "{\n" + " \"@id\" : \"473e5307-c0c5-491f-96b4-68b9e25d4699\",\n" + " \"@type\" : \"dcat:Catalog\",\n" + " \"dspace:participantId\" : \"BPNL1234567890ZZ\",\n" + @@ -322,7 +156,7 @@ public void expandCatalog() throws Exception{ " }\n" + "}"; - static String test2 = "\n" + + final static String test2 = "\n" + "{\n" + "\n" + " \"@id\" : \"f26d8d04-5ee5-4478-8de7-2e347b1f6685\",\n" + From 2948425974b30ed7888df1206d656dda61d851a4 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Tue, 28 May 2024 11:53:19 +0200 Subject: [PATCH 04/13] feat: json-ld used in contract negotiations --- backend/pom.xml | 14 +- .../edc/logic/service/EdcAdapterService.java | 56 +++-- .../edc/logic/util/EdcRequestBodyBuilder.java | 7 +- .../common/edc/logic/util/JsonLdUtils.java | 33 ++- .../src/main/resources/json-ld/dspace.jsonld | 2 +- .../service/util}/JsonLdUtilsTest.java | 199 +++++++++++++++++- .../src/test/resources/json-ld/dspace.jsonld | 2 +- 7 files changed, 263 insertions(+), 50 deletions(-) rename backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/{ => logic/service/util}/JsonLdUtilsTest.java (59%) diff --git a/backend/pom.xml b/backend/pom.xml index 04be7dbe..65558947 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -134,19 +134,7 @@ json-ld-spi 0.7.0 - - - - - - - - - - - - dash-licenses @@ -217,6 +205,8 @@ ${project.basedir}/src/main/resources application.properties + + json-ld/* BOOT-INF/classes/ diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java index ba897de1..213c6312 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java @@ -26,6 +26,7 @@ import okhttp3.*; import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; +import org.eclipse.tractusx.puris.backend.common.edc.logic.util.JsonLdUtils; import org.eclipse.tractusx.puris.backend.common.util.PatternStore; import org.eclipse.tractusx.puris.backend.common.util.VariablesService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.MaterialPartnerRelation; @@ -40,6 +41,7 @@ import java.util.*; import java.util.regex.Pattern; + /** * Service Layer of EDC Adapter. Builds and sends requests to a productEDC. * The EDC connection is configured using the application.properties file. @@ -57,6 +59,9 @@ public class EdcAdapterService { @Autowired private EdcContractMappingService edcContractMappingService; + @Autowired + private JsonLdUtils jsonLdUtils; + private final Pattern urlPattern = PatternStore.URL_PATTERN; public EdcAdapterService(ObjectMapper objectMapper) { @@ -647,7 +652,9 @@ private boolean negotiateForPartnerDtr(Partner partner) { EdcRequestBodyBuilder.CX_TAXO_NAMESPACE + "DigitalTwinRegistry" ); var responseNode = getCatalog(partner.getEdcUrl(), partner.getBpnl(), equalFilters); - var catalogArray = responseNode.get("dcat:dataset"); + responseNode = jsonLdUtils.expand(responseNode); + + var catalogArray = responseNode.get(EdcRequestBodyBuilder.DCAT_NAMESPACE + "dataset"); // If there is exactly one asset, the catalogContent will be a JSON object. // In all other cases catalogContent will be a JSON array. // For the sake of uniformity we will embed a single object in an array. @@ -971,7 +978,8 @@ private boolean negotiateForSubmodel(MaterialPartnerRelation mpr, SubmodelType t ); equalFilters.put("'" + EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE + "semanticId'.'@id'", type.URN_SEMANTIC_ID); var responseNode = getCatalog(submodelData.dspUrl(), partner.getBpnl(), equalFilters); - var catalogArray = responseNode.get("dcat:dataset"); + responseNode = jsonLdUtils.expand(responseNode); + var catalogArray = responseNode.get(EdcRequestBodyBuilder.DCAT_NAMESPACE + "dataset"); // If there is exactly one asset, the catalogContent will be a JSON object. // In all other cases catalogContent will be a JSON array. // For the sake of uniformity we will embed a single object in an array. @@ -1049,17 +1057,23 @@ public String getCxIdFromPartTypeInformation(MaterialPartnerRelation mpr) { /** * Helper method to check whether you and the contract offer from the other party have the - * same framework agreement policy. + * same framework agreement policy. The given catalogEntry must be expanded! * * @param catalogEntry the catalog item containing the desired api asset * @return true, if the policy matches yours, otherwise false */ public boolean testContractPolicyConstraints(JsonNode catalogEntry) { - log.debug("Testing constraints in the following catalogEntry: {}", catalogEntry.toPrettyString()); - var constraint = Optional.ofNullable(catalogEntry.get("odrl:hasPolicy")) - .map(policy -> policy.get("odrl:permission")) - .map(permission -> permission.get("odrl:constraint")) - .map(con -> con.get("odrl:and")); + log.debug("Testing constraints in the following catalogEntry: \n{}", catalogEntry.toPrettyString()); + var constraint = Optional.ofNullable(catalogEntry.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "hasPolicy")) + .filter(policy -> policy.isArray() && policy.size() == 1) + .map(policy -> policy.get(0)) + .map(policy -> policy.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "permission")) + .filter(permission -> permission.isArray() && permission.size() == 1) + .map(permission -> permission.get(0)) + .map(permission -> permission.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "constraint")) + .filter(constr -> constr.isArray() && constr.size() == 1) + .map(constr -> constr.get(0)) + .map(con -> con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "and")); if (constraint.isEmpty()) { log.debug("Constraint mismatch: we expect to have a constraint in permission node."); return false; @@ -1071,7 +1085,9 @@ public boolean testContractPolicyConstraints(JsonNode catalogEntry) { Optional purposeConstraint = Optional.empty(); for (JsonNode con : constraint.get()) { // Iterate over array elements and find the nodes - JsonNode leftOperandNode = con.get("odrl:leftOperand"); + JsonNode leftOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "leftOperand"); + leftOperandNode = leftOperandNode.get(0); + leftOperandNode = leftOperandNode.get("@value"); if (leftOperandNode != null && (EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "FrameworkAgreement").equals(leftOperandNode.asText())) { frameworkAgreementConstraint = Optional.of(con); } @@ -1093,19 +1109,18 @@ public boolean testContractPolicyConstraints(JsonNode catalogEntry) { result = result && testSingleConstraint( frameworkAgreementConstraint, EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "FrameworkAgreement", - "odrl:eq", + EdcRequestBodyBuilder.ODRL_NAMESPACE + "eq", variablesService.getPurisFrameworkAgreementWithVersion() ); result = result && testSingleConstraint( purposeConstraint, EdcRequestBodyBuilder.CX_POLICY_NAMESPACE + "UsagePurpose", - "odrl:eq", + EdcRequestBodyBuilder.ODRL_NAMESPACE + "eq", variablesService.getPurisPurposeWithVersion() ); } else { - System.out.println("Only one constraint "); log.info( "2 Constraints (Framework Agreement, Purpose) are expected but got {} constraints.", constraint.get().size() @@ -1122,25 +1137,30 @@ private boolean testSingleConstraint(Optional constraintToTest, String JsonNode con = constraintToTest.get(); - JsonNode leftOperandNode = con.get("odrl:leftOperand"); + JsonNode leftOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "leftOperand"); + leftOperandNode = leftOperandNode == null ? null : leftOperandNode.get(0); + leftOperandNode = leftOperandNode == null ? null : leftOperandNode.get("@value"); if (leftOperandNode == null || !targetLeftOperand.equals(leftOperandNode.asText())) { String leftOperand = leftOperandNode == null ? "null" : leftOperandNode.asText(); - log.debug("Left operand '{}' does not equal expected value '{}'.", leftOperand, targetLeftOperand); + log.info("Left operand '{}' does not equal expected value '{}'.", leftOperand, targetLeftOperand); return false; } - JsonNode operatorNode = con.get("odrl:operator"); + JsonNode operatorNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "operator"); + operatorNode = operatorNode == null ? null : operatorNode.get(0); operatorNode = operatorNode == null ? null : operatorNode.get("@id"); if (operatorNode == null || !targetOperator.equals(operatorNode.asText())) { String operator = operatorNode == null ? "null" : operatorNode.asText(); - log.debug("Operator '{}' does not equal expected value '{}'.", operator, targetOperator); + log.info("Operator '{}' does not equal expected value '{}'.", operator, targetOperator); return false; } - JsonNode rightOperandNode = con.get("odrl:rightOperand"); + JsonNode rightOperandNode = con.get(EdcRequestBodyBuilder.ODRL_NAMESPACE + "rightOperand"); + rightOperandNode = rightOperandNode == null ? null : rightOperandNode.get(0); + rightOperandNode = rightOperandNode == null ? null : rightOperandNode.get("@value"); if (rightOperandNode == null || !targetRightOperand.equals(rightOperandNode.asText())) { String rightOperand = rightOperandNode == null ? "null" : rightOperandNode.asText(); - log.debug("Right operand '{}' odes not equal expected value '{}'.", rightOperand, targetRightOperand); + log.info("Right operand '{}' odes not equal expected value '{}'.", rightOperand, targetRightOperand); return false; } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java index 8ad1baa2..e9f4709a 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java @@ -296,12 +296,15 @@ public JsonNode buildAssetNegotiationBody(Partner partner, JsonNode dcatCatalogI // extract policy and information from offer // framework agreement and co has been checked during catalog request String assetId = dcatCatalogItem.get("@id").asText(); - JsonNode policyNode = dcatCatalogItem.get("odrl:hasPolicy"); + JsonNode policyNode = dcatCatalogItem.get(ODRL_NAMESPACE + "hasPolicy"); + if (policyNode.isArray()) { + policyNode = policyNode.get(0); + } ObjectNode targetIdObject = MAPPER.createObjectNode(); targetIdObject.put("@id", assetId); ((ObjectNode) policyNode).put("@context", "http://www.w3.org/ns/odrl.jsonld"); - ((ObjectNode) policyNode).set("odrl:target", targetIdObject); + ((ObjectNode) policyNode).set("target", targetIdObject); ((ObjectNode) policyNode).put("assigner", partner.getBpnl()); ObjectNode offerNode = MAPPER.createObjectNode(); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java index bef6bbfd..b7b25e90 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java @@ -27,13 +27,12 @@ import jakarta.json.JsonReader; import lombok.extern.slf4j.Slf4j; import org.eclipse.edc.jsonld.TitaniumJsonLd; -import org.eclipse.edc.jsonld.spi.JsonLdKeywords; import org.eclipse.edc.spi.monitor.Monitor; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.springframework.stereotype.Service; import java.io.File; -import java.io.IOException; import java.io.StringReader; import java.net.URI; import java.util.Map; @@ -41,27 +40,39 @@ import java.util.function.Supplier; @Slf4j +@Service public class JsonLdUtils { - private final static ObjectMapper MAPPER = new ObjectMapper(); + private final ObjectMapper MAPPER = new ObjectMapper(); - private final static TitaniumJsonLd TITANIUM_JSON_LD = new TitaniumJsonLd(new MonitorAdapter()); + private final TitaniumJsonLd TITANIUM_JSON_LD = new TitaniumJsonLd(new MonitorAdapter() { + }); - static { - TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + { TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.TX_POLICY_CONTEXT); - TITANIUM_JSON_LD.registerNamespace(JsonLdKeywords.VOCAB, EdcRequestBodyBuilder.EDC_NAMESPACE); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.DCAT_NAMESPACE); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.DSPACE_NAMESPACE); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.EDC_NAMESPACE); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.TX_AUTH_NAMESPACE); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.TX_NAMESPACE); + final String prefix = "json-ld" + File.separator; Map filesMap = Map.of( EdcRequestBodyBuilder.TX_POLICY_CONTEXT, prefix + "cx-policy-v1.jsonld", - EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, prefix + "odrl.jsonld" + EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, prefix + "odrl.jsonld", + EdcRequestBodyBuilder.DCAT_NAMESPACE, prefix + "dcat.jsonld", + EdcRequestBodyBuilder.DSPACE_NAMESPACE, prefix + "dspace.jsonld", + EdcRequestBodyBuilder.EDC_NAMESPACE, prefix + "edc-v1.jsonld", + EdcRequestBodyBuilder.TX_AUTH_NAMESPACE, prefix + "tx-auth-v1.jsonld", + EdcRequestBodyBuilder.TX_NAMESPACE, prefix + "tx-v1.jsonld" ); Function uriFunction = fileName -> { Resource resource = new ClassPathResource(fileName); try { return resource.getURI(); - } catch (IOException e) { + } catch (Exception e) { throw new RuntimeException(e); } }; @@ -71,7 +82,7 @@ public class JsonLdUtils { } } - public static ObjectNode expand(JsonNode node) { + public ObjectNode expand(JsonNode node) { JsonReader jsonReader = Json.createReader(new StringReader(node.toString())); var jakartaJson = jsonReader.readObject(); var expandedJakartaJson = TITANIUM_JSON_LD.expand(jakartaJson).getContent(); @@ -83,7 +94,7 @@ public static ObjectNode expand(JsonNode node) { } } - public static ObjectNode compact(JsonNode node) { + public ObjectNode compact(JsonNode node) { JsonReader jsonReader = Json.createReader(new StringReader(node.toString())); var jakartaJson = jsonReader.readObject(); var expandedJakartaJson = TITANIUM_JSON_LD.compact(jakartaJson).getContent(); diff --git a/backend/src/main/resources/json-ld/dspace.jsonld b/backend/src/main/resources/json-ld/dspace.jsonld index f475b235..f26eaff0 100644 --- a/backend/src/main/resources/json-ld/dspace.jsonld +++ b/backend/src/main/resources/json-ld/dspace.jsonld @@ -55,7 +55,7 @@ "odrl:leftOperand": { "@type": "@id" }, "odrl:operator": { "@type": "@id" }, "odrl:rightOperandReference": { "@type": "@id" }, - "odrl:profile": { "@container": "@set" } + "odrl:profile": { "@container": "@set" }, "odrl:assigner": { "@type": "@id" }, "odrl:assignee": { "@type": "@id" } } diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java similarity index 59% rename from backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java rename to backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java index 65e18002..2a07df78 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/JsonLdUtilsTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java @@ -18,7 +18,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.puris.backend.common.edc; +package org.eclipse.tractusx.puris.backend.common.edc.logic.service.util; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; @@ -42,24 +42,119 @@ void setUp() { } @ParameterizedTest - @ValueSource(strings = {test1, test2}) + @ValueSource(strings = {test0/*, test1, test2,test3*/}) public void testUtilClass(String input) throws Exception { + JsonLdUtils util = new JsonLdUtils(); // GIVEN var catalogJson = objectMapper.readTree(input); log.info("Input:\n" + catalogJson.toPrettyString()); //WHEN - var expanded = JsonLdUtils.expand(catalogJson); + var expanded = util.expand(catalogJson); log.info("Expanded first time:\n"+ expanded.toPrettyString()); - var compacted = JsonLdUtils.compact(expanded); + var compacted = util.compact(expanded); log.info("Compacted:\n" + compacted.toPrettyString()); - var expandedAgain = JsonLdUtils.expand(compacted); + var expandedAgain = util.expand(compacted); log.info("Expanded again:\n" + expandedAgain.toPrettyString()); // THEN assertEquals(expandedAgain, expanded); } + final static String test0 = "{\n" + + " \"@id\": \"0a5ad415-0d0d-4b04-afe7-172de85efe2e\",\n" + + " \"@type\": \"dcat:Catalog\",\n" + + " \"dspace:participantId\": \"BPNL1234567890ZZ\",\n" + + " \"dcat:dataset\": {\n" + + " \"@id\": \"DigitalTwinRegistryId@BPNL1234567890ZZ\",\n" + + " \"@type\": \"dcat:Dataset\",\n" + + " \"odrl:hasPolicy\": {\n" + + " \"@id\": \"QlBOTDQ0NDQ0NDQ0NDRYWF9jb250cmFjdGRlZmluaXRpb25fZm9yX2R0cg==:RGlnaXRhbFR3aW5SZWdpc3RyeUlkQEJQTkwxMjM0NTY3ODkwWlo=:OTU3ZWM4ZDktYWMwYi00MWFhLThhZDAtY2NmMmFlMTE2ZWQ1\",\n" + + " \"@type\": \"odrl:Offer\",\n" + + " \"odrl:permission\": {\n" + + " \"odrl:action\": {\n" + + " \"odrl:type\": \"http://www.w3.org/ns/odrl/2/use\"\n" + + " },\n" + + " \"odrl:constraint\": {\n" + + " \"odrl:and\": [\n" + + " {\n" + + " \"odrl:leftOperand\": \"BusinessPartnerNumber\",\n" + + " \"odrl:operator\": {\n" + + " \"@id\": \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\": \"BPNL4444444444XX\"\n" + + " },\n" + + " {\n" + + " \"odrl:leftOperand\": \"Membership\",\n" + + " \"odrl:operator\": {\n" + + " \"@id\": \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\": \"active\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"odrl:prohibition\": [],\n" + + " \"odrl:obligation\": []\n" + + " },\n" + + " \"dcat:distribution\": [\n" + + " {\n" + + " \"@type\": \"dcat:Distribution\",\n" + + " \"dct:format\": {\n" + + " \"@id\": \"HttpData-PULL\"\n" + + " },\n" + + " \"dcat:accessService\": {\n" + + " \"@id\": \"aca2887d-ffbf-4224-a16c-e247f1ac3982\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"@type\": \"dcat:Distribution\",\n" + + " \"dct:format\": {\n" + + " \"@id\": \"HttpData-PUSH\"\n" + + " },\n" + + " \"dcat:accessService\": {\n" + + " \"@id\": \"aca2887d-ffbf-4224-a16c-e247f1ac3982\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"dct:type\": {\n" + + " \"@id\": \"https://w3id.org/catenax/taxonomy#DigitalTwinRegistry\"\n" + + " },\n" + + " \"https://w3id.org/catenax/ontology/common#version\": \"3.0\",\n" + + " \"id\": \"DigitalTwinRegistryId@BPNL1234567890ZZ\"\n" + + " },\n" + + " \"dcat:service\": {\n" + + " \"@id\": \"aca2887d-ffbf-4224-a16c-e247f1ac3982\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://supplier-control-plane:9184/api/v1/dsp\"\n" + + " },\n" + + " \"participantId\": \"BPNL1234567890ZZ\",\n" + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\": \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\": \"http://purl.org/dc/terms/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\": \"https://w3id.org/dspace/v0.8/\"\n" + + " }\n" + + "}"; + final static String test1 = "{\n" + " \"@id\" : \"473e5307-c0c5-491f-96b4-68b9e25d4699\",\n" + @@ -389,4 +484,98 @@ public void testUtilClass(String input) throws Exception { "\n" + "}"; + final static String test3 = "{\n" + + " \"@id\": \"8f5aefa5-8646-42ae-b139-af8349ad55fe\",\n" + + " \"@type\": \"dcat:Catalog\",\n" + + " \"dspace:participantId\": \"BPNL4444444444XX\",\n" + + " \"dcat:dataset\": {\n" + + " \"@id\": \"DigitalTwinRegistryId@BPNL4444444444XX\",\n" + + " \"@type\": \"dcat:Dataset\",\n" + + " \"odrl:hasPolicy\": {\n" + + " \"@id\": \"QlBOTDEyMzQ1Njc4OTBaWl9jb250cmFjdGRlZmluaXRpb25fZm9yX2R0cg==:RGlnaXRhbFR3aW5SZWdpc3RyeUlkQEJQTkw0NDQ0NDQ0NDQ0WFg=:ZGU5ZDM3YjQtZDRmZS00MDk4LTg1NDEtNjM3MzAzMTM5MTky\",\n" + + " \"@type\": \"odrl:Offer\",\n" + + " \"odrl:permission\": {\n" + + " \"odrl:action\": {\n" + + " \"odrl:type\": \"http://www.w3.org/ns/odrl/2/use\"\n" + + " },\n" + + " \"odrl:constraint\": {\n" + + " \"odrl:and\": [\n" + + " {\n" + + " \"odrl:leftOperand\": \"BusinessPartnerNumber\",\n" + + " \"odrl:operator\": {\n" + + " \"@id\": \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\": \"BPNL1234567890ZZ\"\n" + + " },\n" + + " {\n" + + " \"odrl:leftOperand\": \"Membership\",\n" + + " \"odrl:operator\": {\n" + + " \"@id\": \"odrl:eq\"\n" + + " },\n" + + " \"odrl:rightOperand\": \"active\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"odrl:prohibition\": [],\n" + + " \"odrl:obligation\": []\n" + + " },\n" + + " \"dcat:distribution\": [\n" + + " {\n" + + " \"@type\": \"dcat:Distribution\",\n" + + " \"dct:format\": {\n" + + " \"@id\": \"HttpData-PULL\"\n" + + " },\n" + + " \"dcat:accessService\": {\n" + + " \"@id\": \"b915ab38-3496-4dc7-bdd8-320a64d3e993\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"@type\": \"dcat:Distribution\",\n" + + " \"dct:format\": {\n" + + " \"@id\": \"HttpData-PUSH\"\n" + + " },\n" + + " \"dcat:accessService\": {\n" + + " \"@id\": \"b915ab38-3496-4dc7-bdd8-320a64d3e993\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"dct:type\": {\n" + + " \"@id\": \"https://w3id.org/catenax/taxonomy#DigitalTwinRegistry\"\n" + + " },\n" + + " \"https://w3id.org/catenax/ontology/common#version\": \"3.0\",\n" + + " \"id\": \"DigitalTwinRegistryId@BPNL4444444444XX\"\n" + + " },\n" + + " \"dcat:service\": {\n" + + " \"@id\": \"b915ab38-3496-4dc7-bdd8-320a64d3e993\",\n" + + " \"@type\": \"dcat:DataService\",\n" + + " \"dcat:endpointDescription\": \"dspace:connector\",\n" + + " \"dcat:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\",\n" + + " \"dct:terms\": \"dspace:connector\",\n" + + " \"dct:endpointUrl\": \"http://customer-control-plane:8184/api/v1/dsp\"\n" + + " },\n" + + " \"participantId\": \"BPNL4444444444XX\",\n" + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\": \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\": \"http://purl.org/dc/terms/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\": \"https://w3id.org/dspace/v0.8/\"\n" + + " }\n" + + "}"; + } diff --git a/backend/src/test/resources/json-ld/dspace.jsonld b/backend/src/test/resources/json-ld/dspace.jsonld index f475b235..f26eaff0 100644 --- a/backend/src/test/resources/json-ld/dspace.jsonld +++ b/backend/src/test/resources/json-ld/dspace.jsonld @@ -55,7 +55,7 @@ "odrl:leftOperand": { "@type": "@id" }, "odrl:operator": { "@type": "@id" }, "odrl:rightOperandReference": { "@type": "@id" }, - "odrl:profile": { "@container": "@set" } + "odrl:profile": { "@container": "@set" }, "odrl:assigner": { "@type": "@id" }, "odrl:assignee": { "@type": "@id" } } From 46b2f3b68148c74229686121db6064a61faf2e21 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Tue, 28 May 2024 12:14:59 +0200 Subject: [PATCH 05/13] fix: unit tests --- .../logic/service/EdcAdapterServiceTest.java | 41 +++++++++++++++++++ .../logic/service/util/JsonLdUtilsTest.java | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterServiceTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterServiceTest.java index 2ba7ca21..a0edb92b 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterServiceTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterServiceTest.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.OkHttpClient; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; +import org.eclipse.tractusx.puris.backend.common.edc.logic.util.JsonLdUtils; import org.eclipse.tractusx.puris.backend.common.util.PatternStore; import org.eclipse.tractusx.puris.backend.common.util.VariablesService; import org.junit.jupiter.api.BeforeEach; @@ -104,10 +105,24 @@ public void correctConstraints_testContractPolicyConstraints_succeed() throws Js " },\n" + " \"odrl:prohibition\" : [ ],\n" + " \"odrl:obligation\" : [ ]\n" + + " }," + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\": \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\": \"http://purl.org/dc/terms/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\": \"https://w3id.org/dspace/v0.8/\"\n" + " }" + "}"; JsonNode validJsonNode = objectMapper.readTree(validJson); + JsonLdUtils jsonLdUtils = new JsonLdUtils(); + validJsonNode = jsonLdUtils.expand(validJsonNode); + System.out.println(validJsonNode.toPrettyString()); // when @@ -160,10 +175,23 @@ public void wrongConstraints_testContractPolicyConstraints_fails() throws JsonPr " },\n" + " \"odrl:prohibition\" : [ ],\n" + " \"odrl:obligation\" : [ ]\n" + + " }," + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\": \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\": \"http://purl.org/dc/terms/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\": \"https://w3id.org/dspace/v0.8/\"\n" + " }" + "}"; JsonNode invalidJsonNode = objectMapper.readTree(invalidJson); + JsonLdUtils jsonLdUtils = new JsonLdUtils(); + invalidJsonNode = jsonLdUtils.expand(invalidJsonNode); // when when(variablesService.getPurisFrameworkAgreementWithVersion()).thenReturn("Puris:1.0"); @@ -206,10 +234,23 @@ public void oneConstraint_testContractPolicyConstraints_fails() throws JsonProce " },\n" + " \"odrl:prohibition\" : [ ],\n" + " \"odrl:obligation\" : [ ]\n" + + " }," + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"dcat\": \"http://www.w3.org/ns/dcat#\",\n" + + " \"dct\": \"http://purl.org/dc/terms/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\",\n" + + " \"dspace\": \"https://w3id.org/dspace/v0.8/\"\n" + " }" + "}"; JsonNode invalidJsonNode = objectMapper.readTree(invalidJson); + JsonLdUtils jsonLdUtils = new JsonLdUtils(); + invalidJsonNode = jsonLdUtils.expand(invalidJsonNode); // when when(variablesService.getPurisFrameworkAgreementWithVersion()).thenReturn("Puris:1.0"); diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java index 2a07df78..3d716f7e 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java @@ -42,7 +42,7 @@ void setUp() { } @ParameterizedTest - @ValueSource(strings = {test0/*, test1, test2,test3*/}) + @ValueSource(strings = {test0, test1, test2,test3}) public void testUtilClass(String input) throws Exception { JsonLdUtils util = new JsonLdUtils(); // GIVEN From b43b278802e407bd21f7f862d1b7ffc7d9e55db6 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Tue, 18 Jun 2024 18:53:27 +0200 Subject: [PATCH 06/13] fix: added mock bean --- .../backend/masterdata/controller/PartnerControllerTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/masterdata/controller/PartnerControllerTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/masterdata/controller/PartnerControllerTest.java index 035cd384..e4295c26 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/masterdata/controller/PartnerControllerTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/masterdata/controller/PartnerControllerTest.java @@ -30,6 +30,7 @@ import org.eclipse.tractusx.puris.backend.masterdata.logic.dto.AddressDto; import org.eclipse.tractusx.puris.backend.masterdata.logic.dto.PartnerDto; import org.eclipse.tractusx.puris.backend.masterdata.logic.dto.SiteDto; +import org.eclipse.tractusx.puris.backend.masterdata.logic.service.MaterialPartnerRelationService; import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; import org.junit.jupiter.api.Test; import org.modelmapper.ModelMapper; @@ -59,6 +60,9 @@ public class PartnerControllerTest { @MockBean private PartnerService partnerService; + @MockBean + private MaterialPartnerRelationService mprService; + private final ModelMapper modelMapper = new ModelMapper(); private final String bpnl = "BPNL2222222222RR"; private final String edcUrl = "https://example.com"; From 676a8abe81c0a411fd6830159319f06488236725 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Wed, 19 Jun 2024 08:13:34 +0200 Subject: [PATCH 07/13] fix: added dataplane control settings --- local/docker-compose.yaml | 2 ++ local/tractus-x-edc/config/customer/data-plane.properties | 3 +++ local/tractus-x-edc/config/supplier/data-plane.properties | 3 +++ 3 files changed, 8 insertions(+) diff --git a/local/docker-compose.yaml b/local/docker-compose.yaml index e681c6c7..6f5c2fbc 100644 --- a/local/docker-compose.yaml +++ b/local/docker-compose.yaml @@ -167,6 +167,7 @@ services: container_name: customer-data-plane ports: - "127.0.0.1:8280:8280" + - "127.0.0.1:8281:8281" - "127.0.0.1:8283:8283" - "127.0.0.1:8285:8285" - "127.0.0.1:8299:8299" @@ -298,6 +299,7 @@ services: container_name: supplier-data-plane ports: - "127.0.0.1:9280:9280" + - "127.0.0.1:9281:9281" - "127.0.0.1:9283:9283" - "127.0.0.1:9285:9285" - "127.0.0.1:9299:9299" diff --git a/local/tractus-x-edc/config/customer/data-plane.properties b/local/tractus-x-edc/config/customer/data-plane.properties index 0ce49736..12e44d77 100644 --- a/local/tractus-x-edc/config/customer/data-plane.properties +++ b/local/tractus-x-edc/config/customer/data-plane.properties @@ -1,6 +1,9 @@ # API web.http.port=8280 web.http.path=/api +# control +web.http.control.port=8281 +web.http.control.path=/control # Public web.http.public.port=8285 web.http.public.path=/api/public diff --git a/local/tractus-x-edc/config/supplier/data-plane.properties b/local/tractus-x-edc/config/supplier/data-plane.properties index 95e01a79..a419f1b4 100644 --- a/local/tractus-x-edc/config/supplier/data-plane.properties +++ b/local/tractus-x-edc/config/supplier/data-plane.properties @@ -1,6 +1,9 @@ # API web.http.port=9280 web.http.path=/api +# control +web.http.control.port=9281 +web.http.control.path=/control # Public web.http.public.port=9285 web.http.public.path=/api/public From 6ed35dc14a12336312a8ada9f87b274f632693ec Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Wed, 19 Jun 2024 08:23:14 +0200 Subject: [PATCH 08/13] fix: blank lines --- .../common/edc/logic/service/EdcAdapterService.java | 2 -- .../common/edc/logic/util/EdcRequestBodyBuilder.java | 2 +- .../puris/backend/common/edc/logic/util/JsonLdUtils.java | 9 ++------- .../common/edc/logic/service/util/JsonLdUtilsTest.java | 1 - 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java index 46737999..85dcc775 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java @@ -35,13 +35,11 @@ import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Pattern; - /** * Service Layer of EDC Adapter. Builds and sends requests to a productEDC. * The EDC connection is configured using the application.properties file. diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java index e9f4709a..f03549fe 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java @@ -63,7 +63,7 @@ public class EdcRequestBodyBuilder { public static final String TX_AUTH_NAMESPACE = "https://w3id.org/tractusx/auth/"; public static final String DCAT_NAMESPACE = "http://www.w3.org/ns/dcat#"; public static final String DSPACE_NAMESPACE = "https://w3id.org/dspace/v0.8/"; - public static final String TX_POLICY_CONTEXT = "https://w3id.org/tractusx/policy/v1.0.0"; + public static final String CX_POLICY_CONTEXT = "https://w3id.org/tractusx/policy/v1.0.0"; /** * helper class to encapsulate PolicyConstraint diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java index b7b25e90..c9c555f6 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/JsonLdUtils.java @@ -31,7 +31,6 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Service; - import java.io.File; import java.io.StringReader; import java.net.URI; @@ -49,7 +48,7 @@ public class JsonLdUtils { }); { - TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.TX_POLICY_CONTEXT); + TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.CX_POLICY_CONTEXT); TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT); TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.DCAT_NAMESPACE); TITANIUM_JSON_LD.registerContext(EdcRequestBodyBuilder.DSPACE_NAMESPACE); @@ -59,7 +58,7 @@ public class JsonLdUtils { final String prefix = "json-ld" + File.separator; Map filesMap = Map.of( - EdcRequestBodyBuilder.TX_POLICY_CONTEXT, prefix + "cx-policy-v1.jsonld", + EdcRequestBodyBuilder.CX_POLICY_CONTEXT, prefix + "cx-policy-v1.jsonld", EdcRequestBodyBuilder.ODRL_REMOTE_CONTEXT, prefix + "odrl.jsonld", EdcRequestBodyBuilder.DCAT_NAMESPACE, prefix + "dcat.jsonld", EdcRequestBodyBuilder.DSPACE_NAMESPACE, prefix + "dspace.jsonld", @@ -106,8 +105,6 @@ public ObjectNode compact(JsonNode node) { } } - - private static class MonitorAdapter implements Monitor { @Override @@ -146,7 +143,5 @@ public void info(Supplier supplier, Throwable... errors) { public void debug(Supplier supplier, Throwable... errors) { log.debug(supplier.get(), (Object[]) errors); } - - } } diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java index 3938eac8..5781b4be 100644 --- a/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/util/JsonLdUtilsTest.java @@ -33,7 +33,6 @@ @Slf4j public class JsonLdUtilsTest { - private final ObjectMapper objectMapper = new ObjectMapper(); @BeforeEach From aa3a5bc76d1518a23dd181d577b2db6708c9461d Mon Sep 17 00:00:00 2001 From: --show-origin Date: Fri, 21 Jun 2024 08:58:39 -0700 Subject: [PATCH 09/13] fix(CatalogView): adapt to EDC payload changes --- frontend/src/hooks/edc/useCatalog.ts | 3 ++- frontend/src/models/types/edc/catalog.ts | 12 ++++++++---- frontend/src/views/CatalogView.tsx | 22 +++++++++++----------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/frontend/src/hooks/edc/useCatalog.ts b/frontend/src/hooks/edc/useCatalog.ts index 758ce811..a400a40b 100644 --- a/frontend/src/hooks/edc/useCatalog.ts +++ b/frontend/src/hooks/edc/useCatalog.ts @@ -32,11 +32,12 @@ export const useCatalog = (partner: Partner | null) => { } = useFetch(partner ? config.app.BACKEND_BASE_URL + 'edc/catalog?dspUrl=' + encodeURIComponent(partner.edcUrl) + '&partnerBpnl=' + encodeURIComponent(partner.bpnl) : undefined); + console.log(data); const catalog = data && !isErrorResponse(data) ? (data['dcat:dataset']?.map((item) => { return { assetId: item['@id'], - assetType: item['https://purl.org/dc/terms/type']['@id'], + assetType: item['dct:type']['@id'], assetVersion: item['https://w3id.org/catenax/ontology/common#version'], permission: item['odrl:hasPolicy'] && item['odrl:hasPolicy']['odrl:permission'], prohibitions: item['odrl:hasPolicy'] && item['odrl:hasPolicy']['odrl:prohibition'], diff --git a/frontend/src/models/types/edc/catalog.ts b/frontend/src/models/types/edc/catalog.ts index e9fe28c4..b593cdc5 100644 --- a/frontend/src/models/types/edc/catalog.ts +++ b/frontend/src/models/types/edc/catalog.ts @@ -31,10 +31,12 @@ export type CatalogOperation = { export type CatalogPermission = { 'odrl:target': string; 'odrl:action': { - 'odrl:type': string; + '@id': string; } 'odrl:constraint': { - 'odrl:leftOperand': string; + 'odrl:leftOperand': { + "@id": string; + }; 'odrl:operator': { '@id': string; }; @@ -43,7 +45,9 @@ export type CatalogPermission = { '@type': string, 'odrl:and': { '@type': string, - 'odrl:leftOperand': string; + 'odrl:leftOperand': { + "@id": string; + }; 'odrl:operator': { '@id': string; }; @@ -55,7 +59,7 @@ export type CatalogPermission = { export type RawCatalogData = { 'dcat:dataset': { '@id': string; - 'https://purl.org/dc/terms/type': { + 'dct:type': { '@id': string; } 'https://w3id.org/catenax/ontology/common#version': string; diff --git a/frontend/src/views/CatalogView.tsx b/frontend/src/views/CatalogView.tsx index b12b08ed..b5443b3d 100644 --- a/frontend/src/views/CatalogView.tsx +++ b/frontend/src/views/CatalogView.tsx @@ -19,15 +19,15 @@ under the License. SPDX-License-Identifier: Apache-2.0 */ -import { LoadingButton, Table } from '@catena-x/portal-shared-components'; -import { useCatalog } from '@hooks/edc/useCatalog'; -import { useRef, useState } from 'react'; -import { CatalogOperation, CatalogPermission } from '@models/types/edc/catalog'; -import { Box, Stack } from '@mui/material'; -import { Partner } from '@models/types/edc/partner'; -import { useAllPartners } from '@hooks/useAllPartners'; -import { LabelledAutoComplete } from '@components/ui/LabelledAutoComplete'; -import { getCatalogOperator } from '@util/helpers'; +import {LoadingButton, Table} from '@catena-x/portal-shared-components'; +import {useCatalog} from '@hooks/edc/useCatalog'; +import {useRef, useState} from 'react'; +import {CatalogOperation, CatalogPermission} from '@models/types/edc/catalog'; +import {Box, Stack} from '@mui/material'; +import {Partner} from '@models/types/edc/partner'; +import {useAllPartners} from '@hooks/useAllPartners'; +import {LabelledAutoComplete} from '@components/ui/LabelledAutoComplete'; +import {getCatalogOperator} from '@util/helpers'; const PermissionList = ({ permission }: { permission: CatalogPermission }) => { return ( @@ -35,7 +35,7 @@ const PermissionList = ({ permission }: { permission: CatalogPermission }) => { {permission['odrl:constraint'] && 'odrl:and' in permission['odrl:constraint'] && permission['odrl:constraint']['odrl:and'].map((constraint) => { - const permissionString = `${constraint['odrl:leftOperand']} ${getCatalogOperator(constraint['odrl:operator']['@id'])} ${ + const permissionString = `${constraint['odrl:leftOperand']['@id']} ${getCatalogOperator(constraint['odrl:operator']['@id'])} ${ constraint['odrl:rightOperand'] }`; return
{permissionString}
; @@ -76,7 +76,7 @@ const CatalogList = ({ catalog, title }: CatalogListProps) => { field: 'permission.action', width: 70, renderCell: (row) => { - const actionString = row.row.permission['odrl:action']['odrl:type']; + const actionString = row.row.permission['odrl:action']['@id']; const action = actionString.split('/')[actionString.split('/').length - 1]; return
{action}
; }, From 92a67caa2109b47bf7d51f15713c13ec4e4e7fd7 Mon Sep 17 00:00:00 2001 From: --show-origin Date: Fri, 21 Jun 2024 08:59:34 -0700 Subject: [PATCH 10/13] chore(README.md): bump edc version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7cadc14c..1b0260c6 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Beside the dependencies provided in the Helm Chart, the following dependencies h | Application | App Version | Chart Version | |-------------------------------------------------------------------------------------------------------------------|-------------|---------------| -| [Tractus-X Connector](https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector) | 0.7.1 | 0.7.1 | +| [Tractus-X Connector](https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector) | 0.7.2 | 0.7.2 | | [Digital Twin Registry](https://github.com/eclipse-tractusx/sldt-digital-twin-registry/tree/main/charts/registry) | 0.4.3 | 0.4.11 | ## Known Knows From a1072c27b85a4056df4b53f7c22a5fd7346e9c7d Mon Sep 17 00:00:00 2001 From: --show-origin Date: Fri, 21 Jun 2024 09:08:27 -0700 Subject: [PATCH 11/13] chore(NOTICE.md): updated test path for json-ld contexts --- NOTICE.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/NOTICE.md b/NOTICE.md index dccf7a5e..80122a24 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -57,37 +57,37 @@ feather (4.29) ### Remote Contexts -#### cx-policy-v1 ([main](./backend/src/main/resources/json-ld/cx-policy-v1.jsonld), [test](./backend/src/main/resources/json-ld/cx-policy-v1.jsonld)) +#### cx-policy-v1 ([main](./backend/src/main/resources/json-ld/cx-policy-v1.jsonld), [test](./backend/src/test/resources/json-ld/cx-policy-v1.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://github.com/eclipse-tractusx/tractusx-profiles/blob/main/LICENSE * Source URL: https://github.com/eclipse-tractusx/tractusx-profiles/blob/main/cx/credentials/schema/context/policy.context.json -#### dspace ([main](./backend/src/main/resources/json-ld/dspace.jsonld), [test](./backend/src/main/resources/json-ld/dspace.jsonld)) +#### dspace ([main](./backend/src/main/resources/json-ld/dspace.jsonld), [test](./backend/src/test/resources/json-ld/dspace.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/LICENSE * Source URL: https://international-data-spaces-association.github.io/ids-specification/2024-1/common/schema/context.json -#### edc-v1 ([main](./backend/src/main/resources/json-ld/edc-v1.jsonld), [test](./backend/src/main/resources/json-ld/edc-v1.jsonld)) +#### edc-v1 ([main](./backend/src/main/resources/json-ld/edc-v1.jsonld), [test](./backend/src/test/resources/json-ld/edc-v1.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://github.com/eclipse-tractusx/tractusx-edc/blob/d728d8311196572b0d34cef7be788c7ef06f46e5/LICENSE * Source URL: https://github.com/eclipse-tractusx/tractusx-edc/blob/d728d8311196572b0d34cef7be788c7ef06f46e5/core/json-ld-core/src/main/resources/document/edc-v1.jsonld -#### odrl ([main](./backend/src/main/resources/json-ld/odrl.jsonld), [test](./backend/src/main/resources/json-ld/odrl.jsonld)) +#### odrl ([main](./backend/src/main/resources/json-ld/odrl.jsonld), [test](./backend/src/test/resources/json-ld/odrl.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://www.w3.org/copyright/software-license-2015/ * Source URL: https://www.w3.org/ns/odrl.jsonld -#### tx-auth-v1 ([main](./backend/src/main/resources/json-ld/tx-auth-v1.jsonld), [test](./backend/src/main/resources/json-ld/tx-auth-v1.jsonld)) +#### tx-auth-v1 ([main](./backend/src/main/resources/json-ld/tx-auth-v1.jsonld), [test](./backend/src/test/resources/json-ld/tx-auth-v1.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://github.com/eclipse-tractusx/tractusx-edc/blob/d728d8311196572b0d34cef7be788c7ef06f46e5/LICENSE * Source URL: https://github.com/eclipse-tractusx/tractusx-edc/blob/d728d8311196572b0d34cef7be788c7ef06f46e5/core/json-ld-core/src/main/resources/document/tx-auth-v1.jsonld -#### tx-v1 ([main](./backend/src/main/resources/json-ld/tx-v1.jsonld), [test](./backend/src/main/resources/json-ld/tx-v1.jsonld)) +#### tx-v1 ([main](./backend/src/main/resources/json-ld/tx-v1.jsonld), [test](./backend/src/test/resources/json-ld/tx-v1.jsonld)) * SPDX-License-Identifier: Apache-2.0 * SPDX-FileCopyrightText: https://github.com/eclipse-tractusx/tractusx-edc/blob/d728d8311196572b0d34cef7be788c7ef06f46e5/LICENSE From 9127f1721e01c5a4151d8aad5296e3ca288dc121 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Tue, 9 Jul 2024 08:54:12 +0200 Subject: [PATCH 12/13] chore: partial merge --- .act/pr_event.json | 5 + .github/pull_request_template.md | 26 ++ LICENSE_non_code | 395 ++++++++++++++++++ .../common/edc/domain/model/AssetType.java | 39 ++ ...ndCapacityNotificationContractMapping.java | 29 ++ ...NotificationContractMappingRepository.java | 32 ++ ...acityNotificationRequestApiController.java | 79 ++++ ...mandAndCapacityNotificationSammMapper.java | 94 +++++ .../DemandAndCapacityNotificationSamm.java | 138 ++++++ ...dCapacityNotifcationRequestApiService.java | 114 +++++ .../erpadapter/ErpAdapterConfiguration.java | 43 ++ .../service/ErpAdapterRequestClient.java | 75 ++++ .../service/ErpAdapterRequestClientTest.java | 133 ++++++ 13 files changed, 1202 insertions(+) create mode 100644 .act/pr_event.json create mode 100644 .github/pull_request_template.md create mode 100644 LICENSE_non_code create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/AssetType.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/DemandAndCapacityNotificationContractMapping.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/repository/DemandAndCapacityNotificationContractMappingRepository.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationRequestApiController.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/adapter/DemandAndCapacityNotificationSammMapper.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/demandandcapacitynotficationsamm/DemandAndCapacityNotificationSamm.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotifcationRequestApiService.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/ErpAdapterConfiguration.java create mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClient.java create mode 100644 backend/src/test/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClientTest.java diff --git a/.act/pr_event.json b/.act/pr_event.json new file mode 100644 index 00000000..ded17d13 --- /dev/null +++ b/.act/pr_event.json @@ -0,0 +1,5 @@ +{ + "repository": { + "default_branch": "main" + } +} diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..7f55ebf1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,26 @@ + + +## Description + + + + +## Pre-review checks + +Please ensure to do as many of the following checks as possible, before asking for committer review: + +- [ ] DEPENDENCIES are up-to-date. [Dash license tool](https://github.com/eclipse/dash-licenses). Committers can open IP issues for restricted libs. +- [ ] [Copyright and license header](https://eclipse-tractusx.github.io/docs/release/trg-7/trg-7-02) are present on all affected files +- [ ] If helm chart has been changed, the chart version has been bumped to either next major, minor or patch level (compared to released chart). diff --git a/LICENSE_non_code b/LICENSE_non_code new file mode 100644 index 00000000..4ea99c21 --- /dev/null +++ b/LICENSE_non_code @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/AssetType.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/AssetType.java new file mode 100644 index 00000000..f9be1cc3 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/AssetType.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.puris.backend.common.edc.domain.model; + +public enum AssetType { + DTR("none", "none"), + ITEM_STOCK_SUBMODEL("urn:samm:io.catenax.item_stock:2.0.0#ItemStock", "$value"), + PRODUCTION_SUBMODEL("urn:samm:io.catenax.planned_production_output:2.0.0#PlannedProductionOutput", "$value"), + DEMAND_SUBMODEL("urn:samm:io.catenax.short_term_material_demand:1.0.0#ShortTermMaterialDemand", "$value"), + DELIVERY_SUBMODEL("urn:samm:io.catenax.delivery_information:2.0.0#DeliveryInformation", "$value"), + NOTIFICATION("urn:samm:io.catenax.demand_and_capacity_notification:2.0.0#DemandAndCapacityNotification", "none"), + PART_TYPE_INFORMATION_SUBMODEL("urn:samm:io.catenax.part_type_information:1.0.0#PartTypeInformation", "$value"); + + public final String URN_SEMANTIC_ID; + public final String REPRESENTATION; + + AssetType(String URN_SEMANTIC_ID, String REPRESENTATION) { + this.URN_SEMANTIC_ID = URN_SEMANTIC_ID; + this.REPRESENTATION = REPRESENTATION; + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/DemandAndCapacityNotificationContractMapping.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/DemandAndCapacityNotificationContractMapping.java new file mode 100644 index 00000000..035405bb --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/DemandAndCapacityNotificationContractMapping.java @@ -0,0 +1,29 @@ +/* +Copyright (c) 2024 Volkswagen AG +Copyright (c) 2024 Contributors to the Eclipse Foundation + +See the NOTICE file(s) distributed with this work for additional +information regarding copyright ownership. + +This program and the accompanying materials are made available under the +terms of the Apache License, Version 2.0 which is available at +https://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. + +SPDX-License-Identifier: Apache-2.0 +*/ +package org.eclipse.tractusx.puris.backend.common.edc.domain.model; + +import jakarta.persistence.Entity; +import lombok.ToString; + +@Entity +@ToString(callSuper = true) +public class DemandAndCapacityNotificationContractMapping extends ContractMapping { + +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/repository/DemandAndCapacityNotificationContractMappingRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/repository/DemandAndCapacityNotificationContractMappingRepository.java new file mode 100644 index 00000000..90ee2618 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/repository/DemandAndCapacityNotificationContractMappingRepository.java @@ -0,0 +1,32 @@ +/* +Copyright (c) 2024 Volkswagen AG +Copyright (c) 2024 Contributors to the Eclipse Foundation + +See the NOTICE file(s) distributed with this work for additional +information regarding copyright ownership. + +This program and the accompanying materials are made available under the +terms of the Apache License, Version 2.0 which is available at +https://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. + +SPDX-License-Identifier: Apache-2.0 +*/ +package org.eclipse.tractusx.puris.backend.common.edc.domain.repository; + +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.ContractMapping; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.DemandAndCapacityNotificationContractMapping; +import org.springframework.stereotype.Repository; + +@Repository +public interface DemandAndCapacityNotificationContractMappingRepository extends GeneralContractMappingRepository { + @Override + default Class getType() { + return DemandAndCapacityNotificationContractMapping.class; + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationRequestApiController.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationRequestApiController.java new file mode 100644 index 00000000..48655e66 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationRequestApiController.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023, 2024 Volkswagen AG + * Copyright (c) 2023, 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.eclipse.tractusx.puris.backend.demandandcapacitynotification.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.puris.backend.common.util.PatternStore; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.dto.demandandcapacitynotficationsamm.DemandAndCapacityNotificationSamm; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.service.DemandAndCapacityNotifcationRequestApiService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.regex.Pattern; + +@RestController +@RequestMapping("demand-and-capacity-notification") +@Slf4j +/** + * This class offers the endpoint for requesting the DemandAndCapacityNotification Submodel 2.0.0 + */ +public class DemandAndCapacityNotificationRequestApiController { + + @Autowired + private DemandAndCapacityNotifcationRequestApiService demandAndCapacityNotificationRequestApiService; + + private final Pattern bpnlPattern = PatternStore.BPNL_PATTERN; + + @Autowired + private ObjectMapper objectMapper; + + @Operation(summary = "This endpoint receives the DemandAndCapacityNotification 2.0.0 requests") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Ok"), + @ApiResponse(responseCode = "400", description = "Bad Request"), + @ApiResponse(responseCode = "500", description = "Internal Server Error") + }) + @PostMapping("request") + public ResponseEntity postDemandAndCapacityNotification( + @RequestHeader("edc-bpn") String bpnl, + @RequestBody String body) + { + if (!bpnlPattern.matcher(bpnl).matches()) { + log.warn("Rejecting request at DemandAndCapacityNotification request 2.0.0 endpoint. Invalid BPNL"); + return ResponseEntity.badRequest().build(); + } + try { + var data = objectMapper.readTree(body); + log.info("Received POST request for DemandAndCapacityNotification 2.0.0 with BPNL: " + bpnl); + var notification = objectMapper.readValue( + data.get("content").get("demandAndCapacityNotification").toString(), + DemandAndCapacityNotificationSamm.class); + demandAndCapacityNotificationRequestApiService.handleIncomingNotification(bpnl, notification); + } catch (Exception e) { + log.warn("Rejecting invalid request body at DemandAndCapacityNotification request 2.0.0 endpoint"); + return ResponseEntity.badRequest().build(); + } + return ResponseEntity.ok(null); + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/adapter/DemandAndCapacityNotificationSammMapper.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/adapter/DemandAndCapacityNotificationSammMapper.java new file mode 100644 index 00000000..8c7b2710 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/adapter/DemandAndCapacityNotificationSammMapper.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.adapter; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.OwnDemandAndCapacityNotification; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.ReportedDemandAndCapacityNotification; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.dto.demandandcapacitynotficationsamm.DemandAndCapacityNotificationSamm; +import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; +import org.eclipse.tractusx.puris.backend.masterdata.logic.service.MaterialPartnerRelationService; +import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DemandAndCapacityNotificationSammMapper { + @Autowired + private MaterialPartnerRelationService mprService; + @Autowired + private PartnerService partnerService; + + public DemandAndCapacityNotificationSamm ownNotificationToSamm(OwnDemandAndCapacityNotification notification) { + List affectedMaterialGlobalAssetIds = notification.getMaterials().stream().map(mat -> mat.getMaterialNumberCx()).collect(Collectors.toList()); + List affectedSitesBpnsSender = notification.getAffectedSitesSender().stream().map(site -> site.getBpns()).collect(Collectors.toList()); + List affectedSitesBpnsRecipient = notification.getAffectedSitesRecipient().stream().map(site -> site.getBpns()).collect(Collectors.toList()); + var builder = DemandAndCapacityNotificationSamm.builder(); + var samm = builder + .notificationId(notification.getNotificationId().toString()) + .relatedNotificationId(notification.getRelatedNotificationId() != null ? notification.getRelatedNotificationId().toString() : null) + .sourceNotificationId(notification.getSourceNotificationId() != null ? notification.getSourceNotificationId().toString() : null) + .text(notification.getText()) + .leadingRootCause(notification.getLeadingRootCause()) + .effect(notification.getEffect()) + .status(notification.getStatus()) + .materialGlobalAssetId(affectedMaterialGlobalAssetIds) + .affectedSitesSender(affectedSitesBpnsSender) + .affectedSitesRecipient(affectedSitesBpnsRecipient) + .startDateOfEffect(notification.getStartDateOfEffect()) + .expectedEndDateOfEffect(notification.getExpectedEndDateOfEffect()) + .contentChangedAt(notification.getContentChangedAt()) + .build(); + return samm; + } + + public ReportedDemandAndCapacityNotification sammToReportedDemandAndCapacityNotification(DemandAndCapacityNotificationSamm samm, Partner partner) { + var builder = ReportedDemandAndCapacityNotification.builder(); + var materials = samm.getMaterialGlobalAssetId().stream() + .map(partnerMaterialNumberCx -> mprService.findByPartnerAndPartnerCXNumber(partner, partnerMaterialNumberCx).getMaterial()) + .collect(Collectors.toList()); + var affectedSitesSender = partner.getSites().stream() + .filter(site -> samm.getAffectedSitesSender().contains(site.getBpns())) + .collect(Collectors.toList()); + var affectedSitesBpnsRecipient = partnerService.getOwnPartnerEntity().getSites().stream() + .filter(site -> samm.getAffectedSitesRecipient().contains(site.getBpns())) + .collect(Collectors.toList()); + var notification = builder + .notificationId(UUID.fromString(samm.getNotificationId())) + .relatedNotificationId(samm.getRelatedNotificationId() != null ? UUID.fromString(samm.getRelatedNotificationId()) : null) + .sourceNotificationId(samm.getSourceNotificationId() != null ? UUID.fromString(samm.getSourceNotificationId()) : null) + .text(samm.getText()) + .leadingRootCause(samm.getLeadingRootCause()) + .effect(samm.getEffect()) + .status(samm.getStatus()) + .startDateOfEffect(samm.getStartDateOfEffect()) + .expectedEndDateOfEffect(samm.getExpectedEndDateOfEffect()) + .partner(partner) + .materials(materials) + .affectedSitesSender(affectedSitesSender) + .affectedSitesRecipient(affectedSitesBpnsRecipient) + .contentChangedAt(samm.getContentChangedAt()) + .build(); + return notification; + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/demandandcapacitynotficationsamm/DemandAndCapacityNotificationSamm.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/demandandcapacitynotficationsamm/DemandAndCapacityNotificationSamm.java new file mode 100644 index 00000000..3ad78687 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/demandandcapacitynotficationsamm/DemandAndCapacityNotificationSamm.java @@ -0,0 +1,138 @@ +/* +Copyright (c) 2024 Volkswagen AG +Copyright (c) 2024 Contributors to the Eclipse Foundation + +See the NOTICE file(s) distributed with this work for additional +information regarding copyright ownership. + +This program and the accompanying materials are made available under the +terms of the Apache License, Version 2.0 which is available at +https://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. + +SPDX-License-Identifier: Apache-2.0 +*/ +package org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.dto.demandandcapacitynotficationsamm; + +import org.eclipse.tractusx.puris.backend.common.util.PatternStore; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.EffectEnumeration; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.LeadingRootCauseEnumeration; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.StatusEnumeration; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@NoArgsConstructor +@SuperBuilder +@ToString +public class DemandAndCapacityNotificationSamm { + @NotNull + @Pattern(regexp = PatternStore.URN_OR_UUID_STRING) + private String notificationId; + @Pattern(regexp = PatternStore.URN_OR_UUID_STRING) + private String relatedNotificationId; + @Pattern(regexp = PatternStore.URN_OR_UUID_STRING) + private String sourceNotificationId; + + private String text; + @NotNull + private LeadingRootCauseEnumeration leadingRootCause; + @NotNull + private EffectEnumeration effect; + @NotNull + private Date startDateOfEffect; + private Date expectedEndDateOfEffect; + + private List<@Pattern(regexp = PatternStore.URN_OR_UUID_STRING) String> materialGlobalAssetId; + private List<@Pattern(regexp = PatternStore.NON_EMPTY_NON_VERTICAL_WHITESPACE_STRING) String> materialNumberSupplier; + private List<@Pattern(regexp = PatternStore.NON_EMPTY_NON_VERTICAL_WHITESPACE_STRING) String> materialNumberCustomer; + + private List<@Pattern(regexp = PatternStore.BPNS_STRING) String> affectedSitesSender; + private List<@Pattern(regexp = PatternStore.BPNS_STRING) String> affectedSitesRecipient; + + @NotNull + private StatusEnumeration status; + @NotNull + private Date contentChangedAt; + + @JsonCreator + public DemandAndCapacityNotificationSamm( + @JsonProperty(value = "affectedSitesSender") List affectedSitesSender, + @JsonProperty(value = "affectedSitesRecipient") List affectedSitesRecipient, + @JsonProperty(value = "leadingRootCause") LeadingRootCauseEnumeration leadingRootCause, + @JsonProperty(value = "effect") EffectEnumeration effect, + @JsonProperty(value = "text") String text, + @JsonProperty(value = "materialGlobalAssetId") List materialGlobalAssetId, + @JsonProperty(value = "startDateOfEffect") Date startDateOfEffect, + @JsonProperty(value = "expectedEndDateOfEffect") Date expectedEndDateOfEffect, + @JsonProperty(value = "status") StatusEnumeration status, + @JsonProperty(value = "contentChangedAt") Date contentChangedAt, + @JsonProperty(value = "sourceNotificationId") String sourceNotificationId, + @JsonProperty(value = "materialNumberSupplier") List materialNumberSupplier, + @JsonProperty(value = "materialNumberCustomer") List materialNumberCustomer, + @JsonProperty(value = "notificationId") String notificationId, + @JsonProperty(value = "relatedNotificationId") String relatedNotificationId) { + this.affectedSitesSender = affectedSitesSender; + this.affectedSitesRecipient = affectedSitesRecipient; + this.leadingRootCause = leadingRootCause; + this.effect = effect; + this.text = text; + this.materialGlobalAssetId = materialGlobalAssetId; + this.startDateOfEffect = startDateOfEffect; + this.expectedEndDateOfEffect = expectedEndDateOfEffect; + this.status = status; + this.contentChangedAt = contentChangedAt; + this.sourceNotificationId = sourceNotificationId; + this.materialNumberSupplier = materialNumberSupplier; + this.materialNumberCustomer = materialNumberCustomer; + this.notificationId = notificationId; + this.relatedNotificationId = relatedNotificationId; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final DemandAndCapacityNotificationSamm that = (DemandAndCapacityNotificationSamm) o; + return Objects.equals(affectedSitesSender, that.affectedSitesSender) + && Objects.equals(affectedSitesRecipient, that.affectedSitesRecipient) + && Objects.equals(leadingRootCause, that.leadingRootCause) && Objects.equals(effect, that.effect) + && Objects.equals(text, that.text) && Objects.equals(materialGlobalAssetId, that.materialGlobalAssetId) + && Objects.equals(startDateOfEffect, that.startDateOfEffect) + && Objects.equals(expectedEndDateOfEffect, that.expectedEndDateOfEffect) + && Objects.equals(status, that.status) && Objects.equals(contentChangedAt, that.contentChangedAt) + && Objects.equals(sourceNotificationId, that.sourceNotificationId) + && Objects.equals(materialNumberSupplier, that.materialNumberSupplier) + && Objects.equals(materialNumberCustomer, that.materialNumberCustomer) + && Objects.equals(notificationId, that.notificationId) + && Objects.equals(relatedNotificationId, that.relatedNotificationId); + } + + @Override + public int hashCode() { + return Objects.hash(affectedSitesSender, affectedSitesRecipient, leadingRootCause, effect, text, + materialGlobalAssetId, startDateOfEffect, expectedEndDateOfEffect, status, contentChangedAt, + sourceNotificationId, materialNumberSupplier, materialNumberCustomer, notificationId, + relatedNotificationId); + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotifcationRequestApiService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotifcationRequestApiService.java new file mode 100644 index 00000000..d4d7fd6f --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotifcationRequestApiService.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.service; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import java.util.Date; +import java.util.UUID; +import javax.management.openmbean.KeyAlreadyExistsException; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; +import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcAdapterService; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.OwnDemandAndCapacityNotification; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.ReportedDemandAndCapacityNotification; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.adapter.DemandAndCapacityNotificationSammMapper; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.dto.demandandcapacitynotficationsamm.DemandAndCapacityNotificationSamm; +import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; +import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DemandAndCapacityNotifcationRequestApiService { + @Autowired + private PartnerService partnerService; + @Autowired + private ReportedDemandAndCapacityNotificationService reportedDemandAndCapacityNotificationService; + @Autowired + private EdcAdapterService edcAdapterService; + @Autowired + private DemandAndCapacityNotificationSammMapper sammMapper; + @Autowired + private ObjectMapper objectMapper; + + public static final String DEMAND_AND_CAPACITY_NOTIFICATION_CONTEXT = "CX-DemandAndCapacityNotification:2.0"; + public static final String MESSAGE_HEADER_VERSION = "3.0.0"; + + public ReportedDemandAndCapacityNotification handleIncomingNotification(String bpnl, DemandAndCapacityNotificationSamm samm) { + Partner partner = partnerService.findByBpnl(bpnl); + if (partner == null) { + log.error("Unknown Partner BPNL"); + return null; + } + var notification = sammMapper.sammToReportedDemandAndCapacityNotification(samm, partner); + var existingNotification = reportedDemandAndCapacityNotificationService.findByNotificationId(notification.getNotificationId()); + if (existingNotification != null) { + log.info("Updating existing Notification"); + notification.setUuid(existingNotification.getUuid()); + if (reportedDemandAndCapacityNotificationService.update(notification) == null) { + log.error("Error updating Notification"); + return null; + } + return notification; + } + try { + log.info("Creating new Notification"); + return reportedDemandAndCapacityNotificationService.create(notification); + } catch (KeyAlreadyExistsException e) { + log.error("Notification already exists", e); + return null; + } catch (IllegalArgumentException e) { + log.error("Invalid Notification: {}", notification.toString()); + return null; + } + } + + public void sendDemandAndCapacityNotification(OwnDemandAndCapacityNotification notification){ + var partner = notification.getPartner(); + var body = createNotificationRequestBody(notification); + try { + edcAdapterService.doNotificationPostRequest(AssetType.NOTIFICATION, partner, body, 1); + log.info("Successfully sent Notification to partner " + partner.getBpnl()); + } catch (Exception e) { + log.error("Error in ReportedNotificationRequest for partner " + partner.getBpnl(), e); + } + } + + private JsonNode createNotificationRequestBody(OwnDemandAndCapacityNotification notification) { + var ownPartnerEntity = partnerService.getOwnPartnerEntity(); + var body = objectMapper.createObjectNode(); + var header = objectMapper.createObjectNode(); + body.set("header", header); + header.put("senderBpn", ownPartnerEntity.getBpnl()); + header.put("receiverBpn", notification.getPartner().getBpnl()); + header.put("context", DEMAND_AND_CAPACITY_NOTIFICATION_CONTEXT); + header.put("messageId", UUID.randomUUID().toString()); + header.put("sentDateTime", new Date().toString()); + header.put("version", MESSAGE_HEADER_VERSION); + var content = objectMapper.createObjectNode(); + body.set("content", content); + var samm = sammMapper.ownNotificationToSamm(notification); + content.set("demandAndCapacityNotification", objectMapper.convertValue(samm, JsonNode.class)); + return body; + } +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/ErpAdapterConfiguration.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/ErpAdapterConfiguration.java new file mode 100644 index 00000000..edcc6871 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/ErpAdapterConfiguration.java @@ -0,0 +1,43 @@ +package org.eclipse.tractusx.puris.backend.erpadapter; + +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Getter +public class ErpAdapterConfiguration { + + /** + * Toggles usage of the ERP adapter + */ + @Value("${puris.erpadapter.enabled}") + private boolean erpAdapterEnabled; + + /** + * The URL of the ERP adapter + */ + @Value("${puris.erpadapter.url}") + private String erpAdapterUrl; + + /** + * The URL under which we expect responses from + * the ERP adapter + */ + @Value("${puris.baseurl}" + "${server.servlet.context-path}" + "/erp-adapter") + private String erpResponseUrl; + + /** + * The auth-key used when accessing the ERP adapter's + * request interface + */ + @Value("${puris.erpadapter.authkey}") + private String erpAdapterAuthKey; + + /** + * The auth-secret used when accessing the ERP adapter's + * request interface + */ + @Value("${puris.erpadapter.authsecret}") + private String erpAdapterAuthSecret; +} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClient.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClient.java new file mode 100644 index 00000000..27401ea2 --- /dev/null +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClient.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.puris.backend.erpadapter.logic.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.eclipse.tractusx.puris.backend.erpadapter.ErpAdapterConfiguration; +import org.eclipse.tractusx.puris.backend.erpadapter.domain.model.ErpAdapterRequest; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +@Slf4j +@RequiredArgsConstructor +public class ErpAdapterRequestClient { + + private final OkHttpClient client = new OkHttpClient(); + + private final ObjectMapper mapper = new ObjectMapper(); + + private final ErpAdapterConfiguration erpAdapterConfiguration; + + public Integer sendRequest(ErpAdapterRequest erpAdapterRequest){ + HttpUrl.Builder urlBuilder = HttpUrl.parse(erpAdapterConfiguration.getErpAdapterUrl()).newBuilder(); + urlBuilder.addQueryParameter("bpnl", erpAdapterRequest.getPartnerBpnl()); + urlBuilder.addQueryParameter("request-type", erpAdapterRequest.getRequestType()); + urlBuilder.addQueryParameter("request-id", erpAdapterRequest.getId().toString()); + urlBuilder.addQueryParameter("samm-version", erpAdapterRequest.getSammVersion()); + urlBuilder.addQueryParameter("request-timestamp", String.valueOf(erpAdapterRequest.getRequestDate().getTime())); + + ObjectNode requestBody = mapper.createObjectNode(); + + requestBody.put("material", erpAdapterRequest.getOwnMaterialNumber()); + requestBody.put("direction", erpAdapterRequest.getDirectionCharacteristic().toString()); + requestBody.put("responseUrl", erpAdapterConfiguration.getErpResponseUrl()); + + RequestBody body = RequestBody.create(requestBody.toString(), MediaType.parse("application/json")); + + Request request = new Request.Builder() + .post(body) + .url(urlBuilder.build()) + .header(erpAdapterConfiguration.getErpAdapterAuthKey(), erpAdapterConfiguration.getErpAdapterAuthSecret()) + .header("Content-Type", "application/json") + .build(); + try (var response = client.newCall(request).execute()) { + return response.code(); + } catch (IOException e) { + log.error("Error while sending ErpAdapterRequest", e); + return null; + } + + } +} diff --git a/backend/src/test/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClientTest.java b/backend/src/test/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClientTest.java new file mode 100644 index 00000000..6b018e5e --- /dev/null +++ b/backend/src/test/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestClientTest.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2024 Volkswagen AG + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.puris.backend.erpadapter.logic.service; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; +import org.assertj.core.api.Assertions; +import org.eclipse.tractusx.puris.backend.erpadapter.ErpAdapterConfiguration; +import org.eclipse.tractusx.puris.backend.erpadapter.domain.model.ErpAdapterRequest; +import org.eclipse.tractusx.puris.backend.stock.logic.dto.itemstocksamm.DirectionCharacteristic; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import java.io.InputStream; +import java.util.Date; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@ExtendWith(MockitoExtension.class) +public class ErpAdapterRequestClientTest { + + private MockWebServer mockWebServer; + + @Mock + private ErpAdapterConfiguration erpAdapterConfiguration; + + @InjectMocks + private ErpAdapterRequestClient erpAdapterRequestClient; + + private static final String erpResponseUrl = "http://localhost:8081/catena/erpadapter"; + + private static final String matNbrCustomer = "MNR-7307-AU340474.002"; + + private static final String supplierPartnerBpnl = "BPNL1234567890ZZ"; + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + private static final String apiKey = "x-api-key"; + + private static final String apiSecret = "my-secret"; + + private static final String requestType = "itemstock"; + + private static final String sammVersion = "2.0"; + + @BeforeEach + public void setUp() throws Exception { + mockWebServer = new MockWebServer(); + mockWebServer.start(); + erpAdapterRequestClient = new ErpAdapterRequestClient(erpAdapterConfiguration); + } + + @AfterEach + public void tearDown() throws Exception { + mockWebServer.shutdown(); + } + + @Test + public void test_should_success() throws Exception { + // given + UUID uuid = UUID.randomUUID(); + ErpAdapterRequest erpAdapterRequest = ErpAdapterRequest.builder() + .requestDate(new Date()) + .partnerBpnl(supplierPartnerBpnl) + .id(uuid) + .directionCharacteristic(DirectionCharacteristic.INBOUND) + .ownMaterialNumber(matNbrCustomer) + .requestType(requestType) + .sammVersion(sammVersion) + .build(); + + // when + Mockito.when(erpAdapterConfiguration.getErpAdapterUrl()).thenReturn(mockWebServer.url("/").toString()); + Mockito.when(erpAdapterConfiguration.getErpAdapterAuthKey()).thenReturn(apiKey); + Mockito.when(erpAdapterConfiguration.getErpAdapterAuthSecret()).thenReturn(apiSecret); + Mockito.when(erpAdapterConfiguration.getErpResponseUrl()).thenReturn(erpResponseUrl); + erpAdapterRequestClient.sendRequest(erpAdapterRequest); + RecordedRequest request = mockWebServer.takeRequest(2, TimeUnit.SECONDS); + + // then + Assertions.assertThat(request.getMethod()).isEqualTo("POST"); + + Assertions.assertThat(request.getHeader(apiKey)).isEqualTo(apiSecret); + Assertions.assertThat(request.getHeader("Content-type")).contains("application/json"); + + var pairs = request.getPath().substring(2).split("&"); + Map parameters = Stream.of(pairs) + .map(string -> string.split("=")) + .collect(Collectors.toMap(pair -> pair[0], pair -> pair[1])); + + Assertions.assertThat(parameters.size()).isEqualTo(5); + Assertions.assertThat(parameters.get("bpnl")).isEqualTo(supplierPartnerBpnl); + Assertions.assertThat(parameters.get("request-type")).isEqualTo(requestType); + Assertions.assertThat(parameters.get("samm-version")).isEqualTo(sammVersion); + Assertions.assertThat(parameters.get("request-timestamp")).isEqualTo(String.valueOf(erpAdapterRequest.getRequestDate().getTime())); + Assertions.assertThat(parameters.get("request-id")).isEqualTo(uuid.toString()); + + try (InputStream stream = request.getBody().inputStream()) { + JsonNode requestBodyNode = objectMapper.readTree(new String(stream.readAllBytes())); + Assertions.assertThat(requestBodyNode.get("material").asText()).isEqualTo(matNbrCustomer); + Assertions.assertThat(requestBodyNode.get("direction").asText()).isEqualTo(DirectionCharacteristic.INBOUND.toString()); + Assertions.assertThat(requestBodyNode.get("responseUrl").asText()).isEqualTo(erpResponseUrl); + } + } +} From dc0be2fb4e0b347561e680d84d28b9b54324e205 Mon Sep 17 00:00:00 2001 From: Ernst-Christoph Schrewe Date: Tue, 9 Jul 2024 08:59:32 +0200 Subject: [PATCH 13/13] chore: complete merge --- .github/workflows/build-image-backend.yml | 3 +- .github/workflows/build-image-frontend.yml | 3 +- .github/workflows/codeql.yml | 2 +- .github/workflows/helm-test.yml | 10 +- .github/workflows/kics.yml | 2 +- CONTRIBUTING.md | 13 + NOTICE.md | 15 +- backend/Dockerfile | 2 +- backend/NOTICE.md | 24 +- .../DataInjectionCommandLineRunner.java | 1 + .../logic/util/DtrRequestBodyBuilder.java | 16 +- .../common/edc/domain/model/SubmodelType.java | 38 -- .../edc/logic/service/EdcAdapterService.java | 209 ++++++---- .../service/EdcContractMappingService.java | 29 +- .../edc/logic/util/EdcRequestBodyBuilder.java | 31 +- .../backend/common/util/VariablesService.java | 76 +++- .../service/DeliveryRequestApiService.java | 4 +- .../services/DemandRequestApiService.java | 4 +- ...mandAndCapacityNotificationController.java | 20 +- .../model/DemandAndCapacityNotification.java | 1 + .../dto/DemandAndCapacityNotificationDto.java | 1 + .../DemandAndCapacityNotificationService.java | 11 + .../domain/model/ErpAdapterRequest.java | 2 + .../service/ErpAdapterRequestService.java | 30 +- .../service/ItemStockErpAdapterService.java | 4 + .../service/ProductionRequestApiService.java | 4 +- .../service/ItemStockRequestApiService.java | 6 +- .../src/main/resources/application.properties | 5 + .../src/test/resources/application.properties | 7 + charts/puris/Chart.yaml | 2 +- charts/puris/README.md | 362 +++++++++--------- .../puris/templates/backend-deployment.yaml | 14 + charts/puris/templates/backend-secrets.yaml | 2 + charts/puris/values.yaml | 12 + docs/DEVELOPMENT.md | 20 + frontend/Dockerfile | 2 +- .../config/customer/puris-backend.properties | 5 + .../config/supplier/puris-backend.properties | 5 + 38 files changed, 628 insertions(+), 369 deletions(-) delete mode 100644 backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/SubmodelType.java diff --git a/.github/workflows/build-image-backend.yml b/.github/workflows/build-image-backend.yml index 04c271e5..9dad42bb 100644 --- a/.github/workflows/build-image-backend.yml +++ b/.github/workflows/build-image-backend.yml @@ -41,7 +41,7 @@ env: IMAGE_NAME: "app-puris-backend" jobs: - docker: + docker-backend: if: github.repository_owner == 'eclipse-tractusx' # prevent running on forks runs-on: ubuntu-latest permissions: @@ -59,6 +59,7 @@ jobs: cp ./LICENSE ./backend/LICENSE cp ./NOTICE.md ./backend/NOTICE.md cp ./SECURITY.md ./backend/SECURITY.md + cp ./LICENSE_non_code ././frontend/LICENSE_non_code # Needed to create multi-platfrom image - name: Set up Docker Buildx diff --git a/.github/workflows/build-image-frontend.yml b/.github/workflows/build-image-frontend.yml index 3c670327..abb79bba 100644 --- a/.github/workflows/build-image-frontend.yml +++ b/.github/workflows/build-image-frontend.yml @@ -45,7 +45,7 @@ env: REPOSITORY: "${{ github.repository }}" jobs: - docker: + docker-frontend: if: github.repository_owner == 'eclipse-tractusx' # prevent running on forks runs-on: ubuntu-latest permissions: @@ -91,6 +91,7 @@ jobs: cp ./LICENSE ./frontend/LICENSE cp ./NOTICE.md ./frontend/NOTICE.md cp ./SECURITY.md ./frontend/SECURITY.md + cp ./LICENSE_non_code ././frontend/LICENSE_non_code # Needed to create multi-platfrom image - name: Set up Docker Buildx diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 62977247..58eb7670 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -41,7 +41,7 @@ on: jobs: analyze: - name: Analyze + name: Analyze CodeQl # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources diff --git a/.github/workflows/helm-test.yml b/.github/workflows/helm-test.yml index 6c5f4546..09f0e0fe 100644 --- a/.github/workflows/helm-test.yml +++ b/.github/workflows/helm-test.yml @@ -103,7 +103,7 @@ jobs: fi - name: Run chart-testing (lint) - run: ct lint --validate-maintainers=false --target-branch ${{ github.event.repository.default_branch }} + run: ct lint --validate-maintainers=false --check-version-increment=false --target-branch ${{ github.event.repository.default_branch }} - name: Run chart-testing (install) run: | @@ -126,3 +126,11 @@ jobs: helm dependency update charts/puris helm upgrade puris charts/puris if: github.event_name != 'pull_request' || steps.list-changed.outputs.changed == 'true' + + # check version increment should fail separately + # we don't directly release a chart and thus maybe don't need to increase the version. + # to enable this behaviour otterdog has been reconfigured + - name: Run chart-testing (version update) + id: version-check + run: | + ct lint --validate-maintainers=false --check-version-increment=true --target-branch ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/kics.yml b/.github/workflows/kics.yml index 6efd512c..0dcb1215 100644 --- a/.github/workflows/kics.yml +++ b/.github/workflows/kics.yml @@ -39,7 +39,7 @@ on: jobs: analyze: - name: Analyze + name: Analyze KICS runs-on: ubuntu-latest permissions: actions: read diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0a61e2bf..bcaf441e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,19 @@ Catena-X alliance focusing on parts traceability. * https://projects.eclipse.org/projects/automotive.tractusx +## Project licenses + +The Tractus-X project uses the following licenses: + +* Apache-2.0 for code +* CC-BY-4.0 for non-code + +## Terms of Use + +This repository is subject to the Terms of Use of the Eclipse Foundation + +* https://www.eclipse.org/legal/termsofuse.php + ## Developer resources Information regarding source code management, builds, coding standards, and diff --git a/NOTICE.md b/NOTICE.md index 80122a24..cb6e5e64 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -16,12 +16,21 @@ source code repository logs. ## Declared Project Licenses -This program and the accompanying materials are made available under the terms -of the Apache License, Version 2.0 which is available at -https://www.apache.org/licenses/LICENSE-2.0. +The Tractus-X project uses the following licenses: +- Apache-2.0 for code +- CC-BY-4.0 for non-code + +Apache-2.0: +This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0. SPDX-License-Identifier: Apache-2.0 +CC-BY-4.0: +The materials in this repository are made available under the terms of the Creative Commons Attribution 4.0 International License, which is available at https://spdx.org/licenses/CC-BY-4.0.html. +SPDX-License-Identifier: CC-BY-4.0 + + + ## Source Code The project maintains the following source code repositories diff --git a/backend/Dockerfile b/backend/Dockerfile index d8149a99..2dbe81c6 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -28,7 +28,7 @@ COPY src/ /app/src/ RUN mvn clean package -DskipTests # Copy Legal information for distributions, the star ones are copied by workflow -COPY DOCKER_NOTICE.md README.md NOTICE.md* SECURITY.md* LICENSE* DEPENDENCIES* /app/legal/ +COPY DOCKER_NOTICE.md README.md NOTICE.md* SECURITY.md* LICENSE* DEPENDENCIES* LICENSE_non_code* /app/legal/ FROM eclipse-temurin:21-jre-alpine RUN mkdir /opt/app diff --git a/backend/NOTICE.md b/backend/NOTICE.md index e1773779..168b143c 100644 --- a/backend/NOTICE.md +++ b/backend/NOTICE.md @@ -16,12 +16,19 @@ source code repository logs. ## Declared Project Licenses -This program and the accompanying materials are made available under the terms -of the Apache License, Version 2.0 which is available at -https://www.apache.org/licenses/LICENSE-2.0. +The Tractus-X project uses the following licenses: +- Apache-2.0 for code +- CC-BY-4.0 for non-code + +Apache-2.0: +This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0. SPDX-License-Identifier: Apache-2.0 +CC-BY-4.0: +The materials in this repository are made available under the terms of the Creative Commons Attribution 4.0 International License, which is available at https://spdx.org/licenses/CC-BY-4.0.html. +SPDX-License-Identifier: CC-BY-4.0 + ## Source Code The project maintains the following source code repositories @@ -32,16 +39,9 @@ in the GitHub organization https://github.com/eclipse-tractusx: ## Third-party Content -This project leverages the following third party content. - -See `DEPENDENCIES_FRONTEND` and `DEPENDENCIES_BACKEND` file. Further, the following third-party content is used that -isn't listed in any DEPENDENCIES file: +This project leverages the following third party content: -feather (4.29) -* License: MIT License -* Licence Path: https://github.com/feathericons/feather/blob/master/LICENSE -* Project URL: https://feathericons.com/ -* Source URL: https://github.com/feathericons/feather +See `DEPENDENCIES_BACKEND` file. ## Cryptography diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/DataInjectionCommandLineRunner.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/DataInjectionCommandLineRunner.java index 55ee9109..ef6793ab 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/DataInjectionCommandLineRunner.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/DataInjectionCommandLineRunner.java @@ -256,6 +256,7 @@ private void setupCustomerRole() throws JsonProcessingException { .directionCharacteristic(DirectionCharacteristic.INBOUND) .requestType("ItemStock") .sammVersion("2.0") + .responseCode(201) .build(); mockRequest = erpAdapterRequestService.create(mockRequest); log.info("Created mocked ErpAdapterRequest: \n{}", mockRequest); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/ddtr/logic/util/DtrRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/ddtr/logic/util/DtrRequestBodyBuilder.java index 1e9e3b63..33d2fd82 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/ddtr/logic/util/DtrRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/ddtr/logic/util/DtrRequestBodyBuilder.java @@ -25,7 +25,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.util.VariablesService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Material; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.MaterialPartnerRelation; @@ -95,9 +95,9 @@ public JsonNode createMaterialRegistrationRequestBody(MaterialPartnerRelation ma href = href.endsWith("/") ? href : href + "/"; href += materialPartnerRelation.getPartnerCXNumber() + "/"; - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID, href + DirectionCharacteristic.INBOUND + "/", variablesService.getItemStockSubmodelApiAssetId())); - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.DEMAND.URN_SEMANTIC_ID, href, variablesService.getDemandSubmodelApiAssetId())); - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.DELIVERY.URN_SEMANTIC_ID, href, variablesService.getDeliverySubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID, href + DirectionCharacteristic.INBOUND + "/", variablesService.getItemStockSubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.DEMAND_SUBMODEL.URN_SEMANTIC_ID, href, variablesService.getDemandSubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID, href, variablesService.getDeliverySubmodelApiAssetId())); log.debug("Created body for material " + material.getOwnMaterialNumber() + "\n" + body.toPrettyString()); return body; @@ -142,9 +142,9 @@ public JsonNode createProductRegistrationRequestBody(Material material, String p href = href.endsWith("/") ? href : href + "/"; href += material.getMaterialNumberCx() + "/"; - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID, href + DirectionCharacteristic.OUTBOUND + "/", variablesService.getItemStockSubmodelApiAssetId())); - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.PRODUCTION.URN_SEMANTIC_ID, href, variablesService.getProductionSubmodelApiAssetId())); - submodelDescriptorsArray.add(createSubmodelObject(SubmodelType.DELIVERY.URN_SEMANTIC_ID, href, variablesService.getDeliverySubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID, href + DirectionCharacteristic.OUTBOUND + "/", variablesService.getItemStockSubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.PRODUCTION_SUBMODEL.URN_SEMANTIC_ID, href, variablesService.getProductionSubmodelApiAssetId())); + submodelDescriptorsArray.add(createSubmodelObject(AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID, href, variablesService.getDeliverySubmodelApiAssetId())); submodelDescriptorsArray.add(createPartTypeSubmodelObject(material.getOwnMaterialNumber())); log.debug("Created body for product " + material.getOwnMaterialNumber() + "\n" + body.toPrettyString()); @@ -238,7 +238,7 @@ private JsonNode createPartTypeSubmodelObject(String materialId) { String href = variablesService.getEdcDataplanePublicUrl(); href = href.endsWith("/") ? href : href + "/"; href += Base64.getEncoder().encodeToString(materialId.getBytes(StandardCharsets.UTF_8)); - return createSubmodelObject(SubmodelType.PART_TYPE_INFORMATION.URN_SEMANTIC_ID, href, variablesService.getPartTypeSubmodelApiAssetId()); + return createSubmodelObject(AssetType.PART_TYPE_INFORMATION_SUBMODEL.URN_SEMANTIC_ID, href, variablesService.getPartTypeSubmodelApiAssetId()); } } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/SubmodelType.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/SubmodelType.java deleted file mode 100644 index ffef3e69..00000000 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/domain/model/SubmodelType.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2024 Volkswagen AG - * Copyright (c) 2024 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.eclipse.tractusx.puris.backend.common.edc.domain.model; - -public enum SubmodelType { - DTR("none", "none"), - ITEM_STOCK("urn:samm:io.catenax.item_stock:2.0.0#ItemStock", "$value"), - PRODUCTION("urn:samm:io.catenax.planned_production_output:2.0.0#PlannedProductionOutput", "$value"), - DEMAND("urn:samm:io.catenax.short_term_material_demand:1.0.0#ShortTermMaterialDemand", "$value"), - DELIVERY("urn:samm:io.catenax.delivery_information:2.0.0#DeliveryInformation", "$value"), - PART_TYPE_INFORMATION("urn:samm:io.catenax.part_type_information:1.0.0#PartTypeInformation", "$value"); - - public final String URN_SEMANTIC_ID; - public final String REPRESENTATION; - - SubmodelType(String URN_SEMANTIC_ID, String REPRESENTATION) { - this.URN_SEMANTIC_ID = URN_SEMANTIC_ID; - this.REPRESENTATION = REPRESENTATION; - } -} diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java index 85dcc775..b0003282 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcAdapterService.java @@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import okhttp3.*; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.EdcRequestBodyBuilder; import org.eclipse.tractusx.puris.backend.common.edc.logic.util.JsonLdUtils; import org.eclipse.tractusx.puris.backend.common.util.PatternStore; @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; @@ -148,27 +149,31 @@ public boolean registerAssetsInitially() { log.info("Registration of ItemStock 2.0.0 submodel successful {}", (assetRegistration = registerSubmodelAsset( variablesService.getItemStockSubmodelApiAssetId(), variablesService.getItemStockSubmodelEndpoint(), - SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID + AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID ))); result &= assetRegistration; log.info("Registration of Planned Production 2.0.0 submodel successful {}", (assetRegistration = registerSubmodelAsset( variablesService.getProductionSubmodelApiAssetId(), variablesService.getProductionSubmodelEndpoint(), - SubmodelType.PRODUCTION.URN_SEMANTIC_ID + AssetType.PRODUCTION_SUBMODEL.URN_SEMANTIC_ID ))); result &= assetRegistration; log.info("Registration of Short Term Material Demand 1.0.0 submodel successful {}", (assetRegistration = registerSubmodelAsset( variablesService.getDemandSubmodelApiAssetId(), variablesService.getDemandSubmodelEndpoint(), - SubmodelType.DEMAND.URN_SEMANTIC_ID + AssetType.DEMAND_SUBMODEL.URN_SEMANTIC_ID ))); result &= assetRegistration; log.info("Registration of Delivery Information 2.0.0 submodel successful {}", (assetRegistration = registerSubmodelAsset( variablesService.getDeliverySubmodelApiAssetId(), variablesService.getDeliverySubmodelEndpoint(), - SubmodelType.DELIVERY.URN_SEMANTIC_ID + AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID ))); result &= assetRegistration; + log.info("Registration of Demand and Capacity Notification 2.0.0 asset successful {}", (assetRegistration = registerNotificationAsset( + variablesService.getNotificationApiAssetId(), + variablesService.getNotificationEndpoint() + ))); log.info("Registration of PartTypeInformation 1.0.0 submodel successful {}", (assetRegistration = registerPartTypeInfoSubmodelAsset())); result &= assetRegistration; return result; @@ -184,12 +189,13 @@ public boolean registerAssetsInitially() { */ public boolean createPolicyAndContractDefForPartner(Partner partner) { boolean result = createBpnlAndMembershipPolicyDefinitionForPartner(partner); - result &= createSubmodelContractDefinitionForPartner(SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID, variablesService.getItemStockSubmodelApiAssetId(), partner); - result &= createSubmodelContractDefinitionForPartner(SubmodelType.PRODUCTION.URN_SEMANTIC_ID, variablesService.getProductionSubmodelApiAssetId(), partner); - result &= createSubmodelContractDefinitionForPartner(SubmodelType.DEMAND.URN_SEMANTIC_ID, variablesService.getDemandSubmodelApiAssetId(), partner); - result &= createSubmodelContractDefinitionForPartner(SubmodelType.DELIVERY.URN_SEMANTIC_ID, variablesService.getDeliverySubmodelApiAssetId(), partner); + result &= createSubmodelContractDefinitionForPartner(AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID, variablesService.getItemStockSubmodelApiAssetId(), partner); + result &= createSubmodelContractDefinitionForPartner(AssetType.PRODUCTION_SUBMODEL.URN_SEMANTIC_ID, variablesService.getProductionSubmodelApiAssetId(), partner); + result &= createSubmodelContractDefinitionForPartner(AssetType.DEMAND_SUBMODEL.URN_SEMANTIC_ID, variablesService.getDemandSubmodelApiAssetId(), partner); + result &= createSubmodelContractDefinitionForPartner(AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID, variablesService.getDeliverySubmodelApiAssetId(), partner); + result &= createSubmodelContractDefinitionForPartner(AssetType.NOTIFICATION.URN_SEMANTIC_ID, variablesService.getNotificationApiAssetId(), partner); result &= createDtrContractDefinitionForPartner(partner); - return createSubmodelContractDefinitionForPartner(SubmodelType.PART_TYPE_INFORMATION.URN_SEMANTIC_ID, variablesService.getPartTypeSubmodelApiAssetId(), partner) && result; + return createSubmodelContractDefinitionForPartner(AssetType.PART_TYPE_INFORMATION_SUBMODEL.URN_SEMANTIC_ID, variablesService.getPartTypeSubmodelApiAssetId(), partner) && result; } private boolean createSubmodelContractDefinitionForPartner(String semanticId, String assetId, Partner partner) { @@ -273,44 +279,28 @@ private boolean createContractPolicy() { private boolean registerDtrAsset() { var body = edcRequestBodyBuilder.buildDtrRegistrationBody(); - try (var response = sendPostRequest(body, List.of("v3", "assets"))) { - if (!response.isSuccessful()) { - log.warn("Asset registration failed for DTR"); - if (response.body() != null) { - log.warn("Response: \n" + response.body().string()); - } - return false; - } - return true; - } catch (Exception e) { - log.error("Failed to register DTR Asset", e); - return false; - } + return sendAssetRegistrationRequest(body, "DTR"); } private boolean registerPartTypeInfoSubmodelAsset() { var body = edcRequestBodyBuilder.buildPartTypeInfoSubmodelRegistrationBody(); - try (var response = sendPostRequest(body, List.of("v3", "assets"))) { - if (!response.isSuccessful()) { - log.warn("Asset registration failed for PartTypeInfoSubmodel"); - if (response.body() != null) { - log.warn("Response: \n" + response.body().string()); - } - return false; - } - log.info("Asset registration successful for PartTypeInfoSubmodel"); - return true; - } catch (Exception e) { - log.error("Failed to register PartTypeInfoSubmodel"); - return false; - } + return sendAssetRegistrationRequest(body, variablesService.getPartTypeSubmodelApiAssetId()); } private boolean registerSubmodelAsset(String assetId, String endpoint, String semanticId) { var body = edcRequestBodyBuilder.buildSubmodelRegistrationBody(assetId, endpoint, semanticId); + return sendAssetRegistrationRequest(body, assetId); + } + + private boolean registerNotificationAsset(String assetId, String endpoint) { + var body = edcRequestBodyBuilder.buildNotificationRegistrationBody(assetId, endpoint); + return sendAssetRegistrationRequest(body, assetId); + } + + private boolean sendAssetRegistrationRequest(JsonNode body, String assetId) { try (var response = sendPostRequest(body, List.of("v3", "assets"))) { if (!response.isSuccessful()) { - log.warn("{} Submodel Asset registration failed", semanticId); + log.warn("Asset registration failed for {}", assetId); if (response.body() != null) { log.warn("Response: \n" + response.body().string()); } @@ -318,7 +308,7 @@ private boolean registerSubmodelAsset(String assetId, String endpoint, String se } return true; } catch (Exception e) { - log.error("Failed to register {} Submodel", semanticId, e); + log.error("Failed to register {} Asset", assetId, e); return false; } } @@ -500,7 +490,7 @@ public String getContractAgreement(String contractAgreementId) throws IOExceptio */ public Response postProxyPullRequest(String url, String authKey, String authCode, String requestBodyString) { try { - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), requestBodyString); + RequestBody requestBody = RequestBody.create(requestBodyString, MediaType.parse("application/json")); Request request = new Request.Builder() .url(url) .header(authKey, authCode) @@ -531,18 +521,76 @@ public Response getProxyPullRequest(String url, String authKey, String authCode, } } - private JsonNode getSubmodelFromPartner(MaterialPartnerRelation mpr, SubmodelType type, DirectionCharacteristic direction, int retries) { + private JsonNode postNotificationToPartner(Partner partner, AssetType type, JsonNode payload, int retries) { + if (retries < 0) { + return null; + } + boolean failed = true; + String partnerDspUrl = partner.getEdcUrl(); + var assetId = switch (type) { + case NOTIFICATION -> variablesService.getNotificationApiAssetId(); + default -> throw new IllegalArgumentException("Unsupported type " + type); + }; + try { + String contractId = edcContractMappingService.getContractId(partner, type, assetId, partnerDspUrl); + if (contractId == null) { + log.info("Need Contract for " + type + " with " + partner.getBpnl()); + if (negotiateContractForNotification(partner, type)) { + contractId = edcContractMappingService.getContractId(partner, type, assetId, partnerDspUrl); + } else { + log.error("Failed to contract for " + type + " with " + partner.getBpnl()); + return postNotificationToPartner(partner, type, payload, --retries); + } + } + // Request EdrToken + var transferResp = initiateProxyPullTransfer(partner, contractId, assetId, partnerDspUrl); + log.debug("Transfer Request {}", transferResp.toPrettyString()); + String transferId = transferResp.get("@id").asText(); + // try proxy pull and terminate request + try { + EdrDto edrDto = getAndAwaitEdrDto(transferId); + log.info("Received EDR data for " + assetId + " with " + partner.getEdcUrl()); + if (edrDto == null) { + log.error("Failed to obtain EDR data for " + assetId + " with " + partner.getEdcUrl()); + return doNotificationPostRequest(type, partner, payload, --retries); + } + try (var response = postProxyPullRequest(edrDto.endpoint(), edrDto.authKey(), edrDto.authCode(), new ObjectMapper().writeValueAsString(payload))) { + if (response.isSuccessful()) { + String responseString = response.body().string(); + failed = false; + return objectMapper.readTree(responseString); + } + log.info("Failed to post Notification to Partner."); + } + } finally { + if (transferId != null) { + terminateTransfer(transferId); + } + } + } catch (Exception e) { + log.error("Error in Transfer Request for " + type + " at " + partner.getBpnl(), e); + } finally { + if (failed) { + log.warn("Invalidating Contract data for " + type + " with " + partner.getBpnl()); + edcContractMappingService.putContractId(partner, type, assetId, partnerDspUrl, null); + } + } + return postNotificationToPartner(partner, type, payload, --retries); + } + + private JsonNode getSubmodelFromPartner(MaterialPartnerRelation mpr, AssetType type, DirectionCharacteristic direction, int retries) { if (retries < 0) { return null; } Partner partner = mpr.getPartner(); SubmodelData submodelData = switch (type) { case DTR -> throw new IllegalArgumentException("DTR not supported"); - case ITEM_STOCK -> fetchSubmodelDataByDirection(mpr, SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID, direction); - case PRODUCTION -> fetchSubmodelDataByDirection(mpr, SubmodelType.PRODUCTION.URN_SEMANTIC_ID, direction); - case DEMAND -> fetchSubmodelDataByDirection(mpr, SubmodelType.DEMAND.URN_SEMANTIC_ID, direction); - case DELIVERY -> fetchSubmodelDataByDirection(mpr, SubmodelType.DELIVERY.URN_SEMANTIC_ID, direction); - case PART_TYPE_INFORMATION -> fetchPartTypeSubmodelData(mpr); + case ITEM_STOCK_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID, direction); + case PRODUCTION_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.PRODUCTION_SUBMODEL.URN_SEMANTIC_ID, direction); + case DEMAND_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.DEMAND_SUBMODEL.URN_SEMANTIC_ID, direction); + case DELIVERY_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID, direction); + case NOTIFICATION -> throw new IllegalArgumentException("DemandAndCapacityNotification not supported"); + case PART_TYPE_INFORMATION_SUBMODEL -> fetchPartTypeSubmodelData(mpr); }; boolean failed = true; try { @@ -551,7 +599,7 @@ private JsonNode getSubmodelFromPartner(MaterialPartnerRelation mpr, SubmodelTyp String submodelContractId = edcContractMappingService.getContractId(partner, type, assetId, partnerDspUrl); if (submodelContractId == null) { log.info("Need Contract for " + type + " with " + partner.getBpnl()); - if (negotiateForSubmodel(mpr, type, direction)) { + if (negotiateContractForSubmodel(mpr, type, direction)) { submodelContractId = edcContractMappingService.getContractId(partner, type, assetId, partnerDspUrl); } else { log.error("Failed to contract for " + type + " with " + partner.getBpnl()); @@ -630,7 +678,7 @@ private JsonNode getSubmodelFromPartner(MaterialPartnerRelation mpr, SubmodelTyp return edrDto; } - public JsonNode doSubmodelRequest(SubmodelType type, MaterialPartnerRelation mpr, DirectionCharacteristic direction, int retries) { + public JsonNode doSubmodelRequest(AssetType type, MaterialPartnerRelation mpr, DirectionCharacteristic direction, int retries) { if (retries < 0) { return null; } @@ -641,6 +689,17 @@ public JsonNode doSubmodelRequest(SubmodelType type, MaterialPartnerRelation mpr return data; } + public JsonNode doNotificationPostRequest(AssetType type, Partner partner, JsonNode body, int retries) { + if (retries < 0) { + return null; + } + var data = postNotificationToPartner(partner, type, body, retries); + if (data == null) { + return doNotificationPostRequest(type, partner, body, --retries); + } + return data; + } + private boolean negotiateForPartnerDtr(Partner partner) { try { Map equalFilters = new HashMap<>(); @@ -957,25 +1016,40 @@ private void terminateTransfer(String transferProcessId) { * @return true, if a contract was successfully negotiated */ - private boolean negotiateForSubmodel(MaterialPartnerRelation mpr, SubmodelType type, DirectionCharacteristic direction) { + private boolean negotiateContractForSubmodel(MaterialPartnerRelation mpr, AssetType type, DirectionCharacteristic direction) { Partner partner = mpr.getPartner(); SubmodelData submodelData = switch (type) { case DTR -> throw new IllegalArgumentException("DTR not supported"); - case ITEM_STOCK -> fetchSubmodelDataByDirection(mpr, SubmodelType.ITEM_STOCK.URN_SEMANTIC_ID, direction); - case PRODUCTION -> fetchSubmodelDataByDirection(mpr, SubmodelType.PRODUCTION.URN_SEMANTIC_ID, direction); - case DEMAND -> fetchSubmodelDataByDirection(mpr, SubmodelType.DEMAND.URN_SEMANTIC_ID, direction); - case DELIVERY -> fetchSubmodelDataByDirection(mpr, SubmodelType.DELIVERY.URN_SEMANTIC_ID, direction); - case PART_TYPE_INFORMATION -> fetchPartTypeSubmodelData(mpr); + case ITEM_STOCK_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.ITEM_STOCK_SUBMODEL.URN_SEMANTIC_ID, direction); + case PRODUCTION_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.PRODUCTION_SUBMODEL.URN_SEMANTIC_ID, direction); + case DEMAND_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.DEMAND_SUBMODEL.URN_SEMANTIC_ID, direction); + case DELIVERY_SUBMODEL -> fetchSubmodelDataByDirection(mpr, AssetType.DELIVERY_SUBMODEL.URN_SEMANTIC_ID, direction); + case NOTIFICATION -> throw new IllegalArgumentException("DemandAndCapacityNotification not supported"); + case PART_TYPE_INFORMATION_SUBMODEL -> fetchPartTypeSubmodelData(mpr); }; + Map equalFilters = new HashMap<>(); + equalFilters.put(EdcRequestBodyBuilder.CX_COMMON_NAMESPACE + "version", "3.0"); + equalFilters.put( + "'" + EdcRequestBodyBuilder.DCT_NAMESPACE + "type'.'@id'", + EdcRequestBodyBuilder.CX_TAXO_NAMESPACE + "Submodel" + ); + equalFilters.put("'" + EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE + "semanticId'.'@id'", type.URN_SEMANTIC_ID); + return negotiateContract(partner, submodelData.assetId(), type, submodelData.dspUrl(), equalFilters); + } + + public boolean negotiateContractForNotification(Partner partner, AssetType type) { + Map equalFilters = new HashMap<>(); + equalFilters.put(EdcRequestBodyBuilder.CX_COMMON_NAMESPACE + "version", "1.0"); + equalFilters.put( + "'" + EdcRequestBodyBuilder.DCT_NAMESPACE + "type'.'@id'", + EdcRequestBodyBuilder.CX_TAXO_NAMESPACE + "DemandAndCapacityNotificationApi" + ); + return negotiateContract(partner, variablesService.getNotificationApiAssetId(), type, partner.getEdcUrl(), equalFilters); + } + + public boolean negotiateContract(Partner partner, String assetId, AssetType type, String dspUrl, Map equalFilters) { try { - Map equalFilters = new HashMap<>(); - equalFilters.put(EdcRequestBodyBuilder.CX_COMMON_NAMESPACE + "version", "3.0"); - equalFilters.put( - "'" + EdcRequestBodyBuilder.DCT_NAMESPACE + "type'.'@id'", - EdcRequestBodyBuilder.CX_TAXO_NAMESPACE + "Submodel" - ); - equalFilters.put("'" + EdcRequestBodyBuilder.AAS_SEMANTICS_NAMESPACE + "semanticId'.'@id'", type.URN_SEMANTIC_ID); - var responseNode = getCatalog(submodelData.dspUrl(), partner.getBpnl(), equalFilters); + var responseNode = getCatalog(dspUrl, partner.getBpnl(), equalFilters); responseNode = jsonLdUtils.expand(responseNode); var catalogArray = responseNode.get(EdcRequestBodyBuilder.DCAT_NAMESPACE + "dataset"); // If there is exactly one asset, the catalogContent will be a JSON object. @@ -1006,11 +1080,11 @@ private boolean negotiateForSubmodel(MaterialPartnerRelation mpr, SubmodelType t } if (targetCatalogEntry == null) { - log.error("Could not find asset for " + type + " Submodel at partner " + partner.getBpnl() + "'s catalog"); + log.error("Could not find asset for " + type + " at partner " + partner.getBpnl() + "'s catalog"); log.warn("CATALOG CONTENT \n" + catalogArray.toPrettyString()); return false; } - JsonNode negotiationResponse = initiateNegotiation(partner, targetCatalogEntry, submodelData.dspUrl()); + JsonNode negotiationResponse = initiateNegotiation(partner, targetCatalogEntry, dspUrl); String negotiationId = negotiationResponse.get("@id").asText(); // Await confirmation of contract and contractId String contractId = null; @@ -1028,8 +1102,9 @@ private boolean negotiateForSubmodel(MaterialPartnerRelation mpr, SubmodelType t + negotiationState.toPrettyString()); return false; } - edcContractMappingService.putContractId(partner, type, submodelData.assetId(), submodelData.dspUrl(), contractId); - log.info("Got contract for " + type + " Submodel api with partner " + partner.getBpnl()); + log.info("Putting new ContractId" + contractId + "for " + type + " api with partner " + partner.getBpnl()); + edcContractMappingService.putContractId(partner, type, assetId, dspUrl, contractId); + log.info("Got contract for " + type + " api with partner " + partner.getBpnl()); return true; } catch (Exception e) { @@ -1049,7 +1124,7 @@ private boolean negotiateForSubmodel(MaterialPartnerRelation mpr, SubmodelType t * @return the partner's CXid for that material */ public String getCxIdFromPartTypeInformation(MaterialPartnerRelation mpr) { - var data = getSubmodelFromPartner(mpr, SubmodelType.PART_TYPE_INFORMATION, null, 1); + var data = getSubmodelFromPartner(mpr, AssetType.PART_TYPE_INFORMATION_SUBMODEL, null, 1); return data.get("catenaXId").asText(); } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcContractMappingService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcContractMappingService.java index bd78d89d..893fe8b6 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcContractMappingService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/service/EdcContractMappingService.java @@ -23,8 +23,9 @@ import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.puris.backend.common.edc.domain.model.ContractMapping; import org.eclipse.tractusx.puris.backend.common.edc.domain.model.DtrContractMapping; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.domain.repository.DeliveryContractMappingRepository; +import org.eclipse.tractusx.puris.backend.common.edc.domain.repository.DemandAndCapacityNotificationContractMappingRepository; import org.eclipse.tractusx.puris.backend.common.edc.domain.repository.DemandContractMappingRepository; import org.eclipse.tractusx.puris.backend.common.edc.domain.repository.DtrContractMappingRepository; import org.eclipse.tractusx.puris.backend.common.edc.domain.repository.GeneralContractMappingRepository; @@ -56,17 +57,20 @@ public class EdcContractMappingService { @Autowired private DeliveryContractMappingRepository deliveryContractMappingRepository; + @Autowired + private DemandAndCapacityNotificationContractMappingRepository demandAndCapacityNotificationContractMappingRepository; + @Autowired private PartTypeContractMappingRepository partTypeContractMappingRepository; private final String SEPARATOR = "\n@\n"; - public String getContractId(Partner partner, SubmodelType type, String assetId, String dspUrl) { + public String getContractId(Partner partner, AssetType type, String assetId, String dspUrl) { ContractMapping contractMapping = getOrCreateContractMapping(partner, type); return contractMapping.getAssetToContractMapping().get(assetId + SEPARATOR + dspUrl); } - public void putContractId(Partner partner, SubmodelType type, String assetId, String dspUrl, String contractId) { + public void putContractId(Partner partner, AssetType type, String assetId, String dspUrl, String contractId) { ContractMapping contractMapping = getOrCreateContractMapping(partner, type); contractMapping.getAssetToContractMapping().put(assetId + SEPARATOR + dspUrl, contractId); var repository = getContractMappingRepository(type); @@ -74,7 +78,7 @@ public void putContractId(Partner partner, SubmodelType type, String assetId, St } public void putDtrContractData(Partner partner, String dtrAssetId, String dtrContractId) { - ContractMapping contractMapping = getOrCreateContractMapping(partner, SubmodelType.DTR); + ContractMapping contractMapping = getOrCreateContractMapping(partner, AssetType.DTR); contractMapping.getAssetToContractMapping().put("dtrContractId", dtrContractId); contractMapping.getAssetToContractMapping().put("dtrAssetId", dtrAssetId); dtrContractMappingRepository.save((DtrContractMapping) contractMapping); @@ -88,14 +92,14 @@ public void putDtrContractData(Partner partner, String dtrAssetId, String dtrCon * @return a String array as described above */ public String [] getDtrAssetAndContractId(Partner partner) { - ContractMapping contractMapping = getOrCreateContractMapping(partner, SubmodelType.DTR); + ContractMapping contractMapping = getOrCreateContractMapping(partner, AssetType.DTR); String assetId = contractMapping.getAssetToContractMapping().get("dtrAssetId"); String contractId = contractMapping.getAssetToContractMapping().get("dtrContractId"); return new String[] {assetId, contractId}; } - private ContractMapping getOrCreateContractMapping(Partner partner, SubmodelType type) { + private ContractMapping getOrCreateContractMapping(Partner partner, AssetType type) { GeneralContractMappingRepository repository = getContractMappingRepository(type); ContractMapping entity = repository.findById(partner.getBpnl()).orElse(null); if (entity == null) { @@ -112,14 +116,15 @@ private ContractMapping getOrCreateContractMapping(Partner partner, SubmodelType return entity; } - private GeneralContractMappingRepository getContractMappingRepository(SubmodelType type) { + private GeneralContractMappingRepository getContractMappingRepository(AssetType type) { GeneralContractMappingRepository repository = switch (type) { case DTR -> dtrContractMappingRepository; - case ITEM_STOCK -> itemStockContractMappingRepository; - case PRODUCTION -> productionContractMappingRepository; - case DEMAND -> demandContractMappingRepository; - case DELIVERY -> deliveryContractMappingRepository; - case PART_TYPE_INFORMATION -> partTypeContractMappingRepository; + case ITEM_STOCK_SUBMODEL -> itemStockContractMappingRepository; + case PRODUCTION_SUBMODEL -> productionContractMappingRepository; + case DEMAND_SUBMODEL -> demandContractMappingRepository; + case DELIVERY_SUBMODEL -> deliveryContractMappingRepository; + case NOTIFICATION -> demandAndCapacityNotificationContractMappingRepository; + case PART_TYPE_INFORMATION_SUBMODEL -> partTypeContractMappingRepository; }; return repository; } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java index f03549fe..5346ea09 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/edc/logic/util/EdcRequestBodyBuilder.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.security.DtrSecurityConfiguration; import org.eclipse.tractusx.puris.backend.common.util.VariablesService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; @@ -342,12 +343,6 @@ public JsonNode buildProxyPullRequestBody(Partner partner, String contractID, St dataDestination.put("type", "HttpProxy"); body.set("dataDestination", dataDestination); - // This private property is not evaluated in EDC 0.7.0 anymore due to data plane signalling - // EDRs are taken manually - var privateProperties = MAPPER.createObjectNode(); - privateProperties.put("receiverHttpEndpoint", variablesService.getEdrEndpoint()); - body.set("privateProperties", privateProperties); - log.debug("Built Proxy Pull Request:\n{}", body.toPrettyString()); return body; } @@ -427,19 +422,35 @@ public JsonNode buildSubmodelRegistrationBody(String assetId, String endpoint, S propertiesObject.set("aas-semantics:semanticId", semanticIdObject); semanticIdObject.put("@id", semanticId); body.set("privateProperties", MAPPER.createObjectNode()); + body.set("dataAddress", createDataAddressObject(endpoint, "false")); + return body; + } + + public JsonNode buildNotificationRegistrationBody(String assetId, String endpoint) { + var body = getAssetRegistrationContext(); + body.put("@id", assetId); + var propertiesObject = MAPPER.createObjectNode(); + body.set("properties", propertiesObject); + var dctTypeObject = MAPPER.createObjectNode(); + propertiesObject.set("dct:type", dctTypeObject); + dctTypeObject.put("@id", "cx-taxo:DemandAndCapacityNotificationApi"); + propertiesObject.put("cx-common:version", "1.0"); + body.set("dataAddress", createDataAddressObject(endpoint, "true")); + return body; + } + public JsonNode createDataAddressObject(String endpoint, String proxyMethodAndBody) { var dataAddress = MAPPER.createObjectNode(); dataAddress.put("@type", "DataAddress"); dataAddress.put("proxyPath", "true"); dataAddress.put("proxyQueryParams", "false"); - dataAddress.put("proxyMethod", "false"); + dataAddress.put("proxyMethod", proxyMethodAndBody); + dataAddress.put("proxyBody", proxyMethodAndBody); dataAddress.put("type", "HttpData"); dataAddress.put("baseUrl", endpoint); dataAddress.put("authKey", "x-api-key"); dataAddress.put("authCode", variablesService.getApiKey()); - body.set("dataAddress", dataAddress); - - return body; + return dataAddress; } public JsonNode buildPartTypeInfoSubmodelRegistrationBody() { diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/util/VariablesService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/util/VariablesService.java index ff2b0a9c..aacba2f7 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/util/VariablesService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/common/util/VariablesService.java @@ -25,7 +25,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; - @Getter @Service /** @@ -42,6 +41,14 @@ public class VariablesService { @Value("${puris.baseurl}") private String purisBaseUrl; + /** + * The puris base url as defined in the property puris.baseurl, + * ending with a slash ('/'). + */ + public String getPurisBaseUrl() { + return purisBaseUrl.endsWith("/") ? purisBaseUrl : purisBaseUrl + "/"; + } + @Value("${puris.demonstrator.role}") /** * Must be set to "CUSTOMER" or "SUPPLIER" if @@ -50,18 +57,24 @@ public class VariablesService { */ private String demoRole; - @Value("${puris.baseurl}" + "catena/edrendpoint") + @Value("${server.servlet.context-path}") + private String contextPath; + /** - * The edrEndpoint to be used during consumer pull asset transfers. + * The context path as defined in the property server.servlet.context-path, + * ending with a slash ('/'). */ - private String edrEndpoint; + public String getContextPath() { + return contextPath.replace("/", "") + "/"; + } - @Value("${puris.baseurl}" + "catena/item-stock/request") /** - * The url under which this application's request endpoint can + * The url under which this application's item stock request endpoint can * be reached by external machines. */ - private String itemStockSubmodelEndpoint; + public String getItemStockSubmodelEndpoint() { + return getPurisBaseUrl() + getContextPath() + "item-stock/request"; + } @Value("${puris.itemstocksubmodel.apiassetid}") /** @@ -70,12 +83,13 @@ public class VariablesService { */ private String itemStockSubmodelAssetId; - @Value("${puris.baseurl}" + "catena/planned-production/request") /** - * The url under which this application's request endpoint can + * The url under which this application's planned production request endpoint can * be reached by external machines. */ - private String productionSubmodelEndpoint; + public String getProductionSubmodelEndpoint() { + return getPurisBaseUrl() + getContextPath() + "planned-production/request"; + } @Value("${puris.productionsubmodel.apiassetid}") /** @@ -84,12 +98,13 @@ public class VariablesService { */ private String productionSubmodelAssetId; - @Value("${puris.baseurl}" + "catena/material-demand/request") /** - * The url under which this application's request endpoint can + * The url under which this application's material demand request endpoint can * be reached by external machines. */ - private String demandSubmodelEndpoint; + public String getDemandSubmodelEndpoint() { + return getPurisBaseUrl() + getContextPath() + "material-demand/request"; + } @Value("${puris.demandsubmodel.apiassetid}") /** @@ -98,12 +113,13 @@ public class VariablesService { */ private String demandSubmodelAssetId; - @Value("${puris.baseurl}" + "catena/delivery-information/request") /** - * The url under which this application's request endpoint can + * The url under which this application's delivery information request endpoint can * be reached by external machines. */ - private String deliverySubmodelEndpoint; + public String getDeliverySubmodelEndpoint() { + return getPurisBaseUrl() + getContextPath() + "delivery-information/request"; + } @Value("${puris.deliverysubmodel.apiassetid}") /** @@ -112,6 +128,21 @@ public class VariablesService { */ private String deliverySubmodelAssetId; + /** + * The url under which this application's demand and capacity notification request endpoint can + * be reached by external machines. + */ + public String getNotificationEndpoint() { + return getPurisBaseUrl() + getContextPath() + "demand-and-capacity-notification/request"; + } + + @Value("${puris.notification.apiassetid}") + /** + * The assetId that shall be assigned to the request API + * during asset creation. + */ + private String notificationAssetId; + @Value("${puris.frameworkagreement.credential}") /** * The name of the framework agreement to be used. @@ -148,8 +179,13 @@ public class VariablesService { */ private String dtrUrl; - @Value("${puris.baseurl}" + "catena/parttypeinformation") - private String parttypeInformationServerendpoint; + /** + * The url under which this application's part type request endpoint can + * be reached by external machines. + */ + public String getParttypeInformationServerendpoint() { + return getPurisBaseUrl() + getContextPath() + "parttypeinformation"; + } @Value("${puris.generatematerialcatenaxid}") /** @@ -249,6 +285,10 @@ public String getDeliverySubmodelApiAssetId() { return deliverySubmodelAssetId + "@" + ownBpnl; } + public String getNotificationApiAssetId() { + return notificationAssetId + "@" + ownBpnl; + } + public String getPartTypeSubmodelApiAssetId() { return "PartTypeInformationSubmodelApi@" + getOwnBpnl(); } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryRequestApiService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryRequestApiService.java index 1711f3d2..94a00b6a 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryRequestApiService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryRequestApiService.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcAdapterService; import org.eclipse.tractusx.puris.backend.delivery.domain.model.DeliveryResponsibilityEnumeration; import org.eclipse.tractusx.puris.backend.delivery.domain.model.OwnDelivery; @@ -156,7 +156,7 @@ public void doReportedDeliveryRequest(Partner partner, Material material) { mpr = mprService.find(material, partner); } var direction = material.isMaterialFlag() ? DirectionCharacteristic.OUTBOUND : DirectionCharacteristic.INBOUND; - var data = edcAdapterService.doSubmodelRequest(SubmodelType.DELIVERY, mpr, direction, 1); + var data = edcAdapterService.doSubmodelRequest(AssetType.DELIVERY_SUBMODEL, mpr, direction, 1); var samm = objectMapper.treeToValue(data, DeliveryInformation.class); var deliveries = sammMapper.sammToReportedDeliveries(samm, partner); for (var delivery : deliveries) { diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demand/logic/services/DemandRequestApiService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demand/logic/services/DemandRequestApiService.java index 6d3c363a..ecdbc932 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demand/logic/services/DemandRequestApiService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demand/logic/services/DemandRequestApiService.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcAdapterService; import org.eclipse.tractusx.puris.backend.demand.logic.adapter.ShortTermMaterialDemandSammMapper; import org.eclipse.tractusx.puris.backend.demand.logic.dto.demandsamm.ShortTermMaterialDemand; @@ -97,7 +97,7 @@ public void doReportedDemandRequest(Partner partner, Material material) { mprService.triggerPartTypeRetrievalTask(partner); mpr = mprService.find(material, partner); } - var data = edcAdapterService.doSubmodelRequest(SubmodelType.DEMAND, mpr, DirectionCharacteristic.INBOUND, 1); + var data = edcAdapterService.doSubmodelRequest(AssetType.DEMAND_SUBMODEL, mpr, DirectionCharacteristic.INBOUND, 1); var samm = objectMapper.treeToValue(data, ShortTermMaterialDemand.class); var demands = sammMapper.sammToReportedDemand(samm, partner); for (var demand : demands) { diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationController.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationController.java index 953f692b..776fa8e8 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationController.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/controller/DemandAndCapacityNotificationController.java @@ -23,25 +23,30 @@ See the NOTICE file(s) distributed with this work for additional import java.util.List; import java.util.Optional; import java.util.UUID; - +import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; import javax.management.openmbean.KeyAlreadyExistsException; import org.eclipse.tractusx.puris.backend.common.util.PatternStore; +import org.eclipse.tractusx.puris.backend.demand.logic.services.DemandRequestApiService; import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.OwnDemandAndCapacityNotification; import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.domain.model.ReportedDemandAndCapacityNotification; import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.dto.DemandAndCapacityNotificationDto; +import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.service.DemandAndCapacityNotifcationRequestApiService; import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.service.OwnDemandAndCapacityNotificationService; import org.eclipse.tractusx.puris.backend.demandandcapacitynotification.logic.service.ReportedDemandAndCapacityNotificationService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Material; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Site; +import org.eclipse.tractusx.puris.backend.masterdata.logic.dto.PartnerDto; import org.eclipse.tractusx.puris.backend.masterdata.logic.service.MaterialService; import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; @@ -60,6 +65,9 @@ public class DemandAndCapacityNotificationController { @Autowired private ReportedDemandAndCapacityNotificationService reportedNotificationService; + @Autowired + private DemandAndCapacityNotifcationRequestApiService demandAndCapacityNotifcationRequestApiService; + @Autowired private MaterialService materialService; @@ -72,6 +80,9 @@ public class DemandAndCapacityNotificationController { @Autowired private Validator validator; + @Autowired + private ExecutorService executorService; + @GetMapping() @ResponseBody @Operation(summary = "Get all own notifications", description = "Get all own notifications. Optionally the partner can be filtered by its bpnl.") @@ -100,11 +111,13 @@ public DemandAndCapacityNotificationDto createNotification(@RequestBody DemandAn if (notificationDto.getPartnerBpnl() == null || notificationDto.getPartnerBpnl().isEmpty()) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, - "Demand Information misses partner identification."); + "Notification Information misses partner identification."); } try { - return convertToDto(ownNotificationService.create(convertToEntity(notificationDto))); + var entity = ownNotificationService.create(convertToEntity(notificationDto)); + executorService.submit(() -> demandAndCapacityNotifcationRequestApiService.sendDemandAndCapacityNotification(entity)); + return convertToDto(entity); } catch (KeyAlreadyExistsException e) { throw new ResponseStatusException(HttpStatus.CONFLICT, "Notification already exists. Use PUT instead."); } catch (IllegalArgumentException e) { @@ -128,6 +141,7 @@ public DemandAndCapacityNotificationDto updateNotification(@RequestBody DemandAn if (updatedNotification == null) { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Notification does not exist."); } + executorService.submit(() -> demandAndCapacityNotifcationRequestApiService.sendDemandAndCapacityNotification(updatedNotification)); return convertToDto(updatedNotification); } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/domain/model/DemandAndCapacityNotification.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/domain/model/DemandAndCapacityNotification.java index 344a1b36..621a507c 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/domain/model/DemandAndCapacityNotification.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/domain/model/DemandAndCapacityNotification.java @@ -51,6 +51,7 @@ public abstract class DemandAndCapacityNotification { @Id @GeneratedValue protected UUID uuid; + protected UUID notificationId; protected UUID relatedNotificationId; diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/DemandAndCapacityNotificationDto.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/DemandAndCapacityNotificationDto.java index 12295eaa..c22f7f68 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/DemandAndCapacityNotificationDto.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/dto/DemandAndCapacityNotificationDto.java @@ -42,6 +42,7 @@ See the NOTICE file(s) distributed with this work for additional @ToString public class DemandAndCapacityNotificationDto implements Serializable { private UUID uuid; + private UUID notificationId; private UUID relatedNotificationId; diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotificationService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotificationService.java index ecd517a1..5033a13a 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotificationService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/demandandcapacitynotification/logic/service/DemandAndCapacityNotificationService.java @@ -50,6 +50,11 @@ public final TEntity findById(UUID uuid) { return repository.findById(uuid).orElse(null); } + public final TEntity findByNotificationId(UUID notificationId) { + return repository.findAll().stream().filter(notification -> notification.getNotificationId().equals(notificationId)) + .findFirst().orElse(null); + } + public final List findAll() { return repository.findAll(); } @@ -66,6 +71,12 @@ public final TEntity create(TEntity notification) { if (repository.findAll().stream().anyMatch(d -> d.equals(notification))) { throw new KeyAlreadyExistsException("Notification already exists"); } + if (notification.getNotificationId() == null) { + notification.setNotificationId(UUID.randomUUID()); + } + if (notification.getSourceNotificationId() == null) { + notification.setSourceNotificationId(notification.getNotificationId()); + } notification.setContentChangedAt(new Date()); return repository.save(notification); } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterRequest.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterRequest.java index b1341ea5..4bc6b705 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterRequest.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterRequest.java @@ -59,6 +59,8 @@ public class ErpAdapterRequest { @NotNull private Date requestDate; + private Integer responseCode; + private Date responseReceivedDate; @Pattern(regexp = PatternStore.NON_EMPTY_NON_VERTICAL_WHITESPACE_STRING) diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestService.java index 60088da3..3c7ec974 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterRequestService.java @@ -20,26 +20,49 @@ package org.eclipse.tractusx.puris.backend.erpadapter.logic.service; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.puris.backend.erpadapter.domain.model.ErpAdapterRequest; import org.eclipse.tractusx.puris.backend.erpadapter.domain.repository.ErpAdapterRequestRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.UUID; @Service +@Slf4j +@RequiredArgsConstructor public class ErpAdapterRequestService { - @Autowired - private ErpAdapterRequestRepository repository; + private final ErpAdapterRequestRepository repository; + + private final ErpAdapterRequestClient erpAdapterRequestClient; public ErpAdapterRequest create(ErpAdapterRequest erpAdapterRequest) { if (erpAdapterRequest.getId() != null && repository.existsById(erpAdapterRequest.getId())) { + log.error("ErpAdapterRequest with id {} already exists", erpAdapterRequest.getId()); return null; } return repository.save(erpAdapterRequest); } + public void createAndSend(ErpAdapterRequest erpAdapterRequest) { + erpAdapterRequest = create(erpAdapterRequest); + if (erpAdapterRequest != null) { + Integer responseCode = erpAdapterRequestClient.sendRequest(erpAdapterRequest); + if (responseCode != null) { + if (responseCode >= 200 && responseCode < 400) { + log.info("Successfully sent request to ERP Adapter, got status code {} for request:\n{}", responseCode, erpAdapterRequest); + } else { + log.warn("Received status code {} from ERP Adapter for request:\n{}", responseCode, erpAdapterRequest); + } + erpAdapterRequest.setResponseCode(responseCode); + update(erpAdapterRequest); + } else { + log.error("Failed to send request to ERP Adapter:\n{}", erpAdapterRequest); + } + } + } + public ErpAdapterRequest get(UUID id) { // TODO: Remove when mock is removed return repository.findById(id).orElse(repository.findAll().getFirst()); @@ -50,6 +73,7 @@ public ErpAdapterRequest update(ErpAdapterRequest erpAdapterRequest) { if (repository.existsById(erpAdapterRequest.getId())) { return repository.save(erpAdapterRequest); } + log.error("ErpAdapterRequest with id {} did not exist, could not update entity", erpAdapterRequest.getId()); return null; } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ItemStockErpAdapterService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ItemStockErpAdapterService.java index c8bebeba..4de30753 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ItemStockErpAdapterService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ItemStockErpAdapterService.java @@ -90,6 +90,10 @@ public int receiveItemStockUpdate(ErpAdapterController.Dto dto) { // log.error("Received duplicate response for messageId {}", request.getId()); // return 409; // } + if (request.getResponseCode() == null || request.getResponseCode() < 200 || request.getResponseCode() >= 400) { + log.error("Unexpected response, erp adapter had not confirmed request"); + return 404; + } if (!request.getPartnerBpnl().equals(dto.partnerBpnl())) { log.error("BPNL mismatch! request BPNL: {}, message BPNL: {}", request.getPartnerBpnl(), dto.partnerBpnl()); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionRequestApiService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionRequestApiService.java index e2b69a15..1e51a64a 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionRequestApiService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionRequestApiService.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcAdapterService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Material; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; @@ -80,7 +80,7 @@ public PlannedProductionOutput handleProductionSubmodelRequest(String bpnl, Stri public void doReportedProductionRequest(Partner partner, Material material) { try { var mpr = mprService.find(material, partner); - var data = edcAdapterService.doSubmodelRequest(SubmodelType.PRODUCTION, mpr, DirectionCharacteristic.OUTBOUND, 1); + var data = edcAdapterService.doSubmodelRequest(AssetType.PRODUCTION_SUBMODEL, mpr, DirectionCharacteristic.OUTBOUND, 1); var samm = objectMapper.treeToValue(data, PlannedProductionOutput.class); var productions = sammMapper.sammToReportedProduction(samm, partner); for (var production : productions) { diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/stock/logic/service/ItemStockRequestApiService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/stock/logic/service/ItemStockRequestApiService.java index 1007a949..185aa0c9 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/stock/logic/service/ItemStockRequestApiService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/stock/logic/service/ItemStockRequestApiService.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.puris.backend.common.edc.domain.model.SubmodelType; +import org.eclipse.tractusx.puris.backend.common.edc.domain.model.AssetType; import org.eclipse.tractusx.puris.backend.common.edc.logic.service.EdcAdapterService; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Material; import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; @@ -120,7 +120,7 @@ public ItemStockSamm handleItemStockSubmodelRequest(String bpnl, String material public void doItemStockSubmodelReportedMaterialItemStockRequest(Partner partner, Material material) { try { var mpr = mprService.find(material, partner); - var data = edcAdapterService.doSubmodelRequest(SubmodelType.ITEM_STOCK, mpr, DirectionCharacteristic.OUTBOUND, 1); + var data = edcAdapterService.doSubmodelRequest(AssetType.ITEM_STOCK_SUBMODEL, mpr, DirectionCharacteristic.OUTBOUND, 1); var samm = objectMapper.treeToValue(data, ItemStockSamm.class); var stocks = sammMapper.itemStockSammToReportedMaterialItemStock(samm, partner); for (var stock : stocks) { @@ -151,7 +151,7 @@ public void doItemStockSubmodelReportedProductItemStockRequest(Partner partner, mprService.triggerPartTypeRetrievalTask(partner); mpr = mprService.find(material, partner); } - var data = edcAdapterService.doSubmodelRequest(SubmodelType.ITEM_STOCK ,mpr, DirectionCharacteristic.INBOUND, 1); + var data = edcAdapterService.doSubmodelRequest(AssetType.ITEM_STOCK_SUBMODEL ,mpr, DirectionCharacteristic.INBOUND, 1); var samm = objectMapper.treeToValue(data, ItemStockSamm.class); var stocks = sammMapper.itemStockSammToReportedProductItemStock(samm, partner); for (var stock : stocks) { diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 4df72211..fd6faaae 100755 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -9,6 +9,7 @@ puris.itemstocksubmodel.apiassetid=${PURIS_ITEMSTOCKSUBMODEL_APIASSETID:itemstoc puris.productionsubmodel.apiassetid=${PURIS_PRODUCTIONSUBMODEL_APIASSETID:productionsubmodel-api-asset} puris.demandsubmodel.apiassetid=${PURIS_DEMANDSUBMODEL_APIASSETID:demandsubmodel-api-asset} puris.deliverysubmodel.apiassetid=${PURIS_DELIVERYSUBMODEL_APIASSETID:deliverysubmodel-api-asset} +puris.notification.apiassetid=${PURIS_NOTIFICATION_APIASSETID:notification-api-asset} puris.frameworkagreement.credential=${PURIS_FRAMEWORKAGREEMENT_CREDENTIAL:Puris} puris.frameworkagreement.version=${PURIS_FRAMEWORKAGREEMENT_VERSION:1.0} puris.purpose.name=${PURIS_PURPOSE_NAME:cx.puris.base} @@ -21,6 +22,10 @@ puris.dtr.idp.edc-client.id=${PURIS_DTR_IDP_EDC-CLIENT_ID:FOSS-DTR-CLIENT} puris.dtr.idp.edc-client.secret.alias=${PURIS_DTR_IDP_EDC-CLIENT_SECRET_ALIAS} puris.dtr.idp.puris-client.id=${PURIS_DTR_IDP_PURIS-CLIENT_ID:FOSS-DTR-CLIENT} puris.dtr.idp.puris-client.secret=${PURIS_DTR_IDP_PURIS-CLIENT_SECRET} +puris.erpadapter.enabled=${PURIS_ERPADAPTER_ENABLED:false} +puris.erpadapter.url=${PURIS_ERPADAPTER_URL:http://my-erpadapter:8080} +puris.erpadapter.authkey=${PURIS_ERPADAPTER_AUTHKEY:x-api-key} +puris.erpadapter.authsecret=${PURIS_ERPADAPTER_AUTHSECRET:erp-password} # Flag that decides whether the auto-generation feature of the puris backend is enabled. # Since all Material entities are required to have a CatenaX-Id, you must enter any pre-existing CatenaX-Id # via the materials-API of the backend, when you are inserting a new Material entity to the backend's diff --git a/backend/src/test/resources/application.properties b/backend/src/test/resources/application.properties index ef0263e9..b778d19b 100755 --- a/backend/src/test/resources/application.properties +++ b/backend/src/test/resources/application.properties @@ -1,4 +1,5 @@ logging.level.org.eclipse.tractusx.puris=DEBUG +logging.level.org.springframework=DEBUG # Server Config server.port=${SERVER_PORT:8081} puris.demonstrator.role=${PURIS_DEMONSTRATOR_ROLE:customer} @@ -7,6 +8,7 @@ puris.itemstocksubmodel.apiassetid=${PURIS_ITEMSTOCKSUBMODEL_APIASSETID:itemstoc puris.productionsubmodel.apiassetid=${PURIS_PRODUCTIONSUBMODEL_APIASSETID:productionsubmodel-api-asset} puris.demandsubmodel.apiassetid=${PURIS_DEMANDSUBMODEL_APIASSETID:demandsubmodel-api-asset} puris.deliverysubmodel.apiassetid=${PURIS_DELIVERYSUBMODEL_APIASSETID:deliverysubmodel-api-asset} +puris.notification.apiassetid=${PURIS_NOTIFICATION_APIASSETID:notification-api-asset} puris.frameworkagreement.credential=${PURIS_FRAMEWORKAGREEMENT_CREDENTIAL:Puris} puris.frameworkagreement.version=${PURIS_FRAMEWORKAGREEMENT_CREDENTIAL:1.0} puris.purpose.name=${PURIS_PURPOSE_NAME:cx.puris.base} @@ -19,6 +21,11 @@ puris.dtr.idp.edc-client.id=${PURIS_DTR_IDP_EDC-CLIENT_ID:FOSS-DTR-CLIENT} puris.dtr.idp.edc-client.secret.alias=${PURIS_DTR_IDP_EDC-CLIENT_SECRET_ALIAS:test-alias} puris.dtr.idp.puris-client.id=${PURIS_DTR_IDP_PURIS-CLIENT_ID:FOSS-DTR-CLIENT} puris.dtr.idp.puris-client.secret=${PURIS_DTR_IDP_PURIS-CLIENT_SECRET:test} + +puris.erpadapter.enabled=${PURIS_ERPADAPTER_ENABLED:false} +puris.erpadapter.url=${PURIS_ERPADAPTER_URL:http://my-erpadapter:8080} +puris.erpadapter.authkey=${PURIS_ERPADAPTER_AUTHKEY:x-api-key} +puris.erpadapter.authsecret=${PURIS_ERPADAPTER_AUTHSECRET:erp-password} puris.generatematerialcatenaxid=${PURIS_GENERATEMATERIALCATENAXID:true} # DB Configuration diff --git a/charts/puris/Chart.yaml b/charts/puris/Chart.yaml index f95fbeac..d79e0ccc 100644 --- a/charts/puris/Chart.yaml +++ b/charts/puris/Chart.yaml @@ -35,7 +35,7 @@ dependencies: # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 2.6.3 +version: 2.6.4 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/charts/puris/README.md b/charts/puris/README.md index 91802d70..0bd3fac5 100644 --- a/charts/puris/README.md +++ b/charts/puris/README.md @@ -1,13 +1,12 @@ # puris -![Version: 2.6.3](https://img.shields.io/badge/Version-2.6.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 2.0.2](https://img.shields.io/badge/AppVersion-2.0.2-informational?style=flat-square) +![Version: 2.6.4](https://img.shields.io/badge/Version-2.6.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 2.0.2](https://img.shields.io/badge/AppVersion-2.0.2-informational?style=flat-square) A helm chart for Kubernetes deployment of PURIS **Homepage:** ## Prerequisites - - Kubernetes 1.19+ - Helm 3.2.0+ @@ -19,7 +18,6 @@ To install the chart with the release name `puris`: $ helm repo add tractusx-dev https://eclipse-tractusx.github.io/charts/dev $ helm install puris tractusx-dev/policy-hub ``` - To install the helm chart into your cluster with your values: ```shell @@ -30,9 +28,9 @@ To use the helm chart as a dependency: ```yaml dependencies: - - name: puris - repository: https://eclipse-tractusx.github.io/charts/dev - version: YOUR_VERSION + - name: puris + repository: https://eclipse-tractusx.github.io/charts/dev + version: YOUR_VERSION ``` ## Source Code @@ -41,182 +39,190 @@ dependencies: ## Requirements -| Repository | Name | Version | -|------------------------------------|------------|---------| +| Repository | Name | Version | +|------------|------|---------| | https://charts.bitnami.com/bitnami | postgresql | 12.12.x | ## Values -| Key | Type | Default | Description | -|-------------------------------------------------------------------------------------------------------------------------------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]` | Rules for the scheduler to find a pod | -| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.labelSelector.matchExpressions | list | `[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]` | Matching Expressions as key and operators for the pod affinity | -| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.topologyKey | string | `"kubernetes.io/hostname"` | Topology key of the Kubernetes cluster | -| backend.autoscaling.enabled | bool | `false` | Enable or disable the autoscaling of pods | -| backend.env | object | `{}` | Extra environment variables that will be passed onto the backend deployment pods | -| backend.image.pullPolicy | string | `"Always"` | THe policy for the image pull process | -| backend.image.repository | string | `"tractusx/app-puris-backend"` | Repository of the docker image | -| backend.image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| backend.imagePullSecrets | list | `[]` | List of used secrets | -| backend.ingress.annotations | object | `{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/force-ssl-redirect":"true","nginx.ingress.kubernetes.io/ssl-passthrough":"true"}` | Annotations for the Ingress controller | -| backend.ingress.annotations."kubernetes.io/ingress.class" | string | `"nginx"` | Kubernetes Ingress class annotation for direct bindings | -| backend.ingress.annotations."nginx.ingress.kubernetes.io/backend-protocol" | string | `"HTTP"` | The backend protocol type (e.g. HTTP) | -| backend.ingress.annotations."nginx.ingress.kubernetes.io/force-ssl-redirect" | string | `"true"` | Force redirects from HTTP to HTTPS | -| backend.ingress.annotations."nginx.ingress.kubernetes.io/ssl-passthrough" | string | `"true"` | Pass SSL traffic to the backend ports | -| backend.ingress.enabled | bool | `false` | Enable the Ingress | -| backend.ingress.hosts | list | `[{"host":"your-backend-host-address.com","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}]` | Hosts for the Ingress controller | -| backend.ingress.tls | list | `[]` | TLS certificates for the Ingress controller | -| backend.livenessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":120,"periodSeconds":25,"successThreshold":1,"timeoutSeconds":1}` | Checks whether a pod is alive or not | -| backend.livenessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a liveness probe | -| backend.livenessProbe.initialDelaySeconds | int | `120` | Delay in seconds after which an initial liveness probe is checked | -| backend.livenessProbe.periodSeconds | int | `25` | Wait time in seconds between liveness probes | -| backend.livenessProbe.successThreshold | int | `1` | Number of trys until a pod is marked alive | -| backend.livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the liveness probe | -| backend.nameOverride | string | `""` | Possibility to override the name | -| backend.nodeSelector | object | `{}` | Constrains for the node selector | -| backend.podAnnotations | object | `{}` | Annotations added to a running pod | -| backend.podSecurityContext | object | `{}` | Added security contexts for a pod | -| backend.puris.api.key | string | `"test"` | The API key of the PURIS application | -| backend.puris.api.rootDir | string | `"/catena"` | The root directory of the API | -| backend.puris.baseurl | string | `"your-backend-host-address.com"` | Base url of the PURIS backend | -| backend.puris.datasource.driverClassName | string | `"org.postgresql.Driver"` | Driver class name of the database | -| backend.puris.datasource.password | string | `""` | Password for the database user. Ignored if postgres.enabled is true. | -| backend.puris.datasource.url | string | `"jdbc:postgresql://postgresql-name:5432/puris-database"` | URL of the database. Ignored if postgres.enabled is true. | -| backend.puris.datasource.username | string | `"db-user"` | Username of the database. Ignored if postgres.enabled is true. | -| backend.puris.deliverysubmodel.apiassetid | string | `"deliverysubmodel-api-asset"` | Asset ID for DeliverySubmodel API | -| backend.puris.demandsubmodel.apiassetid | string | `"demandsubmodel-api-asset"` | Asset ID for DemandSubmodel API | -| backend.puris.demonstrator.role | string | `nil` | Current role of the PURIS demonstrator. Default value should be empty. Can be set to "customer" or "supplier" to enable demonstration setup | -| backend.puris.dtr.idp.clients.edc.id | string | `"FOSS-EDC-CLIENT"` | id of the client that has a service account with roles to view the DTR. Used by the application to create DTR asset in the edc with read only access. See Admin Guide. Mandatory if backend.puris.dtr.idp.enabled = true. | -| backend.puris.dtr.idp.clients.edc.secret.alias | string | `"path/secret-name"` | alias for the vault used by the EDC in which the secret is stored. Mandatory if backend.puris.dtr.idp.enabled = true. | -| backend.puris.dtr.idp.clients.puris.id | string | `"FOSS-PURIS-CLIENT"` | id of the client that has a service account with roles to manage the DTR. Used by the application to create and update digital twins. See Admin Guide. Mandatory if backend.puris.dtr.idp.enabled = true. | -| backend.puris.dtr.idp.clients.puris.secret | string | `""` | secret of the client with write access (no vault alias). No default value will be created if empty. Mandatory if backend.puris.dtr.idp.enabled = true. | -| backend.puris.dtr.idp.enabled | bool | `true` | enables the usage of the IDP for the DTR. | -| backend.puris.dtr.idp.tokenurl | string | `"https://keycloak-service.com/realms/your-realm/openid-connect/token"` | token url of the idp for your specific realm. May be different to other idp token url in this config. Mandatory if backend.puris.dtr.idp.enabled = true. | -| backend.puris.dtr.url | string | `"http://localhost:4243"` | Endpoint for DTR | -| backend.puris.edc.controlplane.host | string | `"172.17.0.2"` | | -| backend.puris.edc.controlplane.key | string | `"password"` | Key for the EDC control plane | -| backend.puris.edc.controlplane.management.url | string | `"https:/your-edc-address:8181/management"` | Url to the EDC controlplane management of the edc | -| backend.puris.edc.controlplane.protocol.url | string | `"https://your-edc-address:8184/api/v1/dsp"` | Url to the EDC controlplane protocol API of the edc | -| backend.puris.edc.dataplane.public.url | string | `"https://your-data-plane:8285/api/public/"` | Url of one of your data plane's public api | -| backend.puris.existingSecret | string | `"secret-puris-backend"` | Secret for backend passwords. For more information look into 'backend-secrets.yaml' file. | -| backend.puris.frameworkagreement.credential | string | `"Puris"` | The name of the framework agreement. Starting with Uppercase and using CamelCase. | -| backend.puris.frameworkagreement.version | string | `"1.0"` | The version of the framework agreement, NEEDS TO BE PUT AS "STRING"! | -| backend.puris.generatematerialcatenaxid | bool | `true` | Flag that decides whether the auto-generation feature of the puris backend is enabled. Since all Material entities are required to have a CatenaX-Id, you must enter any pre-existing CatenaX-Id via the materials-API of the backend, when you are inserting a new Material entity to the backend's database. If a CatenaX-Id was not assigned to your Material so far, then this feature can auto-generate one randomly. In a real-world-scenario, you must then use this randomly generated CatenaX-Id for the lifetime of that Material entity. | -| backend.puris.itemstocksubmodel.apiassetid | string | `"itemstocksubmodel-api-asset"` | Asset ID for ItemStockSubmodel API | -| backend.puris.jpa.hibernate.ddl-auto | string | `"create"` | Initialises SQL database with Hibernate property "create" to allow Hibernate to first drop all tables and then create new ones | -| backend.puris.jpa.properties.hibernate.enable_lazy_load_no_trans | bool | `true` | Enables "Lazy load no trans" property to fetch of each lazy entity to open a temporary session and run inside a separate transaction | -| backend.puris.own.bpna | string | `"BPNA4444444444ZZ"` | Own BPNA of the EDC | -| backend.puris.own.bpnl | string | `"BPNL4444444444XX"` | Own BPNL of the EDC | -| backend.puris.own.bpns | string | `"BPNS4444444444XX"` | Own BPNS of the EDC | -| backend.puris.own.country | string | `"Germany"` | Own country | -| backend.puris.own.name | string | `"YOUR-COMPANY-NAME"` | Own name (self-description) | -| backend.puris.own.site.name | string | `"YOUR-SITE-NAME"` | Own site name | -| backend.puris.own.streetnumber | string | `"Musterstraße 110A"` | Own street and number | -| backend.puris.own.zipcodeandcity | string | `"12345 Musterhausen"` | Own zipcode and city | -| backend.puris.productionsubmodel.apiassetid | string | `"productionsubmodel-api-asset"` | Asset ID for ProductionSubmodel API | -| backend.puris.purpose.name | string | `"cx.puris.base"` | The name of the purpose to use for submodel contracts | -| backend.puris.purpose.version | string | `"1"` | The version of the purpose to use for submodel contracts. NEEDS TO BE PUT AS "STRING"! | -| backend.readinessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":120,"periodSeconds":25,"successThreshold":1,"timeoutSeconds":1}` | Checks if the pod is fully ready to operate | -| backend.readinessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a readiness probe | -| backend.readinessProbe.initialDelaySeconds | int | `120` | Delay in seconds after which an initial readiness probe is checked | -| backend.readinessProbe.periodSeconds | int | `25` | Wait time in seconds between readiness probes | -| backend.readinessProbe.successThreshold | int | `1` | Number of trys until a pod is marked ready | -| backend.readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the readiness probe | -| backend.replicaCount | int | `1` | Number of replicas of the Kubernetes deployment | -| backend.resources.limits | object | `{"cpu":"3000m","memory":"2048Mi"}` | Maximum resource limits of CPU und memory | -| backend.resources.requests | object | `{"cpu":"1000m","memory":"2048Mi"}` | Minimum requested resources for CPU und memory | -| backend.securityContext | object | `{"allowPrivilegeEscalation":false,"runAsGroup":3000,"runAsNonRoot":true,"runAsUser":8877}` | Security configurations | -| backend.securityContext.allowPrivilegeEscalation | bool | `false` | Get more privileges than the parent process | -| backend.securityContext.runAsGroup | int | `3000` | Configures the group id of a user for a run | -| backend.securityContext.runAsNonRoot | bool | `true` | Configures the non-root privileges for a run | -| backend.securityContext.runAsUser | int | `8877` | Configures the user id for a run | -| backend.service.port | int | `8081` | The port of the service | -| backend.service.type | string | `"ClusterIP"` | Type of the service | -| backend.serviceAccount.annotations | object | `{}` | Annotations to add to the service account | -| backend.serviceAccount.create | bool | `true` | Specifies whether a service account should be created | -| backend.serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | -| backend.tolerations | list | `[]` | Constrains for tolerations | -| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]` | Rules for the scheduler to find a pod | -| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.labelSelector.matchExpressions | list | `[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]` | Matching Expressions as key and operators for the pod affinity | -| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.topologyKey | string | `"kubernetes.io/hostname"` | Topology key of the Kubernetes cluster | -| frontend.autoscaling.enabled | bool | `false` | Enable or disable the autoscaling of pods | -| frontend.autoscaling.maxReplicas | int | `100` | Number of maximum replica pods for autoscaling | -| frontend.autoscaling.minReplicas | int | `1` | Number of minimum replica pods for autoscaling | -| frontend.autoscaling.targetCPUUtilizationPercentage | int | `80` | Value of CPU usage in percentage for autoscaling decisions | -| frontend.env | object | `{}` | Extra environment variables that will be passed onto the frontend deployment pods | -| frontend.image.pullPolicy | string | `"IfNotPresent"` | THe policy for the image pull process | -| frontend.image.repository | string | `"tractusx/app-puris-frontend"` | Repository of the docker image | -| frontend.image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| frontend.imagePullSecrets | list | `[]` | List of used secrets | -| frontend.ingress.annotations | object | `{}` | Annotations for the Ingress controller | -| frontend.ingress.className | string | `"nginx"` | Class name for the Ingress controller | -| frontend.ingress.enabled | bool | `false` | Enable the Ingress | -| frontend.ingress.hosts | list | `[{"host":"your-frontend-host-address.com","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}]` | Hosts for the Ingress controller | -| frontend.ingress.tls | list | `[]` | TLS certificates for the Ingress controller | -| frontend.livenessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}` | Checks whether a pod is alive or not | -| frontend.livenessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a liveness probe | -| frontend.livenessProbe.initialDelaySeconds | int | `10` | Delay in seconds after which an initial liveness probe is checked | -| frontend.livenessProbe.periodSeconds | int | `10` | Wait time in seconds between liveness probes | -| frontend.livenessProbe.successThreshold | int | `1` | Number of trys until a pod is marked alive | -| frontend.livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the liveness probe | -| frontend.nameOverride | string | `""` | Possibility to override the name | -| frontend.nodeSelector | object | `{}` | Constrains for the node selector | -| frontend.podAnnotations | object | `{}` | Annotations added to a running pod | -| frontend.podSecurityContext | object | `{}` | Added security contexts for a pod | -| frontend.puris.appName | string | `"PURIS"` | The name of the app displayed in the frontend | -| frontend.puris.baseUrl | string | `"your-backend-host-address.com"` | The base URL for the backend base URL without further endpoints | -| frontend.puris.endpointCustomer | string | `"stockView/customer?ownMaterialNumber="` | The endpoint for the customers who buy a material identified via the own material number for the stock view | -| frontend.puris.endpointDelivery | string | `"delivery"` | The endpoint for the delivery submodel | -| frontend.puris.endpointDemand | string | `"demand"` | The endpoint for the demand submodel | -| frontend.puris.endpointMaterialStocks | string | `"stockView/material-stocks"` | The endpoint for material stocks for the stock view | -| frontend.puris.endpointMaterials | string | `"stockView/materials"` | The endpoint for materials for the stock view | -| frontend.puris.endpointPartners | string | `"partners"` | The endpoint for partner information | -| frontend.puris.endpointProductStocks | string | `"stockView/product-stocks"` | The endpoint for product stocks for the stock view | -| frontend.puris.endpointProduction | string | `"production"` | The endpoint for the production submodel | -| frontend.puris.endpointProductionRange | string | `"production/range"` | The endpoint for the production range of the production submodel | -| frontend.puris.endpointProducts | string | `"stockView/products"` | The endpoint for products for the stock view | -| frontend.puris.endpointReportedMaterialStocks | string | `"stockView/reported-material-stocks?ownMaterialNumber="` | The endpoint for the partners' (supplier) material stocks that they potentially will deliver to me | -| frontend.puris.endpointReportedProductStocks | string | `"stockView/reported-product-stocks?ownMaterialNumber="` | The endpoint for the partners' (customer) product stocks that they received from me | -| frontend.puris.endpointSupplier | string | `"stockView/supplier?ownMaterialNumber="` | The endpoint for the suppliers who buy a material identified via the own material number for the stock view | -| frontend.puris.endpointUpdateReportedMaterialStocks | string | `"stockView/update-reported-material-stocks?ownMaterialNumber="` | The endpoint for triggering an update of your material stocks on your partners side | -| frontend.puris.endpointUpdateReportedProductStocks | string | `"stockView/update-reported-product-stocks?ownMaterialNumber="` | The endpoint for triggering an update of your product stocks on your partners side | -| frontend.puris.keycloak.clientId | string | `"appXYZ"` | Name of the client which is used for the application. | -| frontend.puris.keycloak.disabled | bool | `true` | Disable the Keycloak integration. | -| frontend.puris.keycloak.realm | string | `"Catena-X"` | Name of the Realm of the keycloak instance. | -| frontend.puris.keycloak.redirectUrlFrontend | string | `"https://your-frontend-url.com"` | URL to use as keycloak redirect url. | -| frontend.puris.keycloak.url | string | `"https://idp.com/auth"` | The URL to the IDP that should be used. | -| frontend.puris.rateLimiting.burst | int | `30` | Burst rate limiting for nginx. | -| frontend.puris.rateLimiting.limit | string | `"10m"` | Bucket zone limit for rate limiting in nginx. | -| frontend.puris.rateLimiting.rate | string | `"10r/s"` | Allowed rates per second for nginx rate limiting. | -| frontend.readinessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}` | Checks if the pod is fully ready to operate | -| frontend.readinessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a readiness probe | -| frontend.readinessProbe.initialDelaySeconds | int | `10` | Delay in seconds after which an initial readiness probe is checked | -| frontend.readinessProbe.periodSeconds | int | `10` | Wait time in seconds between readiness probes | -| frontend.readinessProbe.successThreshold | int | `1` | Number of trys until a pod is marked ready | -| frontend.readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the readiness probe | -| frontend.replicaCount | int | `1` | | -| frontend.resources.limits | object | `{"cpu":"600m","memory":"128Mi"}` | Maximum resource limits of CPU und memory | -| frontend.resources.requests | object | `{"cpu":"200m","memory":"128Mi"}` | Minimum requested resources for CPU und memory | -| frontend.securityContext | object | `{"allowPrivilegeEscalation":false,"runAsGroup":3000,"runAsNonRoot":true,"runAsUser":101}` | Security configurations | -| frontend.securityContext.allowPrivilegeEscalation | bool | `false` | Get more privileges than the parent process | -| frontend.securityContext.runAsGroup | int | `3000` | Configures the group id of a user for a run | -| frontend.securityContext.runAsNonRoot | bool | `true` | Configures the non-root privileges for a run | -| frontend.securityContext.runAsUser | int | `101` | Configures the user id for a run | -| frontend.service.port | int | `8080` | The port of the service | -| frontend.service.type | string | `"ClusterIP"` | Type of the service | -| frontend.serviceAccount.annotations | object | `{}` | Annotations to add to the service account | -| frontend.serviceAccount.create | bool | `true` | Specifies whether a service account should be created | -| frontend.serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | -| frontend.tolerations | list | `[]` | Constrains for tolerations | -| global.domain.backend.ingress | string | `"your-backend-host-address.com"` | | -| postgresql.auth.database | string | `"postgres"` | Name of the database. | -| postgresql.auth.existingSecret | string | `"secret-puris-postgres-init"` | Secret containing the password. For more information look into 'backend-secrets-postgres.yaml' file. | -| postgresql.auth.password | string | `""` | Password for the custom database user. Secret-key 'password' | -| postgresql.auth.passwordPostgres | string | `""` | Password for the database. Secret-key 'postgres-password'. | -| postgresql.auth.username | string | `"puris"` | Username for the custom database user. | -| postgresql.enabled | bool | `true` | Enable postgres by default, set to false to use existing postgres. Make sure to set backend.puris.jpa.hibernate.ddl-auto accordingly (by default database is created using hibernate ddl from backend). | -| postgresql.service | object | `{"ports":{"postgresql":5432}}` | Possibility to override the name nameOverride: "" | -| postgresql.service.ports.postgresql | int | `5432` | Port of postgres database. | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]` | Rules for the scheduler to find a pod | +| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.labelSelector.matchExpressions | list | `[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]` | Matching Expressions as key and operators for the pod affinity | +| backend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.topologyKey | string | `"kubernetes.io/hostname"` | Topology key of the Kubernetes cluster | +| backend.autoscaling.enabled | bool | `false` | Enable or disable the autoscaling of pods | +| backend.env | object | `{}` | Extra environment variables that will be passed onto the backend deployment pods | +| backend.image.pullPolicy | string | `"Always"` | THe policy for the image pull process | +| backend.image.repository | string | `"tractusx/app-puris-backend"` | Repository of the docker image | +| backend.image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | +| backend.imagePullSecrets | list | `[]` | List of used secrets | +| backend.ingress.annotations | object | `{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/force-ssl-redirect":"true","nginx.ingress.kubernetes.io/ssl-passthrough":"true"}` | Annotations for the Ingress controller | +| backend.ingress.annotations."kubernetes.io/ingress.class" | string | `"nginx"` | Kubernetes Ingress class annotation for direct bindings | +| backend.ingress.annotations."nginx.ingress.kubernetes.io/backend-protocol" | string | `"HTTP"` | The backend protocol type (e.g. HTTP) | +| backend.ingress.annotations."nginx.ingress.kubernetes.io/force-ssl-redirect" | string | `"true"` | Force redirects from HTTP to HTTPS | +| backend.ingress.annotations."nginx.ingress.kubernetes.io/ssl-passthrough" | string | `"true"` | Pass SSL traffic to the backend ports | +| backend.ingress.enabled | bool | `false` | Enable the Ingress | +| backend.ingress.hosts | list | `[{"host":"your-backend-host-address.com","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}]` | Hosts for the Ingress controller | +| backend.ingress.tls | list | `[]` | TLS certificates for the Ingress controller | +| backend.livenessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":120,"periodSeconds":25,"successThreshold":1,"timeoutSeconds":1}` | Checks whether a pod is alive or not | +| backend.livenessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a liveness probe | +| backend.livenessProbe.initialDelaySeconds | int | `120` | Delay in seconds after which an initial liveness probe is checked | +| backend.livenessProbe.periodSeconds | int | `25` | Wait time in seconds between liveness probes | +| backend.livenessProbe.successThreshold | int | `1` | Number of trys until a pod is marked alive | +| backend.livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the liveness probe | +| backend.nameOverride | string | `""` | Possibility to override the name | +| backend.nodeSelector | object | `{}` | Constrains for the node selector | +| backend.podAnnotations | object | `{}` | Annotations added to a running pod | +| backend.podSecurityContext | object | `{}` | Added security contexts for a pod | +| backend.puris.api.key | string | `"test"` | The API key of the PURIS application | +| backend.puris.api.rootDir | string | `"/catena"` | The root directory of the API | +| backend.puris.baseurl | string | `"your-backend-host-address.com"` | Base url of the PURIS backend | +| backend.puris.datasource.driverClassName | string | `"org.postgresql.Driver"` | Driver class name of the database | +| backend.puris.datasource.password | string | `""` | Password for the database user. Ignored if postgres.enabled is true. | +| backend.puris.datasource.url | string | `"jdbc:postgresql://postgresql-name:5432/puris-database"` | URL of the database. Ignored if postgres.enabled is true. | +| backend.puris.datasource.username | string | `"db-user"` | Username of the database. Ignored if postgres.enabled is true. | +| backend.puris.deliverysubmodel.apiassetid | string | `"deliverysubmodel-api-asset"` | Asset ID for DeliverySubmodel API | +| backend.puris.demandsubmodel.apiassetid | string | `"demandsubmodel-api-asset"` | Asset ID for DemandSubmodel API | +| backend.puris.demonstrator.role | string | `nil` | Current role of the PURIS demonstrator. Default value should be empty. Can be set to "customer" or "supplier" to enable demonstration setup | +| backend.puris.dtr.idp.clients.edc.id | string | `"FOSS-EDC-CLIENT"` | id of the client that has a service account with roles to view the DTR. Used by the application to create DTR asset in the edc with read only access. See Admin Guide. Mandatory if backend.puris.dtr.idp.enabled = true. | +| backend.puris.dtr.idp.clients.edc.secret.alias | string | `"path/secret-name"` | alias for the vault used by the EDC in which the secret is stored. Mandatory if backend.puris.dtr.idp.enabled = true. | +| backend.puris.dtr.idp.clients.puris.id | string | `"FOSS-PURIS-CLIENT"` | id of the client that has a service account with roles to manage the DTR. Used by the application to create and update digital twins. See Admin Guide. Mandatory if backend.puris.dtr.idp.enabled = true. | +| backend.puris.dtr.idp.clients.puris.secret | string | `""` | secret of the client with write access (no vault alias). No default value will be created if empty. Mandatory if backend.puris.dtr.idp.enabled = true. | +| backend.puris.dtr.idp.enabled | bool | `true` | enables the usage of the IDP for the DTR. | +| backend.puris.dtr.idp.tokenurl | string | `"https://keycloak-service.com/realms/your-realm/openid-connect/token"` | token url of the idp for your specific realm. May be different to other idp token url in this config. Mandatory if backend.puris.dtr.idp.enabled = true. | +| backend.puris.dtr.url | string | `"http://localhost:4243"` | Endpoint for DTR | +| backend.puris.edc.controlplane.host | string | `"172.17.0.2"` | | +| backend.puris.edc.controlplane.key | string | `"password"` | Key for the EDC control plane | +| backend.puris.edc.controlplane.management.url | string | `"https:/your-edc-address:8181/management"` | Url to the EDC controlplane management of the edc | +| backend.puris.edc.controlplane.protocol.url | string | `"https://your-edc-address:8184/api/v1/dsp"` | Url to the EDC controlplane protocol API of the edc | +| backend.puris.edc.dataplane.public.url | string | `"https://your-data-plane:8285/api/public/"` | Url of one of your data plane's public api | +| backend.puris.erpadapter.authkey | string | `"x-api-key"` | | +| backend.puris.erpadapter.authsecret | string | `"erp-password"` | | +| backend.puris.erpadapter.enabled | bool | `false` | | +| backend.puris.erpadapter.url | string | `"http://my-erpadapter:8080"` | | +| backend.puris.existingSecret | string | `"secret-puris-backend"` | Secret for backend passwords. For more information look into 'backend-secrets.yaml' file. | +| backend.puris.frameworkagreement.credential | string | `"Puris"` | The name of the framework agreement. Starting with Uppercase and using CamelCase. | +| backend.puris.frameworkagreement.version | string | `"1.0"` | The version of the framework agreement, NEEDS TO BE PUT AS "STRING"! | +| backend.puris.generatematerialcatenaxid | bool | `true` | Flag that decides whether the auto-generation feature of the puris backend is enabled. Since all Material entities are required to have a CatenaX-Id, you must enter any pre-existing CatenaX-Id via the materials-API of the backend, when you are inserting a new Material entity to the backend's database. If a CatenaX-Id was not assigned to your Material so far, then this feature can auto-generate one randomly. In a real-world-scenario, you must then use this randomly generated CatenaX-Id for the lifetime of that Material entity. | +| backend.puris.itemstocksubmodel.apiassetid | string | `"itemstocksubmodel-api-asset"` | Asset ID for ItemStockSubmodel API | +| backend.puris.jpa.hibernate.ddl-auto | string | `"create"` | Initialises SQL database with Hibernate property "create" to allow Hibernate to first drop all tables and then create new ones | +| backend.puris.jpa.properties.hibernate.enable_lazy_load_no_trans | bool | `true` | Enables "Lazy load no trans" property to fetch of each lazy entity to open a temporary session and run inside a separate transaction | +| backend.puris.notification.apiassetid | string | `"notification-api-asset"` | Asset ID for Notification API | +| backend.puris.own.bpna | string | `"BPNA4444444444ZZ"` | Own BPNA of the EDC | +| backend.puris.own.bpnl | string | `"BPNL4444444444XX"` | Own BPNL of the EDC | +| backend.puris.own.bpns | string | `"BPNS4444444444XX"` | Own BPNS of the EDC | +| backend.puris.own.country | string | `"Germany"` | Own country | +| backend.puris.own.name | string | `"YOUR-COMPANY-NAME"` | Own name (self-description) | +| backend.puris.own.site.name | string | `"YOUR-SITE-NAME"` | Own site name | +| backend.puris.own.streetnumber | string | `"Musterstraße 110A"` | Own street and number | +| backend.puris.own.zipcodeandcity | string | `"12345 Musterhausen"` | Own zipcode and city | +| backend.puris.productionsubmodel.apiassetid | string | `"productionsubmodel-api-asset"` | Asset ID for ProductionSubmodel API | +| backend.puris.purpose.name | string | `"cx.puris.base"` | The name of the purpose to use for submodel contracts | +| backend.puris.purpose.version | string | `"1"` | The version of the purpose to use for submodel contracts. NEEDS TO BE PUT AS "STRING"! | +| backend.readinessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":120,"periodSeconds":25,"successThreshold":1,"timeoutSeconds":1}` | Checks if the pod is fully ready to operate | +| backend.readinessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a readiness probe | +| backend.readinessProbe.initialDelaySeconds | int | `120` | Delay in seconds after which an initial readiness probe is checked | +| backend.readinessProbe.periodSeconds | int | `25` | Wait time in seconds between readiness probes | +| backend.readinessProbe.successThreshold | int | `1` | Number of trys until a pod is marked ready | +| backend.readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the readiness probe | +| backend.replicaCount | int | `1` | Number of replicas of the Kubernetes deployment | +| backend.resources.limits | object | `{"cpu":"3000m","memory":"2048Mi"}` | Maximum resource limits of CPU und memory | +| backend.resources.requests | object | `{"cpu":"1000m","memory":"2048Mi"}` | Minimum requested resources for CPU und memory | +| backend.securityContext | object | `{"allowPrivilegeEscalation":false,"runAsGroup":3000,"runAsNonRoot":true,"runAsUser":8877}` | Security configurations | +| backend.securityContext.allowPrivilegeEscalation | bool | `false` | Get more privileges than the parent process | +| backend.securityContext.runAsGroup | int | `3000` | Configures the group id of a user for a run | +| backend.securityContext.runAsNonRoot | bool | `true` | Configures the non-root privileges for a run | +| backend.securityContext.runAsUser | int | `8877` | Configures the user id for a run | +| backend.service.port | int | `8081` | The port of the service | +| backend.service.type | string | `"ClusterIP"` | Type of the service | +| backend.serviceAccount.annotations | object | `{}` | Annotations to add to the service account | +| backend.serviceAccount.create | bool | `true` | Specifies whether a service account should be created | +| backend.serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | +| backend.tolerations | list | `[]` | Constrains for tolerations | +| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]` | Rules for the scheduler to find a pod | +| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.labelSelector.matchExpressions | list | `[{"key":"app.kubernetes.io/name","operator":"DoesNotExist"}]` | Matching Expressions as key and operators for the pod affinity | +| frontend.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].podAffinityTerm.topologyKey | string | `"kubernetes.io/hostname"` | Topology key of the Kubernetes cluster | +| frontend.autoscaling.enabled | bool | `false` | Enable or disable the autoscaling of pods | +| frontend.autoscaling.maxReplicas | int | `100` | Number of maximum replica pods for autoscaling | +| frontend.autoscaling.minReplicas | int | `1` | Number of minimum replica pods for autoscaling | +| frontend.autoscaling.targetCPUUtilizationPercentage | int | `80` | Value of CPU usage in percentage for autoscaling decisions | +| frontend.env | object | `{}` | Extra environment variables that will be passed onto the frontend deployment pods | +| frontend.image.pullPolicy | string | `"IfNotPresent"` | THe policy for the image pull process | +| frontend.image.repository | string | `"tractusx/app-puris-frontend"` | Repository of the docker image | +| frontend.image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | +| frontend.imagePullSecrets | list | `[]` | List of used secrets | +| frontend.ingress.annotations | object | `{}` | Annotations for the Ingress controller | +| frontend.ingress.className | string | `"nginx"` | Class name for the Ingress controller | +| frontend.ingress.enabled | bool | `false` | Enable the Ingress | +| frontend.ingress.hosts | list | `[{"host":"your-frontend-host-address.com","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}]` | Hosts for the Ingress controller | +| frontend.ingress.tls | list | `[]` | TLS certificates for the Ingress controller | +| frontend.livenessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}` | Checks whether a pod is alive or not | +| frontend.livenessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a liveness probe | +| frontend.livenessProbe.initialDelaySeconds | int | `10` | Delay in seconds after which an initial liveness probe is checked | +| frontend.livenessProbe.periodSeconds | int | `10` | Wait time in seconds between liveness probes | +| frontend.livenessProbe.successThreshold | int | `1` | Number of trys until a pod is marked alive | +| frontend.livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the liveness probe | +| frontend.nameOverride | string | `""` | Possibility to override the name | +| frontend.nodeSelector | object | `{}` | Constrains for the node selector | +| frontend.podAnnotations | object | `{}` | Annotations added to a running pod | +| frontend.podSecurityContext | object | `{}` | Added security contexts for a pod | +| frontend.puris.appName | string | `"PURIS"` | The name of the app displayed in the frontend | +| frontend.puris.baseUrl | string | `"your-backend-host-address.com"` | The base URL for the backend base URL without further endpoints | +| frontend.puris.endpointCustomer | string | `"stockView/customer?ownMaterialNumber="` | The endpoint for the customers who buy a material identified via the own material number for the stock view | +| frontend.puris.endpointDelivery | string | `"delivery"` | The endpoint for the delivery submodel | +| frontend.puris.endpointDemand | string | `"demand"` | The endpoint for the demand submodel | +| frontend.puris.endpointMaterialStocks | string | `"stockView/material-stocks"` | The endpoint for material stocks for the stock view | +| frontend.puris.endpointMaterials | string | `"stockView/materials"` | The endpoint for materials for the stock view | +| frontend.puris.endpointPartners | string | `"partners"` | The endpoint for partner information | +| frontend.puris.endpointProductStocks | string | `"stockView/product-stocks"` | The endpoint for product stocks for the stock view | +| frontend.puris.endpointProduction | string | `"production"` | The endpoint for the production submodel | +| frontend.puris.endpointProductionRange | string | `"production/range"` | The endpoint for the production range of the production submodel | +| frontend.puris.endpointProducts | string | `"stockView/products"` | The endpoint for products for the stock view | +| frontend.puris.endpointReportedMaterialStocks | string | `"stockView/reported-material-stocks?ownMaterialNumber="` | The endpoint for the partners' (supplier) material stocks that they potentially will deliver to me | +| frontend.puris.endpointReportedProductStocks | string | `"stockView/reported-product-stocks?ownMaterialNumber="` | The endpoint for the partners' (customer) product stocks that they received from me | +| frontend.puris.endpointSupplier | string | `"stockView/supplier?ownMaterialNumber="` | The endpoint for the suppliers who buy a material identified via the own material number for the stock view | +| frontend.puris.endpointUpdateReportedMaterialStocks | string | `"stockView/update-reported-material-stocks?ownMaterialNumber="` | The endpoint for triggering an update of your material stocks on your partners side | +| frontend.puris.endpointUpdateReportedProductStocks | string | `"stockView/update-reported-product-stocks?ownMaterialNumber="` | The endpoint for triggering an update of your product stocks on your partners side | +| frontend.puris.keycloak.clientId | string | `"appXYZ"` | Name of the client which is used for the application. | +| frontend.puris.keycloak.disabled | bool | `true` | Disable the Keycloak integration. | +| frontend.puris.keycloak.realm | string | `"Catena-X"` | Name of the Realm of the keycloak instance. | +| frontend.puris.keycloak.redirectUrlFrontend | string | `"https://your-frontend-url.com"` | URL to use as keycloak redirect url. | +| frontend.puris.keycloak.url | string | `"https://idp.com/auth"` | The URL to the IDP that should be used. | +| frontend.puris.rateLimiting.burst | int | `30` | Burst rate limiting for nginx. | +| frontend.puris.rateLimiting.limit | string | `"10m"` | Bucket zone limit for rate limiting in nginx. | +| frontend.puris.rateLimiting.rate | string | `"10r/s"` | Allowed rates per second for nginx rate limiting. | +| frontend.readinessProbe | object | `{"failureThreshold":3,"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}` | Checks if the pod is fully ready to operate | +| frontend.readinessProbe.failureThreshold | int | `3` | Number of failures (threshold) for a readiness probe | +| frontend.readinessProbe.initialDelaySeconds | int | `10` | Delay in seconds after which an initial readiness probe is checked | +| frontend.readinessProbe.periodSeconds | int | `10` | Wait time in seconds between readiness probes | +| frontend.readinessProbe.successThreshold | int | `1` | Number of trys until a pod is marked ready | +| frontend.readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds of the readiness probe | +| frontend.replicaCount | int | `1` | | +| frontend.resources.limits | object | `{"cpu":"600m","memory":"128Mi"}` | Maximum resource limits of CPU und memory | +| frontend.resources.requests | object | `{"cpu":"200m","memory":"128Mi"}` | Minimum requested resources for CPU und memory | +| frontend.securityContext | object | `{"allowPrivilegeEscalation":false,"runAsGroup":3000,"runAsNonRoot":true,"runAsUser":101}` | Security configurations | +| frontend.securityContext.allowPrivilegeEscalation | bool | `false` | Get more privileges than the parent process | +| frontend.securityContext.runAsGroup | int | `3000` | Configures the group id of a user for a run | +| frontend.securityContext.runAsNonRoot | bool | `true` | Configures the non-root privileges for a run | +| frontend.securityContext.runAsUser | int | `101` | Configures the user id for a run | +| frontend.service.port | int | `8080` | The port of the service | +| frontend.service.type | string | `"ClusterIP"` | Type of the service | +| frontend.serviceAccount.annotations | object | `{}` | Annotations to add to the service account | +| frontend.serviceAccount.create | bool | `true` | Specifies whether a service account should be created | +| frontend.serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | +| frontend.tolerations | list | `[]` | Constrains for tolerations | +| global.domain.backend.ingress | string | `"your-backend-host-address.com"` | | +| postgresql.auth.database | string | `"postgres"` | Name of the database. | +| postgresql.auth.existingSecret | string | `"secret-puris-postgres-init"` | Secret containing the password. For more information look into 'backend-secrets-postgres.yaml' file. | +| postgresql.auth.password | string | `""` | Password for the custom database user. Secret-key 'password' | +| postgresql.auth.passwordPostgres | string | `""` | Password for the database. Secret-key 'postgres-password'. | +| postgresql.auth.username | string | `"puris"` | Username for the custom database user. | +| postgresql.enabled | bool | `true` | Enable postgres by default, set to false to use existing postgres. Make sure to set backend.puris.jpa.hibernate.ddl-auto accordingly (by default database is created using hibernate ddl from backend). | +| postgresql.service | object | `{"ports":{"postgresql":5432}}` | Possibility to override the name nameOverride: "" | +| postgresql.service.ports.postgresql | int | `5432` | Port of postgres database. | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.13.1](https://github.com/norwoodj/helm-docs/releases/v1.13.1) ## NOTICE diff --git a/charts/puris/templates/backend-deployment.yaml b/charts/puris/templates/backend-deployment.yaml index 21071f28..d4327dd9 100644 --- a/charts/puris/templates/backend-deployment.yaml +++ b/charts/puris/templates/backend-deployment.yaml @@ -141,6 +141,8 @@ spec: value: "{{ .Values.backend.puris.demandsubmodel.apiassetid }}" - name: PURIS_DELIVERYSUBMODEL_APIASSETID value: "{{ .Values.backend.puris.deliverysubmodel.apiassetid }}" + - name: PURIS_NOTIFICATION_APIASSETID + value: "{{ .Values.backend.puris.notification.apiassetid }}" - name: PURIS_FRAMEWORKAGREEMENT_CREDENTIAL value: "{{ .Values.backend.puris.frameworkagreement.credential }}" - name: PURIS_FRAMEWORKAGREEMENT_VERSION @@ -168,6 +170,18 @@ spec: key: "puris-dtr-idp-puris-client-secret" - name: PURIS_GENERATEMATERIALCATENAXID value: "{{ .Values.backend.puris.generatematerialcatenaxid | default true}}" + - name: PURIS_ERPADAPTER_ENABLED + value: "{{ .Values.backend.puris.erpadapter.enabled}}" + - name: PURIS_ERPADAPTER_URL + value: "{{ .Values.backend.puris.erpadapter.url}}" + - name: PURIS_ERPADAPTER_AUTHKEY + value: {{ .Values.backend.puris.erpadapter.authkey }} + - name: PURIS_ERPADAPTER_AUTHSECRET + valueFrom: + secretKeyRef: + name: "{{ .Values.backend.puris.existingSecret }}" + key: "puris-erpadapter-authsecret" + ###################################### ## Additional environment variables ## ###################################### diff --git a/charts/puris/templates/backend-secrets.yaml b/charts/puris/templates/backend-secrets.yaml index 462879e4..1a14df02 100644 --- a/charts/puris/templates/backend-secrets.yaml +++ b/charts/puris/templates/backend-secrets.yaml @@ -17,6 +17,7 @@ data: puris-datasource-password: {{ (.Values.backend.puris.datasource.password | b64enc) | default (index $secret.data "puris-datasource-password") | quote }} puris-edc-controlplane-key: {{ (.Values.backend.puris.edc.controlplane.key | b64enc) | default (index $secret.data "puris-edc-controlplane-key") | quote }} puris-dtr-idp-puris-client-secret: {{ (.Values.backend.puris.dtr.idp.clients.puris.secret | b64enc) | default (index $secret.data "puris-dtr-idp-puris-client-secret") | quote }} + puris-erpadapter-authsecret: {{ (.Values.backend.puris.erpadapter.authsecret | b64enc) | default (index $secret.data "puris-erpadapter-authsecret") | quote }} {{ else -}} stringData: # if secret doesn't exist, use provided value from values file or generate a random one @@ -25,4 +26,5 @@ stringData: puris-edc-controlplane-key: {{ .Values.backend.puris.edc.controlplane.key | default ( randAlphaNum 32 ) | quote }} # don't generate a random one as this is set in identity provider puris-dtr-idp-puris-client-secret: {{ .Values.backend.puris.dtr.idp.clients.puris.secret | quote }} + puris-erpadapter-authsecret: {{ .Values.backend.puris.erpadapter.authkey | default ( randAlphaNum 32 ) | quote }} {{ end }} diff --git a/charts/puris/values.yaml b/charts/puris/values.yaml index 63651bf4..17221463 100644 --- a/charts/puris/values.yaml +++ b/charts/puris/values.yaml @@ -427,6 +427,9 @@ backend: deliverysubmodel: # -- Asset ID for DeliverySubmodel API apiassetid: deliverysubmodel-api-asset + notification: + # -- Asset ID for Notification API + apiassetid: notification-api-asset frameworkagreement: # -- The name of the framework agreement. Starting with Uppercase and using CamelCase. credential: Puris @@ -471,6 +474,15 @@ backend: # In a real-world-scenario, you must then use this randomly generated CatenaX-Id for the lifetime of that # Material entity. generatematerialcatenaxid: true + erpadapter: + # Toggles usage of the ERP adapter + enabled: false + # The url of your ERP adapter's request api + url: http://my-erpadapter:8080 + # The auth key to be used on your ERP adapter's request api + authkey: x-api-key + # The auth secret to be used on your ERP adapter's request api + authsecret: erp-password # -- Extra environment variables that will be passed onto the backend deployment pods env: {} diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index ee79115c..fcb03b7e 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -223,6 +223,26 @@ docker exec -it {container-id} crictl rmi puris-backend:dev docker exec -it {container-id} crictl rmi puris-frontend:dev ``` +## Testing Workflows locally + +[act](https://github.com/nektos/act) is a tool to run jobs within `./workflows` locally. Configuration of events can +be stored in `./act` + +Install by downloading the released binaries and add them to your path. + +```shell +cd + +act --list +>> Stage Job ID Job name Workflow name Workflow file Events +>> 0 check-dependencies-backend check-dependencies-backend 3rd Party Dependency Check (Eclipse Dash Tool) dash-dependency-check.yml workflow_dispatch,pull_request +>> 0 check-dependencies-frontend check-dependencies-frontend 3rd Party Dependency Check (Eclipse Dash Tool) dash-dependency-check.yml workflow_dispatch,pull_request +>> 0 lint-test lint-test Lint and Test Charts helm-test.yml pull_request,workflow_dispatch + +# run action with job-id lint-test for event as defined in pr-event.json +act --job lint-test -e .act/pr-event.json +``` + ## NOTICE This work is licensed under the [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 2537c292..10526d29 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -30,7 +30,7 @@ RUN npm install && npm run ${NPM_BUILD_MODE} RUN chmod -R 777 /app/dist # Copy Legal information for distributions, the star ones are copied by workflow -COPY DOCKER_NOTICE.md README.md NOTICE.md* SECURITY.md* LICENSE* DEPENDENCIES* /app/dist/ +COPY DOCKER_NOTICE.md README.md NOTICE.md* SECURITY.md* LICENSE* DEPENDENCIES* LICENSE_non_code* /app/dist/ # uses 101 restricted user FROM nginxinc/nginx-unprivileged:alpine diff --git a/local/tractus-x-edc/config/customer/puris-backend.properties b/local/tractus-x-edc/config/customer/puris-backend.properties index 20cd322c..af4d7c6d 100644 --- a/local/tractus-x-edc/config/customer/puris-backend.properties +++ b/local/tractus-x-edc/config/customer/puris-backend.properties @@ -6,6 +6,7 @@ puris.itemstocksubmodel.apiassetid=itemstocksubmodel-api-asset puris.productionsubmodel.apiassetid=productionsubmodel-api-asset puris.demandsubmodel.apiassetid=demandsubmodel-api-asset puris.deliverysubmodel.apiassetid=deliverysubmodel-api-asset +puris.notification.apiassetid=notification-api-asset puris.frameworkagreement.credential=Puris puris.frameworkagreement.version=1.0 puris.purpose.name=cx.puris.base @@ -22,6 +23,10 @@ puris.dtr.idp.edc-client.id=${KC_MANAGE_CLIENT_ID} puris.dtr.idp.edc-client.secret.alias=${CUSTOMER_KC_DTR_PURIS_CLIENT_ALIAS} puris.dtr.idp.puris-client.id=${KC_MANAGE_CLIENT_ID} puris.dtr.idp.puris-client.secret=${CUSTOMER_KC_DTR_PURIS_CLIENT_SECRET} + +puris.erpadapter.url=http://my-erpadapter:8080 +puris.erpadapter.authkey=x-api-key +puris.erpadapter.authsecret=erp-password # edc.controlplane.key=${EDC_API_PW} edc.controlplane.management.url=http://customer-control-plane:8181/management diff --git a/local/tractus-x-edc/config/supplier/puris-backend.properties b/local/tractus-x-edc/config/supplier/puris-backend.properties index 65aaa222..2c0a9bd4 100644 --- a/local/tractus-x-edc/config/supplier/puris-backend.properties +++ b/local/tractus-x-edc/config/supplier/puris-backend.properties @@ -6,6 +6,7 @@ puris.itemstocksubmodel.apiassetid=itemstocksubmodel-api-asset puris.productionsubmodel.apiassetid=productionsubmodel-api-asset puris.demandsubmodel.apiassetid=demandsubmodel-api-asset puris.deliverysubmodel.apiassetid=deliverysubmodel-api-asset +puris.notification.apiassetid=notification-api-asset puris.frameworkagreement.credential=Puris puris.frameworkagreement.version=1.0 puris.purpose.name=cx.puris.base @@ -22,6 +23,10 @@ puris.dtr.idp.edc-client.id=${KC_MANAGE_CLIENT_ID} puris.dtr.idp.edc-client.secret.alias=${SUPPLIER_KC_DTR_PURIS_CLIENT_ALIAS} puris.dtr.idp.puris-client.id=${KC_MANAGE_CLIENT_ID} puris.dtr.idp.puris-client.secret=${SUPPLIER_KC_DTR_PURIS_CLIENT_SECRET} + +puris.erpadapter.url=http://my-erpadapter:8080 +puris.erpadapter.authkey=x-api-key +puris.erpadapter.authsecret=erp-password # edc.controlplane.key=${EDC_API_PW} edc.controlplane.management.url=http://supplier-control-plane:9181/management