SCHEMA IFC4;

TYPE IfcAreaMeasure = REAL;

END_TYPE;

TYPE IfcBoolean = BOOLEAN;

END_TYPE;

TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;

| WHERE
MinutesInRange | : | ABS(SELF[2]) < 60 |
SecondsInRange | : | ABS(SELF[3]) < 60 |
MicrosecondsInRange | : | (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000) |
ConsistentSign | : | ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0))) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0))) |

END_TYPE;

TYPE IfcCountMeasure = NUMBER;

END_TYPE;

TYPE IfcDate = STRING;

END_TYPE;

TYPE IfcDateTime = STRING;

END_TYPE;

TYPE IfcDayInMonthNumber = INTEGER;

| WHERE
ValidRange | : | {1 <= SELF <= 31} |

END_TYPE;

TYPE IfcDayInWeekNumber = INTEGER;

| WHERE
ValidRange | : | {1 <= SELF <= 7} |

END_TYPE;

TYPE IfcDimensionCount = INTEGER;

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

END_TYPE;

TYPE IfcDuration = STRING;

END_TYPE;

TYPE IfcElectricCurrentMeasure = REAL;

END_TYPE;

TYPE IfcElectricResistanceMeasure = REAL;

END_TYPE;

TYPE IfcElectricVoltageMeasure = REAL;

END_TYPE;

TYPE IfcEnergyMeasure = REAL;

END_TYPE;

TYPE IfcFrequencyMeasure = REAL;

END_TYPE;

TYPE IfcGloballyUniqueId = STRING (22) FIXED;

END_TYPE;

TYPE IfcIdentifier = STRING (255);

END_TYPE;

TYPE IfcIlluminanceMeasure = REAL;

END_TYPE;

TYPE IfcInteger = INTEGER;

END_TYPE;

TYPE IfcLabel = STRING (255);

END_TYPE;

TYPE IfcLengthMeasure = REAL;

END_TYPE;

TYPE IfcLogical = LOGICAL;

END_TYPE;

TYPE IfcMassMeasure = REAL;

END_TYPE;

TYPE IfcMonetaryMeasure = REAL;

END_TYPE;

TYPE IfcMonthInYearNumber = INTEGER;

| WHERE
ValidRange | : | {1 <= SELF <= 12} |

END_TYPE;

TYPE IfcNormalisedRatioMeasure = IfcStrippedOptional;

| WHERE
WR1 | : | {0.0 <= SELF <= 1.0} |

END_TYPE;

TYPE IfcPlanarForceMeasure = REAL;

END_TYPE;

TYPE IfcPlaneAngleMeasure = REAL;

END_TYPE;

TYPE IfcPositiveLengthMeasure = IfcLengthMeasure;

| WHERE
WR1 | : | SELF > 0. |

END_TYPE;

TYPE IfcPositiveRatioMeasure = IfcStrippedOptional;

| WHERE
WR1 | : | SELF > 0. |

END_TYPE;

TYPE IfcPowerMeasure = REAL;

END_TYPE;

TYPE IfcPresentableText = STRING;

END_TYPE;

TYPE IfcReal = REAL;

END_TYPE;

TYPE IfcText = STRING;

END_TYPE;

TYPE IfcThermalConductivityMeasure = REAL;

END_TYPE;

TYPE IfcThermodynamicTemperatureMeasure = REAL;

END_TYPE;

TYPE IfcTime = STRING;

END_TYPE;

TYPE IfcTimeMeasure = REAL;

END_TYPE;

TYPE IfcTimeStamp = INTEGER;

END_TYPE;

TYPE IfcVolumeMeasure = REAL;

END_TYPE;

TYPE IfcBooleanOperator = ENUMERATION OF (

| UNION, INTERSECTION, DIFFERENCE);

END_TYPE;

TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF (

| BEND, CROSS, REDUCER, TEE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF (

| CABLELADDERSEGMENT, CABLETRAYSEGMENT, CABLETRUNKINGSEGMENT, CONDUITSEGMENT, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcCableFittingTypeEnum = ENUMERATION OF (

| CONNECTOR, ENTRY, EXIT, JUNCTION, TRANSITION, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcCableSegmentTypeEnum = ENUMERATION OF (

| BUSBARSEGMENT, CABLESEGMENT, CONDUCTORSEGMENT, CORESEGMENT, 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 IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF (

| DEMOLISHING, EARTHMOVING, ERECTING, HEATING, LIGHTING, PAVING, PUMPING, TRANSPORTING, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcCoveringTypeEnum = ENUMERATION OF (

| CEILING, FLOORING, CLADDING, ROOFING, MOLDING, SKIRTINGBOARD, INSULATION, MEMBRANE, SLEEVING, WRAPPING, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcDataOriginEnum = ENUMERATION OF (

| MEASURED, PREDICTED, SIMULATED, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcDistributionPortTypeEnum = ENUMERATION OF (

| CABLE, CABLECARRIER, DUCT, PIPE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcDistributionSystemEnum = ENUMERATION OF (

| AIRCONDITIONING, AUDIOVISUAL, CHEMICAL, CHILLEDWATER, COMMUNICATION, COMPRESSEDAIR, CONDENSERWATER, CONTROL, CONVEYING, DATA, DISPOSAL, DOMESTICCOLDWATER, DOMESTICHOTWATER, DRAINAGE, EARTHING, ELECTRICAL, ELECTROACOUSTIC, EXHAUST, FIREPROTECTION, FUEL, GAS, HAZARDOUS, HEATING, LIGHTING, LIGHTNINGPROTECTION, MUNICIPALSOLIDWASTE, OIL, OPERATIONAL, POWERGENERATION, RAINWATER, REFRIGERATION, SECURITY, SEWAGE, SIGNAL, STORMWATER, TELEPHONE, TV, VACUUM, VENT, VENTILATION, WASTEWATER, WATERSUPPLY, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF (

| DISHWASHER, ELECTRICCOOKER, FREESTANDINGELECTRICHEATER, FREESTANDINGFAN, FREESTANDINGWATERHEATER, FREESTANDINGWATERCOOLER, FREEZER, FRIDGE_FREEZER, HANDDRYER, KITCHENMACHINE, MICROWAVE, PHOTOCOPIER, REFRIGERATOR, TUMBLEDRYER, VENDINGMACHINE, WASHINGMACHINE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF (

| CONSUMERUNIT, DISTRIBUTIONBOARD, MOTORCONTROLCENTRE, SWITCHBOARD, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF (

| BATTERY, CAPACITORBANK, HARMONICFILTER, INDUCTORBANK, UPS, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF (

| CHP, ENGINEGENERATOR, STANDALONE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcElectricMotorTypeEnum = ENUMERATION OF (

| DC, INDUCTION, POLYPHASE, RELUCTANCESYNCHRONOUS, SYNCHRONOUS, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcFlowDirectionEnum = ENUMERATION OF (

| SOURCE, SINK, SOURCEANDSINK, NOTDEFINED);

END_TYPE;

TYPE IfcFlowMeterTypeEnum = ENUMERATION OF (

| ENERGYMETER, GASMETER, OILMETER, WATERMETER, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcGridTypeEnum = ENUMERATION OF (

| RECTANGULAR, RADIAL, TRIANGULAR, IRREGULAR, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF (

| DATA, POWER, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcLampTypeEnum = ENUMERATION OF (

| COMPACTFLUORESCENT, FLUORESCENT, HALOGEN, HIGHPRESSUREMERCURY, HIGHPRESSURESODIUM, LED, METALHALIDE, OLED, TUNGSTENFILAMENT, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcLightFixtureTypeEnum = ENUMERATION OF (

| POINTSOURCE, DIRECTIONSOURCE, SECURITYLIGHTING, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcOutletTypeEnum = ENUMERATION OF (

| AUDIOVISUALOUTLET, COMMUNICATIONSOUTLET, POWEROUTLET, DATAOUTLET, TELEPHONEOUTLET, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcProfileTypeEnum = ENUMERATION OF (

| CURVE, AREA);

END_TYPE;

TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF (

| CIRCUITBREAKER, EARTHLEAKAGECIRCUITBREAKER, EARTHINGSWITCH, FUSEDISCONNECTOR, RESIDUALCURRENTCIRCUITBREAKER, RESIDUALCURRENTSWITCH, VARISTOR, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcPumpTypeEnum = ENUMERATION OF (

| CIRCULATOR, ENDSUCTION, SPLITCASE, SUBMERSIBLEPUMP, SUMPPUMP, VERTICALINLINE, VERTICALTURBINE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcRecurrenceTypeEnum = ENUMERATION OF (

| DAILY, WEEKLY, MONTHLY_BY_DAY_OF_MONTH, MONTHLY_BY_POSITION, BY_DAY_COUNT, BY_WEEKDAY_COUNT, YEARLY_BY_DAY_OF_MONTH, YEARLY_BY_POSITION);

END_TYPE;

TYPE IfcRoleEnum = ENUMERATION OF (

| SUPPLIER, MANUFACTURER, CONTRACTOR, SUBCONTRACTOR, ARCHITECT, STRUCTURALENGINEER, COSTENGINEER, CLIENT, BUILDINGOWNER, BUILDINGOPERATOR, MECHANICALENGINEER, ELECTRICALENGINEER, PROJECTMANAGER, FACILITIESMANAGER, CIVILENGINEER, COMMISSIONINGENGINEER, ENGINEER, OWNER, CONSULTANT, CONSTRUCTIONMANAGER, FIELDCONSTRUCTIONMANAGER, RESELLER, USERDEFINED);

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 IfcSolarDeviceTypeEnum = ENUMERATION OF (

| SOLARCOLLECTOR, SOLARPANEL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcSpaceTypeEnum = ENUMERATION OF (

| SPACE, PARKING, GFA, INTERNAL, EXTERNAL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcStateEnum = ENUMERATION OF (

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

END_TYPE;

TYPE IfcSubContractResourceTypeEnum = ENUMERATION OF (

| PURCHASE, WORK, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcSurfaceSide = ENUMERATION OF (

| POSITIVE, NEGATIVE, BOTH);

END_TYPE;

TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF (

| CONTACTOR, DIMMERSWITCH, EMERGENCYSTOP, KEYPAD, MOMENTARYSWITCH, SELECTORSWITCH, STARTER, SWITCHDISCONNECTOR, TOGGLESWITCH, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcTaskTypeEnum = ENUMERATION OF (

| ATTENDANCE, CONSTRUCTION, DEMOLITION, DISMANTLE, DISPOSAL, INSTALLATION, LOGISTIC, MAINTENANCE, MOVE, OPERATION, REMOVAL, RENOVATION, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcTextPath = ENUMERATION OF (

| LEFT, RIGHT, UP, DOWN);

END_TYPE;

TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF (

| CONTINUOUS, DISCRETE, DISCRETEBINARY, PIECEWISEBINARY, PIECEWISECONSTANT, PIECEWISECONTINUOUS, NOTDEFINED);

END_TYPE;

TYPE IfcTransformerTypeEnum = ENUMERATION OF (

| CURRENT, FREQUENCY, INVERTER, RECTIFIER, VOLTAGE, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcTransitionCode = ENUMERATION OF (

| DISCONTINUOUS, CONTINUOUS, CONTSAMEGRADIENT, CONTSAMEGRADIENTSAMECURVATURE);

END_TYPE;

TYPE IfcTransportElementTypeEnum = ENUMERATION OF (

| ELEVATOR, ESCALATOR, MOVINGWALKWAY, CRANEWAY, LIFTINGGEAR, USERDEFINED, NOTDEFINED);

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 IfcActorSelect = SELECT (

| IfcOrganization, IfcPerson, IfcPersonAndOrganization);

END_TYPE;

TYPE IfcAppliedValueSelect = SELECT (

| IfcMeasureWithUnit, IfcValue);

END_TYPE;

TYPE IfcAxis2Placement = SELECT (

| IfcAxis2Placement3D);

END_TYPE;

TYPE IfcBooleanOperand = SELECT (

| IfcSolidModel, IfcBooleanResult);

END_TYPE;

TYPE IfcClassificationReferenceSelect = SELECT (

| IfcClassificationReference, IfcClassification);

END_TYPE;

TYPE IfcClassificationSelect = SELECT (

| IfcClassification, IfcClassificationReference);

END_TYPE;

TYPE IfcCsgSelect = SELECT (

| IfcBooleanResult);

END_TYPE;

TYPE IfcDefinitionSelect = SELECT (

| IfcObjectDefinition, IfcPropertyDefinition);

END_TYPE;

TYPE IfcFillStyleSelect = SELECT (

END_TYPE;

TYPE IfcGeometricSetSelect = SELECT (

| IfcPoint, IfcCurve, IfcSurface);

END_TYPE;

TYPE IfcLayeredItem = SELECT (

| IfcRepresentationItem, IfcRepresentation);

END_TYPE;

TYPE IfcMaterialSelect = SELECT (

| IfcMaterialUsageDefinition, IfcMaterialDefinition);

END_TYPE;

TYPE IfcObjectReferenceSelect = SELECT (

| IfcMaterialDefinition, IfcPerson, IfcOrganization, IfcPersonAndOrganization, IfcExternalReference, IfcTimeSeries, IfcAddress, IfcAppliedValue);

END_TYPE;

TYPE IfcProcessSelect = SELECT (

| IfcProcess, IfcTypeProcess);

END_TYPE;

TYPE IfcProductSelect = SELECT (

| IfcProduct, IfcTypeProduct);

END_TYPE;

TYPE IfcPropertySetDefinitionSelect = SELECT (

| IfcPropertySetDefinition);

END_TYPE;

TYPE IfcResourceSelect = SELECT (

| IfcResource, IfcTypeResource);

END_TYPE;

TYPE IfcShell = SELECT (

| IfcClosedShell);

END_TYPE;

TYPE IfcStyleAssignmentSelect = SELECT (

| IfcPresentationStyle);

END_TYPE;

TYPE IfcSurfaceStyleElementSelect = SELECT (

END_TYPE;

TYPE IfcUnit = SELECT (

| IfcNamedUnit);

END_TYPE;

TYPE IfcValue = SELECT (

END_TYPE;

ENTITY IfcActor

| SUPERTYPE OF(IfcOccupant)

| SUBTYPE OF (IfcObject);

TheActor | : | IfcActorSelect;

| INVERSE

IsActingUpon | : | SET OF IfcRelAssignsToActor FOR RelatingActor;

END_ENTITY;

ENTITY IfcActorRole;

Role | : | IfcRoleEnum;
UserDefinedRole | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;

| INVERSE

| WHERE

WR1 | : | (Role <> IfcRoleEnum.USERDEFINED) OR ((Role = IfcRoleEnum.USERDEFINED) AND EXISTS(SELF.UserDefinedRole));

END_ENTITY;

ENTITY IfcAddress

| ABSTRACT SUPERTYPE OF(ONEOF(IfcPostalAddress, IfcTelecomAddress));

Purpose | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;
UserDefinedPurpose | : | OPTIONAL IfcStrippedOptional;

| INVERSE

OfPerson | : | SET OF IfcPerson FOR Addresses;
OfOrganization | : | SET OF IfcOrganization FOR Addresses;

| WHERE

WR1 | : | (NOT(EXISTS(Purpose))) OR ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND EXISTS(SELF.UserDefinedPurpose)));

END_ENTITY;

ENTITY IfcAdvancedBrep

| SUBTYPE OF (IfcManifoldSolidBrep);

| WHERE

HasAdvancedFaces | : | SIZEOF(QUERY(Afs <* SELF\IfcManifoldSolidBrep.Outer.CfsFaces | (NOT ('IFCTOPOLOGYRESOURCE.IFCADVANCEDFACE' IN TYPEOF(Afs))) )) = 0;

END_ENTITY;

ENTITY IfcAnnotationFillArea

| SUBTYPE OF (IfcGeometricRepresentationItem);

OuterBoundary | : | IfcCurve;
InnerBoundaries | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;

END_ENTITY;

ENTITY IfcApplication;

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

| UNIQUE

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

END_ENTITY;

ENTITY IfcAppliedValue

| SUPERTYPE OF(IfcCostValue);

Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
AppliedValue | : | OPTIONAL IfcAppliedValueSelect;
UnitBasis | : | OPTIONAL IfcMeasureWithUnit;
ApplicableDate | : | OPTIONAL IfcDate;
FixedUntilDate | : | OPTIONAL IfcDate;
Category | : | OPTIONAL IfcStrippedOptional;
Condition | : | OPTIONAL IfcStrippedOptional;
ArithmeticOperator | : | OPTIONAL IfcStrippedOptional;
Components | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcAxis1Placement

| SUBTYPE OF (IfcPlacement);

Axis | : | OPTIONAL IfcStrippedOptional;

| DERIVE

Z | : | IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));

| WHERE

AxisIs3D | : | (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
LocationIs3D | : | SELF\IfcPlacement.Location.Dim = 3;

END_ENTITY;

ENTITY IfcAxis2Placement3D

| SUBTYPE OF (IfcPlacement);

Axis | : | OPTIONAL IfcDirection;
RefDirection | : | OPTIONAL IfcDirection;

| 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 IfcBeam

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcBooleanClippingResult

| SUBTYPE OF (IfcBooleanResult);

| WHERE

FirstOperandType | : | ('IFCGEOMETRICMODELRESOURCE.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFCGEOMETRICMODELRESOURCE.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR ('IFCGEOMETRICMODELRESOURCE.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));
SecondOperandType | : | ('IFCGEOMETRICMODELRESOURCE.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));
OperatorType | : | Operator = DIFFERENCE;

END_ENTITY;

ENTITY IfcBooleanResult

| SUPERTYPE OF(IfcBooleanClippingResult)

| SUBTYPE OF (IfcGeometricRepresentationItem);

Operator | : | IfcBooleanOperator;
FirstOperand | : | IfcBooleanOperand;
SecondOperand | : | IfcBooleanOperand;

| DERIVE

Dim | : | IfcDimensionCount := FirstOperand.Dim;

| WHERE

SameDim | : | FirstOperand.Dim = SecondOperand.Dim;

END_ENTITY;

ENTITY IfcBoundedCurve

| ABSTRACT SUPERTYPE OF(IfcCompositeCurve)

| SUBTYPE OF (IfcCurve);

END_ENTITY;

ENTITY IfcBoundedSurface

| SUBTYPE OF (IfcSurface);

END_ENTITY;

ENTITY IfcBuilding

| SUBTYPE OF (IfcSpatialStructureElement);

ElevationOfRefHeight | : | OPTIONAL IfcLengthMeasure;
ElevationOfTerrain | : | OPTIONAL IfcLengthMeasure;
BuildingAddress | : | OPTIONAL IfcPostalAddress;

END_ENTITY;

ENTITY IfcBuildingElement

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBeam, IfcCovering, IfcMember, IfcPlate, IfcSlab, IfcWall))

| SUBTYPE OF (IfcElement);

| INVERSE

| WHERE

MaxOneMaterialAssociation | : | SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | 'IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) <= 1;

END_ENTITY;

ENTITY IfcBuildingElementPart

| SUBTYPE OF (IfcElementComponent);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcBuildingStorey

| SUBTYPE OF (IfcSpatialStructureElement);

Elevation | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcCableCarrierFitting

| SUBTYPE OF (IfcFlowFitting);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcCableCarrierFittingType

| SUBTYPE OF (IfcFlowFittingType);

PredefinedType | : | IfcCableCarrierFittingTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcCableCarrierSegment

| SUBTYPE OF (IfcFlowSegment);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcCableCarrierSegmentType

| SUBTYPE OF (IfcFlowSegmentType);

PredefinedType | : | IfcCableCarrierSegmentTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcCableFitting

| SUBTYPE OF (IfcFlowFitting);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcCableFittingType

| SUBTYPE OF (IfcFlowFittingType);

PredefinedType | : | IfcCableFittingTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcCableSegment

| SUBTYPE OF (IfcFlowSegment);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcCableSegmentType

| SUBTYPE OF (IfcFlowSegmentType);

PredefinedType | : | IfcCableSegmentTypeEnum;

| WHERE

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

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 IfcCartesianPointList

| ABSTRACT SUPERTYPE OF(IfcCartesianPointList3D)

| SUBTYPE OF (IfcGeometricRepresentationItem);

END_ENTITY;

ENTITY IfcCartesianPointList3D

| SUBTYPE OF (IfcCartesianPointList);

CoordList | : | LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;

END_ENTITY;

ENTITY IfcCartesianTransformationOperator

| SUBTYPE OF (IfcGeometricRepresentationItem);

Axis1 | : | OPTIONAL IfcStrippedOptional;
Axis2 | : | OPTIONAL IfcStrippedOptional;
LocalOrigin | : | IfcCartesianPoint;
Scale | : | OPTIONAL IfcStrippedOptional;

| DERIVE

Scl | : | REAL := NVL(Scale, 1.0);
Dim | : | IfcDimensionCount := LocalOrigin.Dim;

| WHERE

ScaleGreaterZero | : | Scl > 0.0;

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 IfcClosedShell

| SUBTYPE OF (IfcConnectedFaceSet);

END_ENTITY;

ENTITY IfcColourRgb

| SUBTYPE OF (IfcColourSpecification);

Red | : | IfcNormalisedRatioMeasure;
Green | : | IfcNormalisedRatioMeasure;
Blue | : | IfcNormalisedRatioMeasure;

END_ENTITY;

ENTITY IfcColourSpecification

| ABSTRACT SUPERTYPE OF(IfcColourRgb)

| SUBTYPE OF (IfcPresentationItem);

Name | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcCompositeCurve

| SUBTYPE OF (IfcBoundedCurve);

Segments | : | LIST [1:?] OF IfcCompositeCurveSegment;
SelfIntersect | : | IfcStrippedOptional;

| DERIVE

NSegments | : | INTEGER := SIZEOF(Segments);
ClosedCurve | : | LOGICAL := Segments[NSegments].Transition <> Discontinuous;

| WHERE

CurveContinuous | : | ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));
SameDim | : | SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;

END_ENTITY;

ENTITY IfcCompositeCurveSegment

| SUBTYPE OF (IfcGeometricRepresentationItem);

Transition | : | IfcTransitionCode;
SameSense | : | IfcStrippedOptional;
ParentCurve | : | IfcCurve;

| INVERSE

UsingCurves | : | SET [1:?] OF IfcCompositeCurve FOR Segments;

| DERIVE

Dim | : | IfcDimensionCount := ParentCurve.Dim;

| WHERE

ParentIsBoundedCurve | : | ('IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));

END_ENTITY;

ENTITY IfcConnectedFaceSet

| SUPERTYPE OF(IfcClosedShell)

| SUBTYPE OF (IfcTopologicalRepresentationItem);

CfsFaces | : | SET [1:?] OF IfcFace;

END_ENTITY;

ENTITY IfcConstructionEquipmentResource

| SUBTYPE OF (IfcConstructionResource);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));

END_ENTITY;

ENTITY IfcConstructionEquipmentResourceType

| SUBTYPE OF (IfcConstructionResourceType);

PredefinedType | : | IfcConstructionEquipmentResourceTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));

END_ENTITY;

ENTITY IfcConstructionResource

| ABSTRACT SUPERTYPE OF(ONEOF(IfcConstructionEquipmentResource, IfcSubContractResource))

| SUBTYPE OF (IfcResource);

Usage | : | OPTIONAL IfcStrippedOptional;
BaseCosts | : | OPTIONAL LIST [1:?] OF IfcAppliedValue;
BaseQuantity | : | OPTIONAL IfcPhysicalQuantity;

END_ENTITY;

ENTITY IfcConstructionResourceType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcConstructionEquipmentResourceType, IfcSubContractResourceType))

| SUBTYPE OF (IfcTypeResource);

BaseCosts | : | OPTIONAL LIST [1:?] OF IfcAppliedValue;
BaseQuantity | : | OPTIONAL IfcStrippedOptional;

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

IsDefinedBy | : | SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;
Declares | : | SET OF IfcRelDeclares FOR RelatingContext;

END_ENTITY;

ENTITY IfcControl

| ABSTRACT SUPERTYPE OF(ONEOF(IfcCostItem, IfcCostSchedule, IfcPerformanceHistory, IfcWorkCalendar, IfcWorkControl))

| SUBTYPE OF (IfcObject);

Identification | : | OPTIONAL IfcStrippedOptional;

| INVERSE

Controls | : | SET OF IfcRelAssignsToControl FOR RelatingControl;

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 IfcCostItem

| SUBTYPE OF (IfcControl);

PredefinedType | : | OPTIONAL IfcStrippedOptional;
CostValues | : | OPTIONAL LIST [1:?] OF IfcCostValue;
CostQuantities | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

END_ENTITY;

ENTITY IfcCostSchedule

| SUBTYPE OF (IfcControl);

PredefinedType | : | OPTIONAL IfcStrippedOptional;
Status | : | OPTIONAL IfcStrippedOptional;
SubmittedOn | : | OPTIONAL IfcStrippedOptional;
UpdateDate | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcCostValue

| SUBTYPE OF (IfcAppliedValue);

END_ENTITY;

ENTITY IfcCovering

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcCoveringTypeEnum;

| INVERSE

CoversSpaces | : | SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;

| WHERE

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

END_ENTITY;

ENTITY IfcCsgSolid

| SUBTYPE OF (IfcSolidModel);

TreeRootExpression | : | IfcCsgSelect;

END_ENTITY;

ENTITY IfcCurve

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBoundedCurve, IfcLine))

| SUBTYPE OF (IfcGeometricRepresentationItem);

| DERIVE

Dim | : | IfcDimensionCount := IfcCurveDim(SELF);

END_ENTITY;

ENTITY IfcCurveStyle

| SUBTYPE OF (IfcPresentationStyle);

CurveFont | : | OPTIONAL IfcStrippedOptional;
CurveWidth | : | OPTIONAL IfcStrippedOptional;
CurveColour | : | OPTIONAL IfcStrippedOptional;
ModelOrDraughting | : | OPTIONAL IfcStrippedOptional;

| WHERE

MeasureOfWidth | : | (NOT(EXISTS(CurveWidth))) OR ('IFCMEASURERESOURCE.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR (('IFCMEASURERESOURCE.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND (CurveWidth = 'by layer'));
IdentifiableCurveStyle | : | EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour);

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 IfcDistributionCircuit

| SUBTYPE OF (IfcDistributionSystem);

END_ENTITY;

ENTITY IfcDistributionElement

| SUPERTYPE OF(IfcDistributionFlowElement)

| SUBTYPE OF (IfcElement);

| INVERSE

END_ENTITY;

ENTITY IfcDistributionElementType

| SUPERTYPE OF(IfcDistributionFlowElementType)

| SUBTYPE OF (IfcElementType);

END_ENTITY;

ENTITY IfcDistributionFlowElement

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

| SUBTYPE OF (IfcDistributionElement);

| INVERSE

END_ENTITY;

ENTITY IfcDistributionFlowElementType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcEnergyConversionDeviceType, IfcFlowControllerType, IfcFlowFittingType, IfcFlowMovingDeviceType, IfcFlowSegmentType, IfcFlowStorageDeviceType, IfcFlowTerminalType))

| SUBTYPE OF (IfcDistributionElementType);

END_ENTITY;

ENTITY IfcDistributionPort

| SUBTYPE OF (IfcPort);

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

END_ENTITY;

ENTITY IfcDistributionSystem

| SUPERTYPE OF(IfcDistributionCircuit)

| SUBTYPE OF (IfcSystem);

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

END_ENTITY;

ENTITY IfcElectricAppliance

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricApplianceType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcElectricApplianceTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricDistributionBoard

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricDistributionBoardType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcElectricDistributionBoardTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricFlowStorageDevice

| SUBTYPE OF (IfcFlowStorageDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricFlowStorageDeviceType

| SUBTYPE OF (IfcFlowStorageDeviceType);

PredefinedType | : | IfcElectricFlowStorageDeviceTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricGenerator

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricGeneratorType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcElectricGeneratorTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricMotor

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcElectricMotorType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcElectricMotorTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcElement

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElement, IfcDistributionElement, IfcElementComponent, IfcTransportElement))

| SUBTYPE OF (IfcProduct);

Tag | : | OPTIONAL IfcStrippedOptional;

| INVERSE

IsInterferedByElements | : | SET OF IfcRelInterferesElements FOR RelatedElement;
InterferesElements | : | SET OF IfcRelInterferesElements FOR RelatingElement;
ContainedInStructure | : | SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;

END_ENTITY;

ENTITY IfcElementComponent

| ABSTRACT SUPERTYPE OF(IfcBuildingElementPart)

| SUBTYPE OF (IfcElement);

END_ENTITY;

ENTITY IfcElementType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcDistributionElementType, IfcTransportElementType))

| SUBTYPE OF (IfcTypeProduct);

ElementType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcEnergyConversionDevice

| SUPERTYPE OF(ONEOF(IfcChiller, IfcElectricGenerator, IfcElectricMotor, IfcSolarDevice, IfcTransformer, IfcUnitaryEquipment))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcEnergyConversionDeviceType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcChillerType, IfcElectricGeneratorType, IfcElectricMotorType, IfcSolarDeviceType, IfcTransformerType, IfcUnitaryEquipmentType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcExtendedProperties

| ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterialProperties, IfcProfileProperties))

| SUBTYPE OF (IfcPropertyAbstraction);

Name | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;
Properties | : | SET [1:?] OF IfcProperty;

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 IfcExtrudedAreaSolid

| SUBTYPE OF (IfcSweptAreaSolid);

ExtrudedDirection | : | IfcDirection;
Depth | : | IfcPositiveLengthMeasure;

| WHERE

ValidExtrusionDirection | : | IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;

END_ENTITY;

ENTITY IfcFace

| SUBTYPE OF (IfcTopologicalRepresentationItem);

Bounds | : | SET [1:?] OF IfcFaceBound;

| INVERSE

| WHERE

HasOuterBound | : | SIZEOF(QUERY(temp <* Bounds | 'IFCTOPOLOGYRESOURCE.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;

END_ENTITY;

ENTITY IfcFaceBasedSurfaceModel

| SUBTYPE OF (IfcGeometricRepresentationItem);

FbsmFaces | : | SET [1:?] OF IfcConnectedFaceSet;

| DERIVE

Dim | : | IfcDimensionCount := 3;

END_ENTITY;

ENTITY IfcFaceBound

| SUBTYPE OF (IfcTopologicalRepresentationItem);

Bound | : | IfcLoop;
Orientation | : | IfcStrippedOptional;

END_ENTITY;

ENTITY IfcFacetedBrep

| SUBTYPE OF (IfcManifoldSolidBrep);

END_ENTITY;

ENTITY IfcFillAreaStyle

| SUBTYPE OF (IfcPresentationStyle);

FillStyles | : | SET [1:?] OF IfcFillStyleSelect;
ModelorDraughting | : | OPTIONAL IfcStrippedOptional;

| WHERE

MaxOneColour | : | SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCCOLOUR' IN TYPEOF(Style) )) <= 1;
MaxOneExtHatchStyle | : | SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN TYPEOF(Style) )) <= 1;
ConsistentHatchStyleDef | : | IfcCorrectFillAreaStyle(SELF.FillStyles);

END_ENTITY;

ENTITY IfcFlowController

| SUPERTYPE OF(ONEOF(IfcElectricDistributionBoard, IfcFlowMeter, IfcProtectiveDevice, IfcSwitchingDevice))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowControllerType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcElectricDistributionBoardType, IfcFlowMeterType, IfcProtectiveDeviceType, IfcSwitchingDeviceType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowFitting

| SUPERTYPE OF(ONEOF(IfcCableCarrierFitting, IfcCableFitting, IfcJunctionBox))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowFittingType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcCableCarrierFittingType, IfcCableFittingType, IfcJunctionBoxType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowMeter

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcFlowMeterType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcFlowMeterTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcFlowMovingDevice

| SUPERTYPE OF(IfcPump)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowMovingDeviceType

| ABSTRACT SUPERTYPE OF(IfcPumpType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowSegment

| SUPERTYPE OF(ONEOF(IfcCableCarrierSegment, IfcCableSegment))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowSegmentType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcCableCarrierSegmentType, IfcCableSegmentType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowStorageDevice

| SUPERTYPE OF(IfcElectricFlowStorageDevice)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowStorageDeviceType

| ABSTRACT SUPERTYPE OF(IfcElectricFlowStorageDeviceType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowTerminal

| SUPERTYPE OF(ONEOF(IfcElectricAppliance, IfcLamp, IfcLightFixture, IfcOutlet))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTerminalType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcElectricApplianceType, IfcLampType, IfcLightFixtureType, IfcOutletType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcGeometricCurveSet

| SUBTYPE OF (IfcGeometricSet);

| WHERE

NoSurfaces | : | SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | 'IFCGEOMETRYRESOURCE.IFCSURFACE' IN TYPEOF(Temp))) = 0;

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(IfcAnnotationFillArea, IfcBooleanResult, IfcCartesianPointList, IfcCartesianTransformationOperator, IfcCompositeCurveSegment, IfcCurve, IfcDirection, IfcFaceBasedSurfaceModel, IfcGeometricSet, IfcLightSource, IfcPlacement, IfcPoint, IfcSectionedSpine, IfcShellBasedSurfaceModel, IfcSolidModel, IfcSurface, IfcTessellatedItem, IfcTextLiteral, IfcVector))

| SUBTYPE OF (IfcRepresentationItem);

END_ENTITY;

ENTITY IfcGeometricSet

| SUPERTYPE OF(IfcGeometricCurveSet)

| SUBTYPE OF (IfcGeometricRepresentationItem);

Elements | : | SET [1:?] OF IfcGeometricSetSelect;

| DERIVE

Dim | : | IfcDimensionCount := Elements[1].Dim;

| WHERE

ConsistentDim | : | SIZEOF(QUERY(Temp <* Elements | Temp.Dim <> Elements[1].Dim)) = 0;

END_ENTITY;

ENTITY IfcGrid

| SUBTYPE OF (IfcProduct);

UAxes | : | LIST [1:?] OF UNIQUE IfcGridAxis;
VAxes | : | LIST [1:?] OF UNIQUE IfcGridAxis;
WAxes | : | OPTIONAL LIST [1:?] OF UNIQUE IfcStrippedOptional;
PredefinedType | : | OPTIONAL IfcGridTypeEnum;

| INVERSE

ContainedInStructure | : | SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;

| WHERE

HasPlacement | : | EXISTS(SELF\IfcProduct.ObjectPlacement);

END_ENTITY;

ENTITY IfcGridAxis;

AxisTag | : | OPTIONAL IfcLabel;
AxisCurve | : | IfcCurve;
SameSense | : | IfcBoolean;

| INVERSE

PartOfW | : | SET [0:1] OF IfcGrid FOR WAxes;
PartOfV | : | SET [0:1] OF IfcGrid FOR VAxes;
PartOfU | : | SET [0:1] OF IfcGrid FOR UAxes;
HasIntersections | : | SET OF IfcVirtualGridIntersection FOR IntersectingAxes;

| WHERE

WR1 | : | AxisCurve.Dim = 2;
WR2 | : | (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);

END_ENTITY;

ENTITY IfcGridPlacement

| SUBTYPE OF (IfcObjectPlacement);

PlacementLocation | : | IfcVirtualGridIntersection;
PlacementRefDirection | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcGroup

| SUPERTYPE OF(IfcSystem)

| SUBTYPE OF (IfcObject);

| INVERSE

IsGroupedBy | : | SET OF IfcRelAssignsToGroup FOR RelatingGroup;

END_ENTITY;

ENTITY IfcIrregularTimeSeries

| SUBTYPE OF (IfcTimeSeries);

Values | : | LIST [1:?] OF IfcIrregularTimeSeriesValue;

END_ENTITY;

ENTITY IfcIrregularTimeSeriesValue;

TimeStamp | : | IfcDateTime;
ListValues | : | LIST [1:?] OF IfcValue;

END_ENTITY;

ENTITY IfcJunctionBox

| SUBTYPE OF (IfcFlowFitting);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcJunctionBoxType

| SUBTYPE OF (IfcFlowFittingType);

PredefinedType | : | IfcJunctionBoxTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcLamp

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcLampType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcLampTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcLightFixture

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcLightFixtureType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcLightFixtureTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcLightSource

| SUBTYPE OF (IfcGeometricRepresentationItem);

Name | : | OPTIONAL IfcStrippedOptional;
LightColour | : | IfcColourRgb;
AmbientIntensity | : | OPTIONAL IfcStrippedOptional;
Intensity | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcLine

| SUBTYPE OF (IfcCurve);

Pnt | : | IfcCartesianPoint;
Dir | : | IfcVector;

| WHERE

SameDim | : | Dir.Dim = Pnt.Dim;

END_ENTITY;

ENTITY IfcLocalPlacement

| SUBTYPE OF (IfcObjectPlacement);

PlacementRelTo | : | OPTIONAL IfcObjectPlacement;
RelativePlacement | : | IfcAxis2Placement;

| WHERE

WR21 | : | IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);

END_ENTITY;

ENTITY IfcLoop

| SUBTYPE OF (IfcTopologicalRepresentationItem);

END_ENTITY;

ENTITY IfcManifoldSolidBrep

| ABSTRACT SUPERTYPE OF(ONEOF(IfcAdvancedBrep, IfcFacetedBrep))

| SUBTYPE OF (IfcSolidModel);

Outer | : | IfcClosedShell;

END_ENTITY;

ENTITY IfcMappedItem

| SUBTYPE OF (IfcRepresentationItem);

MappingSource | : | IfcRepresentationMap;
MappingTarget | : | IfcCartesianTransformationOperator;

END_ENTITY;

ENTITY IfcMaterial

| SUBTYPE OF (IfcMaterialDefinition);

Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Category | : | OPTIONAL IfcStrippedOptional;

| INVERSE

HasRepresentation | : | SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;

END_ENTITY;

ENTITY IfcMaterialDefinition

| ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterial, IfcMaterialProfile, IfcMaterialProfileSet));

| INVERSE

AssociatedTo | : | SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;
HasProperties | : | SET OF IfcMaterialProperties FOR Material;

END_ENTITY;

ENTITY IfcMaterialDefinitionRepresentation

| SUBTYPE OF (IfcProductRepresentation);

RepresentedMaterial | : | IfcMaterial;

| WHERE

OnlyStyledRepresentations | : | SIZEOF(QUERY(temp <* Representations | (NOT('IFCREPRESENTATIONRESOURCE.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) )) = 0;

END_ENTITY;

ENTITY IfcMaterialProfile

| SUBTYPE OF (IfcMaterialDefinition);

Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Material | : | OPTIONAL IfcMaterial;
Profile | : | IfcProfileDef;
Priority | : | OPTIONAL IfcStrippedOptional;
Category | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ToMaterialProfileSet | : | IfcMaterialProfileSet FOR MaterialProfiles;

END_ENTITY;

ENTITY IfcMaterialProfileSet

| SUBTYPE OF (IfcMaterialDefinition);

Name | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;
MaterialProfiles | : | LIST [1:?] OF IfcMaterialProfile;
CompositeProfile | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcMaterialProfileSetUsage

| SUBTYPE OF (IfcMaterialUsageDefinition);

ForProfileSet | : | IfcMaterialProfileSet;
CardinalPoint | : | OPTIONAL IfcStrippedOptional;
ReferenceExtent | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcMaterialProperties

| SUBTYPE OF (IfcExtendedProperties);

Material | : | IfcMaterialDefinition;

END_ENTITY;

ENTITY IfcMaterialUsageDefinition

| ABSTRACT SUPERTYPE OF(IfcMaterialProfileSetUsage);

| INVERSE

AssociatedTo | : | SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;

END_ENTITY;

ENTITY IfcMeasureWithUnit;

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

END_ENTITY;

ENTITY IfcMember

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

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(IfcActor, IfcControl, IfcGroup, IfcProcess, IfcProduct, IfcResource))

| SUBTYPE OF (IfcObjectDefinition);

ObjectType | : | OPTIONAL IfcStrippedOptional;

| INVERSE

IsDeclaredBy | : | SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;
Declares | : | SET OF IfcRelDefinesByObject FOR RelatingObject;
IsTypedBy | : | SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;
IsDefinedBy | : | SET OF IfcRelDefinesByProperties FOR RelatedObjects;

END_ENTITY;

ENTITY IfcObjectDefinition

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

| SUBTYPE OF (IfcRoot);

| INVERSE

HasAssignments | : | SET OF IfcRelAssigns FOR RelatedObjects;
Nests | : | SET [0:1] OF IfcRelNests FOR RelatedObjects;
IsNestedBy | : | SET OF IfcRelNests FOR RelatingObject;
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 IfcObjectPlacement

| ABSTRACT SUPERTYPE OF(ONEOF(IfcGridPlacement, IfcLocalPlacement));

| INVERSE

PlacesObject | : | SET [0:?] OF IfcProduct FOR ObjectPlacement;
ReferencedByPlacements | : | SET OF IfcLocalPlacement FOR PlacementRelTo;

END_ENTITY;

ENTITY IfcOccupant

| SUBTYPE OF (IfcActor);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR31 | : | NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);

END_ENTITY;

ENTITY IfcOrganization;

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

| INVERSE

Engages | : | SET OF IfcPersonAndOrganization FOR TheOrganization;

END_ENTITY;

ENTITY IfcOutlet

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcOutletType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcOutletTypeEnum;

| WHERE

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

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 IfcPerformanceHistory

| SUBTYPE OF (IfcControl);

LifeCyclePhase | : | IfcLabel;
PredefinedType | : | OPTIONAL IfcStrippedOptional;

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 IfcPhysicalQuantity

| ABSTRACT SUPERTYPE OF(IfcPhysicalSimpleQuantity);

Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcPhysicalSimpleQuantity

| SUBTYPE OF (IfcPhysicalQuantity);

Unit | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcPlacement

| ABSTRACT SUPERTYPE OF(ONEOF(IfcAxis1Placement, IfcAxis2Placement3D))

| SUBTYPE OF (IfcGeometricRepresentationItem);

Location | : | IfcCartesianPoint;

| DERIVE

Dim | : | IfcDimensionCount := Location.Dim;

END_ENTITY;

ENTITY IfcPlate

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcPoint

| ABSTRACT SUPERTYPE OF(IfcCartesianPoint)

| SUBTYPE OF (IfcGeometricRepresentationItem);

END_ENTITY;

ENTITY IfcPort

| ABSTRACT SUPERTYPE OF(IfcDistributionPort)

| SUBTYPE OF (IfcProduct);

| INVERSE

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

END_ENTITY;

ENTITY IfcPostalAddress

| SUBTYPE OF (IfcAddress);

InternalLocation | : | OPTIONAL IfcStrippedOptional;
AddressLines | : | OPTIONAL LIST [1:?] OF IfcLabel;
PostalBox | : | OPTIONAL IfcStrippedOptional;
Town | : | OPTIONAL IfcLabel;
Region | : | OPTIONAL IfcLabel;
PostalCode | : | OPTIONAL IfcLabel;
Country | : | OPTIONAL IfcLabel;

| WHERE

WR1 | : | EXISTS (InternalLocation) OR EXISTS (AddressLines) OR EXISTS (PostalBox) OR EXISTS (PostalCode) OR EXISTS (Town) OR EXISTS (Region) OR EXISTS (Country);

END_ENTITY;

ENTITY IfcPresentationItem

| ABSTRACT SUPERTYPE OF(IfcColourSpecification);

END_ENTITY;

ENTITY IfcPresentationLayerAssignment

Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
AssignedItems | : | SET [1:?] OF IfcLayeredItem;
Identifier | : | OPTIONAL IfcStrippedOptional;

| WHERE

ApplicableItems | : | SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ 'IFCREPRESENTATIONRESOURCE.IFCSHAPEREPRESENTATION', 'IFCGEOMETRYRESOURCE.IFCGEOMETRICREPRESENTATIONITEM', 'IFCGEOMETRYRESOURCE.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems);

END_ENTITY;

ENTITY IfcPresentationStyle

| ABSTRACT SUPERTYPE OF(ONEOF(IfcCurveStyle, IfcFillAreaStyle, IfcSurfaceStyle));

Name | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcProcess

| ABSTRACT SUPERTYPE OF(IfcTask)

| SUBTYPE OF (IfcObject);

Identification | : | OPTIONAL IfcStrippedOptional;
LongDescription | : | OPTIONAL IfcStrippedOptional;

| INVERSE

IsPredecessorTo | : | SET OF IfcRelSequence FOR RelatingProcess;
IsSuccessorFrom | : | SET OF IfcRelSequence FOR RelatedProcess;
OperatesOn | : | SET OF IfcRelAssignsToProcess FOR RelatingProcess;

END_ENTITY;

ENTITY IfcProduct

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

| SUBTYPE OF (IfcObject);

ObjectPlacement | : | OPTIONAL IfcObjectPlacement;
Representation | : | OPTIONAL IfcProductRepresentation;

| INVERSE

ReferencedBy | : | SET OF IfcRelAssignsToProduct FOR RelatingProduct;

| 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 IfcProductDefinitionShape

| SUBTYPE OF (IfcProductRepresentation);

| INVERSE

ShapeOfProduct | : | SET [1:?] OF IfcProduct FOR Representation;

| WHERE

OnlyShapeModel | : | SIZEOF(QUERY(temp <* Representations | (NOT('IFCREPRESENTATIONRESOURCE.IFCSHAPEMODEL' IN TYPEOF(temp))) )) = 0;

END_ENTITY;

ENTITY IfcProductRepresentation

| ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterialDefinitionRepresentation, IfcProductDefinitionShape));

Name | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;
Representations | : | LIST [1:?] OF IfcRepresentation;

END_ENTITY;

ENTITY IfcProfileDef

ProfileType | : | IfcProfileTypeEnum;
ProfileName | : | OPTIONAL IfcStrippedOptional;

| INVERSE

HasProperties | : | SET OF IfcProfileProperties FOR ProfileDefinition;

END_ENTITY;

ENTITY IfcProfileProperties

| SUBTYPE OF (IfcExtendedProperties);

ProfileDefinition | : | IfcProfileDef;

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 IfcProperty

| ABSTRACT SUPERTYPE OF(IfcSimpleProperty)

| SUBTYPE OF (IfcPropertyAbstraction);

Name | : | IfcIdentifier;
Description | : | OPTIONAL IfcStrippedOptional;

| INVERSE

PartOfPset | : | SET OF IfcPropertySet FOR HasProperties;

END_ENTITY;

ENTITY IfcPropertyAbstraction

| ABSTRACT SUPERTYPE OF(ONEOF(IfcExtendedProperties, IfcProperty));

| INVERSE

END_ENTITY;

ENTITY IfcPropertyBoundedValue

| SUBTYPE OF (IfcSimpleProperty);

UpperBoundValue | : | OPTIONAL IfcStrippedOptional;
LowerBoundValue | : | OPTIONAL IfcStrippedOptional;
Unit | : | OPTIONAL IfcStrippedOptional;
SetPointValue | : | OPTIONAL IfcStrippedOptional;

| WHERE

SameUnitUpperLower | : | NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));
SameUnitUpperSet | : | NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue));
SameUnitLowerSet | : | NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue));

