This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/master by this push:
new 9a771321a UNOMI-789: upgrade json schema validator to 1.0.86 (#639)
9a771321a is described below
commit 9a771321a6c077a94769f9776b43f4993f0b9b9c
Author: kevan Jahanshahi <[email protected]>
AuthorDate: Fri Aug 11 09:34:51 2023 +0200
UNOMI-789: upgrade json schema validator to 1.0.86 (#639)
* UNOMI-789: upgrade json schema validator to 1.0.86
* Revert "UNOMI-778 : remove useless unevaluatedProperties on sub schema
(#620)"
This reverts commit bbb1584b67596757c4d8f1ddd720c745d5d0278d.
* UNOMI-789: add new test for referringURL and allow empty value
* DMF-5976: fix GraphQL calculation of types due to usage of anyOf as type
in a Schema
---
extensions/json-schema/services/pom.xml | 2 +-
.../form/form.flattenedProperties.fields.json | 3 +-
.../events/form/form.flattenedProperties.json | 3 +-
.../cxs/schemas/events/form/form.source.json | 3 +-
.../modifyConsent/modifyConsent.properties.json | 5 ++--
.../cxs/schemas/events/video/video.target.json | 3 +-
.../events/video/video.target.properties.json | 3 +-
.../events/view/view.flattenProperties.json | 5 ++--
.../META-INF/cxs/schemas/events/view/view.json | 2 +-
.../cxs/schemas/events/view/view.properties.json | 5 ++--
.../schemas/items/URLParameters/URLParameters.json | 5 ++--
.../cxs/schemas/items/consent/consent.json | 3 +-
.../cxs/schemas/items/consent/consentType.json | 5 ++--
.../cxs/schemas/items/interests/interests.json | 5 ++--
.../META-INF/cxs/schemas/items/page/page.json | 5 ++--
.../items/page/page.properties.attributes.json | 6 ++--
.../cxs/schemas/items/page/page.properties.json | 5 ++--
.../items/page/page.properties.pageInfo.json | 15 ++++++++--
.../META-INF/cxs/schemas/items/site/site.json | 5 ++--
.../unomi/graphql/schema/json/JSONTypeFactory.java | 8 ++++++
.../java/org/apache/unomi/itests/JSONSchemaIT.java | 23 +++++++++++++++
itests/src/test/resources/schemas/event-view.json | 33 ++++++++++++++++++++++
.../schemas/schema-dummy-properties-updated.json | 3 +-
.../resources/schemas/schema-dummy-properties.json | 3 +-
...ma-flattened-flattenedProperties-interests.json | 5 ++--
.../schema-flattened-flattenedProperties.json | 5 ++--
.../schemas/schema-flattened-properties.json | 3 +-
.../src/main/asciidoc/jsonSchema/introduction.adoc | 1 -
28 files changed, 133 insertions(+), 39 deletions(-)
diff --git a/extensions/json-schema/services/pom.xml
b/extensions/json-schema/services/pom.xml
index 337ea8c42..827168e6d 100644
--- a/extensions/json-schema/services/pom.xml
+++ b/extensions/json-schema/services/pom.xml
@@ -31,7 +31,7 @@
<packaging>bundle</packaging>
<properties>
- <version.schema>1.0.81</version.schema>
+ <version.schema>1.0.86</version.schema>
<version.schema.jackson>2.14.2</version.schema.jackson>
<version.schema.itu>1.7.0</version.schema.itu>
</properties>
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.fields.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.fields.json
index ef06189b2..1bc5dd8a1 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.fields.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.fields.json
@@ -16,5 +16,6 @@
"type": "string"
}
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.json
index 5bf1f739f..fe8fc7a2c 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.flattenedProperties.json
@@ -13,5 +13,6 @@
"fields": {
"$ref" :
"https://unomi.apache.org/schemas/json/events/form/flattenedProperties/fields/1-0-0"
}
- }
+ },
+ "unevaluatedProperties" : false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.source.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.source.json
index cb3b72b25..04a1b3273 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.source.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/form/form.source.json
@@ -9,5 +9,6 @@
},
"title": "FormSource",
"type": "object",
- "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/item/1-0-0" }]
+ "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/item/1-0-0" }],
+ "unevaluatedProperties" : false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/modifyConsent/modifyConsent.properties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/modifyConsent/modifyConsent.properties.json
index 6527e29b7..dec05c560 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/modifyConsent/modifyConsent.properties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/modifyConsent/modifyConsent.properties.json
@@ -13,5 +13,6 @@
"consent" : {
"$ref" : "https://unomi.apache.org/schemas/json/consent/1-0-0"
}
- }
-}
+ },
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.json
index 234591a89..62645a914 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.json
@@ -14,5 +14,6 @@
"properties": {
"$ref":
"https://unomi.apache.org/schemas/json/events/video/target/properties/1-0-0"
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.properties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.properties.json
index 345961c55..f358d6174 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.properties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/video/video.target.properties.json
@@ -13,5 +13,6 @@
"action": {
"type": "string"
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.flattenProperties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.flattenProperties.json
index a78b9ebe7..957761d71 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.flattenProperties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.flattenProperties.json
@@ -16,5 +16,6 @@
"URLParameters": {
"$ref": "https://unomi.apache.org/schemas/json/URLParameters/1-0-0"
}
- }
-}
+ },
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.json
index 921ae52b1..e77576476 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.json
@@ -26,4 +26,4 @@
}
},
"unevaluatedProperties": false
-}
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.properties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.properties.json
index 8fee44e29..13c69694c 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.properties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/events/view/view.properties.json
@@ -9,5 +9,6 @@
},
"title": "ViewProperties",
"type": "object",
- "properties" : {}
-}
+ "properties" : {},
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/URLParameters/URLParameters.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/URLParameters/URLParameters.json
index 1d883d60d..3d7e3a6d0 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/URLParameters/URLParameters.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/URLParameters/URLParameters.json
@@ -16,5 +16,6 @@
"type": "string"
}
}
- }
-}
+ },
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consent.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consent.json
index 8da47562d..40b09d64d 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consent.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consent.json
@@ -28,5 +28,6 @@
"type" : "string",
"format" : "date-time"
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consentType.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consentType.json
index 23189416d..995f77f9a 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consentType.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/consent/consentType.json
@@ -22,5 +22,6 @@
"description" : {
"type" : ["null", "string"]
}
- }
-}
+ },
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/interests/interests.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/interests/interests.json
index 0681e32c1..74bc6c84d 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/interests/interests.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/interests/interests.json
@@ -13,5 +13,6 @@
"^.*$": {
"type": "number"
}
- }
-}
+ },
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.json
index 18d13e002..ec52e5871 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.json
@@ -14,5 +14,6 @@
"properties" : {
"$ref" :
"https://unomi.apache.org/schemas/json/items/page/properties/1-0-0"
}
- }
-}
+ },
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.attributes.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.attributes.json
index cece7608e..cb54c2a93 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.attributes.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.attributes.json
@@ -9,5 +9,7 @@
},
"title": "Page Attributes",
"type": ["null", "object"],
- "properties": {}
-}
+ "properties": {
+ },
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.json
index 8ef3f29be..3abfd4d0e 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.json
@@ -22,5 +22,6 @@
"$ref" : "https://unomi.apache.org/schemas/json/consentType/1-0-0"
}
}
- }
-}
+ },
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.pageInfo.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.pageInfo.json
index ded8b0a0c..bfafcb1a5 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.pageInfo.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/page/page.properties.pageInfo.json
@@ -43,8 +43,16 @@
"type": ["null", "string"]
},
"referringURL": {
- "type": ["null", "string"],
- "format": "uri"
+ "anyOf": [
+ {
+ "type": ["null", "string"],
+ "format": "uri"
+ },
+ {
+ "type": ["string"],
+ "maxLength": 0
+ }
+ ]
},
"referrerQuery": {
"type": ["null", "string"]
@@ -64,5 +72,6 @@
"sameDomainReferrer": {
"type": ["null", "boolean"]
}
- }
+ },
+ "unevaluatedProperties" : false
}
diff --git
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/site/site.json
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/site/site.json
index 777dc4a81..c73afaf17 100644
---
a/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/site/site.json
+++
b/extensions/json-schema/services/src/main/resources/META-INF/cxs/schemas/items/site/site.json
@@ -9,5 +9,6 @@
},
"title": "SiteItem",
"type": "object",
- "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/item/1-0-0" }]
-}
+ "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/item/1-0-0" }],
+ "unevaluatedProperties" : false
+}
\ No newline at end of file
diff --git
a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/json/JSONTypeFactory.java
b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/json/JSONTypeFactory.java
index 6b1ab8255..04c5bb255 100644
---
a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/json/JSONTypeFactory.java
+++
b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/json/JSONTypeFactory.java
@@ -49,6 +49,14 @@ public class JSONTypeFactory {
}
List<JSONType> getTypes(Map<String, Object> schemaTree) {
+ if (schemaTree.containsKey("anyOf")) {
+ List<JSONType> result = new ArrayList<>();
+ List<Map<String, Object>> anyOf = (List<Map<String, Object>>)
schemaTree.get("anyOf");
+ for (Map<String, Object> any : anyOf) {
+ result.addAll(getTypes(any));
+ }
+ return result;
+ }
if (schemaTree.containsKey("$ref")) {
String schemaId = (String) schemaTree.get("$ref");
JsonSchemaWrapper refSchema = schemaService.getSchema(schemaId);
diff --git a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
index 034c2eb3c..13550dda7 100644
--- a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
@@ -291,6 +291,29 @@ public class JSONSchemaIT extends BaseIT {
assertEquals(1,
errors.get("flattened").stream().filter(validationError ->
validationError.getError().startsWith("$.flattenedProperties.interests.football")).collect(Collectors.toList()).size());
}
+ @Test
+ public void testValidateEvents_referringURL() throws Exception {
+ Map<String, Boolean> URIs = new HashMap<>();
+ URIs.put("null", true);
+ URIs.put("\"\"", true);
+ URIs.put("\"http://example.com:8080/path/to/resource\"", true);
+ URIs.put("\"http://helloworld.com/\"", true);
+
URIs.put("\"file:///private/var/containers/Bundle/Application/8F7EE2C0-7167-4AB3-8090-7A4D34E49668/stable.app/restore_session.html#targetUrl=https%3A%2F%2Fwww.ducks.org%2Fillinois%2Fillinois-du-calendar-gun-giveaway\"",
true);
+ URIs.put("\"://helloworld.com/\"", false);
+ URIs.put("\"nullsrcdoc\"", false);
+
+ for (Map.Entry<String, Boolean> uri : URIs.entrySet()) {
+ HashMap<String, String> replacements = new HashMap<>();
+ replacements.put("REFERRING_URL", uri.getKey());
+ String events = "[" +
getValidatedBundleJSON("schemas/event-view.json", replacements) + "]";
+ Map<String, Set<ValidationError>> errors =
schemaService.validateEvents(events);
+ if (uri.getValue()) {
+ assertTrue("URI: " + uri.getKey() + " as referringURL should
be allowed", errors.isEmpty());
+ } else {
+ assertEquals("URI: " + uri.getKey() + " as referringURL should
not be allowed",1, errors.size());
+ }
+ }
+ }
@Test
public void testFlattenedProperties() throws Exception {
diff --git a/itests/src/test/resources/schemas/event-view.json
b/itests/src/test/resources/schemas/event-view.json
new file mode 100644
index 000000000..85763ecd1
--- /dev/null
+++ b/itests/src/test/resources/schemas/event-view.json
@@ -0,0 +1,33 @@
+{
+ "eventType": "view",
+ "scope": "dummy_scope",
+ "target": {
+ "scope": "dummy_scope",
+ "itemId": "829a9d87-acd3-46a3-98e1-951f3cdfbd03",
+ "itemType": "page",
+ "properties": {
+ "pageInfo": {
+ "pageID": "829a9d87-acd3-46a3-98e1-951f3cdfbd03",
+ "nodeType": "jnt:page",
+ "pageName": "Accueil",
+ "pagePath": "/sites/digitall/home",
+ "templateName": "home",
+ "destinationURL": "http://localhost:8080/fr/sites/digitall/home.html",
+ "destinationSearch": "",
+ "referringURL": ###REFERRING_URL###,
+ "language": "fr",
+ "categories": [],
+ "tags": [],
+ "sameDomainReferrer": false
+ },
+ "attributes": {},
+ "consentTypes": []
+ }
+ },
+ "source": {
+ "scope": "dummy_scope",
+ "itemId": "36ed9435-638a-4076-9e4e-1445a886a2f2",
+ "itemType": "site"
+ },
+ "flattenedProperties": {}
+}
\ No newline at end of file
diff --git
a/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
b/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
index 83f5cabf2..d1482be34 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
@@ -19,5 +19,6 @@
"invalidPropName": {
"type": "string"
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git a/itests/src/test/resources/schemas/schema-dummy-properties.json
b/itests/src/test/resources/schemas/schema-dummy-properties.json
index 5ead897a5..e497791ee 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties.json
@@ -21,5 +21,6 @@
"type": "string",
"maxLength": 20000
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git
a/itests/src/test/resources/schemas/schema-flattened-flattenedProperties-interests.json
b/itests/src/test/resources/schemas/schema-flattened-flattenedProperties-interests.json
index c42c0fae9..a5fde38fc 100644
---
a/itests/src/test/resources/schemas/schema-flattened-flattenedProperties-interests.json
+++
b/itests/src/test/resources/schemas/schema-flattened-flattenedProperties-interests.json
@@ -14,5 +14,6 @@
"type": "number"
}
},
- "maxProperties": 4
-}
+ "maxProperties": 4,
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git
a/itests/src/test/resources/schemas/schema-flattened-flattenedProperties.json
b/itests/src/test/resources/schemas/schema-flattened-flattenedProperties.json
index 067c66220..e50e883f2 100644
---
a/itests/src/test/resources/schemas/schema-flattened-flattenedProperties.json
+++
b/itests/src/test/resources/schemas/schema-flattened-flattenedProperties.json
@@ -13,5 +13,6 @@
"interests": {
"$ref":
"https://vendor.test.com/schemas/json/events/flattened/flattenedProperties/interests/1-0-0"
}
- }
-}
+ },
+ "unevaluatedProperties": false
+}
\ No newline at end of file
diff --git a/itests/src/test/resources/schemas/schema-flattened-properties.json
b/itests/src/test/resources/schemas/schema-flattened-properties.json
index b0f71bcd0..7d7fd7c0d 100644
--- a/itests/src/test/resources/schemas/schema-flattened-properties.json
+++ b/itests/src/test/resources/schemas/schema-flattened-properties.json
@@ -13,5 +13,6 @@
"marker": {
"type": "string"
}
- }
+ },
+ "unevaluatedProperties": false
}
diff --git a/manual/src/main/asciidoc/jsonSchema/introduction.adoc
b/manual/src/main/asciidoc/jsonSchema/introduction.adoc
index d9755b12f..e77d5ed4d 100644
--- a/manual/src/main/asciidoc/jsonSchema/introduction.adoc
+++ b/manual/src/main/asciidoc/jsonSchema/introduction.adoc
@@ -184,7 +184,6 @@ The *unevaluatedProperties* keyword is useful for schema
composition as well as
This keyword is similar to *additionalProperties* except that it can recognize
properties declared in sub schemas.
When setting the *unevaluatedProperties* value to *false*, the properties
which are not present in the properties part and are not present in the sub
schemas will be considered as invalid.
-The *unevaluatedProperties* keyword should only be set on the root schema.
Otherwise it could leads to less readable messages when validating events.
Example with the following schema:
[source]