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 IfcDimensionCount = INTEGER;

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

END_TYPE;

TYPE IfcElectricCurrentMeasure = REAL;

END_TYPE;

TYPE IfcEnergyMeasure = REAL;

END_TYPE;

TYPE IfcGloballyUniqueId = STRING (22) FIXED;

END_TYPE;

TYPE IfcIdentifier = STRING (255);

END_TYPE;

TYPE IfcInteger = INTEGER;

END_TYPE;

TYPE IfcLabel = STRING (255);

END_TYPE;

TYPE IfcLengthMeasure = REAL;

END_TYPE;

TYPE IfcLinearVelocityMeasure = REAL;

END_TYPE;

TYPE IfcLogical = LOGICAL;

END_TYPE;

TYPE IfcMassFlowRateMeasure = REAL;

END_TYPE;

TYPE IfcMassMeasure = REAL;

END_TYPE;

TYPE IfcMonetaryMeasure = REAL;

END_TYPE;

TYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure;

| WHERE
NotNegative | : | SELF >= 0. |

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 IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;

| 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 IfcPressureMeasure = REAL;

END_TYPE;

TYPE IfcReal = REAL;

END_TYPE;

TYPE IfcText = STRING;

END_TYPE;

TYPE IfcThermalTransmittanceMeasure = 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 IfcVolumetricFlowRateMeasure = REAL;

END_TYPE;

