From a3bb78327a34bd5c600310e5490e2a084d3bcd75 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Tue, 3 Sep 2024 21:55:15 +0100 Subject: [PATCH] fix: Processed OMG ontology feedback (#58) * Initial changes in response to 2nd OMG AB feedback * Second set of changes in response to OMG AB comments * Additional note * Further changes for consistency; use dprod-shapes * Minor changes in response to PR comments * Replace remaining uses of DPROD as a Vocabulary with Ontology * fix(ontology): added `http://schema.org` namespace in order to support `sdo:affiliation` * fix(build): added `dist/` dir to `.gitignore` * fix(print): showing wrapped examples in printed PDF and shows links in examples * fix(build): spec-generator code recreates dist directory * fix(author): removed mikeb at his request * fix(example): reformatted some examples and made more turtle compliant * fix(404s): generate small HTML files for each class and property to avoid 404 * fix(generator): generator first removes then recreates `dist` directory * fix(shacl): all references to shapes done in `dprod-shapes:` namespace * fix(shacl): all references to shapes done in `dprod-shapes:` namespace * fix(dublic-core): using dct:description no longer dc:description * fix(pdf): wide format supported, wrapped examples * fix(respec): temporary fix respec errors wrt missing references --------- Co-authored-by: Pete Rivett --- DPROD.drawio.svg | 4 + DPROD.drawio.xml | 220 +++++++++++++ ontology/dprod/dprod-dcatprofile.ttl | 449 +++++++++++++-------------- ontology/dprod/dprod-ontology.ttl | 211 +++++-------- ontology/dprod/dprod-redundant.ttl | 18 +- respec/template.html | 223 ++++++++++++- spec-generator.py | 11 +- 7 files changed, 734 insertions(+), 402 deletions(-) create mode 100644 DPROD.drawio.svg create mode 100644 DPROD.drawio.xml diff --git a/DPROD.drawio.svg b/DPROD.drawio.svg new file mode 100644 index 0000000..1a6fbf1 --- /dev/null +++ b/DPROD.drawio.svg @@ -0,0 +1,4 @@ + + + +
label
label
inputPort
inputPort
inputDataset
inputDataset
dataProductOwner
dataProductOwner
hasPolicy
hasPolicy
businessDomain
businessDomain
description
description
lifecycleStatus
lifecycleStatus
Data Product
Data Product
purpose
purpose
productionProcessDescription
productionProcessDescription
outputPort
outputPort
outputDataset
outputDataset
type
type
isDistributionOf
isDistributionOf
accessService
accessService
format
format
description
description
conformsTo
conformsTo
Distribution
Distribution
type
type
label
label
informationSensitivityClassification
informationSensitivityClassifica...
conformTo
conformTo
hasPolicy
hasPolicy
distribution
distribution
description
description
Dataset
Dataset
securitySchemaType
securitySchemaType
endpointDescription
endpointDescription
protocol
protocol
isAccessServiceOf
isAccessServiceOf
endpointURL
endpointURL
DataService
DataService
inputPort
inputPort
outputPort
outputPort
inputDataset
inputDataset
outputDataset
outputDatas...
accessService
accessService
isAccessServiceOf (inverse)
isAccessServ...
distribution
distribution
isDistributionOf
isDistributi...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/DPROD.drawio.xml b/DPROD.drawio.xml new file mode 100644 index 0000000..7823a2a --- /dev/null +++ b/DPROD.drawio.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ontology/dprod/dprod-dcatprofile.ttl b/ontology/dprod/dprod-dcatprofile.ttl index dfb4744..0f22b88 100644 --- a/ontology/dprod/dprod-dcatprofile.ttl +++ b/ontology/dprod/dprod-dcatprofile.ttl @@ -1,420 +1,393 @@ # baseURI: https://ekgf.github.io/dprod/dprod-shapes/ -# imports: http://purl.org/dc/terms/ -# imports: http://www.w3.org/2004/02/skos/core -# imports: http://www.w3.org/ns/prov-o# -# imports: http://www.w3.org/ns/dcat -# imports: http://www.w3.org/ns/shacl +# imports: http://www.w3.org/ns/dcat# +# imports: http://www.w3.org/ns/shacl# # imports: https://ekgf.github.io/dprod/ -# prefix: dprod +# prefix: dprod-shapes -@base . +@base . +@prefix dprod-shapes: . @prefix dprod: . @prefix dcat: . @prefix dct: . -@prefix dc: . -@prefix dctype: . -@prefix dcterms: . @prefix odrl: . -@prefix foaf: . @prefix owl: . @prefix prov: . @prefix rdf: . @prefix rdfs: . @prefix sh: . -@prefix skos: . @prefix xsd: . @prefix sdo: . - +dprod-shapes: a owl:Ontology ; - rdfs:label "Data Product Shapes DCAT Profile"@en ; - dc:description "This is the DCAT profile based on DPROD which is an ontology designed to facilitate interoperability between data product descriptors."; - dct:creator [ - a foaf:Person ; - foaf:name "Natasa Varytimou" ; - sdo:affiliation [ - foaf:homepage ; - foaf:name "UBS" ; - ] ; - ] ; - dct:contributor [ - a foaf:Person ; - sdo:affiliation [ - foaf:homepage ; - foaf:name "eccenca GmbH" ; - ] ; - foaf:name "Marcel Fröhlich" ; - ] ; - dct:contributor [ - a foaf:Person ; - foaf:name "Pete Rivett" ; - foaf:homepage ; - ] ; - dct:contributor [ - a foaf:Person ; - sdo:affiliation [ - foaf:homepage ; - foaf:name "Brox IT-Solutions GmbH" - ] ; - foaf:name "Matthias Jurisch" ; - ] ; - sh:declare [ - sh:prefix "dprod" ; - sh:namespace "http://www.tbd.org/ns/dprod#" ; - ] ; dct:license ; - owl:imports dct: ; - owl:imports ; - owl:imports ; + dct:title "Shapes for the Data Product (DPROD) Ontology"@en ; + rdfs:label "DPROD ontology shapes"@en ; + dct:description "SHACL shapes for DPROD, including the DCAT classes and properties to be used."@en ; + rdfs:comment + "This is intended to be used with SHACL, not as an ontology: the ontology element is to provide the metadata for the set of shapes."@en ; + dct:modified "2024-08-31"^^xsd:date ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; owl:imports ; - owl:imports ; + owl:imports ; owl:imports ; - dct:modified "2023-12-20"^^xsd:date ; - foaf:maker [ - foaf:homepage ; - foaf:name "Enterprise Knowledge Graph Foundation" ; - ] ; - . - + owl:versionInfo "OMG Request For Comments Errata 2" ; + sh:declare [ + sh:prefix "dprod" ; + sh:namespace "https://ekgf.github.io/dprod/" ; + ] ; + sh:declare [ + sh:prefix "dprod-shapes" ; + sh:namespace "https://ekgf.github.io/dprod-shapes/" ; + ] ; + sh:declare [ + sh:prefix "dcat" ; + sh:namespace "http://www.w3.org/ns/dcat#" ; + ] ; +. + ############################# dprod Shapes ######################### -dprod:DataProductShape +dprod-shapes:DataProductShape a sh:NodeShape; - dc:description "A data product is a rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle."@en ; + dct:description "A data product is a rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle."@en ; rdfs:comment "A data product may have input and output ports, code and metadata"@en ; - rdfs:isDefinedBy dprod:; - rdfs:label "Data Product Shape" ; + rdfs:isDefinedBy dprod-shapes:; + rdfs:label "data product shape" ; sh:targetClass dprod:DataProduct; - sh:property dprod:DataProduct-label; - sh:property dprod:DataProduct-description; - sh:property dprod:DataProduct-dataProductOwner; - sh:property dprod:DataProduct-domain; - sh:property dprod:DataProduct-domain; - sh:property dprod:DataProduct-inputPort; - sh:property dprod:DataProduct-outputPort; - sh:property dprod:DataProduct-inputDataset; - sh:property dprod:DataProduct-outputDataset; - sh:property dprod:DataProduct-purpose; - sh:property dprod:DataProduct-hasPolicy; - sh:property dprod:DataProduct-lifecycleStatus; + sh:property dprod-shapes:DataProduct-label; + sh:property dprod-shapes:DataProduct-description; + sh:property dprod-shapes:DataProduct-dataProductOwner; + sh:property dprod-shapes:DataProduct-domain; + sh:property dprod-shapes:DataProduct-inputPort; + sh:property dprod-shapes:DataProduct-outputPort; + sh:property dprod-shapes:DataProduct-inputDataset; + sh:property dprod-shapes:DataProduct-outputDataset; + sh:property dprod-shapes:DataProduct-purpose; + sh:property dprod-shapes:DataProduct-hasPolicy; + sh:property dprod-shapes:DataProduct-lifecycleStatus; . -dprod:DataServiceShape +dprod-shapes:DataServiceShape a sh:NodeShape ; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:targetClass dcat:DataService ; - rdfs:label "Data Service Shape" ; - dc:description "A collection of operations that provides access to one or more datasets or data processing functions."@en ; - sh:property dprod:DataService-isAccessServiceOf ; - sh:property dprod:DataService-protocol ; - sh:property dprod:DataService-securitySchemaType; - sh:property dprod:DataService-endpointURL; - sh:property dprod:DataService-endpointDescription ; + rdfs:label "data service shape" ; + dct:description "A collection of operations that provides access to one or more datasets or data processing functions."@en ; + sh:property dprod-shapes:DataService-isAccessServiceOf ; + sh:property dprod-shapes:DataService-protocol ; + sh:property dprod-shapes:DataService-securitySchemaType; + sh:property dprod-shapes:DataService-endpointURL; + sh:property dprod-shapes:DataService-endpointDescription ; . -dprod:DistributionShape +dprod-shapes:DistributionShape a sh:NodeShape ; - rdfs:isDefinedBy dprod:; - rdfs:label "Distribution Shape" ; - dc:description "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)."@en ; + rdfs:isDefinedBy dprod-shapes:; + rdfs:label "distribution shape" ; + dct:description "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)."@en ; sh:targetClass dcat:Distribution ; - sh:property dprod:Distribution-accessService ; - sh:property dprod:Distribution-conformsTo ; - sh:property dprod:Distribution-isDistributionOf ; - sh:property dprod:Distribution-format; + sh:property dprod-shapes:Distribution-accessService ; + sh:property dprod-shapes:Distribution-conformsTo ; + sh:property dprod-shapes:Distribution-isDistributionOf ; + sh:property dprod-shapes:Distribution-format; . -dprod:DatasetShape +dprod-shapes:DatasetShape a sh:NodeShape ; - rdfs:isDefinedBy dprod:; - rdfs:label "Dataset Shape" ; - dc:description "A collection of data, published or curated by a single agent, and available for access or download in one or more representations."@en ; + rdfs:isDefinedBy dprod-shapes:; + rdfs:label "dataset shape" ; + dct:description "A collection of data, published or curated by a single agent, and available for access or download in one or more representations."@en ; sh:targetClass dcat:Dataset ; - sh:property dprod:Dataset-label; - sh:property dprod:Dataset-description; - sh:property dprod:Dataset-type; - sh:property dprod:Dataset-distribution ; - sh:property dprod:Dataset-conformsTo ; - sh:property dprod:Dataset-hasPolicy ; + sh:property dprod-shapes:Dataset-label; + sh:property dprod-shapes:Dataset-description; + sh:property dprod-shapes:Dataset-type; + sh:property dprod-shapes:Dataset-distribution ; + sh:property dprod-shapes:Dataset-conformsTo ; + sh:property dprod-shapes:Dataset-hasPolicy ; sh:property dcat:Dataset-informationSensitivityClassification; . -dprod:InformationSensitivityClassificationShape +dprod-shapes:InformationSensitivityClassificationShape a sh:NodeShape ; - rdfs:label "Information Sensitivity Classification Shape" ; - dc:description "The shape of Information Sensitivity Classification as defined in the DPROD schema."@en ; - rdfs:isDefinedBy dprod:; + rdfs:label "information sensitivity classification shape" ; + dct:description "The shape of Information Sensitivity Classification as defined in the DPROD schema."@en ; + rdfs:isDefinedBy dprod-shapes: ; sh:targetClass dprod:InformationSensitivityClassification; . -dprod:DataProductLifecycleStatusShape +dprod-shapes:DataProductLifecycleStatusShape a sh:NodeShape; - rdfs:label "Data Product Lifecycle Status Shape" ; - dc:description "The shape of Data Product Lifecycle Status."@en ; + rdfs:label "data product lifecycle status shape" ; + dct:description "The shape of Data Product Lifecycle Status."@en ; sh:targetClass dprod:DataProductLifecycleStatus; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; . -dprod:ProtocolShape +dprod-shapes:ProtocolShape a sh:NodeShape; - rdfs:label "Protocol Shape" ; - dc:description "A protocol, possibly including a specific version, used for communicating with a service."@en ; - rdfs:isDefinedBy dprod:; + rdfs:label "protocol shape" ; + dct:description "A protocol, possibly including a specific version, used for communicating with a service."@en ; + rdfs:isDefinedBy dprod-shapes:; sh:targetClass dprod:Protocol; . -dprod:SecuritySchemaTypeShape +dprod-shapes:SecuritySchemaTypeShape a sh:NodeShape; - rdfs:label "Security Schema Type Shape" ; - dc:description "A security schema type used for authentication and communication."@en ; - rdfs:isDefinedBy dprod:; + rdfs:label "security schema type shape" ; + dct:description "A security schema type used for authentication and communication."@en ; + rdfs:isDefinedBy dprod-shapes:; sh:targetClass dprod:SecuritySchemaType; . ############################# dprod Property Shapes ################ -dprod:DataProduct-label +dprod-shapes:DataProduct-label a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path rdfs:label; sh:datatype xsd:string; - dc:description "The name given to the data product."@en ; - rdfs:label "DataProduct-label"; + dct:description "The name given to the data product."@en ; + rdfs:label "data product label shape"; . -dprod:DataProduct-description +dprod-shapes:DataProduct-description a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:description; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:description; sh:datatype xsd:string; - dc:description "A free text description of the data product."@en ; - rdfs:label "DataProduct-description"; + dct:description "A free text description of the data product."@en ; + rdfs:label "data product description shape"; . -dprod:DataProduct-type +dprod-shapes:DataProduct-type a sh:PropertyShape; -rdfs:isDefinedBy dprod:; -sh:path dcterms:type; -dc:description "The nature or genre of the data product."@en ; -rdfs:label "DataProduct-description"; +rdfs:isDefinedBy dprod-shapes:; +sh:path dct:type; +dct:description "The nature or genre of the data product."@en ; +rdfs:label "data product description shape"; . -dprod:DataProduct-dataProductOwner +dprod-shapes:DataProduct-dataProductOwner a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:dataProductOwner; - sh:class foaf:Agent; - dc:description "The agent that is overall accountable for the data product. This includes managing the data product along its lifecycle ( creation, usage, versioning, deletion)."@en ; - rdfs:label "DataProduct-dataProductOwner"; + sh:class prov:Agent; + dct:description "The agent that is overall accountable for the data product. This includes managing the data product along its lifecycle."@en ; + rdfs:label "data product owner shape"; . -dprod:DataProduct-lifecycleStatus +dprod-shapes:DataProduct-lifecycleStatus a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:lifecycleStatus; sh:class dprod:DataProductLifecycleStatus; - dc:description "The lifecycle status of the data product taken from a control list ( Ideation, Design, Build, Deploy, Consume )."@en ; - rdfs:label "DataProduct-lifecycleStatus"; + dct:description "The lifecycle status of the data product taken from a controlled list ( Ideation, Design, Build, Deploy, Consume )."@en ; + rdfs:label "data product lifecycle status shape"; . -dprod:DataProduct-domain +dprod-shapes:DataProduct-domain a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:domain; - dc:description "The business or information area supported by the data product."@en ; + dct:description "The business or information area supported by the data product."@en ; rdfs:comment "The target class is left open"@en; - rdfs:label "DataProduct-domain"; + rdfs:label "data product domain shape"; . -dprod:DataProduct-purpose +dprod-shapes:DataProduct-purpose a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:purpose; sh:datatype xsd:string; - dc:description "A description of the objectives and intended usage of the data product."@en ; - rdfs:label "DataProduct-purpose"; + dct:description "A description of the objectives and intended usage of the data product."@en ; + rdfs:label "data product purpose shape"; . -dprod:DataProduct-hasPolicy +dprod-shapes:DataProduct-hasPolicy a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path odrl:hasPolicy; sh:class odrl:Policy; - dc:description "An ODRL conformant policy expressing the rights associated with the data product. This is an inferred relationship based on the rights expressed on the individual datasets of the data product."@en ; - rdfs:label "DataProduct-hasPolicy"; + dct:description "An ODRL conformant policy expressing the rights associated with the data product. This is an inferred relationship based on the rights expressed on the individual datasets of the data product."@en ; + rdfs:label "data product has policy shape"; . - -dprod:DataProduct-inputPort +dprod-shapes:DataProduct-inputPort a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:inputPort; sh:class dcat:DataService; - dc:description "An input port describes a set of services exposed by a data product to collect its source data and makes it available for further internal transformation. An input port can receive data from one or more upstream sources in a push (i.e. asynchronous subscription) or pop mode (i.e. synchronous query). Each data product may have one or more input ports."@en ; - rdfs:label "DataProduct-inputPort Shape"; + dct:description "An input port describes a set of services exposed by a data product to collect its source data and makes it available for further internal transformation. An input port can receive data from one or more upstream sources in a push (i.e. asynchronous subscription) or pop mode (i.e. synchronous query). Each data product may have one or more input ports."@en ; + rdfs:label "data product input port shape"; . -dprod:DataProduct-outputPort +dprod-shapes:DataProduct-outputPort a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:outputPort; sh:class dcat:DataService; - dc:description "An output port describes a set of services exposed by a data product to share the generated data in a way that can be understood and trusted."@en ; - rdfs:label "DataProduct-outputPort Shape"; + dct:description "An output port describes a set of services exposed by a data product to share the generated data in a way that can be understood and trusted."@en ; + rdfs:label "data product output port shape"; . -dprod:DataProduct-inputDataset +dprod-shapes:DataProduct-inputDataset a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:inputDataset; sh:class dcat:Dataset ; - dc:description "The source data made available to the data product through input data services. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the input ports."@en ; - rdfs:label "DataProduct-inputDataset"; + dct:description "The source data made available to the data product through input data services. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the input ports."@en ; + rdfs:label "data product input dataset shape"; . -dprod:DataProduct-outputDataset +dprod-shapes:DataProduct-outputDataset a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:outputDataset; sh:class dcat:Dataset; - dc:description "The data that is exposed by the data product through output data services in a way that can be understood and trusted. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the output ports."@en ; - rdfs:label "DataProduct-outputDataset"; + dct:description "The data that is exposed by the data product through output data services in a way that can be understood and trusted. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the output ports."@en ; + rdfs:label "data product output dataset shape"; . -dprod:Dataset-label +dprod-shapes:Dataset-label a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path rdfs:label; sh:datatype xsd:string ; - dc:description "The name given to the dataset"@en ; - rdfs:label "Dataset-label" ; + dct:description "The name given to the dataset"@en ; + rdfs:label "dataset label shape" ; . -dprod:Dataset-description +dprod-shapes:Dataset-description a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:description ; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:description ; sh:datatype xsd:string ; - dc:description "Free text description of the dataset."@en ; - rdfs:label "Dataset-distribution"; + dct:description "Free text description of the dataset."@en ; + rdfs:label "dataset distribution shape"; . -dprod:Dataset-type +dprod-shapes:Dataset-type a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:type; - dc:description "The type or genre of the dataset."@en ; - rdfs:label "Dataset-type"; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:type; + dct:description "The type or genre of the dataset."@en ; + rdfs:label "dataset type shape"; . -dprod:Dataset-distribution +dprod-shapes:Dataset-distribution a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dcat:distribution; sh:class dcat:Distribution; - dc:description "An available distribution of the dataset."@en ; - rdfs:label "Dataset-distribution"; + dct:description "An available distribution of the dataset."@en ; + rdfs:label "dataset distribution shape"; . - dprod:Dataset-conformsTo +dprod-shapes:Dataset-conformsTo a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:conformsTo; - dc:description "A model, schema, ontology, view or profile that the dataset conforms to."@en ; - rdfs:label "Dataset-conformsTo"; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:conformsTo; + dct:description "A model, schema, ontology, view or profile that the dataset conforms to."@en ; + rdfs:label "dataset conforms to shape"; . -dprod:Dataset-hasPolicy +dprod-shapes:Dataset-hasPolicy a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path odrl:hasPolicy; - dc:description "An ODRL conformant policy expressing the rights associated with the resource."@en ; - rdfs:label "Dataset-hasPolicy"; + dct:description "An ODRL conformant policy expressing the rights associated with the resource."@en ; + rdfs:label "dataset has policy shape"; . dcat:Dataset-informationSensitivityClassification a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:informationSensitivityClassification; sh:class dprod:InformationSensitivityClassification; - dc:description "The relationship to a taxonomy that defines the different levels of control and protection that must be applied to the dataset. This is a more granular relationship of the classification of a dataset that includes other classification concepts "@en ; - rdfs:label "Dataset-informationSensitivityClassification."; + dct:description "The relationship to a taxonomy that defines the different levels of control and protection that must be applied to the dataset. This is a more granular relationship of the classification of a dataset that includes other classification concepts "@en ; + rdfs:label "dataset information sensitivity classification shape"; . -dprod:Distribution-accessService +dprod-shapes:Distribution-accessService a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dcat:accessService; sh:class dcat:DataService; - dc:description "A data service that gives access to the distribution of the dataset."@en ; - rdfs:label "Distribution-accessService" ; + dct:description "A data service that gives access to the distribution of the dataset."@en ; + rdfs:label "distribution access service shape" ; . -dprod:Distribution-isDistributionOf +dprod-shapes:Distribution-isDistributionOf a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:isDistributionOf; sh:class dcat:Dataset; - dc:description "The dataset that this distribution makes available."@en ; - rdfs:label "Distribution-isDistributionOf" ; + dct:description "The dataset that this distribution makes available."@en ; + rdfs:label "distribution is distribution of shape" ; . -dprod:Distribution-conformsTo +dprod-shapes:Distribution-conformsTo a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:conformsTo; - dc:description "The schema that the distribution conforms to that is format and technology dependent."@en ; - rdfs:label "Distribution-conformsTo"; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:conformsTo; + dct:description "The schema that the distribution conforms to that is format and technology dependent."@en ; + rdfs:label "distribution conforms to shape"; . -dprod:Distribution-format +dprod-shapes:Distribution-format a sh:PropertyShape; - rdfs:isDefinedBy dprod:; - sh:path dcterms:format; - dc:description "The file format of the distribution."@en ; - rdfs:label "Distribution-format"; + rdfs:isDefinedBy dprod-shapes:; + sh:path dct:format; + dct:description "The file format of the distribution."@en ; + rdfs:label "distribution format shape"; . -dprod:DataService-isAccessServiceOf +dprod-shapes:DataService-isAccessServiceOf a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:isAccessServiceOf; sh:class dcat:Distribution; - dc:description "The dataset distribution that is being offered through this Data Service."@en ; - rdfs:label "DataService-isAccessServiceOf Shape" ; + dct:description "The dataset distribution that is being offered through this Data Service."@en ; + rdfs:label "data service is access service of shape" ; . -dprod:DataService-protocol +dprod-shapes:DataService-protocol a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:protocol; sh:class dcat:Protocol; - dc:description "A protocol (possibly one of many options) used to communicate with this Data Service."@en ; - rdfs:label "DataService-protocol Shape" ; + dct:description "A protocol (possibly one of many options) used to communicate with this Data Service."@en ; + rdfs:label "data service protocol shape" ; . -dprod:DataService-securitySchemaType +dprod-shapes:DataService-securitySchemaType a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dprod:securitySchemaType; sh:class dcat:SecuritySchemaType; - dc:description "The security schema type used for authentication and communication with this Data Service."@en ; - rdfs:label "DataService-securitySchemaType Shape" ; + dct:description "The security schema type used for authentication and communication with this Data Service."@en ; + rdfs:label "data service security schema type shape" ; . -dprod:DataService-endpointURL +dprod-shapes:DataService-endpointURL a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dcat:endpointURL; - dc:description "The root location or primary endpoint of the service."@en ; - rdfs:label "DataService-endpointURL" ; + dct:description "The root location or primary endpoint of the service."@en ; + rdfs:label "data service endpoint URL shape" ; . -dprod:DataService-endpointDescription +dprod-shapes:DataService-endpointDescription a sh:PropertyShape; - rdfs:isDefinedBy dprod:; + rdfs:isDefinedBy dprod-shapes:; sh:path dcat:endpointDescription; - dc:description "A description of the services available via the end-points, including their operations, parameters etc."@en ; - rdfs:label "DataService-endpointDescription"; + dct:description "A description of the services available via the end-points, including their operations, parameters etc."@en ; + rdfs:label "data service endpoint description shape"; . diff --git a/ontology/dprod/dprod-ontology.ttl b/ontology/dprod/dprod-ontology.ttl index bc15e84..275b7f0 100644 --- a/ontology/dprod/dprod-ontology.ttl +++ b/ontology/dprod/dprod-ontology.ttl @@ -1,160 +1,95 @@ # baseURI: https://ekgf.github.io/dprod/ -# imports: http://purl.org/dc/terms/ -# imports: http://www.w3.org/2004/02/skos/core -# imports: http://www.w3.org/ns/prov-o# -# imports: http://www.w3.org/ns/dcat +# imports: http://www.w3.org/ns/dcat# # prefix: dprod - @base . @prefix dprod: . @prefix dcat: . @prefix dct: . -@prefix dc: . -@prefix dctype: . -@prefix foaf: . @prefix owl: . @prefix prov: . @prefix rdf: . @prefix rdfs: . -@prefix dcterms: . -@prefix odrl: . -@prefix skos: . @prefix xsd: . -@prefix sdo: . + +# Since Dublin Core is not an ontology, declare here that the properties used are to be treated as AnnotationProperties in OWL +dct:description a owl:AnnotationProperty . +dct:contributor a owl:AnnotationProperty . +dct:license a owl:AnnotationProperty . +dct:modified a owl:AnnotationProperty . dprod: a owl:Ontology ; - rdfs:label "Data Product Vocabulary"@en ; - dc:description "DPROD is an RDF vocabulary designed to facilitate interoperability between data product descriptors." ; + dct:title "The Data Product (DPROD) Ontology"@en ; + rdfs:label "DPROD ontology"@en ; + dct:description "DPROD extends DCAT to enable publishers to describe Data Products and data services in a decentralized way."@en ; rdfs:comment - "This vocabulary includes terms for the definition of the data product as defined from the Data Product Working Group. The vocabulary utilises the notion of Datasets as defined from DCAT vocabulary"@en ; - owl:imports ; - owl:imports ; - owl:imports ; - owl:imports ; - dct:creator - [ - a foaf:Person ; - foaf:name "Natasa Varytimou" ; - sdo:affiliation - [ - foaf:homepage ; - foaf:name "UBS" ; - ] ; - ] ; - dct:contributor - [ - a foaf:Person ; - foaf:name "Pete Rivett" ; - foaf:homepage ; - ] ; - dct:contributor - [ - a foaf:Person ; - foaf:homepage ; - sdo:affiliation - [ - foaf:homepage ; - foaf:name "agnos.ai" ; - ] ; - foaf:name "Jacobus Geluk" ; - ] ; - dct:contributor - [ - a foaf:Person ; - sdo:affiliation - [ - foaf:homepage ; - foaf:name "eccenca GmbH" ; - ] ; - foaf:name "Marcel Fröhlich" ; - ] ; - dct:contributor - [ - a foaf:Person ; - sdo:affiliation - [ - foaf:homepage ; - foaf:name "Brox IT-Solutions GmbH" - ] ; - foaf:name "Matthias Jurisch" ; - ] ; - + "The ontology utilizes the notion of Datasets as defined from DCAT vocabulary."@en ; + rdfs:comment "DPROD is an OWL ontology designed to facilitate interoperability between data product descriptors."@en ; dct:license ; - dct:modified "2023-07-07"^^xsd:date ; - rdfs:comment "DPROD is an RDF vocabulary designed to facilitate interoperability between data product descriptors."@en ; - rdfs:label "The data product vocabulary"@en ; - owl:imports dct: ; - owl:imports ; - owl:imports ; + dct:modified "2024-08-31"^^xsd:date ; + dct:publisher ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; + dct:contributor ; owl:imports ; - owl:versionInfo "Create the Data Product Ontology based on input and output DCAT datasets"@en ; - foaf:maker - [ - foaf:homepage ; - foaf:name "Enterprise Knowledge Graph Foundation" ; - ] ; + owl:versionInfo "OMG Request For Comments Errata 2" ; . - ############################# DPROD Classes ######################### dprod:DataProduct a owl:Class, rdfs:Class ; - dc:description - "A data product is a rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle."@en ; + dct:description + "A rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle."@en ; rdfs:comment "A data product may have input and output ports, code and metadata"@en ; rdfs:isDefinedBy dprod: ; - rdfs:label "Data Product" ; + rdfs:label "data product" ; rdfs:subClassOf dcat:Resource ; . dprod:DataProductLifecycleStatus a owl:Class, rdfs:Class ; - dc:description - "The lifecycle status of the data product taken from a control list ( Ideation, Design, Build, Deploy, Consume )."@en ; - rdfs:comment "The lifecycle of the data product as defined from EDM Council CDMC"@en ; + dct:description + "The development status of the data product taken from a controlled list (e.g. Ideation, Design, Build, Deploy, Consume)."@en ; + rdfs:comment "The lifecycle of the data product as defined by EDM Council CDMC"@en ; rdfs:isDefinedBy dprod: ; - rdfs:label "Data Product Lifecycle Status" ; + rdfs:label "data product lifecycle status" ; rdfs:subClassOf dprod:Enumeration ; + rdfs:seeAlso ; . dprod:InformationSensitivityClassification a owl:Class, rdfs:Class ; - rdfs:label "Information Sensitivity Classification" ; - dc:description - "A taxonomy of concepts that classifies the information within a dataset that indicates the level of control and protection that must be applied to the dataset."@en ; + rdfs:label "information sensitivity classification" ; + dct:description + "A classification of the information within a dataset to indicate the level of control and protection that must be applied."@en ; rdfs:isDefinedBy dprod: ; rdfs:seeAlso ; . dprod:Enumeration a owl:Class, rdfs:Class ; - dc:description "The superclass of enumeration lists referenced from data product related artifacts."@en ; + dct:description "The superclass of enumeration lists referenced from data product related artifacts."@en ; rdfs:isDefinedBy dprod: ; - rdfs:label "Enumeration" ; + rdfs:label "enumeration" ; . dprod:Protocol a owl:Class, rdfs:Class ; - dc:description "A protocol, possibly including a specific version, used for communicating with a service."@en ; + dct:description "A detailed specification, possibly including a specific version, for how to communicate with a service."@en ; rdfs:isDefinedBy dprod: ; - rdfs:label "Protocol" ; + rdfs:label "protocol" ; . dprod:SecuritySchemaType a owl:Class, rdfs:Class ; - dc:description "A security schema type used for authentication and communication."@en ; - rdfs:isDefinedBy dprod: ; - rdfs:label "Security Schema Type" ; -. - -dprod:Protocol - a owl:Class, rdfs:Class ; - dc:description "A protocol, possibly including a specific version, used for communicating with a service."@en ; + dct:description "A classification encompassing a set of rules used for authentication and communication."@en ; rdfs:isDefinedBy dprod: ; - rdfs:label "Protocol" ; + rdfs:label "security schema type" ; . @@ -166,10 +101,10 @@ dprod:dataProductOwner # a rdfs:subPropertyOf prov:wasAttributedTo ; # in line with DCAT rdfs:isDefinedBy dprod: ; rdfs:domain dprod:DataProduct ; - rdfs:range foaf:Agent ; - dc:description - "The agent that is overall accountable for the data product. This includes managing the data product along its lifecycle ( creation, usage, versioning, deletion)."@en ; - rdfs:label "dataProductowner" ; + rdfs:range prov:Agent ; + dct:description + "The agent that is accountable overall for the data product, including managing it through its lifecycle."@en ; + rdfs:label "data product owner" ; . dprod:lifecycleStatus @@ -178,109 +113,113 @@ dprod:lifecycleStatus rdfs:isDefinedBy dprod: ; rdfs:domain dprod:DataProduct ; rdfs:range dprod:DataProductLifecycleStatus ; - dc:description - "The lifecycle status of the data product taken from a control list ( Ideation, Design, Build, Deploy, Consume ). "@en ; - rdfs:label "lifecycleStatus" ; + dct:description + "The development status of the data product. "@en ; + rdfs:label "lifecycle status" ; . dprod:informationSensitivityClassification a rdfs:Property, owl:ObjectProperty ; - dc:description + dct:description "More granular classification that indicates the level of control and protection that must be applied to the asset due to the nature of the data and its sensitivity or importance to the organization."@en ; rdfs:isDefinedBy dprod: ; rdfs:domain dcat:Dataset ; - rdfs:range dprod:InformationSensitiviyClassification ; - rdfs:label "information Sensitivity Classification" ; + rdfs:range dprod:InformationSensitivityClassification ; + rdfs:label "information sensitivity classification" ; . dprod:purpose a rdfs:Property, owl:DatatypeProperty ; - dc:description "A description of the objectives and intended usage of the data product."@en ; + dct:description "A description of the objectives and intended usage of the data product."@en ; rdfs:isDefinedBy dprod: ; rdfs:domain dprod:DataProduct ; rdfs:range xsd:string ; + rdfs:label "purpose" ; . dprod:domain a rdfs:Property, owl:ObjectProperty ; - dc:description "The business or information area supported by the data product."@en ; + dct:description "The business or information area supported by the data product."@en ; rdfs:comment "The domain is intended to be a resource in its own right. This specification does not constrain the class to be used."@en ; rdfs:isDefinedBy dprod: ; rdfs:domain dprod:DataProduct ; + rdfs:label "domain" ; . dprod:inputPort - a rdfs:Property, owl:objectProperty ; + a rdfs:Property, owl:ObjectProperty ; rdfs:domain dprod:DataProduct ; rdfs:range dcat:DataService ; rdfs:isDefinedBy dprod: ; - dc:description - "An input port describes a set of services exposed by a data product to collect its source data and makes it available for further internal transformation. An input port can receive data from one or more upstream sources in a push (i.e. asynchronous subscription) or pop mode (i.e. synchronous query). Each data product may have one or more input ports."@en ; - rdfs:label "inputPort" ; + dct:description + "A set of services exposed by a data product to collect its source data and makes it available for further internal transformation. An input port can receive data from one or more upstream sources in a push (i.e. asynchronous subscription) or pop mode (i.e. synchronous query). Each data product may have one or more input ports."@en ; + rdfs:label "input port" ; . dprod:outputPort - a rdfs:Property, owl:objectProperty ; + a rdfs:Property, owl:ObjectProperty ; rdfs:domain dprod:DataProduct ; rdfs:range dcat:DataService ; rdfs:isDefinedBy dprod: ; - dc:description - "An output port describes a set of services exposed by a data product to share the generated data in a way that can be understood and trusted."@en ; - rdfs:label "outputPort" ; + dct:description + "A set of services exposed by a data product to share the generated data in a way that can be understood and trusted."@en ; + rdfs:label "output port" ; . dprod:inputDataset - a rdfs:Property, owl:objectProperty ; + a rdfs:Property, owl:ObjectProperty ; rdfs:domain dprod:DataProduct ; rdfs:range dcat:Dataset ; rdfs:isDefinedBy dprod: ; - dc:description + dct:description "The source data made available to the data product through input data services. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the input ports."@en ; - rdfs:label "input Dataset" ; + rdfs:label "input dataset" ; . dprod:outputDataset - a rdfs:Property, owl:objectProperty ; + a rdfs:Property, owl:ObjectProperty ; rdfs:domain dprod:DataProduct ; rdfs:range dcat:Dataset ; rdfs:isDefinedBy dprod: ; - dc:description + dct:description "The data that is exposed by the data product through output data services in a way that can be understood and trusted. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the output ports."@en ; - rdfs:label "output Dataset" ; + rdfs:label "output dataset" ; . dprod:isDistributionOf - a rdfs:Property, owl:objectProperty ; + a rdfs:Property, owl:ObjectProperty ; owl:inverseOf dcat:distribution ; rdfs:isDefinedBy dprod: ; rdfs:domain dcat:Distribution ; - dc:description "The dataset that this distribution makes available."@en ; - rdfs:label "isDistributionOf" ; + dct:description "The dataset that this distribution makes available."@en ; + rdfs:label "is distribution of" ; . dprod:isAccessServiceOf a rdfs:Property, owl:ObjectProperty ; - dc:description "The dataset distribution that is being offered through this Data Service."@en ; + dct:description "The dataset distribution that is being offered through this data service."@en ; rdfs:isDefinedBy dprod: ; owl:inverseOf dcat:accessService ; rdfs:domain dcat:DataService ; rdfs:range dcat:Distribution ; - rdfs:label "is Access Service Of" ; + rdfs:label "is access service of" ; . dprod:protocol a rdfs:Property, owl:ObjectProperty ; - dc:description "A protocol (possibly one of many options) used to communicate with this Data Service."@en ; + dct:description "A protocol (possibly one of many options) used to communicate with this data service."@en ; rdfs:isDefinedBy dprod: ; rdfs:domain dcat:DataService ; # rdfs:range rdf:resource ; # better let user decide whether they want Protocol class or own class or skos + rdfs:label "protocol" ; . dprod:securitySchemaType a rdfs:Property, owl:ObjectProperty ; - dc:description "The security schema type used for authentication and communication with this Data Service."@en ; + dct:description "The security schema type used for authentication and communication with this Data Service."@en ; rdfs:isDefinedBy dprod: ; rdfs:domain dcat:DataService ; # rdfs:range rdf:resource ; # better let user decide whether they want SecuritySchemaType class or own class or skos + rdf:label "security schema type" ; . diff --git a/ontology/dprod/dprod-redundant.ttl b/ontology/dprod/dprod-redundant.ttl index bcd1cd4..79cb2c2 100644 --- a/ontology/dprod/dprod-redundant.ttl +++ b/ontology/dprod/dprod-redundant.ttl @@ -145,12 +145,12 @@ dprod:DataProductShape dc:description "The shape of the Data Product. A data product is a rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle."@en ; rdfs:isDefinedBy dprod:; sh:targetClass dprod:DataProduct; - sh:property dprod:DataProduct-dataProductOwner; - sh:property dprod:DataProduct-domain; - sh:property dprod:DataProduct-inputPort; - sh:property dprod:DataProduct-outputPort; - sh:property dprod:DataProduct-purpose; - sh:property dprod:DataProduct-productionProcessDescription; + sh:property dprod-shapes:DataProduct-dataProductOwner; + sh:property dprod-shapes:DataProduct-domain; + sh:property dprod-shapes:DataProduct-inputPort; + sh:property dprod-shapes:DataProduct-outputPort; + sh:property dprod-shapes:DataProduct-purpose; + sh:property dprod-shapes:DataProduct-productionProcessDescription; . dprod:DataServiceShape @@ -159,9 +159,9 @@ dprod:DataServiceShape dc:description "The shape of the DCAT Data Service as used in the DPROD vocabulary. "@en ; rdfs:isDefinedBy dprod:; sh:targetClass dcat:DataService; - sh:property dprod:DataService-isAccessServiceOf ; - sh:property dprod:DataService-protocol ; - sh:property dprod:DataService-securitySchemaType; + sh:property dprod-shapes:DataService-isAccessServiceOf ; + sh:property dprod-shapes:DataService-protocol ; + sh:property dprod-shapes:DataService-securitySchemaType; . dprod:DistributionShape diff --git a/respec/template.html b/respec/template.html index 67bc74b..8c83938 100644 --- a/respec/template.html +++ b/respec/template.html @@ -97,6 +97,32 @@ ], }, ], + localBiblio: { + OWL: { + title: "OWL 2 Web Ontology Language Quick Reference Guide (Second Edition)", + href: "http://www.w3.org/TR/2012/RECowl2-quick-reference-20121211/", + status: "W3C Recommendation 11 December 2012", + publisher: "W3C", + }, + RDF: { + title: "RDF 1.1 Concepts and Abstract Syntax", + href: "http://www.w3.org/TR/rdf11-concepts/", + status: "W3C Recommendation, 25 February 2014", + publisher: "W3C", + }, + DCAT: { + title: "Data Catalog Vocabulary (DCAT) - Version 3", + href: "https://www.w3.org/TR/vocab-dcat/", + status: "W3C Recommendation 24 August 2024", + publisher: "W3C", + }, + "Dublin Core": { + title: "DCMI Metadata Terms", + href: "https://www.dublincore.org/specifications/dublin-core/dcmi-terms/", + status: "Issued 2020-01-20 by the Dublin Core™ Metadata Initiative.", + publisher: "Dublin Core™ Metadata Initiative", + }, + }, }; @@ -233,6 +285,8 @@

PATENTS

+ This specification is made available under the OMG’s Copyright and Non-Assertion Covenant (see + https://www.omg.org/cgi-bin/doc.cgi?ipr for details). The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a license may be required by any OMG specification, @@ -317,7 +371,7 @@

-

Data Product Vocabulary (DPROD)

+

Data Product Ontology (DPROD)

@@ -360,17 +414,17 @@

Scope

The Data Product (DPROD) specification is a profile of the Data Catalog (DCAT) Vocabulary, designed to describe Data Products. - This document defines the schema and provides examples for its use. + This document defines the schema and provides examples of its use.

DPROD extends DCAT to enable publishers to describe Data Products and data services in a decentralized way. - By using a standard model and vocabulary, DPROD facilitates the consumption and aggregation of metadata + By using a standard model and ontology, DPROD facilitates the consumption and aggregation of metadata from multiple Data Marketplaces. This approach increases the discoverability of products and services, supports decentralized data publishing, and enables federated search across multiple sites using a uniform query mechanism and structure.

- The namespace for DPROD terms is https://ekgf.github.io/dprod/# + The namespace for DPROD terms is https://ekgf.github.io/dprod/

The suggested prefix for the DPROD namespace is dprod @@ -432,13 +486,101 @@

Conformance

+
+

References

+

+ [DCAT] Data Catalog Vocabulary (DCAT) - Version 3, W3C Recommendation 24 August 2024. + Available at https://www.w3.org/TR/vocab-dcat/. +

+

+ [Dublin Core] DCMI Metadata Terms, Issued 2020-01-20 by the Dublin Core™ Metadata Initiative. + Available at https://www.dublincore.org/specifications/dublin-core/dcmi-terms/. +

+

[JSON-LD] JSON-LD 1.1, Gregg Kellogg, Markus Lanthaler, Editors. W3C Recommendation 11 January 2018. + Available at https://www.w3.org/TR/json-ld11/. +

+

[ODRL] Open Digital Rights Language (ODRL) Version 2.2, W3C Recommendation 15 September 2016. + Available at https://www.w3.org/TR/odrl/. +

+

[[OWL]] OWL 2 Web Ontology Language Quick Reference Guide (Second Edition), W3C + Recommendation 11 December 2012. Available at http://www.w3.org/TR/2012/RECowl2-quick-reference-20121211/. +

+

[[\PROV]] PROV-Overview: An Overview of the PROV Family of Documents, W3C Recommendation 30 April + 2013. Available at http://www.w3.org/TR/prov-overview/. +

+

[RDF Concepts] RDF 1.1 Concepts and Abstract Syntax. Richard Cyganiak, David Wood and Markus + Lanthaler, Editors. W3C Recommendation, 25 February 2014. Available at + http://www.w3.org/TR/rdf11-concepts/ +

+

[RDF Schema] RDF Schema 1.1. Dan Brickley and R.V. Guha, Editors. W3C Recommendation, 25 + February 2014. Available at http:// www.w3.org/TR/rdf-schema/. +

+

[SHACL] Shapes Constraint Language (SHACL), Dimitris Kontokostas, Holger Knublauch, et al., Editors. + W3C Recommendation 20 July 2017. Available at https://www.w3.org/TR/shacl/. +

+

[Turtle] Turtle - Terse RDF Triple Language. Eric Prudhommeaux and Gavin Carothers, Editors. W3C + Recommendation 14 January 2014. Available at http://www.w3.org/TR/turtle/. +

+

[W3C Datatypes in RDF and OWL] XML Schema Datatypes in RDF and OWL, W3C Working Group Note 14 March + 2006, Available at http://www.w3.org/TR/2006/NOTE-swbp-xsch-datatypes20060314/. +

+

[XML Schema Datatypes] XML Schema Part 2: Datatypes Second Edition. W3C Recommendation 28 October + 2004. Available at http://www.w3.org/TR/xmlschema-2/. +

+
+

Terms and Definitions

- All terms introduced in this specification are given definitions in Chapter 5. + All terms introduced in this specification are given definitions in the Data Product Model defined later.

+
+

Symbols

+

+ The following acronyms are used in this specification. +

    +
  • + DCAT - Data Catalog Vocabulary +
  • +
  • + DPROD - Data Product Ontology +
  • +
  • + JSON-LD - Javascript Object Notation for Linked Data +
  • +
  • + IRI - Internationalized Resource Identifier +
  • +
  • + ODRL - Open Digital Rights Language +
  • +
  • + OWL - Web Ontology Language +
  • +
  • + PROV - Provenance Ontology +
  • +
  • + RDF - Resource Description Format +
  • +
  • + SHACL - Shapes Constraint Language +
  • +
  • + TTL - Turtle (commonly used serialization for RDF) +
  • +
  • + URI - Uniform Resource Identifier +
  • +
  • + W3C - World Wide Web Consortium +
  • +
+

+
+

Normative namespaces

Namespaces and prefixes used in normative parts of this Profile are shown in the following table.

@@ -459,7 +601,7 @@

Normative namespaces

http://www.w3.org/ns/dcat# - [[VOCAB-DCAT-3]] + [[\VOCAB-DCAT-3]] @@ -468,7 +610,7 @@

Normative namespaces

http://purl.org/dc/terms/ - [[DCTERMS]] + [[\DCTERMS]] @@ -477,16 +619,61 @@

Normative namespaces

http://www.w3.org/ns/odrl/2/ - [[ODRL-VOCAB]] + [[\ODRL-VOCAB]] + + + + owl + + + + + [[\OWL]] + + + + prov + + + + + [[\PROV]] + + + + rdf + + + + + [[RDF]] - sdo + rdfs - https://schema.org + - [[SCHEMA-ORG]] + [[\RDFS]] + + + + sh + + + + + [[\SHACL]] + + + + xsd + + + + + [[\XSD]] @@ -528,7 +715,7 @@

Data Product (DPROD) Model

allows different organizations to share data securely and in a standardized way.

- Information model for the Profile + Information model for the Profile
Overview of DPROD model and its relationship with DCAT classes
@@ -600,6 +787,12 @@

Data Product (DPROD) Model

One can see that the schema resolves.

+

+ The following sections are driven by the Shapes definitions for DPROD, which represent the properties + expected to be used for instances of the above classes. As such they include properties defined by the DCAT specification + which DPROD extends. The prefix in the identifier for each entry indicates the ontology defining the property. +

+ {% for cls in classes %}

{{cls.name}}

@@ -641,7 +834,9 @@

Worked Examples

{{example.name}}

{{example.text}}

-
{{example.json}}
+ {% if example.json is not none and example.json != '' %} +
{{example.json}}
+ {% endif %}
{% endfor %}
@@ -650,7 +845,7 @@

{{example.name}}

Acknowledgements

The editors gratefully acknowledge the feedback and - contributions made by the EDM Council's CDMC team. + contributions made by individuals who have participated in EDM Council's CDMC team.

diff --git a/spec-generator.py b/spec-generator.py index 83f4add..9cf863e 100644 --- a/spec-generator.py +++ b/spec-generator.py @@ -8,7 +8,7 @@ import jinja2 import markdown import rdflib -from rdflib import Graph, URIRef, DCTERMS, SH, DC +from rdflib import Graph, URIRef, DCTERMS, SH, DCTERMS from rdflib.namespace import OWL, RDF, RDFS, XSD, DCAT import json import html @@ -27,7 +27,7 @@ "rdfs": str(RDFS), "xsd": str(XSD), "dcat": str(DCAT), - "dcterms": str(DCTERMS), + "dct": str(DCTERMS), "sh": str(SH), "id": "@id", "type": "@type" @@ -114,7 +114,7 @@ def add_to_context(uri,classes): for s, p, o in g.triples((None, RDFS.subClassOf, uri)): add_to_context(s) # TODO: second parameter is missing - description = g.value(URIRef(uri), DC.description) + description = g.value(URIRef(uri), DCTERMS.description) if hasattr(class_obj, 'targetClass'): owl_class = RdfClass(name=name, uri=class_obj.targetClass) @@ -130,8 +130,9 @@ def add_to_context(uri,classes): for s, p, o in g.triples((uri, SH.property, None)): property_shape_uri = o + print(f" uri={uri} p={p} o={o}") path = next(g.triples((o, SH.path, None))) - description = next(g.triples((o, DC.description, None))) + description = next(g.triples((o, DCTERMS.description, None))) if description: description = str(description[2]) if path is not None: @@ -155,7 +156,7 @@ def add_to_context(uri,classes): label = g.value(o1, RDFS.label) if label: rdf_property.label = html.escape(label) - description = g.value(o1, DC.description) + description = g.value(o1, DCTERMS.description) if not rdf_property.description and description: rdf_property.description = html.escape(description) comment = g.value(o1, RDFS.comment)