END_ENTITY;

ENTITY IfcPropertyDefinition

| ABSTRACT SUPERTYPE OF(IfcPropertySetDefinition)

| SUBTYPE OF (IfcRoot);

| INVERSE

HasContext | : | SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;
HasAssociations | : | SET OF IfcRelAssociates FOR RelatedObjects;

END_ENTITY;

ENTITY IfcPropertyEnumeratedValue

| SUBTYPE OF (IfcSimpleProperty);

EnumerationValues | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
EnumerationReference | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR21 | : | NOT(EXISTS(EnumerationReference)) OR NOT(EXISTS(EnumerationValues)) OR (SIZEOF(QUERY(temp <* EnumerationValues | temp IN EnumerationReference.EnumerationValues)) = SIZEOF(EnumerationValues));

END_ENTITY;

ENTITY IfcPropertyListValue

| SUBTYPE OF (IfcSimpleProperty);

ListValues | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
Unit | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR31 | : | SIZEOF(QUERY(temp <* SELF.ListValues | NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp)) )) = 0;

END_ENTITY;

ENTITY IfcPropertyReferenceValue

| SUBTYPE OF (IfcSimpleProperty);

UsageName | : | OPTIONAL IfcStrippedOptional;
PropertyReference | : | OPTIONAL IfcObjectReferenceSelect;

