From daaa8fc3c58369a9a2e825b803bdb36d1bce17c2 Mon Sep 17 00:00:00 2001 From: Tanya Gray Date: Tue, 31 Mar 2026 12:12:47 +0100 Subject: [PATCH 01/10] update CONTRIBUTING.md --- CONTRIBUTING.md | 178 ++++++++++++------------------------------------ 1 file changed, 42 insertions(+), 136 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index edc65c8..3170230 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,217 +1,123 @@ # Contributing to the Solid SHACL Shapes Catalogue -Thank you for your interest in contributing. - This repository accepts contributions of SHACL shapes, improvements to existing shapes, and documentation updates. All contributions are reviewed through a GitHub pull request (PR) process. If you have feedback on this process, please raise it in the **[GitHub discussion](https://github.com/solid/shapes/discussions/20)**. -## Guidelines for Contributing +## Guidelines -When contributing, you MUST: +When contributing: +- Create a new branch - Check whether a domain file already exists - Follow the naming conventions defined in this document - Include documentation using the GitHub PR template - Ensure shapes validate before submitting -### Branching Requirements - -All contributions MUST be made from a separate branch. - -- Do NOT commit directly to the `main` branch -- Create a new branch for each contribution or feature -- Use a clear and descriptive branch name - -## Adding Shapes - -### Existing Domains -Each domain MUST have a single `{domain}.ttl` file. -- If a domain file exists, add your shape to that file where appropriate -- Do NOT create duplicate domain files - -### New Domains - -If a domain file does not exist, create a new file: - -``` -/shapes/{domain}.ttl -``` - -### Rules +## Pull Request Process -- Domain names MUST be lowercase -- Domain names SHOULD be a minimal representation of the semantic concept +* Create branch +* Ensure the shape validates before opening a PR + * [validation scripts](./scripts) are available +* Open a PR and complete the questions in the PR template provided +* Respond to review feedback and iterate as needed -If using vocabularies, follow community ontology naming conventions. -If unsure, check: https://prefix.cc +All contributions are subject to peer review before merging. +## Branch Requirements +All contributions must be made from a separate branch. -## Naming Conventions +## Domain Files -### Namespace Structure +Each domain has a {domain}.ttl file. If a domain file exists, add your shape to that file otherwise create a new file in the shapes directory /shapes/{domain}.ttl. Domain file names are lowercase and should be a minimal representation of the semantic concept. -Use the following pattern: +### Namespace and Prefix Conventions +Use the following pattern for namespace: ``` -[https://solidproject.org/shapes/{domain}#](https://solidproject.org/shapes/{domain}#) -``` - -Examples: +https://solidproject.org/shapes/{domain}# ``` -[https://solidproject.org/shapes/address#](https://solidproject.org/shapes/address#) -[https://solidproject.org/shapes/vcard#](https://solidproject.org/shapes/vcard#) -```` - - -### Prefix Naming - -- Prefix labels MUST begin with a letter -- Prefix labels MAY use lowercase letters, hyphens, or underscores - -Example: +Prefix labels must begin with a letter and use lowercase letters, hyphens, or underscores, e.g.: ```turtle @prefix address-shape: . -@prefix vcard-shape: . -@prefix sh: . -```` - +``` -### Shape Naming +### Multiple Shapes per Domain -* Shape names MUST use PascalCase -* Shape names MUST end with `Shape` +A goal of the solid/shapes repository is to work towards consensus on a single shape for a given domain where possible. Where this is not possible, multiple shapes may exist for a given domain. If a new shape needs to be added for an existing domain, naming conventions recommend the use of a semantic variation for the shape name, e.g.: -Examples: ``` address-shape:AddressShape -vcard-shape:VCardAddressShape +address-shape:AddressMinimalShape ``` +## Shape Name -## Multiple Shapes per Domain -Multiple shapes MAY exist within a single domain. -* Use semantic variation rather than creating new namespaces +Shape names should use PascalCase abd end with `Shape`, e.g.: -Example: ``` address-shape:AddressShape -address-shape:AddressMinimalShape ``` -## Validation Rules -Shapes SHOULD follow these guidelines: -* Prefer optional validation to maximise Pod interoperability -* Keep constraints focused on structural validation +## Validation Rules +A goal of solid/shapes is to support interoperability in the Solid ecosystem, and with this in mind, it is recommended that shapes should have constraints that maximise their potential reuse. -## Shape Immutability Policy -Shapes published to this catalogue are **immutable**. +## Shape Immutability Policy -Once a shape is merged and published: +Shapes published to this catalogue are **immutable** to ensure predictable behaviour for applications/agents that might use them. Once a shape is merged and published: * Shapes MUST NOT be modified in place * Validation rules MUST NOT be changed retrospectively * Structural or semantic changes MUST be introduced via new shapes -This ensures predictable behaviour for applications using Solid Pods. - - - -### Why Shapes Are Immutable - -Shapes function as contracts between applications and user data. Modifying a published shape can cause: - -* Validation inconsistencies across applications -* Silent breaking changes in decentralized clients -* Data interoperability failures - -Immutability ensures that applications can safely cache and reuse shapes. - - ## Evolving Shapes -If validation rules need to change, you MUST create a new shape. - -### Recommended Approach - -#### Create a New Shape Variant - -Example: - -``` -address-shape:AddressShape -address-shape:AddressStrictShape -``` - - - -### When Adding New Constraints - -You MUST NOT: - -* Add new mandatory fields to existing shapes -* Change cardinality rules of existing properties -* Change target class mappings - -Instead: - -* Introduce a new shape variant or version +The Solid/shapes repository supports the evolution of shapes, where a change to the shape is not a breaking change. -You MAY: +A non-breaking change for a domain file would be: +* Addition of a new optional property +* Addition of metadata/documentation +* Addition of a new shapes -* Add new optional properties -* Add documentation -* Add new shapes +A breaking change for an existing shape would be: +* Addition of a new mandatory field +* Change of cardinality rules of existing properties +* Change of target class mappings - - - - -## Pull Request Process - -* Submit a PR with a clear description of the shape and its purpose -* Indicate whether you are modifying an existing domain or creating a new one -* Ensure the shape validates before submission -* Include documentation using the PR template -* Respond to review feedback and iterate as needed - -All contributions are subject to peer review before merging. +If validation rules need to change for a published shape that would constitute a breaking change, a new shape should be created. ## Contributor Checklist Before submitting your PR, ensure: -* [ ] The shape validates successfully -* [ ] Naming conventions are followed * [ ] The correct domain file is used or created -* [ ] Documentation is included * [ ] No existing shapes are modified in a breaking way +* [ ] Naming conventions are followed +* [ ] The shape validates successfully +* [ ] Descriptive metadata is included ## Human Consensus Process -In addition to the contribution process described above, there is an important **human consensus** step that we are still refining. For example: +In addition to the contribution process described above, there is an important **human consensus** step that we are still refining. -``` If a PR introduces a shape that overlaps conceptually with an existing one, we will ask contributors to collaborate with the current maintainer(s) of that shape, aiming to align on a shared model where possible. If alignment is reached, contributors should work together to evolve the existing shape. If not, both shapes can continue to be maintained independently. -``` - If you have feedback on this process, please raise it in the **[GitHub discussion](https://github.com/solid/shapes/discussions/20)**. From f4134b9c39c38b765a6f779322053e11237461c9 Mon Sep 17 00:00:00 2001 From: Tanya Gray Date: Wed, 1 Apr 2026 12:20:54 +0100 Subject: [PATCH 02/10] update metadata (#42) --- .../check-metadata-and-immutability-dir.py | 14 +-- .../check-metadata-and-immutability-file.py | 10 +- shapes/acp-access-control-resource.ttl | 2 +- shapes/acp-access-control.ttl | 4 +- shapes/acp-matcher.ttl | 4 +- shapes/acp-policy.ttl | 6 +- shapes/acp-typed.ttl | 4 +- shapes/address-book.ttl | 32 +++--- shapes/address.ttl | 12 +- shapes/agent.ttl | 8 +- shapes/bookmark.ttl | 26 ++--- shapes/chat.ttl | 104 +++++++++--------- shapes/container.ttl | 2 +- shapes/email.ttl | 20 ++-- shapes/event.ttl | 30 ++--- shapes/group.ttl | 34 +++--- shapes/issue-tracker.ttl | 42 +++---- shapes/meeting.ttl | 24 ++-- shapes/organization.ttl | 48 ++++---- shapes/person.ttl | 66 +++++------ shapes/personal-name.ttl | 26 ++--- shapes/resource.ttl | 4 +- shapes/software-agent.ttl | 4 +- shapes/telephone.ttl | 16 +-- shapes/vcard.ttl | 52 ++++----- shapes/web-id.ttl | 8 +- shapes/web-page.ttl | 6 +- 27 files changed, 304 insertions(+), 304 deletions(-) diff --git a/scripts/check-metadata-and-immutability-dir.py b/scripts/check-metadata-and-immutability-dir.py index 89e082d..a2e786e 100644 --- a/scripts/check-metadata-and-immutability-dir.py +++ b/scripts/check-metadata-and-immutability-dir.py @@ -3,7 +3,7 @@ check_metadata_and_immutability.py Validates SHACL shapes for: -- Required metadata (rdfs:label, dct:created, vs:term_status) +- Required metadata (sh:name, dct:created, vs:term_status) - Correct metadata formats - Status validity - Immutability rules (placeholder for future logic) @@ -12,7 +12,7 @@ import sys import glob from rdflib import Graph, Namespace -from rdflib.namespace import RDF, RDFS +from rdflib.namespace import RDF # Namespaces SH = Namespace("http://www.w3.org/ns/shacl#") @@ -49,18 +49,18 @@ def report_error(file, shape, property_name, message, value=None, expected=None) def check_shape_metadata(g, file, shape_uri): - label = g.value(shape_uri, RDFS.label) + label = g.value(shape_uri, SH.name) created = g.value(shape_uri, DCT.created) status = g.value(shape_uri, VS.term_status) - # rdfs:label + # sh:name if not label: report_error( file, shape_uri, - "rdfs:label", - "Missing required label for SHACL NodeShape.", - expected="Human readable label e.g. rdfs:label \"Person Shape\"" + "sh:name", + "Missing required name for SHACL NodeShape.", + expected="Human readable name e.g. sh:name \"Person Shape\"" ) # dct:created diff --git a/scripts/check-metadata-and-immutability-file.py b/scripts/check-metadata-and-immutability-file.py index f0eb00d..03dba7f 100644 --- a/scripts/check-metadata-and-immutability-file.py +++ b/scripts/check-metadata-and-immutability-file.py @@ -9,7 +9,7 @@ import sys from rdflib import Graph, Namespace -from rdflib.namespace import RDF, RDFS +from rdflib.namespace import RDF # Namespaces SH = Namespace("http://www.w3.org/ns/shacl#") @@ -36,14 +36,14 @@ def report_error(file, shape, property_name, message, value=None, expected=None) def check_shape_metadata(g, file, shape_uri): - label = g.value(shape_uri, RDFS.label) + label = g.value(shape_uri, SH.name) created = g.value(shape_uri, DCT.created) status = g.value(shape_uri, VS.term_status) if not label: - report_error(file, shape_uri, "rdfs:label", - "Missing required label.", - expected="Human readable label") + report_error(file, shape_uri, "sh:name", + "Missing required name.", + expected="Human readable name") if not created: report_error(file, shape_uri, "dct:created", "Creation date missing.", diff --git a/shapes/acp-access-control-resource.ttl b/shapes/acp-access-control-resource.ttl index 9c653fc..239c595 100644 --- a/shapes/acp-access-control-resource.ttl +++ b/shapes/acp-access-control-resource.ttl @@ -16,7 +16,7 @@ acp-access-control-resource-shape:AcpAccessControlResourceShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlResource"; - rdfs:label "Access Control Resource Shape"; + sh:name "Access Control Resource Shape"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; diff --git a/shapes/acp-access-control.ttl b/shapes/acp-access-control.ttl index 3eec2a7..ad888b8 100644 --- a/shapes/acp-access-control.ttl +++ b/shapes/acp-access-control.ttl @@ -16,13 +16,13 @@ acp-access-control-shape:AcpAccessControlShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AcpAccessControl"; - rdfs:label "ACP Access Control Shape"; + sh:name "ACP Access Control Shape"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; sh:property [ sh:path acp:apply ; sh:node acp-policy-shape:AcpPolicyShape ; - rdfs:label "apply"; + sh:name "apply"; sh:codeIdentifier "apply"; ] . \ No newline at end of file diff --git a/shapes/acp-matcher.ttl b/shapes/acp-matcher.ttl index 60344a4..0d2dd88 100644 --- a/shapes/acp-matcher.ttl +++ b/shapes/acp-matcher.ttl @@ -14,14 +14,14 @@ acp-matcher-shape:AcpMatcherShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AcpMatcher"; - rdfs:label "ACP Matcher Shape"; + sh:name "ACP Matcher Shape"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; sh:property [ sh:path acp:agent ; sh:nodeKind sh:IRI ; - rdfs:label "agent"; + sh:name "agent"; sh:codeIdentifier "agent"; ] ; diff --git a/shapes/acp-policy.ttl b/shapes/acp-policy.ttl index aefe5f6..c22cea2 100644 --- a/shapes/acp-policy.ttl +++ b/shapes/acp-policy.ttl @@ -16,20 +16,20 @@ acp-policy-shape:AcpPolicyShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlPolicy"; - rdfs:label "ACP Policy Shape"; + sh:name "ACP Policy Shape"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; sh:property [ sh:path acp:allow ; sh:nodeKind sh:IRI ; - rdfs:label "allow"; + sh:name "allow"; sh:codeIdentifier "allow"; ] ; sh:property [ sh:path acp:anyOf ; sh:node acp-matcher-shape:AcpMatcherShape; - rdfs:label "any of"; + sh:name "any of"; sh:codeIdentifier "anyOf"; ] . \ No newline at end of file diff --git a/shapes/acp-typed.ttl b/shapes/acp-typed.ttl index 51ace84..43a000e 100644 --- a/shapes/acp-typed.ttl +++ b/shapes/acp-typed.ttl @@ -14,14 +14,14 @@ acp-typed-shape:AcpTypedShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlPolicy"; - rdfs:label "ACP Policy Shape"; + sh:name "ACP Policy Shape"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; sh:property [ sh:path rdf:type ; sh:nodeKind sh:IRI ; - rdfs:label "type"; + sh:name "type"; sh:codeIdentifier "type"; ] diff --git a/shapes/address-book.ttl b/shapes/address-book.ttl index 5a3093d..37e3c13 100644 --- a/shapes/address-book.ttl +++ b/shapes/address-book.ttl @@ -10,10 +10,10 @@ @prefix address-book-shape: . address-book-shape:AddressBookShape a sh:NodeShape ; - rdfs:label "AddressBook"; + sh:name "AddressBook"; sh:targetClass vcard:AddressBook ; - rdfs:comment "Represents a collection of vCard people and/or vCard groups" ; - rdfs:comment "This class is not part of vCard as defined by the IETF" ; + sh:description "Represents a collection of vCard people and/or vCard groups" ; + sh:description "This class is not part of vCard as defined by the IETF" ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; prov:wasDerivedFrom ; @@ -22,16 +22,16 @@ address-book-shape:AddressBookShape a sh:NodeShape ; sh:codeIdentifier "AddressBook"; sh:property [ - rdfs:label "Formatted name"; + sh:name "Formatted name"; sh:path vcard:fn ; sh:datatype xsd:string; sh:minCount 1; sh:codeIdentifier "formattedName"; ]; sh:property [ - rdfs:label "Name Email Index" ; - rdfs:comment "Links an AddressBook to a document containing Individuals that appear in it" ; - rdfs:comment "This property is not part of vCard as defined by the IETF" ; + sh:name "Name Email Index" ; + sh:description "Links an AddressBook to a document containing Individuals that appear in it" ; + sh:description "This property is not part of vCard as defined by the IETF" ; sh:path vcard:nameEmailIndex ; sh:datatype xsd:anyURI; sh:minCount 1; @@ -39,9 +39,9 @@ address-book-shape:AddressBookShape a sh:NodeShape ; ]; sh:property [ - rdfs:label "Group Index" ; - rdfs:comment "Links an AddressBook to a document containing all its includesGroup properties" ; - rdfs:comment "This property is not part of vCard as defined by the IETF" ; + sh:name "Group Index" ; + sh:description "Links an AddressBook to a document containing all its includesGroup properties" ; + sh:description "This property is not part of vCard as defined by the IETF" ; sh:path vcard:groupIndex ; sh:datatype xsd:anyURI; sh:minCount 1; @@ -50,9 +50,9 @@ address-book-shape:AddressBookShape a sh:NodeShape ; ] ; sh:property [ - rdfs:label "Includes Group" ; - rdfs:comment "When included in the group index document of an AddressBook, adds the group to the AddressBook" ; - rdfs:comment "This property is not part of vCard as defined by the IETF" ; + sh:name "Includes Group" ; + sh:description "When included in the group index document of an AddressBook, adds the group to the AddressBook" ; + sh:description "This property is not part of vCard as defined by the IETF" ; sh:path vcard:includesGroup ; sh:datatype xsd:anyURI; sh:codeIdentifier "includesGroup"; @@ -60,9 +60,9 @@ address-book-shape:AddressBookShape a sh:NodeShape ; ] ; sh:property [ - rdfs:label "in AddressBook" ; - rdfs:comment "Indicates that an Individual appears in an AddressBook" ; - rdfs:comment "This property is not part of vCard as defined by the IETF" ; + sh:name "in AddressBook" ; + sh:description "Indicates that an Individual appears in an AddressBook" ; + sh:description "This property is not part of vCard as defined by the IETF" ; sh:path vcard:inAddressBook ; ## Inverse sh:datatype xsd:anyURI; sh:minCount 1; diff --git a/shapes/address.ttl b/shapes/address.ttl index 37ce3c7..6e18159 100644 --- a/shapes/address.ttl +++ b/shapes/address.ttl @@ -13,7 +13,7 @@ address-shape:AddressShape - rdfs:label "Address"; + sh:name "Address"; sh:targetClass vcard:Address; a sh:NodeShape ; sh:codeIdentifier "Address"; @@ -24,7 +24,7 @@ address-shape:AddressShape sh:property [ - rdfs:label "Street Address"; + sh:name "Street Address"; sh:path vcard:street-address ; sh:datatype xsd:string ; sh:maxLength 128 ; @@ -33,7 +33,7 @@ address-shape:AddressShape ] ; sh:property [ - rdfs:label "Locality"; + sh:name "Locality"; sh:path vcard:locality ; sh:datatype xsd:string ; sh:maxLength 128 ; @@ -42,7 +42,7 @@ address-shape:AddressShape ] ; sh:property [ - rdfs:label "Postal Code"; + sh:name "Postal Code"; sh:path vcard:postal-code ; sh:datatype xsd:string ; sh:maxLength 25 ; @@ -51,7 +51,7 @@ address-shape:AddressShape ] ; sh:property [ - rdfs:label "Region"; + sh:name "Region"; sh:path vcard:region ; sh:datatype xsd:string ; sh:maxLength 128 ; @@ -60,7 +60,7 @@ address-shape:AddressShape ] ; sh:property [ - rdfs:label "Country Name"; + sh:name "Country Name"; sh:path vcard:country-name ; sh:datatype xsd:string ; sh:maxLength 128 ; diff --git a/shapes/agent.ttl b/shapes/agent.ttl index 5bf8808..f481579 100644 --- a/shapes/agent.ttl +++ b/shapes/agent.ttl @@ -23,8 +23,8 @@ agent-shape:AgentShape sh:targetClass foaf:Agent ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; - rdfs:label "Agent Shape" ; - rdfs:comment "SHACL shape representing an agent, which can be a person, organization, or software agent." ; + sh:name "Agent Shape" ; + sh:description "SHACL shape representing an agent, which can be a person, organization, or software agent." ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "Agent" ; @@ -40,8 +40,8 @@ agent-shape:AgentShape agent-shape:WebIdAgentShape a sh:NodeShape ; sh:targetClass foaf:Agent ; - rdfs:label "Agent Shape" ; - rdfs:comment "Represents an agent, which can be a person, organization, or software agent." ; + sh:name "Agent Shape" ; + sh:description "Represents an agent, which can be a person, organization, or software agent." ; dct:created "2026-03-18"^^xsd:date ; dc:source ; prov:wasDerivedFrom ; diff --git a/shapes/bookmark.ttl b/shapes/bookmark.ttl index 1298260..f2e6e03 100644 --- a/shapes/bookmark.ttl +++ b/shapes/bookmark.ttl @@ -13,24 +13,24 @@ bookmark-shape:BookmarkShape a sh:NodeShape ; sh:targetClass bookmark:Bookmark ; - rdfs:label "Bookmark" ; - rdfs:comment "A Bookmark node with label, URL, topic, and description" ; + sh:name "Bookmark" ; + sh:description "A Bookmark node with label, URL, topic, and description" ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; prov:wasDerivedFrom ; dct:references ; # references the Annotea Bookmark schema, which defines the bookmark:Bookmark class and its properties dct:references ; # references the bookmark:Bookmark class in the W3C Bookmark vocabulary (the Annotea Bookmark ontology) - rdfs:comment "This shape does not include all properties defined for bookmark:Bookmark in the W3C Bookmark vocabulary (the Annotea Bookmark ontology), but only those relevant to the use case of representing bookmarks on a dashboard" ; + sh:description "This shape does not include all properties defined for bookmark:Bookmark in the W3C Bookmark vocabulary (the Annotea Bookmark ontology), but only those relevant to the use case of representing bookmarks on a dashboard" ; sh:codeIdentifier "Bookmark"; # Label property sh:property [ - sh:path rdfs:label ; + sh:path sh:name ; sh:datatype xsd:string ; - rdfs:label "Label" ; sh:name "Label" ; - rdfs:comment "Human-readable name of the bookmark" ; + sh:name "Label" ; + sh:description "Human-readable name of the bookmark" ; sh:codeIdentifier "label"; ] ; @@ -38,9 +38,9 @@ bookmark-shape:BookmarkShape sh:property [ sh:path bookmark:recalls ; sh:datatype xsd:anyURI ; - rdfs:label "URL" ; sh:name "URL" ; - rdfs:comment "The URL that the bookmark points to" ; + sh:name "URL" ; + sh:description "The URL that the bookmark points to" ; sh:codeIdentifier "url"; ] ; @@ -48,18 +48,18 @@ bookmark-shape:BookmarkShape sh:property [ sh:path bookmark:hasTopic ; sh:datatype xsd:string ; - rdfs:label "Topic" ; sh:name "Topic" ; - rdfs:comment "Topic or category of the bookmark" ; + sh:name "Topic" ; + sh:description "Topic or category of the bookmark" ; sh:codeIdentifier "topic"; ] ; # Description property sh:property [ - sh:path rdfs:comment ; + sh:path sh:description ; sh:datatype xsd:string ; - rdfs:label "Description" ; sh:name "Description" ; - rdfs:comment "Optional description of the bookmark" ; + sh:name "Description" ; + sh:description "Optional description of the bookmark" ; sh:codeIdentifier "description"; ] . diff --git a/shapes/chat.ttl b/shapes/chat.ttl index 158819c..7431b40 100644 --- a/shapes/chat.ttl +++ b/shapes/chat.ttl @@ -20,8 +20,8 @@ ##################### Chat Channel Shape chat-shape:ChatChannelShape a sh:NodeShape ; - rdfs:label "Chat Channel Shape" ; - rdfs:comment "SHACL NodeShape describing the properties and constraints for a Solid Chat" ; + sh:name "Chat Channel Shape" ; + sh:description "SHACL NodeShape describing the properties and constraints for a Solid Chat" ; sh:targetClass mee:LongChat ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -39,15 +39,15 @@ chat-shape:ChatChannelShape_type a sh:PropertyShape ; sh:path rdf:type ; sh:value mee:LongChat ; sh:minCount 1 ; - rdfs:label "Type" ; - rdfs:comment "Specifies that the node must be of type LongChat." ; + sh:name "Type" ; + sh:description "Specifies that the node must be of type LongChat." ; sh:codeIdentifier "type" . chat-shape:ChatChannelShape_author a sh:PropertyShape ; sh:path dc:author ; sh:minCount 1 ; - rdfs:label "Author" ; - rdfs:comment "The author of the chat channel." ; + sh:name "Author" ; + sh:description "The author of the chat channel." ; sh:codeIdentifier "author" . chat-shape:ChatChannelShape_title a sh:PropertyShape ; @@ -55,8 +55,8 @@ chat-shape:ChatChannelShape_title a sh:PropertyShape ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Title" ; - rdfs:comment "The title of the chat channel." ; + sh:name "Title" ; + sh:description "The title of the chat channel." ; sh:codeIdentifier "title" . chat-shape:ChatChannelShape_createdDate a sh:PropertyShape ; @@ -64,30 +64,30 @@ chat-shape:ChatChannelShape_createdDate a sh:PropertyShape ; sh:datatype xsd:dateTime ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Created Date" ; - rdfs:comment "The creation date of the chat channel." ; + sh:name "Created Date" ; + sh:description "The creation date of the chat channel." ; sh:codeIdentifier "createdDate" . chat-shape:ChatChannelShape_sharedPreferences a sh:PropertyShape ; sh:path ui:sharedPreferences ; sh:node chat-shape:ChatSharedPreferencesShape ; sh:minCount 0 ; - rdfs:label "Shared Preferences" ; - rdfs:comment "References user interface preferences shared in the chat." ; + sh:name "Shared Preferences" ; + sh:description "References user interface preferences shared in the chat." ; sh:codeIdentifier "sharedPreferences" . chat-shape:ChatChannelShape_participation a sh:PropertyShape ; sh:path flow:participation ; sh:node chat-shape:ChatParticipationShape ; - rdfs:label "Participation" ; - rdfs:comment "Indicates participants in the chat channel." ; + sh:name "Participation" ; + sh:description "Indicates participants in the chat channel." ; sh:codeIdentifier "participation" . ##################### Chat Message Shape chat-shape:ChatMessageShape a sh:NodeShape ; - rdfs:label "Chat Message Shape" ; - rdfs:comment "SHACL NodeShape defining constraints for messages in Solid Chat." ; + sh:name "Chat Message Shape" ; + sh:description "SHACL NodeShape defining constraints for messages in Solid Chat." ; sh:targetObjectsOf flow:message ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -105,16 +105,16 @@ chat-shape:ChatMessageShape_createdDate a sh:PropertyShape ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:dateTime ; - rdfs:label "Created Date" ; - rdfs:comment "The date and time when the message was created." ; + sh:name "Created Date" ; + sh:description "The date and time when the message was created." ; sh:codeIdentifier "createdDate" . chat-shape:ChatMessageShape_author a sh:PropertyShape ; sh:path foaf:maker ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Message Author" ; - rdfs:comment "The agent or person who authored the message." ; + sh:name "Message Author" ; + sh:description "The agent or person who authored the message." ; sh:codeIdentifier "author" . chat-shape:ChatMessageShape_content a sh:PropertyShape ; @@ -122,22 +122,22 @@ chat-shape:ChatMessageShape_content a sh:PropertyShape ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Message Content" ; - rdfs:comment "The textual content of the message." ; + sh:name "Message Content" ; + sh:description "The textual content of the message." ; sh:codeIdentifier "content" . chat-shape:ChatMessageShape_relatedChatChannel a sh:PropertyShape ; sh:path [ sh:inversePath flow:message ] ; sh:minCount 1 ; - rdfs:label "Related Chat" ; - rdfs:comment "The chat channel or conversation to which this message belongs." ; + sh:name "Related Chat" ; + sh:description "The chat channel or conversation to which this message belongs." ; sh:codeIdentifier "relatedChatChannel" . ##################### Chat Participation Shape chat-shape:ChatParticipationShape a sh:NodeShape ; - rdfs:label "Participation Shape" ; - rdfs:comment "SHACL NodeShape defining constraints for a participant in a Solid Chat." ; + sh:name "Participation Shape" ; + sh:description "SHACL NodeShape defining constraints for a participant in a Solid Chat." ; sh:targetObjectsOf flow:participation ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -157,39 +157,39 @@ chat-shape:ChatParticipationShape_startDate a sh:PropertyShape ; sh:datatype xsd:dateTime ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Start Date" ; - rdfs:comment "The date and time when the participation started." ; + sh:name "Start Date" ; + sh:description "The date and time when the participation started." ; sh:codeIdentifier "startDate" . chat-shape:ChatParticipationShape_participant a sh:PropertyShape ; sh:path flow:participant ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Participant" ; - rdfs:comment "The agent or person participating in the chat." ; + sh:name "Participant" ; + sh:description "The agent or person participating in the chat." ; sh:codeIdentifier "participant" . chat-shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; sh:path solid:colorizeByAuthor ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "Colorize By Author" ; - rdfs:comment "Indicates if messages from this participant should be colorized by author." ; + sh:name "Colorize By Author" ; + sh:description "Indicates if messages from this participant should be colorized by author." ; sh:codeIdentifier "colorizeByAuthor" . chat-shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "Expand Images Inline" ; - rdfs:comment "Indicates if images should be displayed inline for this participant." ; + sh:name "Expand Images Inline" ; + sh:description "Indicates if images should be displayed inline for this participant." ; sh:codeIdentifier "expandImagesInline" . chat-shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; - rdfs:label "Inline Image Height (ems)" ; + sh:name "Inline Image Height (ems)" ; sh:comment "Preferred height of inline images in em units for this participant." ; sh:codeIdentifier "inlineImageHeight" . @@ -197,8 +197,8 @@ chat-shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "Newest First" ; - rdfs:comment "If true, messages are displayed newest first for this participant." ; + sh:name "Newest First" ; + sh:description "If true, messages are displayed newest first for this participant." ; sh:codeIdentifier "newestFirst" . chat-shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; @@ -206,15 +206,15 @@ chat-shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; sh:datatype xsd:string ; sh:maxCount 1 ; sh:pattern "#[0-9a-f]{6}" ; - rdfs:label "Background Color" ; - rdfs:comment "Preferred background color for the participant in hexadecimal format." ; + sh:name "Background Color" ; + sh:description "Preferred background color for the participant in hexadecimal format." ; sh:codeIdentifier "backgroundColor" . ##################### Chat Shared Preferences Shape chat-shape:ChatSharedPreferencesShape a sh:NodeShape ; - rdfs:label "Chat Shared Preferences Shape" ; - rdfs:comment "NodeShape defining shared UI preferences for chat participants." ; + sh:name "Chat Shared Preferences Shape" ; + sh:description "NodeShape defining shared UI preferences for chat participants." ; sh:targetObjectsOf ui:sharedPreferences ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -229,31 +229,31 @@ chat-shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "Expand Images Inline" ; - rdfs:comment "Indicates whether images should be expanded inline in the chat UI." ; + sh:name "Expand Images Inline" ; + sh:description "Indicates whether images should be expanded inline in the chat UI." ; sh:codeIdentifier "expandImagesInline" . chat-shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; - rdfs:label "Inline Image Height (ems)" ; - rdfs:comment "Preferred height for inline images in em units." ; + sh:name "Inline Image Height (ems)" ; + sh:description "Preferred height for inline images in em units." ; sh:codeIdentifier "inlineImageHeight" . chat-shape:ChatSharedPreferencesShape_newestFirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "Newest First" ; - rdfs:comment "If true, messages are displayed newest first in the chat UI." ; + sh:name "Newest First" ; + sh:description "If true, messages are displayed newest first in the chat UI." ; sh:codeIdentifier "newestFirst" . ##################### Chat Action Shape chat-shape:ChatActionShape a sh:NodeShape ; - rdfs:label "Chat Action Shape" ; - rdfs:comment "NodeShape defining constraints for actions representing interactions or sentiments in the chat system." ; + sh:name "Chat Action Shape" ; + sh:description "NodeShape defining constraints for actions representing interactions or sentiments in the chat system." ; sh:targetClass schema:Action ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -268,18 +268,18 @@ chat-shape:ChatActionShape a sh:NodeShape ; chat-shape:ChatActionShape_type a sh:PropertyShape ; sh:path rdf:type ; sh:minCount 1 ; - rdfs:label "Type" ; + sh:name "Type" ; sh:codeIdentifier "type" . chat-shape:ChatActionShape_agent a sh:PropertyShape ; sh:path schema:agent ; sh:maxCount 1 ; - rdfs:label "Agent" ; + sh:name "Agent" ; sh:codeIdentifier "agent" . chat-shape:ChatActionShape_target a sh:PropertyShape ; sh:path schema:target ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Target" ; + sh:name "Target" ; sh:codeIdentifier "target" . \ No newline at end of file diff --git a/shapes/container.ttl b/shapes/container.ttl index 00d537c..3ab159a 100644 --- a/shapes/container.ttl +++ b/shapes/container.ttl @@ -15,7 +15,7 @@ container-shape:ContainerShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; - rdfs:label "Container"; + sh:name "Container"; sh:codeIdentifier "Container"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; diff --git a/shapes/email.ttl b/shapes/email.ttl index de74b0a..44c9835 100644 --- a/shapes/email.ttl +++ b/shapes/email.ttl @@ -14,8 +14,8 @@ email-shape:EmailShape a sh:NodeShape; - rdfs:label "Email Shape" ; - rdfs:comment "SHACL shape describing the structure of an email contact node including its value and optional classification type." ; + sh:name "Email Shape" ; + sh:description "SHACL shape describing the structure of an email contact node including its value and optional classification type." ; sh:targetObjectsOf vcard:hasEmail; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -30,8 +30,8 @@ email-shape:EmailShape a sh:NodeShape; sh:minCount 1; sh:maxCount 1 ; sh:datatype xsd:string ; - rdfs:label "Email Address" ; - rdfs:comment "The email address value (e.g., user@example.org)."; + sh:name "Email Address" ; + sh:description "The email address value (e.g., user@example.org)."; sh:codeIdentifier "emailAddress"; ]. @@ -39,8 +39,8 @@ email-shape:EmailShape a sh:NodeShape; email-shape:EmailWithTypeShape a sh:NodeShape ; sh:targetObjectsOf vcard:hasEmail ; - rdfs:label "Email Shape" ; - rdfs:comment "SHACL shape describing the structure of an email contact node including its value and optional classification type." ; + sh:name "Email Shape" ; + sh:description "SHACL shape describing the structure of an email contact node including its value and optional classification type." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -53,13 +53,13 @@ email-shape:EmailWithTypeShape sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; - rdfs:label "Email Address" ; - rdfs:comment "The email address value (e.g., user@example.org)."; + sh:name "Email Address" ; + sh:description "The email address value (e.g., user@example.org)."; sh:codeIdentifier "emailAddress"; ] ; sh:property [ sh:path rdf:type ; - rdfs:label "Email Type" ; - rdfs:comment "The classification of the email (e.g., home or work)."; + sh:name "Email Type" ; + sh:description "The classification of the email (e.g., home or work)."; sh:codeIdentifier "emailType"; ] . \ No newline at end of file diff --git a/shapes/event.ttl b/shapes/event.ttl index 250a186..6443237 100644 --- a/shapes/event.ttl +++ b/shapes/event.ttl @@ -12,22 +12,22 @@ event-shape:ScheduleEventShape a sh:NodeShape ; - rdfs:label "Schedule Event Shape" ; - rdfs:comment "SHACL shape representing a scheduled event, including title, location, type, duration, authors, time proposals, and invitees." ; + sh:name "Schedule Event Shape" ; + sh:description "SHACL shape representing a scheduled event, including title, location, type, duration, authors, time proposals, and invitees." ; sh:targetClass cal:Vevent ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; prov:wasDerivedFrom ; - rdfs:comment "Schedule event forms (single form / multi-step)"; + sh:description "Schedule event forms (single form / multi-step)"; sh:codeIdentifier "ScheduleEvent"; # Event title sh:property [ sh:path cal:summary ; sh:datatype xsd:string ; - rdfs:label "Event Title" ; - rdfs:comment "The title or summary of the event."; + sh:name "Event Title" ; + sh:description "The title or summary of the event."; sh:codeIdentifier "title"; ] ; @@ -35,8 +35,8 @@ event-shape:ScheduleEventShape sh:property [ sh:path cal:location ; sh:datatype xsd:string ; - rdfs:label "Event Location" ; - rdfs:comment "The location where the event takes place."; + sh:name "Event Location" ; + sh:description "The location where the event takes place."; sh:codeIdentifier "location"; ] ; @@ -45,8 +45,8 @@ event-shape:ScheduleEventShape sh:path sched:allDay ; sh:datatype xsd:boolean ; sh:maxCount 1 ; - rdfs:label "All-day Event" ; - rdfs:comment "Indicates whether the event lasts all day or has a specific time."; + sh:name "All-day Event" ; + sh:description "Indicates whether the event lasts all day or has a specific time."; sh:codeIdentifier "isAllDayEvent"; ] ; @@ -54,8 +54,8 @@ event-shape:ScheduleEventShape sh:property [ sh:path sched:durationInDays ; sh:datatype xsd:integer ; - rdfs:label "Duration in Days" ; - rdfs:comment "Duration of the event in days for all-day events."; + sh:name "Duration in Days" ; + sh:description "Duration of the event in days for all-day events."; sh:codeIdentifier "durationDays"; ]; @@ -63,8 +63,8 @@ event-shape:ScheduleEventShape sh:property [ sh:path sched:durationInMinutes ; sh:datatype xsd:integer ; - rdfs:label "Duration in Minutes" ; - rdfs:comment "Duration of the event in minutes for single day events."; + sh:name "Duration in Minutes" ; + sh:description "Duration of the event in minutes for single day events."; sh:codeIdentifier "durationMinutes"; ]; @@ -72,8 +72,8 @@ event-shape:ScheduleEventShape sh:property [ sh:path cal:comment ; sh:datatype xsd:string ; - rdfs:label "Event Comment" ; - rdfs:comment "Comment about the the event."; + sh:name "Event Comment" ; + sh:description "Comment about the the event."; sh:codeIdentifier "comment"; ] ; diff --git a/shapes/group.ttl b/shapes/group.ttl index 04b2a17..60e14b4 100644 --- a/shapes/group.ttl +++ b/shapes/group.ttl @@ -14,8 +14,8 @@ group-shape:GroupShape a sh:NodeShape ; - rdfs:label "Group Shape" ; - rdfs:comment "Defines constraints for a vCard Group including its name and members." ; + sh:name "Group Shape" ; + sh:description "Defines constraints for a vCard Group including its name and members." ; sh:targetClass vcard:Group ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -28,24 +28,24 @@ group-shape:GroupShape sh:path vcard:fn ; sh:datatype xsd:string ; sh:minCount 1 ; - rdfs:label "Group Name" ; - rdfs:comment "The formatted name of the group."; + sh:name "Group Name" ; + sh:description "The formatted name of the group."; sh:codeIdentifier "name"; ] ; sh:property [ sh:path vcard:member ; sh:node person-shape:ContactDetailsPersonShape ; - rdfs:label "Group Member" ; - rdfs:comment "A member of the group. When the WebID of an agent is known, it MUST be used as the object of this triple so that ACL systems can grant access correctly. The main local identifier in the address book must be linked indirectly using owl:sameAs via the GroupMemberLocalId shape. Additional identifiers may also be linked using owl:sameAs."; + sh:name "Group Member" ; + sh:description "A member of the group. When the WebID of an agent is known, it MUST be used as the object of this triple so that ACL systems can grant access correctly. The main local identifier in the address book must be linked indirectly using owl:sameAs via the GroupMemberLocalId shape. Additional identifiers may also be linked using owl:sameAs."; sh:codeIdentifier "member"; ] . group-shape:GroupMemberLocalIdShape a sh:NodeShape ; - rdfs:label "Group Member Local Identifier Shape" ; - rdfs:comment "Ensures that a group member's local identifier links to exactly one vCard Individual using owl:sameAs." ; + sh:name "Group Member Local Identifier Shape" ; + sh:description "Ensures that a group member's local identifier links to exactly one vCard Individual using owl:sameAs." ; sh:targetObjectsOf vcard:member ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -60,37 +60,37 @@ group-shape:GroupMemberLocalIdShape sh:minCount 1 ; sh:maxCount 1 ; sh:class vcard:Individual ; - rdfs:label "Same As Individual" ; - rdfs:comment "Links the local group member identifier to exactly one vCard Individual resource."; + sh:name "Same As Individual" ; + sh:description "Links the local group member identifier to exactly one vCard Individual resource."; sh:codeIdentifier "sameAsIndividual"; ] . group-shape:IssueTrackerAssigneeGroupShape a sh:NodeShape ; - rdfs:label "Assignee Group Shape" ; - rdfs:comment "Defines constraints for the vCard Group used as an assignee group for issues." ; + sh:name "Assignee Group Shape" ; + sh:description "Defines constraints for the vCard Group used as an assignee group for issues." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; prov:wasDerivedFrom ; dct:referencedBy ; - rdfs:comment "Group shape used in issue tracker" ; + sh:description "Group shape used in issue tracker" ; sh:codeIdentifier "IssueTrackerAssigneeGroup"; sh:property [ sh:path vcard:fn ; sh:maxCount 1 ; sh:datatype xsd:string ; - rdfs:label "Group Name" ; - rdfs:comment "The formatted name of the group."; + sh:name "Group Name" ; + sh:description "The formatted name of the group."; sh:codeIdentifier "name"; ] ; sh:property [ sh:path vcard:member ; sh:node person-shape:IssueTrackerPersonShape ; - rdfs:label "Group Member" ; - rdfs:comment "Each member of the group represented as a vCard Individual."; + sh:name "Group Member" ; + sh:description "Each member of the group represented as a vCard Individual."; sh:codeIdentifier "member"; ] . diff --git a/shapes/issue-tracker.ttl b/shapes/issue-tracker.ttl index 042143c..937a993 100644 --- a/shapes/issue-tracker.ttl +++ b/shapes/issue-tracker.ttl @@ -14,8 +14,8 @@ issue-tracker-shape:IssueTrackerShape a sh:NodeShape ; - rdfs:label "Issue Tracker Configuration Shape" ; - rdfs:comment "Defines data constraints for configuring an issue tracker including title, description, workflow states, classification systems, assignment rules, optional forms, and additional properties." ; + sh:name "Issue Tracker Configuration Shape" ; + sh:description "Defines data constraints for configuring an issue tracker including title, description, workflow states, classification systems, assignment rules, optional forms, and additional properties." ; sh:targetClass wf:Tracker ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -27,51 +27,51 @@ issue-tracker-shape:IssueTrackerShape sh:property [ sh:path dct:title ; sh:datatype xsd:string ; - rdfs:label "Tracker Title" ; - rdfs:comment "The human-readable title of the issue tracker."; + sh:name "Tracker Title" ; + sh:description "The human-readable title of the issue tracker."; sh:codeIdentifier "title"; sh:maxCount 1; ], [ sh:path wf:description ; sh:datatype xsd:string ; - rdfs:label "Tracker Description" ; - rdfs:comment "A description explaining the purpose or scope of the issue tracker."; + sh:name "Tracker Description" ; + sh:description "A description explaining the purpose or scope of the issue tracker."; sh:codeIdentifier "description"; sh:maxCount 1; ], [ sh:path wf:issueClass ; sh:class rdfs:Class ; - rdfs:label "Issue State Class" ; - rdfs:comment "The states an issue may be in (e.g., Task)."; + sh:name "Issue State Class" ; + sh:description "The states an issue may be in (e.g., Task)."; sh:codeIdentifier "issueState"; ], [ sh:path wf:issueCategory ; sh:class rdfs:Class ; - rdfs:label "Issue Category" ; - rdfs:comment "Issue category"; + sh:name "Issue Category" ; + sh:description "Issue category"; sh:codeIdentifier "issueCategory"; ], [ sh:path wf:allowSubIssues ; sh:maxCount 1 ; sh:datatype xsd:boolean ; - rdfs:label "Allow Sub-Issues?" ; - rdfs:comment "Indicates whether issues may contain sub-issues."; + sh:name "Allow Sub-Issues?" ; + sh:description "Indicates whether issues may contain sub-issues."; sh:codeIdentifier "allowSubIssues"; ], # Nested propertyList [ sh:path wf:propertyList ; sh:node issue-tracker-shape:PropertyListShape ; - rdfs:label "Additional Properties" ; - rdfs:comment "An ordered list of additional properties to display in table views of issues."; + sh:name "Additional Properties" ; + sh:description "An ordered list of additional properties to display in table views of issues."; sh:codeIdentifier "additionalProperties"; ], # Nested assignee group [ sh:path wf:assigneeGroup ; sh:node group-shape:IssueTrackerAssigneeGroupShape ; - rdfs:label "Assignee Group" ; - rdfs:comment "The contact group from which issues may be assigned to individuals."; + sh:name "Assignee Group" ; + sh:description "The contact group from which issues may be assigned to individuals."; sh:codeIdentifier "assigneeGroup"; ] @@ -83,8 +83,8 @@ issue-tracker-shape:IssueTrackerShape issue-tracker-shape:PropertyListShape a sh:NodeShape ; - rdfs:label "Property List Item Shape" ; - rdfs:comment "Defines constraints for each property included in the propertyList of an issue tracker." ; + sh:name "Property List Item Shape" ; + sh:description "Defines constraints for each property included in the propertyList of an issue tracker." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -93,12 +93,12 @@ issue-tracker-shape:PropertyListShape sh:property [ - sh:path rdfs:label ; + sh:path sh:name ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; - rdfs:label "Property Name" ; - rdfs:comment "The human-readable name of the property."; + sh:name "Property Name" ; + sh:description "The human-readable name of the property."; sh:codeIdentifier "propertyName"; ] . diff --git a/shapes/meeting.ttl b/shapes/meeting.ttl index 9ce3c19..4a40811 100644 --- a/shapes/meeting.ttl +++ b/shapes/meeting.ttl @@ -11,8 +11,8 @@ meeting-shape:MeetingShape a sh:NodeShape ; - rdfs:label "Meeting Shape" ; - rdfs:comment "Defines constraints for meeting instances including title, location, time, comments, and display color." ; + sh:name "Meeting Shape" ; + sh:description "Defines constraints for meeting instances including title, location, time, comments, and display color." ; sh:targetClass cal:Vevent ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -26,8 +26,8 @@ meeting-shape:MeetingShape sh:datatype xsd:string ; sh:maxCount 1 ; sh:maxLength 256 ; - rdfs:label "Meeting Title" ; - rdfs:comment "The name or summary of the meeting."; + sh:name "Meeting Title" ; + sh:description "The name or summary of the meeting."; sh:codeIdentifier "summary"; ] ; @@ -36,16 +36,16 @@ meeting-shape:MeetingShape sh:datatype xsd:string ; sh:maxLength 128 ; sh:maxCount 1 ; - rdfs:label "Meeting Location" ; - rdfs:comment "The location where the meeting takes place."; + sh:name "Meeting Location" ; + sh:description "The location where the meeting takes place."; sh:codeIdentifier "location"; ] ; sh:property [ sh:path cal:dtstart ; sh:datatype xsd:dateTime ; - rdfs:label "Start Date/Time" ; - rdfs:comment "The start date and time of the meeting."; + sh:name "Start Date/Time" ; + sh:description "The start date and time of the meeting."; sh:codeIdentifier "startDate"; sh:maxCount 1 ; ] ; @@ -53,8 +53,8 @@ meeting-shape:MeetingShape sh:property [ sh:path cal:dtend ; sh:datatype xsd:dateTime ; - rdfs:label "End Date/Time" ; - rdfs:comment "The end date and time of the meeting."; + sh:name "End Date/Time" ; + sh:description "The end date and time of the meeting."; sh:codeIdentifier "endDate"; sh:maxCount 1 ; ] ; @@ -62,8 +62,8 @@ meeting-shape:MeetingShape sh:property [ sh:path cal:comment ; sh:datatype xsd:string ; - rdfs:label "Comment" ; - rdfs:comment "Additional notes or comments about the meeting."; + sh:name "Comment" ; + sh:description "Additional notes or comments about the meeting."; sh:codeIdentifier "comment"; sh:maxCount 1 ; ]; diff --git a/shapes/organization.ttl b/shapes/organization.ttl index 229afa7..acd5798 100644 --- a/shapes/organization.ttl +++ b/shapes/organization.ttl @@ -18,8 +18,8 @@ organization-shape:ContactOrganizationShape a sh:NodeShape ; sh:targetClass vcard:Organization ; - rdfs:label "Organization Shape" ; - rdfs:comment "SHACL shape for validating organization contact and classification details." ; + sh:name "Organization Shape" ; + sh:description "SHACL shape for validating organization contact and classification details." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -33,8 +33,8 @@ organization-shape:ContactOrganizationShape sh:datatype xsd:string ; sh:maxLength 200 ; sh:maxCount 1; - rdfs:label "Organization Name" ; - rdfs:comment "The official name of the organization."; + sh:name "Organization Name" ; + sh:description "The official name of the organization."; sh:codeIdentifier "name"; ] ; @@ -42,8 +42,8 @@ organization-shape:ContactOrganizationShape sh:property [ sh:path schema:url ; sh:nodeKind sh:IRI ; - rdfs:label "Homepage URL" ; - rdfs:comment "The homepage or primary web address of the organization."; + sh:name "Homepage URL" ; + sh:description "The homepage or primary web address of the organization."; sh:codeIdentifier "homepageURL"; ] ; @@ -62,8 +62,8 @@ organization-shape:ContactOrganizationShape schema:Project schema:SportsOrganization ) ; - rdfs:label "Organization Type / Category" ; - rdfs:comment "Classification of the organization as one of the predefined types."; + sh:name "Organization Type / Category" ; + sh:description "Classification of the organization as one of the predefined types."; sh:codeIdentifier "typeCategory"; ] . @@ -71,8 +71,8 @@ organization-shape:ContactOrganizationShape organization-shape:ContactDetailsOrganizationShape a sh:NodeShape ; sh:targetClass vcard:Organization ; - rdfs:label "Organization contact details Shape" ; - rdfs:comment "SHACL shape defining data constraints for an organization contact." ; + sh:name "Organization contact details Shape" ; + sh:description "SHACL shape defining data constraints for an organization contact." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -96,8 +96,8 @@ organization-shape:ContactDetailsOrganizationShape schema:Project schema:SportsOrganization ) ; - rdfs:label "Organization Type" ; - rdfs:comment "The classification or type of organization."; + sh:name "Organization Type" ; + sh:description "The classification or type of organization."; sh:codeIdentifier "organizationType"; ] ; @@ -105,47 +105,47 @@ organization-shape:ContactDetailsOrganizationShape sh:path schema:name ; sh:datatype xsd:string ; sh:maxLength 200 ; - rdfs:label "Organization Name" ; - rdfs:comment "The official name of the organization."; + sh:name "Organization Name" ; + sh:description "The official name of the organization."; sh:codeIdentifier "name"; ] ; sh:property [ sh:path schema:url ; sh:nodeKind sh:IRI ; - rdfs:label "Homepage URL" ; - rdfs:comment "The homepage or primary website of the organization."; + sh:name "Homepage URL" ; + sh:description "The homepage or primary website of the organization."; sh:codeIdentifier "homepageURL"; ] ; sh:property [ sh:path vcard:hasAddress ; - rdfs:label "Address" ; - rdfs:comment "Address details" ; + sh:name "Address" ; + sh:description "Address details" ; sh:node address-shape:AddressShape ; sh:codeIdentifier "hasAddress"; ] ; sh:property [ sh:path vcard:hasEmail ; - rdfs:label "Email Addresses" ; - rdfs:comment "Email addresses." ; + sh:name "Email Addresses" ; + sh:description "Email addresses." ; sh:node email-shape:EmailWithTypeShape ; sh:codeIdentifier "hasEmailAddress"; ] ; sh:property [ sh:path vcard:hasTelephone ; - rdfs:label "Telephone Numbers" ; - rdfs:comment "Telephone numbers associated with the organization." ; + sh:name "Telephone Numbers" ; + sh:description "Telephone numbers associated with the organization." ; sh:node telephone-shape:TelephoneShape ; sh:codeIdentifier "hasTelephoneNumber"; ] ; sh:property [ sh:path vcard:note ; - rdfs:label "Notes" ; - rdfs:comment "General notes about the organization." ; + sh:name "Notes" ; + sh:description "General notes about the organization." ; sh:codeIdentifier "notes"; ] . diff --git a/shapes/person.ttl b/shapes/person.ttl index 8aff268..872e9c7 100644 --- a/shapes/person.ttl +++ b/shapes/person.ttl @@ -16,8 +16,8 @@ @prefix person-shape: . person-shape:ContactDetailsPersonShape a sh:NodeShape ; - rdfs:label "Person Shape" ; - rdfs:comment "SHACL shape representing a person" ; + sh:name "Person Shape" ; + sh:description "SHACL shape representing a person" ; sh:targetClass vcard:Individual ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -27,7 +27,7 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:fn ; - rdfs:label "Full Name" ; + sh:name "Full Name" ; sh:datatype xsd:string; sh:codeIdentifier "fullName"; sh:maxCount 1; @@ -35,8 +35,8 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:role ; - rdfs:label "Role" ; - rdfs:comment "The role or job title of the person." ; + sh:name "Role" ; + sh:description "The role or job title of the person." ; sh:datatype xsd:string; sh:codeIdentifier "role"; sh:maxCount 1; @@ -44,8 +44,8 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:organization-name ; - rdfs:label "Organization Name" ; - rdfs:comment "The organization the person belongs to."; + sh:name "Organization Name" ; + sh:description "The organization the person belongs to."; sh:datatype xsd:string; sh:codeIdentifier "organizationName"; sh:maxCount 1; @@ -54,8 +54,8 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasAddress ; sh:node address-shape:AddressShape; - rdfs:label "Address" ; - rdfs:comment "Address details" ; + sh:name "Address" ; + sh:description "Address details" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:codeIdentifier "address"; ]; @@ -63,8 +63,8 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasEmail ; sh:node email-shape:EmailWithTypeShape; - rdfs:label "Emails" ; - rdfs:comment "Email addresses of the contact." ; + sh:name "Emails" ; + sh:description "Email addresses of the contact." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:codeIdentifier "email"; ]; @@ -72,8 +72,8 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasTelephone ; sh:node telephone-shape:TelephoneShape ; - rdfs:label "Telephones" ; - rdfs:comment "Telephone numbers of the contact." ; + sh:name "Telephones" ; + sh:description "Telephone numbers of the contact." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:codeIdentifier "telephone"; ]; @@ -82,16 +82,16 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:path vcard:bday ; sh:maxCount 1 ; sh:datatype xsd:date ; - rdfs:label "Birthday" ; - rdfs:comment "Date of birth" ; + sh:name "Birthday" ; + sh:description "Date of birth" ; sh:codeIdentifier "dateOfBirth"; ]; sh:property [ sh:path vcard:note ; sh:maxCount 1 ; - rdfs:label "Notes" ; - rdfs:comment "General notes about the contact." ; + sh:name "Notes" ; + sh:description "General notes about the contact." ; sh:datatype xsd:string; sh:codeIdentifier "notes"; ]; @@ -99,14 +99,14 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; person-shape:IssueTrackerPersonShape a sh:NodeShape ; - rdfs:label "Person Shape" ; - rdfs:comment "Defines constraints for an individual person in a group." ; + sh:name "Person Shape" ; + sh:description "Defines constraints for an individual person in a group." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; prov:wasDerivedFrom ; dct:referencedBy ; - rdfs:comment "Person shape used in issue tracker from core:PersonForm" ; + sh:description "Person shape used in issue tracker from core:PersonForm" ; sh:codeIdentifier "IssueTrackerPerson"; @@ -114,8 +114,8 @@ person-shape:IssueTrackerPersonShape sh:path vcard:fn ; sh:minCount 1 ; sh:datatype xsd:string ; - rdfs:label "Person Name" ; - rdfs:comment "The human-readable name of the person."; + sh:name "Person Name" ; + sh:description "The human-readable name of the person."; sh:codeIdentifier "fullName"; sh:maxCount 1; ] ; @@ -124,24 +124,24 @@ person-shape:IssueTrackerPersonShape sh:path owl:sameAs ; sh:maxCount 1 ; sh:class vcard:Individual ; - rdfs:label "Solid ID" ; - rdfs:comment "The Solid WebID of the person, if available."; + sh:name "Solid ID" ; + sh:description "The Solid WebID of the person, if available."; sh:codeIdentifier "solidId"; ] ; sh:property [ sh:path vcard:phone ; sh:maxCount 1 ; - rdfs:label "Phone" ; - rdfs:comment "Telephone number"; + sh:name "Phone" ; + sh:description "Telephone number"; sh:codeIdentifier "phone"; ] ; sh:property [ sh:path vcard:email ; sh:maxCount 1 ; - rdfs:label "Email" ; - rdfs:comment "Email address"; + sh:name "Email" ; + sh:description "Email address"; sh:codeIdentifier "emailAddress"; ] ; @@ -152,8 +152,8 @@ person-shape:IssueTrackerPersonShape person-shape:ContactPersonShape a sh:NodeShape ; - rdfs:label "Person Shape" ; - rdfs:comment "SHACL shape representing a person" ; + sh:name "Person Shape" ; + sh:description "SHACL shape representing a person" ; sh:targetClass vcard:Individual ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -172,7 +172,7 @@ person-shape:ContactPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:fn ; sh:pattern ".* .*" ; - rdfs:label "Full Name" ; + sh:name "Full Name" ; sh:datatype xsd:string; sh:codeIdentifier "fullName"; sh:minCount 1; @@ -241,8 +241,8 @@ person-shape:ContactPersonShape a sh:NodeShape ; sh:path vcard:role ; sh:datatype xsd:string; sh:maxCount 1; - rdfs:label "Role" ; - rdfs:comment "The role or job title of the person." ; + sh:name "Role" ; + sh:description "The role or job title of the person." ; sh:codeIdentifier "role"; ]; diff --git a/shapes/personal-name.ttl b/shapes/personal-name.ttl index e8a1daf..19f4fa2 100644 --- a/shapes/personal-name.ttl +++ b/shapes/personal-name.ttl @@ -13,8 +13,8 @@ personal-name:PersonalNameShape a sh:NodeShape ; - rdfs:label "Structured Personal Name Shape" ; - rdfs:comment "Validates components of a person's structured name in VCARD data." ; + sh:name "Structured Personal Name Shape" ; + sh:description "Validates components of a person's structured name in VCARD data." ; sh:targetObjectOf vcard:hasName ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; @@ -27,8 +27,8 @@ personal-name:PersonalNameShape sh:path vcard:family-name ; sh:datatype xsd:string ; sh:maxCount 1 ; - rdfs:label "Family Name" ; - rdfs:comment "The surname or family name of the individual."; + sh:name "Family Name" ; + sh:description "The surname or family name of the individual."; sh:codeIdentifier "familyName"; ] ; @@ -37,8 +37,8 @@ personal-name:PersonalNameShape sh:path vcard:given-name ; sh:datatype xsd:string ; sh:maxCount 1 ; - rdfs:label "Given Name" ; - rdfs:comment "The given or first name of the individual."; + sh:name "Given Name" ; + sh:description "The given or first name of the individual."; sh:codeIdentifier "givenName"; ] ; @@ -47,8 +47,8 @@ personal-name:PersonalNameShape sh:path vcard:additional-name ; sh:datatype xsd:string ; sh:maxCount 1 ; - rdfs:label "Additional Name" ; - rdfs:comment "Any middle name(s) or additional name of the individual."; + sh:name "Additional Name" ; + sh:description "Any middle name(s) or additional name of the individual."; sh:codeIdentifier "additionalName"; ] ; @@ -57,8 +57,8 @@ personal-name:PersonalNameShape sh:path vcard:honorific-prefix ; sh:datatype xsd:string ; sh:maxCount 1 ; - rdfs:label "Honorific Prefix" ; - rdfs:comment "Honorific prefix such as Dr., Mr., or Ms."; + sh:name "Honorific Prefix" ; + sh:description "Honorific prefix such as Dr., Mr., or Ms."; sh:codeIdentifier "honorificPrefix"; ] ; @@ -67,11 +67,11 @@ personal-name:PersonalNameShape sh:path vcard:honorific-suffix ; sh:datatype xsd:string ; sh:maxCount 1 ; - rdfs:label "Honorific Suffix" ; - rdfs:comment "Honorific suffix such as Jr., III, or PhD."; + sh:name "Honorific Suffix" ; + sh:description "Honorific suffix such as Jr., III, or PhD."; sh:codeIdentifier "honorificSuffix"; ] ; # Closed shape ensures no extra properties are allowed sh:closed true ; - rdfs:comment "No other properties beyond the defined name components are allowed in this shape." . + sh:description "No other properties beyond the defined name components are allowed in this shape." . diff --git a/shapes/resource.ttl b/shapes/resource.ttl index e041c21..f6abe5b 100644 --- a/shapes/resource.ttl +++ b/shapes/resource.ttl @@ -13,7 +13,7 @@ resource-shape:ResourceShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; - rdfs:label "Resource"; + sh:name "Resource"; sh:codeIdentifier "Resource"; dct:created "2026-03-18"^^xsd:date ; vs:term_status "testing"; @@ -26,7 +26,7 @@ resource-shape:ResourceShape a sh:NodeShape ; ] ; sh:property [ - sh:path rdfs:label ; + sh:path sh:name ; sh:codeIdentifier "label" ; sh:datatype xsd:string ; sh:maxCount 1 diff --git a/shapes/software-agent.ttl b/shapes/software-agent.ttl index 4ce1c05..02698a0 100644 --- a/shapes/software-agent.ttl +++ b/shapes/software-agent.ttl @@ -11,8 +11,8 @@ software-agent-shape:ContactSoftwareAgentShape a sh:NodeShape ; sh:targetClass prov:SoftwareAgent ; - rdfs:label "Software Agent Shape" ; - rdfs:comment "SHACL shape representing a software agent, which can be associated with a vCard contact as an agent that performs actions on behalf of the contact." ; + sh:name "Software Agent Shape" ; + sh:description "SHACL shape representing a software agent, which can be associated with a vCard contact as an agent that performs actions on behalf of the contact." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; diff --git a/shapes/telephone.ttl b/shapes/telephone.ttl index 63d3d44..f3210f0 100644 --- a/shapes/telephone.ttl +++ b/shapes/telephone.ttl @@ -14,8 +14,8 @@ telephone-shape:TelephoneAsIRIShape a sh:NodeShape; sh:targetObjectsOf vcard:hasTelephone; - rdfs:label "Telephone Shape (as IRI)" ; - rdfs:comment "SHACL shape for validating telephone numbers associated with a vCard contact, ensuring they are represented as IRIs with the appropriate 'tel:' scheme." ; + sh:name "Telephone Shape (as IRI)" ; + sh:description "SHACL shape for validating telephone numbers associated with a vCard contact, ensuring they are represented as IRIs with the appropriate 'tel:' scheme." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -37,8 +37,8 @@ telephone-shape:TelephoneAsIRIShape a sh:NodeShape; telephone-shape:TelephoneShape a sh:NodeShape ; sh:targetObjectsOf vcard:hasTelephone ; - rdfs:label "Telephone Shape" ; - rdfs:comment "SHACL shape for validating telephone numbers associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; + sh:name "Telephone Shape" ; + sh:description "SHACL shape for validating telephone numbers associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -50,8 +50,8 @@ telephone-shape:TelephoneShape sh:path rdf:type ; sh:maxCount 1 ; sh:in ( vcard:Cell vcard:Home vcard:Work ) ; - rdfs:label "Phone Type" ; - rdfs:comment "The classification of the phone (cell, home, work)." ; + sh:name "Phone Type" ; + sh:description "The classification of the phone (cell, home, work)." ; sh:codeIdentifier "telephoneType"; ] ; @@ -60,8 +60,8 @@ telephone-shape:TelephoneShape sh:path vcard:value ; sh:minCount 1 ; sh:maxCount 1 ; - rdfs:label "Phone Number" ; - rdfs:comment "The telephone number of the contact." ; + sh:name "Phone Number" ; + sh:description "The telephone number of the contact." ; sh:codeIdentifier "telephoneNumber"; ] . diff --git a/shapes/vcard.ttl b/shapes/vcard.ttl index e1117ad..83777ad 100644 --- a/shapes/vcard.ttl +++ b/shapes/vcard.ttl @@ -10,12 +10,12 @@ vcard-shape:VCardShape a sh:NodeShape ; sh:targetClass vcard:VCard ; - rdfs:label "vCard Shape" ; - rdfs:comment "RFC 6350 based vCard validation." ; + sh:name "vCard Shape" ; + sh:description "RFC 6350 based vCard validation." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dct:references ; - rdfs:comment "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; + sh:description "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; sh:codeIdentifier "VCard"; sh:property [ @@ -24,7 +24,7 @@ vcard-shape:VCardShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "fullName"; + sh:name "fullName"; sh:codeIdentifier "fullName"; ] ; @@ -32,7 +32,7 @@ vcard-shape:VCardShape sh:path vcard:n ; sh:node vcard-shape:NameShape ; sh:nodeKind sh:BlankNode ; - rdfs:label "name"; + sh:name "name"; sh:codeIdentifier "name"; ] ; @@ -40,14 +40,14 @@ vcard-shape:VCardShape sh:property [ sh:path vcard:hasEmail ; sh:nodeKind sh:IRI ; - rdfs:comment "label"; + sh:description "label"; sh:codeIdentifier "email"; ] ; sh:property [ sh:path vcard:hasTelephone ; sh:nodeKind sh:IRI ; - rdfs:label "telephone"; + sh:name "telephone"; sh:codeIdentifier "telephone"; ] ; @@ -55,7 +55,7 @@ vcard-shape:VCardShape sh:path vcard:hasAddress ; sh:node vcard-shape:AddressShape ; sh:nodeKind sh:BlankNode ; - rdfs:label "address"; + sh:name "address"; sh:codeIdentifier "address"; ] ; @@ -65,7 +65,7 @@ vcard-shape:VCardShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Organization Name"; + sh:name "Organization Name"; sh:codeIdentifier "organizationName" ] ; . @@ -76,12 +76,12 @@ vcard-shape:VCardShape vcard-shape:NameShape a sh:NodeShape ; - rdfs:label "vCard Name Shape" ; - rdfs:comment "SHACL shape representing the structured name of a vCard individual." ; + sh:name "vCard Name Shape" ; + sh:description "SHACL shape representing the structured name of a vCard individual." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dct:references ; - rdfs:comment "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; + sh:description "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; sh:codeIdentifier "VCardPersonalName"; @@ -91,7 +91,7 @@ vcard-shape:NameShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Family Name"; + sh:name "Family Name"; sh:codeIdentifier "familyName"; ] ; @@ -101,7 +101,7 @@ vcard-shape:NameShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Given Name"; + sh:name "Given Name"; sh:codeIdentifier "givenName" ] ; @@ -111,7 +111,7 @@ vcard-shape:NameShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Additional Name"; + sh:name "Additional Name"; sh:codeIdentifier "additionalName"; ] ; @@ -121,7 +121,7 @@ vcard-shape:NameShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "honorificPrefix"; + sh:name "honorificPrefix"; sh:codeIdentifier "honorificPrefix"; ] ; @@ -131,7 +131,7 @@ vcard-shape:NameShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:comment "Honorific Suffix"; + sh:description "Honorific Suffix"; sh:codeIdentifier "honorificSuffix" ] ; . @@ -142,12 +142,12 @@ vcard-shape:NameShape vcard-shape:AddressShape a sh:NodeShape ; - rdfs:label "vCard Address Shape" ; - rdfs:comment "SHACL shape representing the address details of a vCard individual." ; + sh:name "vCard Address Shape" ; + sh:description "SHACL shape representing the address details of a vCard individual." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dct:references ; - rdfs:comment "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; + sh:description "This shape validates vCard data according to the structure and properties defined in RFC 6350, ensuring that vCard instances conform to the expected format and constraints." ; sh:codeIdentifier "VCardAddress"; sh:property [ @@ -156,7 +156,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Street Address"; + sh:name "Street Address"; sh:codeIdentifier "streetAddress"; ] ; @@ -166,7 +166,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Extended Address"; + sh:name "Extended Address"; sh:codeIdentifier "extendedAddress"; ] ; @@ -176,7 +176,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Locality"; + sh:name "Locality"; sh:codeIdentifier "locality"; ] ; @@ -186,7 +186,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:label "Region"; + sh:name "Region"; sh:codeIdentifier "region"; ] ; @@ -196,7 +196,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:comment "Postal Code"; + sh:description "Postal Code"; sh:codeIdentifier "postalCode"; ] ; @@ -206,7 +206,7 @@ vcard-shape:AddressShape [ sh:datatype xsd:string ] [ sh:datatype xsd:string ] ) ; - rdfs:comment "Country Name"; + sh:description "Country Name"; sh:codeIdentifier "countryName"; ] ; . \ No newline at end of file diff --git a/shapes/web-id.ttl b/shapes/web-id.ttl index 79fa655..8e341aa 100644 --- a/shapes/web-id.ttl +++ b/shapes/web-id.ttl @@ -17,8 +17,8 @@ web-id-shape:WebIdShape a sh:NodeShape; sh:description """The URL of the subject can be a Homepage on the web, their Solid-compatible WebId, or an RDF Id in open public data."""; sh:targetObjectsOf vcard:url; - rdfs:label "Web ID Shape" ; - rdfs:comment "SHACL shape for validating web identifiers (URLs) associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; + sh:name "Web ID Shape" ; + sh:description "SHACL shape for validating web identifiers (URLs) associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -31,7 +31,7 @@ web-id-shape:WebIdShape a sh:NodeShape; sh:minCount 1; sh:maxCount 1; sh:in (vcard:Home vcard:Work vcard:Homepage vcard:WebId vcard:PublicId); - rdfs:label "Web ID Type"; + sh:name "Web ID Type"; sh:codeIdentifier "webIdType"; ]; @@ -41,7 +41,7 @@ web-id-shape:WebIdShape a sh:NodeShape; sh:datatype xsd:string; sh:minCount 1; sh:maxCount 1; - rdfs:label "Value"; + sh:name "Value"; sh:codeIdentifier "webIdValue"; # cannot use "value" with TermWrapper ]. diff --git a/shapes/web-page.ttl b/shapes/web-page.ttl index f1a7ddf..a9eef08 100644 --- a/shapes/web-page.ttl +++ b/shapes/web-page.ttl @@ -11,8 +11,8 @@ web-page-shape:WebPageShape a sh:NodeShape; sh:targetObjectsOf vcard:url; - rdfs:label "Web Page Shape" ; - rdfs:comment "SHACL shape for validating web identifiers (URLs) associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; + sh:name "Web Page Shape" ; + sh:description "SHACL shape for validating web identifiers (URLs) associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -24,7 +24,7 @@ web-page-shape:WebPageShape a sh:NodeShape; sh:pattern "^https?:" ; # starts with http: or https: sh:minCount 1; sh:maxCount 1; - rdfs:label "URL"; + sh:name "URL"; sh:codeIdentifier "url"; ] . From 47b7304aacfce677fb74aebb8046ede5036c1573 Mon Sep 17 00:00:00 2001 From: Tanya Gray Date: Wed, 1 Apr 2026 13:05:39 +0100 Subject: [PATCH 03/10] replace hyphens with underscores --- ...ess-control.ttl => acp_access_control.ttl} | 8 +- ...ce.ttl => acp_access_control_resource.ttl} | 8 +- shapes/{acp-matcher.ttl => acp_matcher.ttl} | 4 +- shapes/{acp-policy.ttl => acp_policy.ttl} | 8 +- shapes/{acp-typed.ttl => acp_typed.ttl} | 5 +- shapes/address.ttl | 7 +- shapes/{address-book.ttl => address_book.ttl} | 4 +- shapes/agent.ttl | 18 +-- shapes/bookmark.ttl | 4 +- shapes/chat.ttl | 112 +++++++++--------- shapes/container.ttl | 8 +- shapes/email.ttl | 8 +- shapes/event.ttl | 4 +- shapes/group.ttl | 14 +-- shapes/issue-tracker.ttl | 12 +- shapes/meeting.ttl | 4 +- shapes/organization.ttl | 18 +-- shapes/person.ttl | 20 ++-- shapes/personal-name.ttl | 4 +- shapes/resource.ttl | 4 +- shapes/software-agent.ttl | 4 +- shapes/telephone.ttl | 8 +- shapes/vcard.ttl | 12 +- shapes/web-id.ttl | 4 +- shapes/web-page.ttl | 4 +- 25 files changed, 149 insertions(+), 157 deletions(-) rename shapes/{acp-access-control.ttl => acp_access_control.ttl} (77%) rename shapes/{acp-access-control-resource.ttl => acp_access_control_resource.ttl} (78%) rename shapes/{acp-matcher.ttl => acp_matcher.ttl} (88%) rename shapes/{acp-policy.ttl => acp_policy.ttl} (82%) rename shapes/{acp-typed.ttl => acp_typed.ttl} (84%) rename shapes/{address-book.ttl => address_book.ttl} (95%) diff --git a/shapes/acp-access-control.ttl b/shapes/acp_access_control.ttl similarity index 77% rename from shapes/acp-access-control.ttl rename to shapes/acp_access_control.ttl index ad888b8..cb278e7 100644 --- a/shapes/acp-access-control.ttl +++ b/shapes/acp_access_control.ttl @@ -8,11 +8,11 @@ @prefix dct: . @prefix vs: . -@prefix acp-policy-shape: . +@prefix acp_policy_shape: . -@prefix acp-access-control-shape: . +@prefix acp_access_control_shape: . -acp-access-control-shape:AcpAccessControlShape a sh:NodeShape ; +acp_access_control_shape:AcpAccessControlShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AcpAccessControl"; @@ -22,7 +22,7 @@ acp-access-control-shape:AcpAccessControlShape a sh:NodeShape ; sh:property [ sh:path acp:apply ; - sh:node acp-policy-shape:AcpPolicyShape ; + sh:node acp_policy_shape:AcpPolicyShape ; sh:name "apply"; sh:codeIdentifier "apply"; ] . \ No newline at end of file diff --git a/shapes/acp-access-control-resource.ttl b/shapes/acp_access_control_resource.ttl similarity index 78% rename from shapes/acp-access-control-resource.ttl rename to shapes/acp_access_control_resource.ttl index 239c595..dbd83c7 100644 --- a/shapes/acp-access-control-resource.ttl +++ b/shapes/acp_access_control_resource.ttl @@ -8,11 +8,11 @@ @prefix dct: . @prefix vs: . -@prefix acp-access-control-shape: . -@prefix acp-access-control-resource-shape: . +@prefix acp_access_control_shape: . +@prefix acp_access_control_resource_shape: . # Shape for AccessControlResource -acp-access-control-resource-shape:AcpAccessControlResourceShape a sh:NodeShape ; +acp_access_control_resource_shape:AcpAccessControlResourceShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlResource"; @@ -23,7 +23,7 @@ acp-access-control-resource-shape:AcpAccessControlResourceShape a sh:NodeShape ; # accessControl: multiple AccessControl objects sh:property [ sh:path acp:accessControl ; - sh:node acp-access-control-shape:AcpAccessControlShape ; + sh:node acp_access_control_shape:AcpAccessControlShape ; sh:codeIdentifier "accessControl"; ] ; diff --git a/shapes/acp-matcher.ttl b/shapes/acp_matcher.ttl similarity index 88% rename from shapes/acp-matcher.ttl rename to shapes/acp_matcher.ttl index 0d2dd88..a2fc812 100644 --- a/shapes/acp-matcher.ttl +++ b/shapes/acp_matcher.ttl @@ -8,9 +8,9 @@ @prefix dct: . @prefix vs: . -@prefix acp-matcher-shape: . +@prefix acp_matcher_shape: . -acp-matcher-shape:AcpMatcherShape a sh:NodeShape ; +acp_matcher_shape:AcpMatcherShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AcpMatcher"; diff --git a/shapes/acp-policy.ttl b/shapes/acp_policy.ttl similarity index 82% rename from shapes/acp-policy.ttl rename to shapes/acp_policy.ttl index c22cea2..c055840 100644 --- a/shapes/acp-policy.ttl +++ b/shapes/acp_policy.ttl @@ -8,11 +8,11 @@ @prefix dct: . @prefix vs: . -@prefix acp-policy-shape: . -@prefix acp-matcher-shape: . +@prefix acp_policy_shape: . +@prefix acp_matcher_shape: . -acp-policy-shape:AcpPolicyShape a sh:NodeShape ; +acp_policy_shape:AcpPolicyShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlPolicy"; @@ -29,7 +29,7 @@ acp-policy-shape:AcpPolicyShape a sh:NodeShape ; sh:property [ sh:path acp:anyOf ; - sh:node acp-matcher-shape:AcpMatcherShape; + sh:node acp_matcher_shape:AcpMatcherShape; sh:name "any of"; sh:codeIdentifier "anyOf"; ] . \ No newline at end of file diff --git a/shapes/acp-typed.ttl b/shapes/acp_typed.ttl similarity index 84% rename from shapes/acp-typed.ttl rename to shapes/acp_typed.ttl index 43a000e..e0d41a2 100644 --- a/shapes/acp-typed.ttl +++ b/shapes/acp_typed.ttl @@ -5,12 +5,11 @@ @prefix prov: . @prefix dc: . @prefix rdf: . -@prefix rdfs: . @prefix dct: . @prefix vs: . -@prefix acp-typed-shape: . +@prefix acp_typed_shape: . -acp-typed-shape:AcpTypedShape a sh:NodeShape ; +acp_typed_shape:AcpTypedShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "AccessControlPolicy"; diff --git a/shapes/address.ttl b/shapes/address.ttl index 6e18159..7f7b84d 100644 --- a/shapes/address.ttl +++ b/shapes/address.ttl @@ -7,12 +7,9 @@ @prefix prov: . @prefix dc: . +@prefix address_shape: . -@prefix address-shape: . - - - -address-shape:AddressShape +address_shape:AddressShape sh:name "Address"; sh:targetClass vcard:Address; a sh:NodeShape ; diff --git a/shapes/address-book.ttl b/shapes/address_book.ttl similarity index 95% rename from shapes/address-book.ttl rename to shapes/address_book.ttl index 37e3c13..971f49d 100644 --- a/shapes/address-book.ttl +++ b/shapes/address_book.ttl @@ -7,9 +7,9 @@ @prefix prov: . @prefix dc: . -@prefix address-book-shape: . +@prefix address_book_shape: . -address-book-shape:AddressBookShape a sh:NodeShape ; +address_book_shape:AddressBookShape a sh:NodeShape ; sh:name "AddressBook"; sh:targetClass vcard:AddressBook ; sh:description "Represents a collection of vCard people and/or vCard groups" ; diff --git a/shapes/agent.ttl b/shapes/agent.ttl index f481579..8038329 100644 --- a/shapes/agent.ttl +++ b/shapes/agent.ttl @@ -12,13 +12,13 @@ @prefix pim: . @prefix solid: . -@prefix person-shape: . -@prefix organization-shape: . -@prefix software-agent-shape: . +@prefix person_shape: . +@prefix organization_shape: . +@prefix software_agent_shape: . -@prefix agent-shape: . +@prefix agent_shape: . -agent-shape:AgentShape +agent_shape:AgentShape a sh:NodeShape ; sh:targetClass foaf:Agent ; dct:created "2026-03-12"^^xsd:date ; @@ -30,14 +30,14 @@ agent-shape:AgentShape sh:codeIdentifier "Agent" ; sh:xone ( - [ sh:node person-shape:ContactPersonShape ] - [ sh:node organization-shape:ContactOrganizationShape ] - [ sh:node software-agent-shape::ContactSoftwareAgentShape ] + [ sh:node person_shape:ContactPersonShape ] + [ sh:node organization_shape:ContactOrganizationShape ] + [ sh:node software_agent_shape::ContactSoftwareAgentShape ] ) . -agent-shape:WebIdAgentShape +agent_shape:WebIdAgentShape a sh:NodeShape ; sh:targetClass foaf:Agent ; sh:name "Agent Shape" ; diff --git a/shapes/bookmark.ttl b/shapes/bookmark.ttl index f2e6e03..f261b15 100644 --- a/shapes/bookmark.ttl +++ b/shapes/bookmark.ttl @@ -7,10 +7,10 @@ @prefix dc: . @prefix prov: . -@prefix bookmark-shape: . +@prefix bookmark_shape: . -bookmark-shape:BookmarkShape +bookmark_shape:BookmarkShape a sh:NodeShape ; sh:targetClass bookmark:Bookmark ; sh:name "Bookmark" ; diff --git a/shapes/chat.ttl b/shapes/chat.ttl index 7431b40..9b5a1ab 100644 --- a/shapes/chat.ttl +++ b/shapes/chat.ttl @@ -15,11 +15,11 @@ @prefix dct: . @prefix vs: . @prefix prov: . -@prefix chat-shape: . +@prefix chat_shape: . ##################### Chat Channel Shape -chat-shape:ChatChannelShape a sh:NodeShape ; +chat_shape:ChatChannelShape a sh:NodeShape ; sh:name "Chat Channel Shape" ; sh:description "SHACL NodeShape describing the properties and constraints for a Solid Chat" ; sh:targetClass mee:LongChat ; @@ -28,14 +28,14 @@ chat-shape:ChatChannelShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatChannel" ; - sh:property chat-shape:ChatChannelShape_type, - chat-shape:ChatChannelShape_author, - chat-shape:ChatChannelShape_title, - chat-shape:ChatChannelShape_createdDate, - chat-shape:ChatChannelShape_sharedPreferences, - chat-shape:ChatChannelShape_participation . - -chat-shape:ChatChannelShape_type a sh:PropertyShape ; + sh:property chat_shape:ChatChannelShape_type, + chat_shape:ChatChannelShape_author, + chat_shape:ChatChannelShape_title, + chat_shape:ChatChannelShape_createdDate, + chat_shape:ChatChannelShape_sharedPreferences, + chat_shape:ChatChannelShape_participation . + +chat_shape:ChatChannelShape_type a sh:PropertyShape ; sh:path rdf:type ; sh:value mee:LongChat ; sh:minCount 1 ; @@ -43,14 +43,14 @@ chat-shape:ChatChannelShape_type a sh:PropertyShape ; sh:description "Specifies that the node must be of type LongChat." ; sh:codeIdentifier "type" . -chat-shape:ChatChannelShape_author a sh:PropertyShape ; +chat_shape:ChatChannelShape_author a sh:PropertyShape ; sh:path dc:author ; sh:minCount 1 ; sh:name "Author" ; sh:description "The author of the chat channel." ; sh:codeIdentifier "author" . -chat-shape:ChatChannelShape_title a sh:PropertyShape ; +chat_shape:ChatChannelShape_title a sh:PropertyShape ; sh:path dc:title ; sh:datatype xsd:string ; sh:minCount 1 ; @@ -59,7 +59,7 @@ chat-shape:ChatChannelShape_title a sh:PropertyShape ; sh:description "The title of the chat channel." ; sh:codeIdentifier "title" . -chat-shape:ChatChannelShape_createdDate a sh:PropertyShape ; +chat_shape:ChatChannelShape_createdDate a sh:PropertyShape ; sh:path dc:created ; sh:datatype xsd:dateTime ; sh:minCount 1 ; @@ -68,24 +68,24 @@ chat-shape:ChatChannelShape_createdDate a sh:PropertyShape ; sh:description "The creation date of the chat channel." ; sh:codeIdentifier "createdDate" . -chat-shape:ChatChannelShape_sharedPreferences a sh:PropertyShape ; +chat_shape:ChatChannelShape_sharedPreferences a sh:PropertyShape ; sh:path ui:sharedPreferences ; - sh:node chat-shape:ChatSharedPreferencesShape ; + sh:node chat_shape:ChatSharedPreferencesShape ; sh:minCount 0 ; sh:name "Shared Preferences" ; sh:description "References user interface preferences shared in the chat." ; sh:codeIdentifier "sharedPreferences" . -chat-shape:ChatChannelShape_participation a sh:PropertyShape ; +chat_shape:ChatChannelShape_participation a sh:PropertyShape ; sh:path flow:participation ; - sh:node chat-shape:ChatParticipationShape ; + sh:node chat_shape:ChatParticipationShape ; sh:name "Participation" ; sh:description "Indicates participants in the chat channel." ; sh:codeIdentifier "participation" . ##################### Chat Message Shape -chat-shape:ChatMessageShape a sh:NodeShape ; +chat_shape:ChatMessageShape a sh:NodeShape ; sh:name "Chat Message Shape" ; sh:description "SHACL NodeShape defining constraints for messages in Solid Chat." ; sh:targetObjectsOf flow:message ; @@ -94,13 +94,13 @@ chat-shape:ChatMessageShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatMessage" ; - sh:property chat-shape:ChatMessageShape_createdDate, - chat-shape:ChatMessageShape_author, - chat-shape:ChatMessageShape_content + sh:property chat_shape:ChatMessageShape_createdDate, + chat_shape:ChatMessageShape_author, + chat_shape:ChatMessageShape_content . - # chat-shape:ChatMessageShape_relatedChatChannel unsupported at this time + # chat_shape:ChatMessageShape_relatedChatChannel unsupported at this time -chat-shape:ChatMessageShape_createdDate a sh:PropertyShape ; +chat_shape:ChatMessageShape_createdDate a sh:PropertyShape ; sh:path terms:created ; sh:minCount 1 ; sh:maxCount 1 ; @@ -109,7 +109,7 @@ chat-shape:ChatMessageShape_createdDate a sh:PropertyShape ; sh:description "The date and time when the message was created." ; sh:codeIdentifier "createdDate" . -chat-shape:ChatMessageShape_author a sh:PropertyShape ; +chat_shape:ChatMessageShape_author a sh:PropertyShape ; sh:path foaf:maker ; sh:minCount 1 ; sh:maxCount 1 ; @@ -117,7 +117,7 @@ chat-shape:ChatMessageShape_author a sh:PropertyShape ; sh:description "The agent or person who authored the message." ; sh:codeIdentifier "author" . -chat-shape:ChatMessageShape_content a sh:PropertyShape ; +chat_shape:ChatMessageShape_content a sh:PropertyShape ; sh:path sioc:content ; sh:datatype xsd:string ; sh:minCount 1 ; @@ -126,7 +126,7 @@ chat-shape:ChatMessageShape_content a sh:PropertyShape ; sh:description "The textual content of the message." ; sh:codeIdentifier "content" . -chat-shape:ChatMessageShape_relatedChatChannel a sh:PropertyShape ; +chat_shape:ChatMessageShape_relatedChatChannel a sh:PropertyShape ; sh:path [ sh:inversePath flow:message ] ; sh:minCount 1 ; sh:name "Related Chat" ; @@ -135,7 +135,7 @@ chat-shape:ChatMessageShape_relatedChatChannel a sh:PropertyShape ; ##################### Chat Participation Shape -chat-shape:ChatParticipationShape a sh:NodeShape ; +chat_shape:ChatParticipationShape a sh:NodeShape ; sh:name "Participation Shape" ; sh:description "SHACL NodeShape defining constraints for a participant in a Solid Chat." ; sh:targetObjectsOf flow:participation ; @@ -144,15 +144,15 @@ chat-shape:ChatParticipationShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "Participation" ; - sh:property chat-shape:ChatParticipationShape_startDate, - chat-shape:ChatParticipationShape_participant, - chat-shape:ChatParticipationShape_colorizeByAuthor, - chat-shape:ChatParticipationShape_expandImagesInline, - chat-shape:ChatParticipationShape_inlineImageHeight, - chat-shape:ChatParticipationShape_newestFirst, - chat-shape:ChatParticipationShape_backgroundColor . - -chat-shape:ChatParticipationShape_startDate a sh:PropertyShape ; + sh:property chat_shape:ChatParticipationShape_startDate, + chat_shape:ChatParticipationShape_participant, + chat_shape:ChatParticipationShape_colorizeByAuthor, + chat_shape:ChatParticipationShape_expandImagesInline, + chat_shape:ChatParticipationShape_inlineImageHeight, + chat_shape:ChatParticipationShape_newestFirst, + chat_shape:ChatParticipationShape_backgroundColor . + +chat_shape:ChatParticipationShape_startDate a sh:PropertyShape ; sh:path ical:dtstart ; sh:datatype xsd:dateTime ; sh:minCount 1 ; @@ -161,7 +161,7 @@ chat-shape:ChatParticipationShape_startDate a sh:PropertyShape ; sh:description "The date and time when the participation started." ; sh:codeIdentifier "startDate" . -chat-shape:ChatParticipationShape_participant a sh:PropertyShape ; +chat_shape:ChatParticipationShape_participant a sh:PropertyShape ; sh:path flow:participant ; sh:minCount 1 ; sh:maxCount 1 ; @@ -169,7 +169,7 @@ chat-shape:ChatParticipationShape_participant a sh:PropertyShape ; sh:description "The agent or person participating in the chat." ; sh:codeIdentifier "participant" . -chat-shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; +chat_shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; sh:path solid:colorizeByAuthor ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -177,7 +177,7 @@ chat-shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; sh:description "Indicates if messages from this participant should be colorized by author." ; sh:codeIdentifier "colorizeByAuthor" . -chat-shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; +chat_shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -185,7 +185,7 @@ chat-shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; sh:description "Indicates if images should be displayed inline for this participant." ; sh:codeIdentifier "expandImagesInline" . -chat-shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; +chat_shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; @@ -193,7 +193,7 @@ chat-shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; sh:comment "Preferred height of inline images in em units for this participant." ; sh:codeIdentifier "inlineImageHeight" . -chat-shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; +chat_shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -201,7 +201,7 @@ chat-shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; sh:description "If true, messages are displayed newest first for this participant." ; sh:codeIdentifier "newestFirst" . -chat-shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; +chat_shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; sh:path ui:backgroundColor ; sh:datatype xsd:string ; sh:maxCount 1 ; @@ -212,7 +212,7 @@ chat-shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; ##################### Chat Shared Preferences Shape -chat-shape:ChatSharedPreferencesShape a sh:NodeShape ; +chat_shape:ChatSharedPreferencesShape a sh:NodeShape ; sh:name "Chat Shared Preferences Shape" ; sh:description "NodeShape defining shared UI preferences for chat participants." ; sh:targetObjectsOf ui:sharedPreferences ; @@ -221,11 +221,11 @@ chat-shape:ChatSharedPreferencesShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatSharedPreferences" ; - sh:property chat-shape:ChatSharedPreferencesShape_expandImagesInline, - chat-shape:ChatSharedPreferencesShape_inlineImageHeight, - chat-shape:ChatSharedPreferencesShape_newestFirst . + sh:property chat_shape:ChatSharedPreferencesShape_expandImagesInline, + chat_shape:ChatSharedPreferencesShape_inlineImageHeight, + chat_shape:ChatSharedPreferencesShape_newestFirst . -chat-shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; +chat_shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -233,7 +233,7 @@ chat-shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; sh:description "Indicates whether images should be expanded inline in the chat UI." ; sh:codeIdentifier "expandImagesInline" . -chat-shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; +chat_shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; @@ -241,7 +241,7 @@ chat-shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; sh:description "Preferred height for inline images in em units." ; sh:codeIdentifier "inlineImageHeight" . -chat-shape:ChatSharedPreferencesShape_newestFirst a sh:PropertyShape ; +chat_shape:ChatSharedPreferencesShape_newestFirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -251,7 +251,7 @@ chat-shape:ChatSharedPreferencesShape_newestFirst a sh:PropertyShape ; ##################### Chat Action Shape -chat-shape:ChatActionShape a sh:NodeShape ; +chat_shape:ChatActionShape a sh:NodeShape ; sh:name "Chat Action Shape" ; sh:description "NodeShape defining constraints for actions representing interactions or sentiments in the chat system." ; sh:targetClass schema:Action ; @@ -260,24 +260,24 @@ chat-shape:ChatActionShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatAction" ; - sh:property chat-shape:ChatActionShape_type, - chat-shape:ChatActionShape_agent, - chat-shape:ChatActionShape_target + sh:property chat_shape:ChatActionShape_type, + chat_shape:ChatActionShape_agent, + chat_shape:ChatActionShape_target . -chat-shape:ChatActionShape_type a sh:PropertyShape ; +chat_shape:ChatActionShape_type a sh:PropertyShape ; sh:path rdf:type ; sh:minCount 1 ; sh:name "Type" ; sh:codeIdentifier "type" . -chat-shape:ChatActionShape_agent a sh:PropertyShape ; +chat_shape:ChatActionShape_agent a sh:PropertyShape ; sh:path schema:agent ; sh:maxCount 1 ; sh:name "Agent" ; sh:codeIdentifier "agent" . -chat-shape:ChatActionShape_target a sh:PropertyShape ; +chat_shape:ChatActionShape_target a sh:PropertyShape ; sh:path schema:target ; sh:minCount 1 ; sh:maxCount 1 ; diff --git a/shapes/container.ttl b/shapes/container.ttl index 3ab159a..96aa703 100644 --- a/shapes/container.ttl +++ b/shapes/container.ttl @@ -7,12 +7,12 @@ @prefix vs: . @prefix xsd: . -@prefix resource-shape: . +@prefix resource_shape: . -@prefix container-shape: . +@prefix container_shape: . -container-shape:ContainerShape a sh:NodeShape ; +container_shape:ContainerShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:name "Container"; @@ -22,6 +22,6 @@ container-shape:ContainerShape a sh:NodeShape ; sh:property [ sh:path ldp:contains ; - sh:node resource-shape:ResourceShape ; + sh:node resource_shape:ResourceShape ; sh:codeIdentifier "contains" ; ] . \ No newline at end of file diff --git a/shapes/email.ttl b/shapes/email.ttl index 44c9835..0455b26 100644 --- a/shapes/email.ttl +++ b/shapes/email.ttl @@ -8,12 +8,10 @@ @prefix prov: . @prefix dc: . -@prefix email-shape: . +@prefix email_shape: . - - -email-shape:EmailShape a sh:NodeShape; +email_shape:EmailShape a sh:NodeShape; sh:name "Email Shape" ; sh:description "SHACL shape describing the structure of an email contact node including its value and optional classification type." ; sh:targetObjectsOf vcard:hasEmail; @@ -36,7 +34,7 @@ email-shape:EmailShape a sh:NodeShape; ]. -email-shape:EmailWithTypeShape +email_shape:EmailWithTypeShape a sh:NodeShape ; sh:targetObjectsOf vcard:hasEmail ; sh:name "Email Shape" ; diff --git a/shapes/event.ttl b/shapes/event.ttl index 6443237..8a031d2 100644 --- a/shapes/event.ttl +++ b/shapes/event.ttl @@ -8,9 +8,9 @@ @prefix prov: . @prefix dc: . -@prefix event-shape: . +@prefix event_shape: . -event-shape:ScheduleEventShape +event_shape:ScheduleEventShape a sh:NodeShape ; sh:name "Schedule Event Shape" ; sh:description "SHACL shape representing a scheduled event, including title, location, type, duration, authors, time proposals, and invitees." ; diff --git a/shapes/group.ttl b/shapes/group.ttl index 60e14b4..9de4d87 100644 --- a/shapes/group.ttl +++ b/shapes/group.ttl @@ -8,11 +8,11 @@ @prefix prov: . @prefix dc: . -@prefix person-shape: . +@prefix person_shape: . -@prefix group-shape: . +@prefix group_shape: . -group-shape:GroupShape +group_shape:GroupShape a sh:NodeShape ; sh:name "Group Shape" ; sh:description "Defines constraints for a vCard Group including its name and members." ; @@ -35,14 +35,14 @@ group-shape:GroupShape sh:property [ sh:path vcard:member ; - sh:node person-shape:ContactDetailsPersonShape ; + sh:node person_shape:ContactDetailsPersonShape ; sh:name "Group Member" ; sh:description "A member of the group. When the WebID of an agent is known, it MUST be used as the object of this triple so that ACL systems can grant access correctly. The main local identifier in the address book must be linked indirectly using owl:sameAs via the GroupMemberLocalId shape. Additional identifiers may also be linked using owl:sameAs."; sh:codeIdentifier "member"; ] . -group-shape:GroupMemberLocalIdShape +group_shape:GroupMemberLocalIdShape a sh:NodeShape ; sh:name "Group Member Local Identifier Shape" ; sh:description "Ensures that a group member's local identifier links to exactly one vCard Individual using owl:sameAs." ; @@ -66,7 +66,7 @@ group-shape:GroupMemberLocalIdShape ] . -group-shape:IssueTrackerAssigneeGroupShape +group_shape:IssueTrackerAssigneeGroupShape a sh:NodeShape ; sh:name "Assignee Group Shape" ; sh:description "Defines constraints for the vCard Group used as an assignee group for issues." ; @@ -88,7 +88,7 @@ group-shape:IssueTrackerAssigneeGroupShape ] ; sh:property [ sh:path vcard:member ; - sh:node person-shape:IssueTrackerPersonShape ; + sh:node person_shape:IssueTrackerPersonShape ; sh:name "Group Member" ; sh:description "Each member of the group represented as a vCard Individual."; sh:codeIdentifier "member"; diff --git a/shapes/issue-tracker.ttl b/shapes/issue-tracker.ttl index 937a993..af9003d 100644 --- a/shapes/issue-tracker.ttl +++ b/shapes/issue-tracker.ttl @@ -8,11 +8,11 @@ @prefix prov: . @prefix dc: . -@prefix group-shape: . +@prefix group_shape: . -@prefix issue-tracker-shape: . +@prefix issue_tracker_shape: . -issue-tracker-shape:IssueTrackerShape +issue_tracker_shape:IssueTrackerShape a sh:NodeShape ; sh:name "Issue Tracker Configuration Shape" ; sh:description "Defines data constraints for configuring an issue tracker including title, description, workflow states, classification systems, assignment rules, optional forms, and additional properties." ; @@ -61,7 +61,7 @@ issue-tracker-shape:IssueTrackerShape # Nested propertyList [ sh:path wf:propertyList ; - sh:node issue-tracker-shape:PropertyListShape ; + sh:node issue_tracker_shape:PropertyListShape ; sh:name "Additional Properties" ; sh:description "An ordered list of additional properties to display in table views of issues."; sh:codeIdentifier "additionalProperties"; @@ -69,7 +69,7 @@ issue-tracker-shape:IssueTrackerShape # Nested assignee group [ sh:path wf:assigneeGroup ; - sh:node group-shape:IssueTrackerAssigneeGroupShape ; + sh:node group_shape:IssueTrackerAssigneeGroupShape ; sh:name "Assignee Group" ; sh:description "The contact group from which issues may be assigned to individuals."; sh:codeIdentifier "assigneeGroup"; @@ -81,7 +81,7 @@ issue-tracker-shape:IssueTrackerShape # Shape for each property in wf:propertyList ################################################################ -issue-tracker-shape:PropertyListShape +issue_tracker_shape:PropertyListShape a sh:NodeShape ; sh:name "Property List Item Shape" ; sh:description "Defines constraints for each property included in the propertyList of an issue tracker." ; diff --git a/shapes/meeting.ttl b/shapes/meeting.ttl index 4a40811..d4c68b8 100644 --- a/shapes/meeting.ttl +++ b/shapes/meeting.ttl @@ -7,9 +7,9 @@ @prefix prov: . @prefix dc: . -@prefix meeting-shape: . +@prefix meeting_shape: . -meeting-shape:MeetingShape +meeting_shape:MeetingShape a sh:NodeShape ; sh:name "Meeting Shape" ; sh:description "Defines constraints for meeting instances including title, location, time, comments, and display color." ; diff --git a/shapes/organization.ttl b/shapes/organization.ttl index acd5798..9053795 100644 --- a/shapes/organization.ttl +++ b/shapes/organization.ttl @@ -9,13 +9,13 @@ @prefix vs: . @prefix xsd: . -@prefix address-shape: . -@prefix email-shape: . -@prefix telephone-shape: . +@prefix address_shape: . +@prefix email_shape: . +@prefix telephone_shape: . -@prefix organization-shape: . +@prefix organization_shape: . -organization-shape:ContactOrganizationShape +organization_shape:ContactOrganizationShape a sh:NodeShape ; sh:targetClass vcard:Organization ; sh:name "Organization Shape" ; @@ -68,7 +68,7 @@ organization-shape:ContactOrganizationShape ] . -organization-shape:ContactDetailsOrganizationShape +organization_shape:ContactDetailsOrganizationShape a sh:NodeShape ; sh:targetClass vcard:Organization ; sh:name "Organization contact details Shape" ; @@ -122,7 +122,7 @@ organization-shape:ContactDetailsOrganizationShape sh:path vcard:hasAddress ; sh:name "Address" ; sh:description "Address details" ; - sh:node address-shape:AddressShape ; + sh:node address_shape:AddressShape ; sh:codeIdentifier "hasAddress"; ] ; @@ -130,7 +130,7 @@ organization-shape:ContactDetailsOrganizationShape sh:path vcard:hasEmail ; sh:name "Email Addresses" ; sh:description "Email addresses." ; - sh:node email-shape:EmailWithTypeShape ; + sh:node email_shape:EmailWithTypeShape ; sh:codeIdentifier "hasEmailAddress"; ] ; @@ -138,7 +138,7 @@ organization-shape:ContactDetailsOrganizationShape sh:path vcard:hasTelephone ; sh:name "Telephone Numbers" ; sh:description "Telephone numbers associated with the organization." ; - sh:node telephone-shape:TelephoneShape ; + sh:node telephone_shape:TelephoneShape ; sh:codeIdentifier "hasTelephoneNumber"; ] ; diff --git a/shapes/person.ttl b/shapes/person.ttl index 872e9c7..290d0c4 100644 --- a/shapes/person.ttl +++ b/shapes/person.ttl @@ -9,13 +9,13 @@ @prefix prov: . @prefix dc: . -@prefix telephone-shape: . -@prefix email-shape: . -@prefix address-shape: . +@prefix telephone_shape: . +@prefix email_shape: . +@prefix address_shape: . -@prefix person-shape: . +@prefix person_shape: . -person-shape:ContactDetailsPersonShape a sh:NodeShape ; +person_shape:ContactDetailsPersonShape a sh:NodeShape ; sh:name "Person Shape" ; sh:description "SHACL shape representing a person" ; sh:targetClass vcard:Individual ; @@ -53,7 +53,7 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasAddress ; - sh:node address-shape:AddressShape; + sh:node address_shape:AddressShape; sh:name "Address" ; sh:description "Address details" ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -62,7 +62,7 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasEmail ; - sh:node email-shape:EmailWithTypeShape; + sh:node email_shape:EmailWithTypeShape; sh:name "Emails" ; sh:description "Email addresses of the contact." ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -71,7 +71,7 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; sh:property [ sh:path vcard:hasTelephone ; - sh:node telephone-shape:TelephoneShape ; + sh:node telephone_shape:TelephoneShape ; sh:name "Telephones" ; sh:description "Telephone numbers of the contact." ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -97,7 +97,7 @@ person-shape:ContactDetailsPersonShape a sh:NodeShape ; ]; . -person-shape:IssueTrackerPersonShape +person_shape:IssueTrackerPersonShape a sh:NodeShape ; sh:name "Person Shape" ; sh:description "Defines constraints for an individual person in a group." ; @@ -151,7 +151,7 @@ person-shape:IssueTrackerPersonShape -person-shape:ContactPersonShape a sh:NodeShape ; +person_shape:ContactPersonShape a sh:NodeShape ; sh:name "Person Shape" ; sh:description "SHACL shape representing a person" ; sh:targetClass vcard:Individual ; diff --git a/shapes/personal-name.ttl b/shapes/personal-name.ttl index 19f4fa2..335f76b 100644 --- a/shapes/personal-name.ttl +++ b/shapes/personal-name.ttl @@ -7,11 +7,11 @@ @prefix prov: . @prefix dc: . -@prefix personal-name: . +@prefix personal_name: . -personal-name:PersonalNameShape +personal_name:PersonalNameShape a sh:NodeShape ; sh:name "Structured Personal Name Shape" ; sh:description "Validates components of a person's structured name in VCARD data." ; diff --git a/shapes/resource.ttl b/shapes/resource.ttl index f6abe5b..4852652 100644 --- a/shapes/resource.ttl +++ b/shapes/resource.ttl @@ -8,9 +8,9 @@ @prefix dct: . @prefix vs: . -@prefix resource-shape: . +@prefix resource_shape: . -resource-shape:ResourceShape a sh:NodeShape ; +resource_shape:ResourceShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:name "Resource"; diff --git a/shapes/software-agent.ttl b/shapes/software-agent.ttl index 02698a0..40e3702 100644 --- a/shapes/software-agent.ttl +++ b/shapes/software-agent.ttl @@ -6,9 +6,9 @@ @prefix rdfs: . @prefix dc: . -@prefix software-agent-shape: . +@prefix software_agent_shape: . -software-agent-shape:ContactSoftwareAgentShape +software_agent_shape:ContactSoftwareAgentShape a sh:NodeShape ; sh:targetClass prov:SoftwareAgent ; sh:name "Software Agent Shape" ; diff --git a/shapes/telephone.ttl b/shapes/telephone.ttl index f3210f0..c3ca640 100644 --- a/shapes/telephone.ttl +++ b/shapes/telephone.ttl @@ -8,11 +8,9 @@ @prefix prov: . @prefix dc: . -@prefix telephone-shape: . +@prefix telephone_shape: . - - -telephone-shape:TelephoneAsIRIShape a sh:NodeShape; +telephone_shape:TelephoneAsIRIShape a sh:NodeShape; sh:targetObjectsOf vcard:hasTelephone; sh:name "Telephone Shape (as IRI)" ; sh:description "SHACL shape for validating telephone numbers associated with a vCard contact, ensuring they are represented as IRIs with the appropriate 'tel:' scheme." ; @@ -34,7 +32,7 @@ telephone-shape:TelephoneAsIRIShape a sh:NodeShape; -telephone-shape:TelephoneShape +telephone_shape:TelephoneShape a sh:NodeShape ; sh:targetObjectsOf vcard:hasTelephone ; sh:name "Telephone Shape" ; diff --git a/shapes/vcard.ttl b/shapes/vcard.ttl index 83777ad..1f2e7c3 100644 --- a/shapes/vcard.ttl +++ b/shapes/vcard.ttl @@ -5,9 +5,9 @@ @prefix dct: . @prefix vs: . -@prefix vcard-shape: . +@prefix vcard_shape: . -vcard-shape:VCardShape +vcard_shape:VCardShape a sh:NodeShape ; sh:targetClass vcard:VCard ; sh:name "vCard Shape" ; @@ -30,7 +30,7 @@ vcard-shape:VCardShape sh:property [ sh:path vcard:n ; - sh:node vcard-shape:NameShape ; + sh:node vcard_shape:NameShape ; sh:nodeKind sh:BlankNode ; sh:name "name"; sh:codeIdentifier "name"; @@ -53,7 +53,7 @@ vcard-shape:VCardShape sh:property [ sh:path vcard:hasAddress ; - sh:node vcard-shape:AddressShape ; + sh:node vcard_shape:AddressShape ; sh:nodeKind sh:BlankNode ; sh:name "address"; sh:codeIdentifier "address"; @@ -74,7 +74,7 @@ vcard-shape:VCardShape # Structured Name Shape ################################################################# -vcard-shape:NameShape +vcard_shape:NameShape a sh:NodeShape ; sh:name "vCard Name Shape" ; sh:description "SHACL shape representing the structured name of a vCard individual." ; @@ -140,7 +140,7 @@ vcard-shape:NameShape # Address Shape ################################################################# -vcard-shape:AddressShape +vcard_shape:AddressShape a sh:NodeShape ; sh:name "vCard Address Shape" ; sh:description "SHACL shape representing the address details of a vCard individual." ; diff --git a/shapes/web-id.ttl b/shapes/web-id.ttl index 8e341aa..55dd7e4 100644 --- a/shapes/web-id.ttl +++ b/shapes/web-id.ttl @@ -8,9 +8,9 @@ @prefix prov: . @prefix dc: . -@prefix web-id-shape: . +@prefix web_id_shape: . -web-id-shape:WebIdShape a sh:NodeShape; +web_id_shape:WebIdShape a sh:NodeShape; # A card may have any number of http[s] URLs, with property vcard:url and where the type must be given. # so that systems know what they can use the URL for and how to present it. # We add vcard:Homepage, vcard:WebId, vcard:PublicId as friendly amendment to https://www.w3.org/TR/vcard-rdf/ diff --git a/shapes/web-page.ttl b/shapes/web-page.ttl index a9eef08..dec10ad 100644 --- a/shapes/web-page.ttl +++ b/shapes/web-page.ttl @@ -7,9 +7,9 @@ @prefix prov: . @prefix dc: . -@prefix web-page-shape: . +@prefix web_page_shape: . -web-page-shape:WebPageShape a sh:NodeShape; +web_page_shape:WebPageShape a sh:NodeShape; sh:targetObjectsOf vcard:url; sh:name "Web Page Shape" ; sh:description "SHACL shape for validating web identifiers (URLs) associated with a vCard contact, ensuring they conform to expected patterns and classifications." ; From d60d2c5fe86302a176fc5ca4bca43a0fc863694c Mon Sep 17 00:00:00 2001 From: Tanya Gray Date: Wed, 1 Apr 2026 13:06:15 +0100 Subject: [PATCH 04/10] replace hyphens with underscores --- shapes/{issue-tracker.ttl => issue_tracker.ttl} | 0 shapes/{personal-name.ttl => personal_name.ttl} | 0 shapes/{software-agent.ttl => software_agent.ttl} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename shapes/{issue-tracker.ttl => issue_tracker.ttl} (100%) rename shapes/{personal-name.ttl => personal_name.ttl} (100%) rename shapes/{software-agent.ttl => software_agent.ttl} (100%) diff --git a/shapes/issue-tracker.ttl b/shapes/issue_tracker.ttl similarity index 100% rename from shapes/issue-tracker.ttl rename to shapes/issue_tracker.ttl diff --git a/shapes/personal-name.ttl b/shapes/personal_name.ttl similarity index 100% rename from shapes/personal-name.ttl rename to shapes/personal_name.ttl diff --git a/shapes/software-agent.ttl b/shapes/software_agent.ttl similarity index 100% rename from shapes/software-agent.ttl rename to shapes/software_agent.ttl From 0b1ae6c77a603eda0ff01210fa4fccc8762607cd Mon Sep 17 00:00:00 2001 From: Tanya Gray Date: Wed, 1 Apr 2026 13:29:50 +0100 Subject: [PATCH 05/10] lowercase properties (#43) --- shapes/chat.ttl | 96 ++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/shapes/chat.ttl b/shapes/chat.ttl index 9b5a1ab..7ff8265 100644 --- a/shapes/chat.ttl +++ b/shapes/chat.ttl @@ -28,14 +28,14 @@ chat_shape:ChatChannelShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatChannel" ; - sh:property chat_shape:ChatChannelShape_type, - chat_shape:ChatChannelShape_author, - chat_shape:ChatChannelShape_title, - chat_shape:ChatChannelShape_createdDate, - chat_shape:ChatChannelShape_sharedPreferences, - chat_shape:ChatChannelShape_participation . - -chat_shape:ChatChannelShape_type a sh:PropertyShape ; + sh:property chat_shape:chatchannelshape_type, + chat_shape:chatchannelshape_author, + chat_shape:chatchannelshape_title, + chat_shape:chatchannelshape_createddate, + chat_shape:chatchannelshape_sharedpreferences, + chat_shape:chatchannelshape_participation . + +chat_shape:chatchannelshape_type a sh:PropertyShape ; sh:path rdf:type ; sh:value mee:LongChat ; sh:minCount 1 ; @@ -43,14 +43,14 @@ chat_shape:ChatChannelShape_type a sh:PropertyShape ; sh:description "Specifies that the node must be of type LongChat." ; sh:codeIdentifier "type" . -chat_shape:ChatChannelShape_author a sh:PropertyShape ; +chat_shape:chatchannelshape_author a sh:PropertyShape ; sh:path dc:author ; sh:minCount 1 ; sh:name "Author" ; sh:description "The author of the chat channel." ; sh:codeIdentifier "author" . -chat_shape:ChatChannelShape_title a sh:PropertyShape ; +chat_shape:chatchannelshape_title a sh:PropertyShape ; sh:path dc:title ; sh:datatype xsd:string ; sh:minCount 1 ; @@ -59,7 +59,7 @@ chat_shape:ChatChannelShape_title a sh:PropertyShape ; sh:description "The title of the chat channel." ; sh:codeIdentifier "title" . -chat_shape:ChatChannelShape_createdDate a sh:PropertyShape ; +chat_shape:chatchannelshape_createddate a sh:PropertyShape ; sh:path dc:created ; sh:datatype xsd:dateTime ; sh:minCount 1 ; @@ -68,7 +68,7 @@ chat_shape:ChatChannelShape_createdDate a sh:PropertyShape ; sh:description "The creation date of the chat channel." ; sh:codeIdentifier "createdDate" . -chat_shape:ChatChannelShape_sharedPreferences a sh:PropertyShape ; +chat_shape:chatchannelshape_sharedpreferences a sh:PropertyShape ; sh:path ui:sharedPreferences ; sh:node chat_shape:ChatSharedPreferencesShape ; sh:minCount 0 ; @@ -76,7 +76,7 @@ chat_shape:ChatChannelShape_sharedPreferences a sh:PropertyShape ; sh:description "References user interface preferences shared in the chat." ; sh:codeIdentifier "sharedPreferences" . -chat_shape:ChatChannelShape_participation a sh:PropertyShape ; +chat_shape:chatchannelshape_participation a sh:PropertyShape ; sh:path flow:participation ; sh:node chat_shape:ChatParticipationShape ; sh:name "Participation" ; @@ -94,13 +94,13 @@ chat_shape:ChatMessageShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatMessage" ; - sh:property chat_shape:ChatMessageShape_createdDate, - chat_shape:ChatMessageShape_author, - chat_shape:ChatMessageShape_content + sh:property chat_shape:chatmessageshape_createddate, + chat_shape:chatmessageshape_author, + chat_shape:chatmessageshape_content . - # chat_shape:ChatMessageShape_relatedChatChannel unsupported at this time + # chat_shape:chatmessageshape_relatedChatChannel unsupported at this time -chat_shape:ChatMessageShape_createdDate a sh:PropertyShape ; +chat_shape:chatmessageshape_createddate a sh:PropertyShape ; sh:path terms:created ; sh:minCount 1 ; sh:maxCount 1 ; @@ -109,7 +109,7 @@ chat_shape:ChatMessageShape_createdDate a sh:PropertyShape ; sh:description "The date and time when the message was created." ; sh:codeIdentifier "createdDate" . -chat_shape:ChatMessageShape_author a sh:PropertyShape ; +chat_shape:chatmessageshape_author a sh:PropertyShape ; sh:path foaf:maker ; sh:minCount 1 ; sh:maxCount 1 ; @@ -117,7 +117,7 @@ chat_shape:ChatMessageShape_author a sh:PropertyShape ; sh:description "The agent or person who authored the message." ; sh:codeIdentifier "author" . -chat_shape:ChatMessageShape_content a sh:PropertyShape ; +chat_shape:chatmessageshape_content a sh:PropertyShape ; sh:path sioc:content ; sh:datatype xsd:string ; sh:minCount 1 ; @@ -126,7 +126,7 @@ chat_shape:ChatMessageShape_content a sh:PropertyShape ; sh:description "The textual content of the message." ; sh:codeIdentifier "content" . -chat_shape:ChatMessageShape_relatedChatChannel a sh:PropertyShape ; +chat_shape:chatmessageshape_relatedchatchannel a sh:PropertyShape ; sh:path [ sh:inversePath flow:message ] ; sh:minCount 1 ; sh:name "Related Chat" ; @@ -144,15 +144,15 @@ chat_shape:ChatParticipationShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "Participation" ; - sh:property chat_shape:ChatParticipationShape_startDate, - chat_shape:ChatParticipationShape_participant, - chat_shape:ChatParticipationShape_colorizeByAuthor, - chat_shape:ChatParticipationShape_expandImagesInline, - chat_shape:ChatParticipationShape_inlineImageHeight, - chat_shape:ChatParticipationShape_newestFirst, - chat_shape:ChatParticipationShape_backgroundColor . - -chat_shape:ChatParticipationShape_startDate a sh:PropertyShape ; + sh:property chat_shape:chatparticipationshape_startdate, + chat_shape:chatparticipationshape_participant, + chat_shape:chatparticipationshape_colorizebyauthor, + chat_shape:chatparticipationshape_expandimagesinline, + chat_shape:chatparticipationshape_inlineimageheight, + chat_shape:chatparticipationshape_newestfirst, + chat_shape:chatparticipationshape_backgroundcolor . + +chat_shape:chatparticipationshape_startdate a sh:PropertyShape ; sh:path ical:dtstart ; sh:datatype xsd:dateTime ; sh:minCount 1 ; @@ -161,7 +161,7 @@ chat_shape:ChatParticipationShape_startDate a sh:PropertyShape ; sh:description "The date and time when the participation started." ; sh:codeIdentifier "startDate" . -chat_shape:ChatParticipationShape_participant a sh:PropertyShape ; +chat_shape:chatparticipationshape_participant a sh:PropertyShape ; sh:path flow:participant ; sh:minCount 1 ; sh:maxCount 1 ; @@ -169,7 +169,7 @@ chat_shape:ChatParticipationShape_participant a sh:PropertyShape ; sh:description "The agent or person participating in the chat." ; sh:codeIdentifier "participant" . -chat_shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; +chat_shape:chatparticipationshape_colorizebyauthor a sh:PropertyShape ; sh:path solid:colorizeByAuthor ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -177,7 +177,7 @@ chat_shape:ChatParticipationShape_colorizeByAuthor a sh:PropertyShape ; sh:description "Indicates if messages from this participant should be colorized by author." ; sh:codeIdentifier "colorizeByAuthor" . -chat_shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; +chat_shape:chatparticipationshape_expandimagesinline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -185,7 +185,7 @@ chat_shape:ChatParticipationShape_expandImagesInline a sh:PropertyShape ; sh:description "Indicates if images should be displayed inline for this participant." ; sh:codeIdentifier "expandImagesInline" . -chat_shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; +chat_shape:chatparticipationshape_inlineimageheight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; @@ -193,7 +193,7 @@ chat_shape:ChatParticipationShape_inlineImageHeight a sh:PropertyShape ; sh:comment "Preferred height of inline images in em units for this participant." ; sh:codeIdentifier "inlineImageHeight" . -chat_shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; +chat_shape:chatparticipationshape_newestfirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -201,7 +201,7 @@ chat_shape:ChatParticipationShape_newestFirst a sh:PropertyShape ; sh:description "If true, messages are displayed newest first for this participant." ; sh:codeIdentifier "newestFirst" . -chat_shape:ChatParticipationShape_backgroundColor a sh:PropertyShape ; +chat_shape:chatparticipationshape_backgroundcolor a sh:PropertyShape ; sh:path ui:backgroundColor ; sh:datatype xsd:string ; sh:maxCount 1 ; @@ -221,11 +221,11 @@ chat_shape:ChatSharedPreferencesShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatSharedPreferences" ; - sh:property chat_shape:ChatSharedPreferencesShape_expandImagesInline, - chat_shape:ChatSharedPreferencesShape_inlineImageHeight, - chat_shape:ChatSharedPreferencesShape_newestFirst . + sh:property chat_shape:chatsharedpreferencesshape_expandimagesinline, + chat_shape:chatsharedpreferencesshape_inlineimageheight, + chat_shape:chatsharedpreferencesshape_newestfirst . -chat_shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; +chat_shape:chatsharedpreferencesshape_expandimagesinline a sh:PropertyShape ; sh:path solid:expandImagesInline ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -233,7 +233,7 @@ chat_shape:ChatSharedPreferencesShape_expandImagesInline a sh:PropertyShape ; sh:description "Indicates whether images should be expanded inline in the chat UI." ; sh:codeIdentifier "expandImagesInline" . -chat_shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; +chat_shape:chatsharedpreferencesshape_inlineimageheight a sh:PropertyShape ; sh:path solid:inlineImageHeightEms ; sh:datatype xsd:integer ; sh:maxCount 1 ; @@ -241,7 +241,7 @@ chat_shape:ChatSharedPreferencesShape_inlineImageHeight a sh:PropertyShape ; sh:description "Preferred height for inline images in em units." ; sh:codeIdentifier "inlineImageHeight" . -chat_shape:ChatSharedPreferencesShape_newestFirst a sh:PropertyShape ; +chat_shape:chatsharedpreferencesshape_newestfirst a sh:PropertyShape ; sh:path solid:newestFirst ; sh:datatype xsd:boolean ; sh:maxCount 1 ; @@ -260,24 +260,24 @@ chat_shape:ChatActionShape a sh:NodeShape ; dc:source ; prov:wasDerivedFrom ; sh:codeIdentifier "ChatAction" ; - sh:property chat_shape:ChatActionShape_type, - chat_shape:ChatActionShape_agent, - chat_shape:ChatActionShape_target + sh:property chat_shape:chatactionshape_type, + chat_shape:chatactionshape_agent, + chat_shape:chatactionshape_target . -chat_shape:ChatActionShape_type a sh:PropertyShape ; +chat_shape:chatactionshape_type a sh:PropertyShape ; sh:path rdf:type ; sh:minCount 1 ; sh:name "Type" ; sh:codeIdentifier "type" . -chat_shape:ChatActionShape_agent a sh:PropertyShape ; +chat_shape:chatactionshape_agent a sh:PropertyShape ; sh:path schema:agent ; sh:maxCount 1 ; sh:name "Agent" ; sh:codeIdentifier "agent" . -chat_shape:ChatActionShape_target a sh:PropertyShape ; +chat_shape:chatactionshape_target a sh:PropertyShape ; sh:path schema:target ; sh:minCount 1 ; sh:maxCount 1 ; From 810e83be422da968956d4987547a9ce9a9ab9a6c Mon Sep 17 00:00:00 2001 From: Jesse Wright <63333554+jeswr@users.noreply.github.com> Date: Thu, 2 Apr 2026 00:45:30 +0100 Subject: [PATCH 06/10] Change license to dual MIT and Apache 2.0 Updated license information to reflect dual licensing under MIT and Apache 2.0. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b223f0..acd514f 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,10 @@ Shapes function act as contracts between applications and user data. Once publis ## License -All content in this repository, including contributions, is subject to the repository's MIT license. +This work is dual-licensed under MIT and Apache 2.0. +You can choose between one of them if you use this work. + +`SPDX-License-Identifier: MIT OR Apache-2.0` ## Governance From ed336d29cf2bfe1777d40ecaab216f48dd286291 Mon Sep 17 00:00:00 2001 From: Jesse Wright <63333554+jeswr@users.noreply.github.com> Date: Thu, 2 Apr 2026 00:47:04 +0100 Subject: [PATCH 07/10] Add MIT License file --- LICENSE.MIT.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.MIT.md diff --git a/LICENSE.MIT.md b/LICENSE.MIT.md new file mode 100644 index 0000000..a256315 --- /dev/null +++ b/LICENSE.MIT.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 The Open Data Institute (ODI) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 3144e4d0781a7557ebae4144acb3f2f56f0b492d Mon Sep 17 00:00:00 2001 From: Jesse Wright <63333554+jeswr@users.noreply.github.com> Date: Thu, 2 Apr 2026 00:48:23 +0100 Subject: [PATCH 08/10] Add Apache License 2.0 Added the Apache License 2.0 text to the repository. --- LICENSE.Apache-2.0.md | 201 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE.Apache-2.0.md diff --git a/LICENSE.Apache-2.0.md b/LICENSE.Apache-2.0.md new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE.Apache-2.0.md @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://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. From 3c58b928b3111190603eb374b82c82d9f3aa63e7 Mon Sep 17 00:00:00 2001 From: bourgeoa Date: Tue, 7 Apr 2026 20:03:10 +0200 Subject: [PATCH 09/10] add longchat related shapes to shapes/chat.ttl --- shapes/chat.ttl | 231 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 229 insertions(+), 2 deletions(-) diff --git a/shapes/chat.ttl b/shapes/chat.ttl index 7ff8265..707655c 100644 --- a/shapes/chat.ttl +++ b/shapes/chat.ttl @@ -9,9 +9,11 @@ @prefix sioc: . @prefix solid: . @prefix terms: . +@prefix sec: . @prefix ui: . @prefix xsd: . @prefix schema: . +@prefix schema_http: . @prefix dct: . @prefix vs: . @prefix prov: . @@ -255,6 +257,9 @@ chat_shape:ChatActionShape a sh:NodeShape ; sh:name "Chat Action Shape" ; sh:description "NodeShape defining constraints for actions representing interactions or sentiments in the chat system." ; sh:targetClass schema:Action ; + sh:targetClass schema_http:Action ; + sh:targetSubjectsOf schema:target ; + sh:targetSubjectsOf schema_http:target ; dct:created "2026-03-12"^^xsd:date ; vs:term_status "testing" ; dc:source ; @@ -272,14 +277,236 @@ chat_shape:chatactionshape_type a sh:PropertyShape ; sh:codeIdentifier "type" . chat_shape:chatactionshape_agent a sh:PropertyShape ; - sh:path schema:agent ; + sh:path [ sh:alternativePath ( schema:agent schema_http:agent ) ] ; sh:maxCount 1 ; sh:name "Agent" ; sh:codeIdentifier "agent" . chat_shape:chatactionshape_target a sh:PropertyShape ; - sh:path schema:target ; + sh:path [ sh:alternativePath ( schema:target schema_http:target ) ] ; sh:minCount 1 ; sh:maxCount 1 ; sh:name "Target" ; + sh:codeIdentifier "target" . + +##################### Long Chat Semantic Variants + +# These additive shapes model the current SolidOS long chat implementation +# without changing the existing published Chat* shapes above. + +##################### Long Chat Channel Shape + +chat_shape:LongChatChannelShape a sh:NodeShape ; + sh:name "Long Chat Channel Shape" ; + sh:description "SHACL NodeShape for signed, append-only, threaded Solid Long Chat channels." ; + sh:targetClass mee:LongChat ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom , + ; + sh:codeIdentifier "LongChatChannel" ; + sh:property chat_shape:chatchannelshape_type, + chat_shape:chatchannelshape_author, + chat_shape:chatchannelshape_title, + chat_shape:chatchannelshape_createddate, + chat_shape:chatchannelshape_sharedpreferences, + chat_shape:chatchannelshape_participation, + chat_shape:longchatchannelshape_message . + +chat_shape:longchatchannelshape_message a sh:PropertyShape ; + sh:path flow:message ; + sh:node chat_shape:LongChatMessageShape ; + sh:name "Top-Level Long Chat Message" ; + sh:description "Top-level messages linked directly from the long chat channel." ; + sh:codeIdentifier "topLevelMessage" . + +##################### Long Chat Message Shape + +chat_shape:LongChatMessageShape a sh:NodeShape ; + sh:name "Long Chat Message Shape" ; + sh:description "SHACL NodeShape for signed long chat messages, including replies, replacements, and deletions. In the current implementation, proofValue signs the core message fields id, created, content, and maker, but does not directly sign replacement, thread, or deletion metadata. Both http://schema.org/ and https://schema.org/ deletion predicates are accepted for compatibility." ; + sh:targetObjectsOf flow:message ; + sh:targetObjectsOf sioc:has_member ; + sh:targetObjectsOf dct:isReplacedBy ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom , + ; + sh:codeIdentifier "LongChatMessage" ; + sh:property chat_shape:chatmessageshape_createddate, + chat_shape:chatmessageshape_author, + chat_shape:chatmessageshape_content, + chat_shape:longchatmessageshape_proofvalue, + chat_shape:longchatmessageshape_replythread, + chat_shape:longchatmessageshape_replacedby, + chat_shape:longchatmessageshape_datedeleted ; + sh:or ( + [ sh:property [ + sh:path [ sh:inversePath flow:message ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + [ sh:property [ + sh:path [ sh:inversePath sioc:has_member ] ; + sh:minCount 1 ; + ] ] + [ sh:property [ + sh:path [ sh:inversePath dct:isReplacedBy ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + ) . + +chat_shape:longchatmessageshape_proofvalue a sh:PropertyShape ; + sh:path sec:proofValue ; + sh:datatype xsd:string ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Proof Value" ; + sh:description "Cryptographic signature or proof for the message." ; + sh:codeIdentifier "proofValue" . + +chat_shape:longchatmessageshape_replythread a sh:PropertyShape ; + sh:path sioc:has_reply ; + sh:maxCount 1 ; + sh:node chat_shape:LongChatThreadShape ; + sh:name "Reply Thread" ; + sh:description "Links a thread root message to its thread resource." ; + sh:codeIdentifier "replyThread" . + +chat_shape:longchatmessageshape_replacedby a sh:PropertyShape ; + sh:path dct:isReplacedBy ; + sh:maxCount 1 ; + sh:node chat_shape:LongChatMessageShape ; + sh:name "Is Replaced By" ; + sh:description "Append-only link from an earlier message version to its replacement." ; + sh:codeIdentifier "isReplacedBy" . + +chat_shape:longchatmessageshape_datedeleted a sh:PropertyShape ; + sh:path [ sh:alternativePath ( schema:dateDeleted schema_http:dateDeleted ) ] ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "Date Deleted" ; + sh:description "Deletion marker carried by a replacement message representing a deleted message." ; + sh:codeIdentifier "dateDeleted" . + +##################### Long Chat Replacement Shape + +chat_shape:AppendOnlyMessageVersionShape a sh:NodeShape ; + sh:name "Append-Only Message Version Shape" ; + sh:description "NodeShape for long chat messages that replace an earlier message version." ; + sh:targetSubjectsOf dct:isReplacedBy ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AppendOnlyMessageVersion" ; + sh:property chat_shape:longchatmessageshape_replacedby . + +##################### Deleted Long Chat Message Shape + +chat_shape:DeletedLongChatMessageShape a sh:NodeShape ; + sh:name "Deleted Long Chat Message Shape" ; + sh:description "NodeShape for replacement messages that mark a long chat message as deleted. Both http://schema.org/ and https://schema.org/ deletion predicates are accepted for compatibility." ; + sh:targetSubjectsOf schema:dateDeleted ; + sh:targetSubjectsOf schema_http:dateDeleted ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "DeletedLongChatMessage" ; + sh:property chat_shape:longchatmessageshape_datedeleted, + chat_shape:deletedlongchatmessageshape_previousversion . + +chat_shape:deletedlongchatmessageshape_previousversion a sh:PropertyShape ; + sh:path [ sh:inversePath dct:isReplacedBy ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Previous Version" ; + sh:description "The earlier message version that this deleted replacement supersedes." ; + sh:codeIdentifier "previousVersion" . + +##################### Long Chat Thread Shape + +chat_shape:LongChatThreadShape a sh:NodeShape ; + sh:name "Long Chat Thread Shape" ; + sh:description "NodeShape for thread resources grouping long chat replies." ; + sh:targetObjectsOf sioc:has_reply ; + sh:targetSubjectsOf sioc:has_member ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "LongChatThread" ; + sh:property chat_shape:longchatthreadshape_type, + chat_shape:longchatthreadshape_rootmessage, + chat_shape:longchatthreadshape_member . + +chat_shape:longchatthreadshape_type a sh:PropertyShape ; + sh:path rdf:type ; + sh:value sioc:Thread ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Type" ; + sh:description "Specifies that the node must be of type sioc:Thread." ; + sh:codeIdentifier "type" . + +chat_shape:longchatthreadshape_rootmessage a sh:PropertyShape ; + sh:path [ sh:inversePath sioc:has_reply ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:node chat_shape:LongChatMessageShape ; + sh:name "Root Message" ; + sh:description "The thread root message that points to this thread resource." ; + sh:codeIdentifier "rootMessage" . + +chat_shape:longchatthreadshape_member a sh:PropertyShape ; + sh:path sioc:has_member ; + sh:node chat_shape:LongChatMessageShape ; + sh:name "Thread Member" ; + sh:description "A reply message belonging to the thread." ; + sh:codeIdentifier "member" . + +##################### Long Chat Action Shape + +chat_shape:LongChatActionShape a sh:NodeShape ; + sh:name "Long Chat Action Shape" ; + sh:description "NodeShape defining constraints for long chat actions such as reactions or other sentiments. Both http://schema.org/ and https://schema.org/ action terms are accepted for compatibility." ; + sh:targetClass schema:Action ; + sh:targetClass schema_http:Action ; + sh:targetSubjectsOf schema:target ; + sh:targetSubjectsOf schema_http:target ; + dct:created "2026-04-07"^^xsd:date ; + vs:term_status "testing" ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "LongChatAction" ; + sh:property chat_shape:longchatactionshape_type, + chat_shape:longchatactionshape_agent, + chat_shape:longchatactionshape_target . + +chat_shape:longchatactionshape_type a sh:PropertyShape ; + sh:path rdf:type ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Type" ; + sh:description "The action class for the long chat action resource." ; + sh:codeIdentifier "type" . + +chat_shape:longchatactionshape_agent a sh:PropertyShape ; + sh:path [ sh:alternativePath ( schema:agent schema_http:agent ) ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Agent" ; + sh:description "The agent who performed the long chat action." ; + sh:codeIdentifier "agent" . + +chat_shape:longchatactionshape_target a sh:PropertyShape ; + sh:path [ sh:alternativePath ( schema:target schema_http:target ) ] ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:name "Target" ; + sh:description "The long chat resource targeted by the action." ; sh:codeIdentifier "target" . \ No newline at end of file From 6d09696a2e5e9384c9e5f8819c503690c5e2cd00 Mon Sep 17 00:00:00 2001 From: bourgeoa Date: Tue, 7 Apr 2026 20:26:04 +0200 Subject: [PATCH 10/10] converter compatibility --- shapes/chat.ttl | 153 +++++++++++++++++++++++++++++++----------------- 1 file changed, 99 insertions(+), 54 deletions(-) diff --git a/shapes/chat.ttl b/shapes/chat.ttl index 707655c..2f48de2 100644 --- a/shapes/chat.ttl +++ b/shapes/chat.ttl @@ -128,13 +128,6 @@ chat_shape:chatmessageshape_content a sh:PropertyShape ; sh:description "The textual content of the message." ; sh:codeIdentifier "content" . -chat_shape:chatmessageshape_relatedchatchannel a sh:PropertyShape ; - sh:path [ sh:inversePath flow:message ] ; - sh:minCount 1 ; - sh:name "Related Chat" ; - sh:description "The chat channel or conversation to which this message belongs." ; - sh:codeIdentifier "relatedChatChannel" . - ##################### Chat Participation Shape chat_shape:ChatParticipationShape a sh:NodeShape ; @@ -267,7 +260,31 @@ chat_shape:ChatActionShape a sh:NodeShape ; sh:codeIdentifier "ChatAction" ; sh:property chat_shape:chatactionshape_type, chat_shape:chatactionshape_agent, - chat_shape:chatactionshape_target + chat_shape:chatactionshape_agent_http, + chat_shape:chatactionshape_target, + chat_shape:chatactionshape_target_http ; + sh:or ( + [ sh:property [ + sh:path schema:agent ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ; + sh:property [ + sh:path schema:target ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + [ sh:property [ + sh:path schema_http:agent ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ; + sh:property [ + sh:path schema_http:target ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + ) . chat_shape:chatactionshape_type a sh:PropertyShape ; @@ -277,18 +294,31 @@ chat_shape:chatactionshape_type a sh:PropertyShape ; sh:codeIdentifier "type" . chat_shape:chatactionshape_agent a sh:PropertyShape ; - sh:path [ sh:alternativePath ( schema:agent schema_http:agent ) ] ; + sh:path schema:agent ; sh:maxCount 1 ; sh:name "Agent" ; sh:codeIdentifier "agent" . +chat_shape:chatactionshape_agent_http a sh:PropertyShape ; + sh:path schema_http:agent ; + sh:maxCount 1 ; + sh:name "Agent (Legacy)" ; + sh:description "Legacy http://schema.org/ agent predicate accepted for compatibility." ; + sh:codeIdentifier "agentLegacy" . + chat_shape:chatactionshape_target a sh:PropertyShape ; - sh:path [ sh:alternativePath ( schema:target schema_http:target ) ] ; - sh:minCount 1 ; + sh:path schema:target ; sh:maxCount 1 ; sh:name "Target" ; sh:codeIdentifier "target" . +chat_shape:chatactionshape_target_http a sh:PropertyShape ; + sh:path schema_http:target ; + sh:maxCount 1 ; + sh:name "Target (Legacy)" ; + sh:description "Legacy http://schema.org/ target predicate accepted for compatibility." ; + sh:codeIdentifier "targetLegacy" . + ##################### Long Chat Semantic Variants # These additive shapes model the current SolidOS long chat implementation @@ -341,23 +371,10 @@ chat_shape:LongChatMessageShape a sh:NodeShape ; chat_shape:longchatmessageshape_proofvalue, chat_shape:longchatmessageshape_replythread, chat_shape:longchatmessageshape_replacedby, - chat_shape:longchatmessageshape_datedeleted ; - sh:or ( - [ sh:property [ - sh:path [ sh:inversePath flow:message ] ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ] - [ sh:property [ - sh:path [ sh:inversePath sioc:has_member ] ; - sh:minCount 1 ; - ] ] - [ sh:property [ - sh:path [ sh:inversePath dct:isReplacedBy ] ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ] - ) . + chat_shape:longchatmessageshape_datedeleted, + chat_shape:longchatmessageshape_datedeleted_http . + # inverse-path containment constraints are intentionally omitted here because + # the current shacl-converter object generation only supports NamedNode sh:path values. chat_shape:longchatmessageshape_proofvalue a sh:PropertyShape ; sh:path sec:proofValue ; @@ -385,13 +402,21 @@ chat_shape:longchatmessageshape_replacedby a sh:PropertyShape ; sh:codeIdentifier "isReplacedBy" . chat_shape:longchatmessageshape_datedeleted a sh:PropertyShape ; - sh:path [ sh:alternativePath ( schema:dateDeleted schema_http:dateDeleted ) ] ; + sh:path schema:dateDeleted ; sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:name "Date Deleted" ; sh:description "Deletion marker carried by a replacement message representing a deleted message." ; sh:codeIdentifier "dateDeleted" . +chat_shape:longchatmessageshape_datedeleted_http a sh:PropertyShape ; + sh:path schema_http:dateDeleted ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "Date Deleted (Legacy)" ; + sh:description "Legacy http://schema.org/ deletion marker accepted for compatibility." ; + sh:codeIdentifier "dateDeletedLegacy" . + ##################### Long Chat Replacement Shape chat_shape:AppendOnlyMessageVersionShape a sh:NodeShape ; @@ -418,15 +443,9 @@ chat_shape:DeletedLongChatMessageShape a sh:NodeShape ; prov:wasDerivedFrom ; sh:codeIdentifier "DeletedLongChatMessage" ; sh:property chat_shape:longchatmessageshape_datedeleted, - chat_shape:deletedlongchatmessageshape_previousversion . - -chat_shape:deletedlongchatmessageshape_previousversion a sh:PropertyShape ; - sh:path [ sh:inversePath dct:isReplacedBy ] ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:name "Previous Version" ; - sh:description "The earlier message version that this deleted replacement supersedes." ; - sh:codeIdentifier "previousVersion" . + chat_shape:longchatmessageshape_datedeleted_http . + # previousVersion inverse path is intentionally omitted here because + # the current shacl-converter object generation only supports NamedNode sh:path values. ##################### Long Chat Thread Shape @@ -441,7 +460,6 @@ chat_shape:LongChatThreadShape a sh:NodeShape ; prov:wasDerivedFrom ; sh:codeIdentifier "LongChatThread" ; sh:property chat_shape:longchatthreadshape_type, - chat_shape:longchatthreadshape_rootmessage, chat_shape:longchatthreadshape_member . chat_shape:longchatthreadshape_type a sh:PropertyShape ; @@ -453,15 +471,6 @@ chat_shape:longchatthreadshape_type a sh:PropertyShape ; sh:description "Specifies that the node must be of type sioc:Thread." ; sh:codeIdentifier "type" . -chat_shape:longchatthreadshape_rootmessage a sh:PropertyShape ; - sh:path [ sh:inversePath sioc:has_reply ] ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node chat_shape:LongChatMessageShape ; - sh:name "Root Message" ; - sh:description "The thread root message that points to this thread resource." ; - sh:codeIdentifier "rootMessage" . - chat_shape:longchatthreadshape_member a sh:PropertyShape ; sh:path sioc:has_member ; sh:node chat_shape:LongChatMessageShape ; @@ -485,7 +494,31 @@ chat_shape:LongChatActionShape a sh:NodeShape ; sh:codeIdentifier "LongChatAction" ; sh:property chat_shape:longchatactionshape_type, chat_shape:longchatactionshape_agent, - chat_shape:longchatactionshape_target . + chat_shape:longchatactionshape_agent_http, + chat_shape:longchatactionshape_target, + chat_shape:longchatactionshape_target_http ; + sh:or ( + [ sh:property [ + sh:path schema:agent ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ; + sh:property [ + sh:path schema:target ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + [ sh:property [ + sh:path schema_http:agent ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ; + sh:property [ + sh:path schema_http:target ; + sh:minCount 1 ; + sh:maxCount 1 ; + ] ] + ) . chat_shape:longchatactionshape_type a sh:PropertyShape ; sh:path rdf:type ; @@ -496,17 +529,29 @@ chat_shape:longchatactionshape_type a sh:PropertyShape ; sh:codeIdentifier "type" . chat_shape:longchatactionshape_agent a sh:PropertyShape ; - sh:path [ sh:alternativePath ( schema:agent schema_http:agent ) ] ; - sh:minCount 1 ; + sh:path schema:agent ; sh:maxCount 1 ; sh:name "Agent" ; sh:description "The agent who performed the long chat action." ; sh:codeIdentifier "agent" . +chat_shape:longchatactionshape_agent_http a sh:PropertyShape ; + sh:path schema_http:agent ; + sh:maxCount 1 ; + sh:name "Agent (Legacy)" ; + sh:description "Legacy http://schema.org/ agent predicate accepted for compatibility." ; + sh:codeIdentifier "agentLegacy" . + chat_shape:longchatactionshape_target a sh:PropertyShape ; - sh:path [ sh:alternativePath ( schema:target schema_http:target ) ] ; - sh:minCount 1 ; + sh:path schema:target ; sh:maxCount 1 ; sh:name "Target" ; sh:description "The long chat resource targeted by the action." ; - sh:codeIdentifier "target" . \ No newline at end of file + sh:codeIdentifier "target" . + +chat_shape:longchatactionshape_target_http a sh:PropertyShape ; + sh:path schema_http:target ; + sh:maxCount 1 ; + sh:name "Target (Legacy)" ; + sh:description "Legacy http://schema.org/ target predicate accepted for compatibility." ; + sh:codeIdentifier "targetLegacy" . \ No newline at end of file