From 6f306d179a4ac64bc65544fcd87a51c887a825c7 Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Tue, 2 Sep 2025 14:12:38 +0200 Subject: [PATCH 01/11] Aligning with CORE schema --- softbinding-algorithm-entry-schema.json | 28 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/softbinding-algorithm-entry-schema.json b/softbinding-algorithm-entry-schema.json index 12bbbc6..9382a7b 100644 --- a/softbinding-algorithm-entry-schema.json +++ b/softbinding-algorithm-entry-schema.json @@ -90,25 +90,33 @@ "description": "A list of Soft Binding Resolution APIs supporting this algorithm." } }, + "required": [ + "identifier", + "alg", + "type", + "entryMetadata" + ], "oneOf": [ { - "required": ["decodedMediaTypes"], + "required": [ + "decodedMediaTypes" + ], "not": { - "required": ["encodedMediaTypes"] + "required": [ + "encodedMediaTypes" + ] } }, { - "required": ["encodedMediaTypes"], + "required": [ + "encodedMediaTypes" + ], "not": { - "required": ["decodedMediaTypes"] + "required": [ + "decodedMediaTypes" + ] } } - ], - "required": [ - "identifier", - "alg", - "type", - "entryMetadata" ] } } \ No newline at end of file From 058751ae65e8597d6fed5a0ee50b932681ea1caa Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Wed, 10 Sep 2025 16:46:46 +0200 Subject: [PATCH 02/11] This time with the actual schema... --- softbinding-algorithm-entry-schema.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/softbinding-algorithm-entry-schema.json b/softbinding-algorithm-entry-schema.json index 9382a7b..0b5cd46 100644 --- a/softbinding-algorithm-entry-schema.json +++ b/softbinding-algorithm-entry-schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "(c2pa\\.|[A-Za-z0-9\\-\\.]+)", + "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -59,6 +59,14 @@ "type": "string", "description": "Human readable description of the algorithm." }, + "categories": { + "type": "array", + "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", + "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)", + "items": { + "type": "string" + } + }, "dateEntered": { "type": "string", "format": "date-time", From a0c51d5837421d07f21ec357bc1a7238f558a0ea Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Thu, 11 Sep 2025 20:00:47 +0200 Subject: [PATCH 03/11] Moving pattern to apply to items --- softbinding-algorithm-entry-schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-entry-schema.json b/softbinding-algorithm-entry-schema.json index 0b5cd46..a9dff81 100644 --- a/softbinding-algorithm-entry-schema.json +++ b/softbinding-algorithm-entry-schema.json @@ -62,9 +62,9 @@ "categories": { "type": "array", "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", - "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)", "items": { - "type": "string" + "type": "string", + "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)" } }, "dateEntered": { From 82a34d7946e4028ce79b6ac76ac122280777bc5d Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Wed, 17 Sep 2025 16:25:09 +0200 Subject: [PATCH 04/11] Renaming file --- ...hm-entry-schema.json => softbinding-algorithm-list.schema.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename softbinding-algorithm-entry-schema.json => softbinding-algorithm-list.schema.json (100%) diff --git a/softbinding-algorithm-entry-schema.json b/softbinding-algorithm-list.schema.json similarity index 100% rename from softbinding-algorithm-entry-schema.json rename to softbinding-algorithm-list.schema.json From f7e8735a3c98961be0f2a457f7f41bb4b354621b Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Wed, 17 Sep 2025 16:27:27 +0200 Subject: [PATCH 05/11] Adjusting to latest pattern --- softbinding-algorithm-list.schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index a9dff81..7a8c9c3 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)", + "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9]+)+$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "([a-zA-Z0-9]+\\.[a-zA-Z0-9\\.]+)" + "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9]+)+$" } }, "dateEntered": { From 638c3e83eb04e554fee0969b2ad8a0572a105f3e Mon Sep 17 00:00:00 2001 From: Dominique Guinard Date: Wed, 17 Sep 2025 16:30:01 +0200 Subject: [PATCH 06/11] Update validate-json.yaml Changing the workflow to match the renamed schema file. --- .github/workflows/validate-json.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/validate-json.yaml b/.github/workflows/validate-json.yaml index 789d87a..b53a482 100644 --- a/.github/workflows/validate-json.yaml +++ b/.github/workflows/validate-json.yaml @@ -19,14 +19,14 @@ jobs: - name: Lint JSON files run: | - echo "Linting softbinding-algorithm-entry-schema.json..." + echo "Linting softbinding-algorithm-list.schema.json..." set -e # Exit on any error - jsonschema lint softbinding-algorithm-entry-schema.json - echo "✓ softbinding-algorithm-entry-schema.json passed linting" + jsonschema lint softbinding-algorithm-list.schema.json + echo "✓ softbinding-algorithm-list.schema.json passed linting" - name: Validate against schema run: | echo "Validating softbinding-algorithm-list.json against schema..." set -e # Exit on any error - jsonschema validate softbinding-algorithm-entry-schema.json softbinding-algorithm-list.json - echo "✓ softbinding-algorithm-list.json is valid against the schema" \ No newline at end of file + jsonschema validate softbinding-algorithm-list.schema.json softbinding-algorithm-list.json + echo "✓ softbinding-algorithm-list.json is valid against the schema" From 14fc039e2f35dbcd7b22ace4ac88aa5943a8e2d6 Mon Sep 17 00:00:00 2001 From: John Collomosse Date: Wed, 17 Sep 2025 15:41:24 +0100 Subject: [PATCH 07/11] Update regex to allow hyphenation in FQDNs for categories and alg names --- softbinding-algorithm-list.schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index 7a8c9c3..f00fd33 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9]+)+$", + "pattern": "^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)+$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9]+)+$" + "pattern": "^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)+$" } }, "dateEntered": { @@ -127,4 +127,4 @@ } ] } -} \ No newline at end of file +} From d29de774bf665e0c93fa960c30146fb66fe51e7e Mon Sep 17 00:00:00 2001 From: John Collomosse Date: Wed, 17 Sep 2025 15:42:56 +0100 Subject: [PATCH 08/11] regex escaping issue --- softbinding-algorithm-list.schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index f00fd33..84c8166 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)+$", + "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9-]+)+$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)+$" + "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9-]+)+$" } }, "dateEntered": { From ff9435756440cc8ecf38e7fd6c758bf96b971c2e Mon Sep 17 00:00:00 2001 From: John Collomosse Date: Wed, 17 Sep 2025 15:56:17 +0100 Subject: [PATCH 09/11] further regex adjustment for FQDNs --- softbinding-algorithm-list.schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index 84c8166..607046e 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9-]+)+$", + "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "^[a-zA-Z0-9]+(?:\\.[a-zA-Z0-9-]+)+$" + "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$" } }, "dateEntered": { From 227b9ce14ffaa9084710ebc571131d5afdb2ddd1 Mon Sep 17 00:00:00 2001 From: John Collomosse Date: Wed, 17 Sep 2025 16:36:37 +0100 Subject: [PATCH 10/11] further iteration on regex from WM TF --- softbinding-algorithm-list.schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index 607046e..bb233a7 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$", + "pattern": "^[A-Za-z]{2,63}(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\.?$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$" + "pattern": "^[A-Za-z]{2,63}(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\.?$" } }, "dateEntered": { From 38ee1e2302e8f77471886b91728405f1567f7e25 Mon Sep 17 00:00:00 2001 From: John Collomosse Date: Wed, 17 Sep 2025 16:40:03 +0100 Subject: [PATCH 11/11] escaping --- softbinding-algorithm-list.schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softbinding-algorithm-list.schema.json b/softbinding-algorithm-list.schema.json index bb233a7..021f227 100644 --- a/softbinding-algorithm-list.schema.json +++ b/softbinding-algorithm-list.schema.json @@ -18,7 +18,7 @@ }, "alg": { "type": "string", - "pattern": "^[A-Za-z]{2,63}(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\.?$", + "pattern": "^[A-Za-z]{2,63}(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\\.?$", "description": "Entity-specific namespace as specified for C2PA Assertions labels that shall begin with the Internet domain name for the entity similar to how Java packages are defined (e.g., `com.example.algo1`, `net.example.algos.algo2`)" }, "type": { @@ -64,7 +64,7 @@ "description": "This allows specifying values that can be used to cluster this algorithm with others of the same or similar values. For example an algorithm that is used in a certain context (e.g., verified news, advertising). The format of these categories follows the entity-specific namespace as specified for C2PA Assertions labels that shall begin with the (reversed) Internet domain name for the entity similar to how Java packages are defined (e.g., `org.iptc.watermarking`, `net.example.cluster.context1`)", "items": { "type": "string", - "pattern": "^[A-Za-z]{2,63}(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\.?$" + "pattern": "^[A-Za-z]{2,63}(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\\.?$" } }, "dateEntered": {