{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$comment": "This schema uses 'xbrlType' as a custom annotation keyword to provide model-specific type names (e.g., QName, SQName) that are more precise than the JSON type. Validators ignore this keyword; it is consumed only by editor tooling.",
    "title": "XBRL Taxonomy Model",
    "type": "object",
    "properties": {
        "$schema": {
            "type": "string"
        },
        "documentInfo": {
            "type": "object",
            "properties": {
                "documentType": {
                    "type": "string",
                    "enum": [
                        "https://xbrl.org/PWD/2026-09-01/labelBundle",
                        "https://xbrl.org/PWD/2026-09-01/referenceBundle",
                        "https://xbrl.org/PWD/2026-09-01/compiled",
                        "https://xbrl.org/PWD/2026-09-01/module"
                    ],
                    "description": "A URI representing the type of model document: compiled, module, labelBundle, or referenceBundle. This is a document-level construct, not part of the XBRL model."
                },
                "namespaces": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string",
                        "format": "uri"
                    },
                    "description": "A prefix map object that resolves QName prefixes to namespace URIs. Required for interpreting QName, SQName, and prefixedContent values in the model."
                },
                "documentNamespacePrefix": {
                    "type": "string",
                    "description": "An NCName identifying the namespace prefix of the document. Required for XBRL modules (documentType 'module') and label bundles. Must not be defined for compiled models."
                },
                "importMapping": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "A mapping from XBRL model object QNames to URL locations of the model documents, used for import resolution. Must not be defined for compiled models or built-in models."
                },
                "sourceMappings": {
                    "type": "array",
                    "description": "Set of fact source mapping objects that map fact source object QNames to their source document URL locations. Required when the model contains fact value source or fact value anchor objects referencing external source files.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "sourceName": {
                                "$ref": "#/definitions/QName",
                                "description": "The QName of the fact source object this entry maps to a source document. Each sourceName QName MUST appear at most once in the array."
                            },
                            "url": {
                                "type": "string",
                                "description": "A URL string identifying the location of the source document referenced by the factSource."
                            }
                        },
                        "required": [
                            "sourceName",
                            "url"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "description": {
                    "type": "string",
                    "description": "A string providing a human-readable description of the XBRL module."
                }
            },
            "required": [
                "documentType",
                "namespaces"
            ],
            "additionalProperties": false
        },
        "xbrlModel": {
            "type": "object",
            "properties": {
                "name": {
                    "$ref": "#/definitions/xbrlModelQName",
                    "xbrlType": "QName",
                    "description": "The QName that uniquely identifies the XBRL model object."
                },
                "frameworkName": {
                    "type": "string",
                    "description": "The name of the XBRL framework that the model conforms to."
                },
                "version": {
                    "type": "string",
                    "description": "The version of the XBRL model."
                },
                "modelType": {
                    "$ref": "#/definitions/modelTypeQName",
                    "description": "A QName referencing a model type object that defines the allowed object types and properties for this model."
                },
                "duplicateFactsInModel": {
                    "type": "string",
                    "enum": [
                        "no duplicates",
                        "complete duplicates",
                        "consistent duplicates",
                        "inconsistent duplicates"
                    ],
                    "description": "Sets the default duplicate facts validation policy for all cubes in the model. The value of duplicateFactsInCube on a cube takes precedence over this model-level default. If absent, defaults to 'inconsistent duplicates'."
                },
                "importedTaxonomies": {
                    "type": "array",
                    "description": "Set of import taxonomy objects defining external models to be imported into this XBRL model. Each import specifies a model QName and optional selection/filtering criteria.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "xbrlModelName": {
                                "$ref": "#/definitions/xbrlModelQName"
                            },
                            "selections": {
                                "type": "array",
                                "description": "Specifies a set of structured select objects that define the objects to be included in the import. Each select statement specifies the objects to be selected from the XBRL Model. The select statements can include object names, types, and properties.",
                                "items": {
                                    "$ref": "#/definitions/selectorObject"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "importObjects": {
                                "type": "array",
                                "description": "A set of object model object QNames that are imported from the xbrlModelName location property. Only the objects defined in the importObjects set and any referenced objects will be added to the XBRL Model. If the reference object is imported the object QNames defined in the forObjects property are not imported as a dependent objects",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "importObjectTypes": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "A set of object type QNames that are imported from the xbrlModelName location property. Examples include xbrl:conceptObject and xbrl:memberObject. All objects of the specified object types from the xbrlModelName and any referenced objects will be imported. This property can only reference object types that are a child of xbrl:xbrlModelObject. The importObjectTypes cannot include xbrl:importTaxonomyObject, xbrl:finalTaxonomyObject, xbrl:groupTreeObject, and xbrl:xbrlModelObject. If the label object is imported the object QName defined in the forObject property is not imported as a dependent object. If the group content object is imported the object QName defined in the forObject property is not imported as a dependent object. If the reference object is imported the object QNames defined in the forObjects property are not imported as a dependent objects.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "excludeLabels": {
                                "type": "boolean",
                                "description": "If set to true, any labels attached to the objects comprising the XBRL Model deriving from the xbrlModelName property will be excluded from the XBRL Model. The default value is false."
                            },
                            "excludeGroupContents": {
                                "type": "boolean",
                                "description": "If set to true, all group content objects defined in the imported model will be excluded from the XBRL Model. This does NOT exclude the reference objects themselves, only their grouping. The default value is false."
                            },
                            "bundleManifest": {
                                "type": "object",
                                "description": "Metadata about a label bundle or reference bundle being imported. Only applicable when importing a label bundle module (documentType 'https://xbrl.org/PWD/2026-09-01/labelBundle') or a reference bundle module (documentType 'https://xbrl.org/PWD/2026-09-01/referenceBundle').",
                                "properties": {
                                    "language": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "uniqueItems": true,
                                        "minItems": 1,
                                        "description": "Set of BCP 47 language codes indicating the languages provided by the bundle."
                                    },
                                    "bundleTypes": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/definitions/QName"
                                        },
                                        "uniqueItems": true,
                                        "minItems": 1,
                                        "description": "Set of QNames indicating the label or reference types provided by the bundle."
                                    }
                                },
                                "required": [
                                    "language",
                                    "bundleTypes"
                                ],
                                "additionalProperties": false
                            }
                        },
                        "required": [
                            "xbrlModelName"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "referenceModel": {
                    "$ref": "#/definitions/QName",
                    "description": "A QName that references an XBRL model object. Only used with a model that has a documentType of 'https://xbrl.org/PWD/2026-09-01/labelBundle' or 'https://xbrl.org/PWD/2026-09-01/referenceBundle'."
                },
                "finalTaxonomy": {
                    "type": "object",
                    "description": "Defines those objects and object types that are considered final within the xbrlModel, and cannot be extended by importing taxonomies.",
                    "properties": {
                        "finalTaxonomyFlag": {
                            "type": "boolean",
                            "description": "The boolean flag that indicates whether the taxonomy is final."
                        },
                        "finalObjectTypes": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/QName"
                            },
                            "uniqueItems": true,
                            "minItems": 1,
                            "description": "Set of objects types that are considered final within the xbrlModel. An importing xbrlModel cannot include object types that are defined in this set."
                        },
                        "finalObjects": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/QName"
                            },
                            "uniqueItems": true,
                            "minItems": 1,
                            "description": "Set of objects  that are considered final within the xbrlModel. Can only include extendable objects that can be extended using the extend property such as domain network objects, network objects and reference objects."
                        },
                        "selections": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/selectorObject"
                            },
                            "uniqueItems": true,
                            "minItems": 1
                        }
                    },
                    "additionalProperties": false
                },
                "propertyTypes": {
                    "type": "array",
                    "description": "Set of property type objects that define the model-defined properties that can be associated with model objects.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "dataType": {
                                "$ref": "#/definitions/dataTypeQName"
                            },
                            "definitional": {
                                "type": "boolean",
                                "description": "A boolean that indicates whether the property is definitional. When true, the property is part of the object's semantic identity: its value cannot be changed by an extending taxonomy, and the property is inherited by subclass objects through all inheritance mechanisms.  When false (the default), the property is contextual metadata that may be extended or overridden by an importing model without affecting the object's identity. Defaults to false if absent."
                            },
                            "allowedObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "Set of object type QNames references and/or domain class object QName references that the property can be used with. For example the balance property can only be used with xbrl:conceptObject."
                            },
                            "allowedAsLinkProperty": {
                                "type": "boolean",
                                "description": "A boolean that indicates whether the property can be used as a property on the link between two objects in a relationship. Defaults to `false` if absent."
                            },
                            "enumerationDomain": {
                                "$ref": "#/definitions/domainNetworkQName"
                            }
                        },
                        "required": [
                            "name",
                            "dataType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "headings": {
                    "type": "array",
                    "description": "Set of heading objects that define structural headings used for organising and presenting taxonomy objects.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the heading.",
                                "uniqueItems": true

                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "members": {
                    "type": "array",
                    "description": "Set of member objects that define the allowable values (members) for explicit dimensions in the taxonomy.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description":"QName that uniquely identifies the member object within the XBRL model."
                            },
                            "extends": {
                                "$ref": "#/definitions/QName",
                                "xbrlType": "memberQName",
                                "description":"Names the member object to be extended. The extends property adds additional domainClasses and properties to the member object by extension."
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the member can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from augmenting this member."
                            },
                            "domainClasses": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/domainClassQName"
                                },
                                "uniqueItems": true,
                                "description": "A set of QNames that reference domain class objects that define the member. This allows the member to be used in multiple dimensions that reference different domain classes. If the member is defined in a domain relationship with a domain class root that is not included in the domainClasses property of the member, an error is raised",
                                "minItems": 1
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the member.",
                                "uniqueItems": true
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ]
                            }
                        ],
                        "not": {
                            "required": [
                                "name",
                                "extends"
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "concepts": {
                    "type": "array",
                    "description": "Set of concept objects that define the concepts (data points) in the taxonomy. Each concept has a datatype, period type, and nillability.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/conceptQName",
                                "description": "QName that uniquely identifies the concept within the XBRL model.",
                                "xbrlType": "QName"
                            },
                            "dataType": {
                                "$ref": "#/definitions/dataTypeQName",
                                "description": "QName referencing a dataType or collectionType object that defines the datatype of the concept's fact values."
                            },
                            "periodType": {
                                "type": "string",
                                "enum": [
                                    "instant",
                                    "duration",
                                    "none"
                                ],
                                "description": "The period type for the concept, indicating whether the concept represents an instant value, a duration value, or has no period semantics."
                            },
                            "nillable": {
                                "type": "boolean",
                                "description": "Indicates whether the concept can have a nil value. If true, facts for this concept may omit a fact value and instead provide a nil reason. Defaults to false."
                            },
                            "enumerationDomain": {
                                "$ref": "#/definitions/domainNetworkQName",
                                "description": "QName referencing a domain network object that constrains the allowed values for this concept to members in that domain."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional model-defined properties associated with the concept, such as balance direction (debit/credit).",
                                "uniqueItems": true
                            }
                        },
                        "required": [
                            "name",
                            "dataType",
                            "periodType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "cubes": {
                    "type": "array",
                    "description": "Set of cube objects that define multidimensional cubes constraining which facts are valid. Each cube specifies dimensions, members, and optional period constraints.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "cubeType": {
                                "$ref": "#/definitions/cubeTypeQName"
                            },
                            "cubeDimensions": {
                                "type": "array",
                                "description": "A set of cube dimension objects that identify the dimensions and associated domains used on the cube.",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "dimension": {
                                            "$ref": "#/definitions/dimensionQName"
                                        },
                                        "domainNetwork": {
                                            "$ref": "#/definitions/domainNetworkQName"
                                        },
                                        "domainDataType": {
                                            "$ref": "#/definitions/dataTypeQName"
                                        },
                                        "typedSort": {
                                            "type": "string",
                                            "enum": [
                                                "asc",
                                                "desc"
                                            ],
                                            "description": "Sort order for typed dimension (asc or desc)."
                                        },
                                        "optional": {
                                            "type": "boolean",
                                            "description": "If facts not identified with the dimension are included in the cube."
                                        },
                                        "periodConstraints": {
                                            "type": "array",
                                            "description": "Defines an ordered set of period constraint objects to restrict fact values in a cube to fact values with a specified period (only for xbrl:period core dimension).",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "periodType": {
                                                        "type": "string",
                                                        "enum": [
                                                            "instant",
                                                            "duration"
                                                        ],
                                                        "description": "Indicates if the period is instant or duration."
                                                    },
                                                    "timeSpan": {
                                                        "type": "string",
                                                        "pattern": "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$",
                                                        "description": "Duration of time using XML duration type."
                                                    },
                                                    "periodPattern": {
                                                        "type": "string",
                                                        "pattern": "^(\\d{4}|YYYY)-(0[1-9]|1[0-2]|MM)-(0[1-9]|[12]\\d|3[01]|DD|eom)(T([01]\\d|2[0-4]|hh):([0-5]\\d|60|mm)(:([0-5]\\d|60|ss))?)?(/((\\d{4}|YYYY)-(0[1-9]|1[0-2]|MM)-(0[1-9]|[12]\\d|3[01]|DD|eom)(T([01]\\d|2[0-4]|hh):([0-5]\\d|60|mm)(:([0-5]\\d|60|ss))?)?))?$",
                                                        "description": "Pattern for a date (YYYY-MM-DD or YYYY-MM-DDThh:mm:ss) or duration (two dates separated by /). Date components can be literals (YYYY, MM, DD, hh, mm, ss) or valid integers (MM: 01-12, DD: 01-31, hh: 00-24, mm: 00-60, ss: 00-60). DD can also be 'eom' (end of month) representing 28, 29, 30, or 31."
                                                    },
                                                    "endDate": {
                                                        "$ref": "#/definitions/dateResolutionObject"
                                                    },
                                                    "startDate": {
                                                        "$ref": "#/definitions/dateResolutionObject"
                                                    },
                                                    "onOrAfter": {
                                                        "$ref": "#/definitions/dateResolutionObject"
                                                    },
                                                    "onOrBefore": {
                                                        "$ref": "#/definitions/dateResolutionObject"
                                                    }
                                                },
                                                "additionalProperties": false
                                            }
                                        }
                                    },
                                    "required": [
                                        "dimension"
                                    ],
                                    "if": {
                                        "required": [
                                            "typedSort"
                                        ]
                                    },
                                    "then": {
                                        "required": [
                                            "domainDataType"
                                        ]
                                    },
                                    "additionalProperties": false
                                },
                                "minItems": 1,
                                "uniqueItems": true
                            },
                            "cubeNetworks": {
                                "type": "array",
                                "description": "Set of network object QNames related to the cube.",
                                "items": {
                                    "$ref": "#/definitions/networkQName"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "excludeCubes": {
                                "type": "array",
                                "description": "Set of cube object QNames to be excluded from the cube.",
                                "items": {
                                    "$ref": "#/definitions/cubeQName"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "requiredCubes": {
                                "type": "array",
                                "description": "Set of cube object QNames that indicate facts in the cube that are required to be present. This allows layouts using the cube to indicate cells or groups of cells that must be present in the cube.",
                                "items": {
                                    "$ref": "#/definitions/cubeQName"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "duplicateFactsInCube": {
                                "type": "string",
                                "enum": [
                                    "no duplicates",
                                    "complete duplicates",
                                    "consistent duplicates",
                                    "inconsistent duplicates"
                                ],
                                "description": "Indicates how duplicate facts are validated within the cube. Defaults to 'inconsistent duplicates' if absent."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the cube.",
                                "uniqueItems": true
                            },
                            "extends": {
                                "$ref": "#/definitions/QName"
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the cube can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from augmenting this cube."
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name",
                                    "cubeDimensions"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ]
                            }
                        ],
                        "not": {
                            "anyOf": [
                                {
                                    "required": [
                                        "extends",
                                        "cubeDimensions"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "cubeType"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "name"
                                    ]
                                }
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "dimensions": {
                    "type": "array",
                    "description": "Set of dimension objects that define taxonomy-defined dimensions. Each dimension is associated with a domain class that determines its allowable values.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description": "The QName of the dimension object."
                            },
                            "domainClass": {
                                "$ref": "#/definitions/domainClassQName",
                                "description": "A reference to a domain class object."
                            },
                            "cubeTypes": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/cubeTypeQName"
                                },
                                "description": "A non-empty set of references to a cube type object that the dimension can only apply to. Can reference built-in cube types or taxonomy defined cube types. For example xbrla:eventCube, xbrla:referenceCube. If not defined the dimension can be applied to any cube type.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "A set of property objects that specifies model-defined properties associated with the dimension object.",
                                "uniqueItems": true
                            }
                        },
                        "required": [
                            "name",
                            "domainClass"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "domainNetworks": {
                    "type": "array",
                    "description": "Set of domain network objects that define hierarchical networks of members for explicit dimensions.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "root": {
                                "$ref": "#/definitions/domainClassQName",
                                "description": "A reference to a domain class object that uniquely identifies the root of the domain network object."
                            },
                            "relationships": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "source": {
                                            "$ref": "#/definitions/SQName",
                                            "description": "SQName identifying the source member in the domain network relationship."
                                        },
                                        "target": {
                                            "$ref": "#/definitions/SQName",
                                            "description": "SQName identifying the target member in the domain network relationship."
                                        },
                                        "order": {
                                            "type": "number",
                                            "description": "The order attribute orders the relationships relative to their level in a hierarchy. The order property can be used on any relationship type. If no order attribute is provided the order of their appearance in the set is used as the default. If no order attribute is provided the default order value is zero. This value is used to sort relationships relative to objects that do have an order attribute."
                                        },
                                        "properties": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/propertyObject"
                                            },
                                            "minItems": 1,
                                            "description": "Additional properties associated with the relationship."
                                        }
                                    },
                                    "required": [
                                        "source",
                                        "target"
                                    ],
                                    "additionalProperties": false
                                }
                            },
                            "extends": {
                                "$ref": "#/definitions/QName",
                                "description": "Names the domain network object that the defined domain network relationships are appended to. The items in the domain network with this property are appended to the end of the relationships defined in the target domain network object. This property cannot be used with the name property or the root property. The QName MUST resolve to an existing domain network object."
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the domain network can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from adding relationships to this domain network."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "A set of property objects that specifies model-defined properties associated with the domain network object.",
                                "uniqueItems": true
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name",
                                    "root"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ]
                            }
                        ],
                        "not": {
                            "anyOf": [
                                {
                                    "required": [
                                        "extends",
                                        "root"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "name"
                                    ]
                                }
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "domainClasses": {
                    "type": "array",
                    "description": "A domain class defines a category that member objects belong to and links a dimension to that category. A dimension can be associated with different domain network objects in different cubes, but all such domain network objects must have the same domain class as the dimension. Member objects can belong to one or more domain classes. A member object's domain classes restrict the domain network objects that a member can be associated with.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description":"QName that uniquely identifies the domain class within the XBRL model."
                            },
                            "baseDomainClass": {
                                "$ref": "#/definitions/domainClassQName",
                                "description": "The QName of a domain class object that is the base domain class for the defined domain class. The model-defined properties of the base domain class are inherited by this domain class."
                            },
                            "allowedDomainItem": {
                                "$ref": "#/definitions/QName",
                                "description": "An object type QName or datatype object that can be used by dimensions associated with this domain class object. The object type QName is either xbrl:entityObject, xbrl:unitObject, xbrl:memberObject, xbrl:conceptObject or a datatype object QName. In the case of an object type QName, the objects defined in a domain network object with this domain class object as a root must be of this object type QName. In the case of a datatype object QName, this constrains the domain class values to this datatype object"
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "A set of property objects that specifies model-defined properties associated with the domain class object.",
                                "uniqueItems": true
                            }
                        },
                        "required": [
                            "name",
                            "allowedDomainItem"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "networks": {
                    "type": "array",
                    "description": "Set of network objects that define networks of relationships between model objects. Networks are identified by a relationship type and contain ordered relationships.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description": "QName that uniquely identifies the network within the XBRL model."
                            },
                            "relationshipTypeName": {
                                "$ref": "#/definitions/relationshipTypeQName",
                                "description": "QName referencing a relationship type object that defines the type of relationships in this network (e.g., xbrl:parent-child, xbrl:summation-item)."
                            },
                            "relationships": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "source": {
                                            "$ref": "#/definitions/SQName",
                                            "description": "Identifies the source model object QName or SQName reference of the relationship type."
                                        },
                                        "target": {
                                            "$ref": "#/definitions/SQName",
                                            "description": "Identifies the target model object QName or SQName reference of the relationship type."
                                        },
                                        "order": {
                                            "type": "number",
                                            "description": "The order attribute orders the relationships relative to their level in a hierarchy. The order property can be used on any relationship type. If no order attribute is provided the order of their appearance in the set is used as the default. If no order attribute is provided the default order value is zero. This value is used to sort relationships relative to objects that do have an order attribute."
                                        },
                                        "properties": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/propertyObject"
                                            },
                                            "minItems": 1,
                                            "description": "Additional properties associated with the relationship.",
                                            "uniqueItems": true
                                        }
                                    },
                                    "required": [
                                        "source",
                                        "target"
                                    ],
                                    "additionalProperties": false
                                },
                                "description": "The relationship object is a property of either a network or a domain. The relationship object links two objects together with a meaningful relationship. The relationship infers what the relationship between the two objects represents. These relationshipTypes can be defined in the taxonomy or use standard relationship types defined in the XBRL specification.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "extends": {
                                "$ref": "#/definitions/QName",
                                "description": "Names the network object that the defined network relationships are appended to. The items in the network with this property are appended to the end of the relationships or roots defined in the target network object. This property cannot be used in conjunction with the relationshipTypeName and name property. The ability to extend a network can be used to add relationship objects, roots and properties to an existing network. The QName MUST resolve to an existing network object."
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "If set to false, the network is non-extensible and no importing model may augment it using extends. If set to true or omitted, the network may be extended. The default value is true."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "A set of property objects that specifies model-defined properties associated with the network object."
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name",
                                    "relationshipTypeName"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ]
                            }
                        ],
                        "not": {
                            "anyOf": [
                                {
                                    "required": [
                                        "extends",
                                        "relationshipTypeName"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "name"
                                    ]
                                }
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "entities": {
                    "type": "array",
                    "description": "Set of entity objects that define legal or reporting entities using scheme-qualified identifiers (SQNames).",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/SQName"
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "description": "Additional properties associated with the entity.",
                                "uniqueItems": true,
                                "minItems": 1
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "properties": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/propertyObject"
                    },
                    "minItems": 1,
                    "description": "Model-defined properties associated with the XBRL model.",
                    "uniqueItems": true
                },
                "units": {
                    "type": "array",
                    "description": "Set of unit objects that define units of measure. Each unit specifies a datatype and optional composite unit representations.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "dataType": {
                                "$ref": "#/definitions/dataTypeQName"
                            },
                            "compositeUnitRepresentation": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "pattern": "^([A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*)(\\*[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*)*$|^([A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*|\\([A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*(\\*[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*)+\\))/([A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*|\\([A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*(\\*[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*)+\\))$",
                                    "description": "A unit string representation as defined in OIM Common §3.4. Must consist only of QNames (prefix:localname), '*' (multiplication), '/' (division), and '()' (grouping parentheses). No whitespace is permitted. Valid forms: a single QName (e.g. 'iso4217:EUR'), QNames joined by '*' (e.g. 'utr:m*utr:m'), or a numerator group '/' denominator group where each group is either a single QName or a parenthesised '*'-separated list of two or more QNames (e.g. 'utr:kg/(utr:m*utr:m)')."
                                },
                                "description": "A set of unit string representations that are equivalent to the defined unit. Multiple unit string representations can be defined for a defined unit. For example cubic feet could be represented as two composite unit representations of utr:ft*utr:ft*utr:ft and utr:ft*utr:sqft.",
                                "uniqueItems": true,
                                "minItems": 1
                            }
                        },
                        "required": [
                            "name",
                            "dataType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "groups": {
                    "type": "array",
                    "description": "Set of group objects that define logical groupings of networks, cubes, and table templates. Groups typically correspond to statements or schedules in a financial disclosure.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/groupQName",
                                "xbrlType": "QName"
                            },
                            "groupURI": {
                                "type": "string",
                                "format": "uri",
                                "description": "URI identifying the group, typically corresponding to a statement or schedule role URI in the reporting taxonomy."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the group."
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "groupContents": {
                    "type": "array",
                    "description": "Set of group content objects that link groups to their constituent networks, cubes, domain networks, and table templates.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "groupName": {
                                "$ref": "#/definitions/groupQName",
                                "description": "QName of the group that this content entry belongs to."
                            },
                            "forObject": {
                                "$ref": "#/definitions/QName",
                                "description": "QName of the network, cube, domain network, or table template that is included in the group."
                            },
                            "order": {
                                "type": "number",
                                "description": "The display order of this groupContent entry relative to other entries with the same groupName. Lower values are presented first."
                            }
                        },
                        "required": [
                            "groupName",
                            "forObject"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "groupTree": {
                    "type": "object",
                    "description": "Defines the hierarchical organization of groups within the xbrlModel. Only one groupTree is allowed per xbrlModel.",
                    "properties": {
                        "name": {
                            "$ref": "#/definitions/QName",
                            "description": "The QName that uniquely identifies the groupTree object."
                        },
                        "relationships": {
                            "type": "array",
                            "description": "Set of relationships organizing groups hierarchically. Source can be xbrl:rootSource or a group object, the target must be a group object.",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "source": {
                                        "$ref": "#/definitions/QName",
                                        "description": "QName of the source xbrlModel or group object."
                                    },
                                    "target": {
                                        "$ref": "#/definitions/QName",
                                        "description": "QName of the target group object."
                                    },
                                    "order": {
                                        "type": "number",
                                        "description": "Order of the relationship in the hierarchy."
                                    }
                                },
                                "required": [
                                    "source",
                                    "target"
                                ],
                                "additionalProperties": false
                            },
                            "uniqueItems": true,
                            "minItems": 1
                        }
                    },
                    "required": [
                        "name"
                    ],
                    "additionalProperties": false
                },
                "relationshipTypes": {
                    "type": "array",
                    "description": "Set of relationship type objects that define custom relationship types beyond the standard parent-child, summation-item, and domain-member types.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "uri": {
                                "type": "string",
                                "format": "uri",
                                "description": "The URI of the relationship type for historical and backward compatibility purposes."
                            },
                            "cycles": {
                                "type": "string",
                                "enum": [
                                    "any",
                                    "none",
                                    "undirected"
                                ],
                                "description": "The cycles attribute indicates if the relationship when used in a hierarchy can include cycles. Possible values are any, none, and undirected. Any means cycles are allowed in the relationships, undirected means cycles are allowed, but they must be undirected, and none means cycles are not allowed in the relationships. The default value is none if not provided."
                            },
                            "allowedLinkProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "Set of property type object QNames that can be included in the properties array of relationship objects of this type. Each property is represented as the QName defined in the property type object. Only properties defined in this list can be added to the specific relationship type."
                            },
                            "requiredLinkProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "Set of property type object QNames that MUST be included on the relationship type. Each property is represented as the QName defined in the property type object."
                            },
                            "sourceObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "Set of object type QNames representing the referenceable object types that can be the source of the relationship. The only permitted values are referenceable object types."
                            },
                            "targetObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "Set of object type QNames representing the referenceable object types that can be the target of the relationship. The only permitted values are referenceable object types."
                            },
                            "constraints": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "constraint": {
                                            "$ref": "#/definitions/relationshipConstraint"
                                        }
                                    },
                                    "required": [
                                        "constraint"
                                    ],
                                    "additionalProperties": false
                                },
                                "description": "An array of constraint objects, each with a 'constraint' property containing a constraint expression string."

                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "labels": {
                    "type": "array",
                    "description": "Set of label objects that associate human-readable labels with model objects. Labels are distinguished by type (e.g., standard, documentation, terseLabel) and language.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "forObject": {
                                "$ref": "#/definitions/QName",
                                "description": "Defines the QName of the object that this label is associated with."
                            },
                            "labelType": {
                                "$ref": "#/definitions/labelTypeQName"
                            },
                            "language": {
                                "type": "string",
                                "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                                "description": "Defines the language of the label using a valid BCP 47 language code."
                            },
                            "value": {
                                "type": "string",
                                "description": "Text of the label."
                            }
                        },
                        "required": [
                            "forObject",
                            "labelType",
                            "language",
                            "value"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "references": {
                    "type": "array",
                    "description": "Set of reference objects that associate references (e.g., authoritative citations) with model objects. References are distinguished by type and language.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "extends": {
                                "$ref": "#/definitions/QName"
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the reference can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from augmenting this reference."
                            },
                            "forObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Ordered QNames the reference is associated with.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "referenceType": {
                                "$ref": "#/definitions/referenceTypeQName"
                            },
                            "language": {
                                "type": "string",
                                "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                                "description": "Language code (BCP 47)."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the reference.",
                                "uniqueItems": true
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name",
                                    "referenceType"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ],
                                "anyOf": [
                                    {
                                        "required": [
                                            "forObjects"
                                        ]
                                    },
                                    {
                                        "required": [
                                            "properties"
                                        ]
                                    }
                                ]
                            }
                        ],
                        "not": {
                            "anyOf": [
                                {
                                    "required": [
                                        "extends",
                                        "referenceType"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "language"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "name"
                                    ]
                                }
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "facts": {
                    "type": "array",
                    "description": "Set of fact objects that define data points in the taxonomy model. Each fact specifies a concept, dimensions, and either a fact value or a fact value source.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/SQName"
                            },
                            "factValues": {
                                "type": "array",
                                "description": "The fact value object defines the value of a fact object. A fact can have multiple fact values. Each fact value is defined using the value property. The value property can be a literal value or a set of value sources that define how to extract the value from an embedding document.",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "name": {
                                            "$ref": "#/definitions/QName"
                                        },
                                        "value": {
                                            "oneOf": [
                                                {
                                                    "type": "string"
                                                },
                                                {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                }
                                            ],
                                            "description": "Literal fact value, when not derived from valueSources."
                                        },
                                        "decimals": {
                                            "oneOf": [
                                                {
                                                    "type": "number"
                                                },
                                                {
                                                    "type": "string",
                                                    "pattern": "INF"
                                                }
                                            ],
                                            "description": "An integer providing the value of the decimals property, or absent if the value is infinitely precise or not applicable (for nil or non-numeric facts)"
                                        },
                                        "language": {
                                            "type": "string",
                                            "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                                            "description": "Language of the fact value (BCP 47)."
                                        },
                                        "reportSource": {
                                            "$ref": "#/definitions/QName",
                                            "description": "QName identifying the source document via the sourceMappings array of the documentInfo object. Applied to all valueSources entries on this factValue when present."
                                        },
                                        "transformation": {
                                            "$ref": "#/definitions/QName",
                                            "xbrlType": "transformationQName",
                                            "description": "QName of a transformation to apply to extracted source text (e.g. locale date conversion). Applied to all valueSources entries unless overridden."
                                        },
                                        "scale": {
                                            "type": "integer",
                                            "description": "Power of 10 to multiply the extracted numeric value (e.g. 6 for millions). Applied to all valueSources entries."
                                        },
                                        "sign": {
                                            "type": "string",
                                            "enum": [
                                                "-"
                                            ],
                                            "description": "Set to '-' if the extracted source value must be negated to produce the canonical fact value."
                                        },
                                        "escape": {
                                            "type": "boolean",
                                            "description": "If true, the value is the escaped representation for media with markup (html, xml); otherwise the concatenated descendant text content is used. Defaults to false."
                                        },
                                        "valueSources": {
                                            "type": "array",
                                            "description": "Ordered set of factValueSource objects identifying where the values are obtained from content of an embedding or accompanying document file.",
                                            "items": {
                                                "$ref": "#/definitions/factValueSourceObject"
                                            },
                                            "minItems": 1,
                                            "uniqueItems": true
                                        },
                                        "valueAnchors": {
                                            "type": "array",
                                            "description": "Ordered set of factValueAnchor objects identifying corresponding content of an embedding document file for visual highlighting and mouse-over, typically when the value is provided directly in 'value'.",
                                            "items": {
                                                "$ref": "#/definitions/factValueAnchorObject"
                                            },
                                            "minItems": 1,
                                            "uniqueItems": true
                                        }
                                    },
                                    "additionalProperties": false,
                                    "allOf": [
                                        {
                                            "required": [
                                                "name"
                                            ],
                                            "anyOf": [
                                                {
                                                    "required": [
                                                        "value"
                                                    ]
                                                },
                                                {
                                                    "required": [
                                                        "valueSources"
                                                    ]
                                                }
                                            ]
                                        }
                                    ]
                                }
                            },
                            "factDimensions": {
                                "type": "object",
                                "description": "Object mapping dimension QNames to their values for this fact.",
                                "properties": {
                                    "xbrl:concept": {
                                        "$ref": "#/definitions/conceptQName"
                                    },
                                    "xbrl:entity": {
                                        "$ref": "#/definitions/SQName",
                                        "description": "SQName of the entity identifier for this fact."
                                    },
                                    "xbrl:unit": {
                                        "oneOf": [
                                            {
                                                "type": "string",
                                                "pattern": ".*(\\*|/).*",
                                                "description": "String representation of the unit such as xbrlr:length * xbrlr:length."
                                            },
                                            {
                                                "$ref": "#/definitions/unitQName",
                                                "description": "The unit QName of the unit."
                                            }
                                        ]
                                    },
                                    "xbrl:period": {
                                        "type": "string",
                                        "description": "The xbrl:period is a time interval as defined in ISO 8601. The time interval MAY be zero-length (i.e. start and end at the same instant), denoting an instant in time."
                                    }
                                },
                                "patternProperties": {
                                    "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    }
                                   
                                },
                                "additionalProperties": false,
                                "required": [
                                    "xbrl:concept"
                                ]
                            },
                            "factQualifier": {
                                "type": "object",
                                "description": "Dimension properties associated with a fact that do not represent dimensions comprising a cube space. Only taxonomy-defined dimensions are permitted; core dimensions (xbrl:concept, xbrl:period, xbrl:unit, xbrl:entity) must not appear.",
                                "patternProperties": {
                                    "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    }
                                },
                                "additionalProperties": false
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the fact.",
                                "uniqueItems": true
                            },
                            "extends": {
                                "$ref": "#/definitions/SQName"
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the fact can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from augmenting this fact."
                            }
                        },
                        "oneOf": [
                            {
                                "required": [
                                    "name",
                                    "factDimensions"
                                ]
                            },
                            {
                                "required": [
                                    "extends"
                                ]
                            }
                        ],
                        "not": {
                            "anyOf": [
                                {
                                    "required": [
                                        "extends",
                                        "factDimensions"
                                    ]
                                },
                                {
                                    "required": [
                                        "extends",
                                        "name"
                                    ]
                                }
                            ]
                        },
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "factSources": {
                    "type": "array",
                    "description": "Set of fact source objects that bind fact maps to specific data sources (e.g., CSV files) for generating fact objects.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description": "QName of the fact source object."
                            },
                            "factMapName": {
                                "$ref": "#/definitions/QName",
                                "xbrlType": "factMapQName",
                                "description": "QName that references a fact map object."
                            },
                            "cubeName": {
                                "$ref": "#/definitions/cubeQName",
                                "description": "The cubeName is a QName that references a cube object. When provided, only facts that fall within the dimensional space of the cube are included in the result; facts with no dimensional membership in the cube are excluded. Constraints defined on the cube are applied to the generated facts. When omitted, facts are generated for the entire model without cube filtering. Multiple fact source objects can reference the same factMapName with different cubeName values, allowing the same template to define fact objects from the same data file, based on a different referenced cube. Multiple fact source objects can also reference the same cube, allowing facts from different data files to define different facts that are included in a single cube. The cube definition can be used to control how facts are validated based on the native format."
                            },
                            "namespaceMaps": {
                                "type": "array",
                                "description": "The namespaceMap object defines a redirection from one namespace to another namespace. This maps the namespaces of a data source to the namespaces defined in the taxonomy model.",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "fromNamespacePrefix": {
                                            "type": "string",
                                            "pattern": "^[a-zA-Z_][\\w.-]*$",
                                            "description": "The original namespace prefix that is being redirected."
                                        },
                                        "toNamespacePrefix": {
                                            "type": "string",
                                            "pattern": "^[a-zA-Z_][\\w.-]*$",
                                            "description": "The new namespace prefix that the fromNamespacePrefix is being redirected to."
                                        }
                                    },
                                    "required": [
                                        "toNamespacePrefix"
                                    ],
                                    "additionalProperties": false
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "factNames": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/SQName"
                                },
                                "description": "A set of SQNames identifying the facts in the compiled model that were generated from this factSource. Only valid in compiled models. Cannot be used with 'hash' or 'metadata'.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "hash": {
                                "type": "string",
                                "description": "A semantic hash value representing the collection of facts generated by applying the factMap to the data source. Indicates hash-based approach instead of materializing all facts. Cannot be used with 'factNames'."
                            },
                            "metadata": {
                                "type": "object",
                                "description": "A metadata object containing summary information about the fact collection when using a hash-based approach. Cannot be used with 'factNames'."
                            },
                            "properties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/propertyObject"
                                },
                                "minItems": 1,
                                "description": "Additional properties associated with the factSource.",
                                "uniqueItems": true
                            },
                            "factIdentifierNamespacePrefix": {
                                "type": "string",
                                "pattern": "^[a-zA-Z_][\\w.-]*$",
                                "description": "A namespace prefix to use for generated fact and factValue object QNames. The prefix must be declared in documentInfo.namespaces."
                            }
                        },
                        "dependencies": {
                            "factNames": {
                                "not": {
                                    "anyOf": [
                                        {
                                            "required": [
                                                "hash"
                                            ]
                                        },
                                        {
                                            "required": [
                                                "metadata"
                                            ]
                                        }
                                    ]
                                }
                            },
                            "hash": {
                                "not": {
                                    "required": [
                                        "factNames"
                                    ]
                                }
                            },
                            "metadata": {
                                "not": {
                                    "required": [
                                        "factNames"
                                    ]
                                }
                            }
                        },
                        "required": [
                            "name",
                            "factMapName"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "factMaps": {
                    "type": "array",
                    "description": "Set of fact map objects that define how source data is mapped to fact properties. Fact maps specify dimension mappings, value mappings, and nil reason mappings.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "templateName": {
                                "$ref": "#/definitions/QName",
                                "xbrlType": "templateQName",
                                "description": "The templateName is a QName that references a template object, such as a table template."
                            },
                            "factLocatorType": {
                                "$ref": "#/definitions/QName",
                                "xbrlType": "factLocatorTypeQName",
                                "description": "A QName identifying the fact locator type object that provides the default locatorType for all fact value objects that reference this fact map via a fact source object. When present on the factMap entry, it overrides the need to specify locatorType on each individual factValue."
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "tableTemplates": {
                    "type": "array",
                    "description": "Set of table template objects that define tabular structures for mapping CSV data to XBRL facts. Table templates specify headers, axes, and default dimension values.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "rowIdColumn": {
                                "type": "string",
                                "description": "An identifier specifying the name of the row ID column. "
                            },
                            "columns": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "columnName": {
                                            "type": "string",
                                            "description": "The name of the column."
                                        },
                                        "factDimensions": {
                                            "type": "object",
                                            "description": "Object mapping dimension QNames to their values for this fact.",
                                            "properties": {
                                                "xbrl:concept": {
                                                    "oneOf": [
                                                        {
                                                            "$ref": "#/definitions/conceptQName"
                                                        },
                                                        {
                                                            "type": "string",
                                                            "pattern": "^\\$.*"
                                                        }
                                                    ]
                                                },
                                                "xbrl:entity": {
                                                    "oneOf": [
                                                        {
                                                            "$ref": "#/definitions/SQName"
                                                        },
                                                        {
                                                            "type": "string",
                                                            "pattern": "^\\$.*",
                                                            "description": "A variable starting with a $ to represent the value of a column in the table template representing an entity. The variable name must match the columnName of a column in the table template."
                                                        }
                                                    ]
                                                },
                                                "xbrl:unit": {
                                                    "oneOf": [
                                                        {
                                                            "type": "string",
                                                            "pattern": ".*(\\*|/).*"
                                                        },
                                                        {
                                                            "$ref": "#/definitions/unitQName"
                                                        },
                                                        {
                                                            "type": "string",
                                                            "pattern": "^\\$.*",
                                                            "description": "A variable starting with a $ to represent the value of a column in the table template representing a unit. The variable name must match the columnName of a column in the table template."
                                                        }
                                                    ]
                                                },
                                                "xbrl:period": {
                                                    "type": "string"
                                                }
                                            },
                                            "patternProperties": {
                                                "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                                    "oneOf": [
                                                        {
                                                            "type": "string"
                                                        },
                                                        {
                                                            "type": "number"
                                                        },
                                                        {
                                                            "type": "null"
                                                        }
                                                    ]
                                                }
                                            },
                                            "additionalProperties": false,
                                            "required": [
                                                "xbrl:concept"
                                            ]
                                        },
                                        "propertyGroups": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": "string"
                                            }
                                        },
                                        "decimals": {
                                            "oneOf": [
                                                {
                                                    "type": "number"
                                                },
                                                {
                                                    "type": "string",
                                                    "pattern": "INF"
                                                }
                                            ],
                                            "description": "An integer providing the value of the decimals property, or absent if the value is infinitely precise or not applicable (for nil or non-numeric facts)"
                                        },
                                        "transformation": {
                                            "$ref": "#/definitions/QName",
                                            "xbrlType": "transformationQName",
                                            "description": "QName of a transformation to apply to extracted source text (e.g. locale date conversion)."
                                        },
                                        "order": {
                                            "type": "number",
                                            "description": "Order of the columns in the table template."
                                        }
                                    },
                                    "required": [
                                        "columnName"
                                    ],
                                    "additionalProperties": false
                                },
                                "description": "The column object defines a column in a table template. Each column object specifies the name of the column, the decimals if numeric, the fact dimensions associated with the column and any transform to be performed on the data in the column.",
                                "minItems": 1
                            },
                            "factDimensions": {
                                "type": "object",
                                "description": "Object mapping dimension QNames to their values for this fact.",
                                "properties": {
                                    "xbrl:concept": {
                                        "oneOf": [
                                            {
                                                "$ref": "#/definitions/conceptQName"
                                            },
                                            {
                                                "type": "string",
                                                "pattern": "^\\$.*",
                                                "description": "A variable starting with a $ to represent the value of a column in the table template representing a concept. The variable name must match the columnName of a column in the table template."
                                            }
                                        ]
                                    },
                                    "xbrl:entity": {
                                        "oneOf": [
                                            {
                                                "$ref": "#/definitions/SQName"
                                            },
                                            {
                                                "type": "string",
                                                "pattern": "^\\$.*",
                                                "description": "A variable starting with a $ to represent the value of a column in the table template representing an entity. The variable name must match the columnName of a column in the table template."
                                            }
                                        ]
                                    },
                                    "xbrl:unit": {
                                        "oneOf": [
                                            {
                                                "type": "string",
                                                "pattern": ".*(\\*|/).*"
                                            },
                                            {
                                                "$ref": "#/definitions/unitQName"
                                            },
                                            {
                                                "type": "string",
                                                "pattern": "^\\$.*",
                                                "description": "A variable starting with a $ to represent the value of a column in the table template representing a unit. The variable name must match the columnName of a column in the table template."
                                            }
                                        ]
                                    },
                                    "xbrl:period": {
                                        "type": "string"
                                    }
                                },
                                "patternProperties": {
                                    "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    }
                                },
                                "additionalProperties": false
                            },
                            "decimals": {
                                "oneOf": [
                                    {
                                        "type": "number"
                                    },
                                    {
                                        "type": "string",
                                        "pattern": "INF"
                                    }
                                ]
                            },
                            "extends": {
                                "$ref": "#/definitions/QName"
                            },
                            "isExtensible": {
                                "type": "boolean",
                                "description": "Indicates whether the table template can be extended by an importing taxonomy. Defaults to true (extensible). Set to false to prevent any importing taxonomy from augmenting this table template."
                            }
                        },
                        "required": [
                            "columns"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "JSONTemplateMaps": {
                    "type": "array",
                    "description": "Set of JSON template map objects that define mappings from JSON data formats to XBRL fact objects.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "factDimensions": {
                                "type": "object",
                                "description": "Object mapping dimension QNames to their values for this fact.",
                                "properties": {
                                    "xbrl:concept": {
                                        "$ref": "#/definitions/conceptQName"
                                    },
                                    "xbrl:entity": {
                                        "$ref": "#/definitions/SQName"
                                    },
                                    "xbrl:unit": {
                                        "oneOf": [
                                            {
                                                "type": "string",
                                                "pattern": ".*(\\*|/).*"
                                            },
                                            {
                                                "$ref": "#/definitions/unitQName"
                                            }
                                        ]
                                    },
                                    "xbrl:period": {
                                        "type": "string"
                                    }
                                },
                                "patternProperties": {
                                    "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    }
                                },
                                "additionalProperties": false,
                                "required": [
                                    "xbrl:concept"
                                ]
                            },
                            "valuePath": {
                                "type": "string",
                                "description": "A JSONPath expression that identifies the location of the fact values in the JSON data."
                            },
                            "decimals": {
                                "oneOf": [
                                    {
                                        "type": "number"
                                    },
                                    {
                                        "type": "string",
                                        "pattern": "INF"
                                    }
                                ]
                            }
                        },
                        "required": [
                            "name",
                            "factDimensions",
                            "valuePath"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "XMLTemplateMaps": {
                    "type": "array",
                    "description": "Set of XML template map objects that define mappings from XML data formats to XBRL fact objects.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "factDimensions": {
                                "type": "object",
                                "description": "Object mapping dimension QNames to their values for this fact.",
                                "properties": {
                                    "xbrl:concept": {
                                        "$ref": "#/definitions/conceptQName"
                                    },
                                    "xbrl:entity": {
                                        "$ref": "#/definitions/SQName"
                                    },
                                    "xbrl:unit": {
                                        "oneOf": [
                                            {
                                                "type": "string",
                                                "pattern": ".*(\\*|/).*"
                                            },
                                            {
                                                "$ref": "#/definitions/unitQName"
                                            }
                                        ]
                                    },
                                    "xbrl:period": {
                                        "type": "string"
                                    }
                                },
                                "patternProperties": {
                                    "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    }
                                },
                                "additionalProperties": false,
                                "required": [
                                    "xbrl:concept"
                                ]
                            },
                            "valuePath": {
                                "type": "string",
                                "description": "An XPath expression that identifies the location of the fact values in the XML data."
                            },
                            "decimals": {
                                "oneOf": [
                                    {
                                        "type": "number"
                                    },
                                    {
                                        "type": "string",
                                        "pattern": "INF"
                                    }
                                ]
                            }
                        },
                        "required": [
                            "name",
                            "factDimensions",
                            "valuePath"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "footnotes": {
                    "type": "array",
                    "description": "Set of footnote objects that provide explanatory annotations linked to facts or relationships.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/footnoteTypeQName"
                            },
                            "forObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "QNames the footnote is associated with.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "content": {
                                "type": "string",
                                "description": "The content of the footnote."
                            },
                            "language": {
                                "type": "string",
                                "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                                "description": "[oimte:badlanguage] Language code (BCP 47)."
                            },
                            "annotationType": {
                                "$ref": "#/definitions/QName",
                                "description": "The type of the annotation."
                            }
                        },
                        "required": [
                            "name",
                            "forObjects",
                            "content"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "labelTypes": {
                    "type": "array",
                    "description": "Set of label type objects that define the types of labels used in the taxonomy, including the content format and the object types to which labels can be applied.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "uri": {
                                "type": "string",
                                "format": "uri",
                                "description": "URI for backward compatibility with XBRL 2.1 taxonomies."
                            },
                            "formatType": {
                                "type": "string",
                                "description": "A hint indicating the content format of label values for this label type. The value MUST be one of the following: text, html, markdown, xhtml.",
                                "enum": ["text", "html", "markdown", "xhtml"]
                            },
                            "contentConstraints": {
                                "type": "object",
                                "properties": {
                                    "maxLength": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The maximum length of the label value."
                                    },
                                    "minLength": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The minimum length of the label value."
                                    },
                                    "pattern": {
                                        "type": "string",
                                        "description": "A regular expression pattern that the label value MUST match."
                                    }
                                },
                                "description": "An object defining constraints on label values for this label type. The following properties are supported: maxLength, minLength, pattern. If omitted, no constraints are applied to label values of this type.",
                                "additionalProperties": false
                            },
                            "allowedObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "A set of object type QNames defining the object type that labels of this type can be applied to. If omitted, the label object may be used with any referenceable object types.",
                                "uniqueItems": true,
                                "minItems": 1
                            }
                        },
                        "required": [
                            "name",
                            "formatType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "referenceTypes": {
                    "type": "array",
                    "description": "Set of reference type objects that define the types of references used in the taxonomy, including required and ordered properties.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "uri": {
                                "type": "string",
                                "format": "uri",
                                "description": "URI for backward compatibility with XBRL 2.1 taxonomies."
                            },
                            "allowedObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Defines a set of object type QNames representing the referenceable object types that may use the referenceType.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "orderedProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Defines an ordered set of property type object QNames that can be used with the reference. This order determines the order in which properties in the reference are displayed or appear. Properties defined on the reference but not in the ordered properties set appear at the end in alphabetical order of the local name of the property."
                            },
                            "requiredProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Defines a set of property type object QNames that must be included within a defined reference type.",
                                "minItems": 1
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "factLocatorTypes": {
                    "type": "array",
                    "description": "Set of factLocatorType objects defining named strategies for locating content within source documents.",
                    "items": {
                        "$ref": "#/definitions/factLocatorTypeObject"
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "modelTypes": {
                    "type": "array",
                    "description": "Set of model type objects that define custom object types and their allowed properties for use in the taxonomy model.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "allowedObjects": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Set of object types that can be used with the modelType.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "allowedProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Set of property QNames that can be used with the modelType.",
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "requiredProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "description": "Set of property QNames that must be included within a defined model type.",
                                "uniqueItems": true,
                                "minItems": 1
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "cubeTypes": {
                    "type": "array",
                    "description": "Set of cube type objects that define custom cube types with specific dimension constraints and allowed dimension configurations.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "baseCubeType": {
                                "$ref": "#/definitions/cubeTypeQName"
                            },
                            "coreDimensions": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/dimensionQName"
                                },
                                "uniqueItems": true,
                                "description": "Array of core dimension QNames that are allowed in cubes of this type. Only xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit, and xbrl:language are valid. Concept is always assumed.",
                                "minItems": 1
                            },
                            "coreDomainClasses": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/domainClassQName"
                                },
                                "uniqueItems": true,
                                "description": "Array of QNames referencing core domain class objects that indicate whether the domain property is required in the cubeDimension object. Valid values are xbrl:conceptDomain, xbrl:entityDomain, and xbrl:unitDomain. If specified, the domain property in cubeDimension becomes required for the referenced domain classes.",
                                "minItems": 1
                            },
                            "cubeDimensionConstraints": {
                                "type": "object",
                                "description": "Defines constraints on taxonomy-defined dimensions for this cube type.",
                                "properties": {
                                    "allowed": {
                                        "type": "array",
                                        "description": "Array of allowed dimensions. Can be simple QNames (for explicit dimensions) or constraint objects (for typed dimensions or dimensions with property constraints).",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "dimensionName": {
                                                    "$ref": "#/definitions/dimensionQName"
                                                },
                                                "type": {
                                                    "type": "string",
                                                    "enum": [
                                                        "typed",
                                                        "explicit"
                                                    ],
                                                    "description": "Whether this is a typed or explicit dimension constraint."
                                                },
                                                "dataType": {
                                                    "$ref": "#/definitions/dataTypeQName",
                                                    "description": "Required if type is 'typed'. The data type for typed dimension members."
                                                },
                                                "minDimensions": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "description": "Minimum number of dimensions matching this criterion that must appear in cubes of this type. Defaults to 0."
                                                },
                                                "maxDimensions": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "description": "Maximum number of dimensions matching this criterion that may appear in cubes of this type. If absent, no upper limit applies."
                                                },
                                                "domainClassProperties": {
                                                    "$ref": "#/definitions/propertiesConstraintObject"
                                                }
                                            },
                                            "additionalProperties": false,
                                            "allOf": [
                                                {
                                                    "if": {
                                                        "properties": {
                                                            "type": {
                                                                "const": "typed"
                                                            }
                                                        },
                                                        "required": [
                                                            "type"
                                                        ]
                                                    },
                                                    "then": {
                                                        "required": [
                                                            "dataType"
                                                        ]
                                                    }
                                                },
                                                {
                                                    "if": {
                                                        "properties": {
                                                            "type": {
                                                                "const": "explicit"
                                                            }
                                                        },
                                                        "required": [
                                                            "type"
                                                        ]
                                                    },
                                                    "then": {
                                                        "not": {
                                                            "required": [
                                                                "dataType"
                                                            ]
                                                        }
                                                    }
                                                }
                                            ]
                                        }
                                    },
                                    "closed": {
                                        "type": "boolean",
                                        "description": "Optional when 'allowed' is absent. If true, only taxonomy-defined dimensions listed in 'allowed' can be used. If false, other taxonomy-defined dimensions are permitted. Defaults to the value of the baseCubeType if defined, otherwise false."
                                    }
                                },
                                "additionalProperties": false,
                                "if": {
                                    "not": {
                                        "required": [
                                            "allowed"
                                        ]
                                    }
                                },
                                "then": {
                                    "required": [
                                        "closed"
                                    ],
                                    "properties": {
                                        "closed": {
                                            "const": true
                                        }
                                    }
                                }
                            },
                            "cubeNetworkConstraints": {
                                "type": "object",
                                "description": "Defines constraints on networks that can be associated with cubes of this type using the 'cubeNetworks' property.",
                                "properties": {
                                    "closed": {
                                        "type": "boolean",
                                        "description": "If true, only networks listed in 'cubeNetworks' may be associated with cubes of this type. If false, other networks may be added. Defaults to true."
                                    },
                                    "cubeNetworks": {
                                        "type": "array",
                                        "description": "Defines constraints on networks that must or may appear in cubes of this type.",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "relationshipType": {
                                                    "$ref": "#/definitions/relationshipTypeQName"
                                                },
                                                "source": {
                                                    "$ref": "#/definitions/endpointConstraintObject"
                                                },
                                                "target": {
                                                    "$ref": "#/definitions/endpointConstraintObject"
                                                },
                                                "minNetworks": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "description": "Minimum number of networks matching this criterion that must appear in cubes of this type. Defaults to 0."
                                                },
                                                "maxNetworks": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "description": "Maximum number of networks matching this criterion that may appear in cubes of this type. If absent, no upper limit applies."
                                                },
                                                "additionalProperties": false
                                            },
                                            "required": [
                                                "relationshipType"
                                            ],
                                            "additionalProperties": false
                                        },
                                        "minItems": 1
                                    }
                                },
                                "additionalProperties": false
                            },
                            "cubeProperties": {
                                "$ref": "#/definitions/propertiesConstraintObject"
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "dataTypes": {
                    "type": "array",
                    "description": "Set of datatype objects that define custom datatypes for use in concepts and dimensions, specifying base types and validation rules.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "baseType": {
                                "$ref": "#/definitions/dataTypeQName"
                            },
                            "enumeration": {
                                "type": "array",
                                "description": "Non empty set of enumerated values of the datatype if applicable.",
                                "minItems": 1,
                                "uniqueItems": true,
                                "items": {
                                    "type": [
                                        "string",
                                        "number",
                                        "boolean"
                                    ]
                                }
                            },
                            "openEnumeration": {
                                "type": "boolean",
                                "description": "Indicates if the enumeration is open. If true, values other than those defined in the enumeration property are allowed. If false, only values defined in the enumeration property are allowed. Defaults to false if not provided."
                            },
                            "minInclusive": {
                                "type": "number",
                                "description": "Decimal value for minimum inclusive cardinal value (applies to float, double, decimal)."
                            },
                            "maxInclusive": {
                                "type": "number",
                                "description": "Decimal value for maximum inclusive cardinal value (applies to float, double, decimal)."
                            },
                            "minExclusive": {
                                "type": "number",
                                "description": "Decimal value for minimum exclusive cardinal value (applies to float, double, decimal)."
                            },
                            "maxExclusive": {
                                "type": "number",
                                "description": "Decimal value for maximum exclusive cardinal value (applies to float, double, decimal)."
                            },
                            "totalDigits": {
                                "type": "integer",
                                "description": "Total digits of a value (applies to float, double, decimal)."
                            },
                            "fractionDigits": {
                                "type": "integer",
                                "description": "Digits to the right of the decimal place (applies to float, double, decimal)."
                            },
                            "length": {
                                "type": "integer",
                                "description": "Length of a string value."
                            },
                            "minLength": {
                                "type": "integer",
                                "description": "Minimum length of a string value."
                            },
                            "maxLength": {
                                "type": "integer",
                                "description": "Maximum length of a string value."
                            },
                            "whiteSpace": {
                                "type": "string",
                                "enum": [
                                    "preserve",
                                    "replace",
                                    "collapse"
                                ],
                                "description": "Whitespace handling: preserve, replace, or collapse."
                            },
                            "patterns": {
                                "type": "array",
                                "description": "Array of regex patterns (XML regex). At least one must match.",
                                "items": {
                                    "type": "string"
                                },
                                "minItems": 1,
                                "uniqueItems": true
                            },
                            "unitType": {
                                "type": "object",
                                "description": "UnitType object defining numerator, denominator, and multiplier datatypes.",
                                "properties": {
                                    "dataTypeNumerator": {
                                        "$ref": "#/definitions/dataTypeQName"
                                    },
                                    "dataTypeDenominator": {
                                        "$ref": "#/definitions/dataTypeQName"
                                    },
                                    "dataTypeMultiplier": {
                                        "$ref": "#/definitions/dataTypeQName"
                                    }
                                },
                                "additionalProperties": false
                            },
                            "allowedObjects": {
                                "type": "array",
                                "description": "Set of object type QNames where the datatype can be used as the value of the dataType property. If this property is omitted, the datatype can be used with any object that has a dataType property. The allowed objects are limited to xbrl:conceptObject, xbrl:domainClassObject, xbrl:cubeDimension, xbrl:unitObject, xbrl:transformObject, xbrl:collectionTypeObject, xbrl:propertyTypeObject, xbrl:dimensionConstraintObject, xbrl:impliedObject, or xbrl:cubeNetworkConstraintObject.",
                                "items": {
                                    "$ref": "#/definitions/QName"
                                },
                                "uniqueItems": true,
                                "minItems": 1
                            },
                            "checksumAlgorithm": {
                                "$ref": "#/definitions/QName",
                                "description": "A QName that resolves to a member object identifying a checksum algorithm to apply when validating values of this type. When this property is present on a datatype referenced by an implied Objects dataType property, the algorithm is applied to the local-name portion of any QName that resolves to that implied object."
                            }
                        },
                        "required": [
                            "name",
                            "baseType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "collectionTypes": {
                    "type": "array",
                    "description": "Array of collectionType objects. Collections define ordered or unordered sets of typed values and are identified by QName.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description": "QName that uniquely identifies the collectionType object."
                            },
                            "dataType": {
                                "$ref": "#/definitions/dataTypeQName",
                                "description": "QNamee specifying the datatype allowed as members of the collection."
                            },
                            "uniqueValues": {
                                "type": "boolean",
                                "description": "If true, all values in the collection must be unique. Defaults to true."
                            },
                            "orderedValues": {
                                "type": "boolean",
                                "description": "If true, the collection maintains insertion order. Defaults to false."
                            },
                            "maxItems": {
                                "type": "integer",
                                "minimum": 0,
                                "description": "Maximum number of items allowed in the collection."
                            },
                            "minItems": {
                                "type": "integer",
                                "minimum": 0,
                                "description": "Minimum number of items required in the collection."
                            }
                        },
                        "required": [
                            "name",
                            "dataType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "namespacePrefixes": {
                    "type": "array",
                    "description": "Array of namespacePrefixObject entries declaring preferred prefixes for namespace URIs in the model.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "namespace": {
                                "type": "string",
                                "format": "uri",
                                "description": "The namespace URI for which preferred prefixes are declared."
                            },
                            "preferredPrefixes": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "pattern": "^[a-zA-Z_][\\w.-]*$",
                                    "description": "A valid xs:NCName prefix string."
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "An ordered set of preferred prefix xs:NCName for the namespace. The first item is the preferred prefix."
                            }
                        },
                        "required": [
                            "namespace",
                            "preferredPrefixes"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "impliedObjects": {
                    "type": "array",
                    "description": "Array of impliedObject entries defining objects that are implicitly available in the model by virtue of their namespace.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName",
                                "description": "The name of the implied object definition. The local name is not used for resolution; only the namespace URI is relevant."
                            },
                            "namespace": {
                                "type": "string",
                                "format": "uri",
                                "description": "The namespace URI that defines the implied object namespace. Any QName with this namespace is considered to resolve to an implied object of the type defined by this entry."
                            },
                            "domainClass": {
                                "$ref": "#/definitions/QName",
                                "description": "The domain class that the implied object belongs to."
                            },
                            "objectType": {
                                "$ref": "#/definitions/QName",
                                "description": "The object type that the implied object represents."
                            },
                            "localNameConstraint": {
                                "$ref": "#/definitions/dataTypeQName",
                                "description": "Optional QName referencing a dataType or collectionType object that constrains the data type of the implied object's local name."
                            }
                        },
                        "required": [
                            "name",
                            "namespace",
                            "domainClass",
                            "objectType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "transforms": {
                    "type": "array",
                    "description": "Set of transform objects that define data transformations for converting values between datatypes during fact mapping.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "$ref": "#/definitions/QName"
                            },
                            "inputDataType": {
                                "$ref": "#/definitions/dataTypeQName"
                            },
                            "outputDataType": {
                                "$ref": "#/definitions/dataTypeQName"
                            }
                        },
                        "required": [
                            "name",
                            "inputDataType",
                            "outputDataType"
                        ],
                        "additionalProperties": false
                    },
                    "uniqueItems": true,
                    "minItems": 1
                },
                "layouts": {
                    "type": "array",
                    "description": "Set of layout objects that define visual presentation layouts for displaying taxonomy data in structured formats.",
                    "items": {
                        "type": "object",
                        "name": {
                            "$ref": "#/definitions/QName"
                        },
                        "properties": {
                            "tableConstruction": {
                                "type": "string",
                                "enum": [
                                    "topDown",
                                    "leftRight"
                                ],
                                "description": "Specifies how multiple tables in the dataTables array should be joined together. 'topDown' stacks tables vertically, 'leftRight' places them horizontally."
                            },
                            "dataTables": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "name": {
                                            "$ref": "#/definitions/QName"
                                        },
                                        "tableType": {
                                            "type": "string",
                                            "enum": [
                                                "gridLayout",
                                                "cubeLayout"
                                            ],
                                            "description": "Specifies the layout type for the table. 'gridLayout' uses explicit grid positioning with tablePoints, 'cubeLayout' uses traditional cube-based rendering."
                                        },
                                        "cubeName": {
                                            "$ref": "#/definitions/cubeQName"
                                        },
                                        "xAxis": {
                                            "$ref": "#/definitions/axisObject"
                                        },
                                        "yAxis": {
                                            "$ref": "#/definitions/axisObject"
                                        },
                                        "zAxis": {
                                            "$ref": "#/definitions/axisObject"
                                        },
                                        "tablePoints": {
                                            "type": "array",
                                            "description": "Array of table point objects that map dimension member pairs to specific grid cells. Used with gridLayout tableType.",
                                            "items": {
                                                "$ref": "#/definitions/tablePointObject"
                                            }
                                        }
                                    },
                                    "required": [
                                        "name",
                                        "tableType",
                                        "xAxis",
                                        "yAxis"
                                    ],
                                    "additionalProperties": false
                                },
                                "uniqueItems": true,
                                "minItems": 1,
                                "description": "The dataTable object defines a table structure based on the data contained in a cube object. The data table object defines how a multidimensional structure is laid out into a two-dimensional structure based on the dimensions in a taxonomy defined cube or based on a fixed grid structure."
                            }
                        },
                        "required": [
                            "name"
                        ]
                    }
                }
            },
            "required": [
                "name"
            ],
            "additionalProperties": false
        }
    },
    "definitions": {
        "propertyObject": {
            "description": "The property object instantiates a model-defined property. The property value is constrained by the datatype of the property type object, which may be a scalar type or a collection type object. The property type object may also restrict the object types that a property can be used with.",
            "type": "object",
            "properties": {
                "property": {
                    "$ref": "#/definitions/propertyTypeQName"
                },
                "value": {
                    "description": "The value of the property. The expected type depends on the property's dataType — may be a string, number, boolean, array, or object."
                }
            },
            "required": [
                "property",
                "value"
            ],
            "additionalProperties": false,
            "allOf": [
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:balance"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "type": "string",
                                "enum": [
                                    "credit",
                                    "debit"
                                ]
                            }
                        }
                    }
                },
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:intervalOfMeasurement"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "type": "string",
                                "pattern": "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$",
                                "description": "An ISO 8601 duration (xs:duration), e.g. PT1H"
                            }
                        }
                    }
                },
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:timeSeriesType"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "type": "string",
                                "enum": [
                                    "Raw",
                                    "Aggregated"
                                ]
                            }
                        }
                    }
                },
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:intervalConvention"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "type": "string",
                                "enum": [
                                    "StartTime",
                                    "EndTime"
                                ]
                            }
                        }
                    }
                },
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:completeTimeSeries"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "type": "boolean"
                            }
                        }
                    }
                },
                {
                    "if": {
                        "properties": {
                            "property": {
                                "const": "xbrla:excludedIntervals"
                            }
                        }
                    },
                    "then": {
                        "properties": {
                            "value": {
                                "oneOf": [
                                    {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "minItems": 1
                                    },
                                    {
                                        "type": "string"
                                    }
                                ],
                                "description": "A list of excluded interval identifiers (e.g., RRULE/EXDATE strings) or a single string."
                            }
                        }
                    }
                }
            ]
        },
        "axisObject": {
            "description": "The axis object defines the dimensions associated with an axis, the labels that are used on the axis, and links the order of items on the axis to networks defined in the model.",
            "type": "object",
            "properties": {
                "axisHeaders": {
                    "type": "array",
                    "description": "Array of axis header objects that define the dimensions and labels for the axis.",
                    "items": {
                        "$ref": "#/definitions/axisHeaderObject"
                    },
                    "minItems": 1
                },
                "axisLabelsGroup": {
                    "type": "object",
                    "description": "Optional grouping of axis labels with valueArray and/or range specifications.",
                    "properties": {
                        "valueArray": {
                            "type": "array",
                            "description": "Array of string values to use as axis labels.",
                            "items": {
                                "type": "string"
                            }
                        },
                        "range": {
                            "type": "object",
                            "description": "Range specification for generating axis labels based on an xs:integer data type.",
                            "properties": {
                                "interval": {
                                    "type": "string",
                                    "description": "The interval between range values."
                                },
                                "startValue": {
                                    "type": "string",
                                    "description": "The starting value of the range."
                                },
                                "stopValue": {
                                    "type": "string",
                                    "description": "The ending value of the range."
                                },
                                "prefix": {
                                    "type": "string",
                                    "description": "A string prefix to prepend to each generated label."
                                },
                                "suffix": {
                                    "type": "string",
                                    "description": "A string suffix to append to each generated label."
                                },
                                "order": {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending"
                                    ],
                                    "description": "The order of the range values."
                                }
                            },
                            "additionalProperties": false
                        }
                    },
                    "additionalProperties": false
                },
                "gridAxis": {
                    "type": "object",
                    "description": "Grid axis configuration for aligning dimension pairs with rows and columns in grid layouts.",
                    "properties": {
                        "axisItems": {
                            "type": "array",
                            "description": "Array of individual axis items that define specific dimension member pairs.",
                            "items": {
                                "$ref": "#/definitions/axisItemObject"
                            }
                        },
                        "axisGroups": {
                            "type": "array",
                            "description": "Array of axis groups that organize dimension member pairs into logical groupings.",
                            "items": {
                                "$ref": "#/definitions/axisGroupObject"
                            }
                        }
                    },
                    "additionalProperties": false
                },
                "gridHeaders": {
                    "type": "array",
                    "description": "Array of grid header objects that define additional header rows or columns for grid layouts, providing labels and structure beyond axisIds.",
                    "items": {
                        "$ref": "#/definitions/gridHeaderObject"
                    },
                    "minItems": 1
                }
            },
            "anyOf": [
                {
                    "required": [
                        "axisHeaders"
                    ]
                },
                {
                    "required": [
                        "gridAxis"
                    ]
                }
            ],
            "additionalProperties": false
        },
        "axisHeaderObject": {
            "description": "The axis header object defines the dimensions and labels for a specific header on an axis. An axisHeader object specifies a dimension, its members, and how they should be displayed.",
            "type": "object",
            "properties": {
                "dimensionName": {
                    "$ref": "#/definitions/QName",
                    "description": "The name of the dimension for this axis header."
                },
                "labelType": {
                    "$ref": "#/definitions/QName",
                    "description": "The label type to use for displaying axis members."
                },
                "language": {
                    "type": "string",
                    "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                    "description": "Defines the language of the labels using a valid BCP 47 [BCP47] language code."
                },
                "axisMembers": {
                    "type": "array",
                    "description": "Array of member QNames to display on this axis.",
                    "items": {
                        "$ref": "#/definitions/QName"
                    }
                },
                "axisNetwork": {
                    "$ref": "#/definitions/QName",
                    "description": "The network QName that defines the hierarchy of axis members."
                },
                "dimensionOptional": {
                    "type": "boolean",
                    "description": "Indicates whether the dimension is optional."
                },
                "totalLocation": {
                    "type": "string",
                    "enum": [
                        "start",
                        "end",
                        "none"
                    ],
                    "description": "Specifies where totals should be displayed relative to the dimension members."
                },
                "groupDuplicateLabels": {
                    "type": "boolean",
                    "description": "If true, duplicate labels on the axis will be grouped together."
                },
                "labelTransform": {
                    "$ref": "#/definitions/QName",
                    "description": "The transform to apply to dimension labels."
                },
                "typedLabel": {
                    "type": "object",
                    "description": "Configuration for typed dimension labels. Either use 'range' alone, or 'use' with optional 'transform', but not both patterns together.",
                    "oneOf": [
                        {
                            "description": "Range-only pattern: range is used by itself without use or transform.",
                            "properties": {
                                "range": {
                                    "type": "object",
                                    "description": "Range specification for typed label values.",
                                    "properties": {
                                        "interval": {
                                            "type": "string",
                                            "description": "The interval between range values."
                                        },
                                        "startValue": {
                                            "type": "string",
                                            "description": "The starting value of the range."
                                        },
                                        "stopValue": {
                                            "type": "string",
                                            "description": "The ending value of the range."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ],
                                            "description": "The order of the range values."
                                        }
                                    },
                                    "additionalProperties": false
                                }
                            },
                            "required": [
                                "range"
                            ],
                            "additionalProperties": false
                        },
                        {
                            "description": "Use/transform pattern: use is required, transform is optional, range is not allowed.",
                            "properties": {
                                "use": {
                                    "type": "string",
                                    "enum": [
                                        "value",
                                        "formattedValue"
                                    ],
                                    "description": "How to use the typed value. Must be either 'value' or 'formattedValue'."
                                },
                                "transform": {
                                    "$ref": "#/definitions/QName",
                                    "description": "The transform to apply to typed values. Can only be defined if 'use' is defined."
                                }
                            },
                            "required": [
                                "use"
                            ],
                            "additionalProperties": false
                        }
                    ]
                }
            },
            "required": [
                "dimensionName"
            ],
            "additionalProperties": false
        },
        "axisItemObject": {
            "type": "object",
            "description": "Defines a single axis item with dimension member pairs for grid positioning. Contains an axisId and a dimensions object with dimension-member pairs.",
            "properties": {
                "axisId": {
                    "type": "string",
                    "description": "Identifier for this axis item (e.g., 'C0030', 'R0100')."
                },
                "dimensions": {
                    "type": "object",
                    "description": "Object mapping dimension QNames to their member values for this axis item. Similar to fact dimensions but without requiring xbrl:concept.",
                    "properties": {
                        "xbrl:concept": {
                            "$ref": "#/definitions/conceptQName"
                        },
                        "xbrl:entity": {
                            "$ref": "#/definitions/SQName"
                        },
                        "xbrl:unit": {
                            "oneOf": [
                                {
                                    "type": "string",
                                    "pattern": ".*(\\*|/).*"
                                },
                                {
                                    "$ref": "#/definitions/unitQName"
                                }
                            ]
                        },
                        "xbrl:period": {
                            "type": "string"
                        }
                    },
                    "patternProperties": {
                        "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$": {
                            "oneOf": [
                                {
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                },
                                {
                                    "type": "null"
                                }
                            ]
                        }
                    },
                    "additionalProperties": false
                }
            },
            "required": [
                "dimensions"
            ],
            "additionalProperties": false
        },
        "axisGroupObject": {
            "type": "object",
            "description": "Groups axis items by dimension and network, specifying which axis IDs belong to this group.",
            "properties": {
                "dimensionName": {
                    "$ref": "#/definitions/dimensionQName",
                    "description": "The dimension name for this axis group."
                },
                "axisNetwork": {
                    "$ref": "#/definitions/QName",
                    "description": "The network or domain network QName that defines the structure of axis members in this group."
                },
                "axisIds": {
                    "type": "array",
                    "description": "Array of axis identifiers (e.g., 'R0100', 'R0110') that belong to this group.",
                    "items": {
                        "type": "string"
                    }
                },
                "axisStart": {
                    "type": "integer",
                    "description": "Optional axis ID that indicates the start location of the group on the axis. This is used for positioning the group on the axis. If not provided the group starts at the first position on the grid or a default value of 1."
                }
            },
            "required": [
                "dimensionName"
            ],
            "additionalProperties": false
        },
        "gridHeaderObject": {
            "type": "object",
            "description": "Defines a header row or column cell in a grid layout, providing label information and positioning for grid headers.",
            "properties": {
                "label": {
                    "type": "string",
                    "description": "The text label to display in the header cell."
                },
                "memberQName": {
                    "$ref": "#/definitions/QName",
                    "description": "Optional QName reference to a taxonomy member whose label should be used."
                },
                "labelType": {
                    "$ref": "#/definitions/QName",
                    "description": "The label type to use when resolving the label from memberQName."
                },
                "language": {
                    "type": "string",
                    "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$",
                    "description": "Language code for the label (BCP 47 format)."
                },
                "axisNumber": {
                    "type": "integer",
                    "description": "Axis number that this header spans or applies to."
                },
                "labelLevel": {
                    "type": "integer",
                    "description": "Hierarchical level of this header (0, 1, 2, etc.) for multi-level headers.",
                    "minimum": 0
                },
                "span": {
                    "type": "integer",
                    "description": "Number of columns or rowsthis header cell should span.",
                    "minimum": 1
                },
                "rollUpLocation": {
                    "type": "string",
                    "enum": [
                        "start",
                        "end",
                        "none"
                    ],
                    "description": "Indicates where the span starts or ends relative to the axis number. The default is 'start', meaning the header applies to the axis number and the following axes. If 'end', the header applies to the preceding axes up to and including the axis number."
                }
            },
            "required": [
                "label"
            ],
            "additionalProperties": false
        },
        "tablePointObject": {
            "type": "object",
            "description": "Maps dimension member pairs to specific grid cell coordinates in gridLayout tables.",
            "properties": {
                "gridCoordinates": {
                    "type": "object",
                    "description": "Grid coordinates identifying the cell location in the table.",
                    "properties": {
                        "xAxis": {
                            "type": "integer",
                            "description": "The x-axis (column) coordinate in the grid."
                        },
                        "yAxis": {
                            "type": "integer",
                            "description": "The y-axis (row) coordinate in the grid."
                        },
                        "zAxis": {
                            "type": "integer",
                            "description": "The z-axis coordinate in the grid (optional)."
                        }
                    },
                    "anyOf": [
                        {
                            "required": [
                                "xAxis"
                            ]
                        },
                        {
                            "required": [
                                "yAxis"
                            ]
                        },
                        {
                            "required": [
                                "zAxis"
                            ]
                        }
                    ],
                    "additionalProperties": false
                },
                "dimensions": {
                    "type": "object",
                    "description": "Map of dimension names to member names for this grid cell. Each property name is a dimension QName and its value is a member QName.",
                    "additionalProperties": {
                        "$ref": "#/definitions/QName"
                    }
                }
            },
            "required": [
                "gridCoordinates",
                "dimensions"
            ],
            "additionalProperties": false
        },
        "propertiesConstraintObject": {
            "type": "object",
            "description": "Defines constraints on properties that must or may appear on object types.",
            "properties": {
                "requiredProperties": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/propertyTypeQName"
                    },
                    "description": "Property types that must be present on the object type.",
                    "minItems": 1
                },
                "allowedProperties": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/propertyTypeQName"
                    },
                    "description": "Property types that may be present on the object type.",
                    "minItems": 1
                }
            },
            "additionalProperties": false
        },
        "endpointConstraintObject": {
            "type": "object",
            "description": "Constraints on the source of the relationship.",
            "properties": {
                "qname": {
                    "$ref": "#/definitions/QName"
                },
                "objectType": {
                    "$ref": "#/definitions/QName"
                },
                "dataType": {
                    "$ref": "#/definitions/dataTypeQName"
                }
            },
            "additionalProperties": false
        },
        "QName": {
            "type": "string",
            "xbrlType": "QName",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$",
            "description": "QName that uniquely identifies the object."
        },
        "dataTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "dataTypeQName",
            "description": "QName that references a dataType object or collectionType object. Must reference either a built-in XML Schema datatype (xs:*), a custom dataType defined in the xbrlModel, or a collectionType object defined in the xbrlModel."
        },
        "conceptQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "conceptQName",
            "description": "QName that references a concept object defined in the xbrlModel."
        },
        "dimensionQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "dimensionQName",
            "description": "QName that references a dimension object. May reference built-in dimensions (xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit, xbrl:language, xbrl:noteId) or taxonomy-defined dimensions."
        },
        "domainNetworkQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "domainNetworkQName",
            "description": "QName that references a domain network object defined in the xbrlModel."
        },
        "domainClassQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "domainClassQName",
            "description": "QName that references a domainClass object defined in the xbrlModel."
        },
        "cubeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "cubeQName",
            "description": "QName that references a cube object defined in the xbrlModel."
        },
        "cubeTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "cubeTypeQName",
            "description": "QName that references a cubeType object defined in the xbrlModel."
        },
        "modelTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "modelTypeQName",
            "description": "QName that references a modelType object defined in the xbrlModel."
        },
        "networkQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "networkQName",
            "description": "QName that references a network object defined in the xbrlModel."
        },
        "relationshipTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "relationshipTypeQName",
            "description": "QName that references a relationshipType object defined in the xbrlModel."
        },
        "labelTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "labelTypeQName",
            "description": "QName that references a labelType object defined in the xbrlModel."
        },
        "referenceTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "referenceTypeQName",
            "description": "QName that references a referenceType object defined in the xbrlModel."
        },
        "propertyTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "propertyTypeQName",
            "description": "QName that references a propertyType object defined in the xbrlModel."
        },
        "groupQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "groupQName",
            "description": "QName that references a group object defined in the xbrlModel."
        },
        "xbrlModelQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "xbrlModelQName",
            "description": "QName that references a xbrlModel object."
        },
        "unitQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "unitQName",
            "description": "QName that references a unit object defined in the xbrlModel."
        },
        "footnoteTypeQName": {
            "$ref": "#/definitions/QName",
            "xbrlType": "footnoteTypeQName",
            "description": "QName that references a footnoteType object defined in the xbrlModel."
        },
        "relationshipConstraint": {
            "type": "string",
            "xbrlType": "relationshipConstraint",
            "pattern": "^relationship\\.(source|target|property|properties)(?:\\.[A-Za-z_][A-Za-z0-9_]*(?::[A-Za-z_][A-Za-z0-9_]*)?)*\\s*(==|!=|>=|<=|>|<)\\s*[^=<>!()]+(?:\\s*(AND|OR|NOT)\\s*relationship\\.(source|target|property|properties)(?:\\.[A-Za-z_][A-Za-z0-9_]*(?::[A-Za-z_][A-Za-z0-9_]*)?)*\\s*(==|!=|>=|<=|>|<)\\s*[^=<>!()]+)*$",
            "description": "A constraint expression string as defined in the specification (oim-taxonomy.md), expressing boolean logic over properties of the source, target, and relationship."
        },
        "SQName": {
            "type": "string",
            "xbrlType": "SQName",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z0-9_.-]+$",
            "description": "QName that uniquely identifies the object."
        },
        "selectorObject": {
            "oneOf": [
                {
                    "description": "Simple string selector (e.g., 'concepts where periodType = \"instant\"')",
                    "type": "string"
                },
                {
                    "description": "Structured selector object",
                    "type": "object",
                    "properties": {
                        "objectType": {
                            "type": "string",
                            "description": "The type of object to select (e.g., 'concept', 'member', 'label')."
                        },
                        "where": {
                            "type": "array",
                            "description": "Array of filter conditions.",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "property": {
                                        "type": "string",
                                        "description": "Property name to filter on (e.g., 'periodType', 'balance', 'language')."
                                    },
                                    "operator": {
                                        "type": "string",
                                        "enum": [
                                            "==",
                                            "!=",
                                            "in",
                                            "not in",
                                            "contains",
                                            "not contains",
                                            ">",
                                            "<",
                                            ">=",
                                            "<="
                                        ],
                                        "description": "Comparison operator."
                                    },
                                    "value": {
                                        "description": "Value to compare against. Can be string, number, boolean, or array.",
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "boolean"
                                            },
                                            {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                }
                                            }
                                        ]
                                    }
                                },
                                "required": [
                                    "property",
                                    "operator",
                                    "value"
                                ]
                            }
                        }
                    },
                    "required": [
                        "objectType",
                        "where"
                    ]
                }
            ],
            "description": "Specifies a set of structured select objects that define the objects to be included in the import. Each select statement specifies the objects to be selected from the XBRL Model. The select statements can include object names, types, and properties."
        },
        "dateResolutionObject": {
            "type": "object",
            "description": "Gregorian date that recurs (dateResolution object).",
            "properties": {
                "conceptName": {
                    "type": "string",
                    "pattern": "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*$",
                    "description": "QName of a concept object that has a date fact value.",
                    "xbrlType" : "conceptQname"
                },
                "context": {
                    "type": "string",
                    "pattern": "^[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*(?:@(end|start))?$",
                    "description": "QName of a concept object, with optional @end or @start suffix to indicate which date from the context is used."
                    

                },
                "dateProperty": {
                    "type": "string",
                    "description": "The name of a property (propertyType QName) whose value is a date."
                },
                "value": {
                    "type": "string",
                    "format": "date",
                    "description": "A literal date value representing the end date."
                },
                "timeShift": {
                    "type": "string",
                    "pattern": "^-?P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$",
                    "description": "A duration (ISO 8601) string to shift the resolved date."
                }
            },
            "oneOf": [
                {
                    "required": [
                        "conceptName"
                    ]
                },
                {
                    "required": [
                        "context"
                    ]
                },
                {
                    "required": [
                        "value"
                    ]
                }
            ],
            "additionalProperties": false
        },
        "factValueSourceObject": {
            "type": "object",
            "description": "Identifies a single contiguous fragment of a source document that contributes (by concatenation) to a fact value. When the parent factValue carries a locatorType and source, each entry need only supply the fragment-specific addressing properties. The legacy flat approach (medium, id, page, etc.) is also accepted for backward compatibility.",
            "properties": {
                "properties": {
                    "type": "array",
                    "description": "Fragment-specific addressing properties validated against the requiredProperties and allowedProperties of the locatorType declared on the parent factValue.",
                    "items": {
                        "$ref": "#/definitions/propertyObject"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                }
            },
            "additionalProperties": false
        },
        "factValueAnchorObject": {
            "type": "object",
            "description": "Identifies a region of a source document that visually corresponds to a fact value, for tool highlighting and mouse-over. Carries no extraction semantics. When the parent factValue carries a locatorType and source, each entry need only supply the fragment-specific addressing properties.",
            "properties": {
                "properties": {
                    "type": "array",
                    "description": "Fragment-specific addressing properties validated against the allowedProperties of the locatorType declared on the parent factValue.",
                    "items": {
                        "$ref": "#/definitions/propertyObject"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                }
            },
            "additionalProperties": false
        },
        "factLocatorTypeObject": {
            "type": "object",
            "description": "Defines a named strategy (interface) for locating content within a source document. Specifies the required and allowed properties for any fact location of this type.",
            "properties": {
                "name": {
                    "$ref": "#/definitions/QName",
                    "description": "Unique QName identifying this locator type."
                },
                "sourceMediaType": {
                    "type": "string",
                    "description": "Advisory MIME type hint for the target document medium (e.g. text/html, application/pdf, text/csv)."
                },
                "requiredProperties": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/QName"
                    },
                    "uniqueItems": true,
                    "description": "Set of property QNames that MUST appear on every fact Locator of this type.",
                    "minItems": 1
                },
                "allowedProperties": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/QName"
                    },
                    "uniqueItems": true,
                    "description": "Set of property QNames that MAY appear on a fact locator of this type. Properties outside this set are not permitted.",
                    "minItems": 1
                }
            },
            "required": [
                "name"
            ],
            "additionalProperties": false
        }
    },
    "required": [
        "documentInfo",
        "xbrlModel"
    ],
    "additionalProperties": false
}
