{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://www.omg.org/spec/DDS-JSON/20190601/dds-json_qos.schema.json",
    "title": "DDS-JSON: Building Block QoS",
    "description": "This schema defines the syntax to represent DDS QoS in JSON.",
    "definitions": {
        "destinationOrderKind": {
            "enum": [
                "BY_RECEPTION_TIMESTAMP_DESTINATIONORDER_QOS",
                "BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS"
            ],
            "type": "string"
        },
        "durabilityKind": {
            "enum": [
                "VOLATILE_DURABILITY_QOS",
                "TRANSIENT_LOCAL_DURABILITY_QOS",
                "TRANSIENT_DURABILITY_QOS",
                "PERSISTENT_DURABILITY_QOS"
            ],
            "type": "string",
            "default": "VOLATILE_DURABILITY_QOS"
        },
        "historyKind": {
            "enum": [
                "KEEP_LAST_HISTORY_QOS",
                "KEEP_ALL_HISTORY_QOS"
            ],
            "type": "string",
            "default": "KEEP_LAST_HISTORY_QOS"
        },
        "livelinessKind": {
            "enum": [
                "AUTOMATIC_LIVELINESS_QOS",
                "MANUAL_BY_PARTICIPANT_LIVELINESS_QOS",
                "MANUAL_BY_TOPIC_LIVELINESS_QOS"
            ],
            "type": "string",
            "default": "AUTOMATIC_LIVELINESS_QOS"
        },
        "presentationAccessScopeKind": {
            "enum": [
                "INSTANCE_PRESENTATION_QOS",
                "TOPIC_PRESENTATION_QOS",
                "GROUP_PRESENTATION_QOS"
            ],
            "type": "string",
            "default": "INSTANCE_PRESENTATION_QOS"
        },
        "reliabilityKind": {
            "enum": [
                "BEST_EFFORT_RELIABILITY_QOS",
                "RELIABLE_RELIABILITY_QOS"
            ],
            "type": "string"
        },
        "ownershipKind": {
            "enum": [
                "SHARED_OWNERSHIP_QOS",
                "EXCLUSIVE_OWNERSHIP_QOS"
            ],
            "type": "string"
        },
        "elementName": {
            "type": "string",
            "pattern": "((::)?[a-zA-Z0-9_.])+"
        },
        "elementNameReference": {
            "type": "string",
            "pattern": "((::)?[a-zA-Z0-9_.])+"
        },
        "topicNameFilter": {
            "type": "string",
            "pattern": "([a-zA-Z0-9/*_.:])+"
        },
        "nonNegativeInteger_Duration_SEC": {
            "type": [
                "integer",
                "string"
            ],
            "pattern": "DURATION_INFINITY|DURATION_INFINITE_SEC",
            "minimum": 0,
            "examples": [
                0,
                1,
                "DURATION_INFINITY",
                "DURATION_INFINITE_SEC"
            ]
        },
        "nonNegativeInteger_Duration_NSEC": {
            "type": [
                "integer",
                "string"
            ],
            "pattern": "DURATION_INFINITY|DURATION_INFINITE_NSEC",
            "minimum": 0,
            "examples": [
                0,
                1,
                "DURATION_INFINITY",
                "DURATION_INFINITE_NSEC"
            ]
        },
        "positiveInteger_UNLIMITED": {
            "type": [
                "integer",
                "string"
            ],
            "pattern": "LENGTH_UNLIMITED",
            "minimum": 1,
            "examples": [
                1,
                2,
                "LENGTH_UNLIMITED"
            ]
        },
        "stringSeq": {
            "type": "object",
            "properties": {
                "element": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "minItems": 0
                }
            }
        },
        "entityFactoryQosPolicy": {
            "type": "object",
            "properties": {
                "autoenable_created_entities": {
                    "type": "boolean",
                    "default": true
                }
            }
        },
        "groupDataQosPolicy": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "string"
                }
            }
        },
        "ownershipStrengthQosPolicy": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "integer",
                    "minimum": 1
                }
            }
        },
        "topicDataQosPolicy": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "string"
                }
            }
        },
        "transportPriorityQosPolicy": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "integer",
                    "minimum": 1
                }
            }
        },
        "userDataQosPolicy": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "string"
                }
            }
        },
        "writerDataLifecycleQosPolicy": {
            "type": "object",
            "properties": {
                "autodispose_unregistered_instances": {
                    "type": "boolean",
                    "default": true
                }
            }
        },
        "duration": {
            "type": "object",
            "properties": {
                "sec": {
                    "$ref": "#/definitions/nonNegativeInteger_Duration_SEC"
                },
                "nanosec": {
                    "$ref": "#/definitions/nonNegativeInteger_Duration_NSEC"
                }
            }
        },
        "deadlineQosPolicy": {
            "type": "object",
            "properties": {
                "period": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "destinationOrderQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/destinationOrderKind"
                }
            }
        },
        "durabilityQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/durabilityKind"
                }
            }
        },
        "durabilityServiceQosPolicy": {
            "type": "object",
            "properties": {
                "service_cleanup_delay": {
                    "$ref": "#/definitions/duration"
                },
                "history_kind": {
                    "$ref": "#/definitions/historyKind"
                },
                "max_samples": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "max_instances": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "max_samples_per_instance": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "history_depth": {
                    "type": "integer",
                    "minimum": 1
                }
            }
        },
        "historyQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/historyKind"
                },
                "depth": {
                    "type": "integer",
                    "minimum": 1,
                    "default": 1
                }
            }
        },
        "latencyBudgetQosPolicy": {
            "type": "object",
            "properties": {
                "duration": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "lifespanQosPolicy": {
            "type": "object",
            "properties": {
                "duration": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "livelinessQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/livelinessKind"
                },
                "lease_duration": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "ownershipQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/ownershipKind"
                }
            }
        },
        "partitionQosPolicy": {
            "type": "object",
            "properties": {
                "name": {
                    "$ref": "#/definitions/stringSeq"
                }
            }
        },
        "presentationQosPolicy": {
            "type": "object",
            "properties": {
                "access_scope": {
                    "$ref": "#/definitions/presentationAccessScopeKind"
                },
                "coherent_access": {
                    "type": "boolean",
                    "default": false
                },
                "ordered_access": {
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "readerDataLifecycleQosPolicy": {
            "type": "object",
            "properties": {
                "autopurge_nowriter_samples_delay": {
                    "$ref": "#/definitions/duration"
                },
                "autopurge_disposed_samples_delay": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "reliabilityQosPolicy": {
            "type": "object",
            "properties": {
                "kind": {
                    "$ref": "#/definitions/reliabilityKind"
                },
                "max_blocking_time": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "resourceLimitsQosPolicy": {
            "type": "object",
            "properties": {
                "max_samples": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "max_instances": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "max_samples_per_instance": {
                    "$ref": "#/definitions/positiveInteger_UNLIMITED"
                },
                "initial_samples": {
                    "type": "integer",
                    "minimum": 1
                },
                "initial_instances": {
                    "type": "integer",
                    "minimum": 1
                }
            }
        },
        "timeBasedFilterQosPolicy": {
            "type": "object",
            "properties": {
                "minimum_separation": {
                    "$ref": "#/definitions/duration"
                }
            }
        },
        "datawriterQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "durability": {
                    "$ref": "#/definitions/durabilityQosPolicy"
                },
                "durability_service": {
                    "$ref": "#/definitions/durabilityServiceQosPolicy"
                },
                "deadline": {
                    "$ref": "#/definitions/deadlineQosPolicy"
                },
                "latency_budget": {
                    "$ref": "#/definitions/latencyBudgetQosPolicy"
                },
                "liveliness": {
                    "$ref": "#/definitions/livelinessQosPolicy"
                },
                "reliability": {
                    "$ref": "#/definitions/reliabilityQosPolicy"
                },
                "destination_order": {
                    "$ref": "#/definitions/destinationOrderQosPolicy"
                },
                "history": {
                    "$ref": "#/definitions/historyQosPolicy"
                },
                "resource_limits": {
                    "$ref": "#/definitions/resourceLimitsQosPolicy"
                },
                "transport_priority": {
                    "$ref": "#/definitions/transportPriorityQosPolicy"
                },
                "lifespan": {
                    "$ref": "#/definitions/lifespanQosPolicy"
                },
                "user_data": {
                    "$ref": "#/definitions/userDataQosPolicy"
                },
                "ownership": {
                    "$ref": "#/definitions/ownershipQosPolicy"
                },
                "ownership_strength": {
                    "$ref": "#/definitions/ownershipStrengthQosPolicy"
                },
                "writer_data_lifecycle": {
                    "$ref": "#/definitions/writerDataLifecycleQosPolicy"
                }
            },
            "type": "object"
        },
        "datawriterQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/datawriterQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        },
                        "topic_filter": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "datawriterQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/datawriterQosNamed"
            },
            "additionalItems": false
        },
        "datareaderQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "durability": {
                    "$ref": "#/definitions/durabilityQosPolicy"
                },
                "deadline": {
                    "$ref": "#/definitions/deadlineQosPolicy"
                },
                "latency_budget": {
                    "$ref": "#/definitions/latencyBudgetQosPolicy"
                },
                "liveliness": {
                    "$ref": "#/definitions/livelinessQosPolicy"
                },
                "reliability": {
                    "$ref": "#/definitions/reliabilityQosPolicy"
                },
                "destination_order": {
                    "$ref": "#/definitions/destinationOrderQosPolicy"
                },
                "history": {
                    "$ref": "#/definitions/historyQosPolicy"
                },
                "resource_limits": {
                    "$ref": "#/definitions/resourceLimitsQosPolicy"
                },
                "user_data": {
                    "$ref": "#/definitions/userDataQosPolicy"
                },
                "ownership": {
                    "$ref": "#/definitions/ownershipQosPolicy"
                },
                "time_based_filter": {
                    "$ref": "#/definitions/timeBasedFilterQosPolicy"
                },
                "reader_data_lifecycle": {
                    "$ref": "#/definitions/readerDataLifecycleQosPolicy"
                }
            },
            "type": "object"
        },
        "datareaderQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/datareaderQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        },
                        "topic_filter": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "datareaderQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/datareaderQosNamed"
            },
            "additionalItems": false
        },
        "topicQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "topic_data": {
                    "$ref": "#/definitions/topicDataQosPolicy"
                },
                "durability": {
                    "$ref": "#/definitions/durabilityQosPolicy"
                },
                "durability_service": {
                    "$ref": "#/definitions/durabilityServiceQosPolicy"
                },
                "deadline": {
                    "$ref": "#/definitions/deadlineQosPolicy"
                },
                "latency_budget": {
                    "$ref": "#/definitions/latencyBudgetQosPolicy"
                },
                "liveliness": {
                    "$ref": "#/definitions/livelinessQosPolicy"
                },
                "reliability": {
                    "$ref": "#/definitions/reliabilityQosPolicy"
                },
                "destination_order": {
                    "$ref": "#/definitions/destinationOrderQosPolicy"
                },
                "history": {
                    "$ref": "#/definitions/historyQosPolicy"
                },
                "resource_limits": {
                    "$ref": "#/definitions/resourceLimitsQosPolicy"
                },
                "transport_priority": {
                    "$ref": "#/definitions/transportPriorityQosPolicy"
                },
                "lifespan": {
                    "$ref": "#/definitions/lifespanQosPolicy"
                },
                "ownership": {
                    "$ref": "#/definitions/ownershipQosPolicy"
                }
            },
            "type": "object"
        },
        "topicQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/topicQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        },
                        "topic_filter": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "topicQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/topicQosNamed"
            },
            "additionalItems": false
        },
        "subscriberQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "presentation": {
                    "$ref": "#/definitions/presentationQosPolicy"
                },
                "partition": {
                    "$ref": "#/definitions/partitionQosPolicy"
                },
                "group_data": {
                    "$ref": "#/definitions/groupDataQosPolicy"
                },
                "entity_factory": {
                    "$ref": "#/definitions/entityFactoryQosPolicy"
                }
            },
            "type": "object"
        },
        "subscriberQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/subscriberQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "subscriberQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/subscriberQosNamed"
            },
            "additionalItems": false
        },
        "publisherQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "presentation": {
                    "$ref": "#/definitions/presentationQosPolicy"
                },
                "partition": {
                    "$ref": "#/definitions/partitionQosPolicy"
                },
                "group_data": {
                    "$ref": "#/definitions/groupDataQosPolicy"
                },
                "entity_factory": {
                    "$ref": "#/definitions/entityFactoryQosPolicy"
                }
            },
            "type": "object"
        },
        "publisherQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/publisherQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "publisherQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/publisherQosNamed"
            },
            "additionalItems": false
        },
        "domainparticipantQos": {
            "properties": {
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "user_data": {
                    "$ref": "#/definitions/userDataQosPolicy"
                },
                "entity_factory": {
                    "$ref": "#/definitions/entityFactoryQosPolicy"
                }
            },
            "type": "object"
        },
        "domainparticipantQosNamed": {
            "allOf": [
                {
                    "$ref": "#/definitions/domainparticipantQos"
                },
                {
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/elementName"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "domainparticipantQosSeq": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/domainparticipantQosNamed"
            },
            "additionalItems": false
        },
        "qosProfile": {
            "type": "object",
            "properties": {
                "name": {
                    "$ref": "#/definitions/elementName"
                },
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "domain_participant_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/domainparticipantQos"
                        },
                        {
                            "$ref": "#/definitions/domainparticipantQosSeq"
                        }
                    ]
                },
                "topic_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/topicQos"
                        },
                        {
                            "$ref": "#/definitions/topicQosSeq"
                        }
                    ]
                },
                "publisher_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/publisherQos"
                        },
                        {
                            "$ref": "#/definitions/publisherQosSeq"
                        }
                    ]
                },
                "subscriber_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/subscriberQos"
                        },
                        {
                            "$ref": "#/definitions/subscriberQosSeq"
                        }
                    ]
                },
                "datawriter_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/datawriterQos"
                        },
                        {
                            "$ref": "#/definitions/datawriterQosSeq"
                        }
                    ]
                },
                "datareader_qos": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/datareaderQos"
                        },
                        {
                            "$ref": "#/definitions/datareaderQosSeq"
                        }
                    ]
                }
            },
            "required": [
                "name"
            ],
            "additionalProperties": false
        },
        "qosLibrary": {
            "type": "object",
            "properties": {
                "name": {
                    "$ref": "#/definitions/elementName"
                },
                "base_name": {
                    "$ref": "#/definitions/elementNameReference"
                },
                "qos_profiles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/qosProfile"
                    },
                    "additionalItems": false
                },
                "domain_participant_qos": {
                    "$ref": "#/definitions/domainparticipantQosSeq"
                },
                "topic_qos": {
                    "$ref": "#/definitions/topicQosSeq"
                },
                "publisher_qos": {
                    "$ref": "#/definitions/publisherQosSeq"
                },
                "subscriber_qos": {
                    "$ref": "#/definitions/subscriberQosSeq"
                },
                "datawriter_qos": {
                    "$ref": "#/definitions/datawriterQosSeq"
                },
                "datareader_qos": {
                    "$ref": "#/definitions/datareaderQosSeq"
                }
            },
            "required": [
                "name"
            ],
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "qos_library": {
            "$ref": "#/definitions/qosLibrary"
        }
    },
    "additionalProperties": false
}