From 221f5231ca316ed08b79b1d515325f70a0cb6857 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 15:05:39 -0400 Subject: [PATCH 1/7] Add OCABundle render method - Add new OCABundle render method to specification - Define OCABundle type with properties: id, type, name, description, digestMultibase, version - Explain use of JSON paths (RFC6901) in capture base for mapping to credentialSubject - Include comprehensive OCA v2.0.0-rc1 bundle example with: - Capture base with JSON path attributes - Meta overlay (name, description) - Label overlays (English and French) - Information overlay - Sensitive overlay - Update renderMethod property description to include OCABundle type --- index.html | 242 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 239 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index e384a97..ffde269 100644 --- a/index.html +++ b/index.html @@ -278,9 +278,9 @@

The `renderMethod` Property

more rendering methods that can be used by software to express the [=verifiable credential=] using a visual, auditory, or haptic mechanism. Each `renderMethod` value MUST specify its `type`, for example, -`TemplateRenderMethod`. The precise contents of each rendering -hint is determined by the specific `renderMethod` `type` -definition. +`TemplateRenderMethod`, `OpenAttestationEmbeddedRenderer`, or `OCABundle`. +The precise contents of each rendering hint is determined by the specific +`renderMethod` `type` definition. @@ -948,6 +948,242 @@
Frame-to-Host Actions
+ +
+

OCABundle

+ +

+ OCABundle is used by an issuer to specify rendering instructions + based on an Overlays Capture Architecture (OCA) Bundle. OCA provides a + standardized way to define schemas with semantic overlays that enable + multi-language support, data entry formats, sensitive data flagging, and + rich metadata for rendering verifiable credentials in a consistent and + interoperable manner. +

+ +

+ An OCA Bundle consists of a capture base that defines the core structure + and data types of the credential attributes, along with various overlays + that provide additional context such as labels, character encoding, format + specifications, entry codes, and information overlays. This layered approach + enables flexible and culturally-aware rendering of credentials while maintaining + data integrity. +

+ +

+ When OCA is used as a render method for [=verifiable credentials=], the capture + base in the OCA Bundle uses JSON paths (as defined in [[[RFC6901]]]) as attribute + names to reference properties within the [=verifiable credential=]'s + `credentialSubject`, and defines the data type for each attribute. For example, + an attribute named `/degree/name` would reference the `name` property within + the nested `degree` object of the credential subject. The overlays then provide + presentation metadata such as human-readable labels in multiple languages, + formatting rules for dates and numbers, constraints for data entry, and + descriptive information about each attribute. This separation allows the same + credential data to be rendered differently based on context, locale, or user + preferences while maintaining a consistent semantic foundation. +

+ +

+ When an [=issuer=] desires to specify OCA-based rendering instructions + for a [=verifiable credential=], they MAY add a `renderMethod` property + that uses the data model described below. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +A REQUIRED [=string=] that follows the [[[URL]]] specification and, when fetched, +dereferences to an OCA Bundle in JSON format. The OCA Bundle contains the schema +base and associated overlays needed for rendering the credential. +
type +A REQUIRED [=string=] that MUST be the value `OCABundle`. +
name +An OPTIONAL human-readable [=string=] that can be displayed to provide a hint to +the type of rendering that will be performed. This property might be used in a +graphical interface that enables an individual to select between multiple +presentation modes. +
description +An OPTIONAL human-readable [=string=] that provides a more detailed description +of the OCA-based rendering method and when it might be useful. +
digestMultibase +An OPTIONAL multibase-encoded Multihash of the OCA Bundle. The multibase +value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with +256 bits of output (0x12 in the multicodec table). This property can be used by +verifiers to ensure the integrity of the fetched OCA Bundle. +
version +An OPTIONAL [=string=] that specifies the OCA specification version that the +referenced OCA Bundle conforms to (e.g., "v2.0.0-rc1", "v2.0.0", "v1.0"). +This property helps renderers determine compatibility and select appropriate +processing logic for the OCA Bundle format. +
+ +

+ The data model shown above is expressed in a [=verifiable credential=] in + the example below. +

+ +
+{
+  "@context": [
+    "https://www.w3.org/ns/credentials/v2",
+    "https://example.org/oca/v1"
+  ],
+  "type": ["VerifiableCredential", "UniversityDegreeCredential"],
+  "issuer": {
+    "id": "https://example.edu/issuers/565049",
+    "name": "Example University"
+  },
+  "validFrom": "2024-01-01T00:00:00Z",
+  "credentialSubject": {
+    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
+    "degree": {
+      "type": "BachelorDegree",
+      "name": "Bachelor of Science and Arts",
+      "degreeType": "Undergraduate",
+      "major": "Computer Science"
+    }
+  },
+  "renderMethod": [{
+    "id": "https://example.edu/oca-bundles/degree-2024.json",
+    "type": "OCABundle",
+    "name": "University Degree Display",
+    "description": "Renders the degree credential with multi-language support",
+    "digestMultibase": "uEiC96D8xPcVfm...WNcMF4Kc-Yw",
+    "version": "v2.0.0-rc1"
+  }]
+}
+      
+ +

