Project Tavi 1.0

Public Working Draft 1 September 2026

This version
https://www.xbrl.org/Specification/tavi/PWD-2026-09-01/tavi-PWD-2026-09-01.html
Editors
Herm Fischer, Exbee Ltd <herm@exbee.dev>
Campbell Pryde, XBRL.US <campbell.pryde@xbrl.us>
Contributors
David Bell, AM2 Ltd <david.bell@am2ltd.com>
Phillip Engel, XBRL.US <phillip.engel@xbrl.us>
Paul Warren, XBRL International Inc. <pdw@xbrl.org>

Table of Contents

Definitions

Error codes

1 Status

This Public Working Draft has been approved for publication by the XBRL Standards Board for the purpose of obtaining feedback. It is not recommended for use in production systems, and may change significantly prior to finalisation.

This initial Public Working Draft is intended to communicate the strategic direction for the XBRL specification. The specification is still under development and is subject to change. The content of this document is not final and sections of the document may be updated, replaced, or removed as it moves to a recommended status. This document is provided for review and comment only. It is not a formal specification and does not represent the final position of XBRL International Inc. or its members.

Sections of the document appear in blue boxes (such as this) that indicate a placeholder for future drafts of the specification.

"Project Tavi" a is working title, and will be updated prior to finalisation. This project was previously referred to as "OIM Taxonomy", but has been renamed as this did not accurately describe its scope or content.

Reviewers of the document should read the document from the perspective of the following:

  1. Review for the purpose of providing consumable business reporting semantics.
  2. Identify missing functionality that is currently in use in XBRL implementations today.
  3. Identify ambiguities in the proposed specification.
  4. Identify inconsistencies in the proposed specification.
  5. Identify missing functionality that is required to support future XBRL implementations.

To assist in the review of the document, example models and applications are provided so the intended functionality can be assessed.

2 Introduction

The XBRL v2.1 specification and XBRL Dimensions v1.0 specifications define an XML-based syntax for business reporting, along with accompanying metadata definitions known as taxonomies. While XML is the original format for XBRL, there is increasing demand to work with XBRL data in alternative formats.

This specification introduces a syntax-independent model for representing XBRL objects. The model captures the full range of semantic information encoded in the XML syntax of XBRL v2.1, and removes format-specific constructs. This enables consistent interpretation and use of XBRL models across multiple syntactic representations, supporting simpler, more portable implementations and greater accessibility for a broader range of users and technologies.

2.1 Scope

This document defines an XBRL model that encapsulates both the traditional XBRL taxonomy and OIM Report Model.

2.2 Terminology

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, in this specification, are to be interpreted as described in IETF RFC 2119.

The keywords expanded name, NCName and QName are to be interpreted as described in the XML Names specification.

2.2.1 Defined terms for the XBRL Model

An XBRL model is a collection of XBRL objects that can be represented as a collection of XBRL modules or a single Compiled Model. An XBRL model is the complete set of objects that define a taxonomy or instance. An XBRL model can be represented as a single file or as a collection of files. An XBRL model can be extended by importing other models.

A XBRL module is the primary building block used to define models. A module defines XBRL objects within a single namespace. XBRL modules can refer to objects in different namespaces, using an import taxonomy object. All objects defined using the name property in a XBRL module are defined using the same namespace. A XBRL module can be imported by other modules or compiled into a compiled model. A module is identified with a documentType of https://xbrl.org/PWD/2026-09-01/module. A module is required to define a documentNamespacePrefix property in the documentInfo object, and all objects defined in the module are in the namespace defined by the documentNamespacePrefix.

A resolved model is a XBRL model in which all import taxonomy objects and extending objects have been processed and all references to external objects have been resolved. A resolved model is complete in the sense that it contains all objects necessary to fully interpret the model. A resolved model is not a compiled model as a compiled model is a serialisation format.

A compiled model is a fully resolved model that includes all objects defined in the entry module and all imported models. A compiled model is the result of processing an entry module and all its imports. The compiled model includes all objects that are discovered by processing all import taxonomy objects and extending objects defined in XBRL modules. A compiled model cannot include an import taxonomy object, an extending object or a documentNamespacePrefix property. An XBRL compiled model can be imported and extended by an XBRL module. A compiled model when serialized is identified with a documentType of https://xbrl.org/PWD/2026-09-01/compiled.

A label bundle module is a XBRL module that is used to provide an additional layer of presentational and annotational information to an existing XBRL model. Its primary purpose is to allow defining labels in different languages that can be layered on existing XBRL models. A label bundle module is restricted to defining label objects and indicates the XBRL model that it can be associated with. A label bundle module has a documentType of https://xbrl.org/PWD/2026-09-01/labelBundle.

A reference bundle module is a XBRL module that is used to provide an additional layer of reference information to an existing XBRL model. Its primary purpose is to allow defining references that can be layered on existing XBRL models. A reference bundle module is restricted to defining reference objects and indicates the XBRL model that it can be associated with. A reference bundle module has a documentType of https://xbrl.org/PWD/2026-09-01/referenceBundle.

A structurally valid document is a document that does not contain an object structure error. In the case of a JSON document the document must conform to the constraints defined in Section 3.2.

2.3 Documentation conventions

2.3.1 Definitions

Green text denotes a definition of the term in bold font. For example:

An example term is defined by this text.

2.3.2 Non-normative notes

Text in a blue box denotes a non-normative explanatory note:

This is non-normative commentary.

2.3.3 Error codes

QNames in parenthetical red text after a "MUST" or "MUST NOT" statement prescribe standardised error codes to be used if the preceding condition is violated. For example,

The example property MUST be defined (eg:exampleErrorCode).

"MUST" or "MUST NOT" statements that do not have a prescribed error code are not automatically enforceable, and processors are not required to detect violations.

2.3.4 Draft notes

Text in a dark blue box denotes a non-normative editorial note with information for reviewers of this draft specification.

This is a draft note.

2.4 Namespaces and namespace prefixes

This specification makes use of QName notation to refer to XML expanded names (the combination of a namespace URI and a local name) make use of abbreviated forms for these identifiers. This specification defines a number of prefixes as being reserved prefixes.

A reserved prefix is any prefix defined in the table below:

Prefix Namespace URI
xbrl https://xbrl.org/PWD/2026-09-01
xbrlr https://xbrl.org/PWD/2026-09-01/report
xbrla https://xbrl.org/PWD/2026-09-01/accounting
xbrli-2003 https://xbrl.org/2003/instance
xs https://www.w3.org/2001/XMLSchema
enum2 https://xbrl.org/2020/extensible-enumerations-2.0
oimce https://xbrl.org/2021/oim-common/error
oime http://www.xbrl.org/2021/oim/error
oimte https://xbrl.org/PWD/2026-09-01/oimtaxonomy/error
iso4217 http://www.xbrl.org/2003/iso4217
lei http://standards.iso.org/iso/17442
utr https://xbrl.org/PWD/2026-09-01/utr
ref https://xbrl.org/PWD/2026-09-01/ref
xbrltt https://xbrl.org/PWD/2026-09-01/transform-types

Namespace URIs are the authoritative identity for all objects in an XBRL model. Every QName value (such as exp:Concept1) is resolved to its expanded name — the combination of its namespace URI and local name — using the namespaces map declared in the documentInfo object of each document. Once resolved, the prefix plays no further role: two documents that use different prefixes (exp:Concept1 and acme:Concept1) are referring to the same object if both prefixes map to the same namespace URI.

Prefixes are a serialisation convenience. They are declared per-document in the namespaces object and are scoped to that document only. The same prefix may map to different URIs in different documents, and different prefixes may map to the same URI. When modules are compiled into a single compiled model, the compiler resolves all prefix mappings to their underlying URIs, tracks objects by their expanded names, and produces a single canonical namespaces map for the output. Any prefix conflicts between imported modules are resolved at compile time and do not affect the identity or semantics of the objects.

2.5 Object definitions

This specification defines a set of object types. Each object type has a set of named properties. The type of each property is specified in the format "(Model type / JSON type)".

The model type is:

Where a collection type is stated as being non-empty, the collection MUST contain at least one item (oimte:invalidEmptySet). The evaluation of an empty set occurs when validating the XBRL module or compiled model. The evaluation of an empty set is performed at the document level and not the XBRL model level.

At the model level an empty set in a module may have items at the model level set when combined with other modules where the set is not empty such as domain class objects in the domain classes set that are included in the built-in model.

The JSON type is one or more JSON primitive types: string, array, object, or number.

The description of each named property indicates if the property is optional or required. For extensible objects additional usage constraints are defined in the definition. The definition identifies if the base object or extending object is optional, required or prohibited.

3 Validation

3.1 Object structure constraints

An object structure error is an error that occurs when an object does not conform to the structural requirements defined for that object type. Structural errors include the absence of required properties, the presence of properties that are not defined for the object type, and the conformity of property values to their specified types.

Where the specification defines an object structure error the processor raises the corresponding syntax error, dependent on the syntactic format that the model is expressed in. For example if the syntax is JSON then an invalid JSON Structure error is raised.

This approach allows object structure errors to be defined in a format specific schema such as XML schema, or JSON schema to detect object structure errors.

3.2 JSON representation constraints

The XBRL Model has a standard serialisation in JSON format. Files in this format MUST conform to the constraints in this section.

JSON documents MUST be valid JSON as defined in [RFC 8259] (oime:invalidJSON).

To ensure interoperability, all objects in JSON documents conforming to this specification MUST have unique keys (oime:invalidJSON).

JSON documents MUST use UTF-8 character encoding (oime:invalidJSON). Although a Unicode Byte Order Mark (BOM) MAY be included, it is neither required nor recommended.

This specification defines a model type and JSON type for each object property.

Values in a JSON document MUST conform to the specified JSON type (oimte:invalidJSONStructure)

Properties marked as "required" MUST be present whenever the containing object is present (oimte:invalidJSONStructureMissingRequiredProperty).

Objects cannot contain properties that are not defined for the object type (oimte:invalidJSONStructure).

3.3 Object name constraints

All namespace prefixes used in a XBRL module MUST be defined in the namespaces property of the document info object of the module (oimce:unboundPrefix).

All referenceable objects within an XBRL model MUST have a unique name property value within the XBRL model (oimte:duplicateObjects).

All referenceable objects objects defined in an XBRL Model with a documentType property of https://xbrl.org/PWD/2026-09-01/module MUST be in the namespace defined by the documentNamespacePrefix property of the document info object of the module (oimte:objectNamespaceMismatch).

XBRL modules MUST NOT have a documentNamespacePrefix that is a reserved prefix, or which maps to a namespace URI with a host component in the xbrl.org domain unless it is published by XBRL International.

3.4 Object reference constraints

Objects in an XBRL model may refer to other objects in the model using a QName value that refers to the name property of another object.

The term reference means that the value, or values in the case of collection types, of the specified property correspond to the name property of model objects of the specified object type.

The term referenced object means a referenceable object that is the subject of a reference.

Where a value is specified as being a reference:

Objects defined in an XBRL module with a reserved prefix (such as 'xbrl', 'xs', 'xbrlr') MUST only be bound to the namespace URI prescribed for that alias in the reserved prefix section of the specification, and MUST NOT be used as the namespace prefix for non specification defined object names in an XBRL Model (oimce:invalidURIForReservedAlias).

3.5 Duplicate Item constraints

Items included in a set or ordered set must have no repeating items. (oimte:duplicateItemsInSet)

3.6 Implied object resolution

Objects in an XBRL model are defined explicitly within a XBRL module or imported from another model. For externally defined identifiers it is impractical or impossible to enumerate these as specific objects. The population of objects may be very large, may change too rapidly to be captured in a static model, or may be authoritatively defined at an external location that is not represented as an importable XBRL model. For example the Legal Entity Identifier (LEI) system maintained under ISO 17442, where millions of globally unique entity identifiers are registered continuously.

For such identifiers, a XBRL module or compiled model MAY reference member objects or entity object that are not explicitly defined in an imported XBRL module. A QName whose namespace URI is registered as an implied object namespace that resolves to an implied object whose domain class is determined by the namespace binding. An implied object is treated as a fully valid object of the appropriate domain class. A processor MUST raise oimte:invalidObjectType for a QName whose prefix maps to an implied object namespace and the object does not match the expected object type defined by the implied object.

An implied object namespace MUST still be declared in the namespaces map of the document info object. The implied object mechanism exempts the requirement to define the object explicitly, but does not exempt the requirement to declare the prefix (oimce:unboundPrefix).

The prefix for an implied object namespace becomes a reserved prefix and MUST NOT be used to define objects in an XBRL module (oimce:invalidURIForReservedAlias).

The implied object defines the mapping of implied object namespaces to their domain classes.

4 Document management and content

4.1 XBRL document structure

An XBRL document consists of the following two objects:

documentInfo (documentInfo object / object)
(required) A document info object. This object describes the structure of a JSON document file, and that documentInfo is a document-level envelope that is not part of the compiled XBRL model.
xbrlModel (xbrl:xbrlModelObject / object)
(required) An XBRL Model object.

In JSON documents, the documentInfo object MUST appear before the xbrlModel object (oimte:invalidJSONStructure). Processors MUST validate document structure before processing model content, and the documentInfo object provides the namespace prefix map and other metadata required to interpret QName values in the xbrlModel. Placing documentInfo first ensures that a processor can resolve prefixes in document order without backtracking.

4.2 DocumentInfo

The document info object provides document-level information about the document. The document info object is a document-level envelope that is not part of the XBRL model. Every document (whether a module, a compiled model or a label bundle module) comprises a documentInfo object. The document info object is not semantic content that comprises the XBRL Model. The document info object is required to resolve the QName prefix to the namespace URI defined in the namespace map.

The object has the following properties:

documentType (xs:anyURI / string)

(required) A URI that represents the type of model document. This indicates if the model is a compiled model, a XBRL module, a label bundle module or a reference bundle module. A compiled model is indicated by the URI https://xbrl.org/PWD/2026-09-01/compiled, aXBRL module is indicated by the URI https://xbrl.org/PWD/2026-09-01/module, a label bundle module is indicated by the URI https://xbrl.org/PWD/2026-09-01/labelBundle, and a reference bundle module is indicated by the URI https://xbrl.org/PWD/2026-09-01/referenceBundle. The documentType property is not part of the XBRL model, but is a document level construct that indicates the type of document being processed. The value of documentType MUST be one of the four specified URIs, and processors MUST raise an error if an unrecognized URI is encountered (oimte:invalidDocumentType).

namespaces (xbrl:namespaceObject / object)
(required) A prefix map object defining the prefix map for QNames, SQNames and xbrlr:prefixedContent values in a model.
documentNamespacePrefix (xs:NCName / string)
(optional) A NCName that identifies the namespace prefix of the document.
importMapping (xbrl:importMappingObject / object)
(optional) An import mapping object providing a mapping from an XBRL model object QName to the URL location of the model, used for import resolution.
sourceMappings (non-empty set of xbrl:factSourceMappingObject objects / array)
(optional) A set of fact source mapping objects listing the mapping between fact source object QNames and their source document URL locations. Although sourceMappings is excluded from the model (see Excluded properties), it is not removed from the document. A compiled model MUST retain the sourceMappings property in its documentInfo whenever the model contains fact value source objects or fact value anchor objects that reference an external source file via a source QName (oimte:missingSourceMapping).
description (xs:string / string)
(optional) A string that provides a description of the XBRL module.

The documentNamespacePrefix property is required if the model type is an XBRL module.

4.2.1 Document info constraints

If a documentNamespacePrefix property is defined in the document info object, the value of documentNamespacePrefix MUST be a prefix string that is defined as a key in the namespaces property of the document info object (oimte:documentNamespacePrefixNotDefined).

If the documentType property is https://xbrl.org/PWD/2026-09-01/module or https://xbrl.org/PWD/2026-09-01/labelBundle then the documentNamespacePrefix property MUST be defined (oimte:documentNamespaceNotDefined).

If the documentType property is https://xbrl.org/PWD/2026-09-01/compiled then:

4.2.2 Namespaces object

The namespaces object is a prefix map object that resolves the prefix component of a QName or SQName to a URI. The object has a QName of xbrl:namespaceObject.

The namespaces object consists of a set of prefix URI pairs.

{prefix} (xs:anyURI / string)
(required) The name of the key is a NCName prefix or URI alias and the value is the URI of the namespace associated with the URI alias.

The prefix map is a URI map that MUST conform to the constraints defined for the URI map object.

An example namespace map is shown below:

 "namespaces": {
            "exp":  "http://example.com/taxonomy",
            "lei": "http://standards.iso.org/iso/17442",
            "xbrl": "https://xbrl.org/PWD/2026-09-01",
            "iso4217": "http://www.xbrl.org/2003/iso4217",
            "utr": "https://xbrl.org/PWD/2026-09-01/utr",
            "xbrlr":"https://xbrl.org/PWD/2026-09-01/report",
            "xs": "http://www.w3.org/2001/XMLSchema",
            "ref":"https://xbrl.org/PWD/2026-09-01/ref"  
            }

Tools that produce compiled models should remove unused prefix declarations from the `namespaces` map, but processors don't raise an error for unused prefix declarations that remain in the map.

4.2.3 Import mapping object

The import mapping object is a JSON object where each key is the QName of an XBRL Model object and each value is a single URL string identifying the location of the document that defines that model. The importMapping provides the processor with the file locations needed to resolve xbrlModelName references in import taxonomy objects.

The import mapping object has a QName of xbrl:importMappingObject.

Import mappings MUST NOT be defined for built-in models (oimte:illegalImportMappingForBuiltInTaxonomy).

The import mapping object consists of a set of model QName to URL pairs.

Any QName (xs:anyURI / string)
Provides a mapping from an XBRL Model object to a URL providing the location of the document containing that model.
 "importMapping": {
   "exp:SampleTaxonomy": "../examples/exampleTaxonomy.json",
   "xbrla:accountingModule": "../spec-taxonomies/xbrla.json"
  }

4.2.3.1 Import mapping object constraints

When a processor resolves an xbrlModelName reference that appears in importedTaxonomies, it must look up the QName in the import mapping object to obtain the URL, and retrieve and process the model at that URL.

If no importMapping key exists in the XBRL module for a xbrlModelName QName defined in an import taxonomy object that is not a built-in model, the processor MUST raise an error (oimte:taxonomyNotFound).

The import mapping objects defined in all the XBRL modules comprising a model MUST have the same URL corresponding to each xbrlModelName (oimte:inconsistentTaxonomyURL).

The mapping file location defined in the import mapping object must be defined in the same module as the import statement. The location is scoped to the module. An error is raised if the module file location URL differs from the xbrlModelName across modules that comprise the model. A file location URL can be associated with one or more xbrlModelName QNames.

The document retrieved from the URL MUST be a structurally valid document.

Processors are not required to load or validate importMapping entries for model QNames that are not referenced in an import taxonomy object.

4.2.4 Fact source mapping object

The fact source mapping Object identifies a data source document and the fact source object QName reference. The object provides a sourceName (the fact source object) and a url (the location of the source document). The object enables processors to locate the actual data files (such as CSV files, HTML files, or other data formats) associated with each fact source object. The object has a QName of xbrl:factSourceMappingObject.

The fact source mapping object has the following properties:

sourceName (xs:QName / string)
(required) 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 (oimte:duplicateSourceNameProperty).
url (xs:anyURI / string)
(required) A URL string identifying the location of the source document referenced by the factSource.
The following example shows a sourceMappings array that maps two fact source mapping objects to their respective source documents:
"sourceMappings": [
    {
        "sourceName": "exp:QuarterlyFinancials",
        "url": "https://example.com/data/q4-2025.csv"
    },
    {
        "sourceName": "aapl:annualReport",
        "url": "https://example.com/reports/aapl-20240928.htm"
    }
]
In this example:
  1. The exp:QuarterlyFinancials factSource references a single CSV file containing quarterly financial data.
  2. The aapl:annualReport factSource references an HTML annual report.
  3. The processor uses these URLs to locate and load the actual data when applying the factMap template defined in each fact source object.

4.2.5 Document type identification

A document is considered to have the XBRL model document type if it is a valid JSON document and the JSON Pointer /documentInfo/documentType resolves to one of the following strings:

https://xbrl.org/PWD/2026-09-01/module
https://xbrl.org/PWD/2026-09-01/compiled
https://xbrl.org/PWD/2026-09-01/labelBundle
https://xbrl.org/PWD/2026-09-01/referenceBundle

If a document does not have this document type, it MUST be processed according to the rules defined in the OIM Common specification. In such cases, the errors defined in this specification MUST NOT be raised—with the exception of (oime:invalidJSON), which MUST still be enforced.

4.2.6 Bundle module constraints.

A label bundle module or reference bundle module MUST define the documentNamespacePrefix property of the document info object (oimte:documentNamespacePrefixNotDefined).

A label bundle module MUST only contain label objects in the model object (oimte:invalidBundleModuleContent).

A reference bundle module MUST only contain reference objects in the model object (oimte:invalidBundleModuleContent).

A label bundle module or reference bundle module MUST define the referenceModel property of the model object (oimte:missingBundleModuleReferenceModel).

A label bundle module used as an entry module MUST validate that the QName value of the forObject property of all label objects references an object defined in the referenceModel (oimte:invalidQNameReference). The referencedModel is resolved to a resolved model and the forObject property of all label objects in the label bundle module must reference an object defined in that resolved model.

A reference bundle module used as an entry module MUST validate that the QName value of the forObject or forObjects property of all reference objects references an object defined in the referenceModel (oimte:invalidQNameReference). The referencedModel is resolved to a resolved model and the forObject or forObjects property of all reference objects in the reference bundle module must reference an object defined in that resolved model.

A label bundle module or reference bundle module imported by an importing model ignores the referenceModel of the bundle module and removes objects in the bundle module that do not reference objects defined in the importing model. See forObject removal for details.

A referenceModel MUST NOT be defined for a documentType that does not represent a label bundle module or reference bundle module (oimte:invalidReferenceModelDocumentType).

5 Structural elements

An XBRL model consists of a set of model objects.

A model object is an object used to define an XBRL model.

All model objects in the model have an object type.

An object type is identified by an object type QName.

Object Type Object Type QName Referenceable Parent Object Type
XBRLModel XBRLModel xbrl:xbrlModelObject true Defines all objects and properties of a XBRL Model.
Heading xbrl:headingObject true XBRLModel
Concept xbrl:conceptObject true XBRLModel
Domain Class xbrl:domainClassObject true XBRLModel
Dimension xbrl:dimensionObject true XBRLModel
Domain Network xbrl:domainNetworkObject true XBRLModel
Member xbrl:memberObject true Domain Network
Property xbrl:propertyObject false XBRLModel
Reference xbrl:referenceObject true XBRLModel
Label xbrl:labelObject false XBRLModel
Cube xbrl:cubeObject true XBRLModel
Cube Dimension xbrl:cubeDimensionObject false Cube
Period Constraint xbrl:periodConstraintObject false CubeDimension
Date Resolution xbrl:dateResolutionObject false PeriodConstraint
Entity xbrl:entityObject true XBRLModel
Unit xbrl:unitObject true XBRLModel
Fact xbrl:factObject true XBRLModel
Footnote xbrl:footnoteObject true XBRLModel
Transform xbrl:transformObject true XBRLModel
Fact Source xbrl:factSourceObject true XBRLModel
Fact Map xbrl:factMapObject true XBRLModel
Table Template xbrl:tableTemplateObject true XBRLModel
JSON Template Map xbrl:jsonTemplateMapObject true XBRLModel
XML Template Map xbrl:XMLTemplateMapObject true XBRLModel
Group xbrl:groupObject true XBRLModel
Group Content xbrl:groupContentObject false XBRLModel
Group Tree xbrl:groupTreeObject true XBRLModel
Network xbrl:networkObject true XBRLModel
Relationship xbrl:relationshipObject false Network and Domain Network
Relationship Constraint xbrl:relationshipConstraintObject false Relationship Type
Datatype xbrl:dataTypeObject true XBRLModel
Unit Type xbrl:unitTypeObject false DataType
Collection Type xbrl:collectionTypeObject true XBRLModel
Fact Locator Type xbrl:factLocatorTypeObject true XBRLModel
Relationship Type xbrl:relationshipTypeObject true XBRLModel
Property Type xbrl:propertyTypeObject true XBRLModel
XBRL Model Type xbrl:modelTypeObject true XBRLModel
Label Type xbrl:labelTypeObject true XBRLModel
Reference Type xbrl:referenceTypeObject true XBRLModel
Cube Type xbrl:cubeTypeObject true XBRLModel
Dimensions Allowed xbrl:dimensionsAllowedObject false CubeType
Cube Relationship xbrl:cubeRelationshipObject false CubeType
Layout xbrl:layoutObject true XBRLModel
Data Table xbrl:dataTableObject true Layout
Axis xbrl:axisObject false DataTable
Grid Axis xbrl:gridAxisObject false Axis
Axis Item xbrl:axisItemObject false GridAxis
Axis Group xbrl:axisGroupObject false GridAxis
Table Point xbrl:tablePointObject false DataTable
Import Taxonomy xbrl:importTaxonomyObject false XBRLModel
Final Taxonomy xbrl:finalTaxonomyObject true XBRLModel
Namespace Prefix xbrl:namespacePrefixObject false XBRLModel
Implied Object xbrl:impliedObjectObject false XBRLModel

A referenceable object type is an object type that has a QName name property. Referenceable object types are indicated by "true" in the "referenceable" column in the above table.

A referenceable object is an object of a referenceable object type.

5.1 Model-defined properties

A model-defined property is an additional property associated with a model object. Model-defined properties are defined by the property type object, and instantiated using the property object.

Model-defined properties are specified using the properties property on the relevant model object and are supported on most object types.

5.2 XBRL model object

The XBRL model object is the container object that includes all other model objects that comprise a model. This includes what the XBRL 2.1 specification called taxonomy and instance components.

The XBRL model object has an object type QName of xbrl:xbrlModelObject.

5.2.1 XBRL model object properties

An XBRL Model object represents an entire model. It is a container for all the components of the model.

The properties of the XBRL Model object are as follows:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the XBRL Model object.
frameworkName (xs:string / string)
(optional) The framework name of the model such as "US-GAAP" that indicates the broad XBRL model family. The framework name stays consistent between regular releases of the same model domain.
version (xs:string / string)
(optional) Used to identify the version of the model. The version string SHOULD follow semantic versioning principles using the format major.minor.patch (e.g., "2024.1.0"). Where:

For simple annual releases, a year value may be used (e.g., "2024"). The version string MAY include additional metadata such as release candidate or build identifiers (e.g., "2024.1.0-rc1" or "2024.1.0+build.123").

modelType (xbrl:modelTypeObject reference / string)
(optional) A QName that indicates the specific model type object. Specification-defined model type objects include xbrl:report and xbrl:taxonomy.

duplicateFactsInModel (xs:string / string)
(optional) A string value that indicates if the model validates duplicate facts. It can be one of the following: no duplicates, complete duplicates,consistent duplicates, or inconsistent duplicates. If no string value is provided the default value is inconsistent duplicates. The value of duplicateFactsInModel sets the default value of duplicateFactsInCube. The value of duplicateFactsInCube has precedence over duplicateFactsInModel (see Section 8.10.2)

headings (non-empty set of xbrl:headingObject objects / array)
(optional) set of heading objects.
concepts (non-empty set of xbrl:conceptObject objects / array)
(optional) set of concept objects.
domainClasses (non-empty set of xbrl:domainClassObject objects / array)
(optional) set of domain class objects.
dimensions (non-empty set of xbrl:dimensionObject objects / array)
(optional) set of dimension objects.
domainNetworks (non-empty set of xbrl:domainNetworkObject objects / array)
(optional) set of domain network objects.
members (non-empty set of xbrl:memberObject objects / array)
(optional) set of member objects.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) set of property objects that specifies model-defined properties associated with the model.
labels (non-empty set of xbrl:labelObject objects / array)
(optional) set of label objects.
references (non-empty set of xbrl:referenceObject objects / array)
(optional) set of reference objects.
cubes (non-empty set of xbrl:cubeObject objects / array)
(optional) set of cube objects.
entities (non-empty set of xbrl:entityObject objects / array)
(optional) set of entity objects.
units (non-empty set of xbrl:unitObject objects / array)
(optional) set of unit objects.
facts (non-empty set of xbrl:factObject objects / array)
(optional) set of fact objects.
footnotes (non-empty set of xbrl:footnoteObject objects / array)
(optional) set of footnote objects.
factSources (non-empty set of xbrl:factSourceObject objects / array)
(optional) set of fact source objects.
factMaps (non-empty set of xbrl:factMapObject objects / array)
(optional) set of fact map objects.
JSONTemplateMaps (non-empty set of xbrl:JSONTemplateMapObject objects / array)
(optional) set of JSONTemplateMap objects that define mappings between JSON templates and model objects for the purpose of transforming between JSON data sources and XBRL models.
XMLTemplateMaps (non-empty set of xbrl:XMLTemplateMapObject objects / array)
(optional) set of XMLTemplateMap objects that define mappings between XML templates and model objects for the purpose of transforming between XML data sources and XBRL models.

groups (non-empty set of xbrl:groupObject objects / array)
(optional) set of group objects.
groupContents (non-empty set of xbrl:groupContentObject objects / array)
(optional) set of group content objects that link a group QName to a list of network or cube objects.
groupTree (xbrl:groupTreeObject / object)
(optional) A group tree object that defines the hierarchical organization of groups within the model. Unlike groupContents which links groups to networks and cubes, groupTree organizes the groups themselves into a tree structure. The root of the group tree is xbrl:rootSource, which acts as a virtual root (not rendered as a node) whose targets are the top-level groups. Only one group tree object is allowed per model.
networks (non-empty set of xbrl:networkObject objects / array)
(optional) set of network objects.
dataTypes (non-empty set of xbrl:dataTypeObject objects / array)
(optional) set of dataType objects.
collectionTypes (non-empty set of xbrl:collectionTypeObject objects / array)
(optional) set of collection type objects.
factLocatorTypes (non-empty set of xbrl:factLocatorTypeObject objects / array)
(optional) set of fact locator type objects that define the types of locators that can be used to reference facts in external data sources.
propertyTypes (non-empty set of xbrl:propertyTypeObject objects / array)
(optional) set of property type objects.
labelTypes (non-empty set of xbrl:labelTypeObject objects / array)
(optional) set of label type objects.
referenceTypes (non-empty set of xbrl:referenceTypeObject objects / array)
(optional) set of reference type objects.
relationshipTypes (non-empty set of xbrl:relationshipTypeObject objects / array)
(optional) set of relationship type objects.
modelTypes (non-empty set of xbrl:modelTypeObject objects / array)
(optional) set of model type objects.
cubeTypes (non-empty set of xbrl:cubeTypeObject objects / array)
(optional) set of cube type objects.
tableTemplates (non-empty set of xbrl:tableTemplateObject objects / array)
(optional) set of table template objects.
layouts (xbrl:layoutObject / object)
(optional) A set of layout objects that defines the layout of a data structure that conforms with a XBRL model. The layout object defines how facts in a model are rendered in a form or user interface.
transforms (non-empty set of xbrl:transformObject objects / array)
(optional) set of transform objects.
importedTaxonomies (non-empty set of xbrl:importTaxonomyObject objects / array)
(optional) set of import taxonomy objects that can comprise the QName of the XBRL model object to be imported, an object type or a model object referenced by its QName.
referenceModel (xbrl:xbrlModelObject reference / string)
(optional) A QName that references a XBRL model object. The referenceModel property is only used with a module that has a documentType of https://xbrl.org/PWD/2026-09-01/labelBundle or https://xbrl.org/PWD/2026-09-01/referenceBundle. The referenceModel property uses the import mapping object to locate the referenced taxonomy for validating label bundle module label objects or reference bundle module reference objects.
finalTaxonomy (xbrl:finalTaxonomyObject / object)
(optional) An object that indicates those components of the model that are final and cannot be amended or added by an importing model.
namespacePrefixes (non-empty set of xbrl:namespacePrefixObject objects / array)
(optional) A set of namespace prefix objects that define the preferred namespace prefixes for a given namespace URI.
impliedObjects (non-empty set of xbrl:impliedObject objects / array)
(optional) A set of implied objects that defines objects that are implied by the model but not explicitly defined.

5.3 Heading object

A heading object defines objects that have no reportable value, but are components of the concept dimension. Heading objects are used to define headers and to organize concepts into hierarchies on the concept core dimension.

The heading object has an object type QName of xbrl:headingObject.

5.3.1 Heading object properties

The heading object has the following explicit properties:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the heading object.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the heading object.

5.3.2 Heading object constraints

An heading object MUST NOT be defined as a dimension member on a fact (oimte:invalidFactDimensionMember).

5.4 Concept object

A concept object defines objects that can appear on the concept core dimension. All concept objects have an associated datatype that indicates the type of the value property of a fact value object defined by the concept object. The datatype property of the concept object defines the type of fact value associated with the concept. The concept object must have a periodType property that defines the date types of the period type dimension that can be used with a fact.

The concept object has an object type QName of xbrl:conceptObject.

5.4.1 Concept properties

The concept object has the following explicit properties:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the concept object.
dataType (xbrl:dataTypeObject reference / string)
(required) Specifies the datatype of the value. The value MUST be a QName referencing one of:

The QName MUST resolve to a datatype object or collection type object present in the taxonomy model, or to a built-in XML Schema datatype. (see Section 11.1)

If the referenced QName is not a datatype object or collection type object, processors MUST raise an error (oimte:invalidObjectType).

periodType (xbrl:periodType / string)
(required) Indicates the period type of the concept. The value can be either instant, duration or none. An instant represents values that are measured at a point in time. (This is equivalent to a measurement at a point in time) A duration represents values measured over a period in time. none represents values that do not change with the passage of time. A value of none prohibits facts being reported with a xbrl:period dimension.

nillable (xs:boolean / boolean)
(optional) Used to specify if the concept can have a nil value. The default value is false.
enumerationDomain (xbrl:domainNetworkObject reference / string)
(optional) Specifies a domain network object that restricts the valid QName values for the concept. The value MUST be a QName referencing a domain network object defined in the taxonomy model. When specified, valid fact values for this concept MUST be QNames that resolve to target objects defined in the domain.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) set of property objects that specifies model-defined properties associated with the concept object.

An example concept definition for Revenues:

{
    "name": "exp:Revenue",
    "dataType": "xbrlr:monetary",
    "periodType": "duration",
    "nillable": true,
    "properties": [
        { "property": "xbrla:balance", "value": "credit"}
    ]
},

5.5 Member object

A member object is an extensible object that adds dimensional context to a fact object. Its meaning and use is defined by its domain classes and property objects. A member object can be used on taxonomy defined dimensions where the domainClass property of the dimension is included in the member's domainClasses property. The domainClasses of a member object are used to define the meaning of the member within the context of the taxonomy, allowing it to be grouped with members of the same class and to restrict the use of properties to classes of members.

The member object has an object type QName of xbrl:memberObject.

5.5.1 Member object properties

The properties of the member object are:

name (xs:QName / string)
(optional) The name is a QName that uniquely identifies the member object.
domainClasses (non-empty set of xbrl:domainClassObject references / array)
(optional) 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 MUST be raised (oimte:invalidDomainClassReference).
extends (xbrl:memberObject reference / string)
(optional) Names the member object to be extended. The extends property adds additional domainClasses and properties to the member object by extension.
isExtensible (xs:boolean / boolean)
(optional) If set to false, the member is non-extensible and no importing model may augment it using extends. If set to true or omitted, the member may be extended. The default value is true.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) a set of property objects that specifies model-defined properties associated with the member object using the property object.

By associating a member object with the class it belongs to allows the member to be used in multiple dimensions that reference that domain class. For example, if the member exp:England is associated with the domain class exp:CountryDomainClass it can be used in any dimension that references the exp:CountryDomainClass such as country of manufacture dimension or country of sale dimension.

{
  "name": "exp:England",
  "domainClasses": ["exp:CountryDomainClass"]
}

5.5.2 Member object constraints

The domainClasses set of the member object MUST NOT contain a domainClass of xbrl:conceptDomain, xbrl:entityDomain, xbrl:periodDomain, xbrl:languageDomain or xbrl:unitDomain (oimte:invalidDomainClassReference).

5.6 Domain class object

The domain class object is an extensible object that identifies the domain networks and members that are used with a dimension.

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.

The domain class object has an object type QName of xbrl:domainClassObject.

Multiple domain network objects may use the same domain class object. When defining a dimension object, the associated domain class object specifies which domain network objects are compatible with that <<>. This enables the identification and grouping of related dimensional domain network objects.

The core dimensions have pre-defined domain class objects:

The built-in domain class objects of xbrl:conceptDomain and xbrl:languageDomain are only used with the concept core dimension, and language respectively.

The xbrl:entityDomain can be associated with a taxonomy defined dimension that represents a domain of legal entities such as a business acquisition dimension or business combination dimension. This allows the definition of domain networks that are specific to legal entities.

The xbrl:unitDomain can be associated with a taxonomy defined dimension that represents a domain of units such as debt denominated in different currency units. This allows the definition of domain networks that are specific to units.

A domain class object MAY be used as the root of multiple domain network objects.

The domain class defines the domain network used for countries.

{
    "name": "exp:CountryDomainClass",
    "allowedDomainItem": "xbrl:memberObject"
}

5.6.1 Domain class object properties

The properties of the domain class object are:

name (xs:QName / string)
(required) A QName that uniquely identifies the domain class object.
baseDomainClass (xbrl:domainClassObject reference / string)
(optional) 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, as described in Section 5.6.3.
allowedDomainItem (object type or datatype object reference / string)
(required) 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 (see Section 5.8). In the case of a datatype object QName, this constrains the domain class values to this datatype object (see Section 5.10).

properties (non-empty set of xbrl:propertyObject objects / array)
(optional) a set of property objects that specifies model-defined properties associated with the domain class object.

A domainClass representing debt securities with a baseDomainClass of securitiesDomainClass allows members that have a debt securities domainClass to be used in a securities domain network. A member that is a securityDomainClass cannot be used on a debt securities domain network. In the case below exp:USTBillsDue2027 can be used in a debt securities and securities domain network. It can be used with a fact with a securities and a debt securities dimension.

"domainClasses" : [
            {
                "name": "exp:debtSecuritiesDomainClass",
                "baseDomainClass" : "exp:securitiesDomainClass",
                "allowedDomainItem": "xbrl:memberObject"
            }
],
"members" : [
            {
                "name":"exp:USTBillsDue2027",
                "domainClasses" : ["debtSecuritiesDomainClass"]  
            }
]

If an importing model defines a baseDomainClass of exp:securitiesDomainClass and the imported model has a exp:debtSecuritiesDomainClass domain class, then a class subClass relationship can be defined to support the inheritance of domain classes using an imported model.

5.6.2 Domain class object constraints

A domain class object MUST NOT be used as a relationship object target property in a domain network object.(oimte:invalidDomainRelationshipTarget).

If the allowedDomainItem property of a domain class object defines a datatype (e.g., xs:string, xs:decimal), then the domain class object is considered a typed domain, and domain network objects MUST NOT be defined that use this domain class object. (oimte:domainClassMismatchWithDomain).

The allowedDomainItem property of a domain class object MUST have a value of either xbrl:entityObject, xbrl:unitObject, xbrl:memberObject, xbrl:conceptObject or a datatype object (oimte:invalidObjectType).

The built-in domain class objects of xbrl:conceptDomain MUST only be used with the concept core dimension (oimte:invalidConceptDomainClass).

The built-in domain class objects of xbrl:languageDomain MUST only be used with the language core dimension (oimte:invalidLanguageDomainClass).

If the baseDomainClass property is defined the allowedDomainItem value for the domain class object MUST be the same as the allowedDomainItem value for the base domain class object if an object type QName is referenced (oimte:inconsistentBaseDomainClass).

If the baseDomainClass property is defined the allowedDomainItem value for the domain class object MUST be the same or a subtype of the allowedDomainItem value for the base domain class object if an datatype object is referenced (oimte:inconsistentBaseDomainClass).

5.6.3 Domain class object inheritance

A domain class object can have a baseDomainClass property. When defined the domain class object will inherit the properties of the base domain class object. This includes the values of any model-defined properties of the base domain class object. The allowedDomainItem property of the domain class object must match the value of the base domain class object if a object type QName is defined. If the allowedDomainItem property is a datatype the datatpe must match or be derived from the base datatype object.

Any member objects associated with a domain class object using the domainClasses property of the member object are also implicitly included in the base domain class object.

All definitional model-defined properties on the baseDomainClass are inherited by the domain class object. The properties array of the domain class object are merged with that of the baseDomainClass, so that the domain class object inherits all base definitional model-defined properties and may declare additional definitional model-defined properties of its own. Where a definitional model-defined properties appears on both the baseDomainClass and the domainClass, the domainClass's property value MUST match the baseDomainClass. Non-definitional properties are not inherited.

5.7 Dimension object

A dimension object defines a taxonomy defined dimension or a core dimension. Taxonomy defined dimensions and core dimensions have an associated domain class object that defines the values that may be reported against the dimension.

The dimension object has an object type QName of xbrl:dimensionObject.

A taxonomy defined dimension is a dimension that is defined in the model. Taxonomy defined dimensions are explicitly declared in the model and can be referenced by cubes and facts. They are distinct from core dimensions which are defined in the xbrl namespace.

A core dimension is a dimension that is defined by this specification. These are xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit and xbrl:language.

5.7.1 Properties of the dimension object

name (xs:QName / string)
(required) The QName of the dimension object.
domainClass (xbrl:domainClassObject reference / string)
(required) A reference to a domain class object.
cubeTypes (non-empty set of cube type object references / array)
(optional) 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.

properties (non-empty set of xbrl:propertyObject objects / array)
(optional) a set of property objects that specifies model-defined properties associated with the dimension object.

The dimension defines the dimensions used for countries.

{
    "name": "exp:CountryDimension",
    "domainClass": "exp:CountryDomainClass"
},

5.7.2 Dimension object constraints

The dimension MUST only be used on cubes where the cubeType of the cube object matches one of the cube types defined in the cubeTypes set (oimte:dimensionCubeTypeMismatch). If the cube object has no cubeType value defined it defaults to an open cube.

The xbrl:conceptDomain MUST only be used as the domainClass property on the concept dimension xbrl:concept (oimte:invalidConceptDomainClass).

The xbrl:languageDomain MUST only be used as the domainClass property on the language dimension xbrl:language (oimte:invalidLanguageDomainClass).

5.8 Domain Network object

The domain network object is an extensible object that defines a hierarchical network of concept objects, entity objects, unit objects or member objects. A domain network consists of relationship objects that determine the hierachy of the domain network. The domain network object can be referenced by the cube dimension object to define the untyped dimension values of a fact object or to define enumeration domains.

The domain network object has an object type QName of xbrl:domainNetworkObject.

An enumeration domain is a domain network object that is referenced by a concept object or property object to restrict a fact object value or a model-defined property value to a specific set of allowable QName values.

The domain network object has a root property that associates a domain class object with the domain network object. If no root is defined, the root is derived from resolving the relationship objects to determine the single root.

The relationshipTypeName property is not defined for a domain network object as the property of xbrl:domain-member is inherent to the domain network object versus a network object where it would have to be defined.

The root property in a domain network object identifies the domain class. A taxonomy might define several separate geographic domain networks (each with a different name) that all share exp:GeographyDomainClass as their root, allowing each domain network to be associated with a different dimension while using the same class definition. (e.g. Country of manufacture dimension and country of sale dimension)

5.8.1 Importing domain network objects

Importing models cannot remove the objects defined in the relationship objects of the domain network object. Model objects may be imported and reassembled in a domain network object defined in an importing model.

Importing models can add relationship objects to an existing domain network object by referencing the name of the domain network object with the extends property to add relationship objects to the target domain network object.

5.8.2 Domain Network object properties

The properties of the domain network object are:

name (xs:QName / string)
(optional) The QName that uniquely identifies the domain network object.

root (xbrl:domainClassObject reference / string)
(optional) A reference to a domain class object that uniquely identifies the root of the domain network object.
relationships (non-empty set of xbrl:relationshipObject objects / array)
(optional) A non empty set of relationship objects that associate model objects with the domain network object.

extends (xbrl:domainNetworkObject reference / string)
(optional) 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. (see Section 5.8) The QName MUST resolve to an existing domain network object; if the QName resolves to an object of a different type, processors MUST raise an error (oimte:invalidObjectType).

Domain extension scope: multi file import example

A regulator (taxonomy C) extends a domain network from a standard-setter (taxonomy A) that another party (taxonomy B) has already imported.

isExtensible (xs:boolean / boolean)
(optional) If set to false, the domain network is considered complete and non-extensible, meaning that no importing model may add further relationships or members. If set to true or omitted, the domain network may be extended by an importing model. The default value is true.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) a set of property objects that specifies model-defined properties associated with the domain network object.

The domain network defines the countries in the specific domain network.

{
    "name": "exp:DomainOfCommonwealthCountries",
    "root": "exp:CountryDomainClass",
    "relationships": [
        {
            "source": "exp:CountryDomainClass",
            "target": "exp:Australia"
        },
        {
            "source": "exp:CountryDomainClass",
            "target": "exp:Canada"
        },
        {
            "source": "exp:CountryDomainClass",
            "target": "exp:England"
        }
    ]
}

Domain network objects include the QName of a domain class object for the root property. Multiple domain networks can be defined with the same domain class object and the same root QName.

5.8.3 Domain Network object constraints

A domain class object QName MUST NOT be defined as a target in any relationship object contained in a domain network object (oimte:invalidDomainRelationshipTarget).

A domain network object's set of relationships MUST include a domain class object as a source in the domain network (oimte:missingDomainClassSource).

A domain network object's set of relationships MUST resolve to a single root in the domain network. (oimte:multipleDomainClasses)

If the root property has a QName of xbrl:conceptDomain then the objects used as a source in the relationships of the domain network object MUST be either a concept object, a heading object or be xbrl:conceptDomain (oimte:invalidDomainNetworkObject).

If the root property has a QName of xbrl:conceptDomain then the objects used as a target in the relationships of the domain network object MUST be either a concept object or an heading object (oimte:invalidDomainNetworkObject).

A domain network object with a root property of xbrl:entityDomain MUST only have a relationship object source property that is either an entity object or a domain class object. (oimte:invalidDomainNetworkObject)

A domain network object with a root property of xbrl:entityDomain MUST only have a relationship object target property that is an entity object. (oimte:invalidDomainNetworkObject)

A domain network object with a root property of xbrl:unitDomain MUST only have a relationship object source property that is either a unit object or a domain class object. (oimte:invalidDomainNetworkObject)

A domain network object with a root property of xbrl:unitDomain MUST only have a relationship object target property that is a unit object. (oimte:invalidDomainNetworkObject)

If the root property is NOT xbrl:conceptDomain, xbrl:entityDomain, xbrl:unitDomain or xbrl:languageDomain then the objects used as a target in the relationships of the domain network object MUST NOT be concept objects or unit objects unless expressly permitted by the allowedDomainItem of the domain class object represented by the root property (oimte:invalidDomainTarget).

The root property MUST contain a QName of a domain class object. (oimte:invalidDomainClass)

A domain network objects relationship objects MUST only include target objects that are defined in the allowedDomainItem of the domain class object>, except for heading objects that are always permitted in a domain network whose root is xbrl:conceptDomain, irrespective of the value of allowedDomainItem (oimte:invalidDomainNetworkObject).

A domain network objects relationship objects MUST only include domain source objects that are defined in the allowedDomainItem property, are a domain class object, or are a heading object in a domain network object whose root is xbrl:conceptDomain (oimte:invalidDomainNetworkObject).

The name and extends properties MUST NOT both appear in a domain network object (oimte:invalidJSONStructure).

Relationships in the domain network object MUST have a target object of either a concept object, a member object, an entity object, a heading object or a unit object. (oimte:invalidDomainRelationshipTarget)

A domain network object with the property isExtensible:false indicates the domain network object cannot be extended. If the domain network object is imported, the entire resolved domain network object is sealed and no further extensions are permitted. This is the mechanism for a model author to declare "this is the final extension and the domain network object is now closed".

A model author can create an extension of an extension of a domain network object. There is no limit on the degree of extension, and extends always targets the original base domain network object QName. It does not chain through previous extensions. The resolved domain network object is assembled at import time by collecting all extends domain network objects that reference the same base QName across the full import and merging their relationships in import order.

If a model's documentType is defined as https://xbrl.org/PWD/2026-09-01/compiled then the extends MUST NOT be defined (oimte:extendedTargetNameDefinedForCompiledTaxonomy).

When a taxonomy's documentType is defined as compiled all extensible objects cease to exist and are subsumed into the new extended definition, and the component parts are no longer accessible.

5.9 Cube object

A cube object is an extensible object that defines a multidimensional framework to contain facts. A cube specifies which dimensions and members are included, and which can be constrained to exclude specific facts. The multidimensional spaces defined by a cube can be empty, sparsely or densely packed with facts. A fact can exist in one or more cubes. A cube defines all dimensions (including core dimensions) to accurately identify all facts associated with the cube. A cube can contain facts with fewer dimensions than those defined by the cube. Facts with dimensions not defined in the cube are not included within the cube. Cubes can be used to identify collections of facts that are grouped together such as facts in a Statement of Operating Activity or a listing of inventory held.

The cube object has an object type QName of xbrl:cubeObject.

A cube defines all dimensions (e.g. incl period, entity, units) to accurately identify all facts associated with the cube.

A balance sheet cube representing facts for a holding company should, if defined correctly, exclude facts associated with any subsidiary by applying constraints on the entity dimension. The same principle applies to the period and unit dimensions. The ability to explicitly define constraints on these core dimensions within the cube's definition ensures that only relevant facts are included, enabling a precise and accurate representation of the reported data.

A cube object may include an optional cubeType property that identifies the type of cube object being represented. This value must match either a defined cube type object or specification-defined cube object. Depending on the cubeType core dimensions may or may not be included. For example, a report cube will always include the period, concept, entity and unit dimensions, whereas an event cube will only include the concept core dimension.

A cube object includes all facts that match the dimensions and member objects defined in the taxonomy, as well as the concept core dimension and concept objects, the unit core dimension and unit objects, entity core dimension and entity objects and period core dimension with matching typed values.

A cube can contain facts that have fewer dimensions than those defined in the cube. A fact can appear in the cube without one or more dimensions as long as each of the cube dimension objects has the property optional set to true for the dimensions missing from the fact. Valid facts in a cube without all the dimensions defined in the cube are called an optional dimension value.

A fact cannot appear in a cube object if it includes a dimension that is not defined within the cube object.

An exclude cube is a cube object used to remove facts from another cube. It is defined in the taxonomy and specified using the excludeCubes property. The intersection of facts in the exclude cube object and the defined cube object are removed from the resulting cube. This intersection may include all, some, or none of the facts.

A cube object can define zero or more excludeCubes. When multiple exclude cubes are specified, the facts removed are the union of all intersections between the defined cube and each exclude cube.

5.9.1 Cube properties

The cube object has the following properties:

name (xs:QName / string)
(optional) The name property is a QName that uniquely identifies the cube object.

cubeType (xbrl:cubeTypeObject reference / string)
(optional) The cubeType property identifies the type of cube being defined. This must match a defined cube type object or specification defined cube object.

cubeDimensions (non-empty set of xbrl:cubeDimensionObject objects / array)
(optional) A set of cube dimension objects that identify the dimensions and associated domains used on the cube.
cubeNetworks (non-empty set of xbrl:networkObject references / array)
(optional) A set of QName references to a network object, that are directly related to the cube.
excludeCubes (non-empty set of xbrl:cubeObject references / array)
(optional) A set of cube object QNames that remove the facts of the exclude cube from the facts of the defined cube. The resulting cube includes all facts that are in the defined cube but not in any of the exclude cubes. Exclude cubes must have a cubeType of xbrl:negativeCube. Exclude cubes cannot be used to exclude facts from another exclude cube.
requiredCubes (non-empty set of xbrl:cubeObject references / array)
(optional) A set of QName references to a cube object, that indicate facts in the cube that are required to be present. This allows defining a cube object to indicate cells or groups of cells that must be present in the cube. The extends property can be used to add requiredCubes to an existing cube. A cube which has a type of xbrl:negativeCube cannot be included in the requiredCubes property. The requiredCubes property can reference itself, which means all facts in the cube are required to be present, except those facts that are excluded by the excludeCubes property. If facts defined by requiredCubes are absent from the cube, then no error is raised.

duplicateFactsInCube (xs:string / string)
(optional) A string value that indicates if the cube validates duplicate facts. It can be one of the following: no duplicates, complete duplicates,consistent duplicates, or inconsistent duplicates. If no string value is provided the default value is the value defined for duplicateFactsInModel. If no value is defined for duplicateFactsInModel, the default value is inconsistent duplicates. If an inconsistent duplicate fact exists in a model it must match the dimension values of at least one cube in the model that allows inconsistent duplicates. If a consistent duplicate fact exists in a model it must match the dimension values of at least one cube in the model that allows consistent duplicates or inconsistent duplicates (see Section 8.10.2)
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the cube using the property object.
extends (xbrl:cubeObject reference / string)
(optional) Names the cube object that the defined cube properties are appended to. The items in the cube with this property are appended to the end of the properties defined in the target cube object. This property cannot be used in conjunction with the name, cubeType and cubeDimensions properties. The ability to extend a cube can be used to add cubeNetworks, properties and requiredCubes (see Section 5.9).
isExtensible (xs:boolean / boolean)
(optional) Defines whether the cube object can be extended by another cube object. Defaults to true.

The following example defines a cube for an income statement with concept, period, entity and unit dimensions. Setting isExtensible to false prevents importing taxonomies from adding dimensions:

{
    "name": "exp:IncomeStatementCube",
    "cubeType": "xbrl:reportCube",
    "cubeDimensions": [
        { "dimension": "xbrl:concept", "domainNetwork": "exp:IncomeStatementConcepts" },
        { "dimension": "xbrl:period" },
        { "dimension": "xbrl:entity" },
        { "dimension": "xbrl:unit" }
    ],
    "isExtensible": false
}

The name property is required unless the extends property references an existing cube object. If neither name nor extends is provided, processors MUST raise an object structure error. If both name and extends are provided, processors MUST raise an object structure error.

The cubeDimensions property is required unless the extends property references an existing cube object. If neither cubeDimensions nor extends is provided, processors MUST raise an object structure error. If both cubeDimensions and extends are provided, processors MUST raise an object structure error.

5.9.2 Cube object constraints

The cubeType property MUST be a QName of a cube type object. (oimte:invalidObjectType)

The requiredCubes set and excludeCubes set MUST contain cube type objects. (oimte:invalidObjectType)

The cubeDimensions property MUST NOT include more than one cube dimension object with the same dimension property. (oimte:duplicateDimensionsInCube)

The defined cube MUST NOT be defined in the set of excludeCubes within the same cube object. (oimte:excludeCubeSelfReference)

The cubeNetworks property MUST only reference the QNames of network objects (oimte:invalidObjectType).

The cubeNetworks property MUST reference network objects that exist in the XBRL Model. (oimte:invalidQNameReference)

The excludeCubes property MUST reference cube objects that exists in the XBRL Model that have a cube type of xbrl:negativeCube. (oimte:invalidNegativeCubeReference)

If the model type object includes fact objects the processor MUST report an error if the dimensional value defined by a requiredCube does not include a fact in the cube object (oimte:factMissingFromCube).

If a cube is included in the requiredCubes property of another cube object, an error MUST be raised if any dimensional space in the required cube object is not a dimensional space in the base cube object. (oimte:requiredCubeDimensionalSpaceMissingFromCube)

If the same cube appears in both the excludeCubes and requiredCubes properties, an error MUST be raised (oimte:excludeCubeCannotBeRequiredCube).

A cube with cubeType of xbrl:negativeCube MUST NOT specify the excludeCubes property. (oimte:excludeCubesOnNegativeCube)

A processor should use an "inclusive base space + subtractive holes" pattern rather than additive set-union. This is simpler to validate and understand than requiring processors to correctly evaluate arbitrary Boolean combinations of cube spaces.

If the same dimensional space appears in both the excludeCubes and requiredCubes properties, an error MUST be raised. (oimte:excludeCubeSharesDimensionalSpaceWithRequiredCube)

The extends property of a cube object MUST reference the QName of an existing cube object. If the QName does not resolve to a cube object, processors MUST raise an error (oimte:invalidObjectType).

5.10 Cube dimension object

The cube dimension object associates a dimension with a specific cube object. Each cube object must contain at least one or more cube dimension objects. Specific cube types defined by the cubeType property restrict what dimension objects can appear in the cube. The cube dimension object can optionally define the QName of a specific domain network object to constrain which members are allowed in the cube. Whether a dimension is typed or explicit is determined by whether the associated domain has a domainDataType property. The cube dimension object defines if fact values without a dimensional qualifier (optional dimension value) are included in the cube. The cube dimension object may define period dimension properties that constrain the facts accordingly.

The cube dimension object has an object type QName of xbrl:cubeDimensionObject.

The facts contained in a cube are those facts that match the dimensions and members defined in the cube object. The fact dimension values must match the members of the cube dimension.

Where a taxonomy defined dimension is defined with NO domainNetwork property, then a fact with any member and that dimension, will appear in the cube with that dimension.

Where a concept dimension is defined with NO domainNetwork property then a fact with any concept will appear in the cube.

An error MUST be raised if the domainDataType property is used with the concept dimension (oimte:invalidDataTypeForDomainClass).

Where a period dimension is defined with the domainNetwork property then an error MUST be raised. (oimte:domainNetworkUsedOnPeriodDimension)

Where a unit dimension is defined with NO domainNetwork and NO domainDataType properties then a fact with any unit will appear in the cube.

Where an entity dimension is defined with NO domainNetwork and NO domainDataType properties then a fact with any entity will appear in the cube.

5.10.1 Cube dimension object properties

The cube dimension object has the following properties:

dimension (xbrl:dimensionObject reference / string)
(required) The QName of the dimension object that identifies the dimension. For the core dimensions the QNames of xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit and xbrl:language are used. (see Section 5.7)
domainNetwork (xbrl:domainNetworkObject reference / string)
(optional) The QName of the domain network object that identifies the domain associated with the dimension. The domainNetwork property can only be used to define an explicit domain. Only one explicit domain can be associated with a dimension. The domain referenced MUST have the same root as the dimension's domainClass. (oimte:invalidCubeDimensionDomainName)(see Section 5.8).

domainDataType (xbrl:dataTypeObject reference / string)
(optional) A reference to a datatype object that indicates the datatype that can be represented on the fact object for this dimension. This property allows a typed domain class object to be associated with a dimension. The referenced datatype object object MUST either match the dimensions domain class object allowedDomainItem property value or be derived from the base datatype of the datatype object. (oimte:invalidDataTypeForDomainClass).

typedSort (xs:string / string)
(optional) A string value that indicates the sort order of the typed domain. The values can be either asc or desc. This indicates the viewing order of the values using a typed domain. The typedSort property MUST NOT be used with an explicit domain (domains without domainDataType). (oimte:invalidTypedSortOnExplicitDomain) The typedSort can be used with the period domain. The sort order is applied to each period constraint defined in periodConstraints. If there are two period constraints the first for instant and the second for duration and a typedSort of asc then all instant dates appear first ascending, then all duration dates appear second in ascending order.
optional (xs:boolean / boolean)
(optional) Indicates whether facts that do not carry a value for this dimension are included in the cube. The default value is false. When set to true, facts that omit this dimension are included in the cube. For the period core dimension, this includes forever facts and facts with no period dimension. For the unit dimension, this includes facts with no unit, such as strings or dates. For the entity core dimension, this includes facts with no entity value. This property cannot be used on the concept core dimension. The property value is ignored for the concept core dimension.
periodConstraints (non-empty ordered set of xbrl:periodConstraintObject objects / array)
(optional only for period core dimension) Defines an ordered set of period constraint objects to restrict fact values in a cube to fact values with a specified period.

The following example defines two cube dimensions: the concept dimension tied to a specific domain, and the period core dimension with a reporting-window constraint:

[
    {
        "dimension": "xbrl:concept",
        "domainNetwork": "exp:IncomeStatementConcepts"
    },
    {
        "dimension": "xbrl:period",
        "periodConstraints": [
            {
                "onOrAfter": { "context": "exp:PeriodStart" },
                "onOrBefore": { "context": "exp:PeriodEnd" }
            }
        ]
    }
]

If a typedSort property is provided and a domainDataType property is not provided, processors MUST raise an object structure error.

5.10.2 Cube dimension object constraints

The periodConstraints property MUST only be used where the dimension property has a QName value of xbrl:period. (oimte:invalidPeriodConstraintDimension)

The optional property MUST NOT be used with a dimension of xbrl:concept (oimte:invalidOptionalPropertyOnConceptDimension)

A dimension with a QName of xbrl:concept MUST be defined in a cube object. (oimte:cubeMissingConceptDimension)

The dimension property must reference a dimension object. (oimte:invalidObjectType)

The domainNetwork property MUST NOT be used when the dimension property is xbrl:period. (oimte:domainNetworkUsedOnPeriodDimension)

The domainDataType property MUST NOT be used when the dimension property is xbrl:period. (oimte:domainUsedOnPeriodDimension)

If the domainNetwork property is specified, the referenced domain's root MUST match the dimension's domainClass. (oimte:invalidCubeDimensionDomainName)

The domainNetwork property must be a valid domain network object QName defined in the taxonomy model. (oimte:invalidObjectType)

If the dimension property is xbrl:entity and the domainDataType property is specified, it MUST be xs:QName. (oimte:invalidDataTypeForDomainClass)

A cube MUST NOT include multiple cube dimension objects with the same dimension attribute. (oimte:duplicateDimensionsInCube)

A cube dimension object MUST comply with the dimension restrictions defined by the cubeType property (oimte:invalidTaxonomyDefinedDimension).

5.11 Period constraint object

The period constraint object defines the period constraints that are applied to the core period dimension. These period constraint properties are used to select those facts whose periods match the periods defined in the period constraint object. If a facts period dimension matches all the defined properties then it is included in the cube.

The period constraint object has an object type QName of xbrl:periodConstraintObject.

5.11.1 Period constraint object properties

The period constraint object has the following properties:

periodType (xbrl:periodType / string)
(optional) Used to indicate if the period is an instant or a duration.
timeSpan (xs:duration / string)
(optional) Defines a duration of time using the XML duration type to define a duration of time. The duration of the time span maps to facts with the same duration.
periodPattern (string / string)
(optional) Defines a date or duration pattern that selects dates or durations. For an instant the pattern to select all dates in December is YYYY-12-DD. For a duration the pattern to select all year end durations is YYYY-01-01/YYYY-01-01T00:00:00. The pattern uses the following symbols:

To indicate the end of month use the wildcard eom. For example, to select all durations that end on the last day of February use the pattern YYYY-MM-DD/YYYY-02-eom. For any duration period that starts at the start of a month and ends at the end of month use YYYY-MM-01/YYYY-MM-eom.

endDate (xbrl:dateResolutionObject / object)
(optional) Defines an end date for a duration fact and the date of an instant fact. Values can be provided as a literal date value, a fact with a date value, or the date context value of a date.
startDate (xbrl:dateResolutionObject / object)
(optional) Defines a start date for a duration fact and the date of an instant fact. Values can be provided as a literal date value, a fact with a date value, or the date context value of a date.
onOrAfter (xbrl:dateResolutionObject / object)
(optional) Defines a datetime where all instant facts on or after the date are included in the cube. Duration facts which start at or after the specified datetime are included in the cube.
onOrBefore (xbrl:dateResolutionObject / object)
(optional) Defines a datetime where all instant facts before or on the date are included in the cube. Duration facts which end at or before the specified datetime are included in the cube.

The following example constrains cube facts to a reporting window defined by context concepts:

{
    "onOrAfter": { "context": "exp:ReportingPeriodStart" },
    "onOrBefore": { "context": "exp:ReportingPeriodEnd" }
}

A constraint using a fixed end date with a one-year duration:

{
    "endDate": { "value": "2024-12-31" },
    "timeSpan": "P1Y"
}

5.11.2 Period constraint object constraints

The timeSpan property MUST NOT be used with both the endDate and startDate properties (oimte:redundantTimeSpanProperty).

The periodPattern property MUST NOT be used with the timeSpan, endDate or startDate properties if it represents a duration. (oimte:redundantPeriodPatternProperty).

If the periodType property is instant then the timeSpan and startDate properties MUST NOT be defined (oimte:instantWithDurationProperties).

All period constraints in the object are considered to be an AND.

Separate period constraint objects are defined as OR.

5.12 Date resolution object

The endDate, startDate, onOrAfter and onOrBefore property are defined using the date resolution object that resolves the properties of the object to a specific date or set of dates. The date can be dependent on the fact values in an XBRL report, the context date values in an XBRL report, a literal date value or a date derived using a time shift based on one of the previous date properties.

The date resolution object has an object type QName of xbrl:dateResolutionObject.

5.12.1 Date resolution properties

The date resolution object has the following properties:

conceptName (xbrl:conceptObject reference / string)
(optional) Identifies the QName of a concept object that has an xs:date or xs:dateTime datatype or derived from xs:date or xs:dateTime datatype. The fact values of the concept object in a report resolves to a set of dates used to determine the date resolution value. If no fact value exists for the concept object in the report then the property is ignored, and no date constraint is enforced on the cube.
context (xs:string / string)
(optional) Identifies the QName of a concept object with a suffix of @start or @end. Facts in a report resolve to a set of dates or durations associated with the period dimension of the resolved facts. The context string indicates if the end date or start date of the facts period dimension values (context) is used as the date resolution object value. The @ symbol following the QName identifies if the end date or start date of the context or contexts is used. The context end or start dates of the fact values can resolve to a single date or a set of dates. If no value exists in the report then the property is ignored. The context suffix following the QName must be either @end or @start. If an @ value is not provided then the suffix defaults to @end. For a fact that is an instant the @start and @end suffix will return the same value. If the fact has no period dimension then the property is ignored.
dateProperty (object reference / string)
(optional) References a date or duration value defined as a property of an object. Identifies the QName of a model object and the property object associated with the reference object and uses @start or @end suffix if a duration i.e. exp:myExtTaxonomy.xbrl:reportPeriod@end. The dateProperty can only reference a model-defined property of the object. If the value of the property is a date then the @end or@start suffix is ignored. If the property value cannot be resolved to a date or duration then the property is ignored. If both the context property and the dateProperty property are provided the dateProperty property takes precedence unless the value of the property cannot be resolved to a date.
value (xs:dateTime / string)
(optional) A value representing the date time. The date time values used in this representation MUST be valid according to the xs:dateTime datatype and MUST be in the canonical lexical representation.
timeShift (xs:duration / string)
(optional) Defines a time duration shift from the date derived from either the value, context or conceptName properties. The duration of the time shift is defined using the XML duration type to define a duration of time. A negative operator deducts the timeShift from the resolved date. If the context or conceptName resolves to a set of dates the time shift is applied to all dates in the set. A value of P1Y will shift the date forward by one year, -P1M will shift the date back by one month, P1D will shift the date by one day. The timeShift property can be used with any of the other properties to shift the date value returned by the property. The timeShift property cannot be the only property defined.

A date resolution can reference a concept value, a literal date, or a context concept. The following examples show the three forms:

Resolve to the value of a concept in the report:

{ "conceptName": "exp:FiscalYearEnd" }

Resolve to a literal date:

{ "value": "2024-12-31" }

Resolve to a context concept shifted forward by one day:

{ "context": "exp:ReportingPeriodEnd", "timeShift": "P1D" }

5.12.2 Date resolution constraints

The conceptName property is required if no context or value property is provided. If not provided, processors MUST raise an object structure error. If both conceptName and context or value properties are provided, processors MUST raise an object structure error.

The context property is required if no conceptName or value property is provided. If not provided, processors MUST raise an object structure error. If both context and value properties are provided, processors MUST raise an object structure error.

The value property is required if no conceptName or context property is provided. If not provided, processors MUST raise an object structure error.

The datatype of the concept object referenced by the conceptName property MUST be xs:date or xs:dateTime or derived from xs:date or xs:dateTime. (oimte:invalidConceptDataType)

The concept object referenced by the conceptName property MUST be a concept Object. (oimte:invalidObjectType )

The context property MUST reference a concept object. (oimte:invalidObjectType )

Only one of the properties conceptName or context or value or dateProperty MUST be present. (oimte:mutuallyExclusiveDateResolutionProperty)

The timeShift property MUST be used with either conceptName or context or value or dateProperty (oimte:redundantTimeShiftProperty).

5.12.3 Date resolution behavior

If a date is resolved using a concept name the value of all unique fact date values are returned. If there is more than one date then each unique date fact MUST create iterations of allowable date constraints on the cube.

If the conceptName property is used in conjunction with the timeShift property and multiple unique date facts are present then the value of the timeShift is applied to each fact to return a set of dates.

If the context property is used in conjunction with the timeShift property and multiple unique date contexts are present then the value of the timeShift is applied to each context to return a set of dates.

5.13 Property object

The property object instantiates a model-defined property.

The property object has an object type QName of xbrl:propertyObject.

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.

The following object types support model-defined properties:

5.13.1 Property object properties

property (xbrl:propertyTypeObject reference / string)
(required) The name of the property type object that defines the property.
value
(required) The value of the property.

The following examples shows a property object associating a balance type with a concept:

{
    "name": "exp:Assets",
    "dataType": "xbrlr:monetary",
    "periodType": "instant",
    "nillable": true,
    "properties": [
        { "property": "xbrla:balance", "value": "debit"}
    ]
},

5.13.2 Property object constraints

An object that adds a property that is not included in the allowedObjects set of the property type object MUST raise an error (oimte:disallowedObjectProperty).

If a property value does not conform to its expected datatype the processor MUST raise an error (oimte:propertyValueDataTypeMismatch).

5.14 Label object

The label object defines a label that can be associated with an object. A label is associated with a QName of the object. Multiple labels can be associated with an object. Labels can be distinguished by label type and language.

The label object has an object type QName of xbrl:labelObject.

A label is associated with one object by defining the QName of the object. Labels can be of different types. Standard label types are defined in the XBRL specification and in the label defined in a taxonomy. Label types can be defined in a taxonomy using the label type object.

5.14.1 Label object properties

forObject (xs:QName / string)
(required) Defines the QName of the object that this label is associated with.
labelType (xbrl:labelTypeObject reference / string)
(required) A QName representing the label type of the label. This can be a taxonomy defined label type or a standard XBRL label type defined in specification.
language (xs:string / string)
(required) Defines the language of the label using a valid BCP 47 language code.
value (xs:string / string)
(required) The text of the label.

The following examples associate a standard label and a verbose label with a concept:

{
    "forObject": "exp:Revenue",
    "labelType": "xbrl:label",
    "language": "en",
    "value": "Revenue"
}
{
    "forObject": "exp:Revenue",
    "labelType": "xbrl:verboseLabel",
    "language": "en",
    "value": "Total Revenue from Continuing Operations"
}

5.14.2 Label object constraints

The value for language MUST be a valid BCP 47 language code (oimte:invalidLanguage).

A label's forObject property MUST resolve to an model object QName or object type QName defined in the XBRL Model (oimte:invalidQNameReference).

A label object MUST NOT be defined for an object if the labelType property of the label object references a label type object whose allowedObjects property value does not include that object's type (oimte:disallowedObjectLabelType). The label type object defines a non-empty set of allowable objects using the allowedObjects property. If the allowedObjects property is not defined, then the label type object allows labels for all objects.

The value of the label MUST conform to the contentConstraints object defined by its labelType (oimte:invalidLabelValue).

Duplicate labels MUST NOT be defined in the XBRL Model. Duplicate labels are labels with the same forObject, labelType and language properties. (oimte:duplicateLabelObject)..

5.15 Reference object

The reference object is an extensible object that defines a reference that can be associated with one or more objects. A reference is associated with a QName of the object. Multiple references can be associated with an object and multiple objects can be associated with a reference. References are distinguished by their QName.

The reference object has an object type QName of xbrl:referenceObject.

A reference can be associated with one or more objects by defining the QNames of the objects it is associated with in the forObjects property. References can be of different types. Standard reference types are defined in the XBRL specification. Reference types can also be defined in a taxonomy using the reference type object.

5.15.1 Reference object properties

name (xs:QName / string)
(optional) The name is a QName that uniquely identifies the reference object.
extends (xbrl:referenceObject reference / string)
(optional) The name of the reference object that the defined forObjects set should be appended to. The forObjects set in the reference with this property are appended to the forObjects set defined in the target reference object. This property cannot be used in conjunction with the name, referenceType and language properties. The QName MUST resolve to an existing reference object; if the QName resolves to an object of a different type, processors MUST raise an error (oimte:invalidObjectType). If the extends is defined either a QName value MUST be provided in the forObjects set or a property object value for the properties set. oimte:invalidJSONStructureMissingRequiredProperty
isExtensible (xs:boolean / boolean)
(optional) If set to false, the reference is non-extensible and no importing model may augment it using extends. If set to true or omitted, the reference may be extended. The default value is true.
forObjects (non-empty set of model object QName references / array)
(optional) Defines a set of model object QName references that the reference is associated with.

referenceType (xbrl:referenceTypeObject reference / string)
(optional) A QName representing the reference type of the reference. This can be a taxonomy defined reference or a standard XBRL reference included in the specification.
language (xs:string / string)
(optional) Defines the language of the reference using a valid BCP 47 language code.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects used to identify the properties of the reference. The order of the properties is defined by the orderedProperties attribute of the reference type object.

The following example defines a reference linking a concept to an accounting standard, with publisher, name and paragraph as reference parts:

{
    "name": "exp:RevenueIAS18Ref",
    "forObjects": ["exp:Revenue"],
    "referenceType": "ref:StandardReference",
    "properties": [
        { "property": "ref:Publisher", "value": "IASB" },
        { "property": "ref:Name", "value": "IAS 18" },
        { "property": "ref:Paragraph", "value": "7" },
        { "property": "ref:IssueDate", "value": "2003-12-01" }
    ]
}

5.15.2 Reference object constraints

The name property is required unless the extends property references an existing reference object. If neither name nor extends is provided, processors MUST raise an object structure error. If both name and extends are provided, processors MUST raise an object structure error.

The referenceType property is required unless the extends property references an existing reference object. If neither referenceType nor extends is provided, processors MUST raise an object structure error. If both referenceType and extends are provided, processors MUST raise an object structure error.

The forObjects property is required if the extends property is defined and the properties property is not defined. If neither forObjects nor properties is provided when extends is defined, processors MUST raise an object structure error.

The properties property is required if the extends property is defined and the forObjects property is not defined, processors MUST raise an object structure error.

The language property cannot be defined if the extends property is defined, processors MUST raise an object structure error.

The extends property of a reference object MUST reference the QName of an existing reference object. If the QName does not resolve to a reference object, processors MUST raise an error (oimte:invalidObjectType).

If the extends property is used the language property MUST NOT be defined. (oimte:invalidJSONStructureInvalidPropertyDefined)

A reference MUST NOT be defined for an object that is not allowed by its referenceType (oimte:disallowedObjectReferenceType).

The reference object MUST include all properties defined by the requiredProperties property of the reference type object in the properties array (oimte:missingRequiredProperty).

The language property of the reference must be a valid BCP 47 language code (oimte:invalidLanguage).

6 Object extension

Certain object types support extension, meaning that they can be modified by another model object.

An extensible object is an object of an object type that supports extensibility via the extends property. The following object types are extensible:

A base object is an extensible object that has been defined with a name property or has had all extends properties resolved.

An extending object is an extensible object that has an extends property.

The term extends refers to the relationship between an extending object and the base object that it references using the extends property.

An extending object expands a base object by contributing additional relationships, set components or properties to the base object. An extensible object with isExtensible: false, cannot be extended. The content of the extending object is merged into the base object during compilation, resulting in a single combined definition that includes all contributions from both the base and extending objects. An XBRL module may define multiple extending objects referencing the same base object, and their contributions are all merged. A compiled model does not contain any extends properties, as all extending objects are resolved during the compilation process.

6.1 Extensible object constraints

The following constraints apply to extensible objects:

The base object referenced by the extends property of an extending object MUST NOT have a value of false for its isExtensible property (oimte:illegalExtensionOfNonExtensibleObject).

7 Built-in models

A built-in model is an XBRL model defined by this specification.

The built-in models are:

The built-in models MAY be imported into other models using the import taxonomy object, but MUST NOT be included in an import mapping object (see Section 4.2.3).

8 Structural Report Elements

8.1 Entity object

The entity object defines entities in the taxonomy that represent a legal or reporting entity. Entities are defined using an SQName that includes the scheme and the identifier.

The entity object has an object type QName of xbrl:entityObject.

Entity objects can restrict the fact values of a cube or to indicate relationships between entities in a network object.

To include facts with entities, not defined as entity objects, in a cube the xbrl:entity cube dimension object must not have a domainNetwork property defined.

Entities defined in an OIM report with the same SQName as entities defined in the taxonomy, are considered to be the same entity.

Entities are defined as an entity object. Entities cannot be defined as members.

8.1.1 Entity object properties

The entity object has the following properties:

name (xbrl:SQName / string)
(required) The SQName that identifies the entity.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the entity object.

The following example defines an entity:

{
    "name": "exp:ExampleCorp"
}

8.1.2 Entity object constraints

The entity object MUST NOT be included in any domain network object relationship that does not have a domain root of xbrl:entityDomain. (oimte:invalidFactDimensionMember)

8.2 Unit object

The unit object defines units in the taxonomy that represent a unit of measure. Unit objects can be used on the unit dimension as part of the unit domain xbrl:unitDomain or dimension members on the unit dimension xbrl:unit of fact objects.

The unit object has an object type QName of xbrl:unitObject.

Information about the unit such as the description, the label, the symbol and the measurement standard is defined using labels or references.

The unit definition defines a composite unit definition that supports comparing units defined as a QName and units defined using a unit string representation. A fact with a unit dimension using a unit string representation resolves to the corresponding unit object defined in the taxonomy.

8.2.1 Unit object properties

The unit object has the following properties:

name (xs:QName / string)
(required) The unit QName that identifies the unit so it can be referenced by other objects.
dataType (xbrl:dataTypeObject reference / string)
(required) Specifies the datatype of the value. The value MUST be a QName referencing (oimte:invalidQNameReference):

The QName MUST resolve to a datatype object present in the taxonomy model, or to a built-in XML Schema datatype. (see Section 11.1)

compositeUnitRepresentation (non-empty set of xs:string / array)
(optional) 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.

The following example shows a unit object with multiple compositeUnitRepresentation values. The unit for cubic feet is defined with two equivalent string representations: one expressed as a product of three linear-foot units, and another as a product of a linear-foot and a square-foot unit. A processor matching reported unit string representations against taxonomy-defined units will accept either form as equivalent to exp:cubicFoot.

{
    "unitObjects": [
        {
            "name": "exp:cubicFoot",
            "dataType": "xbrlr:decimal",
            "compositeUnitRepresentation": [
                "utr:ft*utr:ft*utr:ft",
                "utr:ft*utr:sqft"
            ]
        },
        {
            "name": "exp:kilometresPerHour",
            "dataType": "xbrlr:decimal",
            "compositeUnitRepresentation": [
                "utr:km/utr:h"
            ]
        }
    ]
}

8.2.2 Unit object constraints

A unit object MUST have a dataType property that references a datatype that is a numeric datatype (oimte:invalidUnitDataType)

The unit object compositeUnitRepresentation MUST NOT reference the unit defined in the name property of the same unit object. (oimte:unitDataTypeUsedInDefinition)

The following unit definition should raise the error oimte:unitDataTypeUsedInDefinition

{
    "name": "exp:USD",
    "dataType": "xbrlr:monetary",
    "compositeUnitRepresentation": ["exp:USD"]
}

A unit must not use its own datatype as one of its compositeUnitRepresentation. A unit's string representation is typically a simpler, already-defined unit that provides a human-readable form; using the same unit's datatype creates a circular string representation definition. The constraint ensures that unit string representation references form a directed acyclic structure.

The unit object compositeUnitRepresentation MUST resolve each unit string representation to valid unit object QNames (oimce:invalidUnitStringRepresentation) as defined in Open Information Model Common Definitions 1.0

8.3 Fact object

The fact object is an extensible object that defines a fact. A fact represents the value associated with the intersection of dimensions in a multidimensional space. A fact object can exist without a value, or a reference to a value, but represents the definition of the fact and its associated dimensions. The dimensions include core dimensions and taxonomy defined dimensions. A fact object can be referenced by labels, references, and relationships. Properties can be added to facts using the property object.

The fact object has an object type QName of xbrl:factObject.

A fact's datatype is the datatype of the concept object identified by the fact's xbrl:concept dimension.

A fact's base datatype is the XML Schema primitive type from which the fact's datatype is derived.

A fact is nillable if the concept object identified by the fact's xbrl:concept dimension has a value of true for the nillable property.

A numeric fact is a fact object with a datatype that is derived from the XML Schema types of xs:decimal, xs:double or xs:float.

A non-numeric fact is any fact object that is not a numeric fact.

A text fact is a fact object with a datatype that is derived from the XML Schema type of xs:string, but which is not one of, or a type derived from one of, the following types:

A non-text fact is any fact object that is not a text fact.

The text fact definition identifies those fact objects to which the xbrl:language dimension is applicable.

A fact's period type is the value of the periodType attribute of the concept object identified by the fact's concept dimension, and is either duration, instant or none.

8.3.1 Fact object properties

The fact object has the following properties:

name (xbrl:SQName / string)
(optional) The fact SQName that identifies the fact so it can be referenced by other objects. It is an SQName that allows the local name to start with a number.
factValues (non-empty set of xbrl:factValueObject objects / array)
(optional) A set of fact value objects that identify the values of the fact object.
factDimensions (xbrl:factDimensionObject / object)
(optional) A fact dimensions object representing a set of dimension objects and associated values representing members of that dimension objects domain class object.
factQualifier (xbrl:factQualifierObject / object)
(optional) A fact qualifier object, that indicates additional dimensional members that are valid for the fact.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the fact object.
extends (xbrl:factObject reference / string)
(optional) References the fact object that the defined fact properties should be appended to. The items in the fact with this property are appended to the end of the properties defined in the target fact object. This property cannot be used in conjunction with the name and factDimensions properties. The ability to extend a fact can be used to add factValues and properties to an existing fact. The SQName MUST resolve to an existing fact object; if the SQName resolves to an object of a different type, processors MUST raise an error (oimte:invalidObjectType).
isExtensible (xs:boolean / boolean)
(optional) If set to false, the fact is non-extensible and no importing model may augment it using extends. If set to true or omitted, the fact may be extended. The default value is true.

The following example defines a named monetary fact for annual revenue, with concept, period, entity and unit dimensions:

{
    "name": "exp:RevenueAnnual2024",
    "factDimensions": {
        "xbrl:concept": "exp:Revenue",
        "xbrl:period": "2024-01-01/2024-12-31",
        "xbrl:entity": "exp:ExampleCorp",
        "xbrl:unit": "iso4217:GBP"
    },
    "factValues": [
        { "value": "1500000", "decimals": -3 }
    ]
}

8.4 Fact values object

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. This object has the QName of xbrl:factValueObject.

8.4.1 Fact value object properties

The fact value object has the following properties:

name (xbrl:SQName / string)
(required) The fact SQName that identifies the fact value so it can be referenced by other objects.
value (xs:anyType / any)
(optional) The value of the fact. This can be a numeric value, a string, or any other type of value that is valid for the fact.
decimals (xs:integer / number)
(optional) 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 (xs:language / string)
(optional) The language of the fact value, specified using the BCP 47 standard language code (e.g., "en" for English, "fr" for French).
reportSource (xbrl:factSourceObject reference/ string)
(optional) identifies the fact source object reference of the fact value. If no reportSource property is provided the document file encapsulating the model object is implied as the fact source. If no reportSource property is provided and the model is external to the source file then the fact source mapping object in the sourceMappings array of the document info object determines the location of the value.

transformation (xbrl:transformObject reference / string)
(optional) A transform object reference that defines the transformation to perform on the fact value. If no transformation is provided the value is used as it appears in the source document. The transformation property MUST NOT be defined if value is defined. If both the transformation property and value property are defined, the processor MUST raise an object structure error.

scale (xs:integer / number)
(optional) identifies a power of 10 to multiply source text number (such as when in billions) in the source document. The scale property MUST NOT be defined if the property value is defined. If a scale property and value property is defined the processors MUST raise an object structure error. If a value property is not defined and the scale property is not defined the value of scale defaults to zero.
sign ( xs:string / string)
(optional) identifies if the resulting numerical value is negative. Value must be "-" or not reported. The sign property MUST NOT be defined if value is defined.

escape ( xs:boolean / boolean)
(optional) If the escape attribute is true then value is the escaped representation for media with markup, e.g. html or pdf, otherwise the concatenation in document order of all descendant text content. If no value is provided the attribute defaults to false.

valueSources (non-empty ordered set of xbrl:factValueSourceObject objects / array)
(optional) An ordered set of fact value source objects that identify where the values are obtained from content of an embedding or accompanying document source. At least one of value or valueSources MUST be defined.
valueAnchors (non-empty ordered set of xbrl:factValueAnchorObject objects / array)
(optional) An ordered set of fact value anchor objects that identify corresponding content of an embedding document file (html, pdf or tabular) for cases where the value is provided in the value property instead of obtained from the content of the document file. For example, non-transformable values, such as a QName value, may correspond to prose text in the document file. Used by tools to highlight and detect mouse-over correspondence between fact values and document text. If both the valueSources and valueAnchors properties are provided, processors MUST raise an object structure error.

There are three alternative ways to identify the source file for a fact value. The method used will depend on the nature of the data being represented.

If all the facts are in a single document format such as html, the model can be included in the document itself. This negates the need to point to an external source for the facts. The fact source mapping object must point to the current file, by having an empty value for the required url property shown below.

"sourceMappings": [
            {
                "sourceName": "aapl:aapl-20250927Source",
                "url": ""
            }
        ]

If the facts are spread across multiple documents, each document must be referenced using fact value source object in the valueSources property.

The location of the source document is identified using the fact source mapping object in the document info object. The sourceName property of this object must reference fact source object. This fact source object must includes a fact map object that defines a factLocatorType property, which specifies the type of locator to be used to identify the fact in the document.

"sourceMappings": [
            {
                "sourceName": "aapl:aapl-20250927Source",
                "url": "../examples/aapl-20250927.htm"
            }
        ]

In the model the fact source object and fact map object define the fact source and the mapping method.

"factSources": [
            {
                "name": "exp:aapl-20250927Source",
                "factMapName": "exp:htmlElementFactMap"
            }
        ],
"factMaps": [
            {
                "name": "exp:htmlElementFactMap",
                "factLocatorType": "xbrl:htmlElementLocatorType"
            }
        ],

If no reportSource is defined in the fact value object, the processor must look for the source in the document info object. This can only contain one source object if reportSource is not defined in fact values.

{
    "name": "aapl:fs_f-9",
    "factDimensions": {...},
    "factValues": [
        {
            "name": "aapl:f-9_val",
            "valueSources": [
                {"properties": [{"property": "xbrl:htmlElementId", "value": [ "f-9"]}]}
            ]
        }
    ]
}

If facts are incorporated into the model from more than one location the reportSource property must be identified on the fact value object. This can also be used for a single data source. The example below shows the use of the optional reportSource property.

{
    "name": "aapl:fs_f-9",
    "factDimensions": {...},
    "factValues": [
        {
            "name": "aapl:f-9_val",
            "reportSource": "aapl:aapl-20250927Source",
            "valueSources": [
                {"properties": [{"property": "xbrl:htmlElementId", "value": [ "f-9"]}]}
            ]
        }
    ]
}

The fact value source object is defined in an array to support facts that may be spread over multiple components of a document, performing the same function as continuations in inline XBRL.

8.4.2 Fact value object constraints

The fact value objects property value MUST be provided if the property valueSources is not provided. Processors must raise an object structure error.

If the value property is provided, it MUST be valid according to the datatype of the concept associated with the fact (oimte:factValueDataTypeMismatch).

If a value is provided for valueSources or valueAnchors then a value MUST be provided for factLocatorType as a property of the factMap associated with the factSource referenced in the sourceMappings of the document info object (oimte:factValueLocatorRequiredForValueSources).

8.5 Fact dimension object

The factDimensions object represents the dimensions associated with a fact. Each property of the object corresponds to a dimension. For core dimensions, the name of the property is either xbrl:concept, xbrl:period, xbrl:unit, or xbrl:entity. For taxonomy defined dimensions the property name is a dimension object QName. The object has a QName of xbrl:factDimensionObject.

8.5.1 Fact dimension object properties

The factDimensions object is a set of name/value pairs:

Any dimension QName (xbrl:dimensionObject reference / string)
(optional) Any dimensions on the fact are included as properties with a name corresponding to the {name} property of the dimension, expressed as a QName. The value is the {value} property of the dimension expressed either as a QName representing a xbrl:concept, an xbrl:period, an xbrl:unit, an xbrl:entity SQName, or a value conforming to the datatype of the dimension. (see Section 5.7)

A cube that defines a unit dimension with optional set to false will not include facts with unit values of xbrlr:pure, or numeric values with no unit.

The following example shows a factDimensions object specifying the four core XBRL dimensions plus an explicit reporting segment dimension:

{
    "xbrl:concept": "exp:Revenue",
    "xbrl:period": "2024-01-01/2024-12-31",
    "xbrl:entity": "exp:ExampleCorp",
    "xbrl:unit": "iso4217:GBP",
    "exp:SegmentDimension": "exp:NorthAmerica"
}

8.5.2 Fact dimension object constraints

8.5.2.1 Concept dimension

The factDimensions object MUST include a key value of xbrl:concept (oime:missingConceptDimension).

The xbrl:concept dimension MUST have a value that is a QName referencing a concept object defined in the model (oimte:invalidObjectType).

8.5.2.2 Period dimension

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. The time interval MAY be defined in local time (i.e. without a time zone designator) in which case processors MUST NOT assume a particular time zone, but MUST preserve the information that the time interval is in local time.

The factDimensions object MUST include a name of xbrl:period if the fact's period type is duration or instant (oime:missingPeriodDimension)

If a fact's period type is duration then the xbrl:period value MUST be a non-zero length time interval (oime:invalidPeriodDimension).

If a fact's period type is instant then the xbrl:period value MUST be a zero length time interval (oime:invalidPeriodDimension).

When resolving a duration interval, a date-only *start* value (without a time component) defaults to T00:00:00 and a date-only *end* value defaults to T00:00:00 of the following day. A period of 2023-01-01/2023-01-01 resolves to a 24-hour interval (from 2023-01-01T00:00:00 to 2023-01-02T00:00:00).

When resolving an instant interval, a date-only value (without a time component) defaults to T00:00:00 of the following day. A period of 2024-12-31 resolves to an instant of 2025-01-01T00:00:00.

If a fact's period type is duration then the xbrl:period value MUST NOT have an end date that is before the start date. (oime:invalidPeriodDimension)

If a fact's period type is none then the xbrl:period MUST NOT be defined. (oime:invalidPeriodDimension)

Fact values without the period dimension defined MUST have use a concept object with a periodType value of none (oime:invalidPeriodDimension).

8.5.2.3 Unit dimension

The factDimensions object MUST include a name of xbrl:unit if the fact's datatype has a defined unit (see section Section 8.10.1 (oimte:factMissingUnitDimension)

The xbrl:unit dimension MUST NOT be present on a non-numeric facts (oime:misplacedUnitDimension).

Description Datatype * Example Error
Numeric fact with matching unit With unit xbrlr:length with utr:feet No error
Numeric fact with matching unit With no unit xs:decimal with no unit No error
Numeric fact with non-matching unit With unit xbrlr:length with iso4217:USD oimte:factUnitDatatypeMismatch
Numeric fact with non-matching unit With no unit xs:decimal with utr:acre oimte:factUnitDatatypeMismatch
Numeric fact with no unit With unit xbrlr:length with no unit oimte:factMissingUnitDimension
Numeric fact with no unit With no unit xs:decimal with no unit No error
Non-numeric fact with a unit With no unit xs:string with iso4217:USD oime:misplacedUnitDimension

A unit of xbrlr:pure which is the domain value of xbrl:unit is equivalent to no unit.

If a xbrl:concept has a numeric datatype and no xbrl:unit is defined the unit dimension is treated as having a unit of xbrlr:pure.

Datatypes defined in the xs namespace MUST NOT be used as the datatype of a unit (oimte:invalidUnitDataType).

8.5.2.4 Model defined dimensions

A fact's dimension member MUST NOT be the domain class object for that dimension (oimte:invalidFactDimensionMember).

A taxonomy defined dimension value of a fact object MUST match the taxonomy defined dimensions domainClass with at least one of the domainClasses of the member object (for explicit dimensions) or MUST conform to the taxonomy defined dimensions datatype (for typed dimensions) (oimte:invalidFactDimensionMember). The match must include inferred domain classes of the member object that are inherited using the base domain class object see Section 5.6.3.

8.5.2.5 All dimensions

The set of dimensions defined for a fact MUST match the dimensions of at least one or more positive cubes (cubes that are not a negative cube) defined in the model (oimte:noFactSpaceForFact).

Facts whose dimensions match only an exclude cube MUST raise the error (oimte:noFactSpaceForFact).

The error oimte:noFactSpaceForFact is raised for a fact defined in a cube if an exclude cube also includes that fact. An exclude cube applied to a positive cube can thus make a fact invalid in the model.

8.6 Fact qualifier object

The factQualifier object represents the dimension properties associated with a fact that do not represent dimensions comprising a cube space for the fact. Each property of the object corresponds to a taxonomy defined dimension. The dimension properties of a fact qualifier cannot define core properties of xbrl:concept, xbrl:period, xbrl:unit, or xbrl:entity. This object can only define taxonomy defined dimensions where the property name is a dimension object QName. The object has a QName of xbrl:factQualifierObject.

8.6.1 Fact qualifier object properties

The factQualifier object is a set of name value pairs:

Any dimension QName (xbrl:dimensionObject reference / string)
(optional) Any dimensions on the fact are included as properties with a name corresponding to the {name} property of the dimension, expressed as a QName. The value is the {value} property of the dimension expressed either as a QName or a typed value for typed dimensions. (see Section 5.7)

8.6.2 Fact qualifier object constraint

A fact qualifier's dimension property member MUST NOT be the domain class object for that dimension. (oimte:invalidFactDimensionMember)

The dimension property member of a fact MUST be part of the dimension's domain (for explicit dimensions) or must conform to the dimension's datatype (for typed dimensions)(oimte:invalidFactDimensionMember).

A named pair in a fact qualifier object MUST NOT be defined as a pair in the fact dimension object for that fact (oimte:invalidFactQualifierDimensionMember).

The set of dimensions defined for a fact qualifier object does not need to be expressed in a cube, but if the combination of pairs in both the fact dimension object and fact qualifier object exist in a cube, then a fact value for a fact matching the combination of pairs MUST be the same (oimte:factInconsistentWithFactQualifier).

In the example below Company 1 has total sales of $500,000 USD in 2025. The $500,000 also represents the following:

  1. Sales in the US for Widgets
  2. Sales of Widgets manufactured in China
  3. Total Sales of goods manufactured in China
  4. Total Sales in the US
  5. Total Sales of Widgets
  6. Total Sales of Widgets manufactured in China sold in the US
  7. Total Sales in the US manufactured in China

The fact qualifiers enable unambiguous reporting of this granularity without the need to build sparse cubes, and define the same fact value 8 times.

 "facts": [
            {
                "name": "exp:RevenueForWidgetSalesInUSFact",
                "factDimensions": {
                    "xbrl:concept": "exp:Revenue",
                    "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00",
                    "xbrl:entity": "exp:Company1",
                    "xbrl:unit1": "iso4217:USD"
                },
                "factValues": [
                    {
                        "name": "exp:fv1",
                        "value": "500000"
                    }
                ],
                "factQualifiers": {
                    "exp:RegionSoldAxis": "exp:US",
                    "exp:ProductAxis": "exp:Widget",
                    "exp:RegionManufacturedAxis":"exp:CN"
                }
            }
 ]

8.7 Fact value source object

The fact value source object represents the source(s) of a fact value from an information store. The Fact value source object is used when the value of a fact is not directly provided in the value property of a fact value object, but instead is obtained by extracting and transforming content from an embedding or accompanying information source (html, pdf, XLSX etc). The fact value source object identifies the source of the content in the information store and any transformations that need to be applied to the extracted content to obtain the fact value.

The fact value source object has an object type QName of xbrl:factValueSourceObject.

8.7.1 Fact value source object properties

Each fact value source object in the valueSources property array may identify source text in an information store. The properties of a fact value source object depend on the storage format. (e.g. html, pdf, spreadsheet).

There may be multiple fact value source objects in any valueSources array, to identify multiple regions of source text in the information store, such as text split among paragraphs, pages, cells, form fields, etc. They aggregate by concatenation when present.

properties (non-empty set of xbrl:propertyObject objects / array)
(required) A set of property objects that specifies the interface properties defined by the locatorType for the fact source.

The following example demonstrates a value source that is in the span of an html document with an id of "f-73". The property name of xbrl:htmlElementId is defined in the locatorType for html content, and the value is the id of the element in the html document that contains the value for the fact. Tools can use this information to extract the content of the span element as the value for the fact, and to highlight that span element in the document when displaying the fact.

"valueSources": [
    {
        "properties": [
            {
                "property": "xbrl:htmlElementId",
                "value": ["f-73"]
            }
        ]
    }
],

8.8 Fact value anchor object

The fact value anchor object specifies the source(s) of a fact value from a document file's content for the purpose of tool visual actions. The fact value anchor object is used when the value of a fact is provided in the value property of a fact value object, but there is a need to identify corresponding content in an embedding document format (such as html, pdf, tabular etc.) for purposes of highlighting text or discovering mouse-over to corresponding fact values. The object name is xbrl:factValueAnchorObject.

The fact value anchor object has an object type QName of xbrl:factValueAnchorObject.

8.8.1 Fact value anchor object properties

Each fact value anchor object in the valueAnchors property array may identify source text in a document file. The properties of a fact value anchor object depend on the document file media (e.g. html, pdf, XLSX, ODS, Google Sheets etc.).

This property may be used by tools which highlight text in a document file corresponding to a fact, and may be used for mouse-over behavior to identify fact values which correspond to document file contents.

There may be multiple fact value anchor objects in any valueAnchors array, to identify multiple regions of source text in the document file, such as text split among paragraphs, pages, cells, form fields, etc. They identify non-contiguous text for purposes of highlighting text or discovering mouse-over to corresponding fact value objects.

properties (non-empty set of xbrl:propertyObject objects / array)
(required) A set of property objects used to specify the interface properties defined by the locatorType for the fact anchor.

8.9 File reference resolution

When a fact value source object or fact value anchor object is defined a fact source object MUST be defined. The following steps describe how a processor MUST determine the source document from model properties:

If the processor fails to resolve a source document the processor MUST raise an error (oimte:factSourceResolutionFailed).

8.10 Fact validation

8.10.1 Fact unit validation

Future drafts of this specification will include functionality that provides a replacement for and enhancement to that provided by Units Registry - Structure 1.0. This functionality allows a fact's units to be validated for consistency with the datatype of the fact's concept.

Planned enhancements include:

The proposed functionality would allow the definition of an entry as a combination of any other number of other entries, and a fact's unit dimension would be considered valid if the reported sets of numerator and denominator measures match those permitted for by the combined sets of unit entries.

8.10.2 Duplicate fact validation

The model defines if duplicate facts are permitted. The validity of duplicate facts can be defined at the xbrl model object level or the cube object level. The xbrl model object property duplicateFactsInModel indicates if the model validates duplicate facts. A string value of no duplicates, <<oim:complete duplicates>>, <<oim:consistent duplicates>>, or <<oim:inconsistent duplicates>> defines the duplicates permitted. If no string value is provided the default value is inconsistent duplicates. The value of duplicateFactsInModel sets the default value of the cube object property duplicateFactsInCube. The allowable values for duplicateFactsInCube is the same as the allowable values for duplicateFactsInModel. The value of duplicateFactsInCube has precedence over the duplicateFactsInModel value of the xbrl model object.

The cube object defines if duplicate facts are valid or invalid for facts in that cube. If a cube does not specify a value for the property duplicateFactsInCube then the default value is taken from the duplicateFactsInModel property of the xbrl model object.

If duplicate facts exist in a model they must match the dimension values of at least one cube in the model that allows duplicate facts. If duplicate facts do not match at least one cube in the model that allows duplicate facts then the fact MUST be identified as invalid.(oime:disallowedDuplicateFacts)

8.11 Footnote object

The footnote object defines footnotes that can be associated with facts in a report. Footnotes provide additional context or information about the fact objects they are associated with.

The footnote object has an object type QName of xbrl:footnoteObject.

Relationships between facts are expressed using relationship objects between two facts. (see Section 11.4)

8.11.1 Footnote object properties

name (xs:SQName / string)
(required) The footnote object SQName that identifies the footnote so it can be referenced by other objects.

forObjects (non-empty set of xbrl:factObject references / array)
(required) A set of fact object QNames that are included in the footnote object. The set cannot be empty. The forObjects property allows a footnote to be associated with one or more facts. A fact can be associated with multiple footnotes by including its QName in multiple forObjects sets across different footnote objects.
content (xs:string / string)
(required) The content of the footnote.
language (xs:language / string)
(optional) The language of the footnote text, specified using the BCP 47 standard language code (e.g., "en" for English, "fr" for French). If this property is not defined, processors MAY inherit the language from the xbrl:defaultLanguage property of the enclosing XBRL model object, if that property is defined.
annotationType (xs:QName / string)
(optional) A string that indicates the type of footnote, such as "footnote", "endNote", "sideNote", etc. This property is intended for informational and rendering purposes and does not affect the validity of the footnote or its association with facts. The specific values and semantics of the annotationType property are not defined by the OIM specification and are left to tool implementations and user conventions.

The following example defines a footnote that annotates a revenue fact with a plain-text explanation:

{
    "name": "exp:RevenueNote1",
    "forObjects": ["exp:RevenueAnnual2024"],
    "language": "en",
    "content": "Revenue is recognised at the point of transfer of control of goods or services to the customer.",
    "annotationType": "xbrl:footnote"
}

9 Fact source elements

Facts can be defined in the model as an individual fact object or as a collection of facts called a fact source object. The model allows facts to be defined as either object. A fact object can be derived from a fact source and a fact source can be expressed as a collection of facts. The fact source object defines a collection of facts that are derived from a common data source, such as a CSV file, an Excel sheet, a JSON file, an XML file, or an XBRL instance. The fact source object references a fact map object that defines the structure and template for representing the data as fact objects. The fact source object also references the specific data source from which the facts are derived. This allows for efficient representation of large sets of facts without having to define each fact individually in the model.

9.1 Fact source object

A fact source object is a binding between a fact map object (which defines the structure and template to represent data as fact objects) and a specific data source from which the data representing fact objects is defined. A single fact map object can be reused across multiple fact source objects that reference different data sources.

The fact source object has an object type QName of xbrl:factSourceObject.

9.1.1 Fact source object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the fact source object.
factMapName (xbrl:factMapQName reference / string)
(required) The fact map name is a QName that references a fact map object defined in the taxonomy model (see Section 9.3)
cubeName (xbrl:cubeQName / string)
(optional) 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 (non-empty set of xbrl:namespaceMapObject / object)
(optional) A set of namespaceMap objects that maps the namespace of the model defined in a datasource to the namespace of an updated model. The namespaceMaps property is used for namespace migration: when importing facts from an older XBRL report where concepts used a different namespace (e.g., old:Revenue) into a model where those concepts have been updated to a new namespace (e.g., new:Revenue), the namespaceMaps entry tells the processor how to translate the old namespace to the new one during fact loading (see Section 9.2).

factIdentifierNamespacePrefix (xs:NCName / string)
(optional) The factIdentifierNamespacePrefix is the namespace prefix assigned to the fact objects defined in the fact source object. The factIdentifierNamespacePrefix defines the prefix of the fact object QName and fact value object QName generated from the fact source object. If the factIdentifierNamespacePrefix is not defined, the processor MUST use the namespace prefix of the model for the fact object and fact value object QName. This property is used when multiple fact sources are used to prevent fact QName duplicates. If the prefix is not defined in the document namespace object, the error oimce:unboundPrefix is raised.

properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the fact source object.

The following example defines a fact source binding a CSV data format to a specific report file:

{
    "name": "exp:AnnualReport2024Facts",
    "factMapName": "xbrl:csvFactMap",
    "properties": [
        { "property": "exp:documentTitle", "value": "Annual Report 2024" }
    ]
}

9.1.2 Fact source object constraints

The namespace prefix defined for factIdentifierNamespacePrefix MUST be defined in the document namespace object (oimce:unboundPrefix).

9.2 Namespace map object

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.

The namespaceMap object has an object type QName of xbrl:namespaceMapObject.

When a reporting authority changes a taxonomy namespace URI (a breaking change), previously filed reports reference the old namespace. The namespace map object allows processors to treat facts in the fromNamespacePrefix as if they were in the toNamespacePrefix, enabling backward-compatible validation of legacy reports. This is analogous to XML catalog-based URI rewriting.

9.2.1 Namespace map object properties

fromNamespacePrefix (xs:NCName / string)
(optional) The fromNamespacePrefix property is the original namespace prefix that is being redirected.
toNamespacePrefix (xs:NCName / string)
(required) The toNamespacePrefix property is the new namespace prefix that the fromNamespacePrefix is being redirected to. If no fromNamespacePrefix is specified, the toNamespacePrefix is used as the namespace for the fact source object irrespective of the namespace in the source.

The following example maps a legacy namespace to the current taxonomy namespace, enabling validation of reports filed against the old namespace using the current model:

{
    "fromNamespacePrefix": "expOld",
    "toNamespacePrefix": "expCurrent"
}

9.2.1.1 Namespace map object constraints

The namespace prefixes defined for fromNamespacePrefix and toNamespacePrefix MUST be defined in the document namespace object. (oimce:unboundPrefix)

The data source MUST be defined in an XBRL format.

9.3 Fact Map object

The fact map object defines the mapping between data available in underlying data format and how that format can be translated to fact objects. Maps can be defined for different data formats such as CSV, JSON, XML or other formats. The fact map object defines the mapping for a specific data format.

The fact map object has an object type QName of xbrl:factMapObject.

The result of applying a fact map to a fact source object in the specified format results in a set of fact objects.

This specification defines two built-in fact maps that processors MUST support without any explicit factMap definition in the taxonomy model:

Processors MAY support the following built-in fact map without explicit factMap definition in the taxonomy model:

Model authors may define additional fact map objects for custom data formats using the templateName property to reference a table template object, jsonTemplateMap object, or xmlTemplateMap object.

A fact map object is a supplementary derivation mechanism for facts sourced from external documents. A fact map object is used when fact values are extracted from an external data source (CSV, XML, JSON) using the structure of the data source to determine the mapping. A taxonomy/report that provides all its facts as fact objects has no need for a fact map object.

9.3.1 Fact map object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the fact map object.
templateName (xs:QName / string)
(optional) The templateName is a QName that references a table template object, a JSON template map object or an XML template map object defined in the taxonomy model. The type of template object referenced by the templateName property determines the data format of the fact map. (see Section 9.4, Section 9.5 and Section 9.6)
factLocatorType (xbrl:factLocatorTypeObject reference / string)
(optional) 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.

9.3.2 Built-in fact map objects

The specification defines specification-defined fact maps where the format of the XBRL facts is known. This includes XBRL facts defined using the XBRL 2.1 specification and facts defined using the xBRL-JSON specification. (see Section 16)

The XBRL-xml fact map is referenced by a fact source. In the example below the fact source object ext:getInstance represents the collection of facts.

 "factSources": [
    {
        "name": "ext:getInstance",
        "factMapName": "xbrl:xBRL-XML"
    }
],

The following example defines a custom fact map that references a table template for OIM-CSV data:

{
    "name": "exp:QuarterlyCSVMap",
    "templateName": "exp:QuarterlyReportTemplate"
}

9.4 Table template object

A table template object is an extensible object that defines a table structure that maps facts in a CSV format into an XBRL fact object. The table template model mirrors that defined in the XBRL-csv specification.

The table template object has an object type QName of xbrl:tableTemplateObject.

The tableTemplate object does not replace the XBRL-CSV specification which is designed to work with the XBRL 2.1 specification but provides an equivalent mechanism to map CSV data to XBRL facts using the OIM model.

This table template object maps facts defined in a two dimensional format to an XBRL fact object.

9.4.1 Table template object properties

name (xs:QName / string)
(optional) The name is a QName that uniquely identifies the table template object. This property cannot be used in conjunction with the extends property.
rowIdColumn (xs:string / string)
(optional) An identifier specifying the name of the row ID column.
columns (non-empty ordered set of xbrl:columnObject objects / array)
(required) An ordered set of xbrl:columnObjects that define the columns of the table. (see Section 9.4.2)
factDimensions (xbrl:factDimensionObject / object)
(optional) A factDimensions object that defines table dimensions.
decimals (xs:decimal / number)
(optional) 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).
extends (xbrl:tableTemplateObject reference / string)
(optional) Names the table template object that is appended to. The items in the table template with this property are appended to the end of the columns target table template object. This property cannot be used in conjunction with the name, rowIdColumn and decimals property. The QName MUST resolve to an existing table template object; if the QName resolves to an object of a different type, processors MUST raise an error (oimte:invalidObjectType).
isExtensible (xs:boolean / boolean)
(optional) If set to false, the table template is non-extensible and no importing model may augment it using extends. If set to true or omitted, the table template may be extended. The default value is true.

The following example defines a table template for a quarterly CSV report with a period column and a value column for revenue:

{
    "name": "exp:QuarterlyReportTemplate",
    "rowIdColumn": "rowId",
    "columns": [
        {
            "columnName": "period",
            "factDimensions": { "xbrl:period": { "transform": "xbrl:datePeriod" } }
        },
        {
            "columnName": "value",
            "decimals": -3,
            "factDimensions": { "xbrl:concept": "exp:Revenue" }
        }
    ]
}

9.4.2 Column Object

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.

9.4.2.1 Column object properties

columnName (xs:string / string)
(required) The name of the column.
decimals (xs:decimal / number)
(optional) 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).
factDimensions (xbrl:factDimensionObject / object)
(optional) A factDimensions object that defines column dimensions.

transformation: (xbrl:transformObject reference / string)
(optional) identifies a transform object QName reference for the column text, such as conversion from dates in local format.
order (xs:decimal / number)
(optional) The order attribute orders the columns relative to each other. If no order attribute is provided the order of their appearance in the array is used as the default. If no order attribute is provided the default order value is zero. This value is used to sort columns relative to objects that do have an order attribute.

The columnName MUST be a valid NCName and MUST NOT contain the . character. (oimte:invalidColumnName)

9.4.3 Mapping table templates to facts

The mapping of a table template object to fact objects is defined in the xbrl-csv specification.

The following lists components of this specification are not supported or are changed:

9.4.3.1 SQName of facts from table template

The SQName of the fact is the concatenation of the fact source object QName (including the prefix), the row identifier for the current row and the column identifier for the current column, separated by ., i.e.:

{factSource QName}.{row-identifier}.{column-identifier}

9.4.3.2 Row identifier

A row identifier provides a unique identifier for a row that is used, in combination with the fact source object QName and column identifier to produce fact identifiers. The row identifier for the current row is:

Where a data table includes a row ID column the values in the column have the constraints defined in the xbrl-csv specification.

9.4.3.3 Fact dimensions

The fact dimensions property of a fact object from a tableTemplate is defined in the xbrl-csv specification

9.4.3.4 Decimals

The decimals property of a fact object from a tableTemplate is defined in the xbrl-csv specification

9.5 JSON template map object

The JSONTemplateMap object defines a map containing facts in a JSON format into an XBRL fact object. It has a QName of xbrl:jsonTemplateMapObject.

This object maps facts defined in any JSON format to an XBRL fact object.

9.5.1 JSON template map object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the JSON template map object.
factDimensions (xbrl:factDimensionObject / object)
(required) A factDimensions object that defines map dimensions.
valuePath (xs:string / string)
(required) A JSONPath expression that identifies the location of the fact values in the JSON data.
decimals (xs:decimal / number)
(optional) 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).

9.6 XML template map object

The XMLTemplateMap object defines a map containing facts in an XML format into an XBRL fact object. It has a QName of xbrl:xmlTemplateMapObject.

This object maps facts defined in any XML format to an XBRL fact object.

9.6.1 XML template map object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the XML template map object.
factDimensions (xbrl:factDimensionObject / object)
(required) A factDimensions object that defines map dimensions.
valuePath (xs:string / string)
(required) An XPath expression that identifies the location of the fact values in the XML data.
decimals (xs:decimal / number)
(optional) 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).
namespaceMap (xbrl:namespaceMapObject / object)
(optional) A namespace mapping object that defines the namespace prefixes used in the XPath expression.

9.7 Transform object

The transform object defines data transforms that can be used for inline XBRL filings but also for transforming other datatypes into an XBRL data model.

The transform object has an object type QName of xbrl:transformObject.

A transform object defines how data is transformed from one datatype to another datatype. A corresponding implementation is to be supplied at run-time either as a standard function or via some extension mechanism. The definition of the transform functions is out of scope for this specification.

9.7.1 Transform object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the transform object.
inputDataType (xbrl:dataTypeObject reference / string)
(required) Indicates the datatype of the input to be transformed.
outputDataType (xbrl:dataTypeObject reference / string)
(required) Indicates the datatype of the transformation output.

The following example defines a transform that converts a date string in D/M/Y format to a canonical xs:date value:

{
    "name": "exp:dateDMY",
    "inputDataType": "xs:string",
    "outputDataType": "xs:date"
}

10 Structural Relationships

10.1 Group object

The group object defines standard groups that can be used to reference a set of common objects. These groups can be reused across extended taxonomies as taxonomy objects such as cubes and networks do not have a property that ties them to a specific group. A single group can contain multiple networks and cubes. A group will usually correspond to a statement or schedule in a financial disclosure.

The group object has an object type QName of xbrl:groupObject.

10.1.1 Networks in groups

Multiple network objects with the same relationship type can exist in the same group object. This allows separate networks with the same relationship type to be defined for the same group object such as an income statement and the associated parenthetical disclosure for the income statement.

10.1.2 Cubes in groups

A group object can contain multiple cubes. A cube can be associated with multiple group objects.

10.1.3 Table templates in groups

A group content object may also include table template object QNames in the forObject property to indicate the data source associated with the group's facts.

10.1.4 Group object properties

The group object has three properties:

name (xs:QName / string)
(required) The group object QName that identifies the group so it can be referenced by other objects.
groupURI (xs:anyURI / string)
(optional) The group URI that uniquely identifies the group and is used for backward compatibility with roles.
properties (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the group object.

The following example defines a group representing the financial statements section of a report:

{
    "name": "exp:BalanceSheetGroup",
    "groupURI": "http://example.com/role/BalanceSheet"
}

10.2 Group content object

The group content object links group objects to network objects, cube objects, domain network objects and table template objects. Group content objects are defined in the groupContents set of the XBRL model object. Duplicate group content objects with the same groupName and forObject are removed.

10.2.1 Group content object properties

The group content object has three properties:

groupName (xbrl:groupObject reference / string)
(required) The QName of the group object. (see Section 10.1)
forObject (xbrl:networkObject or xbrl:domainNetworkObject or xbrl:cubeObject or xbrl:tableTemplateObject reference / array)
(required) Defines either a network object, cube object, domain network object or table template object QName that is included in the group object.

order (xs:decimal / number)
(optional) The order attribute defines the order of group content objects with the same groupName in the groupContents set of the XBRL model object. If no order attribute is provided the default order value is zero. If two or more group content objects have the same order property the processor decides the order.

The following example associates a group with a cube and a presentation network:

"groupContents": [
    {
        "groupName": "exp:BalanceSheetGroup",
        "forObject": "exp:BalanceSheetCube",
        "order": 1
    },
    {
        "groupName": "exp:BalanceSheetGroup",
        "forObject": "exp:BalanceSheetPresentation",
        "order": 2
    }
]

10.2.2 Group content object constraints

The forObject property MUST only include QNames associated with network objects, cube objects, domain network objects or table template objects. (oimte:invalidGroupContentForObject)

10.2.3 Extend group content objects

To add additional objects to a group, a group content object can be defined with the groupName in the importing taxonomy. The order property can be used to determine the order of the additional object in the group.

An importing model cannot remove an object from a group object.

10.3 Network object

A network object is an extensible object that defines a collection of relationship objects.

A compiled network object is a resolved model object that defines a collection of relationship objects. A compiled network object is the result of merging all the relationship objects from a network object and any network objects that it extends.

Each network object specifies the relationships for a single relationship type.

The network object has an object type QName of xbrl:networkObject.

For backward compatibility with XBRL 2.1, the `usedOn` attribute of a role declaration can be derived from the relationship type object.

10.3.1 Network object properties

Properties of the network object are:

name (xs:QName / string)
(optional) The name is a QName that uniquely identifies the network object.
relationshipTypeName (xbrl:relationshipTypeObject reference / string)
(optional) The relationship type object of the network expressed as a QName such as xbrl:parent-child
relationships (non-empty set of xbrl:relationshipObject objects / array)
(optional) A set of the relationship objects comprising the network.
extends (xbrl:networkObject reference / string)
(optional) 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; if the QName resolves to an object of a different type, processors MUST raise an error (oimte:invalidObjectType).
isExtensible (xs:boolean / boolean)
(optional) 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 (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that specifies model-defined properties associated with the network object.

The following example defines a presentation network for an income statement with a parent-child hierarchy:

{
    "name": "exp:IncomeStatementPresentation",
    "relationshipTypeName": "xbrl:parent-child",
    "relationships": [
        { "source": "xbrl:rootSource", "target": "exp:IncomeStatementAbstract", "order": 1 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:Revenue", "order": 1 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:CostOfSales", "order": 2 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:GrossProfit", "order": 3 }
    ]
}

An extension that adds a new concept to an existing network:

{
    "extends": "exp:IncomeStatementPresentation",
    "relationships": [
        { "source": "exp:IncomeStatementAbstract", "target": "exp:OtherIncome", "order": 4 }
    ]
}

Specifying the extends property results in all the relationship objects being merged into their respective sets. In the case of multiple extends on the same object the order of the sets is determined based on the order property of the relationship objects relative to each other. If no order is defined the ordering is processor specific.

10.3.2 Root Source QName

The root source identifies a single point for network roots and group tree object roots to be anchored by a relationship object. This allows multiple network roots to be defined and ordered in a network hierarchy. The root source QName need not be visible by tools and is defined using the same QName across all network objects and group tree objects. The QName xbrl:rootSource is used to define the root source.

A network root is an object that is the target of a relationship object with a source of xbrl:rootSource.

If a relationship object defines the xbrl:rootSource as the source, a processor should only recognize the order property of the relationship object. If the relationship type of the network object requires a property, and that property is not defined where the source of the relationship object is xbrl:rootSource then processor should not raise an error.

Constraints on source objects defined in the relationship type object do not apply to the root source QName.

The following exampleshows the root source used in a set of relationships:

    "relationships": [
        { "source": "xbrl:rootSource", "target": "exp:IncomeStatementAbstract", "order": 1 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:Revenue", "order": 1 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:CostOfSales", "order": 2 },
        { "source": "exp:IncomeStatementAbstract", "target": "exp:GrossProfit", "order": 3 }
    ]

10.3.3 Network object constraints

The relationships set MUST NOT contain duplicate relationships (oimte:duplicateItemsInSet). A relationship object is considered a duplicate of another if all of its properties (source, target, relationshipTypeName, order, and any additional properties) have identical values to those of the other relationship object.

The root source QName MUST NOT be referenced by any object other than a relationship object source (oimte:invalidRootSourceReference).

Every compiled network object MUST define a root source if a set of relationship objects is defined (oimte:missingRootSource)

10.3.4 Ordering

The order of the relationships in a network object is determined by the order property on the relationship object. If no order is defined then it defaults to the order of the relationship objects as they appear in the list. See Section 10.4 for the full definition of the order property.

10.4 Relationship object

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.

The relationship object has an object type QName of xbrl:relationshipObject.

The source and target of a relationship object can reference any object with a QName.

The relationship object can be used in an importing model to extend relationships defined in a base taxonomy. When the cube object, domain network object, or network object has the extends property that references a QName of a base object the defined relationship objects are merged with the relationship objects in the extending object.

10.4.1 Relationship object properties

source (model object reference / string)
(required) Identifies the source model object QName or SQName reference of the relationship type.
target (model object reference / string)
(required) Identifies the target model object QName or SQName reference of the relationship type.
order (xs:decimal / number)
(optional) 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 (non-empty set of xbrl:propertyObject objects / array)
(optional) A set of property objects that are permitted by the allowedLinkProperties attribute of the relationship type object. The relationship type is defined using the relationshipTypeName attribute of the Network object.

10.4.2 Relationship object constraints

Relationship object constraints are dependent on the relationship type object used in the relationship. The relationship type object defines the constraints on the relationship object.

The source of a relationship (which is not xbrl:rootSource) MUST be an object type that matches one of the objects in the sourceObjects property of the relationship type object. If the sourceObjects property is not defined then any source QName is allowed. (oimte:invalidRelationshipSourceObject)

The target of a relationship (which does not have a source of xbrl:rootSource) MUST be an object type that matches one of the objects in the targetObjects property of the relationship type object. If the targetObjects property is not defined then any target QName is allowed. (oimte:invalidRelationshipTargetObject)

The relationship properties MUST be a set of property QNames that are defined in the allowedLinkProperties property of the relationship type object. If the allowedLinkProperties property is not defined then any relationship property is allowed. (oimte:disallowedObjectProperty)

The relationship properties MUST include the QName property of any property defined for the requiredLinkProperties property of the relationship type object. (oimte:missingRequiredRelationshipProperty)

The constraints on domain relationships are defined as part of the domain network object. The relationship type object is not used in domain relationships.

The relationship objects in a network object MUST define directed acyclic graph(s) (DAG). Cycles in the relationship graph MUST raise an error. (oimte:networkCyclic)

The cycles property of the relationship type object overrides the default DAG requirement: if cycles: any, cycles are permitted; if cycles: undirected, undirected cycles are allowed; if cycles: none, any cycle (directed or undirected) raises oimte:networkCyclic

The cycles: any setting on a relationship type permits genuine multi-node cycles, not self-loops; self-loops are prohibited regardless of the cycles value.

11 Structural types

11.1 Datatype object

The datatype object defines custom datatypes.

The datatype object has an object type QName of xbrl:datatypeObject.

11.1.1 XML datatypes

The taxonomy model uses the XML Schema datatypes system for defining the datatype of values. The built-in XML Schema datatypes are used directly by referencing the QName of the datatype such as xs:string or xs:decimal.

A numeric datatype is a datatype that is derived from xs:decimal, xs:double, or xs:float.

A non-numeric datatype is a datatype that is not a numeric datatype.

11.1.2 Built-in datatypes

Built-in datatypes are datatypes defined by this specification that processors MUST recognise without those types being explicitly declared as a datatype object in the resolved model. Built-in datatypes are identified by QNames in the xbrlr: namespace.

The complete normative list of built-in datatypes defined by this specification — including each type's QName, base datatype, and value space constraints — is defined in Built-in datatypes model.

A value MUST conform to the lexical and value space of the built-in datatype referenced by the dataType property of the associated object. If a value does not conform to the referenced built-in datatype, a processor MUST raise an error (oimte:factValueDataTypeMismatch).

11.1.3 Defined datatypes

The taxonomy object includes a datatype object that allows for defining of datatypes.

11.1.4 Datatype object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the datatype object.
baseType (xbrl:dataTypeObject reference / string)
(required) The base datatype QName that references the base datatype the datatype is based on.

enumeration (non-empty set of simple types / array)
(optional) Defines a set of enumerated values of the datatype if applicable. Applies only to simple types.

openEnumeration (xs:boolean / boolean)
(optional) 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. The enumeration set can be empty even when this is true meaning all values of the base datatype are allowed.

minInclusive : (xs:decimal / number)
(optional) Defines a decimal value to indicate a min inclusive cardinal value for a type. Only applies to types based on float, double and decimal.

maxInclusive : (xs:decimal / number)
(optional) Defines a decimal value to indicate a max inclusive cardinal value for a type. Only applies to types based on float, double and decimal.
minExclusive : (xs:decimal / number)
(optional) Defines a decimal value to indicate a min exclusive cardinal value for a type. Only applies to types based on float, double and decimal.
maxExclusive: (xs:decimal / number)
(optional) Defines a decimal value to indicate a max exclusive cardinal value for a type. Only applies to types based on float, double and decimal.
totalDigits : (xs:nonNegativeInteger, number)
(optional) An integer defining the maximum number of digits of a value. Only applies to types based on xs:float, xs:double and xs:decimal.
fractionDigits : (xs:nonNegativeInteger, number)
(optional) An integer defining the maximum number of digits to the right of the decimal place. Only applies to types based on float, double and decimal.
length : (xs:nonNegativeInteger, number)
(optional) An integer defining the length of a string value.
minLength : (xs:nonNegativeInteger, number)
(optional) An integer defining the minimum length of a string value.
maxLength : (xs:nonNegativeInteger, number)
(optional) An integer defining the maximum length of a string value.
whiteSpace : (xs:string / string)
(optional) Defines a string one of preserve, replace or collapse.

patterns : (non-empty set of xs:string / array)
(optional) A set of patterns constraining the allowed values. For each pattern, matching proceeds according to XML Schema, as if the patterns were specified in xs:pattern elements.
unitType: (xbrl:unitTypeObject reference / object)
(optional) Defines a unit type object that describes the datatype objects that comprise the defined datatype. For example, xbrlr:flow is comprised of datatypes of xbrlr:volume and xbrlr:time.

checksumAlgorithm (xbrl:memberObject reference / string)
(optional) 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.

allowedObjects (non-empty set of object type QName references with a datatype property / array)
(optional) 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. If the allowedObjects property includes an object other than these the error oimte:objectHasNoDatatype MUST be raised.

The enumeration, patterns, length, minLength, minInclusive, maxInclusive, minExclusive, maxExclusive, totalDigits and fractionDigits properties are referred to as XML Schema facet properties. XML Schema facet properties map to XML Schema facets as follows:

The following example defines a custom numeric datatype restricting values to positive decimals with at most 18 digits and 2 decimal places:

{
    "name": "exp:PositiveMonetary",
    "baseType": "xs:decimal",
    "minExclusive": 0,
    "totalDigits": 18,
    "fractionDigits": 2
}

A string datatype with a closed enumeration of reporting basis values:

{
    "name": "exp:ReportingBasis",
    "baseType": "xs:string",
    "enumeration": ["IFRS", "US-GAAP", "Local-GAAP"],
    "openEnumeration": false
}

11.1.5 Defining a checksum

In financial reporting checksums are commonly used to support the correct entry of data for identifiers such as a Legal Entity Identifier (LEI), an International Securities Identification Number (ISIN), or a Bank Identifier Code (IBAN). The specification defines a model defined domain class object that allows different checksum algorithms to be identified in a standard way. This checksum class is called xbrl:checksumAlgorithmDomainClass. Any members in this class are a checksum.

An implied object can be defined that uses a checksum to validate that the local name of the implied object is valid against a checksum.

The following example defines an implied object that uses a checksum to validate the local name of the implied object. The implied object in this case is defined as a Legal Entity Identifier (LEI) defined by the ISO 17442 standard for the LEI.

"impliedObjects": [
            {
                "name": "xbrl:LegalEntityIdentifier",
                "namespace" : "http://standards.iso.org/iso/17442",
                "domainClass": "xbrl:entityDomain",
                "objectType": "xbrl:entityObject",
                "localNameConstraint": "xbrl:LEICdataType"
            }
        ]

The implied object has a localNameConstraint that must reference a datatype object that is used to validate the local name of the implied object. In this case the datatype is xbrl:LEICdataType.

The datatype below includes the checksumAlgorithm property that references a member object that represents the algorithm that is used to validate the local name of the implied object.

 "dataTypes": [
            {
                "name": "xbrl:LEICdataType",
                "baseType": "xs:string",
                "checksumAlgorithm": "xbrl:iso7064-Mod-97-10"
            }
]

The algorithm xbrl:iso7064-Mod-97-10 is a member belonging to the xbrl:checksumAlgorithmDomainClass domain class.

"members" : [
    {
        "name": "xbrl:iso7064-Mod-97-10",
        "domainClasses": ["xbrl:checksumAlgorithmDomainClass"]
    }
]

The xbrl:checksumAlgorithmDomainClass domain class is defined in the base model.

"domainClasses" :[
            {
                "name": "xbrl:checksumAlgorithmDomainClass",
                "allowedDomainItem": "xbrl:memberObject"
            }
]

11.1.6 Datatype object constraints

Any facets specified by XML Schema facet properties MUST satisfy the relevant Schema Component Constraints specified for the facet including the Valid Restriction constraints, defined in XML Schema Part 2 §4.3 Constraining Facets (oimte:illegalConstraint).

If the allowedObjects property is present then the datatype can only be used with the specified object types. If a datatype is used with an object that is not included in the allowedObjects set then the processor MUST raise an error (oimte:disallowedObjectDataType).

11.2 Collection type object

The collection type object defines the characteristics of a collection in the taxonomy model. Each collection type object is identified by a QName name property and specifies which value types are allowed, whether values must be unique, and whether order is significant. This object can be used to define lists and sets.

The collection type object has an object type QName of xbrl:collectionTypeObject.

Collection types MUST not reference other collection types in dataType property, preventing nested collections (oimte:nestedCollection).

11.2.1 Collection type object properties

name (xs:QName / string)
(required) The QName that uniquely identifies the collection type object within the taxonomy model.
dataType (xbrl:datatypeObject reference / string)
(required) Defines the datatype object reference that can be included in the collection. The datatype is defined using the QName of the dataType object.
uniqueValues (xs:boolean / boolean)
(optional) Indicates if the values in the collection must be unique. If true, all values in the collection must be unique. If false, values can be duplicated. Defaults to true if not provided.
orderedValues (xs:boolean / boolean)
(optional) Indicates if the values in the collection are ordered. If true, the order of the values in the collection is semantically significant. If false, the order of the values in the collection is not significant. Defaults to false if not provided. Two ordered collections with the same values in different orders are not equal.
maxItems (xs:nonNegativeInteger / number)
(optional) Defines the maximum number of items that can be included in the collection.
minItems (xs:nonNegativeInteger / number)
(optional) Defines the minimum number of items that can be included in the collection.

11.2.2 Collection type object delimiters

For JSON formatted models the collection delimiter is a , (comma). For XML formatted models the collection delimiter is a whitespace character.

The example shows a collection type object definition for a QName set type that is a collection of unique unordered QName values.

"collectionTypes": [
            {
                "name": "exp:myCollection",
                    "dataType" :"xs:QName",
                    "uniqueValues":true,
                    "orderedValues":false,
                    "minItems":1
                }
        ]

11.2.3 Collection type constraints

The maxItems property MUST be greater than or equal to the minItems property if both are provided. If this constraint is violated processors MUST raise an error (oimte:invalidCollectionType).

If the number of items in a collection is not within the range defined by the minItems and maxItems properties the processor MUST raise an error (oimte:invalidNumberOfItemsInCollection).

If the uniqueValues property of the collection type object is true and the collection contains duplicate values the processor MUST raise an error (oimte:duplicateItemsInCollection).

11.3 Unit type object

The unit type object associates the datatypes used by a unit with a base datatype. This allows validating that units are used with an appropriate datatype when a fact's xbrl:unit dimension value consists of two or more units.

The unit type object has an object type QName of xbrl:unitTypeObject.

11.3.1 Unit type object properties

dataTypeNumerator: (xbrl:dataTypeObject reference / string)
(optional) Defines the numerator datatype of the datatype.
dataTypeDenominator: (xbrl:dataTypeObject reference / string)
(optional) Defines the denominator datatype used by a unit used to define a value of the datatype.
dataTypeMultiplier: (xbrl:dataTypeObject reference / string)
(optional) Defines a multiplier datatype used by a unit used to define a value of the datatype.

The following shows using multiplication datatypes comprising the volume and area unit types. The volume datatype is defined as having a numerator of length datatype and a multiplier of area datatype, which means that a fact with a datatype of volume could have a unit of meters * square meters or a unit of area could have a unit of feet * feet.

"dataTypes": [
            {
                "name": "xbrlr:volume",
                "baseType": "xs:decimal",
                "unitType": {
                    "dataTypeNumerator": "xbrlr:length",
                    "dataTypeMultiplier": "xbrlr:area"
                }
            },
            {
                "name": "xbrlr:area",
                "baseType": "xs:decimal",
                "unitType": {
                    "dataTypeNumerator": "xbrlr:length",
                    "dataTypeMultiplier": "xbrlr:length"
                }
            },
            {
                "name": "xbrlr:length",
                "baseType": "xs:decimal"
            }
        ]

For units represented using division the possible units of a datatype can be derived, using the Unit type object. For example, the speed datatype is defined as having a numerator of length and a denominator of time, which means that a fact with a datatype of speed could have a unit of meters per second or feet per hour.

"dataTypes": [
            {
                "name": "xbrlr:speed",
                "baseType": "xs:decimal",
                "unitType": {
                    "dataTypeNumerator": "xbrlr:length",
                    "dataTypeDenominator": "xbrlr:time",
                    "dataTypeMultiplier": null
                }
            },
            {
                "name": "xbrlr:length",
                "baseType": "xs:decimal"
            },
            {
                "name": "xbrlr:time",
                "baseType": "xs:decimal"
            }
        ]

11.4 Relationship type object

The relationship type object defines a relationship type that links two objects within a taxonomy model. In the XBRL 2.1 specification this is called an arcrole.

The relationship type object has an object type QName of xbrl:relationshipTypeObject.

11.4.1 Relationship type object properties

The relationship type object has the following properties:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the relationship type object.
uri (xs:anyURI / string)
(optional) The URI of the relationship type for historical and backward compatibility purposes.
cycles (xs:string / string)
(optional) 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 (non-empty set of xbrl:propertyTypeObject objects / array)
(optional) 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 (non-empty set of xbrl:propertyTypeObject objects / array)
(optional) 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 (non-empty set of object type QName references / array)
(optional) 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 (non-empty set of object type QName references / array)
(optional) 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 (non-empty set of xbrl:relationshipConstraintObject objects / array)
(optional) A set of relationshipConstraint objects that define the allowable properties of source, target and links comprising the relationship. Each constraint is defined as a relationshipConstraint object. Separate relationshipConstraint objects are considered to be an OR.

The following example defines a parent-child relationship type that permits the xbrl:preferredLabel property on relationship links and disallows cycles:

{
    "name": "xbrl:parent-child",
    "cycles": "none",
    "sourceObjects": ["xbrl:conceptObject", "xbrl:headingObject"],
    "targetObjects": ["xbrl:conceptObject", "xbrl:headingObject"],
    "allowedLinkProperties": ["xbrl:preferredLabel"]
}

11.4.2 Relationship type object constraints

A QName defined in the requiredLinkProperties set MUST be included in the allowedLinkProperties set of the relationship type objects (oimte:requiredPropertyNotAllowed). If the allowedLinkProperties set is not defined this error is not raised.

11.5 Relationship constraints object

The relationshipConstraint object defines the constraints on a relationship type. The constraints are defined using the OIM formula expression language.

A relationship constraint expression is a boolean logic statement expressed as a formula expression that specifies the conditions under which a relationship between two objects (the source and the target) is considered valid.

Relationship constraint expressions are static constraints that reference properties of model objects only. They are evaluated during model compilation and do not reference fact data or dynamic values. [[PW: where is the defintion of what they can and can't reference.]]

11.5.1 Relationship constraints object properties

The relationshipConstraint object has the following properties:

constraint (xs:string / string)
(required) The constraint is a formula expression that defines the constraint on the relationship type. The constraint is defined using the OIM formula expression language.

11.6 Property type object

The property type object defines additional properties of an object defined in a taxonomy. The property type object defines a property which is identified with a QName. The value of the property must comply with a defined datatype. A property is classified as either definitional or non-definitional, which controls how it behaves under extension and inheritance.

The property type object has an object type QName of xbrl:propertyTypeObject.

A property type object defines a property as either definitional or non-definitional, controlled by the definitional property (default: false).

A definitional model-defined property is a model-defined property thats definitional property is defined as true.

Definitional properties are intrinsic to an object's semantic identity. If the value of a definitional property changes, the object has a different meaning — it is not merely a revision of the same object. For this reason:

Examples of definitional properties: xbrla:balance (a concept's balance type), dataType (the datatype of a concept). Changing either of these changes the semantic meaning of the concept.

Non-definitional properties are contextual metadata about an object. They provide additional information without changing the object's identity, and may be extended or overridden by an importing model.

Examples of non-definitional properties: deprecation date, creation date. These describe operational facts about the object's lifecycle and do not affect what the object means.

The balance property of a concept object has been defined as a core property type of the specification. This property should only be used with concept objects.

The xbrl:defaultLanguage property has been defined as a core property type of the specification. This property can only be used with the XBRL model object. It specifies the default BCP 47 language applied to text-valued objects within the model when no explicit language is provided. See Default Language property for details.

Properties defined should not reproduce or conflict with the properties of the object. The property object can be used to extend the properties of a concept defined in an imported taxonomy.

11.6.1 Property type object properties

The property type object has the following properties:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the property type object.
dataType (xbrl:dataTypeObject or xbrl:collectionTypeObject reference / string)
(required) Specifies the datatype or collection type of the value. The value MUST be a QName referencing one of:

The QName MUST resolve to a datatype object or collection type object present in the taxonomy model. (see Section 11.1)

If the referenced QName is not a dataType or collection type object, processors MUST raise an error (oimte:invalidObjectType).

enumerationDomain (xbrl:domainNetworkObject reference / string)
(optional) A domain network object that restricts the valid QName values for this property. The value MUST be a QName referencing a domain network object defined in the model. When specified, valid property values MUST be QNames that resolve to members defined in that domain network object.

definitional (xs:boolean / boolean)
(optional) 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 (oimte:conflictingPropertyValues), and the property is inherited by subclass objects through all inheritance mechanisms (see Property inheritance). An extending taxonomy may supply a value for a definitional property that has no value in the base taxonomy, but cannot subsequently change that value. 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 (non-empty set of object type and domain class QName references / array)
(optional) 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 (xs:boolean / boolean)
(optional) 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.

The following example defines the xbrla:balance property type, which may only be applied to concept objects:

{
    "name": "xbrla:balance",
    "dataType": "xbrlr:balanceType",
    "allowedObjects": ["xbrl:conceptObject"],
    "definitional": true,
    "allowedAsLinkProperty": false
}

11.6.2 Property type object constraints

An object that adds a property that is not included in the allowedObjects set MUST raise an error (oimte:disallowedObjectProperty).

The allowedObjects property MUST only include referenceable object types (oimte:invalidAllowedObject).

The same property MUST NOT be included on an object with conflicting values. A property must have consistent values when assigned to an object. (oimte:conflictingPropertyValues).

11.7 Model type object

The model type object defines model types in an XBRL model. This allows model authors to create model types such as a taxonomy model or a report model. A model type defines a set of objects that are required or allowed to be defined in the model.

The model type object has an object type QName of xbrl:modelTypeObject.

The model type object constraints only apply to the objects defined in the module. Model type constraints do not apply to imported taxonomies.

Model type constraints must be applied during XBRL module validation and during compilation. They MUST NOT be applied to objects included from imported taxonomies (importTaxonomy), which are validated at their point of definition.

11.7.1 Model type object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the model type object.
allowedObjects (non-empty set of object type QName references / array)
(optional) Defines a set of object type QNames that may be included in a XBRL Model of the specified type. If no value is provided then the XBRL Model can use any object type. If the allowedObjects property is defined then the XBRL Model can only include objects that are defined in the set. All descendant objects of the defined object type are also allowed. For example if a xbrl:cubeTypeObject is allowed then the xbrl:cubeDimensionObject is also allowed.
allowedProperties (non-empty set of xbrl:propertyTypeObject objects / array)
(optional) Defines a set of property type object QNames that can be used in the XBRL Model of the specified type. If no value is provided then any property can be used in the XBRL Model. If the property is defined then only properties defined in the set can be used in the XBRL Model.
requiredProperties (non-empty set of xbrl:propertyTypeObject objects / array)
(optional) Defines a set of property type object QNames that must be properties of the XBRL Model.

The following example defines a model type that restricts a model to only concept and domain objects, and requires a exp:regulatorCode property on the model:

{
    "name": "exp:RegulatoryModelType",
    "allowedObjects": ["xbrl:conceptObject", "xbrl:domainNetworkObject"],
    "requiredProperties": ["exp:regulatorCode"]
}

11.7.2 Model type object constraints

If a model includes an object type that is not included in the allowedObjects set then the processor MUST raise an error. The error is only raised if the objectType is defined in the same namespace of the xbrlModel that has a documentType of https://xbrl.org/PWD/2026-09-01/module. The allowedObjects constraint does not apply to any objects included in the model using the import taxonomy object. (oimte:disallowedObjectModelType).

If a xbrl:xbrlModelObject does not define a required property defined in the requiredProperties set then the processor MUST raise an error (oimte:missingRequiredModelTypeProperty).

A QName defined in the requiredProperties set MUST be included in the allowedProperties set of the model type object, if allowedProperties are defined (oimte:requiredPropertyNotAllowed). If the allowedProperties set is not defined this error is not raised.

11.8 Label type object

The label type object defines a label type in an XBRL model.

The label type object has an object type QName of xbrl:labelTypeObject.

The label type object defines a QName and URI of the label type. The QName associates labels objects with the label type.

11.8.1 Label type object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the label type object.
uri (xs:anyURI / string)
(optional) A legacy identifier for backward compatibility with XBRL 2.1 label roles. If present, the URI value SHOULD be unique across label type objects in the resolved model.
formatType (xs:string / string)
(required) A hint indicating the content format of label values for this label type. The value MUST be one of the following:

The formatType property is informational metadata that indicates the expected format of label content to consuming applications. Processors are not expected to validate that label values conform to the specified format (e.g., a processor is not expected to validate that an html label contains well-formed HTML, or that a markdown label conforms to any particular Markdown specification). The format type serves as a guide for rendering and processing labels appropriately.

If the value is not one of the above, processors MUST raise (oimte:invalidFormatType).

contentConstraints (object)
(optional) An object defining constraints on label values for this label type. The following properties are supported:
allowedObjects (non-empty set of object type QName references / array)
(optional) 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.

For human-readable display labels, text is usually the preferred formatType. Machine-readable label types may use other format types such as html or markdown.

The following example defines a verbose label type applicable to concept and heading objects:

{
    "name": "xbrl:verboseLabel",
    "formatType": "text",
    "contentConstraints": {
        "maxLength": 20
    },
    "allowedObjects": ["xbrl:conceptObject", "xbrl:headingObject"]
}

11.8.2 Label type object constraints

The allowedObjects set in the label type object MUST contain only object type QNames for referenceable object types (oimte:invalidModelObjectType).

If the same URI is used on more than one label type object the processor MUST raise oimte:duplicateLabelURI.

11.9 Reference type object

The reference type object defines a reference type in an XBRL model. This allows model authors to create custom reference types.

The reference type object has an object type QName of xbrl:referenceTypeObject.

The reference type object defines a QName of the reference type and an optional URI for backward compatibility. The QName associates reference objects with the reference type.

11.9.1 Reference type object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the reference type object.
uri (xs:anyURI / string)
(optional) A URI used to identify the reference type of reference objects for backward compatibility with XBRL 2.1 taxonomies.
allowedObjects (non-empty set of object type QName references / array)
(optional) Defines a set of object type QNames representing the referenceable object types that may use the referenceType.
orderedProperties (non-empty ordered set of xbrl:propertyTypeObject references/ array)
(optional) 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 (non-empty set of xbrl:propertyTypeObject references / array)
(optional) Defines a set of property type object QNames that must be included within a defined reference type.

The following example defines a standard reference type for accounting standard citations, requiring publisher and name on every reference:

{
    "name": "ref:StandardReference",
    "allowedObjects": ["xbrl:conceptObject"],
    "allowedProperties": [
        "ref:Publisher", "ref:Name", "ref:Number",
        "ref:IssueDate", "ref:Chapter", "ref:Paragraph"
    ],
    "requiredProperties": ["ref:Publisher", "ref:Name"]
}

11.9.2 Reference type object constraints

The set of allowedObjects property in the reference type object MUST only include referenceable object types. oimte:invalidAllowedObject

The requiredProperties properties MUST NOT include properties whose property type cannot be used on a reference object (oimte:invalidRequiredProperty).

The orderedProperties property MUST NOT include properties whose property types cannot be used on a reference object (oimte:invalidOrderedProperty).

11.10 Fact locator type object

The fact locator type object defines a named strategy for locating content within a source document. A fact locator type acts as an interface: it specifies the set of properties required and allowed to unambiguously identify a region of a source document from which a fact value is extracted or to which a fact value visually corresponds. The XBRL specification pre-defines one fact locator type per supported document medium; taxonomies may define additional types for emerging formats without changing any other part of the model.

The fact locator type object has an object type QName of xbrl:factLocatorTypeObject.

The fact locator type object defines a distinct addressing strategy as a first-class named object whose required and allowed properties are declared explicitly. Adding support for a new document format or addressing mechanism requires defining a new fact locator type object; no changes are needed to the fact value object, fact value source object, or fact value anchor object.

11.10.1 Fact locator type object properties

The fact locator type object has the following properties:

name (xs:QName / string)
(required) QName that uniquely identifies this locator type.
sourceMediaType (xs:string / string)
(optional) Advisory MIME type or media format hint (e.g. text/html, application/pdf, text/csv). Informational only; does not restrict which source documents a locator of this type may reference.
requiredProperties (non-empty set of xbrl:propertyTypeObject references / array)
(optional) A non-empty set of model-defined property QNames that must be present on any fact value source object using this type. The presence of these properties is required to unambiguously identify a location in a source document. If any of these model-defined properties are missing from a fact value source object using this type, the processor MUST raise an error (oimte:missingRequiredProperty).
allowedProperties (non-empty set of xbrl:propertyTypeObject references / array)
(optional) A non-empty set of model-defined property QNames that MAY be present on any fact value source object using this type. Properties outside this set MUST NOT appear on any fact value source of this type. (oimte:invalidLocatorProperty)

The following example defines a locator type for identifying cells in a spreadsheet, requiring sheet name and cell reference:

{
    "name": "exp:SpreadsheetRef",
    "sourceMediaType": "application/vnd.ms-excel",
    "allowedProperties": [
        "exp:workbookPath", "exp:sheetName", "exp:cellReference"
    ],
    "requiredProperties": ["exp:sheetName", "exp:cellReference"]
}

11.10.2 Fact locator type object constraints

The requiredProperties set MUST be a subset of the allowedProperties set when both are defined. (oimte:requiredPropertyNotAllowed)

The requiredProperties and allowedProperties sets MUST only contain QNames of property type objects defined in the XBRL Model. (oimte:invalidObjectType)

11.11 Cube type object

A cube type object defines a cube type. A cube type defines constraints on the dimensions, relationships and properties that can be included in a cube object of that type.

The cube type object has an object type QName of xbrl:cubeTypeObject.

A cube type object can be used to define a template for cubes that share the same structure. A cube type object can also be used to define a base cube type that other cube types can be based on using the baseCubeType property. This basetype can be used to identify the meaning and purpose of the cube. A cube may for example be used to model transaction details, or event details. The cube type ensures that cubes that collect transactional data, report data or time series data are modeled in a consistent manner across models.

11.11.1 Nested object structure

The diagram below shows the object structure of the cube type object:

11.11.2 Cube type object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the cube type object.
baseCubeType (xbrl:cubeTypeObject reference / string)
(optional) Base cube type that the cube object is based on. Uses the QName of a cube type object. The property only allows restriction rather than expansion of the baseCubeType.

coreDimensions (non-empty set of xbrl:dimensionObject references / array)
(optional) A set of core dimension object QName references that are permitted to be included in the cube. Possible core dimension object references are: xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit, and xbrl:language. If not specified, all core dimensions are allowed. The xbrl:concept dimension is always included and does not need to be listed.

coreDomainClasses (non-empty set of xbrl:domainClassObject references / array)
(optional) A set of QNames that reference core domain class objects that indicate if a domainNetwork property is required or is optional in the definition of the cube dimension object of a cube object. This property is defined as optional in the cube dimension object. The core domainClasses are: xbrl:conceptDomain, xbrl:entityDomain, and xbrl:unitDomain. If coreDomainClasses are not specified, the domainNetwork property remains optional. If coreDomainClasses are specified, then the domainNetwork property in the cube dimension object becomes required for the dimension associated with the domain classes listed. The domainNetwork property MUST specify domain networks of the domainClass if the related dimension property is defined in the cube dimension object. (oimte:missingCoreDomainNameFromCubeDimension).
cubeDimensionConstraints (xbrl:dimensionsAllowedObject / object)
(optional) An object that defines constraints on taxonomy defined dimensions that can be included in the cube. If not defined then any taxonomy defined dimension can be included in the cube. If defined, then the cube can only include taxonomy defined dimensions that satisfy the constraints defined in the object.
cubeNetworkConstraints (xbrl:cubeNetworkObject / object)
(optional) A cube network object defining constraints on the networks that can be associated with cubes of this type using the cubeNetworks property. If not defined then any network can be associated with the cube.

cubeProperties (xbrl:propertiesConstraintObject / object)
(optional) An object that defines constraints on properties that can be associated with the cube.

The example cube type object below represents a cube that:

  1. allows any core dimensions,
  2. allows zero to many taxonomy defined dimension that are typed dimensions with a datatype of xs:token,
  3. requires at least one taxonomy defined dimension that is an explicit dimension,
  4. requires a exp:madeUpRelationship relationship type in the cube networks,
  5. requires a property of exp:secondMadeUpProperty on the cube object.

"cubeTypes": [
            {
                "name": "exp:myCubeType", 
                "cubeDimensionConstraints": {
                    "allowed": [
                        {
                            "type": "typed",
                            "dataType": "xs:token"
                        },
                        {
                            "type": "explicit",
                            "minDimensions": 1
                        }
                    ],
                    "closed": true
                },
                "cubeNetworkConstraints": {
                   "closed": false,
                    "cubeNetworks": [
                        {
                            "relationshipType": "exp:madeUpRelationship",
                            "minNetworks": 1
                        }
                    ]
                },
                "cubeProperties": {
                    "requiredProperties": [
                        "exp:secondMadeUpProperty"
                    ]
                }
            }
        ]

If a cube is defined with a cubeType of exp:myCubeType (the cube type above) then the cube must conform to the constraints defined in exp:myCubeType.

11.11.2.1 Cube type object constraints

The coreDimensions set MUST only contain QNames of core dimensions: xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit, or xbrl:language (oimte:invalidCoreDimension).

The coreDimensions set MUST NOT contain duplicate dimension QNames. oimte:duplicateItemsInSet

The coreDomainClasses set MUST only contain QNames of core domain classes: xbrl:conceptDomain, xbrl:entityDomain, and xbrl:unitDomain (oimte:invalidCoreDomainClass).

When baseCubeType is specified and the base cube type defines coreDimensions, the derived cube type coreDimensions MUST be a subset of the base cube type's coreDimensions (oimte:coreDimensionsExpansion).

11.11.3 Dimensions allowed object

This object defines the taxonomy defined dimensions that are allowed in the cube type using the dimension constraint object. This object is defined with the QName xbrl:dimensionsAllowedObject.

allowed (non-empty set of xbrl:dimensionConstraintObject objects / array)
(optional) A set of dimension constraint objects. (xbrl:dimensionConstraintObject) The dimension constraint defines the constraints on dimensions that can be included in cubes of this type. If baseCubeType is specified and allowed is not defined in the derived cubeType, the derived type inherits the base type's dimension constraints unchanged. Only when allowed is explicitly defined does the derived type override the base type's dimension constraints.
closed (xs:boolean / boolean)
(optional if allowed is absent) If true, only dimensions listed in allowed can be used. If false, other taxonomy defined dimensions are permitted. Defaults to the value of the baseType cube if defined otherwise it is false.

11.11.3.1 Dimensions allowed object constraints.

When baseCubeType is specified and the base cube type has cubeDimensionConstraints.closed set to true, the derived cube type MUST NOT set it to false. oimte:invalidDimensionClosedExpansion

When baseCubeType is specified, the derived cube type MUST NOT add dimensions to cubeDimensionConstraints.allowed that would violate the base cube type's closed constraint. oimte:invalidDimensionAddition

11.11.4 Dimension constraint object

A dimension constraint object in the cubeDimensionConstraints.allowed array can specify constraints on dimensions without referencing a specific dimension. This allows defining rules like "any typed dimension with dataType xs:token" or "any explicit dimension with a minimum count of 1". This object is defined with the QName xbrl:dimensionConstraintObject.

The dimension constraint object has the following properties:

dimensionName (xbrl:dimensionObject reference / string):
(optional) The QName of a taxonomy defined dimension that can be included in the cube. (see Section 5.7). Any QName defined MUST resolve to a taxonomy defined dimension. (oimte:invalidDimensionConstraintDimensionName). If this property is defined then the other properties of the dimension constraint object are ignored and the constraint applies to the specific dimension defined by the QName.
type (xs:string / string)
(optional) Either "typed" or "explicit" to constrain by dimension type
dataType (xbrl:dataTypeObject reference / string)
(optional) Constrains the datatype of typed dimensions (see Section 11.1). This property can only be defined when the type property is absent or the type property has a value of "typed".
maxDimensions (xs:nonNegativeInteger / number)
(optional) Defines the maximum number of dimensions of this type that can be included in the cube. If not defined then any number of dimensions can be defined. If set to zero then no dimensions matching the criteria can be included and any dimension matching the criteria will make the cube invalid.
minDimensions (xs:nonNegativeInteger / number)
(optional) Defines the minimum number of dimensions of this type that can be included in the cube. Defaults to 0 if not defined.
domainClassProperties (xbrl:propertiesConstraintObject / object)
(optional) Defines constraints on dimension properties defining those properties that are allowed.

When multiple dimension constraints are present, each dimension in the cube must satisfy at least one allowed criterion. A criterion with minDimensions greater than zero requires that at least that many dimensions match it. minDimensions and maxDimensions constrain how many dimensions may match a given criterion. When closed is false (the default), dimensions that match no criterion are still permitted; when closed is true, every dimension must match at least one criterion.

11.11.4.1 Dimension constraint object constraints

When a dimension constraint object includes a dimensionName property, it MUST resolve to a valid taxonomy defined dimension object. (oimte:invalidDimensionConstraintDimensionName)

The value of minDimensions cannot be greater than the value of maxDimensions (oimte:invalidCubeConstraints)

When a dimension constraint object includes a dimensionName property, it MUST NOT include another dimensionName property with the same dimension QName value. oimte:duplicateDimension

When a dimension constraint object includes a dataType property, the type property MUST be set to "typed". oimte:invalidDimensionDataTypeProperty

When baseCubeType is specified and a dimension constraint in the base specifies a minDimensions value, the derived cube type MUST NOT reduce that value for the same dimension constraint. oimte:invalidDimensionRequirementRelaxation

When baseCubeType is specified and a dimension constraint in the base specifies a maxDimensions value, the derived cube type MUST NOT increase that value for the same dimension constraint. oimte:invalidDimensionRequirementRelaxation

When baseCubeType is specified and a dimension constraint in the base specifies a dataType, the derived cube type MUST use the same or a more restrictive dataType for that dimension. oimte:invalidDataTypeExpansion

11.11.5 Properties constraint object

The propertiesConstraint object defines the properties that are allowed or required on objects. This object is defined with the QName xbrl:propertiesConstraintObject. The structure of this object is as follows:

requiredProperties (non-empty set of xbrl:propertyTypeObject references / array)
(optional) A set of model-defined property type QNames that must be associated with objects of this type.
allowedProperties (non-empty set of xbrl:propertyTypeObject references / array)
(optional) A set of property type QNames that are permitted on objects of the type. If not specified, any property type defined in the taxonomy can be used. If the allowedProperties property is defined, all properties listed in the requiredProperties property MUST be included in the allowedProperties set. The allowedProperties set can include additional properties that are not listed in requiredProperties. If the allowedProperties property is not defined, any property defined in the taxonomy can be used, including those listed in requiredProperties.

11.11.5.1 Properties constraint object constraints

A QName defined in the requiredProperties set MUST be included in the allowedProperties set of the propertiesConstraint object, if allowedProperties are defined. (oimte:requiredPropertyNotAllowed). If the allowedProperties set is not defined this error is not raised.

Property type QNames in requiredProperties and allowedProperties MUST resolve to valid property type objects. oimte:invalidObjectType

When baseCubeType is specified and the base cube type restricts cubeProperties.allowedProperties, the derived cube type MUST NOT add property types not permitted by the base. oimte:invalidPropertyExpansion

When baseCubeType is specified and the base cube type requires properties in cubeProperties.requiredProperties, the derived cube type MUST NOT exclude those required properties. oimte:invalidPropertyRequirementRelaxation (This can be achieved by reducing the allowed properties on the derived cube to exclude required properties.)

  {
      "name": "test:BaseCubeType",
      "cubeProperties": {
          "allowedProperties": [
              "test:TestPropertyType1", "test:TestPropertyType2", "test:TestPropertyType3"
          ],
          "requiredProperties": [
              "test:TestPropertyType1", "test:TestPropertyType2"
          ]
      }
  },
  {
      "name": "test:DerivedCubeType",
      "baseCubeType": "test:BaseCubeType",
      "cubeProperties": {
          "allowedProperties": [
              "test:TestPropertyType1", "test:TestPropertyType3"
          ]
      }
  }

11.11.6 Cube network object

The cube network object defines the relationships that are allowed or required in a cube. This object allows a model author to restrict the use of cubeNetworks on a specific cube by setting the closed property to false. Only the networks defined in cubeNetworks set can then be defined on cubes of this type. If no cubeNetworks are defined then networks cannot be added to the cube. The cube network object has an object type QName of xbrl:cubeNetworkObject.

cubeNetworks (non-empty set of xbrl:cubeNetworkConstraintObject objects / array)
(optional) A set of cube network constraint objects. (xbrl:cubeNetworkConstraintObject) Defines the constraints on networks that can be associated with cubes of this type. If baseCubeType is specified and cubeNetworks is not defined in the derived cubeType, the derived type inherits the base type's network constraints unchanged. Only when cubeNetworks is explicitly defined does the derived type override the base type's network constraints.
closed (xs:boolean / boolean)
(optional) If true, only networks listed in cubeNetworks can be used. If false, other cube networks are permitted. Defaults to false.

11.11.6.1 Cube network object constraints.

When baseCubeType is specified and the base cube type has cubeNetworkConstraints.closed set to true, the derived cube type MUST NOT set it to false. oimte:invalidNetworkClosedExpansion

When baseCubeType is specified, the derived cube type MUST NOT add networks to cubeNetworkConstraints.cubeNetworks that would violate the base cube type's closed constraint. oimte:invalidRelationshipExpansion

11.11.7 Cube network constraint object

A cubetype allows the networks that can be associated with a cube to be restricted or certain networks to be defined. Cubes without the appropriate networks may not convey the anticipated meaning. If the cubeNetworks property is not defined in the cube type object then any networks can be associated with the cube. If the cube network constraint object is defined then only networks that satisfy the constraints defined in the object can be associated with the cube, unless the closed attribute is set to false.

A cube network constraint object defines specific requirements for networks. The constraint can specify: - The relationship type that must be present - Constraints on the source (by QName, object type, or datatype) - Constraints on the target (by QName, object type, or datatype)

This object is defined with the QName xbrl:cubeNetworkConstraintObject.

relationshipType (xbrl:relationshipTypeObject reference / string)
(required) The relationship type QName.
minNetworks (xs:nonNegativeInteger / number)
(optional) The minimum number of networks of the specified relationship type that must be associated with the cube. Defaults to 0 if not defined.
maxNetworks (xs:nonNegativeInteger / number)
(optional) The maximum number of networks of the specified relationship type that can be associated with the cube. If not defined, there is no upper limit. If set to 0, no networks of the specified relationship type can be associated with the cube.
closed (xs:boolean / boolean)
(optional) If true, only networks that satisfy the specified constraints can be associated with the cube. If false, other networks are permitted. Defaults to the value of the baseType cube if defined otherwise it is false.
source (xbrl:endpointConstraintObject / object)
(optional) Constraints on the relationship source. Use the xbrl:endpointConstraintObject to define the constraints on the source of the relationship.
target (xbrl:endpointConstraintObject / object)
(optional) Constraints on the relationship target. Use the xbrl:endpointConstraintObject to define the constraints on the target of the relationship.

The xbrl:endpointConstraintObject defines the constraints on the source or target of a relationship. This object is defined with the QName xbrl:endpointConstraintObject. This object has the following properties:

qname (xs:QName / string)
(optional) Specific source or target QName.
objectType (xs:QName / string)
(optional) Source or target object type QName (e.g., xbrl:conceptObject)
dataType (xbrl:dataTypeObject reference / string)
(optional) Source or target datatype QName. (see Section 11.1)

For example, if defining a transaction type cube, a concept is required that indicates the date of the transaction. All transaction cubes must have this date. Because a transaction could have multiple dates, the model author defining the transaction cube type, specifies that the date of the transaction when aggregated and grouped, the group dimension is the period dimension. A user using a transaction type cube would then have to identify the date in the cube which represents the transaction date and relates it to the period dimension. See below.

{
  "relationshipType": "xbrl:concept-refDimension",
  "minNetworks":1,
  "maxNetworks":1,
  "source": { "dataType": "xs:dateTime" },
  "target": { "qname": "xbrl:period" }
}

The same approach may be used for a product identifier concept in a transaction record. The model author may be required to link the product concept to a product dimension.

{
  "relationshipType": "xbrl:concept-refDimension",
  "minNetworks":1,
  "maxNetworks":1,
  "source": { "qname": "exp:ProductId" },
  "target": { "qname": "exp:ProductDimension" }
}

If two or more cubeNetwork objects are defined with the same relationship type, only one of the endpoint constraints have to be met by the relationships defined. For example, if two cubeNetwork objects are defined with the same relationship type but different source and target constraints, a relationship of that type only has to satisfy one of the source and target constraint pairs to satisfy the cubeNetwork constraints.

11.11.7.1 Cube network constraint object constraints

When a cubeNetwork constraint object includes a relationshipType property, it MUST resolve to a valid relationship type object. oimte:invalidObjectType

When baseCubeType is specified and the base cube type restricts cubeNetworks, using the closed property of the xbrl:cubeNetworkObject, the derived cube type MUST NOT add allowed relationship types. oimte:invalidRelationshipExpansion

The cubeType 'test:DerivedCubeType' extends 'test:BaseCubeType' and adds relationship type 'test:TestRelationshipType2' to cubeNetworkConstraints.cubeNetworks, but this relationship was not in the base type's closed allowed list (minNetworks equal to 0). Derived cube types cannot expand the set of allowed networks.

{
    "name": "test:BaseCubeType",
    "cubeNetworkConstraints": {
        "closed": true,
        "cubeNetworks": [
            {
                "relationshipType": "test:TestRelationshipType1",
                "minNetworks": 0,
                "source": {
                    "qname": "xbrl:concept"
                },
                "target": {
                    "qname": "xbrl:entity"
                }
            }
        ]
    }
},
{
    "name": "test:DerivedCubeType",
    "baseCubeType": "test:BaseCubeType",
    "cubeNetworkConstraints": {
        "cubeNetworks": [
            {
                "relationshipType": "test:TestRelationshipType2",
                "source": {
                    "qname": "xbrl:concept"
                },
                "target": {
                    "qname": "xbrl:period"
                }
            }
        ]
    }
}

When baseCubeType is specified and a network constraint in the base specifies source or target constraints, the derived cube type MUST use the same or more restrictive constraints. oimte:invalidRelationshipConstraintRelaxation

Restrictive constraints allow additional required relationships to be defined but restrict networks to the same or a narrower set. If no cubeNetwork objects are defined, this is not considered a relaxation of the constraints.

The cubeType 'test:DerivedCubeType' extends 'test:BaseCubeType' and reduces minNetworks for relationship type 'test:TestRelationshipType' from 1 to 0. Derived cube types cannot relax required network constraints.

{
    "name": "test:BaseCubeType",
    "cubeNetworkConstraints": {
            "closed" :true,
            "cubeNetworks": [
            {
                "relationshipType": "test:TestRelationshipType",
                "minNetworks": 1,
                "source": {
                    "qname": "xbrl:concept"
                },
                "target": {
                    "qname": "xbrl:entity"
                }
            }
        ]
    } 
},
{
    "name": "test:DerivedCubeType",
    "baseCubeType": "test:BaseCubeType",
    "cubeNetworkConstraints": {
        "closed" :true,
        "cubeNetworks": [
            {
                "relationshipType": "test:TestRelationshipType",
                "minNetworks": 0,
                "source": {
                    "qname": "xbrl:concept"
                },
                "target": {
                    "qname": "xbrl:entity"
                }
            }
        ]
    }
}

If the derived cube further restricts the base cube by making minNetworks with a value greater than 1, then no error is raised. The source and target must remain the same.

{
    "name": "test:DerivedCubeType",
    "baseCubeType": "test:BaseCubeType",
    "cubeNetworkConstraints": {
        "closed" :true,
        "cubeNetworks": [
            {
                "relationshipType": "test:TestRelationshipType",
                "minNetworks": 2,
                "source": {
                    "qname": "xbrl:concept"
                },
                "target": {
                    "qname": "xbrl:entity"
                }
            }
        ]
    }
}

When baseCubeType is specified, the derived cube type MAY add required relationship types to the xbrl:cubeNetworkConstraintObject but MUST NOT remove relationship types required by the base cube type (oimte:missingRequiredRelationship).

The value of minNetworks cannot be greater than the value of maxNetworks (oimte:invalidCubeConstraints).

In endpoint constraint objects, if qname is specified, it MUST resolve to a QName that exists in the model. oimte:invalidQNameReference

In endpoint constraint objects, if objectType is specified, it MUST resolve to a type of model objects. oimte:invalidObjectType

11.11.8 Cube type validation

A cube object with a cubeType property, that specifies a cube type object which requires a specific property object, then that property must be defined for the cube object. If the property object is not defined the processor must raise an error ( oimte:missingRequiredCubeProperty).

If the cubeType property of a cube object defines domain class properties as requiredProperties, the domain class used for matching dimensions of the xbrl:dimensionConstraintObject on the cube object must have all the required domain class properties defined that are associated with the matching dimensions (oimte:missingRequiredDimensionProperty).

If the cubeDimensions set of a cube object contains a core dimension that is not included in the coreDimensions set of the cubeType defined for the cube, then the processor MUST raise an error (oimte:invalidCubeCoreDimension).

If the cubeDimensions set of a cube object contains a taxonomy defined dimension dimension that does not match the dimension, or (type and datatype) of at least one of the xbrl:dimensionConstraintObject objects in the allowed set of dimensions, for the matching cube type object, then the processor MUST raise an error (oimte:invalidTaxonomyDefinedDimension).

If the cubeNetworks array of a cube object references a relationship where the source.dataType or target.dataType of any of the relationships in the network do not match that of the xbrl:endpointConstraintObject, then the processor MUST raise an error (oimte:invalidCubeNetworkRelationship).

If the cubeNetworks array of a cube object references a relationship where the source.QName or target.QName of any of the relationships in the network do not match that of the xbrl:endpointConstraintObject, then the processor MUST raise an error (oimte:invalidCubeNetworkRelationship).

If the cubeNetworks array of a cube object references a relationship where the source.ObjectType or target.ObjectType of any of the relationships in the network do not match that of the xbrl:endpointConstraintObject, then the processor MUST raise an error (oimte:invalidCubeNetworkRelationship).

12 Visualization elements

12.1 Group tree object

The group tree object defines a hierarchical structure of groups within a model. Unlike group content objects that link groups to networks and cubes, the group tree object organizes the groups themselves into a hierarchical tree structure.

A model can only have one group tree object. The root of the group tree MUST be xbrl:rootSource (oimte:invalidTaxonomyGroupSource).

When a model is imported using an import taxonomy object, the group tree object is imported, unless explicitly excluded using the excludeGroupTree property.

12.1.1 Group tree object properties

The group tree object has the following properties:

name (xs:QName / string)
(required) The QName that uniquely identifies the group tree object. By convention, this is typically the model name with a suffix such as "GroupTree" (e.g., exp:SampleModelGroupTree).
relationships (non-empty set of xbrl:relationshipObject objects / array)
(optional) An set of relationship objects that organize groups into a hierarchical structure. No relationship type object is defined as the group tree object can only include one type of relationship between an xbrlModel/group and a group. The source can be either xbrl:rootSource (for top-level groups) or a group object QName. The target MUST always be a group object QName. The order of relationships is determined using the order property of the relationship object.

The following example organises groups into a two-level hierarchy with the model as root:

{
    "name": "exp:SampleTaxonomyGroupTree",
    "relationships": [
        { "source": "xbrl:rootSource", "target": "exp:FinancialStatementsGroup", "order": 1 },
        { "source": "xbrl:rootSource", "target": "exp:NotesGroup", "order": 2 },
        { "source": "exp:FinancialStatementsGroup", "target": "exp:BalanceSheetGroup", "order": 1 },
        { "source": "exp:FinancialStatementsGroup", "target": "exp:IncomeStatementGroup", "order": 2 }
    ]
}

12.1.2 Group tree object constraints

The relationship source property can be either a xbrl:rootSource QName or a group object QName. (oimte:invalidTaxonomyGroupSource)

All relationship target properties MUST reference group objects only. (oimte:invalidTaxonomyGroupTarget)

The group tree object uses the underlying relationship type xbrl:taxonomy-group which is implied and does not need to be explicitly specified in each relationship.

The group tree object is imported when a taxonomy is imported using an import taxonomy object. When the importObjects property is specified, the group tree object is included.

12.1.3 Group tree import resolution

All relationships comprising the group tree object of a resolved model merge together all group tree objects defined in imported modules including the entry module, unless the group tree object is excluded on import. Ordering of the groups is based on the order property of the relationship object.

12.2 Layout object

The layout section of the document addresses the requirements of the table linkbase functionality defined in the existing XBRL specification. This section of the document attempts to simplify aspects of the specification and keep the underlying functionality.

Reviewers of the document should read the section to identify functionality that exists in current specifications and is currently in use by XBRL users. If reviewers identify any discrepancies or areas for improvement, they should provide feedback accordingly.

The layout object is the container object that defines component objects that define the data layout relative to a model. The layout object defines the layout of data in a report. The layout object can include one or more data tables that define how data is structured in a tabular format. The layout object can include properties that define how multiple tables are joined together and how dimensions are mapped to axes in specific tables.

The layout object has an object type QName of xbrl:layoutObject.

Layout component objects are the objects used to define a model.

The layout component objects are identified in the table below that shows all the possible layout objects that can be used and their associated QNames, and if they are referenceable.

Object Type Object QName Referenceable Description
Layout xbrl:layoutObject true Defines all objects and properties of a layout. (see Section 12.2)
DataTable xbrl:dataTableObject true Defines a two-dimensional structure based on the structure of a cube. (see Section 12.3)
Axis xbrl:axisObject false Defines the dimensions associated with an axis and the labels and order that items appear on the axis. (see Section 12.4)
AxisHeader xbrl:axisHeaderObject false Defines how headers for the table are defined using dimension domains and types. (see Section 12.5)
GridHeader xbrl:gridHeaderObject false Defines how headers are defined in grid layouts (Does not use dimensions and domains). (see Section 12.6)
GridAxis xbrl:gridAxisObject false Defines how dimension pairs are aligned with rows and columns in grid layouts. (see Section 12.7)
AxisItem xbrl:axisItemObject false Defines a single dimension member pair for grid positioning. (see Section 12.8)
AxisGroup xbrl:axisGroupObject false Groups multiple axis items together for organizational purposes in grid layouts. (see Section 12.9)
TablePoint xbrl:tablePointObject false Maps dimension member pairs to specific grid cell coordinates in gridLayout tables. (see Section 12.10)

12.2.1 Layout object properties

A layout object represents all layout objects.

The properties of the layout object are as follows:

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the layout object.
tableConstruction (xs:string / string)
(optional) Specifies how multiple tables in the dataTables array are joined together. Valid values are "topDown" (stacks tables vertically) or "leftRight" (places tables horizontally). This property is used when more than one table is defined in the dataTables array to determine the layout order. If not set the default is topDown.

dataTables (non-empty ordered set of xbrl:dataTableObject objects / array)
(optional) An ordered set of dataTable objects.

12.3 Data table object

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.

The data table can be one of two types. The first is a gridLayout type that uses explicit grid positioning with tablePoints to define the layout of facts in the table. The second is a cubeLayout type that uses traditional cube-based rendering with axes to define how dimensions are mapped to the X, Y and Z axes of the table. The tableType property of the dataTable object defines which type of table is being defined and how the structure of the table is defined.

In a gridLayout format the values appearing in a column do not have to have consistent dimensions for that column. In a cubeLayout the dimensions associated with a column or a row have to be consistent across the entire row or column. In a cubeLayout all the values in a selected column (or row)will have the same number of dimension members, and the dimensions used will be the same across the entire column (or row). In a gridLayout there is no requirement for the dimensions of values in a column or row to be consistent. The dimensions of values in a column or row can vary across the column or row.

In a gridLayout the specification includes objects to associate dimension pairs to specific grid cells. In a cubeLayout the specification includes objects to associate dimensions to specific axes and to define the order of dimensions on the axes.

The data table structure flattens one or more dimensions onto the axis of a table. The data table object defines how each cube dimension is related to the data table axis, the order that dimensions appear and where subtotals appear. The facts that appear in the data table are dictated by the constraints defined on the cube.

For cubes with typed dimensions the order of the typed dimension values is determined based on the typedSort attribute of the cube dimension object. If a typed dimension has no typedSort attribute defined the order is processor specific.

12.3.1 Data table object properties

name (xs:QName / string)
(required) The name is a QName that uniquely identifies the data table object.
tableType (xs:string / string)
(required) Specifies the layout type for the table. Valid values are "gridLayout" (uses explicit grid positioning with tablePoints) or "cubeLayout" (uses traditional cube-based rendering with axes). This property determines how the table structure is interpreted and rendered.
cubeName (xbrl:cubeObject reference / string)
(optional) The cubeName is a QName that identifies the cube associated with the data table. The cube is to used to filter the data available in the dataTable. If no cubeName is provided then all facts that match the dimensions on the xAxis, yAxis and zAxis are included in the dataTable. (see Section 5.9)
xAxis (xbrl:axisObject / object)
(required) An axis object that identifies an ordered set of axis and the behaviour of the dimension when mapped to the X axis of the table.
yAxis (xbrl:axisObject / object)
(required) An axis object that identifies an ordered set of axis and the behaviour of the dimension when mapped to the Y axis of the table.
zAxis (xbrl:axisObject / object)
(optional) An axis object that identifies an ordered set of axis and the behaviour of the dimension when mapped to the Z axis of the table.
tablePoints (non-empty ordered set of xbrl:tablePointObject objects / array)
(optional) Set of tablePoint objects that map dimension member pairs to specific grid cells. Used with gridLayout tableType to define explicit positioning of facts in the table grid. Each tablePoint specifies a row, column, and the dimension-member pairs for that cell. (see Section 12.10)

The following example defines a cube-layout table for a balance sheet with concept on the y-axis (using a presentation network) and period on the x-axis:

{
    "name": "exp:BalanceSheetTable",
    "tableType": "cubeLayout",
    "cubeName": "exp:BalanceSheetCube",
    "yAxis": {
        "axisHeaders": [
            {
                "dimensionName": "xbrl:concept",
                "axisNetwork": "exp:BalanceSheetPresentation",
                "labelType": "xbrl:label",
                "language": "en"
            }
        ]
    },
    "xAxis": {
        "axisHeaders": [
            {
                "dimensionName": "xbrl:period",
                "totalLocation": "end"
            }
        ]
    }
}

12.3.2 Data table object constraints

At least one axis MUST be specified (xAxis, yAxis, or zAxis). A data table can have any combination of these axes.

The same dimension MUST not be defined more than once on a given axis.

The same dimension MUST not be defined on more than one axis.

12.4 Axis Object

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.

12.4.1 Axis object properties

axisHeaders (non-empty ordered set of xbrl:axisHeaderObject objects / array)
(required if gridAxis is not specified) An ordered set of axisHeader objects that define the dimensions and labels for the axis. Each axisHeader object specifies a dimension, its members, and how they are displayed. (see Section 12.5)
gridHeaders (non-empty ordered set of xbrl:gridHeaderObject objects / array)
(optional) An ordered set of gridHeader objects that defines the label for each column or row on a grid.
axisLabelsGroup (object)
(optional) An optional grouping of axis labels with valueArray and/or range specifications. This provides an alternative way to generate axis labels based on explicit values or ranges.
gridAxis (object)
(required if axisHeaders is not specified) Grid axis configuration for aligning dimension pairs with rows and columns in grid layouts. This object is used in gridLayout tables to define how dimensions map to specific grid positions. (see Section 12.7)

12.4.1.1 axisLabelsGroup properties

valueArray (array)
(optional) Array of string values to use as axis labels.
range (object)
(optional) Range specification for generating axis labels based on an xs:integer datatype with the following properties:

A cube-layout axis using a presentation network to determine the concept dimension members displayed on the axis:

{
    "axisHeaders": [
        {
            "dimensionName": "xbrl:concept",
            "axisNetwork": "exp:IncomeStatementPresentation",
            "labelType": "xbrl:label",
            "language": "en"
        }
    ]
}

A grid axis with two explicit period items:

{
    "gridAxis": {
        "axisItems": [
            { "axisId": "C0010", "dimensions": { "xbrl:period": "2024-01-01/2024-12-31" } },
            { "axisId": "C0020", "dimensions": { "xbrl:period": "2023-01-01/2023-12-31" } }
        ]
    }
}

12.4.2 Axis object constraints

Either axisHeaders or gridAxis must be specified. Both properties may be present, but at least one is required.

When axisHeaders is specified, the array must contain at least one axisHeader object.

When axisLabelsGroup is specified with a range, all range properties (dataType, interval, startValue, stopValue, and order) should be provided for proper label generation.

12.5 Axis header object

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. If a label cannot be found or does not exist for a member the member's QName local name is used as the label.

12.5.1 Axis header object properties

dimensionName : (xs:QName / qname)
(required) The name of the dimension for this axis header.
labelType : (xs:QName / qname)
(optional) The label type to use for displaying axis members. If no label type is defined the label defaults to xbrl:label.
language : (xs:string / string)
(optional) Defines the language of the labels using a valid BCP 47 language code. If no language is defined the label defaults to the first xbrl:label language found.

axisMembers : (ordered set / array)
(optional cannot be used with axisNetwork or typedLabel) Ordered set of member QNames to display on this axis.
axisNetwork : (xs:QName / qname)
(optional cannot be used with axisMembers or typedLabel) The QName that defines the hierarchy of axis members. The value can be the QName of a network object or a domain network object.
dimensionOptional : (xs:boolean / boolean)
(optional) Indicates whether the dimension is optional. Defaults to false when absent.
totalLocation : (xs:string / string)
(optional) Specifies where totals are displayed relative to the dimension members. Valid values are "start" or "end". The default value is "end". This can only be defined if dimensionOptional is true.
groupDuplicateLabels : (xs:boolean / boolean)
(optional) Indicates whether duplicate labels are grouped together. Defaults to false when absent.

typedLabel : (object)
(optional cannot be used with axisNetwork or axisMembers) Configuration for typed dimension labels with the following properties:

12.5.2 Axis header object constraints

The language property of the axis header must be a valid BCP 47 language code, if specified. oimte:invalidLanguage.

Either AxisMembers or AxisNetwork are specified to define the members to display on the axis, unless using a typed dimension with typedLabel.

12.6 Grid header object

The grid header object defines the label for each column or row on a grid. A gridHeader object specifies the label for a specific column or row in a grid layout table.

12.6.1 Grid header object properties

label (xs:string / string)
(required) The label to display for this grid row or column. This can be a static string or can reference a label defined in the model.
span (xs:integer / integer)
(optional) The number of columns (for x-axis) or rows (for y-axis) that this header should span. Defaults to 1 if not specified.
rollUpLocation (xs:string / string)
(optional - required if span defined) Specifies where the header label is placed when spanning multiple columns or rows. Valid values are "start", "end" or "none". If a value of none is defined the header label does not have a represented value on the grid. The attribute is required if a span value is defined.
labelLevel (xs:integer / integer)
(optional) The position of this header in the grid. This determines the order of headers when multiple headers are defined. If not specified, the order is determined by the order of the gridHeader objects in the array. Starts at 1 next to the grid coordinate cells if any.

The following example defines a spanning header that groups three quarterly columns under a "Current Year" label, with individual quarter sub-headers:

[
    { "label": "Current Year", "span": 3, "rollUpLocation": "start", "labelLevel": 2 },
    { "label": "Q1", "labelLevel": 1 },
    { "label": "Q2", "labelLevel": 1 },
    { "label": "Q3", "labelLevel": 1 }
]

12.6.2 Grid header object constraints

The gridHeader object MUST only be used with a gridLayout tableType. oimte:invalidGridAxisTableType

The span of a grid header MUST be a positive integer. oimte:invalidGridHeaderSpan

The span MUST NOT be defined where the labelLevel has a value of 1. oimte:invalidGridHeaderSpanLevel

The gridHeader object MUST NOT be defined if the AxisHeader object has been defined, in the same Axis object.

12.7 Grid Axis Object

The grid axis object defines how dimension pairs are aligned with rows and columns in grid layout tables. This object is used with gridLayout tableType to provide explicit control over dimension positioning in the grid.

12.7.1 Grid axis object properties

axisItems (non-empty ordered set of xbrl:axisItemObject objects / array)
(optional) An ordered set of axisItem objects that define individual dimension member pairs for grid positioning. (see Section 12.8)
axisGroups (non-empty ordered set of xbrl:axisGroupObject objects / array)
(optional) An ordered set of axisGroup objects that organize dimension member pairs into logical groupings. (see Section 12.9)

12.8 Axis Item Object

The axis item object defines a single axis item with an identifier and dimension member pairs for grid positioning.

12.8.1 Axis item object properties

axisId (xs:string / string)
(optional) Identifier for this axis item (e.g., "C0030", "R0100"). This identifier references the axis position in the grid.

dimensions (object)
(required) Object mapping dimension QNames to their member values for this axis item. The structure is similar to fact dimensions but does not require xbrl:concept. Properties can include xbrl:concept, xbrl:entity, xbrl:unit, xbrl:period, and any custom dimension QNames. For example:
  "dimensions": {
    "exp:TA": "exp:x112",
    "exp:VG": "exp:x95"
  }

12.9 Axis Group Object

The axis group object groups axis items by dimension and network, specifying which axis IDs belong to this group.

12.9.1 Axis group object properties

dimensionName (xs:QName / string)
(required) The dimension name for this axis group. This dimension QName identifies which dimension the grouped axis items represent.
axisNetwork (xs:QName / string)
(optional) The network or domain QName that defines the structure of axis members in this group. This can reference either a network object or a domain network object that organizes the dimension members. If not provided all members associated with the axis from the cubeName are used (Typed of explicit)
axisIds (ordered set / array)
(optional) Ordered set of axis identifiers (e.g., "R0100", "R0110") that belong to this group. These identifiers correspond to specific positions or items on the axis.
axisStart (xs:integer / integer)
(optional) Integer 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.

12.10 Table Point Object

The table point object maps dimension member pairs to specific grid cell coordinates in gridLayout tables. Each table point specifies a location in the grid and the dimension-member combinations that should appear in that cell.

12.10.1 Table point object properties

gridCoordinates (object)
(required) Grid coordinates identifying the cell location in the table, with the following properties:
dimensions (object)
(required) 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. This allows specifying which dimension-member combinations apply to the cell at the given coordinates.

12.10.2 Table point object constraints

The gridCoordinates must specify at least xAxis and yAxis. oimte:missingGridCoordinates.

Each dimension QName in the dimensions map must correspond to a valid dimension defined in the model. oimte:invalidDimensionInTablePoint.

The following example shows how the dimension pair "exp:TB": "exp:x109" is added to the cell at coordinates (2, 8, 1) in a data table object.

"tablePoints": [
                    {
                        "gridCoordinates" :
                            {
                            "xAxis": 2,
                            "yAxis": 8,
                            "zAxis": 1
                            },
                        "dimensions" : 
                            {
                            "exp:TB": "exp:x109"
                            }
                    }
                ],

If the xAxis is not defined the dimension member pair is applicable to all cells in row 8.

13 Modularisation and extension

This section defines the mechanisms for modularising and extending models, including importing components from other models and defining final model objects that cannot be further extended.

A entry module serves as the entry point for processing. An entry module is the XBRL module that is not imported by any other XBRL module in the model.

An imported model is a model that is imported by another model using the import taxonomy object.

An importing model is a model that imports another model using the import taxonomy object.

13.1 Import taxonomy object

The import taxonomy object defines the XBRL modules and objects that are included in the XBRL Model. The import taxonomy object is the mechanism for importing models and their components to create a XBRL Model. Only XBRL models or modules may be imported if they resolve to a valid XBRL Model. The import taxonomy object allows for the importation of entire XBRL models, sets of objects within models, or sets of objects grouped by their object type.

13.1.1 Import taxonomy properties

The import taxonomy object has the following properties:

xbrlModelName (xbrl:xbrlModelObject reference / string)
(required) The QName of the xbrlModel to import. The model MUST be defined in the importMapping property of the document info object of the importing module. The processor MUST retrieve and process the XBRL module at the specified URL to import the objects defined in the import taxonomy object.
selections (non-empty set of xbrl:structuredSelectStatementObject objects / array)
(optional) 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.
importObjects (non-empty set of model object references / array)
(optional) 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.
importObjectTypes (non-empty set of object type QName references / array)
(optional) 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.
excludeLabels (xs:boolean / boolean)
(optional) 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 (xs:boolean / boolean)
(optional) 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.
excludeGroupTree (xs:boolean / boolean)
(optional) If set to true, the group tree defined in the imported model will be excluded from the XBRL Model. This does NOT exclude the group content objects themselves, only the hierarchical structure. The default value is false.
bundleManifest (xbrl:bundleManifestObject / object)
(optional) A bundle manifest object that provides metadata about a label bundle module or reference bundle module being imported. This property is only applicable when importing a label bundle module (a document with documentType of https://xbrl.org/PWD/2026-09-01/labelBundle) or a reference bundle module (a document with documentType of https://xbrl.org/PWD/2026-09-01/referenceBundle). The bundleManifest is inactive for the purpose of assembling a model — it is used only for informational purposes.

13.1.2 Import taxonomy constraints

The importObjects property MUST include a referenceable object defined in the model (oimte:invalidQNameReference).

The importObjectTypes property MUST include a valid model object type. (oimte:invalidObjectType).

If the selection object defines an objectType property of xbrl:labelObject then the excludeLabels property of the import taxonomy object MUST NOT be true (oimte:conflictingImportProperties).

13.1.3 Select statement

The select statement is defined as a structured select statement object. The selection property is a set of objects that define the selection criteria. Each object in the set represents a selection condition.

The structured select statement defines the object type to be selected and the conditions for filtering the objects. The object type is specified using the objectType property, and the conditions are specified using the where property, which is a set of filter conditions. Each filter condition is an object that specifies the property to be evaluated, the operator to be used for comparison, and the value to compare against.

The property name is treated as an attribute of the object being tested. When the property value is an unprefixed name (e.g. periodType, dataType, nillable), it refers to a native attribute of the object. When the property value is a QName (i.e. it contains a namespace prefix, e.g. xbrla:balance), it refers to an entry in the object's properties array — specifically the value of the entry whose property key equals that QName. In both cases the resolved value is compared against the filter value using the specified operator.

"selections": [
  {
    "objectType": "xbrl:conceptObject",
    "where": [
      { "property": "periodType", "operator": "==", "value": "instant" },
      { "property": "dataType", "operator": "==", "value": "xs:decimal" }
    ]
  }
]

This statement supports importing labels for specific taxonomies, such as xbrl:labelObject, by including the xbrl:labelObject in the objectType property of the selection object.

{
  "objectType": "xbrl:labelObject",
  "where": [
    { "property": "language", "operator": "==", "value": "fr" }
  ]
}

In the structured select statement the logical AND is supported implicitly by listing multiple filter conditions in the where array. All conditions in the array must be satisfied for an object to match (i.e., they are combined with logical AND).

{
  "objectType": "xbrl:conceptObject",
  "where": [
    { "property": "periodType", "operator": "==", "value": "instant" },
    { "property": "xbrla:balance", "operator": "==", "value": "credit" }
  ]
}

Multiple select statements in the selections set are combined with logical OR. An object that matches any of the select statements will be included in the import. For example, the following selection statement would select all concept objects that have a periodType of "instant" and a balance of "credit", as well as any label objects with a language of "fr":

"selections": [
  {   "objectType": "xbrl:conceptObject",
    "where": [
      { "property": "periodType", "operator": "==", "value": "instant" },
      { "property": "xbrla:balance", "operator": "==", "value": "credit" }
    ]
  },
  {
    "objectType": "xbrl:labelObject",
    "where": [
      { "property": "language", "operator": "==", "value": "fr" }
    ]
  }
]

13.1.3.1 Structured format properties

The structured select statement has the following properties:

objectType (xs:QName / string)
(required) The type of the object to be selected. This is a QName that identifies the object type, such as xbrl:conceptObject, xbrl:dimensionObject, etc.
where (non-empty set of filter condition objects / array)
(optional) A set of filter conditions that define the selection criteria. Each condition is an object that specifies the property, operator, and value to be used for filtering the objects.

The where property is a set of objects, where each object represents a filter condition. Each filter condition object has the following properties:

property (xbrl:propertyTypeObject reference or named object property / string)
(required) The name of the property to be used for filtering the objects. This is either a named object property (periodType) or a QName property that identifies the property, such as xbrla:balance. An unprefixed property name refers to the attributes of the object, while prefixed property names (QNames) refer to entries in the object's properties array.

operator (xs:string / string)
(required) The operator to be used for filtering the objects. The operator MUST be one of the following values: ==, !=, in, not in, contains, not contains, >, <, >=, <=. The operator is used to compare the property value with the specified value. The permitted operators depend on the property value type; see Appendix D for normative type-compatibility rules.

value (xs:anyType / string)
(required) The value to be used for filtering the objects. The value can be a string, number, or boolean, depending on the property type. The value is compared with the property value using the specified operator.

13.1.3.2 Selection constraints

If a selection entry references an unrecognized objectType processors MUST raise an error (oimte:invalidSelectionExpression).

If a selection entry specifies a property name not associated with the objectType processors MUST raise an error (oimte:invalidSelectionExpression).

If a selection entry specifies an unrecognized operator processors MUST raise an error (oimte:invalidSelectionExpression).

If a selection entry specifies an operator incompatible with the property value type (see Appendix D), processors MUST raise an error (oimte:invalidSelectionExpression).

The objectType property in the selection object MUST NOT be xbrl:importTaxonomyObject (oimte:invalidReferenceToImportTaxonomyObject).

Ordering operators (>, <, >=, <=) have no defined semantics for QNames and MUST NOT be used to compare properties that resolve to QNames (oimte:invalidSelectionExpression).

Substring operators (contains, not contains) have no meaningful semantics for QNames and MUST NOT be used be used to compare properties that resolve to QNames(oimte:invalidSelectionExpression).

13.1.3.3 Operator Semantics by Property Value Type

The following table describes the available operators for structured select statements and how they operate against different property value types:

Operator String Behavior / Example Number Behavior / Example Boolean Behavior / Example Date Behavior / Example QName Behavior / Example Notes
== "name" == "Cash" (exact match) "value" == 100 "active" == true "date" == "2024-01-01" "dataType" == "xs:decimal" (semantic match) Equality; matches if property equals value. QName equality is semantic (namespace URI + local name), not string equality.
!= "name" != "Cash" "value" != 100 "active" != false "date" != "2024-01-01" "dataType" != "xs:decimal" Inequality; matches if property does not equal value. QName inequality is also semantic.
in "name" in ["Cash","Inventory"] "value" in [100,150,175, 200] N/A "date" in ["2024-01-01","2025-01-01","2024-06-30"] "dataType" in ["xs:decimal","xs:integer"] Matches if property is in the provided set. QName membership uses semantic equality.
not in "name" not in ["Cash","Inventory"] "value" not in [100,200] N/A "date" not in ["2024-01-01","2025-01-01","2024-06-30"] "dataType" not in ["xs:decimal","xs:integer"] Matches if property is not in the provided set. QName membership uses semantic equality.
contains "name" contains "Cash" (substring) N/A N/A N/A N/A String contains substring; only for strings.
not contains "name" not contains "Cash" N/A N/A N/A N/A String does not contain substring; only for strings.
> "name" > "A" (lexical order) "value" > 100 N/A "date" > "2024-01-01" N/A Greater than; lexical for strings, numeric for numbers, chronological for dates.
< "name" < "Z" (lexical order) "value" < 100 N/A "date" < "2024-01-01" N/A Less than; lexical for strings, numeric for numbers, chronological for dates.
>= "name" >= "A" (lexical order) "value" >= 100 N/A "date" >= "2024-01-01" N/A Greater than or equal; as above.
<= "name" <= "Z" (lexical order) "value" <= 100 N/A "date" <= "2024-01-01" N/A Less than or equal; as above.

Notes:

See Appendix D for the normative formal grammar, type-compatibility table, and full list of constraints. If a selection expression violates any of these constraints, processors MUST raise (oimte:invalidSelectionExpression).

QName equality is to be evaluated semantically. Two QNames are equal if and only if they resolve to the same {namespace URI, local name} pair after expanding the prefix using the model's namespaces map. String equality of the serialised prefix:localName representation is insufficient.

13.1.4 XBRL model discovery

Dependency resolution is the process of obtaining all objects that are referenced by QName in an XBRL module. Dependencies MAY be defined in the same XBRL module or a different XBRL module. Where dependencies are defined in a different XBRL module, they MUST be imported by an importTaxonomy object.

The importTaxonomy object defines objects to import into the XBRL Model. When the importObjects or importObjectTypes properties are not defined, all model objects identified by the xbrlModelName property are imported into the XBRL Model. The values of the properties name, frameworkName, version, and modelType are not imported. If the XBRL module identified by xbrlModelName property location contains importTaxonomy objects, the objects in the down stream XBRL modules are included in the XBRL Model. This identifies a "chain" of documents containing objects that are included in the XBRL Model.

The objects included in the model are scoped to each import taxonomy object.

Given an import of two modules where "B" imports "C". "C" defines two concepts "x" and "y", and the "importObjects" property specifies that only "x" is imported. An extension taxonomy "A" is defined that only imports "B". Only the concept "x" is available to the model "A".

If a relationship between "x" and "y" is defined in "A" a reference validation error will occur as "y" is scoped out of the model available to "A".

If "C" defined a relationship object between "x" and "y" called "r" and "B" imported "C" and the "importObjects" property specifies that only "r" is imported, then "y" is available to the model "A" as a referenced object and no validation error will occur.

When the importObjects or importObjectTypes properties are present, the processor MUST fully resolve (scope) the importTaxonomy at each level in the chain of the XBRL module found at the xbrlModelName property. All scoped objects at each level in the chain are available for dependency resolution. Objects not included in an importTaxonomy scope are not available in higher level imports if referenced by objects at a higher level.

A processor MUST fully resolve an imported model — following its own importTaxonomy chain and locating all referenced objects — before the importing model can validate QName references against it. This is because the importing model may depend on objects (e.g., a concept's datatype) that only exist after the imported module's own import chain has been traversed, as illustrated in the diagram below.

Example: selective import with transitive dependency resolution

The following three-file example illustrates depth-first import chain resolution. The entry-point model requests only n:con1 from concepts.json. That concept references a datatype defined in a separate file (types.json) that is imported by concepts.json, not directly by the entry point. The processor must fully resolve the entire chain before the filter is applied, so my:FinancialType is included as a referenced object even though it was never explicitly requested.

entry.json — the entry-point module that selectively imports one concept:

{
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": { "ext": "http://example.com/entry", "n": "http://example.com/concepts" },
    "importMapping": { "n:Concepts": "./concepts.json" },
    "documentNamespacePrefix": "ext"
  },
  "xbrlModel": {
    "name": "ext:EntryModel",
    "importedTaxonomies": [
      {
        "xbrlModelName": "n:Concepts",
        "importObjects": ["n:Revenue"]
      }
    ]
  }
}

concepts.json — defines several concepts and imports its own type library:

{
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": { "n": "http://example.com/concepts", "my": "http://example.com/types" },
    "importMapping": { "my:Types": "./types.json" },
    "documentNamespacePrefix": "n"
  },
  "xbrlModel": {
    "name": "n:Concepts",
    "importedTaxonomies": [{ "xbrlModelName": "my:Types" }],
    "concepts": [
      { "name": "n:Revenue",  "dataType": "my:FinancialType", "periodType": "duration" },
      { "name": "n:Headcount","dataType": "xs:integer",       "periodType": "duration" }
    ]
  }
}

types.json — defines custom datatypes used by the concepts:

{
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": { "my": "http://example.com/types" },
    "documentNamespacePrefix": "my"
  },
  "xbrlModel": {
    "name": "my:Types",
    "dataTypes": [
      { "name": "my:FinancialType", "baseType": "xs:decimal" },
      { "name": "my:RatioType",     "baseType": "xs:decimal" }
    ]
  }
}

The diagrams below show each level of resolution, followed by the final resolved model.

Resolve imported module and apply selection

Resolve nested import from selected module

Resolve dependencies of selected objects

Resolution synthetically restricts imported objects from types

"importMapping": {
      "my:TypesModule": "types.json"
    },
 "importedTaxonomies":[
            {
            "xbrlModelName": "my:TypesModule",
            "importObjects": ["my:FinancialType"]
            }
    ]
"concepts": [
        {
            "name": "n:Revenue",
            "dataType": "my:FinancialType"
        }
    ]

Final Model

"documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/compiled",
    "namespaces": { "ext": "http://example.com/entry", 
                    "n": "http://example.com/concepts",
                    "my": "http://example.com/types" 
                  }
  },
  "xbrlModel": {
    "name": "ext:EntryModel",
    "concepts": [
            {
                "name": "n:Revenue",
                "dataType": "my:FinancialType"
            }
        ],
    "datatypes": [
            {
                "name": "my:FinancialType"
            }
        ]
  }

Resolution steps in order:

  1. The processor encounters importObjects: ["n:Revenue"] and begins loading concepts.json (mapped from QName n:Concepts).
  2. The processor resolves concepts.json and applies the importObjects filter: n:Revenue is selected and n:Headcount is excluded.
  3. The processor resolves the nested import in concepts.json, loading types.json.
  4. From the selected concept n:Revenue, the processor resolves its dataType dependency my:FinancialType; my:RatioType is excluded because it is not in scope.
  5. The final resolved ext:EntryModel includes exactly n:Revenue and my:FinancialType.

Label objects associated with an imported object are always included with the imported object (unless excludeLabels is set to true). Label objects can be defined in a model with a forObject QName that does not exist in the XBRL Model. The documentType of the model must be defined as a module when forObject QNames in the label object do not exist in the model. For an XBRL model where the documentType of the model is compiled the processor MUST return the error oimte:invalidQNameReference for any labels where the forObject does not exist in the model. The importObjectTypes property, can be used to import label objects. This may be done in those cases to side load labels in different languages into the XBRL Model.

Labels associated with objects in a model are excluded from being imported into the XBRL Model if the excludeLabels property is set to true. Labels not associated with any object are also excluded and do not bubble up the resolution chain.

Label objects not associated with any object in the XBRL Model MUST result in the error (oimte:invalidQNameReference).

There is no constraint prohibiting a model from importing another model that creates a cycle of imports. If during XBRL Model discovery a XBRL module imports a XBRL module that has already been imported the import statement is ignored if its properties of the import statement are the same. If it has different importObjects then the additional include objects are included in the XBRL Model.

Unresolved QName references associated with the forObject or forObjects property of label objects, reference objects and group content objects in imported modules do not raise an error or prevent the XBRL module from being imported.

A module of label objects can be defined in French to explain the meaning of concept objects defined in a base model. This "French label module" does not import the base model. It is a standalone bundle of French labels. The base model defining these concepts includes English labels. A French user defining their own model using the base model could import the base model and exclude the base English labels and separately import the French label module. When combined with the base model the French labels would bind with the base model objects.

13.1.4.1 ForObject and ForObjects removal

During |dependency resolution|, processors MUST automatically remove orphaned QName references for labels, references, and groupContents after import processing has completed. If a label's forObject cannot be resolved, the label object is removed. If a group content object's forObject cannot be resolved, the group content object is removed. If a reference object has no remaining forObjects values in the set after removing missing QNames, that reference object is removed.

13.1.5 Specific object handling on import

Label objects associated with an imported object are always included with the imported object (unless excludeLabels is set to true).

Importing a specific group object does not include any group content object associated with that groupName.

The group tree object is imported when a taxonomy is imported using an import taxonomy object. When the importObjects property is specified, the group tree object is included.

13.1.6 Import taxonomy constraints

The QNames defined in the importObjects property MUST be defined in the resolved model identified using the xbrlModelName property (oimte:invalidQNameReference).

The importObjectTypes property MUST only contain QNames of top-level, array-valued model objects that are importable. The following categories of object type MUST NOT appear in importObjectTypes:

Using any of these types in importObjectTypes MUST cause processors to raise (oimte:invalidImportObjectType), except for xbrl:importTaxonomyObject which MUST raise (oimte:invalidReferenceToImportTaxonomyObject).

The xbrlModelName QName looks up the corresponding entry in the importMapping property of the documentInfo object of the importing module, and retrieves the model from that URL. If no importMapping entry exists for the xbrlModelName, or if the model cannot be retrieved from the mapped URL, then an error MUST be raised (oimte:taxonomyNotFound).

If a model's documentType is defined as a https://xbrl.org/PWD/2026-09-01/compiled then the import taxonomy object MUST NOT be defined (oimte:importedTaxonomyDefinedForCompiledTaxonomy).

13.1.7 Prefix mismatch resolution

Implicit prefix resolution is the process of resolving prefix mismatches between an imported model and the importing model's namespaces map. The resolution process re-prefixes all objects from the imported model to use the importing model's alias.

When an imported model uses a prefix that is inconsistent with a prefix already declared in the importing model's namespaces map, the processor first attempts implicit prefix resolution: if the URI bound to the imported prefix is already declared under a different prefix in the importing model's namespaces map, the processor automatically re-prefixes all objects from the imported model to use the importing model's alias. No action by the model author is required in this case.

If the colliding URI is not declared under any prefix in the importing model's namespaces map, the processor MUST raise an error (oimce:multipleURIsForAlias). The model author resolves this by adding the imported URI under a chosen prefix to their namespaces map — implicit resolution then applies automatically on the next compilation.

If the colliding URI is declared under more than one prefix alias in the importing model's namespaces map, making the implicit lookup ambiguous, the processor MUST raise an error (oimce:multipleAliasesForURI). The model author resolves this by removing the duplicate prefix alias from their namespaces map.

The following diagrams illustrate the three prefix mismatch situations.

Situation 1 — Implicit resolution (no error required):

The imported prefix fin: collides with an existing fin: entry in the importing model's namespaces map, but the imported URI (finance.com/finance) is already declared under a different alias (finance:). The processor automatically re-prefixes all objects from the imported model using the existing finance: alias.

Situation 2 — Unresolved collision (oimce:multipleURIsForAlias):

The imported prefix fin: collides with an existing entry, and the imported URI (finance.com/finance) is not declared under any alias in the importing model's namespaces map. The processor cannot resolve the collision and raises an error. The model author must add the URI under a chosen prefix to their namespaces map.

Situation 3 — Ambiguous alias (oimce:multipleAliasesForURI):

The imported prefix fin: collides with an existing entry, and the imported URI (finance.com/finance) is declared under more than one alias (finance1: and finance2:) in the importing model's namespaces map. The implicit lookup is ambiguous and the processor raises an error. The model author must remove the duplicate alias.

13.1.8 Bundle manifest object

The bundle manifest object provides metadata about a label bundle module or reference bundle module being imported. This object is defined in the bundleManifest property of an import taxonomy object and is used to describe the content of a bundle without affecting model assembly. The bundle manifest is inactive for the purpose of assembling a model — it is used only for informational purposes.

13.1.8.1 Bundle manifest properties

The bundle manifest object has the following properties:

language (non-empty set of xs:language / array)
(required) A set of language codes indicating the languages provided by the bundle. Each value MUST be a valid BCP 47 language code (oimte:invalidLanguage). This property allows processors to determine which languages are available in a label bundle without loading the entire bundle.
bundleTypes (non-empty set of xbrl:labelTypeObject or xbrl:referenceTypeObject references / array)
(required) A set of QNames indicating the label or reference types provided by the bundle. Each QName MUST reference a valid label type object or reference type object defined in the model (oimte:invalidObjectType). This property allows processors to determine which label or reference types are available in a bundle without loading the entire bundle.

The following example shows a bundleManifest object in an import taxonomy object:

{
  "xbrlModelName": "fr:FrenchLabels",
  "bundleManifest": {
    "language": ["fr"],
    "bundleTypes": ["xbrl:label", "xbrl:documentation"]
  }
}

In this example, the import declares that the French label bundle provides labels in French for both the standard xbrl:label and xbrl:documentation label types.

13.1.8.2 Bundle manifest constraints

The bundleManifest property MUST only be used when importing a model with a documentType of https://xbrl.org/PWD/2026-09-01/labelBundle or https://xbrl.org/PWD/2026-09-01/referenceBundle (oimte:invalidBundleManifestUsage).

The language property MUST contain at least one language code (oimte:invalidEmptySet).

The bundleTypes property MUST contain at least one label type QName (oimte:invalidEmptySet).

13.2 Final taxonomy object

The final taxonomy object defines a set of object types that cannot be added to by an importing XBRL Model. The final taxonomy object is used to define model objects that are considered to be model final. A final model object indicates that the model objects defined in the final taxonomy object are not to be extended by any importing model. This is used for defining models that are not to be modified by other models.

13.2.1 Final taxonomy properties

The final taxonomy object has the following explicit properties:

finalTaxonomyFlag (xs:boolean / boolean)
(optional) If set to true, indicates that the model is final and cannot be extended by importing taxonomies. The default value is false. No objects can be added to the model except fact objects, footnote objects, and entity objects.
finalObjectTypes (non-empty set of object type QName references / array)
(optional) A set of object type QNames that define the types of objects that are considered final. Only the object types defined in the finalObjectTypes property are considered final. Object types not included in the set can be added by an importing model. (Assuming finalTaxonomyFlag is false). An importing model cannot include object types that are defined in the finalObjectTypes property. Examples of object types include xbrl:conceptObject, xbrl:domainNetworkObject and xbrl:networkObject. Networks used for footnotes are excluded from this restriction.
finalObjects (non-empty set of model object references / array)
(optional) A set of model object QNames that define the specific extensible objects that are considered final. Only the objects defined in the finalObjects property are considered final. Objects not included in the set can be added to by an importing model. (Assuming finalTaxonomyFlag is false). Extensible objects are those objects that can be extended using the extends property such as domain network objects, network objects and reference objects. Networks used for footnotes are excluded from this restriction.
selections (non-empty set of xbrl:structuredSelectStatementObject objects / array)
(optional) Specifies a set of structured select objects that define the objects to be identified as final. Each select statement specifies the objects to be selected from the XBRL Model. Selections that include objects that cannot be extended are ignored.

The following example locks the entire model so no importing model can add or extend any taxonomy objects:

{
    "finalTaxonomyFlag": true
}

The following example selectively locks only concept and member objects while allowing other objects to be extended:

{
    "finalObjectTypes": [
        "xbrl:conceptObject",
        "xbrl:memberObject"
    ]
}

13.2.2 Final taxonomy constraints

If the finalTaxonomyFlag property is set to true, no objects can be added to the model except fact objects, footnote objects and entity objects. (oimte:invalidFinalTaxonomyModification).

If the finalTaxonomyFlag is true, then only one importTaxonomy object is allowed, which cannot have any of the properties that allow for selective importing (i.e., importObjects, importObjectTypes, selections), the entire imported model must be included without modification. A final taxonomy can only import a single, complete model, and cannot be used to aggregate multiple models or selectively import components. (oimte:invalidFinalTaxonomyImport).

If an importing model adds an object of a type defined in the finalObjectTypes property, an error MUST be raised (oimte:invalidFinalTaxonomyObjectType).

If an importing model extends an object defined in the finalObjects property using an extends property, an error MUST be raised (oimte:invalidFinalTaxonomyObject).

When finalTaxonomyFlag is true, the finalObjectTypes, finalObjects, and selections properties are redundant and MUST NOT be present. The flag locks down all object types without qualification. If any of those properties are present alongside finalTaxonomyFlag: true, processors MUST raise the error (oimte:conflictingFinalTaxonomyProperties).

Conversely, when finalTaxonomyFlag is false or absent, then finalObjectTypes, finalObjects, and selections are the operative mechanism for specifying which objects or types are locked.

13.3 Property inheritance

Definitional model-defined properties can be inherited between objects when one object is defined as a class and another object is defined as its subclass.

Model-defined properties can be added to an object using the property object. Model-defined properties of a class object are only inherited by a subclass object when the property type objects definitional property is true. These properties are referrred to as definitional model-defined properties.

.

Inheritance between two objects representing a class and a subclass can be defined in two ways:

  1. Using the xbrl:class-subclass relationship type (see Class subclass relationship) between two objects of the same object type. This relationship type is defined as a component of the specification and its sourceObjects and targetObjects are restricted to concept objects and domain class objects.
  2. Using a base type property when defining a datatype object, a cube object or a domain class object. These are defined using baseType for a datatype object, baseCubeType for a cube object, and baseDomainClass for a domain class object.

The values of definitional model-defined properties of a subclass object MUST match the values of definitional model-defined properties of the class object. Definitional model-defined properties of the subclass will be inherited from the class object if not defined on the subclass object. A subclass object can have additional properties that are not defined by the class object, but it cannot have definitional model-defined properties values that are different than the definitional model-defined properties values of the class object.

Model-defined properties can also be added to an object using the xbrl:propertyValue-object relationship type. This supports adding model-defined properties to objects that are already defined. These properties cannot change an existing property or conflict with inherited properties from a class or conflict with the properties defined for a subclass of the object. Properties added using xbrl:propertyValue-object relationship type are inherited by subclasses of the object.

A xbrl:class-subclass relationship cannot be defined between two objects with conflicting values for the same property. (oimte:conflictingPropertyValues) For dataType objects, conflicting facet values are those that constitute an invalid restriction under XML Schema Part 2 §4.3 Constraining Facets. For example, a derived type MUST NOT specify a maxInclusive value that is greater than the maxInclusive of its base type. See Section 11.1 for the full list of XML Schema facet properties defined by this specification.

13.4 Namespace prefix object

The namespace prefix object records the preferred namespace prefixes for a given namespace URI within the model. It enables tooling and processors to obtain a list of preferred prefixes from a compiled model without requiring access to the source modules that the model was compiled from.

The namespace prefix object has an object type QName of xbrl:namespacePrefixObject.

When compiling a model from multiple modules that contain namespace prefix objects, only the namespace prefix object defined as a component of the entry module is retained in the model.

13.4.1 Namespace prefix object properties

namespace (xs:anyURI / string)
(required) The namespace URI for which preferred prefixes are being declared.
preferredPrefixes (non-empty ordered set of xs:NCName / array)
(required) An ordered set of preferred prefix xs:NCName for the namespace. The first item is the preferred prefix.

The following example declares preferred prefixes for two namespaces:

"namespacePrefixes": [
    {
        "namespace": "https://xbrl.org/PWD/2026-09-01",
        "preferredPrefixes": ["xbrl"]
    },
    {
        "namespace": "https://example.com/taxonomy/PWD/2026-09-01",
        "preferredPrefixes": ["exp", "example"]
    }
]

Each namespace prefix object associates a namespace URI with an ordered set of preferred prefix strings. The first item in the preferredPrefixes collection is the preferred prefix. Entries in the namespacePrefixes array of the entry module MUST have unique namespace values (oimte:repeatedNamespaceDeclaration).

13.5 Implied object

An implied object defines objects that are not explicitly declared in any imported XBRL module but are implicitly available in the model by virtue of their namespace. This allows for the inclusion of objects that are defined outside of the XBRL model.

An implied object can be used to define entities identified by a Legal Entity Identifier (LEI), without requiring explicit declarations of LEI entity objects in the model.

Implied objects can be used to define security identifiers such as ISIN, CUSIP, SEDOL, VALERON, Japanese Security Code (JSE), these can be represented using the appropriate member objects. The table below shows how different identifiers can be defined.

namespace Identifier ObjectType Domain Class
http://standards.iso.org/iso/17442 Legal Entity Identifier (LEI) xbrl:entityObject xbrl:entityDomain
http://standards.iso.org/iso/6166 ISIN xbrl:memberObject xbrlio:isinDomain
http://www.sec.gov/cik CIK xbrl:entityObject xbrlio:cikDomain

13.5.1 Implied object properties

name (xs:QName / string)
(required) The name of the implied object definition. This is a QName that identifies the implied object namespace. The local name of the QName is not used for resolution; only the namespace URI is relevant.
namespace (xs:anyURI / string)
(required) This is 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 implied object definition.
domainClass (xbrl:domainClassObject reference / string)
(required) A reference to a domain class object that the implied object belongs to.
objectType (object type QName reference / string)
(required) The object type QName that the implied object represents. The object type QName is restricted to xbrl:memberObject orxbrl:entityObject.
localNameConstraint (xbrl:dataTypeObject reference / string)
(optional) A reference to a datatype object that defines constraints on the local-name of the implied object.

The following example declares implied objects for Legal Entity Identifiers (LEI) using the ISO 17442 namespace. The localNameConstraint property references a datatype that defines the valid format for LEI codes.

 "impliedObjects": [
            {
                "name": "xbrl:LegalEntityIdentifier",
                "namespace" : "http://standards.iso.org/iso/17442",
                "domainClass": "xbrl:entityDomain",
                "objectType": "xbrl:entityObject",
                "localNameConstraint": "xbrl:LEICdataType"
            }
        ]

13.5.2 Implied object properties

The objectType property of the implied object must be either xbrl:memberObject or xbrl:entityObject (oimte:invalidObjectTypeForImpliedObject).

14 Specification defined objects

Specification defined objects use object types to define types of model objects. The model objects defined in this section are defined in built-in models.

14.1 Relationship types

A complete summary table of specification defined relationship type objects is provided in the appendix: see Relationship types.

14.1.1 Parent child relationship

The parent-child relationship type is intended to describe presentational relationships between objects in models.

The relationship type object representing parent-child relationships is shown below.

{
    "name": "xbrl:parent-child",
    "uri": "http://www.xbrl.org/2003/arcrole/parent-child",
    "cycles" : "none",
    "allowedLinkProperties" : ["xbrl:preferredLabel"]
}

Fully conformant XBRL processors MUST report directed cycles in networks of parent-child relationships. (oimte:networkCyclic)

If a xbrl:preferredLabel property is provided, its value MUST match the QName value of a labelType property on a label object that is associated with the target object of the relationship. oimte:invalidObjectType

XBRL processors MAY use the value of the xbrl:preferredLabel property to select among multiple labels associated with the object. This capability is particularly useful when a concept appears in multiple locations of a XBRL Model. For example, the concept Cash may appear in the balance sheet and as the starting and ending balances in a cash flow statement. Each occurrence of the concept in a set of parent-child relationships MAY use this feature to indicate a different preferred label.

14.1.2 Summation item relationship

Future drafts of this specification will include functionality that provides similar functionality to that provided by Calculations v1.1.

Planned enhancements beyond Calculations v1.1 include:

14.1.3 Class subclass relationship

The class-subclass relationship describes a class and subclass relationship between two objects in a model. The subclass object inherits all the properties of the class object. The explicitly defined properties of both objects must be the same and the objects must be of the same object type.

The relationship type object representing xbrl:class-subclass relationship is shown below.

"relationshipTypes": [
    {
        "name": "xbrl:class-subclass",
        "uri": "http://www.xbrl.org/2003/arcrole/class-subclass",
        "cycles" : "none",
        "sourceObjects" : ["xbrl:conceptObject", "xbrl:domainClassObject"],
        "targetObjects" : ["xbrl:conceptObject", "xbrl:domainClassObject"]
    }
]

The properties inherited by the subclass include the specification defined properties, properties added using the property object and properties assigned using the trait-concept relationship.

There are two mechanisms to associate a property with an object. A property can be added directly to objects using the property object or by assigning a property to a concept object using the trait-concept relationship.

When a property is added to a model object using the property object, the property is inherited by a subclass only when the definitional property of the property type is set to true.

When a property is assigned to a concept object using the trait-concept relationship, the property is inherited by all subclasses of that concept.

The definitional property allows properties to be added to an object that are not inherited by subclasses, while properties assigned using trait-concept relationships are always inherited by subclasses.

An importing model can add new property value assignments (new network relationships) to base objects using the property object and trait-concept relationships, but cannot change or remove existing property value assignments. This allows an importing model to add properties to a base object without modifying the base object, while ensuring that the properties of the base object are not removed by the importing model.

The values of concept object properties for the subclass MUST be a subset of the properties for the superclass (oimte:conflictingPropertyValues).

The defined properties of the subclass MUST be a subset of the class concept (oimte:conflictingPropertyValues).

The xbrl:class-subclass relationship MUST only be defined between objects of the same model component object type (oimte:invalidClassSubclassRelationshipObjectTypes).

The sourceObjects and targetObjects on the xbrl:class-subclass relationship type are constrained to xbrl:conceptObject and xbrl:domainClassObject.

14.1.4 General special relationship

"relationshipTypes": [
    {
        "name": "xbrl:general-special",
        "uri": "http://www.xbrl.org/2003/arcrole/general-special",
        "cycles" : "none",
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:conceptObject"]
    }
]

No cycles are allowed in networks of general-special relationships. Fully conformant XBRL processors MUST detect and signal cycles in networks of general-special relationships.

14.1.5 Taxonomy group relationship

The taxonomy-group relationship is used exclusively by the group tree object to organise groups into a hierarchical structure within a taxonomy. This relationship type allows groups to be arranged in a tree with the taxonomy itself as the root. A taxonomy that does not need a prescribed section ordering omits the groupTree.

The relationship type object representing taxonomy-group relationships is shown below.

"relationshipTypes": [
    {
        "name": "xbrl:taxonomy-group",
        "uri": "https://xbrl.org/PWD/2026-09-01/arcrole/taxonomy-group",
        "cycles" : "none",
        "sourceObjects" : ["xbrl:xbrlModelObject", "xbrl:groupObject"],
        "targetObjects" : ["xbrl:groupObject"]
    }
]

Cycles are not allowed in taxonomy-group relationships. Fully conformant XBRL processors MUST detect and signal cycles in group tree object structures.

The taxonomy-group relationship type is only used within the group tree object and MUST NOT be used in network objects (oimte:taxonomyGroupInNetwork).

The source of a taxonomy-group relationship can be either a XBRL Model object or a group object. oimte:invalidTaxonomyGroupSource

The target of a taxonomy-group relationship MUST be a group object (oimte:invalidTaxonomyGroupTarget).

14.1.6 Property required property relationship

The xbrl:property-requiredProperty relationship type expresses a conditional co-requirement between two property type objects. When this relationship exists from a source property type to a target property type, any object that carries the source property MUST also carry the target property.

This allows model authors to declare, within a network, that the presence of one property implies the mandatory presence of another — without requiring both properties to be unconditionally required for all objects of that type.

The relationship type is defined as:

{
    "name": "xbrl:property-requiredProperty",
    "cycles": "none",
    "sourceObjects": ["xbrl:propertyTypeObject"],
    "targetObjects": ["xbrl:propertyTypeObject"]
}

If an object carries a property whose property type is the source of a xbrl:property-requiredProperty relationship, that object MUST also carry a property whose property type is the target of that relationship (oimte:missingRequiredProperty).

The following example shows a taxonomy that defines two custom property types — exp:deprecatedDate and exp:replacementConcept — and uses xbrl:property-requiredProperty to declare that any object carrying exp:deprecatedDate must also carry exp:replacementConcept. A concept exp:Revenues that sets exp:deprecatedDate without also setting exp:replacementConcept would raise oimte:missingRequiredProperty.

{
    "documentInfo": {
        "documentType": "https://xbrl.org/PWD/2026-09-01/module",
        "namespaces": {
            "exp": "http://example.com/taxonomy",
            "xbrl": "https://xbrl.org/PWD/2026-09-01",
            "xbrlr": "https://xbrl.org/PWD/2026-09-01/report",
            "xs": "http://www.w3.org/2001/XMLSchema"
        },
        "documentNamespacePrefix": "exp"
    },
    "xbrlModel": {
        "name": "exp:ExampleTaxonomy",
        "version": "2026",
        "propertyTypes": [
            {
                "name": "exp:deprecatedDate",
                "dataType": "xs:date",
                "allowedObjects": ["xbrl:conceptObject"]
            },
            {
                "name": "exp:replacementConcept",
                "dataType": "xs:string",
                "allowedObjects": ["xbrl:conceptObject"]
            }
        ],
        "networks": [
            {
                "name": "exp:DeprecationCoRequirements",
                "relationshipTypeName": "xbrl:property-requiredProperty",
                "relationships": [
                    {
                        "source": "exp:deprecatedDate",
                        "target": "exp:replacementConcept"
                    }
                ]
            }
        ],
        "concepts": [
            {
                "name": "exp:Revenues",
                "dataType": "xbrlr:monetary",
                "periodType": "duration",
                "properties": [
                    {
                        "property": "exp:deprecatedDate",
                        "value": "2025-01-01"
                    }
                ]
            }
        ]
    }
}

In this example, exp:Revenues carries exp:deprecatedDate but not exp:replacementConcept. Because of the xbrl:property-requiredProperty relationship, this MUST raise oimte:missingRequiredProperty.

14.1.7 Property value object relationship

The propertyValue-object relationship associates a property value with an object using this relationship. The propertyValue-object relationship allows property values to be added by importing taxonomies. This relationship updates the trait-concept relationship in the XBRL 2.1 specification. The relationship includes the name of the property on the relationship. This relationship can only add properties to objects that can have properties defined.

"relationshipTypes": [
    {
        "name": "xbrl:propertyValue-object",
        "uri": "http://xbrl.org/oim/propertyValue-object",
        "cycles" : "undirected",
        "allowedLinkProperties" : ["xbrl:traitLinkType"],
        "requiredLinkProperties" : ["xbrl:traitLinkType"],
        "sourceObjects" : ["xbrl:memberObject"],
        "targetObjects" : [
                            "xbrl:xbrlModelObject",
                            "xbrl:conceptObject",
                            "xbrl:headingObject",
                            "xbrl:memberObject",
                            "xbrl:dimensionObject",
                            "xbrl:entityObject",
                            "xbrl:networkObject",
                            "xbrl:groupObject",
                            "xbrl:cubeObject",
                            "xbrl:domainNetworkObject",
                            "xbrl:domainClassObject",
                            "xbrl:relationshipObject",
                            "xbrl:labelObject",
                            "xbrl:referenceObject",
                            "xbrl:entityObject",
                            "xbrl:factObject",
                            "xbrl:factSourceObject"
                        ]
    }
]

The propertyValue-object relationship properties for a subclass MUST NOT conflict with the domain specified by the enumerationDomain property of the property type object.

The following example shows the definition of a property type ActivityTypeTrait, the definition of a domain of possible QName values and the network object defining the relationship that assigns the property to the concept object ProceedsFromSaleOfProductiveAssets.

{
    "propertyTypes": [
        {
            "name": "us-gaap-meta:ActivityTypeTrait",
            "dataType": "xs:QName",
            "enumerationDomain":"us-gaap-meta:ActivityTypeDomain",
            "allowedObjects": [
                "xbrl:conceptObject"
            ]
        }
    ],
    "domainNetworks": [
        {
            "name": "us-gaap-meta:ActivityTypeDomain",
            "root": "xbrl:traitDomain",
            "relationships": [
                {
                    "source": "xbrl:traitDomain",
                    "target": "us-gaap-meta:InvestingActivity"
                },
                {
                    "source": "xbrl:traitDomain",
                    "target": "us-gaap-meta:FinancingActivity"
                },
                {
                    "source": "uxbrl:traitDomain",
                    "target": "us-gaap-meta:OperatingActivity"
                }
            ]
        }
    ],
    "networks": [
        {
            "name": "exp:propertyConceptNetwork",
            "relationshipTypeName": "xbrl:propertyValue-object",
            "relationships": [
                {
                    "source": "us-gaap-meta:InvestingActivity",
                    "target": "us-gaap:ProceedsFromSaleOfProductiveAssets",
                    "properties": [
                        {
                            "property" : "xbrl:traitLinkType",
                            "value" : "us-gaap-meta:ActivityTypeTrait"
                        }
                    ]
                }
            ]
        }
    ]
}

The example shows the definition of the property of activity type, the definition of the domain of possible QName values and the network object defining the relationship.

The relationship xbrl:propertyValue-object is equivalent to the following:

{
  "concepts": [
    {
        "name": "us-gaap:ProceedsFromSaleOfProductiveAssets",
        "properties": [
            {
                "name": "us-gaap-meta:ActivityTypeTrait",
                "value": "us-gaap-meta:InvestingActivity"
            }
        ]
    }
  ] 
}

14.1.8 Concept reference dimension relationship

The concept-refDimension relationship associates a concept object with a dimension object. The relationship associates concept object values, such as countries with dimension members when a set of data is grouped by the values associated with the concept object.

"relationshipTypes": [
    {
        "name": "xbrl:concept-refDimension",
        "uri": "http://xbrl.org/oim/concept-refDimension",
        "cycles" : "undirected",
        "allowedLinkProperties" : ["xbrl:referenceCubeName"],
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:dimensionObject"]
    }
]

The concept-refDimension relationship MUST be defined in a network that is referenced by at least one cube object.

The concept source property of the relationship (excluding xbrl:rootSource) MUST be defined in the concept domain used by the cube that is associated with the network object that the relationship is in. i.e. You cannot define this relationship and not have the concept in a cube that uses this relationship. (oimte:missingSourceForForeignKey)

The xbrl:referenceCubeName property can be added to the concept-refDimension relationship to indicate the cube of the reference dimension. When this is provided the processor MUST validate that the reference dimension exists on the cube (oimte:missingRefDimension). If the dimension exists the processor must validate that all fact values using the source concept in the cube exist either as object domain members on the reference dimension or if a typed dimension that at least one fact in the cube is defined with the typed dimension value. (oimte:missingForeignKey). If the xbrl:referenceCubeName is not provided no validation is performed and the relationship is used only for documentation purposes.

When the concept-refDimension relationship references the xbrl:period dimension, the relationship indicates that the value of the concept is a reference to a period duration and the processor MUST validate that all fact values using the source concept in the cube are contained within a period duration defined by facts in the cube. (oimte:invalidPeriodFactValue)

14.1.9 Concept aggDimension relationship

The concept-aggDimension relationship associates a concept object with a dimension object. The relationship describes the aggregation method associated with a dimension if the dimension is not present and how the values associated with the dimension members are aggregated or grouped. For numeric fact values this will be some form of aggregation such as a sum, count, first, average etc. The aggregation that is performed is defined as a property of the relationship.

"relationshipTypes": [
    {
        "name": "xbrl:concept-aggDimension",
        "uri": "http://xbrl.org/oim/concept-aggDimension",
        "cycles" : "none",
        "allowedLinkProperties" : ["xbrl:aggregation"],
        "requiredLinkProperties" : ["xbrl:aggregation"],
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:dimensionObject"]
    }
]

The aggregation property and the datatype limiting the aggregation options is described as follows:

{
"propertyTypes": [
    {
        "name": "xbrl:aggregation",
        "dataType": "xbrlr:aggregationType",
        "allowedObjects": [
            "xbrl:relationshipObject",
            "xbrl:conceptObject",
            "xbrl:dimensionObject"
        ]
    }
],
"dataTypes": [
    {
        "name": "xbrlr:aggregationType",
        "baseType": "xs:string",
        "enumeration": ["sum", "count", "max", "min", "avg", "concat", "median", "first", "last", "stdev"]
    }
 ]
}

The aggregation types are defined in the aggregation type section (see Section 14.2.2):

14.1.10 Fact in fact relationship

The fact-InFact relationship associates a fact object with a fact object that contains the fact. The relationship associates a fact value that is contained within another fact such as a footnote.

"relationshipTypes": [
    {
        "name": "xbrl:fact-inFact",
        "uri": "http://xbrl.org/oim/fact-inFact",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:factObject"],
        "targetObjects" : ["xbrl:factObject"]
    }
]

14.1.11 Fact in footnote relationship

The fact-InFootnote relationship associates a fact object with a footnote object that contains the fact. The relationship associates a fact value that is contained within a footnote object.

"relationshipTypes": [
    {
        "name": "xbrl:fact-inFootnote",
        "uri": "http://xbrl.org/oim/fact-inFootnote",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:factObject"],
        "targetObjects" : ["xbrl:footnoteObject"]
    }
]

14.1.12 Fact explanatory fact relationship

The fact-explanatoryFact relationship associates a fact object with another fact object. The relationship associates a fact value that describes another fact.

"relationshipTypes": [
    {
        "name": "xbrl:fact-explanatoryFact",
        "uri": "http://xbrl.org/oim/fact-explanatoryFact",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:factObject"],
        "targetObjects" : ["xbrl:factObject"]
    }
]

14.1.13 Dependent property relationship

The xbrl:property-dependentProperty relationship type defines a dependency between two property type objects. The source and target of the relationship MUST both be property type objects.

When an object reports the source property, that same object MUST also report the target property. The scope of this requirement is limited to the individual object on which the source property is defined; it does not apply globally to other objects.

This relationship type MAY allow the link property xbrl:propertyValue via allowedLinkProperties. When xbrl:propertyValue is present on a relationship, the target property is required only when the reported value of the source property on that object matches the xbrl:propertyValue specified on the relationship.

If an object violates this dependency, processors MUST raise oimte:missingDependentPropertyType.

"relationshipTypes": [
    {
        "name": "xbrl:property-dependentProperty",
        "uri": "http://xbrl.org/oim/property-dependentProperty",
        "cycles": "none",
        "allowedLinkProperties": ["xbrl:propertyValue"],
        "sourceObjects": ["xbrl:propertyTypeObject"],
        "targetObjects": ["xbrl:propertyTypeObject"]
    }
]

14.2 Datatype objects

The specification uses XML base item simple types to constrain fact values and object property values. XBRL datatypes based on the 2003 XBRL v2.1 specification item types are not used.

Datatypes defined in the dtr-type registry have been moved to the base specification. These types are documented in the xbrlr:TypesTaxonomyModule model (see types.json).

Simple datatypes defined in the XML schema definitions [https://www.w3.org/TR/xmlschema-2/] are documented in the xs:XMLSchemaTypes model (see xs-types.json)

14.2.1 Nil reason type

The nil reason domain defines the nil reason as a domain of members, that can have different labels depending on the language. The domain is defined in the xbrl namespace. The nil reason domain is defined below:

"domainNetworks" : [
    {
        "name": "xbrl:nilReasonType",
        "root": "xbrl:nilReasonDomainClass",
        "relationships": [
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:unknownNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:unavailableNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:withheldNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:immaterialNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:confidentialNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:redactedNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:notApplicableNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:pendingNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:notRequiredNilReason"},
            {"source": "xbrl:nilReasonDomainClass", "target": "xbrl:otherNilReason"}
        ]
    }         
]

The domain can be extended so additional reasons for having a nil can be added using the extends property by referencing the domain.

14.2.2 Aggregation type

The aggregation datatype defines the type of aggregation that is being represented. Possible values are sum, count, max, min, avg, concat, median, first, last, stdev. The aggregation datatype is defined below:

The values represented indicate what type of aggregation was performed rather than specific instructions on how to aggregate a number. For example the aggregation type may be used to indicate that a number of measurements were taken over an hour and the average value was reported for the hour.

"dataTypes": [
    {
        "name": "xbrlr:aggregationType",
        "baseType": "xs:string",
        "enumeration": ["sum", "count", "max", "min", "avg", "concat", "median", "first", "last", "stdev"]
    }
 ]

14.2.3 Report attribute type

The report attribute type defines the type of report attribute that is being represented. Possible values are reportDate, reportFilingDate, reportName, reportingEntity, reportingPeriod, reportIdentifier. THis datatype is used by the reportAttributeProperty to identify concepts that represent these common attributes associated with a report. This allows the concept to be linked to these common attributes without defining the concept that needs to be reported. This flexibility is desirable as the taxonomy creator may want to constrain the values that the concept can have, such as the report name must follow a specific pattern. The report attribute type is defined below:

"dataTypes": [
    {
        "name": "xbrlr:reportAttributeType",
        "baseType": "xs:string",
        "enumeration": ["reportDate", "reportFilingDate", "reportName", "reportingEntity", "reportingPeriod", "reportIdentifier"],
        "openEnumeration": true
    }
 ]

14.3 Core Property type objects

A core property type is a model-defined property type that is defined as part of the built-in model (see Appendix E). Core property types are common across models.

14.3.1 Weight property

xbrl:weight is an xbrlr:weightType link property that specifies the multiplier of 1 or -1 applied to a contributing concept when computing an aggregate in a calculation relationship. It is required on xbrl:summation-item relationships and indicates how the source concept value contributes to the target. A weight of 1 indicates a positive contribution; a weight of -1 indicates a negative (subtracted) contribution.

The xbrl:weight property definition in the base taxonomy is:

{
    "name": "xbrl:weight",
    "dataType": "xbrlr:weightType",
    "definitional": false,
    "allowedObjects": [
        "xbrl:relationshipObject"
    ]
}

The xbrl:weight property is required on xbrl:summation-item relationships. See the Summation item relationship section for the full validation rules governing how xbrl:weight interacts with xbrla:balance and xbrl:reconciliation.

14.3.2 Reconciliation property

xbrl:reconciliation is a xs:boolean link property that specifies whether a contributing concept is included in the reconciliation of an aggregate in a calculation relationship.

The xbrl:reconciliation property definition in the base taxonomy is:

{
    "name": "xbrl:reconciliation",
    "dataType": "xs:boolean",
    "definitional": false,
    "allowedObjects": [
        "xbrl:relationshipObject"
    ]
}

The xbrl:reconciliation property is required on xbrl:summation-item relationships. See the Summation item relationship section for the full validation rules governing how xbrl:reconciliation interacts with xbrla:balance and xbrl:weight.

14.3.3 Preferred Label property

xbrl:preferredLabel is an xs:QName link property that specifies the preferred label for a network or relationship. It determines which label is displayed when multiple labels are available.

The xbrl:preferredLabel property definition in the base taxonomy is:

{
    "name": "xbrl:preferredLabel",
    "dataType": "xs:QName",
    "definitional": false,
    "allowedObjects": [
        "xbrl:relationshipObject", "xbrl:networkObject"
    ]
}

The xbrl:preferredLabel property can be used on the xbrl:parent-child relationships. See the Parent-child relationship section. The xbrl:preferredLabel property can be used on a network object to indicate the preferred label that is applied to the entire network including root items. The xbrl:preferredLabel property defined on relationship objects overrides the xbrl:preferredLabel property used for the network object.

14.3.4 Nil Property

Defines the nil property on a fact object. The property identifies if a fact is nil. The nil property indicates a fact is nil and the reason why it is nil. The nil property defines a fact object value is not disclosed, and the reason why. This can be due to the fact being immaterial, confidential, unknown, or not yet available. A fact with a property of nil does not imply it is zero, however for calculation relationships it is excluded from the calculation. The nil property can only be used with concepts that have a nillable property that is not false. An error MUST be raised if a nil property is added to a fact with a nillable property of false oimte:factWithInvalidNilValue.

   {
        "name": "xbrl:nil",
        "dataType": "xs:QName",
        "enumerationDomain": "xbrl:nilReasonType",
        "definitional": false,
        "allowedObjects": [
            "xbrl:factObject"
        ]
    }

14.3.5 Report Date property

This property identifies the report date of a model, usually a xbrl:report model type. The property is a date value that indicates the report date.

      {
          "name": "xbrl:reportDate",
          "dataType": "xs:dateTime",
          "allowedObjects": ["xbrl:xbrlModelObject"]
      }

14.3.6 Report Filing Date property

This property identifies the report filing date of a model usually a xbrl:report model type. The property is a date value that indicates the report filing date.

    {
        "name": "xbrl:reportFilingDate",
        "dataType": "xs:dateTime",
        "allowedObjects": ["xbrl:xbrlModelObject"]
    }

14.3.7 Fact location property

This property identifies the logical location of facts within the definition of the report. This allows a report creator to define where a fact is located in the report. The value of the property MUST be the QName of a group object.

      {
          "name": "xbrl:factLocation",
          "dataType": "xs:QName",
          "definitional": false,
          "allowedObjects": [
              "xbrl:factObject"
          ]
      }

14.3.8 Report attribute property

This property identifies the concepts in the model that represent common report meta-data. The datatype uses the xbrlr:reportAttributeType datatype to identify the type of report attribute that the concept represents. This is used if report attributes are captured as facts rather than as properties of the model object.

      {
          "name": "xbrl:reportAttribute",
          "dataType": "xbrlr:reportAttributeType",
          "definitional": false,
          "allowedObjects": [
              "xbrl:conceptObject"
          ]
      }

Defines the semantic link property that can be used as a reference property.

      {
          "name": "xbrl:semanticLink",
          "dataType": "xs:anyURI",
          "definitional": true,
          "allowedObjects": [
              "xbrl:referenceObject"
          ]
      }

14.3.10 Default Language property

Defines the default language for text-valued objects (such as footnotes and text-typed facts) within a model. When a text-valued object does not declare an explicit language, processors MAY inherit the language from the xbrl:defaultLanguage property of the enclosing XBRL model object. This property can only be used with model objects (xbrl:xbrlModelObject). The value MUST conform to the xbrl:languageType datatype, which accepts BCP 47 language tags such as "en" or "zh-Hans". Inherited values are not included in the canonicalized output of a model, but may be used by processors to determine the language of text-valued objects that lack an explicit language property.

    {
        "name": "xbrl:defaultLanguage",
        "dataType": "xbrl:languageType",
        "allowedObjects": [
            "xbrl:xbrlModelObject"
        ]
    }

14.3.11 Locator-specific property types

The following locator-specific property types are pre-defined by this specification and are valid only within properties sets on fact value source objects and fact value anchor objects:

Property QName Datatype Description
xbrl:htmlElementId xs:string The HTML id attribute value of the element whose inner text content contributes to the fact value.
xbrl:htmlEscape xs:boolean If true, the value is the escaped representation of markup; otherwise the concatenated descendant text content is used. Defaults to false.
xbrl:htmlDataAttribute xs:string The name of a data-* HTML attribute on an element whose value contributes to the fact value (e.g. data-xbrl-ref).
xbrl:pdfFormField xs:string The field name of a PDF form field whose content contributes to the fact value.
xbrl:pdfPage xs:integer The 1-based page number within the PDF document.
xbrl:pdfMcid xs:string The Marked Content Identifier (MCID) of a PDF content item.
xbrl:pdfElementId xs:string The structure element identifier within the PDF document's logical structure tree.
xbrl:pdfBBox xs:string A page bounding box given as four space-separated numbers x0 y0 x1 y1 in PDF user-space points (origin lower-left), identifying a rectangular region — typically an embedded image such as a chart or graph — that the fact value corresponds to. Used together with xbrl:pdfPage when the content is an image (or otherwise untagged) and therefore has no xbrl:pdfMcid.
xbrl:pdfImageHash xs:string A content hash of an embedded PDF image (e.g. md5:<hex>) identifying the image independently of its placement. Used with, or in place of, xbrl:pdfBBox to locate an image robustly when bounding-box coordinates are unavailable or unstable across PDF regenerations.
xbrl:pdfEscape xs:boolean If true, the value is the escaped representation of PDF content. Defaults to false.
xbrl:tabularPath xs:string A tabular path expression identifying a row, column, or cell in a tabular source (CSV, spreadsheet).

14.4 Fact locator types

The following factLocatorType objects are defined by this specification. Model authors and implementers MAY define additional types for formats not listed here.

QName sourceMediaType Required properties Optional properties
xbrl:htmlElementLocatorType text/html xbrl:htmlElementId xbrl:htmlEscape
xbrl:pdfFormFieldLocatorType application/pdf xbrl:pdfFormField
xbrl:pdfContentLocatorType application/pdf xbrl:pdfPage xbrl:pdfMcid, xbrl:pdfElementId, xbrl:pdfEscape
xbrl:pdfImageLocatorType application/pdf xbrl:pdfPage, xbrl:pdfBBox xbrl:pdfImageHash
xbrl:tabularLocatorType text/csv xbrl:tabularPath

14.5 Cube types

This specification defines three standard cube types. These types enable clear identification of the nature of the reported data, facilitate closer alignment with tabular formats such as CSV, and allow XBRL processors to handle data appropriately based on its type.

The standard XBRL cube types are listed in the table below.

dataset CubeType Concept Domain Required Period Dimension Allowed Unit Dimension Allowed Entity Dimension Allowed Taxonomy Defined Dimension
Report Data * xbrl:reportCube yes yes yes yes yes
Non permitted Data xbrl:negativeCube yes yes yes yes yes
Open Open Cube no yes yes yes yes

14.5.1 Report cube

The report cube defines traditional XBRL cubes. The report cube allows all core dimensions and optionally includes taxonomy defined dimensions.

The cube type object below defines the report cube.

{
    "name": "xbrl:reportCube",
    "coreDimensions": ["xbrl:concept", "xbrl:period", "xbrl:unit", "xbrl:entity","xbrl:language"],
    "coreDomainClasses": ["xbrl:conceptDomain"]
}

14.5.2 Negative cube

A negative cube excludes facts from another cube using the excludeCube property of a cube object . Facts defined by a negative cube are not considered valid facts of a report. A negative cube excludes facts that would otherwise be included in a cube. A negative cube is identified with a cube type of xbrl:negativeCube.

To exclude facts from a cube object using the negative cube the facts must match the dimensional space.

The cube type object below defines the negative cube.

{
        "name": "xbrl:negativeCube"
}

14.5.3 Open cube

An open cube is a cube that has no cube type. An open cube places no constraints on the dimensions that can be used to define a cube.

Facts in an open cube can be queried or referenced by referencing the QName of the open cube.

The concept dimension on an open cube does not have to define a concept domain. The absence of a concept domain will include all concepts within the cube.

The following shows the definition of an open cube in a taxonomy.

"cubes":[
        {
                "name": "exp:MyOpenCube",
                "cubeDimensions": [
                    {
                        "dimension": "xbrl:concept"
                    },
                    {
                        "dimension": "xbrl:period",
                        "optional": true
                    },
                    {
                        "dimension": "xbrl:entity",
                        "optional": true
                    },
                    {
                        "dimension": "xbrl:unit",
                        "optional": true
                    }
                ]
        }
]

Facts defined in a report that have a taxonomy defined dimension will not be included in the cube defined above.

14.6 Label types

The label types defined in the 2003 XBRL v2.1 specification labels continue to be supported and referenced using QNames rather than a URI.

The xbrl:core model defines all label types included in the XBRL v2.1 specification and label types defined in the link role registry. (See Appendix A.6)

14.7 Reference types

The XBRL v2.1 specification references are supported and referenced using QNames. References can be used on any object with a QName. The allowedObjects property can be used to constrain a reference type to a particular object type.

The xbrl:core model defines all reference types included in the XBRL v2.1 specification. (See Appendix A.7)

The xbrl:core model includes all core reference types.

14.7.1 Semantic reference

The semantic reference is added to link to semantic definitions defined as an IRI. The semantic reference can be used on any object, and requires that a semanticLink property identifies the IRI of the object being defined.

"referenceTypes" : [
    {
        "name": "xbrl:semanticRef",
        "requiredProperties" : [
            "xbrl:semanticLink"
        ]
    }
]

To identify that a concept is a birthday the semanticLink value could be https://schema.org/birthDate

"references" : [
    {
        "name" : "exp:BirthDateRef",
        "forObjects": ["exp:DirectorBirthDate", "exp:CEOBirthDate"],
        "referenceType": "xbrl:semanticRef",
        "language": "en",
                "properties": [
                    {
                        "property" : "xbrl:semanticLink",
                        "value" : "https://schema.org/birthDate"
                    }
                ]
    }
]

14.8 Implied objects

14.8.1 Legal Entity Identifier

The lei namespace (http://standards.iso.org/iso/17442) is an implied object namespace. A QName of the form lei:_localname_ resolves to an entity object identified by the Legal Entity Identifier equal to localname. No explicit entity object definition is required in any imported XBRL module.

The implied object definition is as follows:

"impliedObjects": [
    {
        "name": "xbrl:LegalEntityIdentifier",
        "namespace" : "http://standards.iso.org/iso/17442",
        "domainClass": "xbrl:entityDomain",
        "localNameConstraint": "xbrl:LuhnMod-97-10-Checksum"
    }
]

The local name of a lei: QName MUST conform to the syntax and checksum rules defined in ISO 17442. Specifically, it MUST be a 20-character string consisting of exactly 18 alphanumeric characters followed by 2 decimal check digits computed using the Luhn mod-97-10 algorithm. If the local name fails the ISO 17442 checksum, a processor MUST raise oimte:invalidLEILocalName (oimte:invalidLEILocalName).

The Luhn mod-97-10 algorithm (also used in IBAN validation) converts each character of the 20-character LEI to its numeric equivalent (digits 0-9 map directly; letters A-Z map to 10-35), concatenates the resulting digits, and verifies that the resulting integer is congruent to 1 modulo 97. For example, the LEI 529900VVQ4470YJ67K26 is valid because its numeric expansion passes this check. Tools and libraries for LEI validation are widely available.

15 Financial reporting domain defined objects

15.1 Relationship types

15.1.1 Instant inflow relationship

The instant-inflow relationship type is intended to describe the concepts that are durational inflows to instant concepts.

The relationship type object representing instant-inflow relationships is shown below.

"relationshipTypes": [
    {
        "name": "xbrla:instant-inflow",
        "uri": "http://xbrl.org/oim/instant-inflow",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:conceptObject"]
    }
]

Only undirected cycles are allowed in networks of instant-inflow relationships. Fully conformant XBRL processors MUST detect and signal directed cycles in networks of instant-inflow relationships.

The source concept object MUST have a periodType property with a value of instant (oimte:conceptPropertiesInconsistentWithRelationship).

The target concept object MUST have a periodType property with a value of duration (oimte:conceptPropertiesInconsistentWithRelationship).

The target and source concept objects MUST have a xbrla:balance property with the same value if both concepts report a xbrla:balance property (oimte:conceptPropertiesInconsistentWithRelationship).

15.1.2 Instant outflow relationship

The instant-outflow relationship type is intended to describe the concepts that are durational outflows from instant concepts.

The relationship type object representing instant-outflow relationships is shown below.

"relationshipTypes": [
    {
        "name": "xbrla:instant-outflow",
        "uri": "http://xbrl.org/oim/instant-outflow",
        "cycles" : "none",
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:conceptObject"]

    }
]

Only undirected cycles are allowed in networks of instant-outflow relationships. Fully conformant XBRL processors MUST detect and signal directed cycles in networks of instant-outflow relationships.

The source concept object MUST have a periodType property with a value of instant (oimte:conceptPropertiesInconsistentWithRelationship).

The target concept object MUST have a periodType property with a value of duration (oimte:conceptPropertiesInconsistentWithRelationship).

The target and source concept objects MUST have a xbrla:balance property with different values if both concepts report a xbrla:balance property (oimte:conceptPropertiesInconsistentWithRelationship).

15.1.3 Instant accrual relationship

The instant-accrual relationship associates a concept object with a periodType of instant with a conceptObject with a periodType of duration. The instant-accrual relationship defines concepts the relationship between account balance concepts and related accrual concepts.

"relationshipTypes": [
    {
        "name": "xbrla:instant-accrual",
        "uri": "http://xbrl.org/oim/instant-accrual",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:conceptObject"]
    }
]

Only undirected cycles are allowed in networks of instant-accrual relationships. Fully conformant XBRL processors MUST detect and signal directed cycles in networks of instant-accrual relationships.

The source concept object MUST have a periodType property with a value of instant (oimte:conceptPropertiesInconsistentWithRelationship).

The target concept object MUST have a periodType property with a value of duration (oimte:conceptPropertiesInconsistentWithRelationship).

The target and source concept objects MUST have a balance property (oimte:conceptPropertiesInconsistentWithRelationship).

15.1.4 Instant contra relationship

The instant-contra relationship associates a concept with an instant durationPeriod with a corresponding instant durationPeriod concept that is a contra of the source concept. The instant-contra relationship defines the offsetting contra element.

"relationshipTypes": [
    {
        "name": "xbrla:instant-contra",
        "uri": "http://xbrl.org/oim/instant-contra",
        "cycles" : "undirected",
        "sourceObjects" : ["xbrl:conceptObject"],
        "targetObjects" : ["xbrl:conceptObject"]
    }
]

The target and source concept objects MUST have a balance property (oimte:conceptPropertiesInconsistentWithRelationship).

The value of the balance attribute of each concept MUST NOT be the same (oimte:conceptPropertiesInconsistentWithRelationship).

The source concept object and target concept object MUST have a periodType property with a value of instant (oimte:conceptPropertiesInconsistentWithRelationship).

15.2 Datatype objects

15.2.1 Balance type

The balance datatype defines the type for a balance as a string with a value of credit or debit. The balance datatype is defined below:

"dataTypes" : [
    {
        "name": "xbrla:balanceType",
        "baseType": "xs:string",
        "enumeration": ["debit", "credit"]
    }

]

15.3 Property type objects

15.3.1 Balance property

Defines the balance property that can be used to identify the balance of a concept. The balance property indicates if the concept is a debit or credit balance.

{
"propertyTypes": [
    {
        "name": "xbrla:balance",
        "dataType": "xbrla:balanceType",
        "definitional": true,
        "allowedObjects": [
            "xbrl:conceptObject"
        ]
    }
]
}

15.3.2 Interval of measurement property

Indicates the sampling or measurement interval for a time-series domain. The value MUST conform to the xs:duration datatype (e.g. ISO 8601 durations such as PT1H, P1D) The property MAY be added to a domain class object to describe the frequency at which observations are measured or aggregated.

{
  "propertyTypes": [
      {
        "name": "xbrla:intervalOfMeasurement",
        "dataType": "xs:duration",
        "definitional": false,
        "allowedObjects": [
            "xbrl:domainClassObject"
        ]
      }
  ]
}

15.3.2.1 Purpose and semantics

15.3.2.2 Where to use

15.3.2.4 Validation rules for intervalOfMeasurement

15.3.2.5 Example intervalOfMeasurement

Non-normative example

{
  "domainClasses": [
    {
      "name": "exp:TimeSeriesPeakDemandRoot",
      "allowedDomainItem" : "xs:dateTime",
      "properties": [
                  {"property": "xbrla:intervalOfMeasurement","value" : "PT1H"},
                  {"property": "xbrla:timeSeriesType","value" : "Aggregated"},
                  {"property": "xbrl:aggregation","value" : "max"},
                  {"property": "xbrla:intervalConvention","value" : "StartTime"},
                  {"property": "xbrla:completeTimeSeries","value" : true }
              ]
    }
  ]
}

15.3.2.6 Implementation notes

15.3.3 Time series type property

Indicates whether a typed time-series dimension represents raw samples or aggregated values. Allowed values are Raw and Aggregated. The property MUST be included as a property of a typed dimension object when used on a xbrla:timeSeriesCube.

{
  "propertyTypes": [
      {
        "name": "xbrla:timeSeriesType",
        "dataType": "xbrla:timeSeriesDataType",
        "definitional": false,
        "allowedObjects": [
            "xbrl:domainClassObject"
        ]
      }
  ]
}

15.3.3.1 Purpose and semantics

Raw indicates the facts are individual samples taken at the declared intervalOfMeasurement. Aggregated indicates the facts are aggregation results computed over the declared interval (for example hourly maxima or daily sums).

Consumers use this flag to decide whether to treat facts as observations or pre-computed aggregates.

If the property is not defined on a time series dimension the default value is Aggregated.

15.3.3.2 Where to use

15.3.3.3 Validation rules

15.3.3.4 Example timeSeriesType property

Non-normative example (based on exampleTaxonomy.json):

{
  "domainClasses": [
    {
      "name": "exp:TimeSeriesPeakDemandRoot",
      "allowedDomainItem" : "xs:dateTime",
      "properties": [
        {"property": "xbrla:intervalOfMeasurement", "value": "PT1H"},
        {"property": "xbrla:timeSeriesType", "value": "Aggregated"},
        {"property": "xbrl:aggregation", "value": "max"}
      ]
    }
  ]
}

15.3.4 Interval convention property

Indicates how a timestamp associated with a sampled or aggregated time-series value is to be interpreted relative to the declared measurement interval. Possible values are StartTime or EndTime. The property MAY be added to a dimension object used as the typed dimension of a xbrla:timeSeriesCube. If no value is provided the default value is StartTime.

{
  "propertyTypes": [
    {
      "name": "xbrla:intervalConvention",
      "dataType": "xbrla:intervalConventionType",
      "definitional": false,
      "allowedObjects": [
        "xbrl:domainClassObject"
      ]
    }
  ]
}

15.3.4.1 Purpose and semantics

15.3.4.2 Where to use

15.3.4.4 Validation rules

15.3.4.5 Example intervalConvention usage

{
  "domainClasses": [
    {
      "name": "exp:TimeSeriesPeakDemandRoot",
      "allowedDomainItem" : "xs:dateTime",
      "properties": [
        {"property": "xbrla:intervalOfMeasurement", "value": "PT1H"},
        {"property": "xbrla:timeSeriesType", "value": "Aggregated"},
        {"property": "xbrl:aggregation", "value": "max"},
        {"property": "xbrla:intervalConvention", "value": "StartTime"}
      ]
    }
  ]
}

15.3.4.6 Implementation notes

15.3.5 Complete time series property

A boolean property that indicates whether a time-series typed dimension MUST contain a fact for every interval defined by xbrla:intervalOfMeasurement across the applicable reporting span. Defaults to false.

{
  "propertyTypes": [
    {
      "name": "xbrl:completeTimeSeries",
      "dataType": "xs:boolean",
      "definitional": false,
      "allowedObjects": [
        "xbrl:domainClassObject"
      ]
    }
  ]
}

15.3.5.1 Purpose and semantics

15.3.5.2 Where to use

15.3.5.3 Validation rules (processor behaviour)

15.3.5.4 Implementation notes

15.3.6 Excluded intervals (weekends, holidays)

Model authors may need to declare intervals that are intentionally excluded from completeness requirements (for example weekends or public holidays).

The string property xbrl:excludedIntervals excludes intervals from completeness and alignment checks. Recurrence rules based on RFC 5545 RRULE and EXDATE are used to exclude intervals from a time series. - To exclude weekends use: "RRULE:FREQ=WEEKLY;BYDAY=SA,SU"; - T0 exclude holidays use EXDATE;VALUE=DATE:20241225,20251225,20261225,20271225,20281225;

{
  "propertyTypes": [
    {
      "name": "xbrla:excludedIntervals",
      "dataType": "xbrlr:excludedIntervalsSet",
      "definitional": false,
      "allowedObjects": [
        "xbrl:domainClassObject"
      ]
    }
  ]
}

Non-normative example:

{
  "domainClasses": [
    {
      "name": "exp:TimeSeriesPeakDemandRoot",
      "allowedDomainItem" : "xs:dateTime",
      "properties": [
        {"property": "xbrla:intervalOfMeasurement", "value": "PT1H"},
        {"property": "xbrla:timeSeriesType", "value": "Aggregated"},
        {"property": "xbrl:aggregation", "value": "max"},
        {"property": "xbrla:completeTimeSeries", "value": true},
        {"property": "xbrla:excludedIntervals", "value": ["RRULE:FREQ=WEEKLY;BYDAY=SA,SU", "EXDATE;VALUE=DATE:20241225,20251225,20261225"]}
      ]
    }
  ]
}

15.3.6.1 Processor behaviour (mandatory semantics)

15.4 Cube types

This specification defines eight standard cube types. These types enable clear identification of the nature of the reported data, facilitate closer alignment with tabular formats such as CSV, and allow XBRL processors to handle data appropriately based on its type.

The standard cube types are listed in the table below.

dataset CubeType Concept Domain Required Period Dimension Allowed Unit Dimension Allowed Entity Dimension Allowed Taxonomy Defined Dimension
Event xbrla:eventCube yes no no no One event dimension only
Journal entry xbrla:journalCube yes no no no One journal Dimension Only
Event Details xbrla:eventDetailsCube yes no no no Event Details Dimension Only
Reference Data xbrla:referenceCube yes no no no Reference Dimension Only
Time Series Data xbrla:timeSeriesCube yes no yes yes Must have a Timeseries dimension
Position Listing Data xbrla:positionCube yes Instant Only yes yes Must have a Reference Dimension

15.4.1 Event cube

An event cube represents event information. An event captures information that is generated on the occurrence of a specific event. The event cube represents the data associated with an event. One event is distinguished from another event by using an event dimension. The period dimension is not used to distinguish events.

The cube type object below defines the event cube.

{
    "name": "xbrla:eventCube",
    "coreDimensions": ["xbrl:concept"],
    "cubeDimensionConstraints" : {
      "allowed": [
        {
        "type": "typed",
        "dataType": "xs:token",
        "minDimensions" : 1,
        "maxDimensions" : 1
        }
    ],
    "closed" : true
    },
    "cubeNetworkConstraints": {
        "closed": false,
        "cubeNetworks": [
              {
                "relationshipType": "xbrl:concept-refDimension",
                "minNetworks" : 1,
                "source": {
                    "dataType": "xs:dateTime"
                },
                "target": {
                    "qname": "xbrl:period"
                }
            }
        ]
    }
}

The cubeType definition for an event cube specifies that an event cube must not have a period, entity or unit dimension and must have only one typed taxonomy defined dimension. The typed dimension represents the event key. The typed dimension is defined as a token to enure a unique event key. A dateTime type as multiple events can happen at the same time.

.

.

The event cube must define a network object that defines a date concept as the source and the period dimension as the target using the xbrl:concept-refDimension relationship. This relationship identifies which field in the event cube represents the dateTime of the event.

15.4.2 Event details cube

An event details cube allows the capturing of additional one to many details about an event.

The cube type object below defines the eventDetails cube.

{
    "name": "xbrla:eventDetailsCube",
    "coreDimensions": ["xbrl:concept"],
    "cubeDimensionConstraints": {
        "allowed": [
            {
                "type": "typed",
                "minDimensions": 1
            }
        ],
        "closed": true
    },
    "cubeNetworkConstraints": {
        "required": [
            {
                "type": "xbrl:concept-refDimension",
                "source": {
                    "objectType": "xbrl:conceptObject"
                },
                "target": {
                    "objectType": "xbrl:dimensionObject"
                }
            }
        ]
    }
}

15.4.2.1 Event details cube constraints

An event details cube must contain a field that relates the event detail to the actual event dimension using the xbrl:concept-refDimension relationship.

An event details cube must include a typed dimension to uniquely identify the event details.

15.4.3 Journal entry cube

A journal entry cube is a type of event details cube that specifically identifies journal entry data. A journal entry cube is identified as such using the cubeType property with a value of "xbrla:journalCube".

The journal cube is a specific type of event detail cube and the rules that apply to an event details cube also apply to a journal cube.

The cube type object below defines the journal cube.

{
    "name": "xbrla:journalCube",
    "baseCubeType": "xbrl:eventDetailsCube"
}

15.4.3.1 Journal entry cube constraints

The journal entry cube has the same constraints as the event details cube.

In addition, the following constraints apply:

Each journal entry line item must be associated with only one concept object with a monetary datatype. The monetary value that is the journal value is identified using the concept-aggDimension relationship using the sum property. The value of aggregating the values of the dimension should always be zero. The aggDimension will always be the typed dimension of the cube.

The journal cube must contain a concept that is associated with the entity dimension using the xbrl:concept-refDimension relationship.

The journal cube must contain a concept that is associated with the concept dimension using the xbrl:concept-refDimension relationship.

A journal cube can only include the journal dimension and the concept core dimension.

The example below shows the networks that could be associated with a journal cube to identifiy which fields relate to the dimensions used in a report cube.

"networks":[
                {
                "name": "exp:conceptToDimensionNetwork",
                "relationshipTypeName": "xbrl:concept-refDimension",
                "roots": ["exp:JnlEntity","exp:JnlId","exp:Account"],
                "relationships": [
                        {
                            "source": "exp:JnlEntity",
                            "target": "xbrl:entity",
                        },
                        {
                            "source": "exp:JnlId",
                            "target": "exp:EventDimension"
                        },
                        {
                            "source": "exp:Account",
                            "target": "xbrl:concept"
                        }
                    ]
                },
                {
                "name": "exp:conceptToAggNetwork",
                "relationshipTypeName": "xbrl:concept-aggDimension",
                "roots": ["exp:JnlAmount"],
                "relationships": [
                        {
                            "source": "exp:JnlAmount",
                            "target": "exp:journalLineItemDimension",
                            "aggregation" : "sum"
                        }
                    ]
                }
            ]

15.4.4 Reference cube

A reference cube represents reference information. A reference captures information that is static with the passage of time. The reference cube is used to represent reference data. Facts in a reference cube provide information related to events and positions included in other cubes.

The cube type object below defines the reference cube.

{
    "name": "xbrla:referenceCube",
    "coreDimensions": ["xbrl:concept"],
    "cubeDimensionConstraints": {
        "allowed": [
            {
                "type": "typed",
                "minDimensions": 1,
                "maxDimensions":1

            }
        ],
        "closed": true
    },
    "cubeNetworkConstraints": {
        "closed": false,
        "cubeNetworks": [
            {
                "relationshipType": "`xbrl:concept-refDimension",
                "maxNetworks": 0,
                "target": {
                  "qname" : "xbrl:period"
                }
            }
        ]
      }
}

A reference cube MUST NOT have a period, entity or unit dimension. oimte:invalidCubeCoreDimension

A reference cube MUST have only one typed taxonomy defined dimension. oimte:invalidTaxonomyDefinedDimension

A reference cube MUST NOT have a xbrl:concept-refDimension relationship with a target of xbrl:period oimte:invalidCubeRelationship

15.4.5 Time series cube

A timeSeries cube represents time series information. A time series cube captures data that is reported using a consistent interval, unlike events that do not occur at regular, predictable intervals.

The cube type object below defines the time series cube.

{
    "name": "xbrla:timeSeriesCube",
    "coreDimensions": ["xbrl:concept", "xbrl:unit", "xbrl:entity"],
    "cubeDimensionConstraints" : {
        "allowed": [
            {
                "type": "typed",
                "dataType": "xs:dateTime",
                "minDimensions" : 1,
                "maxDimensions": 1,
                "domainClassProperties": {
                    "allowedProperties" : [
                        "xbrla:intervalOfMeasurement",
                        "xbrla:timeSeriesType",
                        "xbrl:aggregation",
                        "xbrla:intervalConvention",
                        "xbrla:completeTimeSeries",
                        "xbrla:excludedIntervals"
                    ],
                    "requiredProperties": [
                        "xbrla:intervalOfMeasurement",
                        "xbrla:timeSeriesType"
                    ]
                }
            }
        ],
        "closed": true
    }
}

A time series cube MUST have only one typed taxonomy defined dimension. oimte:invalidTaxonomyDefinedDimension

The taxonomy defined dimension defined on a time series cube MUST be a typed dimension of type xs:dateTime (oimte:invalidTaxonomyDefinedDimension).

The time series dimension MUST NOT include the period, entity and unit dimension. oimte:invalidCubeCoreDimension

15.4.6 Position cube

A position cube represents balance positions at a point in time. Fact values in the position cube have a period that represents an instant. Facts representing details about the balance being reported should be included in a reference cube.

The cube type object below defines the position cube:

{
    "name": "xbrla:positionCube",
    "coreDimensions": ["xbrl:period", "xbrl:entity", "xbrl:unit"],
    "cubeDimensionConstraints": {
        "allowed": [
            {
                "type": "typed",
                "minDimensions": 1
            }
        ],
        "closed": false
    }
}

The taxonomy defined dimension defined on a position cube MUST be a typed dimension. oimte:invalidTaxonomyDefinedDimension

16 Data source maps

Data source maps are defined as fact map objects referenced using a QName.

16.1 xBRL-JSON fact map

This fact map object is represented using the QName xbrl:xBRL-JSON. This fact map object defines the mapping of facts defined in an xBRL-JSON report to fact objects. The fact map object uses the standard xBRL-JSON fact objects and maps these objects to fact objects.

The xBRL-JSON fact map is referenced by a fact source. In the example below the fact source object ext:xBRLJsonInstance represents the collection of facts.

 "factSources": [
    {
        "name": "ext:xBRLJsonInstance",
        "factMapName": "xbrl:xBRL-JSON"
    }
],

16.1.1 Mapping the fact id

The SQName of the fact value object is mapped from the name (xs:NCName) of the xBRL-JSON fact object.

16.1.2 Mapping dimensions

The dimensions of a fact defined in the xBRL-JSON specification correspond to the factDimensions object in the model as follows:

16.1.3 Mapping footnotes

All facts in an xBRL-JSON report with a dimensions.concept value of xbrl:note are mapped to footnote objects in the XBRL model. The value of dimensions.noteId is used as the name of the footnote object. The value of dimensions.language is used as the language of the footnote object. The value of the fact object in the xBRL-JSON document is used as the content of the footnote object.

16.1.4 Mapping allowed duplicates

The allowedDuplicates feature of xBRL-JSON values are mapped as follows:

16.1.5 Mapping fact value

The SQName of the fact value object uses the SQName of its fact object with a _fv suffix appended to the local part provided that no fact value object in the model has the same SQName or QName, otherwise, a SQName should be used with a suffix of "_fvN" where N is the smallest positive integer that results in a value that is not the value of a SQName or QName in the model.

For example, if the fact SQName is ext:f1 the factValue SQName is ext:f1_fv.

A nil-valued fact with a value of null does not generate a fact value object in the model. A property of nilReasonType is added to the fact object with a value of unknownNilReason.

{
        "name": "ext:f-49",
        "factDimensions": {
          "xbrl:concept": "ferc:AccruedAmortizationCarrierProperty",
          "xbrl:entity": "cid:C000758",
          "xbrl:period": "2025-01-01T00:00:00",
          "xbrl:unit": "iso4217:USD"
        },
        "properties": [
          {
            "property": "xbrl:nil",
            "value": "xbrl:unknownNilReason"
          }
        ]
}

16.2 xBRL-XML fact map

This map is represented using the QName xbrl:xBRL-XML. This fact map defines the mapping of facts defined in an xBRL-XML report to fact objects.

The xBRL-XML fact map is referenced by a fact source. In the example below the fact source object ext:getInstance represents the collection of facts.

 "factSources": [
    {
        "name": "ext:getInstance",
        "factMapName": "xbrl:xBRL-XML"
    }
]

When mapping an XBRL 2.1 report a processor MUST report an error for facts or footnotes that do not meet the constraints defined in XML Mappings for the Open Information Model 1.0.

An XBRL 2.1 report is mapped to an xBRL-JSON report based on the mapping defined in XML Mappings for the Open Information Model 1.0. The xBRL-JSON format is mapped to the XBRL Model using the xBRL-JSON fact map.

16.3 Inline XBRL 1.1 fact map

This map is represented using the QName xbrl:inline-XBRL-1.1. This fact map defines the mapping of facts defined in an Inline XBRL 1.1 report to fact objects. The fact map uses the standard Inline XBRL 1.1 fact markups and maps these objects to fact objects with value source references to document sources when visible.

The fact map defines the mapping of footnotes defined in an Inline XBRL 1.1 report to footnote objects.

The SQName of the fact value object is generated based on id (xs:NCName) of the inline XBRL document element, if available, else a synthetic ID may be generated.

The dimensions and properties of the fact are as noted above for xBRL-XML fact map with the addition of value source properties as appropriate.

17 Object relationships

The diagram shows the relationships between XBRL Model objects.

The dotted lines in the diagram below indicate that it is optional for the source object to appear in the target object.

The following diagram shows which objects can carry property objects. The green (thicker) lines indicate containment — the source object defines properties within itself. The dotted blue lines show QName references — the property object references a PropertyType by QName, and PropertyType references a DataType by QName.

Appendix A Specification defined QNames

A.1 Object type QNames

The following details specification defined object types.

QName Object Type Description
xbrl:headingObject Object Defines headings within the taxonomy.
xbrl:conceptObject Object Defines concepts within the taxonomy.
xbrl:cubeDimensionObject Object Defines dimensions within the cube object. (Component of a Cube)
xbrl:cubeObject Object Defines a multidimensional structure to organize facts.
xbrl:cubeTypeObject Object Used to define the allowable dimensions associated with different cube types.
xbrl:dataTypeObject Object Defines datatypes within the taxonomy.
xbrl:dateResolutionObject Object Defines dates that are used by the period constraint object. (Component of a Cube)
xbrl:dimensionObject Object Defines dimensions within the taxonomy.
xbrl:domainNetworkObject Object Defines domains within the taxonomy.
xbrl:entityObject Object Defines an entity object in the taxonomy.
xbrl:groupContentObject Object Links groups within the taxonomy to taxonomy objects.
xbrl:groupObject Object Defines groups within the taxonomy.
xbrl:importTaxonomyObject Object Defines external taxonomy objects that can be imported into the taxonomy.
xbrl:labelObject Object Defines labels within the taxonomy.
xbrl:labelTypeObject Object Used to define a label type in the taxonomy.
xbrl:memberObject Object Defines members within the taxonomy.
xbrl:networkObject Object Defines networks within the taxonomy.
xbrl:periodConstraintObject Object Defines periods that can be used on the period dimension. (Component of a Cube)
xbrl:propertyObject Object Defines property values for objects in the taxonomy.
xbrl:propertyTypeObject Object Used to define properties that can be used on other taxonomy objects such as concepts and relationships.
xbrl:referenceObject Object Defines references within the taxonomy.
xbrl:referenceTypeObject Object Used to define a reference type in the taxonomy.
xbrl:relationshipObject Object Defines relationships within the taxonomy.
xbrl:relationshipTypeObject Object Used to define a relationship type in the taxonomy.
xbrl:tableTemplateObject Object Defines a two-dimensional structure where facts can be allocated for presentation purposes.
xbrl:xbrlModelObject Object Defines the taxonomy, including all logical aspects and entry points.
xbrl:transformObject Object Defines a transform object in the taxonomy.
xbrl:unitObject Object Defines a unit object in the taxonomy.
xbrl:unitTypeObject Object Used to associate the datatypes used by a unit that are associated with a base datatype (Component of a DataType)
xbrl:collectionTypeObject Object Defines constraints for collection-based datatypes. (Component of a DataType)

A.2 Dimension type QNames

The following details built-in dimensions

QName Object Type Description
xbrl:concept Dimension Defines the concepts dimension.
xbrl:entity Dimension Defines the entity dimension.
xbrl:language Dimension Defines the language dimension.
xbrl:period Dimension Defines the period dimension.
xbrl:unit Dimension Defines the units dimension.

A.3 Cube type QNames

The following details built-in cube types

QName Object Type Description
xbrla:eventCube CubeType A cube type representing events. Requires a concept dimension and one event dimension only.
xbrla:journalCube CubeType A cube type representing journal entries. Requires a concept dimension and one journal dimension only.
xbrla:eventDetailsCube CubeType A cube type representing event details. Requires a concept dimension and one event details dimension only.
xbrla:referenceCube CubeType A cube type representing reference data. Requires a concept dimension and one reference dimension only.
xbrla:timeSeriesCube CubeType A cube type representing time series data. Requires a concept dimension and a timeseries dimension only.
xbrla:positionCube CubeType A cube type representing position listing data. Requires a concept dimension, instant period dimension, and must have a reference dimension.
xbrl:reportCube CubeType A cube type representing report data. Requires concept, period, unit, entity, and taxonomy defined dimensions.

Cubes without a cubeType property are considered open cubes. Open cubes identify valid facts without defining a concept dimension.

A.4 Relationship types

The following details built-in relationship types.

QName Description
xbrl:concept-aggDimension Represents a relationship between a concept and an aggregated dimension.
xbrl:concept-refDimension Represents a relationship between a concept and a reference dimension.
xbrl:class-subclass Represents a class-subclass relationship between concepts.
xbrl:fact-explanatoryFact Associates a fact object with another fact object when a fact describes another fact.
xbrl:general-special Represents a general-special relationship between concepts.
xbrl:instant-contra Represents an instant contra relationship for a concept.
xbrl:instant-inflow Represents an instant inflow relationship for a concept.
xbrl:instant-outflow Represents an instant outflow relationship for a concept.
xbrl:parent-child Represents a parent-child relationship between concepts.
xbrl:propertyValue-object Represents a relationship between a property value (Member) and an object.
xbrl:summation-item Represents a summation-item relationship between concepts.
xbrl:taxonomy-group Represents a hierarchical relationship between groups within a taxonomy. Used exclusively in group tree objects.
xbrl:unit-factConcept Associates a unit object with a specific concept when that concept can only be reported with that unit in a cube.
xbrl:unitFact-factConcept Represents a relationship between a concept used to represent a unit and the concept for the fact with that unit in a cube.

A.5 Property type QNames

The following details built-in property types

QName Object Type Description
xbrl:aggregation PropertyType Represents an aggregation property used to identify the aggregation method used.
xbrla:balance PropertyType Represents the balance property of a concept, such as "debit" or "credit".
xbrl:defaultLanguage PropertyType Represents the default BCP 47 language for text-valued objects within a model. Can only be applied to the xbrl:xbrlModelObject.
xbrl:preferredLabel PropertyType Represents a property that specifies the preferred label for a concept in a specific context.
xbrl:semanticLink PropertyType Represents a semantic link property that defines relationships between taxonomy objects.
xbrl:weight PropertyType Represents a property that specifies the weight of a concept in a calculation relationship.

A.6 Label type QNames

The following is a non-normative list of core label types. The built-in model defines normative label types.

QName XBRL 2.1 URI Description
xbrl:commentaryGuidance http://www.xbrl.org/2003/role/commentaryGuidance Represents a label providing general commentary on a concept or object.
xbrl:commonPracticeRef http://www.xbrl.org/2009/role/commonPracticeRef Represents a reference to common practices related to a concept or object.
xbrl:definitionGuidance http://www.xbrl.org/2003/role/definitionGuidance Represents a label providing guidance on the definition of a concept or object.
xbrl:deprecatedDateLabel http://www.xbrl.org/2009/role/deprecatedDateLabel Represents a label indicating the deprecated date of a concept or object.
xbrl:deprecatedLabel http://www.xbrl.org/2009/role/deprecatedLabel Represents a label indicating that a concept or object is deprecated.
xbrl:disclosureGuidance http://www.xbrl.org/2003/role/disclosureGuidance Represents a label providing guidance on the disclosure of a concept or object.
xbrl:documentation http://www.xbrl.org/2003/role/documentation Represents a documentation label providing additional information about a concept or object.
xbrl:exampleGuidance http://www.xbrl.org/2003/role/exampleGuidance Represents a label providing examples for the usage of a concept or object.
xbrl:label http://www.xbrl.org/2003/role/label Represents a general label for a concept or object.
xbrl:measurementGuidance http://www.xbrl.org/2003/role/measurementGuidance Represents a label providing guidance on the measurement of a concept or object.
xbrl:negated http://xbrl.us/us-gaap/role/label/negated Represents a negated label for a concept.
xbrl:negatedLabel http://www.xbrl.org/2009/role/negatedLabel Represents a general negated label for a concept.
xbrl:negatedNetLabel http://www.xbrl.org/2009/role/negatedNetLabel Represents a negated net label for a concept.
xbrl:negatedPeriodEnd http://xbrl.us/us-gaap/role/label/negatedPeriodEnd Represents a negated label for the end of a period.
xbrl:negatedPeriodEndLabel http://www.xbrl.org/2009/role/negatedPeriodEndLabel Represents a general negated label for the end of a period.
xbrl:negatedPeriodStart http://xbrl.us/us-gaap/role/label/negatedPeriodStart Represents a negated label for the start of a period.
xbrl:negatedPeriodStartLabel http://www.xbrl.org/2009/role/negatedPeriodStartLabel Represents a general negated label for the start of a period.
xbrl:negatedTerseLabel http://www.xbrl.org/2009/role/negatedTerseLabel Represents a terse negated label for a concept.
xbrl:negatedTotal http://xbrl.us/us-gaap/role/label/negatedTotal Represents a negated label for total values of a concept.
xbrl:negatedTotalLabel http://www.xbrl.org/2009/role/negatedTotalLabel Represents a general negated label for total values of a concept.
xbrl:negativeLabel http://www.xbrl.org/2009/role/negativeLabel Represents a label for negative values of a concept.
xbrl:negativePeriodEndLabel http://www.xbrl.org/2009/role/negativePeriodEndLabel Represents a label for negative values at the end of a period.
xbrl:negativePeriodEndTotalLabel http://www.xbrl.org/2009/role/negativePeriodEndTotalLabel Represents a label for negative total values at the end of a period.
xbrl:negativePeriodStartLabel http://www.xbrl.org/2003/role/negativePeriodStartLabel Represents a label for negative values at the start of a period.
xbrl:negativePeriodStartTotalLabel http://www.xbrl.org/2009/role/negativePeriodStartTotalLabel Represents a label for negative total values at the start of a period.
xbrl:negativeTerseLabel http://www.xbrl.org/2009/role/negativeTerseLabel Represents a terse label for negative values of a concept.
xbrl:negativeVerboseLabel http://www.xbrl.org/2009/role/negativeVerboseLabel Represents a verbose label for negative values of a concept.
xbrl:netLabel http://www.xbrl.org/2009/role/netLabel Represents a label for net values of a concept.
xbrl:periodEndLabel http://www.xbrl.org/2003/role/periodEndLabel Represents a label for the end of a period.
xbrl:periodStartLabel http://www.xbrl.org/2003/role/periodStartLabel Represents a label for the start of a period.
xbrl:presentationGuidance http://www.xbrl.org/2003/role/presentationGuidance Represents a label providing guidance on the presentation of a concept or object.
xbrl:positiveLabel http://www.xbrl.org/2003/role/positiveLabel Represents a label for positive values of a concept.
xbrl:positivePeriodEndLabel http://www.xbrl.org/2009/role/positivePeriodEndLabel Represents a label for positive values at the end of a period.
xbrl:positivePeriodEndTotalLabel http://www.xbrl.org/2009/role/positivePeriodEndTotalLabel Represents a label for positive total values at the end of a period.
xbrl:positivePeriodStartLabel http://www.xbrl.org/2009/role/positivePeriodStartLabel Represents a label for positive values at the start of a period.
xbrl:positivePeriodStartTotalLabel http://www.xbrl.org/2009/role/positivePeriodStartTotalLabel Represents a label for positive total values at the start of a period.
xbrl:positiveTerseLabel http://www.xbrl.org/2003/role/positiveTerseLabel Represents a terse label for positive values of a concept.
xbrl:positiveVerboseLabel http://www.xbrl.org/2003/role/positiveVerboseLabel Represents a verbose label for positive values of a concept.
xbrl:restatedLabel http://www.xbrl.org/2006/role/restatedLabel Represents a label indicating that a concept or object has been restated.
xbrl:symbolLabel http://www.xbrl.org/PWD/2026-09-01/role/symbolLabel Represents a label for symbols associated with a unit.
xbrl:terseLabel http://www.xbrl.org/2003/role/terseLabel Represents a terse (short) label for a concept or object.
xbrl:totalLabel http://www.xbrl.org/2003/role/totalLabel Represents a label for total values of a concept.
xbrl:verboseLabel http://www.xbrl.org/2003/role/verboseLabel Represents a verbose (detailed) label for a concept or object.
xbrl:zeroLabel http://www.xbrl.org/2003/role/zeroLabel Represents a label for zero values of a concept.
xbrl:zeroTerseLabel http://www.xbrl.org/2003/role/zeroTerseLabel Represents a terse label for zero values of a concept.
xbrl:zeroVerboseLabel http://www.xbrl.org/2003/role/zeroVerboseLabel Represents a verbose label for zero values of a concept.

A.7 Reference type QNames

The following details built-in reference types:

QName Object Type Description
xbrl:commentaryRef ReferenceType Represents a reference providing commentary on a concept or object.
xbrl:definitionRef ReferenceType Represents a reference providing a definition for a concept or object.
xbrl:disclosureRef ReferenceType Represents a reference providing disclosure information for a concept or object.
xbrl:exampleRef ReferenceType Represents a reference providing examples for the usage of a concept or object.
xbrl:mandatoryDisclosureRef ReferenceType Represents a reference for mandatory disclosure information related to a concept or object.
xbrl:measurementRef ReferenceType Represents a reference providing measurement information for a concept or object.
xbrl:presentationRef ReferenceType Represents a reference providing presentation information for a concept or object.
xbrl:recommendedDisclosureRef ReferenceType Represents a reference for recommended disclosure information related to a concept or object.
xbrl:reference ReferenceType Represents a general reference for a concept or object.
xbrl:semanticRef ReferenceType Represents a reference providing semantic information for a concept or object.
xbrl:unspecifiedDisclosureRef ReferenceType Represents a reference for unspecified disclosure information related to a concept or object.

Appendix B Taxonomy Object Summary

Taxonomy Object QName of Object Object Properties (explicit) References (by property) Parent Object Child Objects Property Object QName Ref Extensible
XBRLModel xbrl:xbrlModelObject name, frameworkName, version, importedTaxonomies, finalTaxonomy, headings, concepts, cubes, cubeTypes, dataTypes, dimensions, domains, domainClasses, entities, facts, footnotes, groups, groupContents, labels, layouts, members, modelTypes, networks, propertyTypes, references, referenceTypes, relationshipTypes, units, properties, transforms importedTaxonomies (importTaxonomy), concepts, cubes, etc. (root) All component objects Yes Yes no
ImportTaxonomy xbrl:importTaxonomyObject xbrlModelName, profiles, importObjects, importObjectTypes, excludeLabels, properties xbrlModelName (xbrlModel) XBRLModel No No no
FinalTaxonomy xbrl:finalTaxonomyObject name, finalTaxonomyFlag, finalObjects, finalObjectTypes XBRLModel No Yes no
Concept xbrl:conceptObject name, dataType, periodType, nillable, enumerationDomain, properties dataType (dataType or collection), enumerationDomain (domain) XBRLModel Yes Yes no
Heading xbrl:headingObject name, properties XBRLModel Yes Yes no
Cube xbrl:cubeObject name, cubeType, cubeDimensions, cubeNetworks, excludeCubes, requiredCubes, properties, extends, isExtensible cubeType (cubeType), cubeDimensions (cubeDimension), cubeNetworks (network), excludeCubes (cube) XBRLModel cubeDimension Yes Yes cubeNetworks, properties, requiredCubes
CubeDimension xbrl:cubeDimensionObject dimension, domain, typedSort, optional, periodConstraints dimension (dimension), domain (domain), periodConstraints (periodConstraint) Cube periodConstraint No No no
PeriodConstraint xbrl:periodConstraintObject periodType, timeSpan, periodPattern, endDate, startDate, onOrAfter, onOrBefore endDate, startDate, onOrAfter, onOrBefore (dateResolution) CubeDimension dateResolution No No no
DateResolution xbrl:dateResolutionObject conceptName, context, value, timeShift conceptName (concept) PeriodConstraint No No no
Dimension xbrl:dimensionObject name, domainClass, cubeTypes, properties domainClass (domainClass), cubeTypes (cubeType) XBRLModel Yes Yes no
Domain xbrl:domainNetworkObject name, root, domainDataType, relationships, extends, isExtensible, properties root (domainClass), domainDataType (dataType), extends (domain), relationships (relationship) XBRLModel relationship Yes Yes relationships, properties
DomainClass xbrl:domainClassObject name, properties XBRLModel Yes Yes no
Entity xbrl:entityObject name, properties XBRLModel Yes Yes no
Group xbrl:groupObject name, groupURI, properties XBRLModel Yes Yes no
GroupContent xbrl:groupContentObject groupName, forObject groupName (group), forObject (network/cube/tableTemplate) XBRLModel No No no
GroupTree xbrl:groupTreeObject name, relationships name (groupTree QName), relationships (relationship with taxonomy/group source, group target) XBRLModel relationship No Yes no
Network xbrl:networkObject name, relationshipTypeName, roots, relationships, extends, isExtensible, properties relationshipTypeName (relationshipType), roots, relationships (relationship), extends (network) XBRLModel relationship Yes Yes relationships, roots, properties
Relationship xbrl:relationshipObject source, target, order, properties source (any), target (any), properties (property) Network/Domain Yes No no
RelationshipType xbrl:relationshipTypeObject name, uri, cycles, allowedLinkProperties, requiredLinkProperties, sourceObjects, targetObjects allowedLinkProperties, requiredLinkProperties (propertyType), sourceObjects, targetObjects XBRLModel No Yes no
Label xbrl:labelObject forObject, labelType, language, value, properties forObject (any), labelType (labelType) XBRLModel No No no
Member xbrl:memberObject name, domainClasses, extends, isExtensible,properties domainClasses (domainClass) XBRLModel Yes Yes domainClasses, properties
Property xbrl:propertyObject property, value property (propertyType) (see Col 7) No No no
Reference xbrl:referenceObject name, extends, forObjects, referenceType, language, isExtensible, properties referenceType (referenceType), forObjects (any) XBRLModel Yes Yes forObjects, properties
DataType xbrl:dataTypeObject name, baseType, enumeration, minInclusive, maxInclusive, minExclusive, maxExclusive, totalDigits, fractionDigits, length, minLength, maxLength, whiteSpace, patterns, unitType, setType baseType (dataType), unitType (unitType), setType (setType) XBRLModel unitType, setType No Yes no
UnitType xbrl:unitTypeObject dataTypeNumerator, dataTypeDenominator, dataTypeMultiplier DataType No No no
CollectionType xbrl:collectionTypeObject dataType, uniqueValues, orderedValues, maxItems , minItems dataType (dataType) DataType No No no
PropertyType xbrl:propertyTypeObject name, dataType, enumerationDomain, definitional, allowedObjects, allowedAsLinkProperty dataType (dataType or collection), enumerationDomain (domain), allowedObjects (object type QNames) XBRLModel No Yes no
LabelType xbrl:labelTypeObject name, uri, formatType, contentConstraints, allowedObjects formatType (string), contentConstraints (object), allowedObjects (object type QNames) XBRLModel No Yes no
ReferenceType xbrl:referenceTypeObject name, uri, allowedObjects, orderedProperties, requiredProperties allowedObjects (object type QNames), orderedProperties, requiredProperties (propertyType) XBRLModel No Yes no
CubeType xbrl:cubeTypeObject name, baseCubeType, coreDimensions, cubeDimensionConstraints, cubeRelationships, cubeProperties, required, allowed baseCubeType (cubeType), dimensions.allowed (dimension or constraint), relationships.required/allowed (relationshipType or constraint), properties.required/allowed (propertyType) XBRLModel No Yes no
Transform xbrl:transformObject name, inputDataType, outputDataType inputDataType (dataType), outputDataType (dataType) XBRLModel No Yes no
Unit xbrl:unitObject name, dataType, compositeUnitRepresentation dataType (dataType) XBRLModel No Yes no
Layout xbrl:layoutObject name, tableConstruction, dataTables, properties XBRLModel dataTable Yes Yes no
DataTable xbrl:dataTableObject name, tableType, cubeName, xAxis, yAxis, zAxis, tablePoints cubeName (cube) Layout axis, tablePoint No Yes no
Axis xbrl:axisObject axisHeaders, gridHeaders, axisLabelsGroup, gridAxis DataTable axisHeader, gridHeader, gridAxis No No no
AxisHeader xbrl:axisHeaderObject dimensionName, labelType, language, axisMembers, axisNetwork, dimensionOptional, totalLocation, groupDuplicateLabels, typedLabel dimensionName (dimension), axisNetwork (network/domain) Axis No No no
GridHeader xbrl:gridHeaderObject label, span, rollUpLocation, labelLevel Axis No No no
GridAxis xbrl:gridAxisObject axisItems, axisGroups Axis axisItem, axisGroup No No no
AxisItem xbrl:axisItemObject axisId, dimensions GridAxis No No no
AxisGroup xbrl:axisGroupObject dimensionName, axisNetwork, axisIds, axisStart dimensionName (dimension), axisNetwork (network/domain) GridAxis No No no
TablePoint xbrl:tablePointObject gridCoordinates, dimensions dimensions (dimension/member) DataTable No No no
Fact xbrl:factObject name, factValues, factDimensions, properties, extends, isExtensible factDimensions (factDimension) XBRLModel factValue, factDimension Yes Yes factValues, properties
FactValue xbrl:factValueObject name, value, decimals, language, valueSources, valueAnchors valueSources (factValueSource), valueAnchors (factAnchor) Fact No Yes no
FactDimension xbrl:factDimensionObject (dynamic properties: dimension QNames) dimension values (concept/member/unit/entity or typed value) Fact No No no
FactValueSource xbrl:factValueSourceObject source, medium, id, formField, page, mcid, elementId, bbox, imageHash, tabularPath, transformation FactValue No No no
FactValueAnchor xbrl:factValueAnchorObject source, medium, id, formField, page, mcid, elementId, bbox, imageHash, tabularPath FactValue No No no
FactSource xbrl:factSourceObject name, factMapName, namespaceMaps, factIdentifierNamespacePrefix, properties factMapName (factMap), namespaceMaps (namespaceMap) XBRLModel namespaceMap Yes Yes no
FactMap xbrl:factMapObject name, tableTemplate, jsonTemplateMap, xmlTemplateMap tableTemplate (tableTemplate), jsonTemplateMap, xmlTemplateMap XBRLModel No Yes no
NamespaceMap xbrl:namespaceMapObject fromNamespacePrefix, toNamespacePrefix FactSource No No no
ModelType xbrl:modelTypeObject name, allowedObjects, allowedProperties, requiredProperties allowedObjects, allowedProperties, requiredProperties (object/property type QNames) XBRLModel No Yes no
Footnote xbrl:footnoteObject name, content, language - XBRLModel No Yes no

Legend:

Appendix C Built-in datatypes model

This section is normative. The datatypes defined in this section MUST be recognised by all conformant processors as built-in datatypes of this specification, as required by Built-in datatypes.

.

The JSON file inclusion is the machine-readable form of the normative type definitions.

{
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": {
      "xbrl": "https://xbrl.org/PWD/2026-09-01",
      "xbrlr": "https://xbrl.org/PWD/2026-09-01/report",
      "xs": "http://www.w3.org/2001/XMLSchema",
      "ref": "https://xbrl.org/PWD/2026-09-01/ref",
      "utr": "https://xbrl.org/PWD/2026-09-01/utr",
      "xbrlm": "https://xbrl.org/PWD/2026-09-01/model"
    },
    "documentNamespacePrefix": "xbrlr"
  },
  "xbrlModel": {
    "name": "xbrlr:dataTypes",
    "frameworkName": "types",
    "version": "2025",
    "importedTaxonomies": [
      {
        "xbrlModelName": "xbrlm:base"
      }
    ],
    "dataTypes": [
      {
        "name": "xbrlr:aggregationType",
        "baseType": "xs:string",
        "enumeration": [
          "sum",
          "count",
          "max",
          "min",
          "avg",
          "concat",
          "median",
          "first",
          "last",
          "stdev"
        ]
      },
      {
        "name": "xbrlr:weightType",
        "baseType": "xs:decimal",
        "enumeration": [
          "1",
          "-1"
        ],
        "allowedObjects": [
          "xbrl:propertyTypeObject"
        ]
      },
      {
        "name": "xbrlr:duration",
        "baseType": "xs:duration"
      },
      {
        "name": "xbrlr:monetary",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:pureType",
        "baseType": "xs:decimal"
      },
      {
        "name": "xbrlr:enumeration",
        "baseType": "xbrl:noLangToken",
        "patterns": [
          "[A-Za-z][-A-Za-z0-9+-.]*:\\S+#[\\i-[:]][\\c-[:]]*"
        ]
      },
      {
        "name": "xbrlr:escaped",
        "baseType": "xs:string"
      },
      {
        "name": "xbrlr:xmlNodes",
        "baseType": "xbrlr:escaped"
      },
      {
        "name": "xbrlr:xml",
        "baseType": "xbrlr:xmlNodes"
      },
      {
        "name": "xbrlr:textBlock",
        "baseType": "xbrlr:xmlNodes",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrlr:percent",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrlr:perShare",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:area",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:volume",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:mass",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:weight",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:energy",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:power",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:length",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:memory",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:noDecimalsMonetary",
        "baseType": "xbrlr:monetary",
        "fractionDigits": 0,
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:nonNegativeMonetary",
        "baseType": "xbrlr:monetary",
        "minInclusive": 0,
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:nonNegativeNoDecimalsMonetary",
        "baseType": "xbrlr:monetary",
        "fractionDigits": 0,
        "minInclusive": 0,
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:insolation",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:temperature",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:pressure",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:mass",
          "dataTypeDenominator": "xbrlr:area"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:frequency",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:irradiance",
        "baseType": "xs:decimal"
      },
      {
        "name": "xbrlr:speed",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:length",
          "dataTypeDenominator": "xbrlr:time"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:planeAngle",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:voltage",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:electricCurrent",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:force",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:electricCharge",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:time",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:guidance",
        "baseType": "xs:string"
      },
      {
        "name": "xbrlr:flow",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:volume",
          "dataTypeDenominator": "xbrlr:time"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:massFlow",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerLength",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:length"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:Monetary_per_Monetary",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:monetary"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerArea",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:area"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerDecimal",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xs:decimal"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerVolume",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:volume"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerDuration",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:time"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerEnergy",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:energy"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:monetaryPerMass",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:monetary",
          "dataTypeDenominator": "xbrlr:mass"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:dateTime",
        "baseType": "xs:dateTime",
        "patterns": [
          ".*T.*"
        ]
      },
      {
        "name": "xbrlr:partialDate",
        "baseType": "xs:string",
        "allowedObjects": [
          "xbrl:conceptObject"
        ],
        "patterns": [
          "-?[0-9]{4,}(-[0-9]{2}(-[0-9]{2}(T[0-9]{2}(:[0-9]{2}(:[0-9]{2})?)?)?)?)?"
        ]
      },
      {
        "name": "xbrlr:ghgEmissions",
        "baseType": "xs:decimal",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:energyPerMonetary",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:energy",
          "dataTypeDenominator": "xbrlr:monetary"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:ghgEmissionsPerMonetary",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:ghgEmissions",
          "dataTypeDenominator": "xbrlr:monetary"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:volumePerMonetary",
        "baseType": "xs:decimal",
        "unitType": {
          "dataTypeNumerator": "xbrlr:volume",
          "dataTypeDenominator": "xbrlr:monetary"
        },
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrlr:perUnit",
        "baseType": "xs:decimal"
      },
      {
        "name": "xbrlr:reportAttributeType",
        "baseType": "xs:string",
        "enumeration": [
          "reportDate",
          "reportFilingDate",
          "reportName",
          "reportingEntity",
          "reportingPeriod",
          "reportIdentifier"
        ]
      },
      {
        "name": "xbrlr:emoji",
        "baseType": "xs:string"
      },
      {
        "name": "xbrlr:periodString",
        "baseType": "xs:string"
      },
      {
        "name": "xbrlr:startEndDates",
        "baseType": "xs:anySimpleType"
      },
      {
        "name": "xbrlr:unitString",
        "baseType": "xs:string"
      },
      {
        "name": "xbrlr:realURL",
        "baseType": "xs:anyURI"
      },
      {
        "name": "xbrlr:linkToMarkdownFormat",
        "baseType": "xbrlr:realURL"
      }
    ],
    "units": [
      {
        "dataType": "xbrlr:pureType",
        "name": "xbrlr:pure"
      }
    ],
    "collectionTypes": [
      {
        "name": "xbrlr:QNameSet",
        "dataType": "xs:QName",
        "uniqueValues": true,
        "orderedValues": true
      },
      {
        "name": "xbrlr:excludedIntervalsSet",
        "dataType": "xs:string",
        "uniqueValues": true,
        "orderedValues": false
      },
      {
        "name": "xbrlr:stringCollection",
        "dataType": "xs:string",
        "minItems": 1,
        "orderedValues": true
      },
      {
        "name": "xbrlr:gYearList",
        "dataType": "xs:gYear",
        "uniqueValues": true,
        "orderedValues": false
      }
    ],
    "labels": [
      {
        "forObject": "xbrlr:periodString",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The period dimension takes a value that is a time interval, which may be zero-length (i.e. an instant). This type defines a standard period string representation which can be used to express such values.The period string representation is obtained as follows: If the value is a non-zero length interval, then the representation is a pair of ISO 8601 date-time values, separated by the / character; Otherwise, the value is a single ISO 8601 date-time value. The date-time values used in this representation MUST be valid according to the xs:dateTime datatype and MUST be in the canonical lexical representation. The error code oimce:invalidPeriodRepresentation MUST be raised for values that are required to be a period string representation and which do not conform to the above format. It should be noted that unlike the xbrli:dateUnion type used in xBRL-XML, the xs:dateTime datatype used here does not allow the time component to be omitted."
      },
      {
        "forObject": "xbrlr:startEndDates",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The start and end dates of a period defined as a single type."
      },
      {
        "forObject": "xbrlr:unitString",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The unit dimension defines units in terms of the combination of QNames by defining an unordered collection of numerators and an unordered collection of denominators. This type defines a standardised unit string representation, allowing units to be captured using a unique string value. This has the property that, provided that a consistent set of namespace prefixes are used, a given unit will have a single representation meaning that equivalence of units can be determined by string comparison. The unit string representation is obtained as follows: If {denominators} is not present, the QNames representing the {numerators} are combined in lexicographic order, separated by the * character. Otherwise, lists of {numerators} and {denominators} are created by combining QNames in lexicographic order and separating with the * character, as above. If a list contains more than one item, the list is enclosed in parentheses. The final string is then obtained by concatenating the list of numerators, the / character, and the list of denominators. Whitespace is not permitted anywhere in the string representation, and the use of QNames ensures that a 1:1 mapping between prefixes and namespaces is available thus ensuring that equivalent units appearing within the same document are represented with the same string. Lexicographic order means ordered based on comparison of Unicode code point values of each character. If any QNames in the unit string representation use a prefix that is not defined in the prefix map then oimce:unboundPrefix MUST be raised."
      },
      {
        "forObject": "xbrlr:aggregationType",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The aggregation data type is used to uniquely identify the method of aggregation used to generate a single value from a population."
      },
      {
        "forObject": "xbrlr:monetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary type serves as the data type for those financial concepts in a taxonomy which denote units in a currency. Instance items with this type must have a unit of measure from the ISO 4217 namespace of currencies."
      },
      {
        "forObject": "xbrlr:pureType",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "This data type serves as the type for dimensionless numbers such as percentage change, growth rates, and other ratios where the numerator and denominator have the same units."
      },
      {
        "forObject": "xbrlr:enumeration",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The enumeration type defines an XBRL item type which takes an XML Name in the format 'namespace-uri#localname' as a value."
      },
      {
        "forObject": "xbrlr:escaped",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "escaped specializes string. There is no constraint on whether the resulting unescaped content is well-formed or not; this base type exists so that processors know what to do with the content. It is a suitable base type for a data type whose unescaped content must be valid HTML 4.0 (which is not XML)."
      },
      {
        "forObject": "xbrlr:xmlNodes",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "xmlNodes specializes escaped. The unescaped content MUST be a sequence of XML text and well-formed XML nodes. This content constraint cannot be captured by a finite length regular expression."
      },
      {
        "forObject": "xbrlr:xml",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "xml specializes xmlNodes. The unescaped content MUST be well-formed XML. This is a suitable base type for elements whose content must conform to a specific XML Schema or DTD. "
      },
      {
        "forObject": "xbrlr:textBlock",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "textBlock specializes xmlNodes. The unescaped content MUST have mixed content containing a simple string, or a fragment of XHTML or a mixture of both."
      },
      {
        "forObject": "xbrlr:percent",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The percent item type is used to indicate that the value of the element is intended to be presented as a percentage. This does not contravene Specification section 4.8.2, which requires that percentages not be multiplied by 100."
      },
      {
        "forObject": "xbrlr:perShare",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The per share item type indicates a monetary amount divided by a number of shares. The per share item type has a Decimal base."
      },
      {
        "forObject": "xbrlr:area",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The area item type is used to indicate that an element represents an area."
      },
      {
        "forObject": "xbrlr:volume",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The Volume item type is used to indicate that an element represents a volume and can be used to express the volume of any substance, whether solid, liquid, or gas."
      },
      {
        "forObject": "xbrlr:mass",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The mass item type represents the mass of an object which can be measured."
      },
      {
        "forObject": "xbrlr:weight",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The weight item type represents the weight of an object which can be measured."
      },
      {
        "forObject": "xbrlr:energy",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The energy item type represents a unit of energy."
      },
      {
        "forObject": "xbrlr:power",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "Measures a rate of energy use or energy production and is equivalent to the use or production of energy during a period of time. I.e. a watt is the equal to one joule of energy per second."
      },
      {
        "forObject": "xbrlr:length",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The length item type is a measure of distance."
      },
      {
        "forObject": "xbrlr:memory",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The memory item type is a measure of memory typically used in the IT industry."
      },
      {
        "forObject": "xbrlr:noDecimalsMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The NoDecimalsMonetary is a restriction on the xbrlr:monetary in that it does not allow cents on the monetary value. Facts using this type MUST have an (inferred) decimals attribute value that is less than or equal to zero, or 'INF'."
      },
      {
        "forObject": "xbrlr:nonNegativeMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The nonNegativeMonetary is a restriction on the xbrlr:monetary in that it does not allow negative values on the monetary value."
      },
      {
        "forObject": "xbrlr:nonNegativeNoDecimalsMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The nonNegativeNoDecimalsMonetary is a restriction on the xbrlr:monetary in that it does not allow cents or negative values on the monetary value. Facts using this type MUST have an (inferred) decimals attribute value that is less than or equal to zero, or 'INF'."
      },
      {
        "forObject": "xbrlr:insolation",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The insolation item type is used to represent a measure of energy per area over a period of time. "
      },
      {
        "forObject": "xbrlr:temperature",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The temperature item type is used to represent a measure of temperature either in absolute terms or as a difference between two temperatures."
      },
      {
        "forObject": "xbrlr:pressure",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The pressure item type is used to represent a measure of the force applied perpendicular to the surface of an object per unit area over which that force is distributed. Units include Pascal, PSI and Bar. "
      },
      {
        "forObject": "xbrlr:frequency",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The frequency item type is used to represent a measure of the number of occurrences of a repeating event per unit time. "
      },
      {
        "forObject": "xbrlr:irradiance",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The irradiance item type is used to represent a measure irradiance (power per unit area)"
      },
      {
        "forObject": "xbrlr:speed",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The speed item type is used to represent a measure of speed (distance traveled by an object per unit time). Units include knots, mach, and metres per second."
      },
      {
        "forObject": "xbrlr:planeAngle",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The angle item type is used to represent the measurement of an angle. Units include radians, degrees and gradians."
      },
      {
        "forObject": "xbrlr:voltage",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The voltage item type is used to represent a measure of voltage (the difference in electric potential energy between two points per unit electric charge)."
      },
      {
        "forObject": "xbrlr:electricCurrent",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The electric current item type is used to represent a measure of electric current (the flow of electric charge over a circuit)."
      },
      {
        "forObject": "xbrlr:force",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The force item type is used to represent a measure of a physical force. Units include newtons. "
      },
      {
        "forObject": "xbrlr:electricCharge",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": " The electric charge item is used to represent a measure of electric charge (the physical property of matter that causes it to experience a force when placed in an electromagnetic field) "
      },
      {
        "forObject": "xbrlr:guidance",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The purpose of the guidance type is to identify 'guidance items' which provide general guidance for users of a taxonomy, particularly preparers of XBRL reports. Guidance is defined as a property value of the xbrl:abstractDataType property defined ona  a heading object. This property allows guidance to be positioned in appropriate locations in the parent-child relationship network, and is intended to help users who view the taxonomy through displays based on the parent-child relationship network. Guidance items provide general guidance which is not limited to the application of a specific tag to an individual item of data. This remains as a datatype but can only be used as a property value, to support backward compatability to XBRL 2.1 taxonomies."
      },
      {
        "forObject": "xbrlr:gYearList",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "This data type allows the reporting of a list of xsd:gYear values as a single value"
      },
      {
        "forObject": "xbrlr:flow",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The flow item type is used to represent a measure of volumetric flow rate."
      },
      {
        "forObject": "xbrlr:massFlow",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The mass flow item type is used to represent a measure of mass flow rate."
      },
      {
        "forObject": "xbrlr:monetaryPerLength",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per length item type is used to represent a measure of price or cost per unit length"
      },
      {
        "forObject": "xbrlr:monetaryPerArea",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per area item type is used to represent a measure of price or cost per unit area"
      },
      {
        "forObject": "xbrlr:monetaryPerVolume",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per volume item type is used to represent a measure of price or cost per unit volume"
      },
      {
        "forObject": "xbrlr:monetaryPerDuration",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per duration item type is used to represent a measure of price or cost per unit duration"
      },
      {
        "forObject": "xbrlr:monetaryPerEnergy",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per energy item type is used to represent a measure of price or cost per unit energy"
      },
      {
        "forObject": "xbrlr:monetaryPerMass",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The monetary per mass item type is used to represent a measure of price or cost per unit mass"
      },
      {
        "forObject": "xbrlr:dateTime",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "A subtype of xs:dateTime that requires a time component (as xs:dateTime does)."
      },
      {
        "forObject": "xbrlr:partialDate",
        "language": "en",
        "labelType": "xbrl:label",
        "value": "Partial Date"
      },
      {
        "forObject": "xbrlr:partialDate",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "An ISO 8601 truncated date/time value that may represent a year (YYYY), year-month (YYYY-MM), full date (YYYY-MM-DD), or date with hours, minutes or seconds. Used where the precision of a date or time value is not known in advance."
      },
      {
        "forObject": "xbrlr:ghgEmissions",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The greenhouse gas emissions item type is used in preference to mass to measure Global Warming Potential, which is often expressed in terms of tonnes of CO2 equivalent."
      },
      {
        "forObject": "xbrlr:energyPerMonetary",
        "language": "en",
        "labelType": "xbrl:label",
        "value": "Energy/Monetary"
      },
      {
        "forObject": "xbrlr:energyPerMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The energy per monetary item type is used to represent a measure of energy per monetary unit."
      },
      {
        "forObject": "xbrlr:ghgEmissionsPerMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The emissions per monetary item type is used to represent a measure of GHG emissions per monetary unit."
      },
      {
        "forObject": "xbrlr:volumePerMonetary",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The volume per monetary item type is used to represent a measure of volume per monetary unit."
      },
      {
        "forObject": "xbrlr:volumePerMonetary",
        "language": "en",
        "labelType": "xbrl:label",
        "value": "Volume/Monetary"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrlr:Monetary_per_Monetary",
        "value": "Monetary/Monetary"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrlr:Monetary_per_Monetary",
        "value": "Exchange Rate Expressed as: Monetary Unit / Monetary Unit"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrlr:emoji",
        "value": "Image or Emoji Icon"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrlr:emoji",
        "value": "A datatype for associating images or emoji icons with taxonomy objects. Values can be emoji characters, image URLs, or data URIs representing icons for visual representation of taxonomy objects."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrlr:realURL",
        "value": "A URL that references a real link to a resource. If used the URL must be valid."
      }
    ],
    "references": [
      {
        "name": "xbrlr:ITARequirementReference",
        "forObjects": [
          "xbrlr:escaped",
          "xbrlr:xmlNodes",
          "xbrlr:xml",
          "xbrlr:textBlock",
          "xbrlr:percent",
          "xbrlr:perShare",
          "xbrlr:area",
          "xbrlr:volume",
          "xbrlr:mass",
          "xbrlr:weight",
          "xbrlr:energy",
          "xbrlr:power",
          "xbrlr:length",
          "xbrlr:memory"
        ],
        "referenceType": "xbrl:dataTypeRequirement",
        "properties": [
          {
            "property": "ref:Requirement",
            "value": "Interoperable Taxonomy Architecture (ITA) initiative requirement for alignment of the EDINET, IFRS and US GAAP taxonomies."
          }
        ]
      },
      {
        "name": "xbrlr:PartialDateRequirementReference",
        "forObjects": [
          "xbrlr:partialDate"
        ],
        "referenceType": "xbrl:dataTypeRequirement",
        "properties": [
          {
            "property": "ref:Requirement",
            "value": "This data type is required to represent dates at varying levels of temporal precision, from year only through to full date-time. This is needed for financial reporting scenarios where the exact date of a transaction or contract event is not known with full precision — for example, an investment schedule where the maturity year and month of a bond are known but not the exact day. Fabricating a full date in such cases would misrepresent the precision of the data. The type accepts values conforming to ISO 8601 truncated date representations: YYYY, YYYY-MM, YYYY-MM-DD, YYYY-MM-DDTHH, YYYY-MM-DDTHH:MM, or YYYY-MM-DDTHH:MM:SS."
          }
        ]
      },
      {
        "name": "xbrlr:PerUnitReference",
        "forObjects": [
          "xbrlr:monetaryPerLength",
          "xbrlr:monetaryPerArea",
          "xbrlr:monetaryPerVolume",
          "xbrlr:monetaryPerDuration",
          "xbrlr:monetaryPerEnergy",
          "xbrlr:monetaryPerMass",
          "xbrlr:Monetary_per_Monetary"
        ],
        "referenceType": "xbrl:dataTypeRequirement",
        "properties": [
          {
            "property": "ref:Requirement",
            "value": "These types are required in order to enable validation and conversion of units (via the Unit Types Registry) for values that are expressed as a price per unit for various physical measures, and reflect industry-specific common practice."
          }
        ]
      },
      {
        "name": "xbrlr:RecStatusReference",
        "forObjects": [
          "xbrlr:escaped",
          "xbrlr:xmlNodes",
          "xbrlr:xml",
          "xbrlr:textBlock",
          "xbrlr:percent",
          "xbrlr:perShare",
          "xbrlr:area",
          "xbrlr:volume",
          "xbrlr:mass",
          "xbrlr:weight",
          "xbrlr:energy",
          "xbrlr:power",
          "xbrlr:length",
          "xbrlr:memory",
          "xbrlr:noDecimalsMonetary",
          "xbrlr:nonNegativeMonetary",
          "xbrlr:nonNegativeNoDecimalsMonetary",
          "xbrlr:insolation",
          "xbrlr:temperature",
          "xbrlr:pressure",
          "xbrlr:frequency",
          "xbrlr:irradiance",
          "xbrlr:speed",
          "xbrlr:planeAngle",
          "xbrlr:voltage",
          "xbrlr:electricCurrent",
          "xbrlr:force",
          "xbrlr:electricCharge",
          "xbrlr:guidance",
          "xbrlr:flow",
          "xbrlr:massFlow",
          "xbrlr:monetaryPerLength",
          "xbrlr:monetaryPerArea",
          "xbrlr:monetaryPerVolume",
          "xbrlr:monetaryPerDuration",
          "xbrlr:monetaryPerEnergy",
          "xbrlr:monetaryPerMass",
          "xbrlr:dateTime",
          "xbrlr:partialDate",
          "xbrlr:ghgEmissions",
          "xbrlr:energyPerMonetary",
          "xbrlr:ghgEmissionsPerMonetary",
          "xbrlr:volumePerMonetary",
          "xbrlr:enumeration",
          "xbrlr:pure",
          "xbrlr:monetary"
        ],
        "referenceType": "xbrl:specStatus",
        "properties": [
          {
            "property": "ref:Status",
            "value": "REC"
          }
        ]
      }
    ]
  }
}

Appendix D Selection Expression Grammar

This appendix provides the normative formal specification of the structured select statement used in the selections property of the import taxonomy object and the final taxonomy object. The grammar below is defined using JSON Schema fragments and explicit type-compatibility constraints.

D.1 JSON Schema

The following JSON Schema fragment normatively defines the structure of a single entry in the selections array:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://xbrl.org/PWD/2026-09-01/selection-expression",
  "title": "Structured Select Statement",
  "type": "object",
  "required": ["objectType"],
  "additionalProperties": false,
  "properties": {
    "objectType": {
      "type": "string",
      "description": "A QName identifying the model component object type to be selected."
    },
    "where": {
      "type": "array",
      "description": "An array of filter conditions combined with logical AND.",
      "items": {
        "type": "object",
        "required": ["property", "operator", "value"],
        "additionalProperties": false,
        "properties": {
          "property": {
            "type": "string",
            "description": "The name or QName of the property on the selected objects to filter by."
          },
          "operator": {
            "type": "string",
            "enum": ["==", "!=", "in", "not in", "contains", "not contains", ">", "<", ">=", "<="],
            "description": "The comparison operator."
          },
          "value": {
            "description": "The value to compare against. Type must be compatible with the operator and property type.",
            "oneOf": [
              { "type": "string" },
              { "type": "number" },
              { "type": "boolean" },
              { "type": "array", "items": { "oneOf": [{ "type": "string" }, { "type": "number" }] } }
            ]
          }
        }
      }
    }
  }
}

D.2 Operator Type Compatibility

The following table normatively defines which operators are permitted for each property value type. Use of an operator against an incompatible property type MUST raise oimte:invalidSelectionExpression.

Operator String Number Boolean Date (xs:date / xs:dateTime) QName Notes
== Exact equality. QName equality is semantic (see QName Operators below).
!= Inequality. QName inequality is also semantic.
in value MUST be an array. QName membership uses semantic equality.
not in value MUST be an array. QName membership uses semantic equality.
contains Substring match; strings only.
not contains Negative substring match; strings only.
> Lexical / numeric / chronological ordering.
< Lexical / numeric / chronological ordering.
>= Lexical / numeric / chronological ordering.
<= Lexical / numeric / chronological ordering.

Property resolution rules:

Type determination rules:

D.3 Operator Semantics

String operators: Comparisons use Unicode code point order (equivalent to lexicographic ordering per Unicode Standard Annex #10, unless an implementation provides explicit locale-sensitive override).

Number operators: Comparisons use IEEE 754 double-precision numeric ordering.

Date operators: Comparisons use chronological order as defined by ISO 8601. Date-only values (xs:date) are compared as if at midnight UTC. When one operand is timezoned and the other is not, and no implicit timezone is available from the processing context, processors MUST raise oimte:incomparableValues.

QName operators: Two QNames are equal if and only if they resolve to the same {namespace URI, local name} pair after expanding each prefix via the model's namespaces map. String equality of the serialised prefix:localName representation MUST NOT be used. Ordering operators (>, <, >=, <=) and substring operators (contains, not contains) have no defined semantics for QName values and MUST raise oimte:invalidSelectionExpression if applied to a QName property.

Logical combination: Multiple where conditions on a single select statement are combined with logical AND — all conditions must be satisfied. Multiple entries in the selections array are combined with logical OR — an object matching any entry is included.

D.4 Selection Expression Constraints

The following constraints apply to each entry in the selections array. Violation of any constraint MUST cause processors to raise oimte:invalidSelectionExpression:

  1. The objectType property MUST be present and MUST be a syntactically valid QName.
  2. The objectType QName MUST by an object type QName (see Section 5.2).
  3. The objectType property MUST NOT be xbrl:importTaxonomyObject (oimte:invalidReferenceToImportTaxonomyObject).
  4. Each where entry MUST include a property, operator, and value.
  5. When the property name is a QName (i.e. it contains a namespace prefix), the effective value MUST be resolved from the object's properties array as described in the Property Resolution Rules above.
  6. The property must be a valid property of the objectType.
  7. The operator MUST be one of the ten values enumerated in the JSON Schema above.
  8. The operator MUST be compatible with the effective type of the property as defined in the Operator Type Compatibility table.
  9. For in and not in, the value MUST be a non-empty set.
  10. The value MUST be compatible with the effective type of the property.
  11. For all other operators, the value MUST be a JSON primitive.
  12. A where set MAY be empty or absent; in that case all objects of the specified objectType are matched.

Appendix E Core model

[[ PW: [P2] The "spec-taxonomies" directory currently contains the following files:

Case convention seems inconsistent. "sec-transform-types" clearly shouldn't be a "spec" taxononomy. I think we need to differentiate between the genuinely static files that are part of the spec, and ones that will change over time (e.g. iso4217). ]]

{
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": {
      "xbrl": "https://xbrl.org/PWD/2026-09-01",
      "xbrlr": "https://xbrl.org/PWD/2026-09-01/report",
      "xs": "http://www.w3.org/2001/XMLSchema",
      "utr": "https://xbrl.org/PWD/2026-09-01/utr",
      "lei": "http://standards.iso.org/iso/17442",
      "ref": "https://xbrl.org/PWD/2026-09-01/ref"
    },
    "documentNamespacePrefix": "xbrl"
  },
  "xbrlModel": {
    "name": "xbrl:core",
    "frameworkName": "Core",
    "version": "2026",
    "importedTaxonomies": [
      {
        "xbrlModelName": "xs:XMLSchemaTypes"
      },
      {
        "xbrlModelName": "xbrlr:dataTypes"
      },
      {
        "xbrlModelName": "ref:referenceProperties"
      }
    ],
    "cubeTypes": [
      {
        "name": "xbrl:reportCube",
        "coreDimensions": [
          "xbrl:concept",
          "xbrl:period",
          "xbrl:unit",
          "xbrl:entity",
          "xbrl:language"
        ],
        "coreDomainClasses": [
          "xbrl:conceptDomain"
        ]
      },
      {
        "name": "xbrl:negativeCube",
        "baseCubeType": "xbrl:reportCube"
      }
    ],
    "modelTypes": [
      {
        "name": "xbrl:taxonomy",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:headingObject",
          "xbrl:memberObject",
          "xbrl:cubeObject",
          "xbrl:dimensionObject",
          "xbrl:domainNetworkObject",
          "xbrl:domainClassObject",
          "xbrl:networkObject",
          "xbrl:relationshipObject",
          "xbrl:groupObject",
          "xbrl:groupContentObject",
          "xbrl:groupTreeObject",
          "xbrl:labelObject",
          "xbrl:referenceObject",
          "xbrl:propertyTypeObject",
          "xbrl:relationshipTypeObject",
          "xbrl:cubeTypeObject",
          "xbrl:dataTypeObject",
          "xbrl:labelTypeObject",
          "xbrl:referenceTypeObject",
          "xbrl:importTaxonomyObject",
          "xbrl:finalTaxonomyObject",
          "xbrl:layoutObject"
        ]
      },
      {
        "name": "xbrl:report",
        "allowedObjects": [
          "xbrl:factObject",
          "xbrl:footnoteObject",
          "xbrl:entityObject",
          "xbrl:unitObject",
          "xbrl:importTaxonomyObject",
          "xbrl:networkObject"
        ],
        "requiredProperties": [
          "xbrl:reportDate"
        ]
      }
    ],
    "dimensions": [
      {
        "name": "xbrl:concept",
        "domainClass": "xbrl:conceptDomain"
      },
      {
        "name": "xbrl:unit",
        "domainClass": "xbrl:unitDomain"
      },
      {
        "name": "xbrl:period",
        "domainClass": "xbrl:periodDomain"
      },
      {
        "name": "xbrl:entity",
        "domainClass": "xbrl:entityDomain"
      },
      {
        "name": "xbrl:language",
        "domainClass": "xbrl:languageDomain"
      }
    ],
    "domainClasses": [
      {
        "name": "xbrl:conceptDomain",
        "allowedDomainItem": "xbrl:conceptObject"
      },
      {
        "name": "xbrl:periodDomain",
        "allowedDomainItem": "xs:dateTime"
      },
      {
        "name": "xbrl:unitDomain",
        "allowedDomainItem": "xbrl:unitObject"
      },
      {
        "name": "xbrl:entityDomain",
        "allowedDomainItem": "xbrl:entityObject"
      },
      {
        "name": "xbrl:languageDomain",
        "allowedDomainItem": "xbrl:languageType"
      },
      {
        "name": "xbrl:traitDomain",
        "allowedDomainItem": "xbrl:memberObject"
      },
      {
        "name": "xbrl:nilReasonDomainClass",
        "allowedDomainItem": "xbrl:memberObject"
      },
      {
        "name": "xbrl:checksumAlgorithmDomainClass",
        "allowedDomainItem": "xbrl:memberObject"
      }
    ],
    "labelTypes": [
      {
        "name": "xbrl:label",
        "uri": "http://www.xbrl.org/2003/role/label",
        "formatType": "text"
      },
      {
        "name": "xbrl:terseLabel",
        "uri": "http://www.xbrl.org/2003/role/terseLabel",
        "formatType": "text"
      },
      {
        "name": "xbrl:verboseLabel",
        "uri": "http://www.xbrl.org/2003/role/verboseLabel",
        "formatType": "text"
      },
      {
        "name": "xbrl:positiveLabel",
        "uri": "http://www.xbrl.org/2003/role/positiveLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positiveTerseLabel",
        "uri": "http://www.xbrl.org/2003/role/positiveTerseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positiveVerboseLabel",
        "uri": "http://www.xbrl.org/2003/role/positiveVerboseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativeLabel",
        "uri": "http://www.xbrl.org/2003/role/negativeLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativeTerseLabel",
        "uri": "http://www.xbrl.org/2003/role/negativeTerseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativeVerboseLabel",
        "uri": "http://www.xbrl.org/2003/role/negativeVerboseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:zeroLabel",
        "uri": "http://www.xbrl.org/2003/role/zeroLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:zeroTerseLabel",
        "uri": "http://www.xbrl.org/2003/role/zeroTerseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:zeroVerboseLabel",
        "uri": "http://www.xbrl.org/2003/role/zeroVerboseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:totalLabel",
        "uri": "http://www.xbrl.org/2003/role/totalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:periodStartLabel",
        "uri": "http://www.xbrl.org/2003/role/periodStartLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:periodEndLabel",
        "uri": "http://www.xbrl.org/2003/role/periodEndLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:documentation",
        "uri": "http://www.xbrl.org/2003/role/documentation",
        "formatType": "text"
      },
      {
        "name": "xbrl:definitionGuidance",
        "uri": "http://www.xbrl.org/2003/role/definitionGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:disclosureGuidance",
        "uri": "http://www.xbrl.org/2003/role/disclosureGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:presentationGuidance",
        "uri": "http://www.xbrl.org/2003/role/presentationGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:measurementGuidance",
        "uri": "http://www.xbrl.org/2003/role/measurementGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:commentaryGuidance",
        "uri": "http://www.xbrl.org/2003/role/commentaryGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:exampleGuidance",
        "uri": "http://www.xbrl.org/2003/role/exampleGuidance",
        "formatType": "text"
      },
      {
        "name": "xbrl:deprecatedDateLabel",
        "uri": "http://www.xbrl.org/2009/role/deprecatedDateLabel",
        "formatType": "text"
      },
      {
        "name": "xbrl:deprecatedLabel",
        "uri": "http://www.xbrl.org/2009/role/deprecatedLabel",
        "formatType": "text"
      },
      {
        "name": "xbrl:negated",
        "uri": "http://xbrl.us/us-gaap/role/label/negated",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedNetLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedNetLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedPeriodEnd",
        "uri": "http://xbrl.us/us-gaap/role/label/negatedPeriodEnd",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedPeriodEndLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedPeriodEndLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedPeriodStart",
        "uri": "http://xbrl.us/us-gaap/role/label/negatedPeriodStart",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedPeriodStartLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedPeriodStartLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedTerseLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedTerseLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedTotal",
        "uri": "http://xbrl.us/us-gaap/role/label/negatedTotal",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negatedTotalLabel",
        "uri": "http://www.xbrl.org/2009/role/negatedTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativePeriodEndLabel",
        "uri": "http://www.xbrl.org/2009/role/negativePeriodEndTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativePeriodEndTotalLabel",
        "uri": "http://www.xbrl.org/2009/role/negativePeriodEndTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativePeriodStartLabel",
        "uri": "http://www.xbrl.org/2009/role/negativePeriodStartLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:negativePeriodStartTotalLabel",
        "uri": "http://www.xbrl.org/2009/role/negativePeriodStartTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:netLabel",
        "uri": "http://www.xbrl.org/2009/role/netLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positivePeriodEndLabel",
        "uri": "http://www.xbrl.org/2009/role/positivePeriodEndLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positivePeriodEndTotalLabel",
        "uri": "http://www.xbrl.org/2009/role/positivePeriodStartTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positivePeriodStartLabel",
        "uri": "http://www.xbrl.org/2009/role/positivePeriodStartLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:positivePeriodStartTotalLabel",
        "uri": "http://www.xbrl.org/2009/role/positivePeriodStartTotalLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:restatedLabel",
        "uri": "http://www.xbrl.org/2006/role/restatedLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:symbolLabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrl:iconLabel",
        "formatType": "text"
      },
      {
        "name": "xbrl:errorMessage",
        "formatType": "text"
      }
    ],
    "labels": [
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:label",
        "value": "Standard Label"
      },
      {
        "labelType": "xbrl:iconLabel",
        "language": "en",
        "forObject": "xbrl:nilReasonDomainClass",
        "value": "∅"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:label",
        "value": "Standard label for an object."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:terseLabel",
        "value": "Short label for an object, often omitting text that should be inferable when the object is reported in the context of other related objects."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:verboseLabel",
        "value": "Extended label for an object, making sure not to omit text that is required to enable the label to be understood on a stand alone basis."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positiveLabel",
        "value": "Label for a concept, when the value being presented is positive. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positiveTerseLabel",
        "value": "Label for a concept, when the value being presented is positive. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positiveVerboseLabel",
        "value": "Label for a concept, when the value being presented is positive. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativeLabel",
        "value": "Label for a concept, when the value being presented is negative. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativeTerseLabel",
        "value": "Label for a concept, when the value being presented is negative. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativeVerboseLabel",
        "value": "Label for a concept, when the value being presented is negative. For example, the standard and standard positive labels might be 'profit after tax' and the standard negative labels 'loss after tax', the terse label and terse positive labels might both be 'profit', while the negative terse label might be 'loss'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:zeroLabel",
        "value": "Label for a concept, when the value being presented is  zero."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:zeroTerseLabel",
        "value": "Label for a concept, when the value being presented is  zero."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:zeroVerboseLabel",
        "value": "Label for a concept, when the value being presented is  zero."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:totalLabel",
        "value": "The label for a concept for use in presenting values associated with the concept when it is being reported as the total of a set of other values."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:periodStartLabel",
        "value": "The label for a concept with periodType='instant' for use in presenting values associated with the concept when it is being reported as a start (end) of period value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:periodEndLabel",
        "value": "The label for a concept with periodType='instant' for use in presenting values associated with the object when it is being reported as a start (end) of period value."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:documentation",
        "value": "Documentation"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:documentation",
        "value": "Documentation of an object, providing an explanation of its meaning and its appropriate usage and any other documentation deemed necessary."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:definitionGuidance",
        "value": "A precise definition of an object, providing an explanation of its meaning and its appropriate usage."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:disclosureGuidance",
        "value": "An explanation of the disclosure requirements relating to the object. Indicates whether the disclosure is mandatory (i.e. prescribed by authoritative literature); recommended (i.e. encouraged by authoritative literature); common practice (i.e. not prescribed by authoritative literature, but disclosure is common); structural completeness (i.e., included to complete the structure of the taxonomy)."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:presentationGuidance",
        "value": "An explanation of the rules guiding presentation (placement and/or labelling) of this object in the context of other objects in one or more specific types of business reports. For example, 'Net Surplus should be disclosed on the face of the Profit and Loss statement'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:measurementGuidance",
        "value": "An explanation of the method(s) required to be used when measuring values associated with this object in business reports."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:commentaryGuidance",
        "value": "Any other general commentary on the object that assists in determining definition, disclosure, measurement, presentation or usage."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:exampleGuidance",
        "value": "An example of the type of information intended to be captured by the object."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:commonPracticeRef",
        "value": "Reference to documentation that details common practice."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:deprecatedDateLabel",
        "value": "Label indicating the date when the concept was deprecated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:deprecatedLabel",
        "value": "Label indicating that the concept is deprecated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negated",
        "value": "When this label is the preferred label on a presentation arc whose target is an element having a numeric type, a conforming processor will not only present the fact using the specified label but will also present the its fact values negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedLabel",
        "value": "Label for a concept, when the value being presented should be negated (sign of the value should be 'flipped'). For example, the standard and standard positive labels might be 'profit (loss) after tax' and the negated labels 'loss (profit) after tax'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedNetLabel",
        "value": "Label indicating that the net value is negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedPeriodEnd",
        "value": "Indicates that the period end value is negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedPeriodEndLabel",
        "value": "Label for a concept, when the value being presented should be negated (sign of the value should be 'flipped'). For example, the standard and standard positive labels might be 'profit (loss) after tax' and the negated labels 'loss (profit) after tax'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedPeriodStart",
        "value": "Indicates that the period start value is negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedPeriodStartLabel",
        "value": "Label for a concept, when the value being presented should be negated (sign of the value should be 'flipped'). For example, the standard and standard positive labels might be 'profit (loss) after tax' and the negated labels 'loss (profit) after tax'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedTerseLabel",
        "value": "Short label indicating that the value is negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedTotal",
        "value": "Indicates that the total value is negated."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negatedTotalLabel",
        "value": "Label for a concept, when the value being presented should be negated (sign of the value should be 'flipped'). For example, the standard and standard positive labels might be 'profit (loss) after tax' and the negated labels 'loss (profit) after tax'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativePeriodEndLabel",
        "value": "Label for a concept with periodType='instant' for use in presenting values associated with the concept when it is being reported as a negative period end value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativePeriodEndTotalLabel",
        "value": "Label for a concept with periodType='instant' for use in presenting values associated with the concept when it is being reported as a negative period end total value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativePeriodStartLabel",
        "value": "Label for a concept with periodType='instant' for use in presenting values associated with the concept when it is being reported as a negative period start value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativePeriodStartTotalLabel",
        "value": "Label for a concept, when the value being presented is negative."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:netLabel",
        "value": "The label for a concept for use in presenting values associated with the concept when it is being reported as the net of a set of other values. Net labels allows for expressing different labels than the one which would be used as total label if the presentation tree represents gross/net calculation instead of traditional calculation roll-up. For example standard label for 'Property, plant and equipment' can have total label 'Total property, plant and equipment' and net label 'Net property, plant and equipment'."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positivePeriodEndLabel",
        "value": "Label for a concept, when the value being presented is positive."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positivePeriodEndTotalLabel",
        "value": "Label for a concept, when the value being presented is positive."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positivePeriodStartLabel",
        "value": "Label for a concept with periodType='instant' for use in presenting values associated with the concept when it is being reported as a positive period start value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:positivePeriodStartTotalLabel",
        "value": "Label for a concept, when the value being presented is positive."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:restatedLabel",
        "value": "At times an entity may restate certain account balances for financial reporting purposes. This may only occur according to specific reporting rules. For example, an entity may restate an equity account balance, say 'Reserves', due to an accounting change or fundamental error under International Financial Reporting Standards (IFRS). A separate label role is provided for such reporting of restated amounts, should they occur. The restated amount within a financial statement might provide a label such as 'Reserves, Restated Balance' to which this label role would be assigned to identify this type of label. Taxonomy creators would use this label role and provide a label which could be used on concepts that could be restated. Typically, these would be used on equity accounts."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:symbolLabel",
        "value": "Label for a unit, when the unit is represented by a symbol."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:iconLabel",
        "value": "Icon Label"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:iconLabel",
        "value": "Label that can be used to associate images or emoji icons with different defined objects in the taxonomy. This label type uses the emoji datatype and can be applied to any model object to provide visual representation through icons, emoji, or image references."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:reference",
        "value": "Standard reference for a Concept"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:definitionRef",
        "value": "Reference to documentation that details a precise definition of the object."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:disclosureRef",
        "value": "Reference to documentation that details an explanation of the disclosure requirements relating to the object. Specified categories include: mandatory, recommended"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:mandatoryDisclosureRef",
        "value": "Reference to documentation that details an explanation of the disclosure requirements relating to the object. Specified categories include: mandatory"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:recommendedDisclosureRef",
        "value": "Reference to documentation that details an explanation of the disclosure requirements relating to the object. Specified categories include: recommended"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:unspecifiedDisclosureRef",
        "value": "Reference to documentation that details an explanation of the disclosure requirements relating to the object. Unspecified categories include, but are not limited to: common practice, structural completeness. The latter categories do not reference documentation but are indicated in the link role to indicate why the Concept has been included in the taxonomy."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:presentationRef",
        "value": "Reference to documentation which details an explanation of the presentation, placement or labelling of this object in the context of other objects in one or more specific types of business reports"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:measurementRef",
        "value": "Reference concerning the method(s) required to be used when measuring values associated with this object in business reports"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:commentaryRef",
        "value": "Any other general commentary on the object that assists in determining appropriate usage"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:exampleRef",
        "value": "Reference to documentation that illustrates by example the application of the object that assists in determining appropriate usage."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dep-concept-deprecatedConcept",
        "value": "Deprecated: concept - deprecated concept."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dep-aggregateConcept-deprecatedPartConcept",
        "value": "Deprecated: aggreate concept - deprecated part concept."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dep-dimensionallyQualifiedConcept-deprecatedConcept",
        "value": "Deprecated: dimensionally qualified concept - deprecated concept."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dep-mutuallyExclusiveConcept-deprecatedConcept",
        "value": "Deprecated: mutually exclusive concept - deprecated concept."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dep-partConcept-deprecatedAggregateConcept",
        "value": "Deprecated: part concept - deprecated aggregate concept."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:aggregation",
        "value": "Population Aggregation Method (sum, avg, min, max, etc.)"
      },
      {
        "forObject": "xbrl:concept",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "Represents the concept core dimension in a taxonomy.  The concept dimension is used to identify concepts that have  measurable facts (for example, a numeric or textual fact). Concepts have data types, period types and may have properties and labels."
      },
      {
        "forObject": "xbrl:unit",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "Represents the unit core dimension in a taxonomy. Only unit objects can be added to the unit dimension. Each unit object defines the unit of measure associated with numeric facts, for example 'USD' or 'ug/m3'. Units may be simple or composed with numerators and denominators."
      },
      {
        "forObject": "xbrl:period",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The period core dimension identifies the reporting period associated with a fact. Period values may be instants, durations, or open intervals, depending on the taxonomy."
      },
      {
        "forObject": "xbrl:entity",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The entity core dimension identifies the reporting entity or subject of the fact. Entity identifiers used on this dimension may be expressed as LEIs, names or other identifiers as defined by the taxonomy."
      },
      {
        "forObject": "xbrl:traitDomain",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A domain used to express trait values or annotations that can be applied to objects. Trait domains are typically used to model property-like annotations in the taxonomy."
      },
      {
        "forObject": "xbrl:conceptDomain",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A concept domain groups concept members that can be referenced by cubes and dimensions. It is the domain used when a cube restricts the concept dimension to a subset of concepts."
      },
      {
        "forObject": "xbrl:unitDomain",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A unit domain groups unit definitions for use by concepts and facts. It allows taxonomies to declare a set of preferred or allowed units."
      },
      {
        "forObject": "xbrl:semanticLink",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A semantic link is a relationship type used to express semantic associations between objects, for example to indicate equivalence, suggested mappings or explanatory links."
      },
      {
        "forObject": "xbrl:weight",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A weight link property is used on certain relationship types (for example summation-item) to indicate the multiplier applied to the source when computing aggregates."
      },
      {
        "forObject": "xbrl:reconciliation",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A reconciliation link property is a boolean value used on a summation-item relationship types to indicate that the source and target xbrla:balance can be the same and have a -1 weight or be different and have a +1 weight."
      },
      {
        "forObject": "xbrl:preferredLabel",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The preferredLabel link property indicates which label role should be used as the preferred human-readable label for presentation."
      },
      {
        "forObject": "xbrl:reportAttribute",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "Report attributes are properties attached to concepts objects to indicate how a concept in a taxonomy maps to standard report attributes such as reporting period end, or report type."
      },
      {
        "forObject": "xbrl:traitLinkType",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A traitLinkType is a custom link property used to express typed property relationships between objects and trait domains."
      },
      {
        "forObject": "xbrl:parent-child",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The parent-child relationship type is used to build hierarchical structures (trees) between model objects such as concepts, members, and domains."
      },
      {
        "forObject": "xbrl:class-subclass",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The class-subclass relationship type expresses a subclassing relationship between concepts indicating a tighter or more specific definition."
      },
      {
        "forObject": "xbrl:propertyValue-object",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "A propertyValue-object link expresses the assignment of a property value to a target model object, used to model custom properties in the taxonomy."
      },
      {
        "forObject": "xbrl:concept-refDimension",
        "labelType": "xbrl:documentation",
        "language": "en",
        "value": "The concept-refDimension relationship links a concept to a dimension indicating that the value of the concept in a detailed cube may be the key of a dimension is a summarized cube."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:reportCube",
        "value": "Cube type representing a report or statement where period and entity core dimensions are expected."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:negativeCube",
        "value": "Negative Cube Type"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:negativeCube",
        "value": "Cube type used for negative assertions and exclusions in validation rules. Based on xbrl:reportCube, it specifies dimensional combinations that should NOT appear in a report or are prohibited in certain contexts. Negative cubes are commonly used in taxonomy validation to define forbidden fact patterns or to express constraints on what dimensional combinations are invalid."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:language",
        "value": "Core dimension used to indicate the language of a fact where applicable."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:summation-item",
        "value": "Relationship type that indicates the source contributes to the target as part of a summation (aggregation) with an associated weight."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:general-special",
        "value": "Relationship type used to indicate a general-to-special relationship between concepts (a refinement or more specific version)."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:concept-aggDimension",
        "value": "Relationship type that links a concept to a dimension when the concept represents an aggregation over that dimension (aggregation specified on the relationship)."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:unit-factConcept",
        "value": "Relationship type indicating a unit applies to a fact concept or group of concepts."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:unitFact-factConcept",
        "value": "Relationship type used for mapping unit-fact constructs between concept objects when unit-specific facts are modelled."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:conceptObject",
        "value": "Concept Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:relationshipObject",
        "value": "Relationship Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:referenceObject",
        "value": "Reference Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:dimensionObject",
        "value": "Dimension Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:domainClassObject",
        "value": "Domain Class Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:headingObject",
        "value": "Abstract Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:factObject",
        "value": "Fact Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:factObject",
        "value": "Represents a fact or data point in an XBRL report. Facts contain one or more fact values along with their dimensional context (concept, period, entity, unit, and other dimensions)."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:cubeObject",
        "value": "Cube Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:unitObject",
        "value": "Unit Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:networkObject",
        "value": "Network"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:entityObject",
        "value": "Entity Object"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:taxonomy",
        "value": "Taxonomy Model Type"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:taxonomy",
        "value": "The taxonomy model type defines the structure and metadata for an XBRL taxonomy. Taxonomies contain concepts, dimensions, cubes, relationships, networks, labels, references, and other objects that define the reporting framework. A taxonomy provides the semantic framework that defines what can be reported and how it should be structured."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:report",
        "value": "Report Model Type"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:report",
        "value": "The report model type represents an XBRL instance document or report containing actual fact data. Reports contain facts, footnotes, entities, and units that provide the actual reported information according to the rules defined in one or more taxonomies. Each report must specify a report date and typically references one or more taxonomies that define the valid reporting structures and concepts."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:specificationErrorURI",
        "value": "Spec Error URI"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:xBRL-JSON",
        "value": "OIM JSON Fact Map"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:xBRL-JSON",
        "value": "Standard fact map for mapping facts from OIM JSON format to the XBRL model format. This map handles the transformation of JSON-based XBRL data into the Open Information Model structure."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:xBRL-XML",
        "value": "xBRL-XML Fact Map"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:xBRL-XML",
        "value": "Standard fact map for mapping facts from traditional XBRL 2.1 XML format to the XBRL model format. This map handles the transformation of XML-based XBRL v2.1 instance documents into the Open Information Model structure."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:cubeDimensionObject",
        "value": "Cube Dimension Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:cubeDimensionObject",
        "value": "Defines the association between a cube and a dimension, specifying which dimensions are used in a particular cube structure and any constraints on those dimensions."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:cubeTypeObject",
        "value": "Cube Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:cubeTypeObject",
        "value": "Defines a type of cube structure that specifies core dimensions and constraints. Cube types provide templates for creating cubes with predefined dimensional structures."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:dataTypeObject",
        "value": "Data Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:dataTypeObject",
        "value": "Defines a data type that can be used for concept values, extending or restricting XML Schema data types with XBRL-specific semantics and validation rules."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:domainNetworkObject",
        "value": "Domain Network Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:domainNetworkObject",
        "value": "Represents a domain member that can be used as a valid value on a dimension. Domains organize the members that categorize facts along a particular dimension."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:factMapObject",
        "value": "Fact Map Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:factMapObject",
        "value": "Defines a mapping template for transforming facts from external formats (XBRL 2.1 XML, OIM JSON, CSV, etc.) into the XBRL model format. Fact maps specify how to extract dimensions, values, and metadata from source data."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:factSourceObject",
        "value": "Fact Source Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:factSourceObject",
        "value": "Links a fact map to a specific data source, enabling the import of facts from external files or systems. Fact sources specify the location and format of external fact data."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:finalTaxonomyObject",
        "value": "Final Taxonomy Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:finalTaxonomyObject",
        "value": "Marks a taxonomy as final, preventing further imports or extensions. Final taxonomies are sealed and cannot be modified or extended by importing models."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:footnoteObject",
        "value": "Footnote Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:footnoteObject",
        "value": "Represents a footnote or explanatory note that provides additional context, explanations, or disclosures related to facts in the report."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:groupContentObject",
        "value": "Group Content Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:groupContentObject",
        "value": "Defines the content model for a group, specifying which objects or patterns can appear within the group structure."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:groupObject",
        "value": "Group Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:groupObject",
        "value": "Defines a reusable group of model objects that can be referenced by multiple networks or structures, promoting modularity and reuse in taxonomy design."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:groupTreeObject",
        "value": "Group Tree Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:groupTreeObject",
        "value": "Represents a specific instantiation of a group with its hierarchical tree structure, including any local modifications or extensions to the base group definition."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:importTaxonomyObject",
        "value": "Import Taxonomy Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:importTaxonomyObject",
        "value": "Declares the import of another taxonomy, making its objects and definitions available for use. Imports support modular taxonomy development and selective object inclusion."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:labelObject",
        "value": "Label Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:labelObject",
        "value": "Provides human-readable text labels for model objects in different languages and label types (standard, terse, verbose, documentation, etc.)."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:labelTypeObject",
        "value": "Label Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:labelTypeObject",
        "value": "Defines a type of label that can be associated with model objects, such as standard labels, terse labels, documentation, or custom label types for specific purposes."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:memberObject",
        "value": "Member Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:memberObject",
        "value": "Represents a member that can be used as a valid value for dimensions. Members provide the enumeration values for typed or explicit dimensions."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:modelTypeObject",
        "value": "Model Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:modelTypeObject",
        "value": "Defines constraints on XBRL models by specifying allowed object types, allowed properties, and required properties. Model types enable regulatory authorities to define specific report profiles."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:propertyObject",
        "value": "Property Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:propertyObject",
        "value": "Associates a property value with a model object, allowing the attachment of additional metadata and characteristics to concepts, dimensions, and other taxonomy elements."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:propertyTypeObject",
        "value": "Property Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:propertyTypeObject",
        "value": "Defines a type of property that can be attached to model objects, specifying the property's data type, allowed objects, and whether it is definitional."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:referenceTypeObject",
        "value": "Reference Type Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:referenceTypeObject",
        "value": "Defines a type of reference that can link model objects to authoritative literature, standards, or documentation sources."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:xbrlModelObject",
        "value": "XBRL Model Object"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:xbrlModelObject",
        "value": "The root model object representing an entire XBRL taxonomy or report. Contains all objects, relationships, and metadata that comprise a complete XBRL model."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:defaultLanguage",
        "value": "A built-in property type that specifies the default BCP 47 language for text-valued objects (such as footnotes and text-typed facts) within the model. When a text-valued object does not declare an explicit language, processors MAY use the value of this property on the enclosing XBRL model object as the inherited language. This property may only be applied to the xbrl:xbrlModelObject."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:htmlElementId",
        "value": "The HTML id attribute value of the span element whose inner text content contributes to the fact value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:htmlEscape",
        "value": "If true, the value is the escaped markup representation; otherwise the concatenated descendant text content is used. Defaults to false."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:htmlDataAttribute",
        "value": "The name of a data-* HTML attribute on an element whose value contributes to the fact value (e.g. data-xbrl-ref)."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pdfFormField",
        "value": "The field name of a PDF form field whose content contributes to the fact value."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pdfPage",
        "value": "The 1-based page number within the PDF document."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pdfMcid",
        "value": "The Marked Content Identifier (MCID) of a PDF content item."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pdfElementId",
        "value": "The structure element identifier within the PDF document's logical structure tree."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pdfEscape",
        "value": "If true, the value is the escaped representation of PDF content. Defaults to false."
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:tabularPath",
        "value": "A tabularPath expression identifying a row, column, or cell in a tabular data source (CSV, spreadsheet). See the tabular path grammar appendix."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:errorMessage",
        "value": "Error Message"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:conformanceErrorsProduced",
        "value": "Errors Produced"
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:unknownNilReason",
        "value": "Unknown"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:unknownNilReason",
        "value": "The value is nil for an unknown reason."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:unavailableNilReason",
        "value": "Unavailable"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:unavailableNilReason",
        "value": "The value is nil because the information is unavailable, for example because it has not yet been collected or computed."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:withheldNilReason",
        "value": "Withheld"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:withheldNilReason",
        "value": "The value is nil because the reporting entity has chosen not to disclose it, even though it is known."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:immaterialNilReason",
        "value": "Immaterial"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:immaterialNilReason",
        "value": "The value is nil because it is considered immaterial or insignificant in the context of the report."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:confidentialNilReason",
        "value": "Confidential"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:confidentialNilReason",
        "value": "The value is nil because it is confidential and cannot be disclosed in this report."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:redactedNilReason",
        "value": "Redacted"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:redactedNilReason",
        "value": "The value has been intentionally removed or obscured from the report, for example for legal or regulatory reasons."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:notApplicableNilReason",
        "value": "Not Applicable"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:notApplicableNilReason",
        "value": "The concept does not apply to the reporting entity or reporting period, so no value exists."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:pendingNilReason",
        "value": "Pending"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:pendingNilReason",
        "value": "The value is nil because it is not yet finalised and is expected to be provided in a future report."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:notRequiredNilReason",
        "value": "Not Required"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:notRequiredNilReason",
        "value": "The value is nil because the applicable reporting rules do not require it to be disclosed in this context."
      },
      {
        "labelType": "xbrl:label",
        "language": "en",
        "forObject": "xbrl:otherNilReason",
        "value": "Other"
      },
      {
        "labelType": "xbrl:documentation",
        "language": "en",
        "forObject": "xbrl:otherNilReason",
        "value": "The value is nil for a reason not covered by the other nil reason members."
      },
      {
        "forObject": "xbrl:SQName",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "SQName provides a simple type. This can be used to define typed dimensions domains that take SQName values. The prefix used in an SQName MUST correspond to a namespace prefix that is in scope at the point of use."
      },
      {
        "forObject": "xbrl:prefixedContent",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "prefixedContent denotes values that rely for correct interpretation on namespace-prefix bindings in scope at the point of use. All item types that involve prefixed content should derive (directly or indirectly) from QName or prefixedContent Processors MUST raise an error if they encounter a fact with a type that is a subtype of prefixedContent that they do not recognise (unless that subtype is itself derived from a subtype that is recognised) as knowledge of the structure of the prefixed content is required to correctly preserve and present such content."
      },
      {
        "forObject": "xbrl:noLangToken",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "noLangToken is a derivation of token and is used to denote values that should not have an associated language. This is typically used for values that are unique identifiers, rather than human-readable strings."
      },
      {
        "forObject": "xbrl:noLangString",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "noLangString is a derivation of string and is used to denote values that should not have an associated language. This is typically used for values that are unique identifiers, rather than human-readable strings."
      },
      {
        "forObject": "xbrl:rootSource",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The root source identifies a single point for network roots and group tree object roots to be anchored by a relationship object. This allows multiple network roots to be defined and ordered in a network hierarchy. The root source QName need not be visible by tools and is defined using the same QName across all network objects and group tree objects. The QName xbrl:rootSource is used to define the root source."
      },
      {
        "forObject": "xbrl:rootSource",
        "language": "en",
        "labelType": "xbrl:label",
        "value": "Root Source QName"
      },
      {
        "forObject": "xbrl:nil",
        "language": "en",
        "labelType": "xbrl:documentation",
        "value": "The nil property indicates a fact is nil and the reason why it is nil. The nil property defines a fact object value is not disclosed, and the reason why. This can be due to the fact being immaterial, confidential, unknown, or not yet available. A fact with a property of nil does not imply it is zero, however for calculation relationships it is excluded from the calculation. The nil property can only be used with concepts that have a nillable property that is not false."
      }
    ],
    "namespacePrefixes": [
      {
        "namespace": "https://xbrl.org/PWD/2026-09-01",
        "preferredPrefixes": [
          "xbrl"
        ]
      },
      {
        "namespace": "https://xbrl.org/PWD/2026-09-01/report",
        "preferredPrefixes": [
          "xbrlr"
        ]
      },
      {
        "namespace": "http://www.w3.org/2001/XMLSchema",
        "preferredPrefixes": [
          "xs"
        ]
      },
      {
        "namespace": "https://xbrl.org/PWD/2026-09-01/utr",
        "preferredPrefixes": [
          "utr"
        ]
      }
    ],
    "propertyTypes": [
      {
        "name": "xbrl:semanticLink",
        "dataType": "xs:anyURI",
        "definitional": false,
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:weight",
        "dataType": "xbrlr:weightType",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:usable",
        "dataType": "xs:boolean",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:reconciliation",
        "dataType": "xs:boolean",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:aggregation",
        "dataType": "xbrlr:aggregationType",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject",
          "xbrl:conceptObject",
          "xbrl:dimensionObject",
          "xbrl:domainClassObject"
        ]
      },
      {
        "name": "xbrl:referenceCubeName",
        "dataType": "xs:QName",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:preferredLabel",
        "dataType": "xs:QName",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject",
          "xbrl:networkObject"
        ]
      },
      {
        "name": "xbrl:reportAttribute",
        "dataType": "xbrlr:reportAttributeType",
        "definitional": false,
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:traitLinkType",
        "dataType": "xs:QName",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:abstractDataType",
        "dataType": "xs:QName",
        "definitional": false,
        "allowedObjects": [
          "xbrl:headingObject"
        ]
      },
      {
        "name": "xbrl:severity",
        "dataType": "xs:string",
        "definitional": true,
        "allowedObjects": [
          "xbrl:memberObject"
        ]
      },
      {
        "name": "xbrl:conformanceTestFileName",
        "dataType": "xs:string",
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:conformanceStatus",
        "dataType": "xs:string",
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:conformanceErrorsProduced",
        "dataType": "xs:integer",
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:conformanceTestDescription",
        "dataType": "xs:string",
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:specificationErrorURI",
        "dataType": "xbrlr:realURL",
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:validationLocation",
        "dataType": "xs:string",
        "allowedObjects": [
          "xbrl:memberObject"
        ]
      },
      {
        "name": "xbrl:reportDate",
        "dataType": "xs:date",
        "allowedObjects": [
          "xbrl:xbrlModelObject"
        ]
      },
      {
        "name": "xbrl:reportFilingDate",
        "dataType": "xs:dateTime",
        "allowedObjects": [
          "xbrl:xbrlModelObject"
        ]
      },
      {
        "name": "xbrl:defaultLanguage",
        "dataType": "xbrl:languageType",
        "allowedObjects": [
          "xbrl:xbrlModelObject"
        ]
      },
      {
        "name": "xbrl:propertyValue",
        "dataType": "xs:anySimpleType",
        "definitional": false,
        "allowedObjects": [
          "xbrl:relationshipObject"
        ]
      },
      {
        "name": "xbrl:factLocation",
        "dataType": "xs:QName",
        "definitional": false,
        "allowedObjects": [
          "xbrl:groupObject"
        ]
      },
      {
        "name": "xbrl:nil",
        "dataType": "xs:QName",
        "enumerationDomain": "xbrl:nilReasonType",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factObject"
        ]
      },
      {
        "name": "xbrl:htmlElementId",
        "dataType": "xbrlr:stringCollection",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject",
          "xbrl:factValueAnchorObject"
        ]
      },
      {
        "name": "xbrl:htmlEscape",
        "dataType": "xs:boolean",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:htmlDataAttribute",
        "dataType": "xs:string",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:pdfFormField",
        "dataType": "xs:string",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:pdfPage",
        "dataType": "xs:integer",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:pdfMcid",
        "dataType": "xbrlr:stringCollection",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:pdfElementId",
        "dataType": "xs:string",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:pdfEscape",
        "dataType": "xs:boolean",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      },
      {
        "name": "xbrl:tabularPath",
        "dataType": "xs:string",
        "definitional": false,
        "allowedObjects": [
          "xbrl:factValueSourceObject"
        ]
      }
    ],
    "factLocatorTypes": [
      {
        "name": "xbrl:htmlElementLocatorType",
        "sourceMediaType": "text/html",
        "requiredProperties": [
          "xbrl:htmlElementId"
        ],
        "allowedProperties": [
          "xbrl:htmlElementId"
        ]
      },
      {
        "name": "xbrl:htmlDataAttributeLocatorType",
        "sourceMediaType": "text/html",
        "requiredProperties": [
          "xbrl:htmlDataAttribute"
        ],
        "allowedProperties": [
          "xbrl:htmlDataAttribute"
        ]
      },
      {
        "name": "xbrl:pdfFormFieldLocatorType",
        "sourceMediaType": "application/pdf",
        "requiredProperties": [
          "xbrl:pdfFormField"
        ],
        "allowedProperties": [
          "xbrl:pdfFormField"
        ]
      },
      {
        "name": "xbrl:pdfContentLocatorType",
        "sourceMediaType": "application/pdf",
        "requiredProperties": [
          "xbrl:pdfPage"
        ],
        "allowedProperties": [
          "xbrl:pdfPage",
          "xbrl:pdfMcid",
          "xbrl:pdfElementId",
          "xbrl:pdfEscape"
        ]
      },
      {
        "name": "xbrl:tabularLocatorType",
        "sourceMediaType": "text/csv",
        "requiredProperties": [
          "xbrl:tabularPath"
        ],
        "allowedProperties": [
          "xbrl:tabularPath"
        ]
      }
    ],
    "referenceTypes": [
      {
        "name": "xbrl:reference",
        "uri": "http://www.xbrl.org/2003/role/reference"
      },
      {
        "name": "xbrl:definitionRef",
        "uri": "http://www.xbrl.org/2003/role/definitionRef"
      },
      {
        "name": "xbrl:disclosureRef",
        "uri": "http://www.xbrl.org/2003/role/disclosureRef"
      },
      {
        "name": "xbrl:mandatoryDisclosureRef",
        "uri": "http://www.xbrl.org/2003/role/mandatoryDisclosureRef"
      },
      {
        "name": "xbrl:recommendedDisclosureRef",
        "uri": "http://www.xbrl.org/2003/role/recommendedDisclosureRef"
      },
      {
        "name": "xbrl:unspecifiedDisclosureRef",
        "uri": "http://www.xbrl.org/2003/role/unspecifiedDisclosureRef"
      },
      {
        "name": "xbrl:presentationRef",
        "uri": "http://www.xbrl.org/2003/role/presentationRef"
      },
      {
        "name": "xbrl:measurementRef",
        "uri": "http://www.xbrl.org/2003/role/measurementRef"
      },
      {
        "name": "xbrl:commentaryRef",
        "uri": "http://www.xbrl.org/2003/role/commentaryRef"
      },
      {
        "name": "xbrl:exampleRef",
        "uri": "http://www.xbrl.org/2003/role/exampleRef"
      },
      {
        "name": "xbrl:commonPracticeRef",
        "uri": "http://www.xbrl.org/2009/role/commonPracticeRef"
      },
      {
        "name": "xbrl:dataTypeRequirement",
        "allowedObjects": [
          "xbrl:dataTypeObject"
        ]
      },
      {
        "name": "xbrl:baseUnitsStandard",
        "allowedObjects": [
          "xbrl:unitObject"
        ],
        "requiredProperties": [
          "utr:baseStandardIdentifier"
        ]
      },
      {
        "name": "xbrl:specStatus",
        "allowedObjects": [
          "xbrl:dataTypeObject",
          "xbrl:unitObject"
        ]
      },
      {
        "name": "xbrl:semanticRef",
        "requiredProperties": [
          "xbrl:semanticLink"
        ]
      },
      {
        "name": "xbrl:conformanceTestReference",
        "allowedObjects": [
          "xbrl:memberObject"
        ]
      },
      {
        "name": "xbrl:specificationErrorReference",
        "allowedObjects": [
          "xbrl:memberObject"
        ]
      }
    ],
    "relationshipTypes": [
      {
        "name": "xbrl:parent-child",
        "uri": "http://www.xbrl.org/2003/arcrole/parent-child",
        "cycles": "undirected",
        "allowedLinkProperties": [
          "xbrl:preferredLabel"
        ]
      },
      {
        "name": "xbrl:summation-item",
        "uri": "https://xbrl.org/2023/arcrole/summation-item",
        "cycles": "undirected",
        "allowedLinkProperties": [
          "xbrl:weight",
          "xbrl:reconciliation"
        ],
        "requiredLinkProperties": [
          "xbrl:weight"
        ],
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:class-subclass",
        "uri": "http://www.xbrl.org/2003/arcrole/class-subclass",
        "cycles": "none",
        "sourceObjects": [
          "xbrl:conceptObject",
          "xbrl:domainClassObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject",
          "xbrl:domainClassObject"
        ]
      },
      {
        "name": "xbrl:general-special",
        "uri": "http://www.xbrl.org/2003/arcrole/general-special",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:essence-alias",
        "uri": "http://www.xbrl.org/2003/arcrole/essence-alias",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:propertyValue-object",
        "uri": "http://xbrl.org/oim/propertyValue-object",
        "cycles": "undirected",
        "allowedLinkProperties": [
          "xbrl:traitLinkType"
        ],
        "requiredLinkProperties": [
          "xbrl:traitLinkType"
        ],
        "sourceObjects": [
          "xbrl:memberObject"
        ],
        "targetObjects": [
          "xbrl:xbrlModelObject",
          "xbrl:conceptObject",
          "xbrl:headingObject",
          "xbrl:memberObject",
          "xbrl:dimensionObject",
          "xbrl:entityObject",
          "xbrl:networkObject",
          "xbrl:groupObject",
          "xbrl:cubeObject",
          "xbrl:domainNetworkObject",
          "xbrl:domainClassObject",
          "xbrl:relationshipObject",
          "xbrl:labelObject",
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "xbrl:concept-refDimension",
        "uri": "http://xbrl.org/oim/concept-refDimension",
        "cycles": "undirected",
        "allowedLinkProperties": [
          "xbrl:referenceCubeName"
        ],
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:dimensionObject"
        ]
      },
      {
        "name": "xbrl:concept-aggDimension",
        "uri": "http://xbrl.org/oim/concept-aggDimension",
        "cycles": "undirected",
        "allowedLinkProperties": [
          "xbrl:aggregation"
        ],
        "requiredLinkProperties": [
          "xbrl:aggregation"
        ],
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:dimensionObject"
        ]
      },
      {
        "name": "xbrl:unit-factConcept",
        "uri": "http://xbrl.org/oim/unit-factConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:unitObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:unitFact-factConcept",
        "uri": "http://xbrl.org/oim/unitFact-factConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:dep-concept-deprecatedConcept",
        "uri": "http://www.xbrl.org/2009/arcrole/dep-concept-deprecatedConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject",
          "xbrl:headingObject",
          "xbrl:memberObject",
          "xbrl:domainNetworkObject",
          "xbrl:domainClassObject",
          "xbrl:dimensionObject",
          "xbrl:cubeObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject",
          "xbrl:headingObject",
          "xbrl:memberObject",
          "xbrl:domainNetworkObject",
          "xbrl:domainClassObject",
          "xbrl:dimensionObject",
          "xbrl:cubeObject"
        ]
      },
      {
        "name": "xbrl:dep-aggregateConcept-deprecatedPartConcept",
        "uri": "http://www.xbrl.org/2009/arcrole/dep-aggregateConcept-deprecatedPartConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:dep-dimensionallyQualifiedConcept-deprecatedConcept",
        "uri": "http://www.xbrl.org/2009/arcrole/dep-dimensionallyQualifiedConcept-deprecatedConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:dep-mutuallyExclusiveConcept-deprecatedConcept",
        "uri": "http://www.xbrl.org/2009/arcrole/dep-mutuallyExclusiveConcept-deprecatedConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:dep-partConcept-deprecatedAggregateConcept",
        "uri": "http://www.xbrl.org/2009/arcrole/dep-partConcept-deprecatedAggregateConcept",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:conceptObject"
        ]
      },
      {
        "name": "xbrl:taxonomy-group",
        "cycles": "none",
        "sourceObjects": [
          "xbrl:xbrlModelObject",
          "xbrl:groupObject"
        ],
        "targetObjects": [
          "xbrl:groupObject"
        ]
      },
      {
        "name": "xbrl:fact-inFact",
        "uri": "http://xbrl.org/oim/fact-inFact",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:factObject"
        ],
        "targetObjects": [
          "xbrl:factObject"
        ]
      },
      {
        "name": "xbrl:fact-inFootnote",
        "uri": "http://xbrl.org/oim/fact-inFootnote",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:factObject"
        ],
        "targetObjects": [
          "xbrl:footnoteObject"
        ]
      },
      {
        "name": "xbrl:fact-explanatoryFact",
        "uri": "http://xbrl.org/oim/fact-explanatoryFact",
        "cycles": "undirected",
        "sourceObjects": [
          "xbrl:factObject"
        ],
        "targetObjects": [
          "xbrl:factObject"
        ]
      },
      {
        "name": "xbrl:property-dependentProperty",
        "cycles": "none",
        "allowedLinkProperties": [
          "xbrl:propertyValue"
        ],
        "sourceObjects": [
          "xbrl:propertyTypeObject"
        ],
        "targetObjects": [
          "xbrl:propertyTypeObject"
        ]
      }
    ],
    "factMaps": [
      {
        "name": "xbrl:xBRL-JSON"
      },
      {
        "name": "xbrl:xBRL-XML"
      },
      {
        "name": "xbrl:inline-XBRL-1.1",
        "factLocatorType": "xbrl:htmlElementLocatorType"
      }
    ],
    "networks": [
      {
        "name": "xbrl:fact-inFootnote-network",
        "relationshipTypeName": "xbrl:fact-inFootnote"
      },
      {
        "name": "xbrl:fact-inFact-network",
        "relationshipTypeName": "xbrl:fact-inFact"
      },
      {
        "name": "xbrl:fact-explanatoryFact-network",
        "relationshipTypeName": "xbrl:fact-explanatoryFact"
      }
    ],
    "impliedObjects": [
      {
        "name": "xbrl:LegalEntityIdentifier",
        "namespace": "http://standards.iso.org/iso/17442",
        "domainClass": "xbrl:entityDomain",
        "objectType": "xbrl:entityObject",
        "localNameConstraint": "xbrl:LEICdataType"
      }
    ],
    "dataTypes": [
      {
        "name": "xbrl:LEICdataType",
        "baseType": "xs:QName",
        "checksumAlgorithm": "xbrl:iso7064-Mod-97-10"
      },
      {
        "name": "xbrl:languageType",
        "baseType": "xs:string",
        "patterns": [
          "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$"
        ]
      },
      {
        "name": "xbrl:periodType",
        "baseType": "xs:string",
        "enumeration": [
          "instant",
          "duration",
          "none"
        ]
      },
      {
        "name": "xbrl:SQName",
        "baseType": "xbrl:prefixedContent",
        "patterns": [
          "[^:\\s0-9][^:\\s]*:\\S+"
        ]
      },
      {
        "name": "xbrl:noLangToken",
        "baseType": "xs:token"
      },
      {
        "name": "xbrl:noLangString",
        "baseType": "xs:string"
      },
      {
        "name": "xbrl:prefixedContent",
        "baseType": "xbrl:noLangToken"
      }
    ],
    "domainNetworks": [
      {
        "name": "xbrl:nilReasonType",
        "root": "xbrl:nilReasonDomainClass",
        "relationships": [
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:unknownNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:unavailableNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:withheldNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:immaterialNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:confidentialNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:redactedNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:notApplicableNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:pendingNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:notRequiredNilReason"
          },
          {
            "source": "xbrl:nilReasonDomainClass",
            "target": "xbrl:otherNilReason"
          }
        ]
      }
    ],
    "members": [
      {
        "name": "xbrl:unknownNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:unavailableNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:withheldNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:immaterialNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:confidentialNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:redactedNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:notApplicableNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:pendingNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:notRequiredNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:otherNilReason",
        "domainClasses": [
          "xbrl:nilReasonDomainClass"
        ]
      },
      {
        "name": "xbrl:iso7064-Mod-97-10",
        "domainClasses": [
          "xbrl:checksumAlgorithmDomainClass"
        ]
      }
    ],
    "collectionTypes": [
      {
        "name": "xbrl:SQNames",
        "dataType": "xbrl:SQName",
        "uniqueValues": true,
        "orderedValues": true
      }
    ],
    "references": [
      {
        "name": "xbrl:PrefixedContentRequirementReference",
        "forObjects": [
          "xbrl:prefixedContent"
        ],
        "referenceType": "xbrl:dataTypeRequirement",
        "properties": [
          {
            "property": "ref:Requirement",
            "value": "This data type acts as a supertype for all custom types that rely on namespace-prefix bindings. It allows processors to 'fail fast' if presented with prefixed content that they do not understand, rather than silently breaking or changing the semantics of such values."
          }
        ]
      }
    ]
  }
}

Appendix F Example base model

{
  "$schema": "../tavi-schema.json",
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "namespaces": {
      "exp": "http://example.com/taxonomy",
      "lei": "http://standards.iso.org/iso/17442",
      "xbrl": "https://xbrl.org/PWD/2026-09-01",
      "xbrla": "https://xbrl.org/PWD/2026-09-01/accounting",
      "xbrlm": "https://xbrl.org/PWD/2026-09-01/model",
      "iso4217": "http://www.xbrl.org/2003/iso4217",
      "utr": "https://xbrl.org/PWD/2026-09-01/utr",
      "xbrlr": "https://xbrl.org/PWD/2026-09-01/report",
      "xs": "http://www.w3.org/2001/XMLSchema",
      "ref": "https://xbrl.org/PWD/2026-09-01/ref",
      "dei": "http://xbrl.sec.gov/dei/2025",
      "mini2": "http://example.com/mini2"
    },
    "documentNamespacePrefix": "exp",
    "sourceMappings": [
      {
        "sourceName": "exp:SalesEventTable",
        "url": "../examples/SalesEventTable.csv"
      },
      {
        "sourceName": "exp:SalesEventTable2",
        "url": "../examples/SalesEventTable2.csv"
      },
      {
        "sourceName": "exp:IncomeStatementTable",
        "url": "../examples/IncomeStatementTable.csv"
      }
    ],
    "importMapping": {
      "mini2:MiniTaxonomy2": "../examples/copilot-mini2.json"
    }
  },
  "xbrlModel": {
    "name": "exp:SampleTaxonomy",
    "frameworkName": "us-gaap",
    "version": "2024",
    "importedTaxonomies": [
      {
        "xbrlModelName": "mini2:MiniTaxonomy2",
        "selections": [
          {
            "objectType": "xbrl:conceptObject",
            "where": [
              {
                "property": "periodType",
                "operator": "==",
                "value": "instant"
              }
            ]
          }
        ],
        "excludeLabels": true
      },
      {
        "xbrlModelName": "mini2:MiniTaxonomy2",
        "selections": [
          {
            "objectType": "xbrl:labelObject",
            "where": [
              {
                "property": "forObject",
                "operator": "==",
                "value": "mini2:Inventory"
              }
            ]
          }
        ]
      },
      {
        "xbrlModelName": "xbrlm:base"
      },
      {
        "xbrlModelName": "xbrla:accountingModule"
      }
    ],
    "propertyTypes": [
      {
        "name": "exp:ipsum",
        "dataType": "xs:string",
        "definitional": true,
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:relationshipObject"
        ],
        "allowedAsLinkProperty": true
      },
      {
        "name": "exp:SubSubSection",
        "dataType": "xs:string",
        "definitional": false,
        "allowedObjects": [
          "xbrl:referenceObject"
        ]
      },
      {
        "name": "exp:AccountingClassType",
        "dataType": "xs:QName",
        "enumerationDomain": "exp:AccountingClassDomain",
        "definitional": false,
        "allowedObjects": [
          "xbrl:conceptObject"
        ]
      }
    ],
    "headings": [
      {
        "name": "exp:StatementOfIncome"
      }
    ],
    "concepts": [
      {
        "name": "exp:Revenue",
        "dataType": "xbrlr:monetary",
        "periodType": "duration",
        "nillable": true,
        "properties": [
          {
            "property": "xbrla:balance",
            "value": "credit"
          }
        ]
      },
      {
        "name": "exp:CostOfGoodsSold",
        "dataType": "xbrlr:monetary",
        "periodType": "duration",
        "properties": [
          {
            "property": "xbrla:balance",
            "value": "debit"
          }
        ],
        "nillable": true
      },
      {
        "name": "exp:GrossProfit",
        "dataType": "xbrlr:monetary",
        "periodType": "duration",
        "properties": [
          {
            "property": "xbrla:balance",
            "value": "credit"
          }
        ],
        "nillable": true
      },
      {
        "name": "exp:NetIncome",
        "dataType": "xbrlr:monetary",
        "periodType": "duration",
        "properties": [
          {
            "property": "xbrla:balance",
            "value": "credit"
          }
        ],
        "nillable": true
      },
      {
        "name": "exp:OperatingExpenses",
        "dataType": "xbrlr:monetary",
        "periodType": "duration",
        "properties": [
          {
            "property": "xbrla:balance",
            "value": "debit"
          }
        ],
        "nillable": true
      },
      {
        "name": "exp:Country",
        "dataType": "xs:QName",
        "periodType": "none",
        "enumerationDomain": "exp:DomainOfCountries",
        "nillable": true
      },
      {
        "name": "exp:EventDescription",
        "dataType": "xs:string",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:EventDate",
        "dataType": "xs:dateTime",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:FunctionalCurrency",
        "dataType": "xs:QName",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:FunctionalAmount",
        "dataType": "xs:decimal",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:ReportingCurrency",
        "dataType": "xs:QName",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:ReportingAmount",
        "dataType": "xs:decimal",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:ProductIdentifier",
        "dataType": "xs:string",
        "periodType": "none",
        "nillable": true
      },
      {
        "name": "exp:ProductDescription",
        "dataType": "xs:string",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:ProductWeight",
        "dataType": "xbrlr:mass",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:ProductColor",
        "dataType": "xs:string",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:ProductPackageType",
        "dataType": "xs:string",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:ProductFlavor",
        "dataType": "xs:string",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:ReportDate",
        "dataType": "xs:dateTime",
        "periodType": "duration",
        "nillable": true,
        "properties": [
          {
            "property": "xbrl:reportAttribute",
            "value": "reportDate"
          }
        ]
      },
      {
        "name": "exp:PriorPeriod",
        "dataType": "xs:dateTime",
        "periodType": "duration",
        "nillable": true
      },
      {
        "name": "exp:PeakGridElectricityDemandMax",
        "dataType": "xbrlr:power",
        "periodType": "none",
        "nillable": true,
        "properties": [
          {
            "property": "xbrl:aggregation",
            "value": "max"
          }
        ]
      },
      {
        "name": "exp:MyStringCollectionConcept",
        "dataType": "exp:myStringCollection",
        "periodType": "instant",
        "nillable": true
      }
    ],
    "members": [
      {
        "name": "exp:Country_USA",
        "domainClasses": [
          "exp:DomainOfCountriesRoot"
        ]
      },
      {
        "name": "exp:Country_Canada",
        "domainClasses": [
          "exp:DomainOfCountriesRoot"
        ]
      },
      {
        "name": "exp:Country_UK",
        "domainClasses": [
          "exp:DomainOfCountriesRoot"
        ]
      },
      {
        "name": "exp:Country_Mexico",
        "domainClasses": [
          "exp:DomainOfCountriesRoot"
        ]
      },
      {
        "name": "exp:RevenueMember"
      },
      {
        "name": "exp:ExpenseMember"
      }
    ],
    "dimensions": [
      {
        "name": "exp:ProductIdentifierDimension",
        "domainClass": "exp:ProductIdentifiersRoot",
        "cubeTypes": [
          "xbrla:referenceCube"
        ]
      },
      {
        "name": "exp:CountryDimension",
        "domainClass": "exp:DomainOfCountriesRoot"
      },
      {
        "name": "exp:SaleEventDimension",
        "domainClass": "exp:SaleEventRoot",
        "cubeTypes": [
          "xbrla:eventCube"
        ]
      },
      {
        "name": "exp:TimeSeriesPeakDemandDimension",
        "domainClass": "exp:TimeSeriesPeakDemandRoot",
        "cubeTypes": [
          "xbrla:timeSeriesCube"
        ]
      }
    ],
    "entities": [
      {
        "name": "exp:00EHHQ2ZHDCFXJCPCL46"
      },
      {
        "name": "exp:00EHHQ2ZHDCFXJCPCL47"
      }
    ],
    "units": [
      {
        "name": "exp:flagez",
        "dataType": "xbrlr:flow",
        "compositeUnitRepresentation": [
          "utr:l/utr:S"
        ]
      }
    ],
    "groups": [
      {
        "name": "exp:CountryGroup",
        "groupURI": "http://example.com/groups/country"
      },
      {
        "name": "exp:IncomeStatementGroup",
        "groupURI": "http://example.com/groups/income-statement"
      },
      {
        "name": "exp:SaleEventGroup",
        "groupURI": "http://example.com/groups/sale-event"
      },
      {
        "name": "exp:ProductListingGroup",
        "groupURI": "http://example.com/groups/product-listing"
      },
      {
        "name": "exp:PeakTimeSeriesGroup",
        "groupURI": "http://example.com/groups/peak-timeseries"
      },
      {
        "name": "exp:NotesGroup",
        "groupURI": "http://example.com/groups/notes"
      }
    ],
    "groupContents": [
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:GeographicCube",
        "order": 1
      },
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:GeographyTable1",
        "order": 2
      },
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:GeographyTable2",
        "order": 3
      },
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:GeographyTable3",
        "order": 4
      },
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:GeographyTable4",
        "order": 5
      },
      {
        "groupName": "exp:CountryGroup",
        "forObject": "exp:IncomeStatementTable0"
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:IncomeStatementCube",
        "order": 1
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:Network2",
        "order": 2
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:Network3",
        "order": 3
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:IncomeStatementTable0",
        "order": 4
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:IncomeStatementTable2",
        "order": 5
      },
      {
        "groupName": "exp:IncomeStatementGroup",
        "forObject": "exp:IncomeStatementTable3",
        "order": 6
      },
      {
        "groupName": "exp:SaleEventGroup",
        "forObject": "exp:SaleEventCube"
      },
      {
        "groupName": "exp:ProductListingGroup",
        "forObject": "exp:ProductIdentifierCube"
      },
      {
        "groupName": "exp:PeakTimeSeriesGroup",
        "forObject": "exp:IntervalTimeSeriesCube"
      },
      {
        "groupName": "exp:NotesGroup",
        "forObject": "exp:network1",
        "order": 1
      },
      {
        "groupName": "exp:NotesGroup",
        "forObject": "exp:network4",
        "order": 2
      }
    ],
    "groupTree": {
      "name": "exp:SampleTaxonomyGroupTree",
      "relationships": [
        {
          "source": "xbrl:rootSource",
          "target": "exp:IncomeStatementGroup",
          "order": 1
        },
        {
          "source": "xbrl:rootSource",
          "target": "exp:CountryGroup",
          "order": 2
        },
        {
          "source": "xbrl:rootSource",
          "target": "exp:ProductListingGroup",
          "order": 3
        },
        {
          "source": "xbrl:rootSource",
          "target": "exp:NotesGroup",
          "order": 4
        },
        {
          "source": "xbrl:rootSource",
          "target": "exp:SaleEventGroup",
          "order": 1
        },
        {
          "source": "xbrl:rootSource",
          "target": "exp:PeakTimeSeriesGroup",
          "order": 1
        }
      ]
    },
    "relationshipTypes": [
      {
        "name": "exp:concept-abstract",
        "uri": "http://example.com/groups/concept-abstract",
        "cycles": "none",
        "allowedLinkProperties": [
          "exp:ipsum"
        ],
        "requiredLinkProperties": [
          "exp:ipsum"
        ],
        "sourceObjects": [
          "xbrl:conceptObject"
        ],
        "targetObjects": [
          "xbrl:headingObject"
        ]
      }
    ],
    "cubes": [
      {
        "name": "exp:GeographicCube",
        "cubeType": "xbrl:reportCube",
        "cubeDimensions": [
          {
            "domainNetwork": "exp:DomainOfCountries",
            "optional": true,
            "dimension": "exp:CountryDimension"
          },
          {
            "domainNetwork": "exp:PrimaryCountryDomain",
            "dimension": "xbrl:concept"
          },
          {
            "optional": true,
            "dimension": "xbrl:unit"
          },
          {
            "dimension": "xbrl:entity"
          },
          {
            "optional": true,
            "dimension": "xbrl:period"
          }
        ]
      },
      {
        "name": "exp:IncomeStatementCube",
        "cubeType": "exp:myIncomeStatementCube",
        "cubeDimensions": [
          {
            "domainNetwork": "exp:PrimaryIncomeStatementDomain",
            "dimension": "xbrl:concept"
          },
          {
            "periodConstraints": [
              {
                "periodType": "duration",
                "timeSpan": "P1Y",
                "endDate": {
                  "conceptName": "exp:ReportDate"
                }
              },
              {
                "periodType": "duration",
                "timeSpan": "P1Y",
                "endDate": {
                  "conceptName": "exp:ReportDate",
                  "timeShift": "-P1Y"
                }
              },
              {
                "periodType": "duration",
                "periodPattern": "YYYY-04-01T00:00:00/YYYY-07-01T00:00:00"
              },
              {
                "periodType": "instant",
                "endDate": {
                  "context": "exp:ReportDate@end"
                }
              },
              {
                "periodType": "instant",
                "endDate": {
                  "value": "2025-12-31"
                }
              }
            ],
            "dimension": "xbrl:period"
          },
          {
            "domainNetwork": "exp:IncomeStatementUnitDomain",
            "optional": true,
            "dimension": "xbrl:unit"
          },
          {
            "dimension": "xbrl:entity"
          }
        ],
        "cubeNetworks": [
          "exp:Network3",
          "exp:Network2"
        ]
      },
      {
        "name": "exp:SaleEventCube",
        "cubeType": "xbrla:eventCube",
        "cubeDimensions": [
          {
            "domainDataType": "xs:token",
            "optional": false,
            "dimension": "exp:SaleEventDimension"
          },
          {
            "domainNetwork": "exp:PrimaryEventDomain",
            "dimension": "xbrl:concept"
          }
        ],
        "cubeNetworks": [
          "exp:ConceptToDimensionNetwork",
          "exp:ConceptUnitNetwork",
          "exp:ConceptAbstractNetwork"
        ],
        "requiredCubes": [
          "exp:SaleEventCube"
        ]
      },
      {
        "name": "exp:ProductIdentifierCube",
        "cubeType": "xbrla:referenceCube",
        "cubeDimensions": [
          {
            "domainDataType": "xs:token",
            "optional": false,
            "dimension": "exp:ProductIdentifierDimension"
          },
          {
            "domainNetwork": "exp:PrimaryProductDetailsDomain",
            "dimension": "xbrl:concept"
          }
        ]
      },
      {
        "name": "exp:IntervalTimeSeriesCube",
        "cubeType": "xbrla:timeSeriesCube",
        "cubeDimensions": [
          {
            "domainNetwork": "exp:PrimaryTimeSeriesDomain",
            "dimension": "xbrl:concept"
          },
          {
            "domainDataType": "xs:dateTime",
            "optional": false,
            "dimension": "exp:TimeSeriesPeakDemandDimension"
          },
          {
            "optional": false,
            "dimension": "xbrl:unit"
          }
        ]
      },
      {
        "name": "exp:MyDefaultCube",
        "cubeDimensions": [
          {
            "dimension": "xbrl:concept"
          },
          {
            "optional": true,
            "dimension": "xbrl:period"
          },
          {
            "optional": true,
            "dimension": "xbrl:entity"
          },
          {
            "optional": true,
            "dimension": "xbrl:unit"
          }
        ]
      }
    ],
    "networks": [
      {
        "name": "exp:network1",
        "relationshipTypeName": "xbrl:parent-child"
      },
      {
        "name": "exp:Network2",
        "relationshipTypeName": "xbrl:parent-child",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:StatementOfIncome"
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp:Revenue",
            "order": 1
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp:CostOfGoodsSold",
            "order": 2
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp:GrossProfit",
            "order": 3
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp:OperatingExpenses",
            "order": 4
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp:NetIncome",
            "order": 5
          }
        ]
      },
      {
        "name": "exp:Network3",
        "relationshipTypeName": "xbrl:summation-item",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:NetIncome"
          },
          {
            "source": "exp:NetIncome",
            "target": "exp:OperatingExpenses",
            "properties": [
              {
                "property": "xbrl:weight",
                "value": -1
              }
            ]
          },
          {
            "source": "exp:NetIncome",
            "target": "exp:GrossProfit",
            "properties": [
              {
                "property": "xbrl:weight",
                "value": 1
              }
            ]
          },
          {
            "source": "exp:GrossProfit",
            "target": "exp:Revenue",
            "properties": [
              {
                "property": "xbrl:weight",
                "value": 1
              }
            ]
          },
          {
            "source": "exp:GrossProfit",
            "target": "exp:CostOfGoodsSold",
            "properties": [
              {
                "property": "xbrl:weight",
                "value": -1
              }
            ]
          }
        ]
      },
      {
        "name": "exp:network4",
        "relationshipTypeName": "xbrl:general-special",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:Revenue"
          },
          {
            "source": "exp:Revenue",
            "target": "exp:NetIncome"
          }
        ]
      },
      {
        "name": "exp:traitsNetwork",
        "relationshipTypeName": "xbrl:propertyValue-object",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:RevenueMember"
          },
          {
            "source": "exp:RevenueMember",
            "target": "exp:Revenue",
            "properties": [
              {
                "property": "xbrl:traitLinkType",
                "value": "exp:AccountingClassType"
              }
            ]
          }
        ]
      },
      {
        "name": "exp:ConceptToDimensionNetwork",
        "relationshipTypeName": "xbrl:concept-refDimension",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:EventDate"
          },
          {
            "source": "xbrl:rootSource",
            "target": "exp:ProductIdentifier"
          },
          {
            "source": "xbrl:rootSource",
            "target": "exp:Country"
          },
          {
            "source": "exp:EventDate",
            "target": "xbrl:period"
          },
          {
            "source": "exp:ProductIdentifier",
            "target": "exp:ProductIdentifierDimension"
          },
          {
            "source": "exp:Country",
            "target": "exp:CountryDimension"
          }
        ]
      },
      {
        "name": "exp:ConceptUnitNetwork",
        "relationshipTypeName": "xbrl:unitFact-factConcept",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:FunctionalCurrency"
          },
          {
            "source": "xbrl:rootSource",
            "target": "exp:ReportingCurrency"
          },
          {
            "source": "exp:FunctionalCurrency",
            "target": "exp:FunctionalAmount"
          },
          {
            "source": "exp:ReportingCurrency",
            "target": "exp:ReportingAmount"
          }
        ]
      },
      {
        "name": "exp:ConceptAbstractNetwork",
        "relationshipTypeName": "exp:concept-abstract",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:FunctionalAmount"
          },
          {
            "source": "exp:FunctionalAmount",
            "target": "exp:StatementOfIncome",
            "properties": [
              {
                "property": "exp:ipsum",
                "value": "lorem"
              }
            ]
          }
        ]
      }
    ],
    "domainNetworks": [
      {
        "name": "exp:DomainOfCountries",
        "root": "exp:DomainOfCountriesRoot",
        "relationships": [
          {
            "source": "exp:DomainOfCountriesRoot",
            "target": "exp:Country_USA",
            "order": 1
          },
          {
            "source": "exp:DomainOfCountriesRoot",
            "target": "exp:Country_Canada",
            "order": 2
          },
          {
            "source": "exp:DomainOfCountriesRoot",
            "target": "exp:Country_UK",
            "order": 3
          }
        ]
      },
      {
        "name": "exp:DomainOfCanada",
        "root": "exp:DomainOfCountriesRoot",
        "isExtensible": false,
        "relationships": [
          {
            "source": "exp:DomainOfCountriesRoot",
            "target": "exp:Country_Canada",
            "order": 1
          }
        ]
      },
      {
        "name": "exp:PrimaryCountryDomain",
        "root": "xbrl:conceptDomain",
        "relationships": [
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:Country"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:GrossProfit"
          }
        ]
      },
      {
        "name": "exp:PrimaryTimeSeriesDomain",
        "root": "xbrl:conceptDomain",
        "relationships": [
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:PeakGridElectricityDemandMax"
          }
        ]
      },
      {
        "name": "exp:PrimaryEventDomain",
        "root": "xbrl:conceptDomain",
        "relationships": [
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:EventDescription",
            "order": 1
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:EventDate",
            "order": 2
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:FunctionalCurrency",
            "order": 3
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:FunctionalAmount",
            "order": 4
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ReportingCurrency",
            "order": 5
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ReportingAmount",
            "order": 6
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:Country",
            "order": 7
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductIdentifier",
            "order": 8
          }
        ]
      },
      {
        "name": "exp:PrimaryProductDetailsDomain",
        "root": "xbrl:conceptDomain",
        "relationships": [
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductDescription"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductIdentifier"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductWeight"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductColor"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductPackageType"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:ProductFlavor"
          }
        ]
      },
      {
        "name": "exp:PrimaryIncomeStatementDomain",
        "root": "xbrl:conceptDomain",
        "relationships": [
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:StatementOfIncome"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:Revenue"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:CostOfGoodsSold"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:GrossProfit"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:OperatingExpenses"
          },
          {
            "source": "xbrl:conceptDomain",
            "target": "exp:NetIncome"
          }
        ]
      },
      {
        "name": "exp:IncomeStatementUnitDomain",
        "root": "xbrl:unitDomain",
        "relationships": [
          {
            "source": "xbrl:unitDomain",
            "target": "iso4217:USD"
          }
        ]
      },
      {
        "name": "exp:AccountingClassDomain",
        "root": "xbrl:traitDomain",
        "relationships": [
          {
            "source": "xbrl:traitDomain",
            "target": "exp:RevenueMember"
          },
          {
            "source": "xbrl:traitDomain",
            "target": "exp:ExpenseMember"
          }
        ]
      },
      {
        "name": "exp:UnitsDomain",
        "root": "xbrl:unitDomain",
        "relationships": [
          {
            "source": "xbrl:unitDomain",
            "target": "utr:acre"
          },
          {
            "source": "xbrl:unitDomain",
            "target": "exp:flagez"
          },
          {
            "source": "xbrl:unitDomain",
            "target": "utr:MMcf"
          },
          {
            "source": "xbrl:unitDomain",
            "target": "iso4217:BHD"
          }
        ]
      }
    ],
    "domainClasses": [
      {
        "name": "exp:DomainOfCountriesRoot",
        "allowedDomainItem": "xbrl:memberObject"
      },
      {
        "name": "exp:ProductIdentifiersRoot",
        "allowedDomainItem": "xs:token"
      },
      {
        "name": "exp:TimeSeriesPeakDemandRoot",
        "allowedDomainItem": "xs:dateTime",
        "properties": [
          {
            "property": "xbrla:intervalOfMeasurement",
            "value": "PT1H"
          },
          {
            "property": "xbrla:timeSeriesType",
            "value": "Aggregated"
          },
          {
            "property": "xbrl:aggregation",
            "value": "max"
          },
          {
            "property": "xbrla:intervalConvention",
            "value": "StartTime"
          },
          {
            "property": "xbrla:completeTimeSeries",
            "value": true
          }
        ]
      },
      {
        "name": "exp:SaleEventRoot",
        "allowedDomainItem": "xs:token"
      }
    ],
    "labels": [
      {
        "forObject": "exp:DomainOfCountriesRoot",
        "language": "en",
        "value": "🌏",
        "labelType": "xbrl:iconLabel"
      },
      {
        "forObject": "exp:Country_Canada",
        "language": "en",
        "value": "🇨🇦",
        "labelType": "xbrl:iconLabel"
      },
      {
        "forObject": "exp:StatementOfIncome",
        "language": "en",
        "value": "Statement of Income",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:CountryGroup",
        "language": "en",
        "value": "Country Group",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:StatementOfIncome",
        "language": "en",
        "value": "<ol> <li>Use the space below for important notes regarding the financial statements or any account thereof.</li> <li>Furnish particulars as to any significant contingent assets or liabilities existing at the end of the year.</li> <li>Furnish particulars as to any significant increase in services rendered or expenses incurred during the year.</li> <li>Furnish particulars as to any amounts recorded in Extraordinary Income (Account 434) or Extraordinary Deductions (Account 435).</li> <li>Notes relating to financial statements shown elsewhere in this report may be indicated here by reference.</li> <li>Describe the annual statement supplied to each associate company in support of the amount of interest on borrowed capital and compensation for use of capital billed during the calendar year. State the basis for billing of interest to each associate company. If a ratio, describe in detail how ratio is computed. If more than one ratio, explain the calculation. Report the amount of interest borrowed and/or compensation for use of capital billed to each associate company.</li> </ol>",
        "labelType": "exp:Instructions"
      },
      {
        "forObject": "exp:StatementOfIncome",
        "language": "en",
        "value": "The Statement of Income includes the total revenue and total expenses for a reporting period.",
        "labelType": "xbrl:documentation"
      },
      {
        "forObject": "exp:Revenue",
        "language": "en",
        "value": "Total Revenue",
        "labelType": "xbrl:totalLabel"
      },
      {
        "forObject": "exp:CostOfGoodsSold",
        "language": "en",
        "value": "Cost of Goods Sold",
        "labelType": "xbrl:totalLabel"
      },
      {
        "forObject": "exp:GeographicCube",
        "language": "en",
        "value": "Geographic Information Cube",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:CountryDimension",
        "language": "en",
        "value": "Country Dimension",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:DomainOfCountries",
        "language": "en",
        "value": "Country Domain",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Country_USA",
        "language": "en",
        "value": "United States",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Country_Canada",
        "language": "en",
        "value": "Canada",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Country_UK",
        "language": "en",
        "value": "United Kingdom",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Country_Mexico",
        "language": "en",
        "value": "Mexico",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Country",
        "language": "en",
        "value": "Country",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:EventDate",
        "language": "en",
        "value": "Event Date",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:EventDescription",
        "language": "en",
        "value": "Event Description",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:FunctionalAmount",
        "language": "en",
        "value": "Functional Amount",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:FunctionalCurrency",
        "language": "en",
        "value": "Functional Currency",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:GrossProfit",
        "language": "en",
        "value": "Gross Profit",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:NetIncome",
        "language": "en",
        "value": "Net Income",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:OperatingExpenses",
        "language": "en",
        "value": "Operating Expenses",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:PeakGridElectricityDemandMax",
        "language": "en",
        "value": "Peak Grid Electricity Demand Maximum",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ProductDescription",
        "language": "en",
        "value": "Product Description",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ProductIdentifier",
        "language": "en",
        "value": "Product Identifier",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ReportDate",
        "language": "en",
        "value": "Report Date",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ReportingAmount",
        "language": "en",
        "value": "Reporting Amount",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ReportingCurrency",
        "language": "en",
        "value": "Reporting Currency",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Revenue",
        "language": "en",
        "value": "Revenue",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable",
        "language": "en",
        "value": "Income Statement",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable2",
        "language": "en",
        "value": "Income Statement 2",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable3",
        "language": "en",
        "value": "Income Statement 3",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable4",
        "language": "en",
        "value": "Income Statement 4",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable5",
        "language": "en",
        "value": "Income Statement 5",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementCubeTable6",
        "language": "en",
        "value": "Income Statement 6",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:GeographyCubeTable1",
        "language": "en",
        "value": "Geographic Information",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:GeographyCubeTable2",
        "language": "en",
        "value": "Geographic Information 2",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:GeographyCubeTable3",
        "language": "en",
        "value": "Geographic Information 3",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:GeographyCubeTable4",
        "language": "en",
        "value": "Geographic Information 4",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:Network2",
        "language": "en",
        "value": "Income Statement Parent-Child Network",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:IncomeStatementGroup",
        "language": "en",
        "value": "Income Statement Group",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:PeakTimeSeriesGroup",
        "language": "en",
        "value": "Peak Time Series Group",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:SaleEventGroup",
        "language": "en",
        "value": "Sale Event Group",
        "labelType": "xbrl:label"
      },
      {
        "forObject": "exp:ProductListingGroup",
        "language": "en",
        "value": "Product Listing Group",
        "labelType": "xbrl:label"
      }
    ],
    "references": [
      {
        "name": "exp:myReference",
        "forObjects": [
          "exp:Country_USA",
          "exp:Country_Canada",
          "exp:Country_UK"
        ],
        "referenceType": "exp:myReferenceType",
        "language": "en",
        "properties": [
          {
            "property": "ref:Publisher",
            "value": "Example Publisher"
          },
          {
            "property": "ref:Name",
            "value": "Example Reference Name"
          },
          {
            "property": "ref:Section",
            "value": "Example Section"
          },
          {
            "property": "ref:Paragraph",
            "value": "Example Paragraph"
          },
          {
            "property": "exp:SubSubSection",
            "value": "a1"
          }
        ]
      },
      {
        "name": "exp:myReference2",
        "forObjects": [
          "exp:CountryGroup"
        ],
        "referenceType": "exp:myReferenceType",
        "language": "en",
        "properties": [
          {
            "property": "ref:Publisher",
            "value": "Example Publisher 2"
          },
          {
            "property": "ref:Name",
            "value": "Example Reference Name 2"
          },
          {
            "property": "ref:Section",
            "value": "Example Section 2"
          },
          {
            "property": "ref:Paragraph",
            "value": "Example Paragraph 2"
          },
          {
            "property": "exp:SubSubSection",
            "value": "b2"
          }
        ]
      }
    ],
    "facts": [
      {
        "name": "exp:f12345",
        "factValues": [
          {
            "name": "exp:fV1",
            "value": "100000",
            "decimals": 2
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:PeakGridElectricityDemandMax",
          "exp:TimeSeriesPeakDemandDimension": "2025-01-01T00:00:00",
          "xbrl:unit": "utr:MW"
        }
      },
      {
        "name": "exp:f12346",
        "factDimensions": {
          "xbrl:concept": "exp:PeakGridElectricityDemandMax",
          "exp:TimeSeriesPeakDemandDimension": "2026-01-01T00:00:00",
          "xbrl:unit": "utr:MW"
        }
      },
      {
        "name": "exp:f12347",
        "factValues": [
          {
            "name": "exp:fV3",
            "value": "333333",
            "decimals": 2
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:GrossProfit",
          "exp:CountryDimension": "exp:Country_USA",
          "xbrl:unit": "iso4217:USD",
          "xbrl:entity": "lei:00EHHQ2ZHDCFXJCPCL46",
          "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00"
        }
      },
      {
        "name": "exp:f12348",
        "factValues": [
          {
            "name": "exp:fV4",
            "value": "6666666",
            "decimals": 2
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:GrossProfit",
          "exp:CountryDimension": "exp:Country_USA",
          "xbrl:unit": "iso4217:USD",
          "xbrl:entity": "lei:00EHHQ2ZHDCFXJCPCL47",
          "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00"
        }
      },
      {
        "name": "exp:f12349",
        "factValues": [
          {
            "name": "exp:fV5",
            "value": "9999999",
            "decimals": 2
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:GrossProfit",
          "xbrl:unit": "iso4217:USD",
          "xbrl:entity": "lei:00EHHQ2ZHDCFXJCPCL47",
          "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00"
        }
      },
      {
        "name": "exp:f12350",
        "factValues": [
          {
            "name": "exp:fV6",
            "value": "1000333",
            "decimals": 2
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:GrossProfit",
          "xbrl:unit": "iso4217:USD",
          "xbrl:entity": "lei:00EHHQ2ZHDCFXJCPCL47",
          "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00"
        }
      },
      {
        "name": "exp:f12351",
        "factValues": [
          {
            "name": "exp:fV7",
            "value": "2026-01-01T00:00:00"
          }
        ],
        "factDimensions": {
          "xbrl:concept": "exp:ReportDate",
          "xbrl:period": "2025-01-01T00:00:00/2026-01-01T00:00:00"
        }
      }
    ],
    "footnotes": [
      {
        "name": "exp:FN1",
        "forObjects": [
          "exp:f12351"
        ],
        "content": "This fact is a cool one",
        "language": "en"
      }
    ],
    "factSources": [
      {
        "name": "exp:SalesEventTable",
        "factMapName": "exp:SalesEventCSVFactMap",
        "cubeName": "exp:SaleEventCube"
      },
      {
        "name": "exp:IncomeStatementTable",
        "factMapName": "exp:IncomeStatementCSVFactMap",
        "cubeName": "exp:IncomeStatementCube"
      },
      {
        "name": "exp:SalesEventTable2",
        "factMapName": "exp:SalesEventCSVFactMap",
        "cubeName": "exp:SaleEventCube"
      }
    ],
    "tableTemplates": [
      {
        "name": "exp:SalesEventTemplate",
        "columns": [
          {
            "columnName": "Event_id"
          },
          {
            "columnName": "description",
            "factDimensions": {
              "xbrl:concept": "exp:EventDescription"
            }
          },
          {
            "columnName": "Event_Date",
            "factDimensions": {
              "xbrl:concept": "exp:EventDate"
            }
          },
          {
            "columnName": "Functional_Currency",
            "factDimensions": {
              "xbrl:concept": "exp:FunctionalCurrency"
            }
          },
          {
            "columnName": "Functional_Amount",
            "factDimensions": {
              "xbrl:concept": "exp:FunctionalAmount"
            }
          },
          {
            "columnName": "Reporting_Currency",
            "factDimensions": {
              "xbrl:concept": "exp:ReportingCurrency"
            }
          },
          {
            "columnName": "Reporting_Amount",
            "factDimensions": {
              "xbrl:concept": "exp:ReportingAmount"
            }
          },
          {
            "columnName": "Country",
            "factDimensions": {
              "xbrl:concept": "exp:Country"
            }
          },
          {
            "columnName": "Product_Identifier",
            "factDimensions": {
              "xbrl:concept": "exp:ProductIdentifier"
            }
          }
        ],
        "rowIdColumn": "Event_id",
        "factDimensions": {
          "exp:SaleEventDimension": "$Event_id"
        }
      },
      {
        "name": "exp:IncomeStatementTemplate",
        "columns": [
          {
            "columnName": "PeriodCol"
          },
          {
            "columnName": "UnitCol"
          },
          {
            "columnName": "EntityCol"
          },
          {
            "columnName": "Revenue",
            "decimals": 3,
            "factDimensions": {
              "xbrl:concept": "exp:Revenue"
            }
          },
          {
            "columnName": "CostOfGoodsSold",
            "decimals": 3,
            "factDimensions": {
              "xbrl:concept": "exp:CostOfGoodsSold"
            }
          },
          {
            "columnName": "GrossProfit",
            "decimals": 3,
            "factDimensions": {
              "xbrl:concept": "exp:GrossProfit"
            }
          },
          {
            "columnName": "OperatingExpenses",
            "decimals": 3,
            "factDimensions": {
              "xbrl:concept": "exp:OperatingExpenses"
            }
          },
          {
            "columnName": "NetIncome",
            "decimals": 3,
            "factDimensions": {
              "xbrl:concept": "exp:NetIncome"
            }
          }
        ],
        "factDimensions": {
          "xbrl:period": "$PeriodCol",
          "xbrl:entity": "$EntityCol",
          "xbrl:unit": "$UnitCol"
        }
      }
    ],
    "factMaps": [
      {
        "name": "exp:SalesEventCSVFactMap",
        "templateName": "exp:SalesEventTemplate"
      },
      {
        "name": "exp:IncomeStatementCSVFactMap",
        "templateName": "exp:IncomeStatementTemplate"
      }
    ],
    "dataTypes": [
      {
        "name": "exp:monetaryPositive",
        "baseType": "xbrlr:monetary",
        "minInclusive": 0
      }
    ],
    "collectionTypes": [
      {
        "name": "exp:myStringCollection",
        "dataType": "xs:string",
        "uniqueValues": true,
        "orderedValues": false
      }
    ],
    "cubeTypes": [
      {
        "name": "exp:myProductCube",
        "coreDimensions": [
          "xbrl:concept",
          "xbrl:period",
          "xbrl:unit",
          "xbrl:entity"
        ],
        "cubeDimensionConstraints": {
          "allowed": [
            {
              "dimensionName": "exp:ProductIdentifierDimension",
              "minDimensions": 1
            }
          ],
          "closed": false
        }
      },
      {
        "name": "exp:myIncomeStatementCube",
        "baseCubeType": "xbrl:reportCube"
      },
      {
        "name": "exp:restrictedCube",
        "baseCubeType": "xbrl:reportCube",
        "cubeNetworkConstraints": {
          "closed": true,
          "cubeNetworks": [
            {
              "relationshipType": "xbrl:parent-child",
              "minNetworks": 1
            },
            {
              "relationshipType": "xbrl:parent-child",
              "source": {
                "qname": "exp:StatementOfIncome"
              },
              "minNetworks": 1
            },
            {
              "relationshipType": "xbrl:summation-item"
            }
          ]
        }
      }
    ],
    "labelTypes": [
      {
        "name": "exp:myLabel",
        "uri": "http://example.com/taxonomy/mylabel",
        "formatType": "text",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:headingObject"
        ]
      },
      {
        "formatType": "text",
        "name": "exp:Instructions",
        "uri": "http://example.com/taxonomy/Instructions"
      }
    ],
    "referenceTypes": [
      {
        "name": "exp:myReferenceType",
        "uri": "http://example.com/taxonomy/myReferenceType",
        "allowedObjects": [
          "xbrl:conceptObject",
          "xbrl:memberObject",
          "xbrl:groupObject"
        ],
        "requiredProperties": [
          "ref:Publisher",
          "ref:Name",
          "ref:Section",
          "ref:Paragraph"
        ]
      }
    ],
    "layouts": [
      {
        "name": "exp:IncomeStatementTable0",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable",
            "cubeName": "exp:IncomeStatementCube",
            "tableType": "cubeLayout",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:period"
                },
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:entity"
                }
              ],
              "axisLabelsGroup": {
                "valueArray": [
                  "10",
                  "20"
                ]
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2"
                }
              ]
            }
          }
        ]
      },
      {
        "name": "exp:IncomeStatementTable2",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable2",
            "tableType": "cubeLayout",
            "cubeName": "exp:IncomeStatementCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:period"
                },
                {
                  "dimensionName": "xbrl:entity"
                }
              ],
              "axisLabelsGroup": {
                "valueArray": [
                  "10",
                  "20"
                ]
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2"
                }
              ]
            }
          }
        ]
      },
      {
        "name": "exp:IncomeStatementTable3",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable3",
            "cubeName": "exp:IncomeStatementCube",
            "tableType": "cubeLayout",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:period"
                },
                {
                  "dimensionName": "xbrl:entity"
                }
              ],
              "axisLabelsGroup": {
                "valueArray": [
                  "10",
                  "20"
                ]
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2"
                }
              ],
              "axisLabelsGroup": {
                "range": {
                  "interval": "10",
                  "prefix": "R",
                  "startValue": "10",
                  "order": "ascending"
                }
              }
            }
          }
        ]
      },
      {
        "name": "exp:IncomeStatementTable4",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable4",
            "cubeName": "exp:IncomeStatementCube",
            "tableType": "cubeLayout",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:entity"
                },
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2"
                }
              ],
              "axisLabelsGroup": {
                "range": {
                  "interval": "10",
                  "startValue": "10",
                  "order": "ascending"
                }
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:period"
                }
              ],
              "axisLabelsGroup": {
                "range": {
                  "interval": "10",
                  "startValue": "10",
                  "order": "ascending"
                }
              }
            }
          }
        ]
      },
      {
        "name": "exp:IncomeStatementTable5",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable5",
            "tableType": "cubeLayout",
            "cubeName": "exp:IncomeStatementCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:period"
                }
              ],
              "axisLabelsGroup": {
                "valueArray": [
                  "10",
                  "20"
                ]
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2",
                  "groupDuplicateLabels": true
                },
                {
                  "dimensionName": "xbrl:entity"
                }
              ],
              "axisLabelsGroup": {
                "range": {
                  "interval": "10",
                  "startValue": "10",
                  "order": "ascending"
                }
              }
            }
          }
        ]
      },
      {
        "name": "exp:IncomeStatementTable6",
        "dataTables": [
          {
            "name": "exp:IncomeStatementCubeTable6",
            "tableType": "cubeLayout",
            "cubeName": "exp:IncomeStatementCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:unit"
                },
                {
                  "dimensionName": "xbrl:period"
                }
              ],
              "axisLabelsGroup": {
                "valueArray": [
                  "10",
                  "20"
                ]
              }
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:entity",
                  "groupDuplicateLabels": true
                },
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:Network2"
                }
              ],
              "axisLabelsGroup": {
                "range": {
                  "interval": "10",
                  "startValue": "10",
                  "order": "ascending"
                }
              }
            }
          }
        ]
      },
      {
        "name": "exp:GeographyTable1",
        "dataTables": [
          {
            "name": "exp:GeographyCubeTable1",
            "tableType": "cubeLayout",
            "cubeName": "exp:GeographicCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "exp:CountryDimension",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:DomainOfCountries"
                }
              ]
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:PrimaryCountryDomain"
                }
              ]
            },
            "zAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:entity"
                },
                {
                  "dimensionName": "xbrl:unit"
                }
              ]
            }
          }
        ]
      },
      {
        "name": "exp:GeographyTable2",
        "dataTables": [
          {
            "name": "exp:GeographyCubeTable2",
            "tableType": "cubeLayout",
            "cubeName": "exp:GeographicCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "exp:CountryDimension",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:DomainOfCountries",
                  "dimensionOptional": true,
                  "totalLocation": "end"
                }
              ]
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:PrimaryCountryDomain"
                }
              ]
            },
            "zAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:entity"
                },
                {
                  "dimensionName": "xbrl:unit"
                }
              ]
            }
          }
        ]
      },
      {
        "name": "exp:GeographyTable3",
        "dataTables": [
          {
            "name": "exp:GeographyCubeTable3",
            "tableType": "cubeLayout",
            "cubeName": "exp:GeographicCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:period",
                  "dimensionOptional": true,
                  "totalLocation": "end"
                },
                {
                  "dimensionName": "exp:CountryDimension",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:DomainOfCountries",
                  "dimensionOptional": true,
                  "totalLocation": "end"
                }
              ]
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:PrimaryCountryDomain"
                }
              ]
            },
            "zAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:entity"
                }
              ]
            }
          }
        ]
      },
      {
        "name": "exp:GeographyTable4",
        "dataTables": [
          {
            "name": "exp:GeographyCubeTable4",
            "tableType": "cubeLayout",
            "cubeName": "exp:GeographicCube",
            "xAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:period",
                  "dimensionOptional": true,
                  "totalLocation": "start"
                },
                {
                  "dimensionName": "exp:CountryDimension",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:DomainOfCountries",
                  "dimensionOptional": true,
                  "totalLocation": "start"
                }
              ]
            },
            "yAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:concept",
                  "labelType": "xbrl:label",
                  "axisNetwork": "exp:PrimaryCountryDomain"
                }
              ]
            },
            "zAxis": {
              "axisHeaders": [
                {
                  "dimensionName": "xbrl:entity"
                },
                {
                  "dimensionName": "xbrl:unit",
                  "dimensionOptional": true
                }
              ]
            }
          }
        ]
      }
    ],
    "properties": [
      {
        "property": "xbrl:reportDate",
        "value": "2025-12-31"
      }
    ]
  }
}

Appendix G Example import model

{
  "$schema": "../tavi-schema.json",
  "documentInfo": {
    "documentType": "https://xbrl.org/PWD/2026-09-01/module",
    "documentNamespacePrefix": "exp_ext",
    "namespaces": {
      "exp": "http://example.com/taxonomy",
      "mini": "http://example.com/mini",
      "exp_ext": "http://example.com/ext-taxonomy",
      "xbrl": "https://xbrl.org/PWD/2026-09-01",
      "iso4217": "http://www.xbrl.org/2003/iso4217",
      "utr": "https://xbrl.org/PWD/2026-09-01/utr",
      "xbrlr": "https://xbrl.org/PWD/2026-09-01/report",
      "xs": "http://www.w3.org/2001/XMLSchema",
      "ferc-form-60": "http://ferc.gov/form/2025-04-01/ferc-form-60",
      "ferc": "http://ferc.gov/form/2025-04-01/ferc",
      "mini3": "http://example.com/mini3"
    },
    "importMapping": {
      "exp:SampleTaxonomy": "exampleTaxonomy.json",
      "mini:MiniTaxonomy": "copilot-mini.json",
      "ferc:FERCForm60-2025-04-01": "../converted-taxonomies/form-60_2025-04-01.json",
      "ferc-form-60:_unmapped": "../converted-taxonomies/form-60_2025-04-01.json",
      "mini3:MiniTaxonomy3": "copilot-mini3.json"
    }
  },
  "xbrlModel": {
    "name": "exp_ext:ExtensionTaxonomy",
    "importedTaxonomies": [
      {
        "xbrlModelName": "exp:SampleTaxonomy"
      },
      {
        "xbrlModelName": "mini:MiniTaxonomy",
        "importObjects": [
          "mini:Assets",
          "mini:GeographyDomain"
        ]
      },
      {
        "xbrlModelName": "ferc:FERCForm60-2025-04-01",
        "importObjects": [
          "ferc-form-60:NotesToFinancialStatements_parent-child_Network"
        ]
      },
      {
        "xbrlModelName": "mini3:MiniTaxonomy3",
        "importObjectTypes": [
          "xbrl:memberObject"
        ]
      },
      {
        "xbrlModelName": "mini3:MiniTaxonomy3",
        "importObjectTypes": [
          "xbrl:headingObject"
        ]
      }
    ],
    "concepts": [
      {
        "name": "exp_ext:EarningsPerShare",
        "dataType": "xbrlr:percent",
        "periodType": "duration",
        "nillable": true
      }
    ],
    "labels": [
      {
        "forObject": "exp:Country",
        "language": "en",
        "value": "A field representing an enumerated list of countries defined as QNames.",
        "labelType": "xbrl:documentation"
      },
      {
        "forObject": "exp_ext:EarningsPerShare",
        "language": "en",
        "value": "Earnings Per Share (EPS)",
        "labelType": "xbrl:label"
      }
    ],
    "references": [
      {
        "extends": "exp:myReference",
        "forObjects": [
          "exp:Country_Mexico"
        ]
      }
    ],
    "domainNetworks": [
      {
        "extends": "exp:DomainOfCountries",
        "relationships": [
          {
            "source": "exp:DomainOfCountriesRoot",
            "target": "exp:Country_Mexico",
            "order": 1
          }
        ]
      }
    ],
    "networks": [
      {
        "extends": "exp:Network2",
        "relationships": [
          {
            "source": "xbrl:rootSource",
            "target": "exp:StatementOfIncome",
            "order": 1
          },
          {
            "source": "exp:StatementOfIncome",
            "target": "exp_ext:EarningsPerShare",
            "order": 6
          }
        ]
      }
    ]
  }
}

Appendix H Document history

See specifications.xbrl.org for a list of public releases of this specification.

Appendix I Errata Corrections incorporated in this document

This appendix contains a list of the errata that have been incorporated into this document. This represents all those errata corrections that have been approved by the XBRL International Open Information Model Working Group (SWG) up to and including 2026-09-01.

No errata have been incorporated into this document.

Appendix J Intellectual property status (non-normative)

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to XBRL International or XBRL organizations, except as required to translate it into languages other than English. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (https://www.xbrl.org/legal).

This document and the information contained herein is provided on an "AS IS" basis and XBRL INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

The attention of users of this document is directed to the possibility that compliance with or adoption of XBRL International specifications may require use of an invention covered by patent rights. XBRL International shall not be responsible for identifying patents for which a license may be required by any XBRL International specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. XBRL International specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents. XBRL International takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (https://www.xbrl.org/legal).