END_ENTITY;

ENTITY IfcPropertySet

| SUBTYPE OF (IfcPropertySetDefinition);

HasProperties | : | SET [1:?] OF IfcProperty;

| WHERE

ExistsName | : | EXISTS(SELF\IfcRoot.Name);
UniquePropertyNames | : | IfcUniquePropertyName(HasProperties);

END_ENTITY;

ENTITY IfcPropertySetDefinition

| ABSTRACT SUPERTYPE OF(IfcPropertySet)

| SUBTYPE OF (IfcPropertyDefinition);

| INVERSE

DefinesType | : | SET OF IfcTypeObject FOR HasPropertySets;
DefinesOccurrence | : | SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;

END_ENTITY;

ENTITY IfcPropertySingleValue

| SUBTYPE OF (IfcSimpleProperty);

NominalValue | : | OPTIONAL IfcStrippedOptional;
Unit | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcPropertyTableValue

| SUBTYPE OF (IfcSimpleProperty);

DefiningValues | : | OPTIONAL LIST [1:?] OF UNIQUE IfcStrippedOptional;
DefinedValues | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
Expression | : | OPTIONAL IfcStrippedOptional;
DefiningUnit | : | OPTIONAL IfcStrippedOptional;
DefinedUnit | : | OPTIONAL IfcStrippedOptional;
CurveInterpolation | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR21 | : | (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues))) OR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues));
WR22 | : | NOT(EXISTS(DefiningValues)) OR (SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1]) )) = 0);
WR23 | : | NOT(EXISTS(DefinedValues)) OR (SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1]) )) = 0);