+ In this example, the OCA Bundle located at + `https://example.edu/oca-bundles/degree-2024.json` contains the schema + base and overlays necessary to render the credential. The bundle might + include label overlays for multiple languages, format overlays for date + and number formatting, and information overlays with descriptions of each + attribute. +

+ +

+ An example OCA Bundle structure for this credential might look like: +

+ +
+{
+  "bundle": {
+    "digest": "EBfdlu8R27Fbx-ehrqwIxQ-na4B7A4LqidzXqj8gkzHp",
+    "capture_base": {
+      "digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+      "type": "capture_base/2.0.0",
+      "attributes": {
+        "/degree/type": "Text",
+        "/degree/name": "Text",
+        "/degree/degreeType": "Text",
+        "/degree/major": "Text"
+      }
+    },
+    "overlays": {
+      "meta": {
+        "digest": "EMzAk6N2iI1K5EpS9YqU7WxTc8BvPq1RgFn0D4XyJwLz",
+        "type": "meta/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "name": "University Degree Credential",
+        "description": "Academic degree credential issued by universities"
+      },
+      "label": [
+        {
+          "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw",
+          "type": "label/2.0.0",
+          "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+          "language": "en",
+          "attribute_labels": {
+            "/degree/type": "Degree Type",
+            "/degree/name": "Degree Name",
+            "/degree/degreeType": "Degree Classification",
+            "/degree/major": "Major"
+          }
+        },
+        {
+          "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx",
+          "type": "label/2.0.0",
+          "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+          "language": "fr",
+          "attribute_labels": {
+            "/degree/type": "Type de diplôme",
+            "/degree/name": "Nom du diplôme",
+            "/degree/degreeType": "Classification du diplôme",
+            "/degree/major": "Spécialisation"
+          }
+        }
+      ],
+      "information": {
+        "digest": "ELrYj5M1hH0J4DoR8XpT6VzSb7AuOp0QeFm9C3WxIvKy",
+        "type": "information/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "language": "en",
+        "attribute_information": {
+          "/degree/type": "The type of academic degree awarded",
+          "/degree/name": "The full official name of the degree",
+          "/degree/degreeType": "Classification level (e.g., Undergraduate, Graduate)",
+          "/degree/major": "The primary field of study"
+        }
+      },
+      "sensitive": {
+        "digest": "ENaZl7O3jJ2L6FqT0ZrV8XyUd9CwRs2ShGo1E5YzKxMa",
+        "type": "sensitive/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "attributes": [
+          "/degree/name"
+        ]
+      }
+    }
+  }
+}
+      
+ +

+ Implementers can use the OCA Bundle to generate appropriate user interfaces, + select language-specific labels, apply format specifications, and ensure + consistent rendering across different applications and platforms. +

