{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "additionalProperties": false,
    "definitions": {
        "annotations": {
            "oneOf": [
                {
                    "$ref": "#/definitions/printf_annotation"
                },
                {
                    "$ref": "#/definitions/list_annotation"
                }
            ]
        },
        "list_annotation": {
            "additionalProperties": false,
            "properties": {
                "annotationProperty": {
                    "description": "A string corresponding to the rdfs:label of an owl annotation property. If the annotation property has no label, the shortForm ID should be used. The annotation property must be listed in the annotation property dictionary.'\n",
                    "type": "string"
                },
                "value": {
                    "description": "A single list variable (list_var or data_list_var).  Each item in this list  should be used to generate a separate annotation axiom.\n",
                    "type": "string"
                }
            },
            "required": [
                "annotationProperty",
                "value"
            ],
            "type": "object"
        },
        "list_annotation_obo": {
            "additionalProperties": false,
            "properties": {
                "value": {
                    "description": "A single list variable (list_var or data_list_var).  Each item in this list  should be used to generate a separate annotation axiom.\n",
                    "type": "string"
                },
                "xrefs": {
                    "description": "Takes the name of a single data_list_var specifying a list of database  cross references. Use of this field should add the same xref set to all  annotation axioms generated.\n",
                    "mapping": "oboInOwl:hasDbXref",
                    "type": "string"
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "opa": {
            "additionalProperties": false,
            "properties": {
                "annotations": {
                    "items": {
                        "$ref": "#/definitions/annotations"
                    },
                    "type": "array"
                },
                "edge": {
                    "description": "A triple specified as an ordered array with 3 elements [subject, rel, object] * rel must be the quoted name of a relation from the relations (object property) dictionary. * subject and object must be the name of an individual specified in the nodes field.\n",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 3,
                    "minItems": 3,
                    "type": "array"
                },
                "not": {
                    "description": "Optional field for negated OPAs",
                    "type": "boolean"
                }
            },
            "required": [
                "edge"
            ],
            "type": "object"
        },
        "printf_annotation": {
            "additionalProperties": false,
            "properties": {
                "annotationProperty": {
                    "description": "A string corresponding to the rdfs:label of an owl annotation property. If the annotation property has no label, the shortForm ID should be used. The annotation property must be listed in the annotation property dictionary.'\n",
                    "type": "string"
                },
                "annotations": {
                    "items": {
                        "$ref": "#/definitions/annotations"
                    },
                    "type": "array"
                },
                "text": {
                    "description": "A print format string.",
                    "type": "string"
                },
                "vars": {
                    "description": "An ordered list of variables for substitution into the accompanying print format string. Each entry must correspond to the name of a variable specified in either the 'vars' field or the data_var field of the pattern. Where an OWL entity is specified, the label for the OWL entity should be used in the substitution.  An empty var list can be specified simply by leaving this field out.\n",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "annotationProperty",
                "text"
            ],
            "type": "object"
        },
        "printf_annotation_obo": {
            "additionalProperties": false,
            "properties": {
                "annotations": {
                    "items": {
                        "$ref": "#/definitions/annotations"
                    },
                    "type": "array"
                },
                "text": {
                    "description": "A print format string.",
                    "type": "string"
                },
                "vars": {
                    "description": "An ordered list of variables for substitution into the accompanying print format string. Each entry must correspond to the name of a variable specified in either the 'vars' field or the data_var field of the pattern. Where an OWL entity is specified, the label for the OWL entity should be used in the substitution.\n",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "xrefs": {
                    "description": "Takes the name of a single data_list_var specifying a list of database  cross references.\n",
                    "mapping": "oboInOwl:hasDbXref",
                    "type": "string"
                }
            },
            "required": [
                "text",
                "vars"
            ],
            "type": "object"
        },
        "printf_owl": {
            "additionalProperties": false,
            "properties": {
                "annotations": {
                    "items": {
                        "$ref": "#/definitions/annotations"
                    },
                    "type": "array"
                },
                "axiom_type": {
                    "description": "OWL axiom type expressed as manchester syntax: equivalentTo, subClassOf, disjointWith. GCI  - for general class inclusion axioms, is also valid (although missing from manchester syntax.) This specifies the axiom type to be generated from the text following substitution.'\n",
                    "enum": [
                        "equivalentTo",
                        "subClassOf",
                        "disjointWith",
                        "GCI"
                    ],
                    "type": "string"
                },
                "text": {
                    "description": "A print format string in OWL Manchester syntax. Each entry must correspond to an entry in o the name of a var in the var field of the pattern. Entries in single quotes must correspond to the labels of entries in owl_entity dictionaries (classes, relations, dataProperties)    \n",
                    "type": "string"
                },
                "vars": {
                    "description": "An ordered list of variables for substitution into the accompanying print format string. Each entry must correspond to the name of a variable specified in either the 'vars' field or the data_var field of the pattern.   An empty var list can be specified simply by leaving this field out.\n",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "axiom_type",
                "text",
                "vars"
            ],
            "type": "object"
        },
        "printf_owl_convenience": {
            "additionalProperties": false,
            "properties": {
                "annotations": {
                    "items": {
                        "$ref": "#/definitions/annotations"
                    },
                    "type": "array"
                },
                "text": {
                    "description": "A print format string in OWL Manchester syntax. Each entry must correspond to an entry in o the name of a var in the var field of the pattern. Entries in single quotes must correspond to the labels of entries in owl_entity dictionaries (classes, relations, dataProperties)\n",
                    "type": "string"
                },
                "vars": {
                    "description": "An ordered list of variables for substitution into the accompanying print format string. Each entry must correspond to the name of a variable\n specified in either the 'vars' field or the data_var field of the pattern.\n",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "text",
                "vars"
            ],
            "type": "object"
        },
        "regex_sub": {
            "additionalProperties": false,
            "properties": {
                "in": {
                    "description": "name of input var",
                    "type": "string"
                },
                "match": {
                    "description": "perl style regex match",
                    "type": "string"
                },
                "out": {
                    "description": "Name of output var.  If input var specified an OWL entity then  readable identifier is used as input to substitution\n",
                    "type": "string"
                },
                "sub": {
                    "description": "perl style regex sub.  May include backreferences.",
                    "type": "string"
                }
            },
            "required": [
                "in",
                "out",
                "match",
                "sub"
            ],
            "type": "object"
        }
    },
    "properties": {
        "GCI": {
            "$ref": "#/definitions/printf_owl_convenience"
        },
        "annotationProperties": {
            "description": "A dictionary of OWL annotation properties key : label; value : short form id",
            "type": "object"
        },
        "annotations": {
            "items": {
                "$ref": "#/definitions/printf_annotation"
            },
            "type": "array"
        },
        "base_IRI": {
            "description": "Specifies the base IRI to be used to generate new classes.",
            "type": "string"
        },
        "broad_synonym": {
            "$ref": "#/definitions/list_annotation_obo",
            "mapping": "oboInOwl:hasBroadSynonym"
        },
        "classes": {
            "description": "A dictionary of OWL classes. key :label; value : short form id",
            "type": "object"
        },
        "comment": {
            "$ref": "#/definitions/printf_annotation_obo",
            "mapping": "rdfs:comment"
        },
        "dataProperties": {
            "description": "A dictionary of OWL data properties key : label; value : short form id",
            "type": "object"
        },
        "data_list_vars": {
            "description": "A dictionary of variables rrefering to lists of some specified OWL data-types. Key = variable name, value = variable range of all items in list,  specified as a valid OWL data-type.\n"
        },
        "data_vars": {
            "description": "A dictionary of variables ranging over OWL data-types. Key = variable name, value = variable range specified as a valid OWL data-type.\n",
            "type": "object"
        },
        "def": {
            "$ref": "#/definitions/printf_annotation_obo",
            "mapping": "obo:IAO_0000115"
        },
        "description": {
            "description": "A free text description of the pattern.  Must be UTF-8 encoded.",
            "type": "string"
        },
        "disjointWith": {
            "$ref": "#/definitions/printf_owl_convenience"
        },
        "equivalentTo": {
            "$ref": "#/definitions/printf_owl_convenience"
        },
        "exact_synonym": {
            "$ref": "#/definitions/list_annotation_obo",
            "mapping": "oboInOwl:hasExactSynonym"
        },
        "generated_broad_synonyms": {
            "description": "An OBO convenience field to allow the specification of broad synonyms generated by interpolation of OWL entity names into printf text. Each entry may be annotated. \n",
            "items": {
                "$ref": "#/definitions/printf_annotation_obo",
                "mapping": "oboInOwl:hasBroadSynonym"
            },
            "type": "array"
        },
        "generated_narrow_synonyms": {
            "description": "An OBO convenience field to allow the specification of narrow synonyms generated by interpolation of OWL entity names into printf text. Each entry may be annotated. \n",
            "items": {
                "$ref": "#/definitions/printf_annotation_obo",
                "mapping": "oboInOwl:hasNarrowSynonym"
            },
            "type": "array"
        },
        "generated_related_synonyms": {
            "description": "An OBO convenience field to allow the specification of related synonyms generated by interpolation of OWL entity names into printf text. Each entry may be annotated. \n",
            "items": {
                "$ref": "#/definitions/printf_annotation_obo",
                "mapping": "oboInOwl:hasBroadSynonym"
            },
            "type": "array"
        },
        "generated_synonyms": {
            "description": "An OBO convenience field to allow the specification of exact synonyms generated by interpolation of OWL entity names into printf text. Each entry may be annotated. \n",
            "items": {
                "$ref": "#/definitions/printf_annotation_obo",
                "mapping": "oboInOwl:hasExactSynonym"
            },
            "type": "array"
        },
        "instance_graph": {
            "additionalProperties": false,
            "properties": {
                "edges": {
                    "items": {
                        "$ref": "#/definitions/opa"
                    },
                    "type": "array"
                },
                "nodes": {
                    "description": "Key = name of individual within this pattern doc Value = Type of individual specified using either  the quoted name of a class in the class dictionary of this pattern or a var name.  This field does not support typing via  anonymous class expressions\n",
                    "type": "object"
                }
            },
            "required": [
                "nodes",
                "edges"
            ],
            "type": "object"
        },
        "list_vars": {
            "description": "A dictionary of variables refering to lists of owl classes. Key = variable name, value = variable range of items in list specified as a valid OWL data-type.\n",
            "type": "object"
        },
        "logical_axioms": {
            "items": {
                "$ref": "#/definitions/printf_owl"
            },
            "type": "array"
        },
        "name": {
            "$ref": "#/definitions/printf_annotation_obo",
            "mapping": "rdfs:label"
        },
        "namespace": {
            "$ref": "#/definitions/printf_annotation_obo",
            "mapping": "oboInOwl:hasOBONamespace"
        },
        "narrow_synonym": {
            "$ref": "#/definitions/list_annotation_obo",
            "mapping": "oboInOwl:hasNarrowSynonym"
        },
        "objectProperties": {
            "description": "A dictionary of OWL object properties. key : label; value : short form id",
            "type": "object"
        },
        "pattern_name": {
            "description": "The name of the pattern.  This must be an ASCII string with no spaces. The only special characters allowed are '_' and '-'. By convention, this is used as the file name of the pattern - with an appropriate extension.\n",
            "type": "string"
        },
        "readable_identifiers": {
            "description": "A list of annotation properties used as naming fields, in order of preference.",
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "related_synonym": {
            "$ref": "#/definitions/list_annotation_obo",
            "mapping": "oboInOwl:hasRelatedSynonym"
        },
        "relations": {
            "description": "A dictionary of OWL object properties. key : label; value : short form id",
            "type": "object"
        },
        "subClassOf": {
            "$ref": "#/definitions/printf_owl_convenience"
        },
        "substitutions": {
            "items": {
                "$ref": "#/definitions/regex_sub"
            },
            "type": "array"
        },
        "vars": {
            "description": "A dictionary of variables ranging over OWL classes.   Key = variable name, value = variable range as manchester syntax string.\n",
            "type": "object"
        },
        "xref": {
            "$ref": "#/definitions/list_annotation_obo",
            "mapping": "oboInOwl:hasDbXref"
        }
    },
    "title": "DOSDP",
    "type": "object"
}