// @note This is a schema that covers the current example models, // it does not cover the full breadth of the envisioned IFC5 schema. In // addition, several questions on modularity and extensibility still // need to be answered. import "./ifcx-quantity-kinds.tsp"; @pattern("") scalar path extends string; @pattern("") scalar code extends string; model IfcxNode { path: path; children?: Record; inherits?: Record; attributes?: Record; } model IfcxHeader { id: string; // identifier of the dataset; name or path e.g. "ifc5.technical.buildingsmart.org/examples/example@v1.ifcx" ifcxVersion: string; // "ifcx_alpha" dataVersion: string; // "1.0.0" author: string; // who created the dataset, e.g. "John.Doe@mail.com" timestamp: string; // ISO 8601 datetime e.g. "2025-06-25" } enum DataType { Real: "Real", Boolean: "Boolean", Integer: "Integer", String: "String", DateTime: "DateTime", Enum: "Enum", Array: "Array", Object: "Object", Reference: "Reference", Blob: "Blob" } model EnumRestrictions { options: string[]; } model ArrayRestrictions { min?: numeric; max?: numeric; value: IfcxValueDescription; } model ObjectRestrictions { values: Record; } model IfcxValueDescription { dataType: DataType; optional?: boolean; inherits?: string[]; quantityKind?: QuantityKind; enumRestrictions?: EnumRestrictions; arrayRestrictions?: ArrayRestrictions; objectRestrictions?: ObjectRestrictions; } model IfcxSchema { uri?: string; value: IfcxValueDescription; } model ImportNode { uri: string; integrity?: string; } model IfcxFile { header: IfcxHeader; "imports": ImportNode[]; schemas: Record; data: IfcxNode[] }