From 36e82be807f981a4db80853809aec767980e59d4 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 15:05:39 -0400 Subject: [PATCH 1/9] 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 40b7f14..cb25701 100644 --- a/index.html +++ b/index.html @@ -297,9 +297,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. @@ -1349,6 +1349,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 6951274f731db5c68b0a993bc867a8ee37f8f7fa Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 15:16:57 -0400 Subject: [PATCH 2/9] 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 cb25701..f78fd8b 100644 --- a/index.html +++ b/index.html @@ -1462,7 +1462,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 09f98b7d5dfceabc3ddbe4ae77c549abb499f46a Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 16:03:48 -0400 Subject: [PATCH 3/9] 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 f78fd8b..3788b6f 100644 --- a/index.html +++ b/index.html @@ -1509,54 +1509,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": { @@ -1566,15 +1566,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 6dedcc449d00ea7b05ddc375e793cb2a69acdf3e Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 16:07:49 -0400 Subject: [PATCH 4/9] 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 3788b6f..b42844e 100644 --- a/index.html +++ b/index.html @@ -118,9 +118,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}, @@ -1355,9 +1358,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 b8939e1458803ebbf23a450d951a1a74432adddc Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 18:37:14 -0400 Subject: [PATCH 5/9] 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 b42844e..f1c813b 100644 --- a/index.html +++ b/index.html @@ -1377,15 +1377,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.

