SLING-8032 - Add a MOJO which is able to validate JSON Feature file
against the JSON Schema
schema definition moved from sling-org-apache-sling-feature to
sling-org-apache-sling-feature-io
diff --git a/src/main/resources/META-INF/feature/Feature-1.0.0.schema.json b/src/main/resources/META-INF/feature/Feature-1.0.0.schema.json
new file mode 100644
index 0000000..0bc0c36
--- /dev/null
+++ b/src/main/resources/META-INF/feature/Feature-1.0.0.schema.json
@@ -0,0 +1,220 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "http://sling.apache.org/Feature/1.0.0",
+ "type": "object",
+ "properties": {
+ "model-version": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^(([^: ]+):([^: ]+)(:([^: ]*)(:([^: ]+))?)?:([^: ]+)|([^/ ]+)/([^/ ]+)(/([^/ ]+))?(/([^/ ]*)(/([^/ ]+))?)?)$"
+ },
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "vendor": {
+ "type": "string"
+ },
+ "license": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": "string"
+ }
+ }
+ },
+ "bundles": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Bundle"
+ }
+ },
+ "framework-properties": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": [ "string", "number", "boolean" ]
+ }
+ }
+ },
+ "configurations": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "$ref": "#/definitions/Configuration"
+ }
+ }
+ },
+ "include": {
+ "$ref": "#/definitions/Include"
+ },
+ "requirements": {
+ " type": "array",
+ "items": {
+ "$ref": "#/definitions/Requirement"
+ }
+ },
+ "capabilities": {
+ " type": "array",
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^:]+:ARTIFACTS\\|(true|false)$": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Bundle"
+ }
+ },
+ "^[^:]+:TEXT\\|(true|false)$": {
+ "type": [ "string", "array" ],
+ "items": {
+ "type": "string"
+ }
+ },
+ "^[^:]+:JSON\\|(true|false)$": {
+ "type": [
+ "object",
+ "array"
+ ]
+ }
+ },
+ "definitions": {
+ "Bundle": {
+ "$id": "#Bundle",
+ "type": [
+ "string",
+ "object"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^(([^: ]+):([^: ]+)(:([^: ]*)(:([^: ]+))?)?:([^: ]+)|(mvn:)?([^/ ]+)/([^/ ]+)(/([^/ ]+))?(/([^/ ]*)(/([^/ ]+))?)?)$"
+ },
+ "start-level": {
+ "type": [ "string", "number" ],
+ "pattern": "^\\d+$"
+ },
+ "run-modes": {
+ "type": [
+ "string",
+ "array"
+ ],
+ "items": {
+ "type": "string"
+ }
+ },
+ "configurations": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "$ref": "#/definitions/Configuration"
+ }
+ }
+ }
+ }
+ },
+ "Configuration": {
+ "$id": "#Configuration",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": [
+ "string",
+ "number",
+ "boolean",
+ "array",
+ "object"
+ ]
+ }
+ }
+ },
+ "Include": {
+ "$id": "#Include",
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^(([^: ]+):([^: ]+)(:([^: ]*)(:([^: ]+))?)?:([^: ]+)|(mvn:)?([^/ ]+)/([^/ ]+)(/([^/ ]+))?(/([^/ ]*)(/([^/ ]+))?)?)$"
+ },
+ "removals": {
+ "$ref": "#/definitions/Removals"
+ }
+ }
+ },
+ "Removals": {
+ "$id": "#Removals",
+ "type": "object",
+ "properties": {
+ "configurations": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "bundles": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "framework-properties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "Requirement": {
+ "$id": "#Requirement",
+ "type": "object",
+ "properties": {
+ "namespace": {
+ "type": "string"
+ },
+ "directives": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "Capability": {
+ "$id": "#Capability",
+ "type": "object",
+ "properties": {
+ "namespace": {
+ "type": "string"
+ },
+ "directives": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": "string"
+ }
+ }
+ },
+ "attributes": {
+ "type": "object",
+ "patternProperties": {
+ "^(.+)$": {
+ "type": [ "string", "number", "boolean" ]
+ }
+ }
+ }
+ }
+ }
+ }
+}