END_ENTITY;

ENTITY IfcProtectiveDevice

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcProtectiveDeviceType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcProtectiveDeviceTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcPump

| SUBTYPE OF (IfcFlowMovingDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcPumpType

| SUBTYPE OF (IfcFlowMovingDeviceType);

PredefinedType | : | IfcPumpTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcRecurrencePattern;

RecurrenceType | : | IfcRecurrenceTypeEnum;
DayComponent | : | OPTIONAL SET [1:?] OF IfcDayInMonthNumber;
WeekdayComponent | : | OPTIONAL SET [1:?] OF IfcDayInWeekNumber;
MonthComponent | : | OPTIONAL SET [1:?] OF IfcMonthInYearNumber;
Position | : | OPTIONAL IfcInteger;
Interval | : | OPTIONAL IfcInteger;
Occurrences | : | OPTIONAL IfcInteger;
TimePeriods | : | OPTIONAL LIST [1:?] OF IfcTimePeriod;

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(ONEOF(IfcRelAssignsToActor, IfcRelAssignsToControl, IfcRelAssignsToGroup, IfcRelAssignsToProcess, IfcRelAssignsToProduct, IfcRelAssignsToResource))

| SUBTYPE OF (IfcRelationship);

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

| WHERE

WR1 | : | IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);

