SCHEMA IFC4;

TYPE IfcDimensionCount = INTEGER;

| WHERE
WR1 | : | { 0 < SELF <= 3 } |

END_TYPE;

TYPE IfcGloballyUniqueId = STRING (22) FIXED;

END_TYPE;

TYPE IfcIdentifier = STRING (255);

END_TYPE;

TYPE IfcLabel = STRING (255);

END_TYPE;

TYPE IfcLengthMeasure = REAL;

END_TYPE;

TYPE IfcReal = REAL;

END_TYPE;

TYPE IfcText = STRING;

END_TYPE;

TYPE IfcTimeStamp = INTEGER;

END_TYPE;

TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF (

| CONSTANTFLOW, VARIABLEFLOWPRESSUREDEPENDANT, VARIABLEFLOWPRESSUREINDEPENDANT, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcAirTerminalTypeEnum = ENUMERATION OF (

| DIFFUSER, GRILLE, LOUVRE, REGISTER, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF (

| FIXEDPLATECOUNTERFLOWEXCHANGER, FIXEDPLATECROSSFLOWEXCHANGER, FIXEDPLATEPARALLELFLOWEXCHANGER, ROTARYWHEEL, RUNAROUNDCOILLOOP, HEATPIPE, TWINTOWERENTHALPYRECOVERYLOOPS, THERMOSIPHONSEALEDTUBEHEATEXCHANGERS, THERMOSIPHONCOILTYPEHEATEXCHANGERS, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcChangeActionEnum = ENUMERATION OF (

| NOCHANGE, MODIFIED, ADDED, DELETED, NOTDEFINED);

END_TYPE;

TYPE IfcChillerTypeEnum = ENUMERATION OF (

| AIRCOOLED, WATERCOOLED, HEATRECOVERY, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcCoilTypeEnum = ENUMERATION OF (

| DXCOOLINGCOIL, ELECTRICHEATINGCOIL, GASHEATINGCOIL, HYDRONICCOIL, STEAMHEATINGCOIL, WATERCOOLINGCOIL, WATERHEATINGCOIL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcDamperTypeEnum = ENUMERATION OF (

| BACKDRAFTDAMPER, BALANCINGDAMPER, BLASTDAMPER, CONTROLDAMPER, FIREDAMPER, FIRESMOKEDAMPER, FUMEHOODEXHAUST, GRAVITYDAMPER, GRAVITYRELIEFDAMPER, RELIEFDAMPER, SMOKEDAMPER, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF (

| FLATOVAL, RECTANGULAR, ROUND, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF (

| DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER, DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER, DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER, DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER, DIRECTEVAPORATIVEAIRWASHER, INDIRECTEVAPORATIVEPACKAGEAIRCOOLER, INDIRECTEVAPORATIVEWETCOIL, INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER, INDIRECTDIRECTCOMBINATION, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcEvaporatorTypeEnum = ENUMERATION OF (

| DIRECTEXPANSION, DIRECTEXPANSIONSHELLANDTUBE, DIRECTEXPANSIONTUBEINTUBE, DIRECTEXPANSIONBRAZEDPLATE, FLOODEDSHELLANDTUBE, SHELLANDCOIL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcFanTypeEnum = ENUMERATION OF (

| CENTRIFUGALFORWARDCURVED, CENTRIFUGALRADIAL, CENTRIFUGALBACKWARDINCLINEDCURVED, CENTRIFUGALAIRFOIL, TUBEAXIAL, VANEAXIAL, PROPELLORAXIAL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF (

| PLATE, SHELLANDTUBE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcSIPrefix = ENUMERATION OF (

| EXA, PETA, TERA, GIGA, MEGA, KILO, HECTO, DECA, DECI, CENTI, MILLI, MICRO, NANO, PICO, FEMTO, ATTO);

END_TYPE;

TYPE IfcSIUnitName = ENUMERATION OF (

| AMPERE, BECQUEREL, CANDELA, COULOMB, CUBIC_METRE, DEGREE_CELSIUS, FARAD, GRAM, GRAY, HENRY, HERTZ, JOULE, KELVIN, LUMEN, LUX, METRE, MOLE, NEWTON, OHM, PASCAL, RADIAN, SECOND, SIEMENS, SIEVERT, SQUARE_METRE, STERADIAN, TESLA, VOLT, WATT, WEBER);

END_TYPE;

TYPE IfcStateEnum = ENUMERATION OF (

| READWRITE, READONLY, LOCKED, READWRITELOCKED, READONLYLOCKED);

END_TYPE;

TYPE IfcUnitEnum = ENUMERATION OF (

| ABSORBEDDOSEUNIT, AMOUNTOFSUBSTANCEUNIT, AREAUNIT, DOSEEQUIVALENTUNIT, ELECTRICCAPACITANCEUNIT, ELECTRICCHARGEUNIT, ELECTRICCONDUCTANCEUNIT, ELECTRICCURRENTUNIT, ELECTRICRESISTANCEUNIT, ELECTRICVOLTAGEUNIT, ENERGYUNIT, FORCEUNIT, FREQUENCYUNIT, ILLUMINANCEUNIT, INDUCTANCEUNIT, LENGTHUNIT, LUMINOUSFLUXUNIT, LUMINOUSINTENSITYUNIT, MAGNETICFLUXDENSITYUNIT, MAGNETICFLUXUNIT, MASSUNIT, PLANEANGLEUNIT, POWERUNIT, PRESSUREUNIT, RADIOACTIVITYUNIT, SOLIDANGLEUNIT, THERMODYNAMICTEMPERATUREUNIT, TIMEUNIT, VOLUMEUNIT, USERDEFINED);

END_TYPE;

TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF (

| AIRHANDLER, AIRCONDITIONINGUNIT, DEHUMIDIFIER, SPLITSYSTEM, ROOFTOPUNIT, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcAxis2Placement = SELECT (

| IfcAxis2Placement3D);

END_TYPE;

TYPE IfcClassificationReferenceSelect = SELECT (

| IfcClassificationReference, IfcClassification);

END_TYPE;

TYPE IfcClassificationSelect = SELECT (

| IfcClassification, IfcClassificationReference);

END_TYPE;

TYPE IfcDefinitionSelect = SELECT (

| IfcObjectDefinition);

END_TYPE;

TYPE IfcUnit = SELECT (

| IfcNamedUnit);

END_TYPE;

TYPE IfcValue = SELECT (

END_TYPE;

ENTITY IfcAirTerminal

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcAirTerminalBox

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcAirTerminalBoxType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcAirTerminalBoxTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcAirTerminalType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcAirTerminalTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcAirToAirHeatRecovery

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcAirToAirHeatRecoveryType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcAirToAirHeatRecoveryTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcApplication;

ApplicationDeveloper | : | IfcOrganization;
Version | : | IfcLabel;
ApplicationFullName | : | IfcLabel;
ApplicationIdentifier | : | IfcIdentifier;

| UNIQUE

UR1 | : | ApplicationIdentifier;
UR2 | : | ApplicationFullName, Version;

END_ENTITY;

ENTITY IfcAxis2Placement3D

| SUBTYPE OF (IfcPlacement);

Axis | : | OPTIONAL IfcStrippedOptional;
RefDirection | : | OPTIONAL IfcStrippedOptional;

| DERIVE

P | : | LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);

| WHERE

LocationIs3D | : | SELF\IfcPlacement.Location.Dim = 3;
AxisIs3D | : | (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
RefDirIs3D | : | (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
AxisToRefDirPosition | : | (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
AxisAndRefDirProvision | : | NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));

END_ENTITY;

ENTITY IfcCartesianPoint

| SUBTYPE OF (IfcPoint);

Coordinates | : | LIST [1:3] OF IfcLengthMeasure;

| DERIVE

Dim | : | IfcDimensionCount := HIINDEX(Coordinates);

| WHERE

CP2Dor3D | : | HIINDEX(Coordinates) >= 2;

END_ENTITY;

ENTITY IfcChiller

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCHILLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcChillerType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcChillerTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcClassification

| SUBTYPE OF (IfcExternalInformation);

Source | : | OPTIONAL IfcLabel;
Edition | : | OPTIONAL IfcStrippedOptional;
EditionDate | : | OPTIONAL IfcStrippedOptional;
Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Location | : | OPTIONAL IfcStrippedOptional;
ReferenceTokens | : | OPTIONAL LIST [1:?] OF IfcIdentifier;

| INVERSE

ClassificationForObjects | : | SET OF IfcRelAssociatesClassification FOR RelatingClassification;
HasReferences | : | SET OF IfcClassificationReference FOR ReferencedSource;

END_ENTITY;

ENTITY IfcClassificationReference

| SUBTYPE OF (IfcExternalReference);

ReferencedSource | : | OPTIONAL IfcClassificationReferenceSelect;
Description | : | OPTIONAL IfcStrippedOptional;
Sort | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ClassificationRefForObjects | : | SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;
HasReferences | : | SET [0:?] OF IfcClassificationReference FOR ReferencedSource;

END_ENTITY;

ENTITY IfcCoil

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCOILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcCoilType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcCoilTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcContext

| ABSTRACT SUPERTYPE OF(IfcProject)

| SUBTYPE OF (IfcObjectDefinition);

ObjectType | : | OPTIONAL IfcStrippedOptional;
LongName | : | OPTIONAL IfcStrippedOptional;
Phase | : | OPTIONAL IfcStrippedOptional;
RepresentationContexts | : | OPTIONAL SET [1:?] OF IfcRepresentationContext;
UnitsInContext | : | OPTIONAL IfcUnitAssignment;

| INVERSE

Declares | : | SET OF IfcRelDeclares FOR RelatingContext;

END_ENTITY;

ENTITY IfcConversionBasedUnit

| SUPERTYPE OF(IfcConversionBasedUnitWithOffset)

| SUBTYPE OF (IfcNamedUnit);

Name | : | IfcLabel;
ConversionFactor | : | IfcMeasureWithUnit;

| INVERSE

END_ENTITY;

ENTITY IfcConversionBasedUnitWithOffset

| SUBTYPE OF (IfcConversionBasedUnit);

ConversionOffset | : | IfcReal;

END_ENTITY;

ENTITY IfcDamper

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcDamperType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcDamperTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcDimensionalExponents;

LengthExponent | : | IfcStrippedOptional;
MassExponent | : | IfcStrippedOptional;
TimeExponent | : | IfcStrippedOptional;
ElectricCurrentExponent | : | IfcStrippedOptional;
ThermodynamicTemperatureExponent | : | IfcStrippedOptional;
AmountOfSubstanceExponent | : | IfcStrippedOptional;
LuminousIntensityExponent | : | IfcStrippedOptional;

END_ENTITY;

ENTITY IfcDirection

| SUBTYPE OF (IfcGeometricRepresentationItem);

DirectionRatios | : | LIST [2:3] OF IfcStrippedOptional;

| DERIVE

Dim | : | IfcDimensionCount := HIINDEX(DirectionRatios);

| WHERE

MagnitudeGreaterZero | : | SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0;

END_ENTITY;

ENTITY IfcDistributionElement

| SUPERTYPE OF(IfcDistributionFlowElement)

| SUBTYPE OF (IfcElement);

| INVERSE

HasPorts | : | SET OF IfcRelConnectsPortToElement FOR RelatedElement;

END_ENTITY;

ENTITY IfcDistributionElementType

| SUPERTYPE OF(IfcDistributionFlowElementType)

| SUBTYPE OF (IfcElementType);

END_ENTITY;

ENTITY IfcDistributionFlowElement

| SUPERTYPE OF(ONEOF(IfcEnergyConversionDevice, IfcFlowController, IfcFlowFitting, IfcFlowMovingDevice, IfcFlowSegment, IfcFlowTerminal, IfcFlowTreatmentDevice))

| SUBTYPE OF (IfcDistributionElement);

| INVERSE

END_ENTITY;

ENTITY IfcDistributionFlowElementType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcEnergyConversionDeviceType, IfcFlowControllerType, IfcFlowMovingDeviceType, IfcFlowTerminalType, IfcFlowTreatmentDeviceType))

| SUBTYPE OF (IfcDistributionElementType);

END_ENTITY;

ENTITY IfcDistributionPort

| SUBTYPE OF (IfcPort);

FlowDirection | : | OPTIONAL IfcStrippedOptional;
PredefinedType | : | OPTIONAL IfcStrippedOptional;
SystemType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcDistributionSystem

| SUBTYPE OF (IfcSystem);

LongName | : | OPTIONAL IfcStrippedOptional;
PredefinedType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcDuctFitting

| SUBTYPE OF (IfcFlowFitting);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcDuctSegment

| SUBTYPE OF (IfcFlowSegment);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcDuctSilencer

| SUBTYPE OF (IfcFlowTreatmentDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcDuctSilencerType

| SUBTYPE OF (IfcFlowTreatmentDeviceType);

PredefinedType | : | IfcDuctSilencerTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcElement

| ABSTRACT SUPERTYPE OF(IfcDistributionElement)

| SUBTYPE OF (IfcProduct);

Tag | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcElementType

| ABSTRACT SUPERTYPE OF(IfcDistributionElementType)

| SUBTYPE OF (IfcTypeProduct);

ElementType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcEnergyConversionDevice

| SUPERTYPE OF(ONEOF(IfcAirToAirHeatRecovery, IfcChiller, IfcCoil, IfcEvaporativeCooler, IfcEvaporator, IfcHeatExchanger, IfcHumidifier, IfcUnitaryEquipment))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcEnergyConversionDeviceType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcAirToAirHeatRecoveryType, IfcChillerType, IfcCoilType, IfcEvaporativeCoolerType, IfcEvaporatorType, IfcHeatExchangerType, IfcUnitaryEquipmentType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcEvaporativeCooler

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcEvaporativeCoolerType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcEvaporativeCoolerTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcEvaporator

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCEVAPORATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcEvaporatorType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcEvaporatorTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcExternalInformation

| ABSTRACT SUPERTYPE OF(IfcClassification);

END_ENTITY;

ENTITY IfcExternalReference

| ABSTRACT SUPERTYPE OF(IfcClassificationReference);

Location | : | OPTIONAL IfcStrippedOptional;
Identification | : | OPTIONAL IfcIdentifier;
Name | : | OPTIONAL IfcStrippedOptional;

| INVERSE

| WHERE

WR1 | : | EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name);

END_ENTITY;

ENTITY IfcFan

| SUBTYPE OF (IfcFlowMovingDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCFANTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcFanType

| SUBTYPE OF (IfcFlowMovingDeviceType);

PredefinedType | : | IfcFanTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcFlowController

| SUPERTYPE OF(ONEOF(IfcAirTerminalBox, IfcDamper))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowControllerType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcAirTerminalBoxType, IfcDamperType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowFitting

| SUPERTYPE OF(IfcDuctFitting)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowMovingDevice

| SUPERTYPE OF(IfcFan)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowMovingDeviceType

| ABSTRACT SUPERTYPE OF(IfcFanType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowSegment

| SUPERTYPE OF(IfcDuctSegment)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTerminal

| SUPERTYPE OF(IfcAirTerminal)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTerminalType

| ABSTRACT SUPERTYPE OF(IfcAirTerminalType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowTreatmentDevice

| SUPERTYPE OF(IfcDuctSilencer)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTreatmentDeviceType

| ABSTRACT SUPERTYPE OF(IfcDuctSilencerType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcGeometricRepresentationContext

| SUBTYPE OF (IfcRepresentationContext);

CoordinateSpaceDimension | : | IfcDimensionCount;
Precision | : | OPTIONAL IfcStrippedOptional;
WorldCoordinateSystem | : | IfcAxis2Placement;
TrueNorth | : | OPTIONAL IfcDirection;

| INVERSE

| WHERE

WR11 | : | NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);

END_ENTITY;

ENTITY IfcGeometricRepresentationItem

| ABSTRACT SUPERTYPE OF(ONEOF(IfcDirection, IfcPlacement, IfcPoint))

| SUBTYPE OF (IfcRepresentationItem);

END_ENTITY;

ENTITY IfcGroup

| SUPERTYPE OF(IfcSystem)

| SUBTYPE OF (IfcObject);

| INVERSE

IsGroupedBy | : | SET OF IfcRelAssignsToGroup FOR RelatingGroup;

END_ENTITY;

ENTITY IfcHeatExchanger

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcHeatExchangerType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcHeatExchangerTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcHumidifier

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcMeasureWithUnit;

ValueComponent | : | IfcValue;
UnitComponent | : | IfcUnit;

END_ENTITY;

ENTITY IfcNamedUnit

| ABSTRACT SUPERTYPE OF(ONEOF(IfcConversionBasedUnit, IfcSIUnit));

Dimensions | : | IfcDimensionalExponents;
UnitType | : | IfcUnitEnum;

| WHERE

WR1 | : | IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);

END_ENTITY;

ENTITY IfcObject

| ABSTRACT SUPERTYPE OF(ONEOF(IfcGroup, IfcProduct))

| SUBTYPE OF (IfcObjectDefinition);

ObjectType | : | OPTIONAL IfcStrippedOptional;

| INVERSE

IsTypedBy | : | SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;

END_ENTITY;

ENTITY IfcObjectDefinition

| ABSTRACT SUPERTYPE OF(ONEOF(IfcContext, IfcObject, IfcTypeObject))

| SUBTYPE OF (IfcRoot);

| INVERSE

HasAssignments | : | SET OF IfcRelAssigns FOR RelatedObjects;
HasContext | : | SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;
IsDecomposedBy | : | SET OF IfcRelAggregates FOR RelatingObject;
Decomposes | : | SET [0:1] OF IfcRelAggregates FOR RelatedObjects;
HasAssociations | : | SET OF IfcRelAssociates FOR RelatedObjects;

END_ENTITY;

ENTITY IfcOrganization;

Identification | : | OPTIONAL IfcStrippedOptional;
Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Roles | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
Addresses | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

| INVERSE

Engages | : | SET OF IfcPersonAndOrganization FOR TheOrganization;

END_ENTITY;

ENTITY IfcOwnerHistory;

OwningUser | : | IfcPersonAndOrganization;
OwningApplication | : | IfcApplication;
State | : | OPTIONAL IfcStateEnum;
ChangeAction | : | OPTIONAL IfcChangeActionEnum;
LastModifiedDate | : | OPTIONAL IfcStrippedOptional;
LastModifyingUser | : | OPTIONAL IfcStrippedOptional;
LastModifyingApplication | : | OPTIONAL IfcStrippedOptional;
CreationDate | : | IfcTimeStamp;

| WHERE

CorrectChangeAction | : | (EXISTS(LastModifiedDate)) OR (NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR (NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE)));

END_ENTITY;

ENTITY IfcPerson;

Identification | : | OPTIONAL IfcStrippedOptional;
FamilyName | : | OPTIONAL IfcStrippedOptional;
GivenName | : | OPTIONAL IfcStrippedOptional;
MiddleNames | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
PrefixTitles | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
SuffixTitles | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
Roles | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
Addresses | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

| INVERSE

EngagedIn | : | SET OF IfcPersonAndOrganization FOR ThePerson;

| WHERE

IdentifiablePerson | : | EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName);
ValidSetOfNames | : | NOT EXISTS(MiddleNames) OR EXISTS(FamilyName) OR EXISTS(GivenName);

END_ENTITY;

ENTITY IfcPersonAndOrganization;

ThePerson | : | IfcPerson;
TheOrganization | : | IfcOrganization;
Roles | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

END_ENTITY;

ENTITY IfcPlacement

| ABSTRACT SUPERTYPE OF(IfcAxis2Placement3D)

| SUBTYPE OF (IfcGeometricRepresentationItem);

Location | : | IfcCartesianPoint;

| DERIVE

Dim | : | IfcDimensionCount := Location.Dim;

END_ENTITY;

ENTITY IfcPoint

| ABSTRACT SUPERTYPE OF(IfcCartesianPoint)

| SUBTYPE OF (IfcGeometricRepresentationItem);

END_ENTITY;

ENTITY IfcPort

| ABSTRACT SUPERTYPE OF(IfcDistributionPort)

| SUBTYPE OF (IfcProduct);

| INVERSE

ContainedIn | : | SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort;
ConnectedFrom | : | SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;
ConnectedTo | : | SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;

END_ENTITY;

ENTITY IfcProduct

| ABSTRACT SUPERTYPE OF(ONEOF(IfcElement, IfcPort, IfcSpatialElement))

| SUBTYPE OF (IfcObject);

ObjectPlacement | : | OPTIONAL IfcStrippedOptional;
Representation | : | OPTIONAL IfcStrippedOptional;

| INVERSE

| WHERE

PlacementForShapeRepresentation | : | (EXISTS(Representation) AND EXISTS(ObjectPlacement)) OR (EXISTS(Representation) AND (SIZEOF(QUERY(temp <* Representation.Representations | 'IFCREPRESENTATIONRESOURCE.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0)) OR (NOT(EXISTS(Representation)));

END_ENTITY;

ENTITY IfcProject

| SUBTYPE OF (IfcContext);

| WHERE

HasName | : | EXISTS(SELF\IfcRoot.Name);
CorrectContext | : | NOT(EXISTS(SELF\IfcContext.RepresentationContexts)) OR (SIZEOF(QUERY(Temp <* SELF\IfcContext.RepresentationContexts | 'IFCREPRESENTATIONRESOURCE.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) )) = 0);
NoDecomposition | : | SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0;
HasOwnerHistory | : | EXISTS(SELF\IfcRoot.OwnerHistory);

END_ENTITY;

ENTITY IfcRelAggregates

| SUBTYPE OF (IfcRelDecomposes);

RelatingObject | : | IfcObjectDefinition;
RelatedObjects | : | SET [1:?] OF IfcObjectDefinition;

| WHERE

NoSelfReference | : | SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;

END_ENTITY;

ENTITY IfcRelAssigns

| ABSTRACT SUPERTYPE OF(IfcRelAssignsToGroup)

| SUBTYPE OF (IfcRelationship);

RelatedObjects | : | SET [1:?] OF IfcObjectDefinition;
RelatedObjectsType | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR1 | : | IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);

END_ENTITY;

ENTITY IfcRelAssignsToGroup

| SUBTYPE OF (IfcRelAssigns);

RelatingGroup | : | IfcGroup;

| WHERE

NoSelfReference | : | SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;

END_ENTITY;

ENTITY IfcRelAssociates

| ABSTRACT SUPERTYPE OF(IfcRelAssociatesClassification)

| SUBTYPE OF (IfcRelationship);

RelatedObjects | : | SET [1:?] OF IfcDefinitionSelect;

END_ENTITY;

ENTITY IfcRelAssociatesClassification

| SUBTYPE OF (IfcRelAssociates);

RelatingClassification | : | IfcClassificationSelect;

END_ENTITY;

ENTITY IfcRelConnects

| ABSTRACT SUPERTYPE OF(ONEOF(IfcRelConnectsPortToElement, IfcRelConnectsPorts))

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelConnectsPortToElement

| SUBTYPE OF (IfcRelConnects);

RelatingPort | : | IfcPort;
RelatedElement | : | IfcDistributionElement;

END_ENTITY;

ENTITY IfcRelConnectsPorts

| SUBTYPE OF (IfcRelConnects);

RelatingPort | : | IfcPort;
RelatedPort | : | IfcPort;
RealizingElement | : | OPTIONAL IfcStrippedOptional;

| WHERE

NoSelfReference | : | RelatingPort :<>: RelatedPort;

END_ENTITY;

ENTITY IfcRelDeclares

| SUBTYPE OF (IfcRelationship);

RelatingContext | : | IfcContext;
RelatedDefinitions | : | SET [1:?] OF IfcDefinitionSelect;

| WHERE

NoSelfReference | : | SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0;

END_ENTITY;

ENTITY IfcRelDecomposes

| ABSTRACT SUPERTYPE OF(IfcRelAggregates)

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelDefines

| ABSTRACT SUPERTYPE OF(IfcRelDefinesByType)

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelDefinesByType

| SUBTYPE OF (IfcRelDefines);

RelatedObjects | : | SET [1:?] OF IfcObject;
RelatingType | : | IfcTypeObject;

END_ENTITY;

ENTITY IfcRelationship

| ABSTRACT SUPERTYPE OF(ONEOF(IfcRelAssigns, IfcRelAssociates, IfcRelConnects, IfcRelDeclares, IfcRelDecomposes, IfcRelDefines))

| SUBTYPE OF (IfcRoot);

END_ENTITY;

ENTITY IfcRepresentationContext

| ABSTRACT SUPERTYPE OF(IfcGeometricRepresentationContext);

ContextIdentifier | : | OPTIONAL IfcLabel;
ContextType | : | OPTIONAL IfcLabel;

| INVERSE

END_ENTITY;

ENTITY IfcRepresentationItem

| ABSTRACT SUPERTYPE OF(IfcGeometricRepresentationItem);

| INVERSE

END_ENTITY;

ENTITY IfcRoot

| ABSTRACT SUPERTYPE OF(ONEOF(IfcObjectDefinition, IfcRelationship));

GlobalId | : | IfcGloballyUniqueId;
OwnerHistory | : | OPTIONAL IfcOwnerHistory;
Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcText;

| UNIQUE

UR1 | : | GlobalId;

END_ENTITY;

ENTITY IfcSIUnit

| SUBTYPE OF (IfcNamedUnit);

Prefix | : | OPTIONAL IfcSIPrefix;
Name | : | IfcSIUnitName;

| DERIVE

SELF\IfcNamedUnit.Dimensions | : | IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);

END_ENTITY;

ENTITY IfcSpace

| SUBTYPE OF (IfcSpatialStructureElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;
ElevationWithFlooring | : | OPTIONAL IfcStrippedOptional;

| INVERSE

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCPRODUCTEXTENSION.IFCSPACETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcSpatialElement

| ABSTRACT SUPERTYPE OF(IfcSpatialStructureElement)

| SUBTYPE OF (IfcProduct);

LongName | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcSpatialStructureElement

| ABSTRACT SUPERTYPE OF(IfcSpace)

| SUBTYPE OF (IfcSpatialElement);

CompositionType | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR41 | : | (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) AND ('IFCKERNEL.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) AND (('IFCKERNEL.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR ('IFCPRODUCTEXTENSION.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) );

END_ENTITY;

ENTITY IfcSystem

| SUPERTYPE OF(ONEOF(IfcDistributionSystem, IfcZone))

| SUBTYPE OF (IfcGroup);

| INVERSE

END_ENTITY;

ENTITY IfcTypeObject

| SUPERTYPE OF(IfcTypeProduct)

| SUBTYPE OF (IfcObjectDefinition);

ApplicableOccurrence | : | OPTIONAL IfcStrippedOptional;
HasPropertySets | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;

| INVERSE

Types | : | SET [0:1] OF IfcRelDefinesByType FOR RelatingType;

| WHERE

WR1 | : | EXISTS(SELF\IfcRoot.Name);

END_ENTITY;

ENTITY IfcTypeProduct

| SUPERTYPE OF(IfcElementType)

| SUBTYPE OF (IfcTypeObject);

RepresentationMaps | : | OPTIONAL LIST [1:?] OF UNIQUE IfcStrippedOptional;
Tag | : | OPTIONAL IfcStrippedOptional;

| INVERSE

| WHERE

ApplicableOccurrence | : | NOT(EXISTS(SELF\IfcTypeObject.Types[1])) OR (SIZEOF(QUERY(temp <* SELF\IfcTypeObject.Types[1].RelatedObjects | NOT('IFCKERNEL.IFCPRODUCT' IN TYPEOF(temp))) ) = 0);

END_ENTITY;

ENTITY IfcUnitAssignment;

Units | : | SET [1:?] OF IfcUnit;

| WHERE

WR01 | : | IfcCorrectUnitAssignment(Units);

END_ENTITY;

ENTITY IfcUnitaryEquipment

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned | : | (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

END_ENTITY;

ENTITY IfcUnitaryEquipmentType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcUnitaryEquipmentTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));

END_ENTITY;

ENTITY IfcZone

| SUBTYPE OF (IfcSystem);

LongName | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR1 | : | (SIZEOF(SELF\IfcGroup.IsGroupedBy) = 0) OR (SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy[1].RelatedObjects | NOT(('IFCPRODUCTEXTENSION.IFCZONE' IN TYPEOF(temp)) OR ('IFCPRODUCTEXTENSION.IFCSPACE' IN TYPEOF(temp)) OR ('IFCPRODUCTEXTENSION.IFCSPATIALZONE' IN TYPEOF(temp)) ))) = 0);

END_ENTITY;

RULE IfcRepresentationContextSameWCS FOR ( IfcGeometricRepresentationContext );
LOCAL
IsDifferent : LOGICAL := FALSE;
END_LOCAL;
IF (SIZEOF(IfcGeometricRepresentationContext) > 1)
THEN
REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);
IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)
THEN
IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,
IfcGeometricRepresentationContext[i].Precision)))
OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,
IfcGeometricRepresentationContext[i].WorldCoordinateSystem,
IfcGeometricRepresentationContext[1].Precision)));
IF (IsDifferent = TRUE) THEN
ESCAPE;
END_IF;
END_IF;
END_REPEAT;
END_IF;
WHERE
WR1 : IsDifferent = FALSE
END_RULE;

RULE IfcSingleProjectInstance FOR ( IfcProject );
WHERE
WR1 : SIZEOF(IfcProject) <= 1
END_RULE;

END_SCHEMA;