{ "copyright": [ "Copyright 2025 EUROCONTROL", "==========================================", "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:", "1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.", "2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer ", " in the documentation and/or other materials provided with the distribution.", "3. Neither the name of the copyright holder nor the names of its contributors may be used to", " endorse or promote products derived from this software without specific prior written permission.", "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS-IS AND ANY EXPRESS OR IMPLIED WARRANTIES,", "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.", "IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES", "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)", "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT", "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", "==========================================", "Editorial note: this license is an instance of the BSD license template as provided by the Open Source Initiative: http://opensource.org/licenses/BSD-3-Clause", "Details on EUROCONTROL: http://www.eurocontrol.int" ], "title": "Service Metadata Schema for service descriptions", "description": "JSON Schema for service descriptions based on the requirements from the EUROCONTROL SWIM Service Description Specification (EUROCONTROL-SPEC-168) Ed. 2.0", "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/description/v3.0/service-description.schema.json", "type": "object", "additionalProperties": false, "required": [ "informationServiceDescription" ], "properties": { "informationServiceDescription": { "description": "This object holds the set of information elements useful to describe the service in question [SWIM-SERV-010]", "$ref": "#/$defs/InformationService" } }, "$defs": { "InformationService": { "description": "The information service being described. [SWIM-SERV-010]", "unevaluatedProperties": false, "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/BaseInformationService" }, { "type": "object", "properties": { "serviceIdentification": { "description": "Information for identifying the service. [SWIM-SERV-040]", "$ref": "#/$defs/ServiceIdentification" }, "serviceProvider": { "description": "An entity (person or organization) that offers the use of capabilities by means of a service. [SWIM-SERV-060]", "$ref": "#/$defs/ServiceProvider" }, "serviceCategorisation": { "description": "A taxonomy used to classify a service by the type of service provided or by some other technological or architectural solution. [SWIM-SERV-090, SWIM-SERV-100, SWIM-SERV-110, SWIM-SERV-210]", "$ref": "#/$defs/ServiceCategorisation" }, "generalDescription": { "description": "Description of the service in terms of what it provides, the purpose and under which conditions and quality levels the service is provided. [SWIM-SERV-080, SWIM-SERV-130, SWIM-SERV-140, SWIM-SERV-150, SWIM-SERV-160, SWIM-SERV-180, SWIM-SERV-200, SWIM-SERV-330, SWIM-SERV-350]", "$ref": "#/$defs/ServiceGeneralDescription" }, "technicalDescription": { "description": "Description of the technical aspects of the service including data structures, interface and operations behaviour, security mechanisms and technical constraints. Code examples may be also provided to exemplify the usage of the service interfaces to the consumers [SWIM-SERV-170, SWIM-SERV-220, SWIM-SERV-230, SWIM-SERV-340]", "$ref": "#/$defs/ServiceTechnicalDescription" }, "references": { "description": "References to complementary documents that provide additional details about the service. [SWIM-SERV-010, SWIM-SERV-120]", "$ref": "#/$defs/ServiceDescriptionReferences" }, "serviceInterface": { "description": "The means by which the underlying capabilities of a service are accessed. [SWIM-SERV-240, SWIM-SERV-250, SWIM-SERV-270, SWIM-SERV-280, SWIM-SERV- 320, SWIM-DEFN-240, SWIM-DEFN-250, SWIM-DEFN-270, SWIM-DEFN-280, SWIM-DEFN-320]", "type": "array", "items": { "$ref": "#/$defs/ServiceInterfaceItem" }, "minItems": 1 } }, "required": [ "title", "referenceDate", "edition", "serviceIdentification", "serviceProvider", "serviceCategorisation", "generalDescription", "technicalDescription", "serviceInterface" ] } ] }, "CodeSample": { "description": "Information useful for exemplifying how to consume the service. As a minimum, it can be provided either as a decription and code or a description and a reference [SWIM-SERV-340]", "type": "object", "additionalProperties": false, "oneOf": [ { "required": [ "description", "code" ] }, { "required": [ "description", "reference" ] } ], "properties": { "description": { "description": "A description of the code example. [SWIM-SERV-340]", "type": "string", "minLength": 1 }, "code": { "description": "The code snippet illustrating the use of a service interface. [SWIM-SERV-340]", "type": "string", "minLength": 1 }, "language": { "description": "The programming language used in the code example.", "type": "string" }, "reference": { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/Reference" } } }, "ServiceDefinitionReference":{ "description": "A reference to a Service Definition to which this service is conformant. [SWIM-SERV-120]", "type": "object", "additionalProperties": false, "required": [ "name", "edition" ], "properties": { "name": { "description": "The name of the Service Definition. [SWIM-SERV-120]", "type": "string", "minLength": 1 }, "edition": { "description": "The edition of the Service Definition. [SWIM-SERV-120]", "type": "string", "minLength": 1 }, "url": { "description": "The url where the Service Definition is published. [SWIM-SERV-120]", "type": "string", "format": "uri" } } }, "ServiceProvider": { "description": "An entity (person or organization) that offers the use of capabilities by means of a service. [SWIM-SERV-060]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceProvider" }, { "properties": { "pointOfContact": { "description": "List of persons or groups within the organization, suitable for making a human contact for any purpose. [SWIM-SERV-070]", "type": "array", "items": { "$ref": "#/$defs/PointOfContact" }, "minItems": 1 } } } ], "unevaluatedProperties": false }, "ServiceInterfaceItem": { "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceInterface" }, { "required": [ "name", "description", "provisionSide", "operations", "serviceInterfaceBinding", "networkInterfaceBinding", "endpoints" ] } ], "unevaluatedProperties": false }, "PointOfContact": { "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/BasePointOfContact" } ], "required": ["role"] }, "ServiceCategorisation": { "description": "A taxonomy used to classify a service by the type of service provided or by some other technological or architectural solution. [SWIM-SERV-090, SWIM-SERV-100, SWIM-SERV-110, SWIM-SERV-210]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceCategorisation" }, { "type": "object", "properties": { "lifeCycle": { "description": "A classification of services based on their current, past, or future availability for provisioning. [SWIM-SERV-110]", "type": "array", "items": { "type": "object", "required": [ "lifeCycleStage" ], "properties": { "lifeCycleStage": { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/reference-code-types.schema.json#/$defs/CodeLifeCycleStepType" }, "from": { "type": "string", "format": "date" }, "to": { "type": "string", "format": "date" } } }, "minItems": 1 } }, "required": [ "informationCategory", "applicationMessageExchangePattern", "lifeCycle", "geospatialCategorisation" ] } ], "unevaluatedProperties": false }, "ServiceDescriptionReferences": { "description": "References to complementary documents that provide additional details about the service. [SWIM-SERV-010, SWIM-SERV-120]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceReferences" }, { "type": "object", "properties": { "serviceDefinition":{ "description": "The Service Definition to which this service if conformant, if any.", "$ref": "#/$defs/ServiceDefinitionReference" } } } ], "unevaluatedProperties": false }, "ServiceGeneralDescription": { "description": "Description of the service in terms of what it provides, the purpose and under which conditions and quality levels the service is provided. [SWIM-SERV-080, SWIM-SERV-130, SWIM-SERV-140, SWIM-SERV-150, SWIM-SERV-160, SWIM-SERV-180, SWIM-SERV-200, SWIM-SERV-330, SWIM-SERV-350]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceGeneralDescription" }, { "type": "object", "properties" : { "dateInOperation": { "description": "Date at which the service went into operation or is planned to become operational.", "type": "string", "format": "date" }, "serviceSupport": { "description": "Service support point of contact information. [SWIM-SERV-080]", "type": "array", "items": { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/BasePointOfContact" }, "minItems": 1 }, "validation": { "description": "Activity whereby a service is checked for conformance with the service objectives and requirements. [SWIM-SERV-200]", "type": "array", "items": { "$ref": "#/$defs/ValidationOfService" }, "minItems": 1 } }, "required": [ "dateInOperation", "serviceSupport", "accessAndUseConditions" ] } ], "unevaluatedProperties": false }, "ServiceIdentification": { "description": "Information for identifying the service. [SWIM-SERV-040]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceIdentification" }, { "type": "object", "properties": { "version": { "description": "The version of the information service. [SWIM-SERV-040]", "type": "string", "minLength": 1 } }, "required": [ "name", "version" ] } ], "unevaluatedProperties": false }, "ServiceTechnicalDescription": { "description": "Description of the technical aspects of the service including data structures, interface and operations behaviour, security mechanisms and technical constraints. Code examples may be also provided to exemplify the usage of the service interfaces to the consumers [SWIM-SERV-170, SWIM-SERV-220, SWIM-SERV-230, SWIM-SERV-340]", "allOf": [ { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/ServiceTechnicalDescription" }, { "type": "object", "properties": { "codeExamples": { "description": "Optional examples of code snippets illustrating the use of the service interfaces. [SWIM-SERV-340]", "type": "array", "items": { "$ref": "#/$defs/CodeSample" }, "minItems": 1 } } } ], "unevaluatedProperties": false }, "ValidationOfService": { "description": "An activity whereby a service is checked for conformance with the service objectives and requirements. Note: the service objectives and requirements are captured in the service overview and the technical specifications. If the service has not been validated, this should be indicated in the 'type' property indicating NOT_VALIDATED. If it has been validated, a description of the validation activities (or a reference to external documentation where this info may be found) should be provided [SWIM-SERV-200]", "type": "object", "additionalProperties": false, "required": [ "type" ], "if":{ "properties": { "type": { "const": "NOT_VALIDATED" } } }, "then": {}, "else": { "description": "if type is different from 'NOT_VALIDATED', a description of the validation performed or at least a reference to it must be provided", "anyOf": [ {"required": ["description"]}, {"required": ["reference"]} ] }, "properties": { "type": { "description": "The validation method used. [SWIM-SERV-200]", "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/reference-code-types.schema.json#/$defs/CodeServiceValidationType" }, "description": { "description": "The description of the service validation. Including: summary of validation steps, results achieved and pointer to validation evidence. [SWIM-SERV-200]", "type": "object", "additionalProperties": false, "properties": { "validationSteps": { "description": "Summary of the validation steps performed. [SWIM-SERV-200]", "type": "string" }, "validationResults": { "description": "The results achieved on the validation. [SWIM-SERV-200]", "type": "string" }, "evidence": { "description": "Where or how to obtain the available evidence of the validation. [SWIM-SERV-200]", "type": "string" } } }, "reference": { "$ref": "https://raw.githubusercontent.com/eurocontrol-swim/service-metadata-schema/refs/heads/main/common/v1.0/common-types.schema.json#/$defs/Reference" } } } } }