@@ -1518,10 +1518,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": "" }, @@ -1539,10 +1539,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" } }, { @@ -1551,10 +1551,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" } }, { @@ -1563,10 +1563,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" } }, { @@ -1574,7 +1574,7 @@

OCABundle

"type": "spec/overlays/sensitive/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "attributes": [ - "/degree/name" + "/credentialSubject/degree/name" ] } ] From a56c4254603cd2b01d509961e74614c00c227cb3 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Mon, 20 Oct 2025 18:42:01 -0400 Subject: [PATCH 6/9] 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 f1c813b..1fe0609 100644 --- a/index.html +++ b/index.html @@ -1406,7 +1406,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. @@ -1495,7 +1495,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 From bb9eddca1c2e16caec8251ea202ed54ae3a96b39 Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Tue, 19 May 2026 10:33:33 -0400 Subject: [PATCH 7/9] Refactor OCA support as OverlayRenderMethod with oca-bundle-v2 suite Replace the OCABundle render method type with OverlayRenderMethod, aligned with TemplateRenderMethod (renderSuite, bundle, renderProperty, digestMultibase). OCA major version is carried by renderSuite oca-bundle-v2 instead of a version property. Add processing algorithm and place the section before EmbeddedRenderer. Co-authored-by: Cursor --- index.html | 564 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 327 insertions(+), 237 deletions(-) diff --git a/index.html b/index.html index 1fe0609..f7251cf 100644 --- a/index.html +++ b/index.html @@ -300,7 +300,7 @@

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`, `OpenAttestationEmbeddedRenderer`, or `OCABundle`. +`TemplateRenderMethod`, `OverlayRenderMethod`, or `EmbeddedRenderer`. The precise contents of each rendering hint is determined by the specific `renderMethod` `type` definition. @@ -1028,10 +1028,289 @@

Wrapper Code

+
+

OverlayRenderMethod

+ +

+OverlayRenderMethod is used by an [=issuer=] to link a [=verifiable credential=] +to an external package of presentation metadata—such as an Overlays Capture +Architecture (OCA) Bundle [[[OCA]]]—without prescribing a single visual +template. A capture base describes credential attributes (often as JSON Pointer +[[RFC6901]] paths from the document root), and overlays supply labels, formats, +sensitive-data flags, and related presentation rules. Renderers use this +information to build user interfaces, select locales, and display fields +consistently across applications. +

+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +An OPTIONAL [=string=] that follows the [[[URL]]] specification and, when +fetched, dereferences to a complete `OverlayRenderMethod` value. When `bundle` +is present, this property MAY be omitted. +
type +A REQUIRED [=string=] that MUST be the value `OverlayRenderMethod`. +
renderSuite +A REQUIRED [=string=] that identifies the overlay package format and processing +algorithm. The `oca-bundle-v2` render suite is defined in this specification. +
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 overlay-based rendering method and when it might be useful. +
renderProperty +An OPTIONAL [=list=] of [=string=] values that each conform to the +[[[RFC6901]]] syntax that specifies which properties from the [=verifiable +credential=] are exposed when using this specific render method. If +`renderProperty` is not provided, the entire [=verifiable credential=] is +presumed to be available to the overlay renderer. +
bundle +An OPTIONAL [=URL=] or [=ordered map|map=] that provides or refers to the +overlay package used for rendering. If the value is a [=URL=], it MUST +dereference to an overlay bundle document (for the `oca-bundle-v2` render suite, +an OCA Bundle in JSON format with media type `application/json`). If the value +is a [=ordered map|map=], it MUST conform to the following rules: + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +A REQUIRED [=string=] that follows the [[[URL]]] specification and, when +fetched, dereferences to the overlay bundle. +
mediaType +A RECOMMENDED [=string=] that identifies the media type for the `id` value +as specified in [[[RFC6838]]]. For the `oca-bundle-v2` render suite, the value +SHOULD be `application/json`. +
digestMultibase +An OPTIONAL multibase-encoded Multihash of the overlay bundle. The multibase +value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with +256-bits of output (`0x12`). +
+
digestMultibase +An OPTIONAL multibase-encoded Multihash of the overlay render method referenced +if `id` is specified. The multibase value MUST be `u` (base64url-nopad) and the +multihash value MUST be SHA-2 with 256-bits of output (`0x12`). +
+ +

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

+ +
+{
+  "@context": [
+    "https://www.w3.org/ns/credentials/v2",
+    "https://www.w3.org/ns/credentials/examples/v2",
+    "https://w3id.org/vc/render-method/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": [{
+    "type": "OverlayRenderMethod",
+    "renderSuite": "oca-bundle-v2",
+    "bundle": {
+      "id": "https://example.edu/oca-bundles/degree-2024.json",
+      "mediaType": "application/json",
+      "digestMultibase": "uEiC96D8xPcVfm...WNcMF4Kc-Yw"
+    },
+    "name": "University Degree Display",
+    "description": "Renders the degree credential with multi-language support"
+  }]
+}
+        
+ +
+

The `oca-bundle-v2` Render Suite

+

+The `oca-bundle-v2` render suite uses an OCA Bundle as defined in [[[OCA]]]. +The bundle contains a capture base and overlays. For this render suite, +`renderSuite` MUST be the value `oca-bundle-v2`, and `bundle` MUST be present +either as a URL or as a map with an `id` that dereferences to the bundle. +

+

+When processing this render suite, attribute names in the capture base MUST be +interpreted as JSON Pointer paths [[RFC6901]] from the root of the +[=verifiable credential=] document unless otherwise specified by [[[OCA]]]. +For example, an attribute named `/credentialSubject/degree/name` references +the `name` property within the `degree` object of `credentialSubject`. Overlays +in the bundle provide presentation metadata such as human-readable labels in +multiple languages, formatting rules, and sensitive-data flags for those +attributes. +

+

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

+
+{
+  "bundle": {
+    "v": "OCAS11JSON000646_",
+    "digest": "EBfdlu8R27Fbx-ehrqwIxQ-na4B7A4LqidzXqj8gkzHp",
+    "capture_base": {
+      "digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+      "type": "spec/capture_base/2.0.0",
+      "attributes": {
+        "/credentialSubject/degree/type": "Text",
+        "/credentialSubject/degree/name": "Text",
+        "/credentialSubject/degree/degreeType": "Text",
+        "/credentialSubject/degree/major": "Text"
+      },
+      "classification": ""
+    },
+    "overlays": [
+      {
+        "digest": "EMzAk6N2iI1K5EpS9YqU7WxTc8BvPq1RgFn0D4XyJwLz",
+        "type": "spec/overlays/meta/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "name": "University Degree Credential",
+        "description": "Academic degree credential issued by universities"
+      },
+      {
+        "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw",
+        "type": "spec/overlays/label/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "language": "en",
+        "attribute_labels": {
+          "/credentialSubject/degree/type": "Degree Type",
+          "/credentialSubject/degree/name": "Degree Name",
+          "/credentialSubject/degree/degreeType": "Degree Classification",
+          "/credentialSubject/degree/major": "Major"
+        }
+      },
+      {
+        "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx",
+        "type": "spec/overlays/label/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "language": "fr",
+        "attribute_labels": {
+          "/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"
+        }
+      },
+      {
+        "digest": "ELrYj5M1hH0J4DoR8XpT6VzSb7AuOp0QeFm9C3WxIvKy",
+        "type": "spec/overlays/information/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "language": "en",
+        "attribute_information": {
+          "/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"
+        }
+      },
+      {
+        "digest": "ENaZl7O3jJ2L6FqT0ZrV8XyUd9CwRs2ShGo1E5YzKxMa",
+        "type": "spec/overlays/sensitive/2.0.0",
+        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
+        "attributes": [
+          "/credentialSubject/degree/name"
+        ]
+      }
+    ]
+  }
+}
+          
+ +

+Implementers use the bundle to generate appropriate user interfaces, select +language-specific labels, apply format specifications, and ensure consistent +rendering across applications. A [=verifiable credential=] MAY include both an +`OverlayRenderMethod` and a `TemplateRenderMethod`; in that case, the overlay +package can supply labels and metadata while a template supplies layout. +

+
+
@@ -1352,242 +1631,6 @@
Frame-to-Host Actions
- -
-

OCABundle

- -

- OCABundle is used by an issuer to specify rendering instructions - 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. -

- -

- 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 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. -

- -

- 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 capture -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://www.w3.org/ns/credentials/examples/v2"
-  ],
-  "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 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 - attribute. -

- -

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

- -
-{
-  "bundle": {
-    "v": "OCAS11JSON000646_",
-    "digest": "EBfdlu8R27Fbx-ehrqwIxQ-na4B7A4LqidzXqj8gkzHp",
-    "capture_base": {
-      "digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-      "type": "spec/capture_base/2.0.0",
-      "attributes": {
-        "/credentialSubject/degree/type": "Text",
-        "/credentialSubject/degree/name": "Text",
-        "/credentialSubject/degree/degreeType": "Text",
-        "/credentialSubject/degree/major": "Text"
-      },
-      "classification": ""
-    },
-    "overlays": [
-      {
-        "digest": "EMzAk6N2iI1K5EpS9YqU7WxTc8BvPq1RgFn0D4XyJwLz",
-        "type": "spec/overlays/meta/2.0.0",
-        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-        "name": "University Degree Credential",
-        "description": "Academic degree credential issued by universities"
-      },
-      {
-        "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw",
-        "type": "spec/overlays/label/2.0.0",
-        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-        "language": "en",
-        "attribute_labels": {
-          "/credentialSubject/degree/type": "Degree Type",
-          "/credentialSubject/degree/name": "Degree Name",
-          "/credentialSubject/degree/degreeType": "Degree Classification",
-          "/credentialSubject/degree/major": "Major"
-        }
-      },
-      {
-        "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx",
-        "type": "spec/overlays/label/2.0.0",
-        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-        "language": "fr",
-        "attribute_labels": {
-          "/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"
-        }
-      },
-      {
-        "digest": "ELrYj5M1hH0J4DoR8XpT6VzSb7AuOp0QeFm9C3WxIvKy",
-        "type": "spec/overlays/information/2.0.0",
-        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-        "language": "en",
-        "attribute_information": {
-          "/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"
-        }
-      },
-      {
-        "digest": "ENaZl7O3jJ2L6FqT0ZrV8XyUd9CwRs2ShGo1E5YzKxMa",
-        "type": "spec/overlays/sensitive/2.0.0",
-        "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq",
-        "attributes": [
-          "/credentialSubject/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. -

-
@@ -1609,6 +1652,53 @@

Render (TemplateRenderMethod)

+
+

Render (OverlayRenderMethod)

+ +

+The following algorithm applies when `renderMethod.type` is +`OverlayRenderMethod` and `renderMethod.renderSuite` is `oca-bundle-v2`. +

+ +
    +
  1. +Let `vc` be the [=verifiable credential=] to render. +
  2. +
  3. +Let `renderMethod` be the chosen `renderMethod` entry where +`renderMethod.type` is `OverlayRenderMethod` and +`renderMethod.renderSuite` is `oca-bundle-v2`. +
  4. +
  5. +If `renderMethod.bundle` is a [=string=], let `bundleUrl` be its value. +Otherwise, if `renderMethod.bundle` is a [=map=], let `bundleUrl` be the value +of `renderMethod.bundle.id`. Otherwise, if `renderMethod.id` is present, fetch +it and let the result be the `renderMethod` value; then repeat this step. +
  6. +
  7. +Fetch `bundleUrl` and parse the response as JSON. If +`renderMethod.bundle.digestMultibase` is present, verify the response against +that digest prior to use. +
  8. +
  9. +If `renderMethod.renderProperty` is present, let `vcData` be the result of +applying the `selectJsonLd` algorithm [[VC-DI-ECDSA]] to `vc` using the JSON +Pointer values in `renderMethod.renderProperty`. Otherwise, let `vcData` be +`vc`. +
  10. +
  11. +For each attribute name in the OCA capture base, resolve the name as a JSON +Pointer against `vcData` from the document root. If a pointer does not resolve, +the processor MAY ignore that attribute or report an error. +
  12. +
  13. +Apply overlays from the bundle (for example, label, information, format, and +sensitive overlays) to produce presentation metadata for rendering `vcData`. +The specifics of each overlay type are defined in [[[OCA]]]. +
  14. +
+
+
From 217dd498c8f510139289519132a2d2857139bdad Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Tue, 19 May 2026 10:38:47 -0400 Subject: [PATCH 8/9] Clarify capture base attributes are always VC-root JSON Pointers Remove "often" from the OverlayRenderMethod introduction and state that oca-bundle-v2 capture base and overlay attribute references use JSON Pointer paths from the verifiable credential document root. Co-authored-by: Cursor --- index.html | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index f7251cf..c1dfc1b 100644 --- a/index.html +++ b/index.html @@ -1035,8 +1035,9 @@

OverlayRenderMethod

OverlayRenderMethod is used by an [=issuer=] to link a [=verifiable credential=] to an external package of presentation metadata—such as an Overlays Capture Architecture (OCA) Bundle [[[OCA]]]—without prescribing a single visual -template. A capture base describes credential attributes (often as JSON Pointer -[[RFC6901]] paths from the document root), and overlays supply labels, formats, +template. A capture base describes credential attributes as JSON Pointer +[[RFC6901]] paths from the root of the [=verifiable credential=] document, and +overlays supply labels, formats, sensitive-data flags, and related presentation rules. Renderers use this information to build user interfaces, select locales, and display fields consistently across applications. @@ -1214,7 +1215,8 @@

The `oca-bundle-v2` Render Suite

When processing this render suite, attribute names in the capture base MUST be interpreted as JSON Pointer paths [[RFC6901]] from the root of the -[=verifiable credential=] document unless otherwise specified by [[[OCA]]]. +[=verifiable credential=] document. Attribute names in overlays that reference +capture base attributes MUST use the same JSON Pointer paths. For example, an attribute named `/credentialSubject/degree/name` references the `name` property within the `degree` object of `credentialSubject`. Overlays in the bundle provide presentation metadata such as human-readable labels in From 6b3add166f370bb4642fb711ac4eb72783435cfc Mon Sep 17 00:00:00 2001 From: Patrick St-Louis Date: Tue, 19 May 2026 10:39:59 -0400 Subject: [PATCH 9/9] Note oca-bundle-v2 render suite refers to OCA v2.0.0 Co-authored-by: Cursor --- index.html | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index c1dfc1b..edec254 100644 --- a/index.html +++ b/index.html @@ -1075,7 +1075,8 @@

OverlayRenderMethod

renderSuite A REQUIRED [=string=] that identifies the overlay package format and processing -algorithm. The `oca-bundle-v2` render suite is defined in this specification. +algorithm. The `oca-bundle-v2` render suite (OCA v2.0.0) is defined in this +specification. @@ -1206,10 +1207,12 @@

OverlayRenderMethod

The `oca-bundle-v2` Render Suite

-The `oca-bundle-v2` render suite uses an OCA Bundle as defined in [[[OCA]]]. -The bundle contains a capture base and overlays. For this render suite, -`renderSuite` MUST be the value `oca-bundle-v2`, and `bundle` MUST be present -either as a URL or as a map with an `id` that dereferences to the bundle. +The `oca-bundle-v2` render suite refers to the Overlays Capture Architecture +(OCA) v2.0.0 +specification [[[OCA]]]. It uses an OCA Bundle containing a capture base and +overlays. For this render suite, `renderSuite` MUST be the value +`oca-bundle-v2`, and `bundle` MUST be present either as a URL or as a map with +an `id` that dereferences to the bundle.