+
From dca971ad7968f0b2e022af10ff2ead0b5ba259d4 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 15:12:15 -0400 Subject: [PATCH 2/7] add Patrick St. Louis w3cid Signed-off-by: Patrick St-Louis --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index ffde269..d322fa2 100644 --- a/index.html +++ b/index.html @@ -57,7 +57,8 @@ name: "Patrick St. Louis", url: "https://www.linkedin.com/in/patrick-stlouis/", company: "Open Security and Identity", - companyURL: "https://opsecid.ca/" + companyURL: "https://opsecid.ca/", + w3cid: 162334 }], authors: [{ From 0c3226d9e9b5933ae86b7de1d3b7e724559899f6 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 15:16:57 -0400 Subject: [PATCH 3/7] update example with example context url Signed-off-by: Patrick St-Louis --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index d322fa2..e886885 100644 --- a/index.html +++ b/index.html @@ -1062,7 +1062,7 @@

OCABundle

{ "@context": [ "https://www.w3.org/ns/credentials/v2", - "https://example.org/oca/v1" + "https://www.w3.org/ns/credentials/examples/v2" ], "type": ["VerifiableCredential", "UniversityDegreeCredential"], "issuer": { From dc1a7319f1bd232045b28861154ec7e5d93b5763 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 16:03:48 -0400 Subject: [PATCH 4/7] fix ocabundle example Signed-off-by: Patrick St-Louis --- index.html | 70 +++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/index.html b/index.html index e886885..2778aec 100644 --- a/index.html +++ b/index.html @@ -1109,54 +1109,54 @@

OCABundle

> { "bundle": { + "v": "OCAS11JSON000646_", "digest": "EBfdlu8R27Fbx-ehrqwIxQ-na4B7A4LqidzXqj8gkzHp", "capture_base": { "digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", - "type": "capture_base/2.0.0", + "type": "spec/capture_base/2.0.0", "attributes": { "/degree/type": "Text", "/degree/name": "Text", "/degree/degreeType": "Text", "/degree/major": "Text" - } + }, + "classification": "" }, - "overlays": { - "meta": { + "overlays": [ + { "digest": "EMzAk6N2iI1K5EpS9YqU7WxTc8BvPq1RgFn0D4XyJwLz", - "type": "meta/2.0.0", + "type": "spec/overlays/meta/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "name": "University Degree Credential", "description": "Academic degree credential issued by universities" }, - "label": [ - { - "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw", - "type": "label/2.0.0", - "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", - "language": "en", - "attribute_labels": { - "/degree/type": "Degree Type", - "/degree/name": "Degree Name", - "/degree/degreeType": "Degree Classification", - "/degree/major": "Major" - } - }, - { - "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx", - "type": "label/2.0.0", - "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", - "language": "fr", - "attribute_labels": { - "/degree/type": "Type de diplôme", - "/degree/name": "Nom du diplôme", - "/degree/degreeType": "Classification du diplôme", - "/degree/major": "Spécialisation" - } + { + "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw", + "type": "spec/overlays/label/2.0.0", + "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", + "language": "en", + "attribute_labels": { + "/degree/type": "Degree Type", + "/degree/name": "Degree Name", + "/degree/degreeType": "Degree Classification", + "/degree/major": "Major" } - ], - "information": { + }, + { + "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx", + "type": "spec/overlays/label/2.0.0", + "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", + "language": "fr", + "attribute_labels": { + "/degree/type": "Type de diplôme", + "/degree/name": "Nom du diplôme", + "/degree/degreeType": "Classification du diplôme", + "/degree/major": "Spécialisation" + } + }, + { "digest": "ELrYj5M1hH0J4DoR8XpT6VzSb7AuOp0QeFm9C3WxIvKy", - "type": "information/2.0.0", + "type": "spec/overlays/information/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "en", "attribute_information": { @@ -1166,15 +1166,15 @@

OCABundle

"/degree/major": "The primary field of study" } }, - "sensitive": { + { "digest": "ENaZl7O3jJ2L6FqT0ZrV8XyUd9CwRs2ShGo1E5YzKxMa", - "type": "sensitive/2.0.0", + "type": "spec/overlays/sensitive/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "attributes": [ "/degree/name" ] } - } + ] } } From 487d100a34096d2ebaaaf4ffdb0c6ce9cd5b8f5a Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 16:07:49 -0400 Subject: [PATCH 5/7] add OCA spec url Signed-off-by: Patrick St-Louis --- index.html | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 2778aec..41d25fa 100644 --- a/index.html +++ b/index.html @@ -101,9 +101,12 @@ alternateFormats: [ {uri: "diff-20111214.html", label: "diff to previous version"} ], */ localBiblio: { - ENTRY: { - title: "Example Title", - href: "https://website.example/document", + OCA: { + title: "Overlays Capture Architecture Specification", + href: "https://oca.colossi.network/specification/", + authors: ["Human Colossus Foundation"], + status: "Living Specification", + date: "2024" }, }, lint: {"no-unused-dfns": false}, @@ -955,9 +958,9 @@

OCABundle

OCABundle is used by an issuer to specify rendering instructions - based on an Overlays Capture Architecture (OCA) Bundle. OCA provides a - standardized way to define schemas with semantic overlays that enable - multi-language support, data entry formats, sensitive data flagging, and + based on an Overlays Capture Architecture (OCA) Bundle as defined in [[[OCA]]]. + OCA provides a standardized way to define schemas with semantic overlays that + enable multi-language support, data entry formats, sensitive data flagging, and rich metadata for rendering verifiable credentials in a consistent and interoperable manner.

From da8186a8d27037bcb0ebfaf69788a2ffaabf3c99 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 18:37:14 -0400 Subject: [PATCH 6/7] fix: update OCA JSON paths to reference from document root Update all JSON path examples in the OCA Bundle section to reference from the root of the VC document rather than from within credentialSubject. Changes: - Update capture_base attributes to use /credentialSubject/degree/* paths - Update all overlay examples (label, information, sensitive) to use full paths - Update descriptive text to clarify paths start from document root - Update example from /degree/name to /credentialSubject/degree/name This ensures JSON paths follow RFC6901 correctly by starting from the document root, making it clear how to reference properties within a verifiable credential's credentialSubject. --- index.html | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/index.html b/index.html index 41d25fa..98c49c2 100644 --- a/index.html +++ b/index.html @@ -977,15 +977,15 @@

OCABundle

When OCA is used as a render method for [=verifiable credentials=], the capture base in the OCA Bundle uses JSON paths (as defined in [[[RFC6901]]]) as attribute - names to reference properties within the [=verifiable credential=]'s - `credentialSubject`, and defines the data type for each attribute. For example, - an attribute named `/degree/name` would reference the `name` property within - the nested `degree` object of the credential subject. The overlays then provide - presentation metadata such as human-readable labels in multiple languages, - formatting rules for dates and numbers, constraints for data entry, and - descriptive information about each attribute. This separation allows the same - credential data to be rendered differently based on context, locale, or user - preferences while maintaining a consistent semantic foundation. + names to reference properties from the root of the [=verifiable credential=] + document, and defines the data type for each attribute. For example, + an attribute named `/credentialSubject/degree/name` would reference the `name` + property within the nested `degree` object of the credential's `credentialSubject`. + The overlays then provide presentation metadata such as human-readable labels in + multiple languages, formatting rules for dates and numbers, constraints for data + entry, and descriptive information about each attribute. This separation allows + the same credential data to be rendered differently based on context, locale, or + user preferences while maintaining a consistent semantic foundation.

@@ -1118,10 +1118,10 @@

OCABundle

"digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "type": "spec/capture_base/2.0.0", "attributes": { - "/degree/type": "Text", - "/degree/name": "Text", - "/degree/degreeType": "Text", - "/degree/major": "Text" + "/credentialSubject/degree/type": "Text", + "/credentialSubject/degree/name": "Text", + "/credentialSubject/degree/degreeType": "Text", + "/credentialSubject/degree/major": "Text" }, "classification": "" }, @@ -1139,10 +1139,10 @@

OCABundle

"capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "en", "attribute_labels": { - "/degree/type": "Degree Type", - "/degree/name": "Degree Name", - "/degree/degreeType": "Degree Classification", - "/degree/major": "Major" + "/credentialSubject/degree/type": "Degree Type", + "/credentialSubject/degree/name": "Degree Name", + "/credentialSubject/degree/degreeType": "Degree Classification", + "/credentialSubject/degree/major": "Major" } }, { @@ -1151,10 +1151,10 @@

OCABundle

"capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "fr", "attribute_labels": { - "/degree/type": "Type de diplôme", - "/degree/name": "Nom du diplôme", - "/degree/degreeType": "Classification du diplôme", - "/degree/major": "Spécialisation" + "/credentialSubject/degree/type": "Type de diplôme", + "/credentialSubject/degree/name": "Nom du diplôme", + "/credentialSubject/degree/degreeType": "Classification du diplôme", + "/credentialSubject/degree/major": "Spécialisation" } }, { @@ -1163,10 +1163,10 @@

OCABundle

"capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "en", "attribute_information": { - "/degree/type": "The type of academic degree awarded", - "/degree/name": "The full official name of the degree", - "/degree/degreeType": "Classification level (e.g., Undergraduate, Graduate)", - "/degree/major": "The primary field of study" + "/credentialSubject/degree/type": "The type of academic degree awarded", + "/credentialSubject/degree/name": "The full official name of the degree", + "/credentialSubject/degree/degreeType": "Classification level (e.g., Undergraduate, Graduate)", + "/credentialSubject/degree/major": "The primary field of study" } }, { @@ -1174,7 +1174,7 @@

OCABundle

"type": "spec/overlays/sensitive/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "attributes": [ - "/degree/name" + "/credentialSubject/degree/name" ] } ] From ec54651df4e427e7d8cc6976caf08b2fafad6534 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 18:42:01 -0400 Subject: [PATCH 7/7] fix: use correct OCA terminology - capture base instead of schema base Replace 'schema base' with 'capture base' throughout the OCA Bundle section to use the correct OCA specification terminology. Changes: - Updated id property description - Updated example explanation text In OCA, the term is 'capture base' (which captures the schema structure), not 'schema base'. --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 98c49c2..ee576cc 100644 --- a/index.html +++ b/index.html @@ -1006,7 +1006,7 @@

OCABundle

id A REQUIRED [=string=] that follows the [[[URL]]] specification and, when fetched, -dereferences to an OCA Bundle in JSON format. The OCA Bundle contains the schema +dereferences to an OCA Bundle in JSON format. The OCA Bundle contains the capture base and associated overlays needed for rendering the credential. @@ -1095,7 +1095,7 @@

OCABundle

In this example, the OCA Bundle located at - `https://example.edu/oca-bundles/degree-2024.json` contains the schema + `https://example.edu/oca-bundles/degree-2024.json` contains the capture base and overlays necessary to render the credential. The bundle might include label overlays for multiple languages, format overlays for date and number formatting, and information overlays with descriptions of each