TYPE IfcBoilerTypeEnum = ENUMERATION OF (

| WATER, STEAM, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcBooleanOperator = ENUMERATION OF (

| UNION, INTERSECTION, DIFFERENCE);

END_TYPE;

TYPE IfcChangeActionEnum = ENUMERATION OF (

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

END_TYPE;

TYPE IfcConnectionTypeEnum = ENUMERATION OF (

| ATPATH, ATSTART, ATEND, NOTDEFINED);

END_TYPE;

TYPE IfcDataOriginEnum = ENUMERATION OF (

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

END_TYPE;

TYPE IfcDirectionSenseEnum = ENUMERATION OF (

| POSITIVE, NEGATIVE);

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

| AIRPARTICLEFILTER, COMPRESSEDAIRFILTER, ODORFILTER, OILFILTER, STRAINER, WATERFILTER, 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 IfcInternalOrExternalEnum = ENUMERATION OF (

| INTERNAL, EXTERNAL, EXTERNAL_EARTH, EXTERNAL_WATER, EXTERNAL_FIRE, NOTDEFINED);

END_TYPE;

TYPE IfcLayerSetDirectionEnum = ENUMERATION OF (

| AXIS1, AXIS2, AXIS3);

END_TYPE;

TYPE IfcMemberTypeEnum = ENUMERATION OF (

| BRACE, CHORD, COLLAR, MEMBER, MULLION, PLATE, POST, PURLIN, RAFTER, STRINGER, STRUT, STUD, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF (

| PHYSICAL, VIRTUAL, NOTDEFINED);

END_TYPE;

TYPE IfcPipeFittingTypeEnum = ENUMERATION OF (

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

END_TYPE;

TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF (

| CULVERT, FLEXIBLESEGMENT, RIGIDSEGMENT, GUTTER, SPOOL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcProfileTypeEnum = ENUMERATION OF (

| CURVE, AREA);

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

| BATH, BIDET, CISTERN, SHOWER, SINK, SANITARYFOUNTAIN, TOILETPAN, URINAL, WASHHANDBASIN, WCSEAT, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcSlabTypeEnum = ENUMERATION OF (

| FLOOR, ROOF, LANDING, BASESLAB, USERDEFINED, NOTDEFINED);

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

| PANEL, WORKSURFACE, 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 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 IfcValveTypeEnum = ENUMERATION OF (

| AIRRELEASE, ANTIVACUUM, CHANGEOVER, CHECK, COMMISSIONING, DIVERTING, DRAWOFFCOCK, DOUBLECHECK, DOUBLEREGULATING, FAUCET, FLUSHING, GASCOCK, GASTAP, ISOLATING, MIXING, PRESSUREREDUCING, PRESSURERELIEF, REGULATING, SAFETYCUTOFF, STEAMTRAP, STOPCOCK, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcWallTypeEnum = ENUMERATION OF (

| MOVABLE, PARAPET, PARTITIONING, PLUMBINGWALL, SHEAR, SOLIDWALL, STANDARD, POLYGONAL, ELEMENTEDWALL, USERDEFINED, NOTDEFINED);

END_TYPE;

TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF (

| FLOORTRAP, FLOORWASTE, GULLYSUMP, GULLYTRAP, ROOFDRAIN, WASTEDISPOSALUNIT, WASTETRAP, 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 IfcCurveOrEdgeCurve = SELECT (

| IfcBoundedCurve);

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);

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

| IfcSpace);

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 IfcStrippedOptional;
FixedUntilDate | : | OPTIONAL IfcStrippedOptional;
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 IfcBoiler

| SUBTYPE OF (IfcEnergyConversionDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcBoilerType

| SUBTYPE OF (IfcEnergyConversionDeviceType);

PredefinedType | : | IfcBoilerTypeEnum;

| WHERE

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

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(IfcPolyline)

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

| ABSTRACT SUPERTYPE OF(ONEOF(IfcMemberType, IfcSlabType, IfcWallType))

| SUBTYPE OF (IfcElementType);

END_ENTITY;

ENTITY IfcBuildingStorey

| SUBTYPE OF (IfcSpatialStructureElement);

Elevation | : | OPTIONAL IfcLengthMeasure;

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

| SUPERTYPE OF(IfcClosedShell)

| SUBTYPE OF (IfcTopologicalRepresentationItem);

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

END_ENTITY;

ENTITY IfcConnectionCurveGeometry

| SUBTYPE OF (IfcConnectionGeometry);

CurveOnRelatingElement | : | IfcCurveOrEdgeCurve;
CurveOnRelatedElement | : | OPTIONAL IfcCurveOrEdgeCurve;

END_ENTITY;

ENTITY IfcConnectionGeometry

| ABSTRACT SUPERTYPE OF(IfcConnectionCurveGeometry);

END_ENTITY;

ENTITY IfcConstructionProductResource

| SUBTYPE OF (IfcConstructionResource);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcConstructionResource

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

| SUBTYPE OF (IfcResource);

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

END_ENTITY;

ENTITY IfcConstructionResourceType

| ABSTRACT SUPERTYPE OF(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 IfcStrippedOptional;
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 IfcStrippedOptional;

| INVERSE

| 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

HasPorts | : | SET OF IfcRelConnectsPortToElement FOR RelatedElement;

END_ENTITY;

ENTITY IfcDistributionElementType

| SUPERTYPE OF(IfcDistributionFlowElementType)

| SUBTYPE OF (IfcElementType);

END_ENTITY;

ENTITY IfcDistributionFlowElement

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

| SUBTYPE OF (IfcDistributionElement);

| INVERSE

END_ENTITY;

ENTITY IfcDistributionFlowElementType

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

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

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElement, IfcDistributionElement, IfcElementComponent, IfcFeatureElement, IfcFurnishingElement))

| SUBTYPE OF (IfcProduct);

Tag | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ConnectedTo | : | SET OF IfcRelConnectsElements FOR RelatingElement;
IsInterferedByElements | : | SET OF IfcRelInterferesElements FOR RelatedElement;
InterferesElements | : | SET OF IfcRelInterferesElements FOR RelatingElement;
HasOpenings | : | SET OF IfcRelVoidsElement FOR RelatingBuildingElement;
ProvidesBoundaries | : | SET OF IfcRelSpaceBoundary FOR RelatedBuildingElement;
ConnectedFrom | : | SET OF IfcRelConnectsElements FOR RelatedElement;
ContainedInStructure | : | SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;

END_ENTITY;

ENTITY IfcElementComponent

| ABSTRACT SUPERTYPE OF(IfcBuildingElementPart)

| SUBTYPE OF (IfcElement);

END_ENTITY;

ENTITY IfcElementQuantity

| SUBTYPE OF (IfcQuantitySet);

MethodOfMeasurement | : | OPTIONAL IfcStrippedOptional;
Quantities | : | SET [1:?] OF IfcPhysicalQuantity;

| WHERE

UniqueQuantityNames | : | IfcUniqueQuantityNames(Quantities);

END_ENTITY;

ENTITY IfcElementType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElementType, IfcDistributionElementType, IfcFurnishingElementType))

| SUBTYPE OF (IfcTypeProduct);

ElementType | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcEnergyConversionDevice

| SUPERTYPE OF(ONEOF(IfcBoiler, IfcSolarDevice))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcEnergyConversionDeviceType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcBoilerType, IfcSolarDeviceType))

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

| ABSTRACT SUPERTYPE OF(IfcFeatureElementSubtraction)

| SUBTYPE OF (IfcElement);

END_ENTITY;

ENTITY IfcFeatureElementSubtraction

| ABSTRACT SUPERTYPE OF(ONEOF(IfcOpeningElement, IfcVoidingFeature))

| SUBTYPE OF (IfcFeatureElement);

| INVERSE

VoidsElements | : | IfcRelVoidsElement FOR RelatedOpeningElement;

| WHERE

HasNoSubtraction | : | SIZEOF(SELF\IfcElement.HasOpenings) = 0;
IsNotFilling | : | SIZEOF(SELF\IfcElement.FillsVoids) = 0;

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 IfcFilter

| SUBTYPE OF (IfcFlowTreatmentDevice);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcFilterType

| SUBTYPE OF (IfcFlowTreatmentDeviceType);

PredefinedType | : | IfcFilterTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcFlowController

| SUPERTYPE OF(ONEOF(IfcFlowMeter, IfcValve))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowControllerType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcFlowMeterType, IfcValveType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowFitting

| SUPERTYPE OF(IfcPipeFitting)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowFittingType

| ABSTRACT SUPERTYPE OF(IfcPipeFittingType)

| 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(IfcPipeSegment)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowSegmentType

| ABSTRACT SUPERTYPE OF(IfcPipeSegmentType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowTerminal

| SUPERTYPE OF(ONEOF(IfcElectricAppliance, IfcSanitaryTerminal, IfcWasteTerminal))

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTerminalType

| ABSTRACT SUPERTYPE OF(ONEOF(IfcElectricApplianceType, IfcSanitaryTerminalType, IfcWasteTerminalType))

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFlowTreatmentDevice

| SUPERTYPE OF(IfcFilter)

| SUBTYPE OF (IfcDistributionFlowElement);

END_ENTITY;

ENTITY IfcFlowTreatmentDeviceType

| ABSTRACT SUPERTYPE OF(IfcFilterType)

| SUBTYPE OF (IfcDistributionFlowElementType);

END_ENTITY;

ENTITY IfcFurnishingElement

| SUPERTYPE OF(IfcSystemFurnitureElement)

| SUBTYPE OF (IfcElement);

END_ENTITY;

ENTITY IfcFurnishingElementType

| SUPERTYPE OF(IfcSystemFurnitureElementType)

| SUBTYPE OF (IfcElementType);

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, IfcCartesianTransformationOperator, IfcCurve, IfcDirection, IfcFaceBasedSurfaceModel, IfcGeometricSet, IfcPlacement, IfcPoint, 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 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 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 IfcMaterialConstituent

| SUBTYPE OF (IfcMaterialDefinition);

Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Material | : | IfcMaterial;
Fraction | : | OPTIONAL IfcStrippedOptional;
Category | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ToMaterialConstituentSet | : | IfcMaterialConstituentSet FOR MaterialConstituents;

END_ENTITY;

ENTITY IfcMaterialConstituentSet

| SUBTYPE OF (IfcMaterialDefinition);

Name | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;
MaterialConstituents | : | OPTIONAL SET [1:?] OF IfcMaterialConstituent;

END_ENTITY;

ENTITY IfcMaterialDefinition

| ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterial, IfcMaterialConstituent, IfcMaterialConstituentSet, IfcMaterialLayer, IfcMaterialLayerSet, 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 IfcMaterialLayer

| SUBTYPE OF (IfcMaterialDefinition);

Material | : | OPTIONAL IfcMaterial;
LayerThickness | : | IfcNonNegativeLengthMeasure;
IsVentilated | : | OPTIONAL IfcStrippedOptional;
Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
Category | : | OPTIONAL IfcStrippedOptional;
Priority | : | OPTIONAL IfcStrippedOptional;

| INVERSE

ToMaterialLayerSet | : | IfcMaterialLayerSet FOR MaterialLayers;

END_ENTITY;

ENTITY IfcMaterialLayerSet

| SUBTYPE OF (IfcMaterialDefinition);

MaterialLayers | : | LIST [1:?] OF IfcMaterialLayer;
LayerSetName | : | OPTIONAL IfcStrippedOptional;
Description | : | OPTIONAL IfcStrippedOptional;

| DERIVE

TotalThickness | : | IfcLengthMeasure := IfcMlsTotalThickness(SELF);

END_ENTITY;

ENTITY IfcMaterialLayerSetUsage

| SUBTYPE OF (IfcMaterialUsageDefinition);

ForLayerSet | : | IfcMaterialLayerSet;
LayerSetDirection | : | IfcLayerSetDirectionEnum;
DirectionSense | : | IfcDirectionSenseEnum;
OffsetFromReferenceLine | : | IfcLengthMeasure;
ReferenceExtent | : | OPTIONAL IfcStrippedOptional;

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(ONEOF(IfcMaterialLayerSetUsage, 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 IfcMemberType

| SUBTYPE OF (IfcBuildingElementType);

PredefinedType | : | IfcMemberTypeEnum;

| WHERE

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

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(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 IfcOpeningElement

| SUPERTYPE OF(IfcOpeningStandardCase)

| SUBTYPE OF (IfcFeatureElementSubtraction);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| INVERSE

END_ENTITY;

ENTITY IfcOpeningStandardCase

| SUBTYPE OF (IfcOpeningElement);

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

| ABSTRACT SUPERTYPE OF(IfcQuantityCount)

| SUBTYPE OF (IfcPhysicalQuantity);

Unit | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcPipeFitting

| SUBTYPE OF (IfcFlowFitting);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcPipeFittingType

| SUBTYPE OF (IfcFlowFittingType);

PredefinedType | : | IfcPipeFittingTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcPipeSegment

| SUBTYPE OF (IfcFlowSegment);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcPipeSegmentType

| SUBTYPE OF (IfcFlowSegmentType);

PredefinedType | : | IfcPipeSegmentTypeEnum;

| WHERE

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

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 IfcPolyline

| SUBTYPE OF (IfcBoundedCurve);

Points | : | LIST [2:?] OF IfcCartesianPoint;

| WHERE

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

END_ENTITY;

ENTITY IfcPort

| ABSTRACT SUPERTYPE OF(IfcDistributionPort)

| SUBTYPE OF (IfcProduct);

| INVERSE

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

END_ENTITY;

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

OperatesOn | : | SET OF IfcRelAssignsToProcess FOR RelatingProcess;

END_ENTITY;

ENTITY IfcProduct

| ABSTRACT SUPERTYPE OF(ONEOF(IfcElement, 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;
HasShapeAspects | : | SET OF IfcShapeAspect FOR PartOfProductDefinitionShape;

| 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 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(ONEOF(IfcPropertySet, IfcQuantitySet))

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

| SUBTYPE OF (IfcPhysicalSimpleQuantity);

CountValue | : | IfcCountMeasure;
Formula | : | OPTIONAL IfcStrippedOptional;

| WHERE

WR21 | : | CountValue >= 0.;

END_ENTITY;

ENTITY IfcQuantitySet

| ABSTRACT SUPERTYPE OF(IfcElementQuantity)

| SUBTYPE OF (IfcPropertySetDefinition);

END_ENTITY;

ENTITY IfcRecurrencePattern;

RecurrenceType | : | IfcRecurrenceTypeEnum;
DayComponent | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;
WeekdayComponent | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;
MonthComponent | : | OPTIONAL SET [1:?] OF IfcStrippedOptional;
Position | : | OPTIONAL IfcStrippedOptional;
Interval | : | OPTIONAL IfcStrippedOptional;
Occurrences | : | OPTIONAL IfcStrippedOptional;
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(IfcRelConnectsElements, IfcRelConnectsPortToElement, IfcRelConnectsPorts, IfcRelContainedInSpatialStructure, IfcRelInterferesElements, IfcRelSpaceBoundary))

| SUBTYPE OF (IfcRelationship);

END_ENTITY;

ENTITY IfcRelConnectsElements

| SUPERTYPE OF(IfcRelConnectsPathElements)

| SUBTYPE OF (IfcRelConnects);

ConnectionGeometry | : | OPTIONAL IfcConnectionGeometry;
RelatingElement | : | IfcElement;
RelatedElement | : | IfcElement;

| WHERE

NoSelfReference | : | RelatingElement :<>: RelatedElement;

END_ENTITY;

ENTITY IfcRelConnectsPathElements

| SUBTYPE OF (IfcRelConnectsElements);

RelatingPriorities | : | LIST OF IfcStrippedOptional;
RelatedPriorities | : | LIST OF IfcStrippedOptional;
RelatedConnectionType | : | IfcConnectionTypeEnum;
RelatingConnectionType | : | IfcConnectionTypeEnum;

| WHERE

NormalizedRelatingPriorities | : | (SIZEOF(RelatingPriorities) = 0) OR (SIZEOF (QUERY (temp <* RelatingPriorities | {0.0 <= temp <= 1.0} )) = SIZEOF(RelatingPriorities));
NormalizedRelatedPriorities | : | (SIZEOF(RelatedPriorities) = 0) OR (SIZEOF (QUERY (temp <* RelatedPriorities | {0.0 <= temp <= 1.0} )) = SIZEOF(RelatedPriorities));

END_ENTITY;

ENTITY IfcRelConnectsPortToElement

| SUBTYPE OF (IfcRelConnects);

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

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 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, IfcRelVoidsElement))

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

| SUBTYPE OF (IfcRelConnects);

RelatingSpace | : | IfcSpaceBoundarySelect;
RelatedBuildingElement | : | IfcElement;
ConnectionGeometry | : | OPTIONAL IfcStrippedOptional;
PhysicalOrVirtualBoundary | : | IfcPhysicalOrVirtualEnum;
InternalOrExternalBoundary | : | IfcInternalOrExternalEnum;

| WHERE

CorrectPhysOrVirt | : | ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND (NOT('IFCPRODUCTEXTENSION.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) OR ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND (('IFCPRODUCTEXTENSION.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) OR ('IFCPRODUCTEXTENSION.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) OR (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);

END_ENTITY;

ENTITY IfcRelVoidsElement

| SUBTYPE OF (IfcRelDecomposes);

RelatingBuildingElement | : | IfcElement;
RelatedOpeningElement | : | IfcFeatureElementSubtraction;

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

HasShapeAspects | : | SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;
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 IfcSanitaryTerminal

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcSanitaryTerminalType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcSanitaryTerminalTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcSchedulingTime

| ABSTRACT SUPERTYPE OF(IfcWorkTime);

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

END_ENTITY;

ENTITY IfcShapeAspect;

ShapeRepresentations | : | LIST [1:?] OF IfcShapeModel;
Name | : | OPTIONAL IfcLabel;
Description | : | OPTIONAL IfcStrippedOptional;
ProductDefinitional | : | IfcStrippedOptional;
PartOfProductDefinitionShape | : | OPTIONAL IfcStrippedOptional;

END_ENTITY;

ENTITY IfcShapeModel

| ABSTRACT SUPERTYPE OF(IfcShapeRepresentation)

| SUBTYPE OF (IfcRepresentation);

| INVERSE

OfShapeAspect | : | SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;

| 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, 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(ONEOF(IfcSlabElementedCase, IfcSlabStandardCase))

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

| SUBTYPE OF (IfcSlab);

| WHERE

HasMaterialLayerSetusage | : | SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;

END_ENTITY;

ENTITY IfcSlabType

| SUBTYPE OF (IfcBuildingElementType);

PredefinedType | : | IfcSlabTypeEnum;

| WHERE

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

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

BoundedBy | : | SET OF IfcRelSpaceBoundary 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 IfcSystem

| SUPERTYPE OF(IfcDistributionSystem)

| SUBTYPE OF (IfcGroup);

| INVERSE

END_ENTITY;

ENTITY IfcSystemFurnitureElement

| SUBTYPE OF (IfcFurnishingElement);

PredefinedType | : | OPTIONAL IfcSystemFurnitureElementTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcSystemFurnitureElementType

| SUBTYPE OF (IfcFurnishingElementType);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcTask

| SUBTYPE OF (IfcProcess);

Status | : | OPTIONAL IfcStrippedOptional;
WorkMethod | : | OPTIONAL IfcStrippedOptional;
IsMilestone | : | IfcStrippedOptional;
Priority | : | OPTIONAL IfcStrippedOptional;
TaskTime | : | OPTIONAL IfcStrippedOptional;
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 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 IfcTessellatedItem

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

| SUPERTYPE OF(ONEOF(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 IfcTypeProduct

| SUPERTYPE OF(ONEOF(IfcElementType, IfcSpatialElementType))

| SUBTYPE OF (IfcTypeObject);

RepresentationMaps | : | OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;
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 IfcValve

| SUBTYPE OF (IfcFlowController);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcValveType

| SUBTYPE OF (IfcFlowControllerType);

PredefinedType | : | IfcValveTypeEnum;

| WHERE

CorrectPredefinedType | : | (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR ((PredefinedType = IfcValveTypeEnum.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 IfcVoidingFeature

| SUBTYPE OF (IfcFeatureElementSubtraction);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

HasObjectType | : | NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);

END_ENTITY;

ENTITY IfcWall

| SUPERTYPE OF(ONEOF(IfcWallElementedCase, IfcWallStandardCase))

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

| SUBTYPE OF (IfcWall);

| WHERE

HasMaterialLayerSetUsage | : | SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;

END_ENTITY;

ENTITY IfcWallType

| SUBTYPE OF (IfcBuildingElementType);

PredefinedType | : | IfcWallTypeEnum;

| WHERE

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

END_ENTITY;

ENTITY IfcWasteTerminal

| SUBTYPE OF (IfcFlowTerminal);

PredefinedType | : | OPTIONAL IfcStrippedOptional;

| WHERE

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

END_ENTITY;

ENTITY IfcWasteTerminalType

| SUBTYPE OF (IfcFlowTerminalType);

PredefinedType | : | IfcWasteTerminalTypeEnum;

| WHERE

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

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;