END_ENTITY;

ENTITY IfcRelAssignsToActor

| SUBTYPE OF (IfcRelAssigns);

RelatingActor | : | IfcActor;
ActingRole | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssignsToControl

| SUBTYPE OF (IfcRelAssigns);

RelatingControl | : | IfcControl;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssignsToGroup

| SUBTYPE OF (IfcRelAssigns);

RelatingGroup | : | IfcGroup;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssignsToProcess

| SUBTYPE OF (IfcRelAssigns);

RelatingProcess | : | IfcProcessSelect;
QuantityInProcess | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssignsToProduct

| SUBTYPE OF (IfcRelAssigns);

RelatingProduct | : | IfcProductSelect;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssignsToResource

| SUBTYPE OF (IfcRelAssigns);

RelatingResource | : | IfcResourceSelect;

| WHERE

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

END_ENTITY;

ENTITY IfcRelAssociates

| ABSTRACT SUPERTYPE OF(ONEOF(IfcRelAssociatesClassification, IfcRelAssociatesMaterial))

| SUBTYPE OF (IfcRelationship);

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

END_ENTITY;

ENTITY IfcRelAssociatesClassification

| SUBTYPE OF (IfcRelAssociates);

RelatingClassification | : | IfcClassificationSelect;

END_ENTITY;

ENTITY IfcRelAssociatesMaterial

| SUBTYPE OF (IfcRelAssociates);

RelatingMaterial | : | IfcMaterialSelect;

| WHERE

NoVoidElement | : | SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ('IFCPRODUCTEXTENSION.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR ('IFCPRODUCTEXTENSION.IFCVIRTUALELEMENT' IN TYPEOF(temp)) )) = 0;
AllowedElements | : | SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ( SIZEOF(TYPEOF(temp) * [ 'IFCPRODUCTEXTENSION.IFCELEMENT', 'IFCPRODUCTEXTENSION.IFCELEMENTTYPE', 'IFCSHAREDBLDGELEMENTS.IFCWINDOWSTYLE', 'IFCSHAREDBLDGELEMENTS.IFCDOORSTYLE', 'IFCSTRUCTURALANALYSISDOMAIN.IFCSTRUCTURALMEMBER', 'IFCPRODUCTEXTENSION.IFCPORT']) = 0) )) = 0;

END_ENTITY;

ENTITY IfcRelConnects

| ABSTRACT SUPERTYPE OF(ONEOF(IfcRelConnectsPorts, IfcRelContainedInSpatialStructure, IfcRelCoversSpaces, IfcRelInterferesElements, IfcRelSequence))

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelConnectsPorts

| SUBTYPE OF (IfcRelConnects);

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

| WHERE

NoSelfReference | : | RelatingPort :<>: RelatedPort;

END_ENTITY;

ENTITY IfcRelContainedInSpatialStructure

| SUBTYPE OF (IfcRelConnects);

RelatedElements | : | SET [1:?] OF IfcProduct;
RelatingStructure | : | IfcSpatialElement;

| WHERE

WR31 | : | SIZEOF(QUERY(temp <* RelatedElements | 'IFCPRODUCTEXTENSION.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;

END_ENTITY;

ENTITY IfcRelCoversSpaces

| SUBTYPE OF (IfcRelConnects);

RelatingSpace | : | IfcSpace;
RelatedCoverings | : | SET [1:?] OF IfcCovering;

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(ONEOF(IfcRelAggregates, IfcRelNests))

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelDefines

| ABSTRACT SUPERTYPE OF(ONEOF(IfcRelDefinesByObject, IfcRelDefinesByProperties, IfcRelDefinesByType))

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelDefinesByObject

| SUBTYPE OF (IfcRelDefines);

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

END_ENTITY;

ENTITY IfcRelDefinesByProperties

| SUBTYPE OF (IfcRelDefines);

RelatedObjects | : | SET [1:1] OF IfcObjectDefinition;
RelatingPropertyDefinition | : | IfcPropertySetDefinitionSelect;

END_ENTITY;

ENTITY IfcRelDefinesByType

| SUBTYPE OF (IfcRelDefines);

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

END_ENTITY;

ENTITY IfcRelInterferesElements

| SUBTYPE OF (IfcRelConnects);

RelatingElement | : | IfcElement;
RelatedElement | : | IfcElement;
InterferenceGeometry | : | OPTIONAL IfcStrippedOptional;
InterferenceType | : | OPTIONAL IfcStrippedOptional;
ImpliedOrder | : | IfcStrippedOptional;

| WHERE

NotSelfReference | : | RelatingElement :<>: RelatedElement;

END_ENTITY;

ENTITY IfcRelNests

| SUBTYPE OF (IfcRelDecomposes);

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

| WHERE

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

END_ENTITY;

ENTITY IfcRelSequence

| SUBTYPE OF (IfcRelConnects);

RelatingProcess | : | IfcProcess;
RelatedProcess | : | IfcProcess;
TimeLag | : | OPTIONAL IfcStrippedOptional;
SequenceType | : | OPTIONAL IfcStrippedOptional;
UserDefinedSequenceType | : | OPTIONAL IfcStrippedOptional;

| WHERE

AvoidInconsistentSequence | : | RelatingProcess :<>: RelatedProcess;
CorrectSequenceType | : | (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType));

END_ENTITY;

ENTITY IfcRelationship

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

| SUBTYPE OF (IfcRoot);

END_ENTITY;

ENTITY IfcRepresentation

| ABSTRACT SUPERTYPE OF(ONEOF(IfcShapeModel, IfcStyleModel));

ContextOfItems | : | IfcRepresentationContext;
RepresentationIdentifier | : | OPTIONAL IfcLabel;
RepresentationType | : | OPTIONAL IfcLabel;
Items | : | SET [1:?] OF IfcRepresentationItem;

| INVERSE

RepresentationMap | : | SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;
LayerAssignments | : | SET OF IfcPresentationLayerAssignment FOR AssignedItems;
OfProductRepresentation | : | SET OF IfcProductRepresentation FOR Representations;

END_ENTITY;

ENTITY IfcRepresentationContext

| ABSTRACT SUPERTYPE OF(IfcGeometricRepresentationContext);

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

| INVERSE

RepresentationsInContext | : | SET OF IfcRepresentation FOR ContextOfItems;

END_ENTITY;

ENTITY IfcRepresentationItem

| ABSTRACT SUPERTYPE OF(ONEOF(IfcGeometricRepresentationItem, IfcMappedItem, IfcStyledItem, IfcTopologicalRepresentationItem));

| INVERSE

LayerAssignment | : | SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems;
StyledByItem | : | SET [0:1] OF IfcStyledItem FOR Item;

END_ENTITY;

ENTITY IfcRepresentationMap;

MappingOrigin | : | IfcAxis2Placement;
MappedRepresentation | : | IfcRepresentation;

| INVERSE

MapUsage | : | SET OF IfcMappedItem FOR MappingSource;

| WHERE

ApplicableMappedRepr | : | 'IFCREPRESENTATIONRESOURCE.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation);

END_ENTITY;

ENTITY IfcResource

| ABSTRACT SUPERTYPE OF(IfcConstructionResource)

| SUBTYPE OF (IfcObject);

Identification | : | OPTIONAL IfcStrippedOptional;
LongDescription | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ResourceOf | : | SET OF IfcRelAssignsToResource FOR RelatingResource;

END_ENTITY;

ENTITY IfcRevolvedAreaSolid

| SUBTYPE OF (IfcSweptAreaSolid);

Axis | : | IfcAxis1Placement;
Angle | : | IfcPlaneAngleMeasure;

| DERIVE

AxisLine | : | IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));

