{
    "$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$vocabulary": {
        "https://json-schema.org/draft/2020-12/vocab/core": true,
        "https://json-schema.org/draft/2020-12/vocab/applicator": true,
        "https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
        "https://json-schema.org/draft/2020-12/vocab/validation": true,
        "https://json-schema.org/draft/2020-12/vocab/meta-data": true,
        "https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
        "https://json-schema.org/draft/2020-12/vocab/content": true
    },
    "$id": "https://www.medbiq.org/standards/virtual-patient",
    "title": "Data Availability Model",
    "description": "Schema for MedBiq Data Availability Model",
    "type": "object",
    "$defs": {
        "NonNullStringType": {
            "$ref": "http://medbiq.pixelbytellc.com/common.schema.json#/$defs/NonNullStringType"
        },
        "DisplayType": {
            "type": "string",
            "enum": ["immediately", "ontrigger", "delayed", "ifrequested"]
        },
        "ItemPathType": {
            "type": "string",
            "pattern": "^\\s*(/VirtualPatientData/.*|/manifest/resources/resource\\[@identifier\\s?=\\s?'[^']+'\\]\\s*)$"
        },
        "DAMNodePathType": {
            "type": "string",
            "pattern": "^\\s*/DataAvailabilityModel/DAMNode\\[@id\\s?=\\s?'[^']+'\\]\\s*$"
        },
        "DataAvailabilityModelType": {
            "type": "object",
            "properties": {
                "DAMNode": {
                    "type": "array",
                    "$ref": "#/$defs/DAMNodeType"
                },
                "XtensibleInfo": {
                    "$ref": "#/$defs/XtensibleInfoType"
                }
            },
            "required": ["DAMNode"]
        },
        "DAMNodeType": {
            "type": "object",
            "properties": {
                "DAMNodeLabel": {
                    "$ref": "#/$defs/NonNullStringType"
                },
                "DAMNodeItem": {
                    "type": "array",
                    "$ref": "#/$defs/DAMNodeItemType"
                },
                "id": {
                    "type": "string"
                }
            },
            "required": ["DAMNodeItem", "id"]
        },
        "XtensibleInfoType": {
            "type": "object",
            "properties": {
                "other": {
                    "type": "array",
                    "items": {
                        "type": "object"
                    },
                    "additionalProperties": true
                }
            }
        },
        "DAMNodeItemType": {
            "type": "object",
            "properties": {
                "ItemPath": {
                    "$ref": "#/$defs/ItemPathType"
                },
                "AlternativePath": {
                    "$ref": "#/$defs/ItemPathType"
                },
                "ItemComment": {
                    "$ref": "#/$defs/DAMNodePathType"
                },
                "DAMNodePath": {
                    "$ref": "#/$defs/DAMNodePathType"
                },
                "ItemOrder": {
                    "type": "integer"
                },
                "display": {
                    "$ref": "#/$defs/DisplayType",
                    "default": "immediately"
                }
            },
            "required": ["ItemPath"]
        }
    },
    "properties": {
        "DataAvailabilityModel": {
            "$ref": "#/$defs/DataAvailabilityModelType"
        }
    }
}