| WHERE

AxisStartInXY | : | Axis.Location.Coordinates[3] = 0.0;
AxisDirectionInXY | : | Axis.Z.DirectionRatios[3] = 0.0;

END_ENTITY;

ENTITY IfcRoot

| ABSTRACT SUPERTYPE OF(ONEOF(IfcObjectDefinition, IfcPropertyDefinition, 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 IfcSchedulingTime

| ABSTRACT SUPERTYPE OF(ONEOF(IfcTaskTime, IfcWorkTime));

Name | : | OPTIONAL IfcStrippedOptional;
DataOrigin | : | OPTIONAL IfcStrippedOptional;
UserDefinedDataOrigin | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcSectionedSpine

| SUBTYPE OF (IfcGeometricRepresentationItem);

SpineCurve | : | IfcCompositeCurve;
CrossSections | : | LIST [2:?] OF IfcProfileDef;
CrossSectionPositions | : | LIST [2:?] OF IfcAxis2Placement3D;

| DERIVE

Dim | : | IfcDimensionCount := 3;

| WHERE

CorrespondingSectionPositions | : | SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
ConsistentProfileTypes | : | SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;
SpineCurveDim | : | SpineCurve.Dim = 3;

END_ENTITY;

ENTITY IfcShapeModel

| ABSTRACT SUPERTYPE OF(IfcShapeRepresentation)

| SUBTYPE OF (IfcRepresentation);

| INVERSE

| WHERE

WR11 | : | (SIZEOF(SELF\IfcRepresentation.OfProductRepresentation) = 1) XOR (SIZEOF(SELF\IfcRepresentation.RepresentationMap) = 1) XOR (SIZEOF(OfShapeAspect) = 1);

END_ENTITY;

ENTITY IfcShapeRepresentation

| SUBTYPE OF (IfcShapeModel);

| WHERE

WR21 | : | 'IFCREPRESENTATIONRESOURCE.IFCGEOMETRICREPRESENTATIONCONTEXT' IN TYPEOF(SELF\IfcRepresentation.ContextOfItems);
WR22 | : | SIZEOF(QUERY(temp <* Items | ('IFCTOPOLOGYRESOURCE.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) AND (NOT(SIZEOF( ['IFCTOPOLOGYRESOURCE.IFCVERTEXPOINT', 'IFCTOPOLOGYRESOURCE.IFCEDGECURVE', 'IFCTOPOLOGYRESOURCE.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) )) = 0;
WR23 | : | EXISTS(SELF\IfcRepresentation.RepresentationType);
WR24 | : | IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);

END_ENTITY;

ENTITY IfcShellBasedSurfaceModel

| SUBTYPE OF (IfcGeometricRepresentationItem);

SbsmBoundary | : | SET [1:?] OF IfcShell;

| DERIVE

Dim | : | IfcDimensionCount := 3;

END_ENTITY;

ENTITY IfcSimpleProperty

| ABSTRACT SUPERTYPE OF(ONEOF(IfcPropertyBoundedValue, IfcPropertyEnumeratedValue, IfcPropertyListValue, IfcPropertyReferenceValue, IfcPropertySingleValue, IfcPropertyTableValue))

| SUBTYPE OF (IfcProperty);

END_ENTITY;

ENTITY IfcSite

| SUBTYPE OF (IfcSpatialStructureElement);

RefLatitude | : | OPTIONAL IfcCompoundPlaneAngleMeasure;
RefLongitude | : | OPTIONAL IfcCompoundPlaneAngleMeasure;
RefElevation | : | OPTIONAL IfcLengthMeasure;
LandTitleNumber | : | OPTIONAL IfcLabel;
SiteAddress | : | OPTIONAL IfcPostalAddress;

END_ENTITY;

ENTITY IfcSlab

| SUPERTYPE OF(IfcSlabElementedCase)

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcSlabElementedCase

| SUBTYPE OF (IfcSlab);

| WHERE

HasDecomposition | : | HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) > 0;

END_ENTITY;

ENTITY IfcSolarDevice

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcSolarDeviceType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcSolarDeviceTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcSolidModel

| ABSTRACT SUPERTYPE OF(ONEOF(IfcCsgSolid, IfcManifoldSolidBrep, IfcSweptAreaSolid, IfcSweptDiskSolid))

| SUBTYPE OF (IfcGeometricRepresentationItem);

| DERIVE

Dim | : | IfcDimensionCount := 3;

END_ENTITY;

ENTITY IfcSpace

| SUBTYPE OF (IfcSpatialStructureElement);

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

| INVERSE

HasCoverings | : | SET OF IfcRelCoversSpaces FOR RelatingSpace;

| 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 IfcSpaceType

| SUBTYPE OF (IfcSpatialStructureElementType);

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

| WHERE

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

END_ENTITY;

ENTITY IfcSpatialElement

| ABSTRACT SUPERTYPE OF(IfcSpatialStructureElement)

| SUBTYPE OF (IfcProduct);

LongName | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ContainsElements | : | SET OF IfcRelContainedInSpatialStructure FOR RelatingStructure;

END_ENTITY;

ENTITY IfcSpatialElementType

| ABSTRACT SUPERTYPE OF(IfcSpatialStructureElementType)

| SUBTYPE OF (IfcTypeProduct);

ElementType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcSpatialStructureElement

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBuilding, IfcBuildingStorey, IfcSite, 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 IfcSpatialStructureElementType

| ABSTRACT SUPERTYPE OF(IfcSpaceType)

| SUBTYPE OF (IfcSpatialElementType);

END_ENTITY;

ENTITY IfcStyleModel

| ABSTRACT SUPERTYPE OF(IfcStyledRepresentation)

| SUBTYPE OF (IfcRepresentation);

END_ENTITY;

ENTITY IfcStyledItem

| SUBTYPE OF (IfcRepresentationItem);

Item | : | OPTIONAL IfcStrippedOptional;
Styles | : | SET [1:?] OF IfcStyleAssignmentSelect;
Name | : | OPTIONAL IfcStrippedOptional;

| WHERE

ApplicableItem | : | NOT('IFCPRESENTATIONAPPEARANCERESOURCE.IFCSTYLEDITEM' IN TYPEOF(Item));

END_ENTITY;

ENTITY IfcStyledRepresentation

| SUBTYPE OF (IfcStyleModel);

| WHERE

OnlyStyledItems | : | SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | (NOT('IFCPRESENTATIONAPPEARANCERESOURCE.IFCSTYLEDITEM' IN TYPEOF(temp))) )) = 0;

END_ENTITY;

ENTITY IfcSubContractResource

| SUBTYPE OF (IfcConstructionResource);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));

END_ENTITY;

ENTITY IfcSubContractResourceType

| SUBTYPE OF (IfcConstructionResourceType);

PredefinedType | : | IfcSubContractResourceTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));

END_ENTITY;

ENTITY IfcSurface

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBoundedSurface, IfcSweptSurface))

| SUBTYPE OF (IfcGeometricRepresentationItem);

| DERIVE

Dim | : | IfcDimensionCount := 3;

END_ENTITY;

ENTITY IfcSurfaceStyle

| SUBTYPE OF (IfcPresentationStyle);

Side | : | IfcSurfaceSide;
Styles | : | SET [1:5] OF IfcSurfaceStyleElementSelect;

| WHERE

MaxOneShading | : | SIZEOF(QUERY(Style <* SELF.Styles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCSURFACESTYLESHADING' IN TYPEOF(Style) )) <= 1;
MaxOneLighting | : | SIZEOF(QUERY(Style <* SELF.Styles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCSURFACESTYLELIGHTING' IN TYPEOF(Style) )) <= 1;
MaxOneRefraction | : | SIZEOF(QUERY(Style <* SELF.Styles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCSURFACESTYLEREFRACTION' IN TYPEOF(Style) )) <= 1;
MaxOneTextures | : | SIZEOF(QUERY(Style <* SELF.Styles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCSURFACESTYLEWITHTEXTURES' IN TYPEOF(Style) )) <= 1;
MaxOneExtDefined | : | SIZEOF(QUERY(Style <* SELF.Styles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN TYPEOF(Style) )) <= 1;

END_ENTITY;

ENTITY IfcSweptAreaSolid

| ABSTRACT SUPERTYPE OF(ONEOF(IfcExtrudedAreaSolid, IfcRevolvedAreaSolid))

| SUBTYPE OF (IfcSolidModel);

SweptArea | : | IfcProfileDef;
Position | : | OPTIONAL IfcStrippedOptional;

| WHERE

SweptAreaType | : | SweptArea.ProfileType = IfcProfileTypeEnum.Area;

END_ENTITY;

ENTITY IfcSweptDiskSolid

| SUBTYPE OF (IfcSolidModel);

Directrix | : | IfcCurve;
Radius | : | IfcPositiveLengthMeasure;
InnerRadius | : | OPTIONAL IfcStrippedOptional;
StartParam | : | OPTIONAL IfcStrippedOptional;
EndParam | : | OPTIONAL IfcStrippedOptional;

| WHERE

DirectrixDim | : | Directrix.Dim = 3;
InnerRadiusSize | : | (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);
DirectrixBounded | : | (EXISTS(StartParam) AND EXISTS(EndParam)) OR (SIZEOF(['IFCGEOMETRYRESOURCE.IFCCONIC', 'IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);

END_ENTITY;

ENTITY IfcSweptSurface

| SUBTYPE OF (IfcSurface);

SweptCurve | : | IfcProfileDef;
Position | : | OPTIONAL IfcStrippedOptional;

| WHERE

SweptCurveType | : | SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;

END_ENTITY;

ENTITY IfcSwitchingDevice

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcSwitchingDeviceType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcSwitchingDeviceTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcSystem

| SUPERTYPE OF(IfcDistributionSystem)

| SUBTYPE OF (IfcGroup);

| INVERSE

END_ENTITY;

ENTITY IfcTask

| SUBTYPE OF (IfcProcess);

Status | : | OPTIONAL IfcStrippedOptional;
WorkMethod | : | OPTIONAL IfcStrippedOptional;
IsMilestone | : | IfcStrippedOptional;
Priority | : | OPTIONAL IfcStrippedOptional;
TaskTime | : | OPTIONAL IfcTaskTime;
PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

HasName | : | EXISTS(SELF\IfcRoot.Name);
CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));

END_ENTITY;

ENTITY IfcTaskTime

| SUPERTYPE OF(IfcTaskTimeRecurring)

| SUBTYPE OF (IfcSchedulingTime);

DurationType | : | OPTIONAL IfcStrippedOptional;
ScheduleDuration | : | OPTIONAL IfcDuration;
ScheduleStart | : | OPTIONAL IfcDateTime;
ScheduleFinish | : | OPTIONAL IfcDateTime;
EarlyStart | : | OPTIONAL IfcStrippedOptional;
EarlyFinish | : | OPTIONAL IfcStrippedOptional;
LateStart | : | OPTIONAL IfcStrippedOptional;
LateFinish | : | OPTIONAL IfcStrippedOptional;
FreeFloat | : | OPTIONAL IfcStrippedOptional;
TotalFloat | : | OPTIONAL IfcStrippedOptional;
IsCritical | : | OPTIONAL IfcStrippedOptional;
StatusTime | : | OPTIONAL IfcStrippedOptional;
ActualDuration | : | OPTIONAL IfcStrippedOptional;
ActualStart | : | OPTIONAL IfcStrippedOptional;
ActualFinish | : | OPTIONAL IfcStrippedOptional;
RemainingTime | : | OPTIONAL IfcStrippedOptional;
Completion | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcTaskTimeRecurring

| SUBTYPE OF (IfcTaskTime);

Recurrance | : | IfcRecurrencePattern;

END_ENTITY;

ENTITY IfcTaskType

| SUBTYPE OF (IfcTypeProcess);

PredefinedType | : | IfcTaskTypeEnum;
WorkMethod | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)) ;

END_ENTITY;

ENTITY IfcTelecomAddress

| SUBTYPE OF (IfcAddress);

TelephoneNumbers | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
FacsimileNumbers | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;
PagerNumber | : | OPTIONAL IfcStrippedOptional;
ElectronicMailAddresses | : | OPTIONAL LIST [1:?] OF IfcLabel;
WWWHomePageURL | : | OPTIONAL IfcStrippedOptional;
MessagingIDs | : | OPTIONAL LIST [1:?] OF IfcStrippedOptional;

| WHERE

MinimumDataProvided | : | EXISTS (TelephoneNumbers) OR EXISTS (FacsimileNumbers) OR EXISTS (PagerNumber) OR EXISTS (ElectronicMailAddresses) OR EXISTS (WWWHomePageURL) OR EXISTS (MessagingIDs);

END_ENTITY;

ENTITY IfcTessellatedFaceSet

| ABSTRACT SUPERTYPE OF(IfcTriangulatedFaceSet)

| SUBTYPE OF (IfcTessellatedItem);

Coordinates | : | IfcCartesianPointList3D;
Normals | : | OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcStrippedOptional;
Closed | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcTessellatedItem

| ABSTRACT SUPERTYPE OF(IfcTessellatedFaceSet)

| SUBTYPE OF (IfcGeometricRepresentationItem);

END_ENTITY;

ENTITY IfcTextLiteral

| SUBTYPE OF (IfcGeometricRepresentationItem);

Literal | : | IfcPresentableText;
Placement | : | IfcAxis2Placement;
Path | : | IfcTextPath;

END_ENTITY;

ENTITY IfcTimePeriod;

StartTime | : | IfcTime;
EndTime | : | IfcTime;

END_ENTITY;

ENTITY IfcTimeSeries

| ABSTRACT SUPERTYPE OF(IfcIrregularTimeSeries);

Name | : | IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
StartTime | : | IfcDateTime;
EndTime | : | IfcDateTime;
TimeSeriesDataType | : | IfcTimeSeriesDataTypeEnum;
DataOrigin | : | IfcDataOriginEnum;
UserDefinedDataOrigin | : | OPTIONAL IfcStrippedOptional;
Unit | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcTopologicalRepresentationItem

| ABSTRACT SUPERTYPE OF(ONEOF(IfcConnectedFaceSet, IfcFace, IfcFaceBound, IfcLoop))

| SUBTYPE OF (IfcRepresentationItem);

END_ENTITY;

ENTITY IfcTransformer

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcTransformerType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcTransformerTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcTransportElement

| SUBTYPE OF (IfcElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcTransportElementType

| SUBTYPE OF (IfcElementType);

PredefinedType | : | IfcTransportElementTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcTriangulatedFaceSet

| SUBTYPE OF (IfcTessellatedFaceSet);

CoordIndex | : | LIST [1:?] OF LIST [3:3] OF IfcStrippedOptional;
NormalIndex | : | OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcStrippedOptional;

| DERIVE

NumberOfTriangles | : | INTEGER := SIZEOF(CoordIndex);

END_ENTITY;

ENTITY IfcTypeObject

| SUPERTYPE OF(ONEOF(IfcTypeProcess, IfcTypeProduct, IfcTypeResource))

| SUBTYPE OF (IfcObjectDefinition);

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

| INVERSE

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

| WHERE

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

END_ENTITY;

ENTITY IfcTypeProcess

| ABSTRACT SUPERTYPE OF(IfcTaskType)

| SUBTYPE OF (IfcTypeObject);

Identification | : | OPTIONAL IfcStrippedOptional;
LongDescription | : | OPTIONAL IfcStrippedOptional;
ProcessType | : | OPTIONAL IfcStrippedOptional;

| INVERSE

OperatesOn | : | SET OF IfcRelAssignsToProcess FOR RelatingProcess;

END_ENTITY;

ENTITY IfcTypeProduct

| SUPERTYPE OF(ONEOF(IfcElementType, IfcSpatialElementType))

| SUBTYPE OF (IfcTypeObject);

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

| INVERSE

ReferencedBy | : | SET OF IfcRelAssignsToProduct FOR RelatingProduct;

| 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 IfcTypeResource

| ABSTRACT SUPERTYPE OF(IfcConstructionResourceType)

| SUBTYPE OF (IfcTypeObject);

Identification | : | OPTIONAL IfcStrippedOptional;
LongDescription | : | OPTIONAL IfcStrippedOptional;
ResourceType | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ResourceOf | : | SET OF IfcRelAssignsToResource FOR RelatingResource;

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 IfcVector

| SUBTYPE OF (IfcGeometricRepresentationItem);

Orientation | : | IfcDirection;
Magnitude | : | IfcLengthMeasure;

| DERIVE

Dim | : | IfcDimensionCount := Orientation.Dim;

| WHERE

MagGreaterOrEqualZero | : | Magnitude >= 0.0;

END_ENTITY;

ENTITY IfcVirtualGridIntersection;

IntersectingAxes | : | LIST [2:2] OF UNIQUE IfcGridAxis;
OffsetDistances | : | LIST [2:3] OF IfcLengthMeasure;

END_ENTITY;

ENTITY IfcWall

| SUPERTYPE OF(IfcWallElementedCase)

| SUBTYPE OF (IfcBuildingElement);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcWallElementedCase

| SUBTYPE OF (IfcWall);

| WHERE

HasDecomposition | : | HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) > 0;

END_ENTITY;

ENTITY IfcWorkCalendar

| SUBTYPE OF (IfcControl);

WorkingTimes | : | OPTIONAL SET [1:?] OF IfcWorkTime;
ExceptionTimes | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;
PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR ((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));

END_ENTITY;

ENTITY IfcWorkControl

| ABSTRACT SUPERTYPE OF(IfcWorkPlan)

| SUBTYPE OF (IfcControl);

CreationDate | : | IfcDateTime;
Creators | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;
Purpose | : | OPTIONAL IfcStrippedOptional;
Duration | : | OPTIONAL IfcStrippedOptional;
TotalFloat | : | OPTIONAL IfcStrippedOptional;
StartTime | : | IfcDateTime;
FinishTime | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcWorkPlan

| SUBTYPE OF (IfcWorkControl);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

CorrectPredefinedType | : | NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkPlanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcWorkPlanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));

END_ENTITY;

ENTITY IfcWorkTime

| SUBTYPE OF (IfcSchedulingTime);

RecurrencePattern | : | OPTIONAL IfcRecurrencePattern;
Start | : | OPTIONAL IfcDate;
Finish | : | OPTIONAL IfcDate;

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;