<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ifc="http://www.buildingsmart-tech.org/ifcXML/IFC4/final" targetNamespace="http://www.buildingsmart-tech.org/ifcXML/IFC4/final" elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- created with IFCDOC 5.0 at buildingsmart-tech.org -->
 <!-- root element declaration (for SCHEMA definitions) -->
 <xs:element name="uos" type="ifc:uos" abstract="true"/>
 <xs:complexType name="uos" abstract="true">
  <xs:sequence>
   <xs:element name="header" minOccurs="0">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="time_stamp" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="author" type="xs:string" minOccurs="0"/>
      <xs:element name="organization" type="xs:string" minOccurs="0"/>
      <xs:element name="preprocessor_version" type="xs:string" minOccurs="0"/>
      <xs:element name="originating_system" type="xs:string" minOccurs="0"/>
      <xs:element name="authorization" type="xs:string" minOccurs="0"/>
      <xs:element name="documentation" type="xs:string" minOccurs="0"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="id" type="xs:ID" use="optional"/>
 </xs:complexType>
 <xs:element name="ifcXML" type="ifc:ifcXML" substitutionGroup="ifc:uos"/>
 <xs:complexType name="ifcXML">
  <xs:complexContent>
   <xs:extension base="ifc:uos">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
     <xs:element ref="ifc:Entity"/>
    </xs:choice>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- element and complex type declarations (for ENTITY definitions) -->
 <xs:element name="IfcActionRequest" type="ifc:IfcActionRequest" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcActionRequest">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="PredefinedType" type="ifc:IfcActionRequestTypeEnum" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcActor" type="ifc:IfcActor" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcActor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject">
    <xs:sequence>
     <xs:element name="TheActor">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcActorRole" type="ifc:IfcActorRole" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcActorRole">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Role" type="ifc:IfcRoleEnum" use="optional"/>
    <xs:attribute name="UserDefinedRole" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcActuator" type="ifc:IfcActuator" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcActuator">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcActuatorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcActuatorType" type="ifc:IfcActuatorType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcActuatorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcActuatorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAddress" type="ifc:IfcAddress" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcAddress" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Purpose" type="ifc:IfcAddressTypeEnum" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="UserDefinedPurpose" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAdvancedBrep" type="ifc:IfcAdvancedBrep" substitutionGroup="ifc:IfcManifoldSolidBrep" nillable="true"/>
 <xs:complexType name="IfcAdvancedBrep">
  <xs:complexContent>
   <xs:extension base="ifc:IfcManifoldSolidBrep"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAdvancedBrepWithVoids" type="ifc:IfcAdvancedBrepWithVoids" substitutionGroup="ifc:IfcAdvancedBrep" nillable="true"/>
 <xs:complexType name="IfcAdvancedBrepWithVoids">
  <xs:complexContent>
   <xs:extension base="ifc:IfcAdvancedBrep">
    <xs:sequence>
     <xs:element name="Voids">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcClosedShell" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcClosedShell"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAdvancedFace" type="ifc:IfcAdvancedFace" substitutionGroup="ifc:IfcFaceSurface" nillable="true"/>
 <xs:complexType name="IfcAdvancedFace">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFaceSurface"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirTerminal" type="ifc:IfcAirTerminal" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcAirTerminal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirTerminalBox" type="ifc:IfcAirTerminalBox" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcAirTerminalBox">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirTerminalBoxTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirTerminalBoxType" type="ifc:IfcAirTerminalBoxType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcAirTerminalBoxType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirTerminalBoxTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirTerminalType" type="ifc:IfcAirTerminalType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcAirTerminalType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirToAirHeatRecovery" type="ifc:IfcAirToAirHeatRecovery" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcAirToAirHeatRecovery">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirToAirHeatRecoveryTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAirToAirHeatRecoveryType" type="ifc:IfcAirToAirHeatRecoveryType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcAirToAirHeatRecoveryType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcAirToAirHeatRecoveryTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAlarm" type="ifc:IfcAlarm" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcAlarm">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcAlarmTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAlarmType" type="ifc:IfcAlarmType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcAlarmType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcAlarmTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAnnotation" type="ifc:IfcAnnotation" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcAnnotation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAnnotationFillArea" type="ifc:IfcAnnotationFillArea" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcAnnotationFillArea">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="OuterBoundary" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="InnerBoundaries" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCurve" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCurve"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcApplication" type="ifc:IfcApplication" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcApplication">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ApplicationDeveloper" type="ifc:IfcOrganization" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Version" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ApplicationFullName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ApplicationIdentifier" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAppliedValue" type="ifc:IfcAppliedValue" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcAppliedValue">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="AppliedValue" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcAppliedValueSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="UnitBasis" type="ifc:IfcMeasureWithUnit" nillable="true" minOccurs="0"/>
     <xs:element name="Components" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAppliedValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAppliedValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="ApplicableDate" type="ifc:IfcDate" use="optional"/>
    <xs:attribute name="FixedUntilDate" type="ifc:IfcDate" use="optional"/>
    <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Condition" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ArithmeticOperator" type="ifc:IfcArithmeticOperatorEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcApproval" type="ifc:IfcApproval" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcApproval">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="RequestingApproval" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="GivingApproval" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Identifier" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="TimeOfApproval" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Level" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Qualifier" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcApprovalRelationship" type="ifc:IfcApprovalRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcApprovalRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingApproval" type="ifc:IfcApproval" nillable="true"/>
     <xs:element name="RelatedApprovals">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcApproval" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcApproval"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcArbitraryClosedProfileDef" type="ifc:IfcArbitraryClosedProfileDef" substitutionGroup="ifc:IfcProfileDef" nillable="true"/>
 <xs:complexType name="IfcArbitraryClosedProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProfileDef">
    <xs:sequence>
     <xs:element name="OuterCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcArbitraryOpenProfileDef" type="ifc:IfcArbitraryOpenProfileDef" substitutionGroup="ifc:IfcProfileDef" nillable="true"/>
 <xs:complexType name="IfcArbitraryOpenProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProfileDef">
    <xs:sequence>
     <xs:element name="Curve" type="ifc:IfcBoundedCurve" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcArbitraryProfileDefWithVoids" type="ifc:IfcArbitraryProfileDefWithVoids" substitutionGroup="ifc:IfcArbitraryClosedProfileDef" nillable="true"/>
 <xs:complexType name="IfcArbitraryProfileDefWithVoids">
  <xs:complexContent>
   <xs:extension base="ifc:IfcArbitraryClosedProfileDef">
    <xs:sequence>
     <xs:element name="InnerCurves">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCurve" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCurve"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAsset" type="ifc:IfcAsset" substitutionGroup="ifc:IfcGroup" nillable="true"/>
 <xs:complexType name="IfcAsset">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGroup">
    <xs:sequence>
     <xs:element name="OriginalValue" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
     <xs:element name="CurrentValue" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
     <xs:element name="TotalReplacementCost" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
     <xs:element name="Owner" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="User" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ResponsiblePerson" type="ifc:IfcPerson" nillable="true" minOccurs="0"/>
     <xs:element name="DepreciatedValue" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="IncorporationDate" type="ifc:IfcDate" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAsymmetricIShapeProfileDef" type="ifc:IfcAsymmetricIShapeProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcAsymmetricIShapeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="BottomFlangeWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="OverallDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="WebThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BottomFlangeThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BottomFlangeFilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="TopFlangeWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TopFlangeThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TopFlangeFilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="BottomFlangeEdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="BottomFlangeSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="TopFlangeEdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="TopFlangeSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAudioVisualAppliance" type="ifc:IfcAudioVisualAppliance" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcAudioVisualAppliance">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcAudioVisualApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAudioVisualApplianceType" type="ifc:IfcAudioVisualApplianceType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcAudioVisualApplianceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcAudioVisualApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAxis1Placement" type="ifc:IfcAxis1Placement" substitutionGroup="ifc:IfcPlacement" nillable="true"/>
 <xs:complexType name="IfcAxis1Placement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPlacement">
    <xs:sequence>
     <xs:element name="Axis" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAxis2Placement2D" type="ifc:IfcAxis2Placement2D" substitutionGroup="ifc:IfcPlacement" nillable="true"/>
 <xs:complexType name="IfcAxis2Placement2D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPlacement">
    <xs:sequence>
     <xs:element name="RefDirection" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcAxis2Placement3D" type="ifc:IfcAxis2Placement3D" substitutionGroup="ifc:IfcPlacement" nillable="true"/>
 <xs:complexType name="IfcAxis2Placement3D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPlacement">
    <xs:sequence>
     <xs:element name="Axis" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
     <xs:element name="RefDirection" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBSplineCurve" type="ifc:IfcBSplineCurve" abstract="true" substitutionGroup="ifc:IfcBoundedCurve" nillable="true"/>
 <xs:complexType name="IfcBSplineCurve" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedCurve">
    <xs:sequence>
     <xs:element name="ControlPointsList">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCartesianPoint" minOccurs="2" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCartesianPoint"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Degree" type="xs:long" use="optional"/>
    <xs:attribute name="CurveForm" type="ifc:IfcBSplineCurveForm" use="optional"/>
    <xs:attribute name="ClosedCurve" type="ifc:logical" use="optional"/>
    <xs:attribute name="SelfIntersect" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBSplineCurveWithKnots" type="ifc:IfcBSplineCurveWithKnots" substitutionGroup="ifc:IfcBSplineCurve" nillable="true"/>
 <xs:complexType name="IfcBSplineCurveWithKnots">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBSplineCurve">
    <xs:attribute name="KnotMultiplicities" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Knots" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="KnotSpec" type="ifc:IfcKnotType" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBSplineSurface" type="ifc:IfcBSplineSurface" abstract="true" substitutionGroup="ifc:IfcBoundedSurface" nillable="true"/>
 <xs:complexType name="IfcBSplineSurface" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedSurface">
    <xs:sequence>
     <xs:element name="ControlPointsList">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCartesianPoint" minOccurs="4" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCartesianPoint"/>
       <xs:attribute ref="ifc:cType" fixed="list list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="UDegree" type="xs:long" use="optional"/>
    <xs:attribute name="VDegree" type="xs:long" use="optional"/>
    <xs:attribute name="SurfaceForm" type="ifc:IfcBSplineSurfaceForm" use="optional"/>
    <xs:attribute name="UClosed" type="ifc:logical" use="optional"/>
    <xs:attribute name="VClosed" type="ifc:logical" use="optional"/>
    <xs:attribute name="SelfIntersect" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBSplineSurfaceWithKnots" type="ifc:IfcBSplineSurfaceWithKnots" substitutionGroup="ifc:IfcBSplineSurface" nillable="true"/>
 <xs:complexType name="IfcBSplineSurfaceWithKnots">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBSplineSurface">
    <xs:attribute name="UMultiplicities" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="VMultiplicities" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="UKnots" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="VKnots" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="KnotSpec" type="ifc:IfcKnotType" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBeam" type="ifc:IfcBeam" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcBeam">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcBeamTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBeamStandardCase" type="ifc:IfcBeamStandardCase" substitutionGroup="ifc:IfcBeam" nillable="true"/>
 <xs:complexType name="IfcBeamStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBeam"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBeamType" type="ifc:IfcBeamType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcBeamType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcBeamTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBlobTexture" type="ifc:IfcBlobTexture" substitutionGroup="ifc:IfcSurfaceTexture" nillable="true"/>
 <xs:complexType name="IfcBlobTexture">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurfaceTexture">
    <xs:sequence>
     <xs:element name="RasterCode" type="ifc:hexBinary"/>
    </xs:sequence>
    <xs:attribute name="RasterFormat" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBlock" type="ifc:IfcBlock" substitutionGroup="ifc:IfcCsgPrimitive3D" nillable="true"/>
 <xs:complexType name="IfcBlock">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCsgPrimitive3D">
    <xs:attribute name="XLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="YLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="ZLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoiler" type="ifc:IfcBoiler" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcBoiler">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcBoilerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoilerType" type="ifc:IfcBoilerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcBoilerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcBoilerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBooleanClippingResult" type="ifc:IfcBooleanClippingResult" substitutionGroup="ifc:IfcBooleanResult" nillable="true"/>
 <xs:complexType name="IfcBooleanClippingResult">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBooleanResult"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBooleanResult" type="ifc:IfcBooleanResult" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcBooleanResult">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="FirstOperand">
      <xs:complexType>
       <xs:group ref="ifc:IfcBooleanOperand"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SecondOperand">
      <xs:complexType>
       <xs:group ref="ifc:IfcBooleanOperand"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Operator" type="ifc:IfcBooleanOperator" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryCondition" type="ifc:IfcBoundaryCondition" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcBoundaryCondition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryCurve" type="ifc:IfcBoundaryCurve" substitutionGroup="ifc:IfcCompositeCurveOnSurface" nillable="true"/>
 <xs:complexType name="IfcBoundaryCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCompositeCurveOnSurface"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryEdgeCondition" type="ifc:IfcBoundaryEdgeCondition" substitutionGroup="ifc:IfcBoundaryCondition" nillable="true"/>
 <xs:complexType name="IfcBoundaryEdgeCondition">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundaryCondition">
    <xs:sequence>
     <xs:element name="TranslationalStiffnessByLengthX" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfTranslationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessByLengthY" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfTranslationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessByLengthZ" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfTranslationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessByLengthX" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfRotationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessByLengthY" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfRotationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessByLengthZ" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfRotationalSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryFaceCondition" type="ifc:IfcBoundaryFaceCondition" substitutionGroup="ifc:IfcBoundaryCondition" nillable="true"/>
 <xs:complexType name="IfcBoundaryFaceCondition">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundaryCondition">
    <xs:sequence>
     <xs:element name="TranslationalStiffnessByAreaX" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessByAreaY" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessByAreaZ" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcModulusOfSubgradeReactionSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryNodeCondition" type="ifc:IfcBoundaryNodeCondition" substitutionGroup="ifc:IfcBoundaryCondition" nillable="true"/>
 <xs:complexType name="IfcBoundaryNodeCondition">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundaryCondition">
    <xs:sequence>
     <xs:element name="TranslationalStiffnessX" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcTranslationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessY" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcTranslationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TranslationalStiffnessZ" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcTranslationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessX" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcRotationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessY" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcRotationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RotationalStiffnessZ" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcRotationalStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundaryNodeConditionWarping" type="ifc:IfcBoundaryNodeConditionWarping" substitutionGroup="ifc:IfcBoundaryNodeCondition" nillable="true"/>
 <xs:complexType name="IfcBoundaryNodeConditionWarping">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundaryNodeCondition">
    <xs:sequence>
     <xs:element name="WarpingStiffness" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcWarpingStiffnessSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundedCurve" type="ifc:IfcBoundedCurve" abstract="true" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcBoundedCurve" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundedSurface" type="ifc:IfcBoundedSurface" abstract="true" substitutionGroup="ifc:IfcSurface" nillable="true"/>
 <xs:complexType name="IfcBoundedSurface" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurface"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoundingBox" type="ifc:IfcBoundingBox" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcBoundingBox">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Corner" type="ifc:IfcCartesianPoint" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="XDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="YDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="ZDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBoxedHalfSpace" type="ifc:IfcBoxedHalfSpace" substitutionGroup="ifc:IfcHalfSpaceSolid" nillable="true"/>
 <xs:complexType name="IfcBoxedHalfSpace">
  <xs:complexContent>
   <xs:extension base="ifc:IfcHalfSpaceSolid">
    <xs:sequence>
     <xs:element name="Enclosure" type="ifc:IfcBoundingBox" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuilding" type="ifc:IfcBuilding" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcBuilding">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement">
    <xs:sequence>
     <xs:element name="BuildingAddress" type="ifc:IfcPostalAddress" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="ElevationOfRefHeight" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="ElevationOfTerrain" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElement" type="ifc:IfcBuildingElement" abstract="true" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcBuildingElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElementPart" type="ifc:IfcBuildingElementPart" substitutionGroup="ifc:IfcElementComponent" nillable="true"/>
 <xs:complexType name="IfcBuildingElementPart">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponent">
    <xs:attribute name="PredefinedType" type="ifc:IfcBuildingElementPartTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElementPartType" type="ifc:IfcBuildingElementPartType" substitutionGroup="ifc:IfcElementComponentType" nillable="true"/>
 <xs:complexType name="IfcBuildingElementPartType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcBuildingElementPartTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElementProxy" type="ifc:IfcBuildingElementProxy" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcBuildingElementProxy">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcBuildingElementProxyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElementProxyType" type="ifc:IfcBuildingElementProxyType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcBuildingElementProxyType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcBuildingElementProxyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingElementType" type="ifc:IfcBuildingElementType" abstract="true" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcBuildingElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingStorey" type="ifc:IfcBuildingStorey" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcBuildingStorey">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement">
    <xs:attribute name="Elevation" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBuildingSystem" type="ifc:IfcBuildingSystem" substitutionGroup="ifc:IfcSystem" nillable="true"/>
 <xs:complexType name="IfcBuildingSystem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSystem">
    <xs:attribute name="PredefinedType" type="ifc:IfcBuildingSystemTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBurner" type="ifc:IfcBurner" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcBurner">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcBurnerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcBurnerType" type="ifc:IfcBurnerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcBurnerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcBurnerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCShapeProfileDef" type="ifc:IfcCShapeProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcCShapeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="Depth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Width" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="WallThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Girth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="InternalFilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableCarrierFitting" type="ifc:IfcCableCarrierFitting" substitutionGroup="ifc:IfcFlowFitting" nillable="true"/>
 <xs:complexType name="IfcCableCarrierFitting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFitting">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableCarrierFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableCarrierFittingType" type="ifc:IfcCableCarrierFittingType" substitutionGroup="ifc:IfcFlowFittingType" nillable="true"/>
 <xs:complexType name="IfcCableCarrierFittingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFittingType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableCarrierFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableCarrierSegment" type="ifc:IfcCableCarrierSegment" substitutionGroup="ifc:IfcFlowSegment" nillable="true"/>
 <xs:complexType name="IfcCableCarrierSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegment">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableCarrierSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableCarrierSegmentType" type="ifc:IfcCableCarrierSegmentType" substitutionGroup="ifc:IfcFlowSegmentType" nillable="true"/>
 <xs:complexType name="IfcCableCarrierSegmentType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegmentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableCarrierSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableFitting" type="ifc:IfcCableFitting" substitutionGroup="ifc:IfcFlowFitting" nillable="true"/>
 <xs:complexType name="IfcCableFitting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFitting">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableFittingType" type="ifc:IfcCableFittingType" substitutionGroup="ifc:IfcFlowFittingType" nillable="true"/>
 <xs:complexType name="IfcCableFittingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFittingType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableSegment" type="ifc:IfcCableSegment" substitutionGroup="ifc:IfcFlowSegment" nillable="true"/>
 <xs:complexType name="IfcCableSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegment">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCableSegmentType" type="ifc:IfcCableSegmentType" substitutionGroup="ifc:IfcFlowSegmentType" nillable="true"/>
 <xs:complexType name="IfcCableSegmentType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegmentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCableSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianPoint" type="ifc:IfcCartesianPoint" substitutionGroup="ifc:IfcPoint" nillable="true"/>
 <xs:complexType name="IfcCartesianPoint">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPoint">
    <xs:attribute name="Coordinates" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:maxLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianPointList" type="ifc:IfcCartesianPointList" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcCartesianPointList" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianPointList3D" type="ifc:IfcCartesianPointList3D" substitutionGroup="ifc:IfcCartesianPointList" nillable="true"/>
 <xs:complexType name="IfcCartesianPointList3D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCartesianPointList">
    <xs:attribute name="CoordList" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianTransformationOperator" type="ifc:IfcCartesianTransformationOperator" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcCartesianTransformationOperator" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Axis1" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
     <xs:element name="Axis2" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
     <xs:element name="LocalOrigin" type="ifc:IfcCartesianPoint" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Scale" type="xs:double" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianTransformationOperator2D" type="ifc:IfcCartesianTransformationOperator2D" substitutionGroup="ifc:IfcCartesianTransformationOperator" nillable="true"/>
 <xs:complexType name="IfcCartesianTransformationOperator2D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCartesianTransformationOperator"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianTransformationOperator2DnonUniform" type="ifc:IfcCartesianTransformationOperator2DnonUniform" substitutionGroup="ifc:IfcCartesianTransformationOperator2D" nillable="true"/>
 <xs:complexType name="IfcCartesianTransformationOperator2DnonUniform">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCartesianTransformationOperator2D">
    <xs:attribute name="Scale2" type="xs:double" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianTransformationOperator3D" type="ifc:IfcCartesianTransformationOperator3D" substitutionGroup="ifc:IfcCartesianTransformationOperator" nillable="true"/>
 <xs:complexType name="IfcCartesianTransformationOperator3D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCartesianTransformationOperator">
    <xs:sequence>
     <xs:element name="Axis3" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCartesianTransformationOperator3DnonUniform" type="ifc:IfcCartesianTransformationOperator3DnonUniform" substitutionGroup="ifc:IfcCartesianTransformationOperator3D" nillable="true"/>
 <xs:complexType name="IfcCartesianTransformationOperator3DnonUniform">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCartesianTransformationOperator3D">
    <xs:attribute name="Scale2" type="xs:double" use="optional"/>
    <xs:attribute name="Scale3" type="xs:double" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCenterLineProfileDef" type="ifc:IfcCenterLineProfileDef" substitutionGroup="ifc:IfcArbitraryOpenProfileDef" nillable="true"/>
 <xs:complexType name="IfcCenterLineProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcArbitraryOpenProfileDef">
    <xs:attribute name="Thickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcChiller" type="ifc:IfcChiller" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcChiller">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcChillerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcChillerType" type="ifc:IfcChillerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcChillerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcChillerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcChimney" type="ifc:IfcChimney" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcChimney">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcChimneyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcChimneyType" type="ifc:IfcChimneyType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcChimneyType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcChimneyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCircle" type="ifc:IfcCircle" substitutionGroup="ifc:IfcConic" nillable="true"/>
 <xs:complexType name="IfcCircle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConic">
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCircleHollowProfileDef" type="ifc:IfcCircleHollowProfileDef" substitutionGroup="ifc:IfcCircleProfileDef" nillable="true"/>
 <xs:complexType name="IfcCircleHollowProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCircleProfileDef">
    <xs:attribute name="WallThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCircleProfileDef" type="ifc:IfcCircleProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcCircleProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCivilElement" type="ifc:IfcCivilElement" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcCivilElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCivilElementType" type="ifc:IfcCivilElementType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcCivilElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcClassification" type="ifc:IfcClassification" substitutionGroup="ifc:IfcExternalInformation" nillable="true"/>
 <xs:complexType name="IfcClassification">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalInformation">
    <xs:sequence>
     <xs:element name="ReferenceTokens" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcIdentifier-wrapper" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcIdentifier-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Source" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Edition" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="EditionDate" type="ifc:IfcDate" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Location" type="ifc:IfcURIReference" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcClassificationReference" type="ifc:IfcClassificationReference" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcClassificationReference">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference">
    <xs:sequence>
     <xs:element name="ReferencedSource" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcClassificationReferenceSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Sort" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcClosedShell" type="ifc:IfcClosedShell" substitutionGroup="ifc:IfcConnectedFaceSet" nillable="true"/>
 <xs:complexType name="IfcClosedShell">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectedFaceSet"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoil" type="ifc:IfcCoil" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcCoil">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoilTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoilType" type="ifc:IfcCoilType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcCoilType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoilTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColourRgb" type="ifc:IfcColourRgb" substitutionGroup="ifc:IfcColourSpecification" nillable="true"/>
 <xs:complexType name="IfcColourRgb">
  <xs:complexContent>
   <xs:extension base="ifc:IfcColourSpecification">
    <xs:attribute name="Red" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="Green" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="Blue" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColourRgbList" type="ifc:IfcColourRgbList" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcColourRgbList">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="ColourList" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcNormalisedRatioMeasure"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColourSpecification" type="ifc:IfcColourSpecification" abstract="true" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcColourSpecification" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColumn" type="ifc:IfcColumn" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcColumn">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcColumnTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColumnStandardCase" type="ifc:IfcColumnStandardCase" substitutionGroup="ifc:IfcColumn" nillable="true"/>
 <xs:complexType name="IfcColumnStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcColumn"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcColumnType" type="ifc:IfcColumnType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcColumnType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcColumnTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCommunicationsAppliance" type="ifc:IfcCommunicationsAppliance" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcCommunicationsAppliance">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcCommunicationsApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCommunicationsApplianceType" type="ifc:IfcCommunicationsApplianceType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcCommunicationsApplianceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCommunicationsApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcComplexProperty" type="ifc:IfcComplexProperty" substitutionGroup="ifc:IfcProperty" nillable="true"/>
 <xs:complexType name="IfcComplexProperty">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProperty">
    <xs:sequence>
     <xs:element name="HasProperties">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProperty" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProperty"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="UsageName" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcComplexPropertyTemplate" type="ifc:IfcComplexPropertyTemplate" substitutionGroup="ifc:IfcPropertyTemplate" nillable="true"/>
 <xs:complexType name="IfcComplexPropertyTemplate">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyTemplate">
    <xs:sequence>
     <xs:element name="HasPropertyTemplates" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPropertyTemplate" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPropertyTemplate"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="UsageName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="TemplateType" type="ifc:IfcComplexPropertyTemplateTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompositeCurve" type="ifc:IfcCompositeCurve" substitutionGroup="ifc:IfcBoundedCurve" nillable="true"/>
 <xs:complexType name="IfcCompositeCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedCurve">
    <xs:sequence>
     <xs:element name="Segments">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCompositeCurveSegment" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCompositeCurveSegment"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="SelfIntersect" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompositeCurveOnSurface" type="ifc:IfcCompositeCurveOnSurface" substitutionGroup="ifc:IfcCompositeCurve" nillable="true"/>
 <xs:complexType name="IfcCompositeCurveOnSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCompositeCurve"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompositeCurveSegment" type="ifc:IfcCompositeCurveSegment" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcCompositeCurveSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="ParentCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Transition" type="ifc:IfcTransitionCode" use="optional"/>
    <xs:attribute name="SameSense" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompositeProfileDef" type="ifc:IfcCompositeProfileDef" substitutionGroup="ifc:IfcProfileDef" nillable="true"/>
 <xs:complexType name="IfcCompositeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProfileDef">
    <xs:sequence>
     <xs:element name="Profiles">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProfileDef" minOccurs="2" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProfileDef"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Label" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompressor" type="ifc:IfcCompressor" substitutionGroup="ifc:IfcFlowMovingDevice" nillable="true"/>
 <xs:complexType name="IfcCompressor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcCompressorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCompressorType" type="ifc:IfcCompressorType" substitutionGroup="ifc:IfcFlowMovingDeviceType" nillable="true"/>
 <xs:complexType name="IfcCompressorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCompressorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCondenser" type="ifc:IfcCondenser" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcCondenser">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcCondenserTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCondenserType" type="ifc:IfcCondenserType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcCondenserType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCondenserTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConic" type="ifc:IfcConic" abstract="true" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcConic" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve">
    <xs:sequence>
     <xs:element name="Position">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectedFaceSet" type="ifc:IfcConnectedFaceSet" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcConnectedFaceSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem">
    <xs:sequence>
     <xs:element name="CfsFaces">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcFace" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcFace"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionCurveGeometry" type="ifc:IfcConnectionCurveGeometry" substitutionGroup="ifc:IfcConnectionGeometry" nillable="true"/>
 <xs:complexType name="IfcConnectionCurveGeometry">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectionGeometry">
    <xs:sequence>
     <xs:element name="CurveOnRelatingElement">
      <xs:complexType>
       <xs:group ref="ifc:IfcCurveOrEdgeCurve"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CurveOnRelatedElement" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcCurveOrEdgeCurve"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionGeometry" type="ifc:IfcConnectionGeometry" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcConnectionGeometry" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionPointEccentricity" type="ifc:IfcConnectionPointEccentricity" substitutionGroup="ifc:IfcConnectionPointGeometry" nillable="true"/>
 <xs:complexType name="IfcConnectionPointEccentricity">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectionPointGeometry">
    <xs:attribute name="EccentricityInX" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="EccentricityInY" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="EccentricityInZ" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionPointGeometry" type="ifc:IfcConnectionPointGeometry" substitutionGroup="ifc:IfcConnectionGeometry" nillable="true"/>
 <xs:complexType name="IfcConnectionPointGeometry">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectionGeometry">
    <xs:sequence>
     <xs:element name="PointOnRelatingElement">
      <xs:complexType>
       <xs:group ref="ifc:IfcPointOrVertexPoint"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="PointOnRelatedElement" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcPointOrVertexPoint"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionSurfaceGeometry" type="ifc:IfcConnectionSurfaceGeometry" substitutionGroup="ifc:IfcConnectionGeometry" nillable="true"/>
 <xs:complexType name="IfcConnectionSurfaceGeometry">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectionGeometry">
    <xs:sequence>
     <xs:element name="SurfaceOnRelatingElement">
      <xs:complexType>
       <xs:group ref="ifc:IfcSurfaceOrFaceSurface"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SurfaceOnRelatedElement" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSurfaceOrFaceSurface"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConnectionVolumeGeometry" type="ifc:IfcConnectionVolumeGeometry" substitutionGroup="ifc:IfcConnectionGeometry" nillable="true"/>
 <xs:complexType name="IfcConnectionVolumeGeometry">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectionGeometry">
    <xs:sequence>
     <xs:element name="VolumeOnRelatingElement">
      <xs:complexType>
       <xs:group ref="ifc:IfcSolidOrShell"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="VolumeOnRelatedElement" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSolidOrShell"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstraint" type="ifc:IfcConstraint" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcConstraint" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="CreatingActor" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="ConstraintGrade" type="ifc:IfcConstraintEnum" use="optional"/>
    <xs:attribute name="ConstraintSource" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="CreationTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="UserDefinedGrade" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionEquipmentResource" type="ifc:IfcConstructionEquipmentResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcConstructionEquipmentResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionEquipmentResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionEquipmentResourceType" type="ifc:IfcConstructionEquipmentResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcConstructionEquipmentResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionEquipmentResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionMaterialResource" type="ifc:IfcConstructionMaterialResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcConstructionMaterialResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionMaterialResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionMaterialResourceType" type="ifc:IfcConstructionMaterialResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcConstructionMaterialResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionMaterialResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionProductResource" type="ifc:IfcConstructionProductResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcConstructionProductResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionProductResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionProductResourceType" type="ifc:IfcConstructionProductResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcConstructionProductResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcConstructionProductResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionResource" type="ifc:IfcConstructionResource" abstract="true" substitutionGroup="ifc:IfcResource" nillable="true"/>
 <xs:complexType name="IfcConstructionResource" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResource">
    <xs:sequence>
     <xs:element name="Usage" type="ifc:IfcResourceTime" nillable="true" minOccurs="0"/>
     <xs:element name="BaseCosts" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAppliedValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAppliedValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="BaseQuantity" type="ifc:IfcPhysicalQuantity" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConstructionResourceType" type="ifc:IfcConstructionResourceType" abstract="true" substitutionGroup="ifc:IfcTypeResource" nillable="true"/>
 <xs:complexType name="IfcConstructionResourceType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeResource">
    <xs:sequence>
     <xs:element name="BaseCosts" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAppliedValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAppliedValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="BaseQuantity" type="ifc:IfcPhysicalQuantity" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcContext" type="ifc:IfcContext" abstract="true" substitutionGroup="ifc:IfcObjectDefinition" nillable="true"/>
 <xs:complexType name="IfcContext" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObjectDefinition">
    <xs:sequence>
     <xs:element name="RepresentationContexts" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcRepresentationContext" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcRepresentationContext"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="UnitsInContext" type="ifc:IfcUnitAssignment" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="ObjectType" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="LongName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Phase" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcContextDependentUnit" type="ifc:IfcContextDependentUnit" substitutionGroup="ifc:IfcNamedUnit" nillable="true"/>
 <xs:complexType name="IfcContextDependentUnit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcNamedUnit">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcControl" type="ifc:IfcControl" abstract="true" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcControl" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject">
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcController" type="ifc:IfcController" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcController">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcControllerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcControllerType" type="ifc:IfcControllerType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcControllerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcControllerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConversionBasedUnit" type="ifc:IfcConversionBasedUnit" substitutionGroup="ifc:IfcNamedUnit" nillable="true"/>
 <xs:complexType name="IfcConversionBasedUnit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcNamedUnit">
    <xs:sequence>
     <xs:element name="ConversionFactor" type="ifc:IfcMeasureWithUnit" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcConversionBasedUnitWithOffset" type="ifc:IfcConversionBasedUnitWithOffset" substitutionGroup="ifc:IfcConversionBasedUnit" nillable="true"/>
 <xs:complexType name="IfcConversionBasedUnitWithOffset">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConversionBasedUnit">
    <xs:attribute name="ConversionOffset" type="ifc:IfcReal" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCooledBeam" type="ifc:IfcCooledBeam" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcCooledBeam">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcCooledBeamTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCooledBeamType" type="ifc:IfcCooledBeamType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcCooledBeamType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCooledBeamTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoolingTower" type="ifc:IfcCoolingTower" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcCoolingTower">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoolingTowerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoolingTowerType" type="ifc:IfcCoolingTowerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcCoolingTowerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoolingTowerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoordinateOperation" type="ifc:IfcCoordinateOperation" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcCoordinateOperation" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="SourceCRS">
      <xs:complexType>
       <xs:group ref="ifc:IfcCoordinateReferenceSystemSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TargetCRS" type="ifc:IfcCoordinateReferenceSystem" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoordinateReferenceSystem" type="ifc:IfcCoordinateReferenceSystem" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcCoordinateReferenceSystem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="GeodeticDatum" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="VerticalDatum" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCostItem" type="ifc:IfcCostItem" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcCostItem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:sequence>
     <xs:element name="CostValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCostValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCostValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CostQuantities" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPhysicalQuantity" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPhysicalQuantity"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcCostItemTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCostSchedule" type="ifc:IfcCostSchedule" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcCostSchedule">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="PredefinedType" type="ifc:IfcCostScheduleTypeEnum" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="SubmittedOn" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="UpdateDate" type="ifc:IfcDateTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCostValue" type="ifc:IfcCostValue" substitutionGroup="ifc:IfcAppliedValue" nillable="true"/>
 <xs:complexType name="IfcCostValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcAppliedValue"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCovering" type="ifc:IfcCovering" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcCovering">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoveringTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCoveringType" type="ifc:IfcCoveringType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcCoveringType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCoveringTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCrewResource" type="ifc:IfcCrewResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcCrewResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcCrewResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCrewResourceType" type="ifc:IfcCrewResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcCrewResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCrewResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCsgPrimitive3D" type="ifc:IfcCsgPrimitive3D" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcCsgPrimitive3D" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCsgSolid" type="ifc:IfcCsgSolid" substitutionGroup="ifc:IfcSolidModel" nillable="true"/>
 <xs:complexType name="IfcCsgSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSolidModel">
    <xs:sequence>
     <xs:element name="TreeRootExpression">
      <xs:complexType>
       <xs:group ref="ifc:IfcCsgSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurrencyRelationship" type="ifc:IfcCurrencyRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcCurrencyRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingMonetaryUnit" type="ifc:IfcMonetaryUnit" nillable="true"/>
     <xs:element name="RelatedMonetaryUnit" type="ifc:IfcMonetaryUnit" nillable="true"/>
     <xs:element name="RateSource" type="ifc:IfcLibraryInformation" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="ExchangeRate" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
    <xs:attribute name="RateDateTime" type="ifc:IfcDateTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurtainWall" type="ifc:IfcCurtainWall" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcCurtainWall">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcCurtainWallTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurtainWallType" type="ifc:IfcCurtainWallType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcCurtainWallType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcCurtainWallTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurve" type="ifc:IfcCurve" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcCurve" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveBoundedPlane" type="ifc:IfcCurveBoundedPlane" substitutionGroup="ifc:IfcBoundedSurface" nillable="true"/>
 <xs:complexType name="IfcCurveBoundedPlane">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedSurface">
    <xs:sequence>
     <xs:element name="BasisSurface" type="ifc:IfcPlane" nillable="true"/>
     <xs:element name="OuterBoundary" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="InnerBoundaries">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCurve" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCurve"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveBoundedSurface" type="ifc:IfcCurveBoundedSurface" substitutionGroup="ifc:IfcBoundedSurface" nillable="true"/>
 <xs:complexType name="IfcCurveBoundedSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedSurface">
    <xs:sequence>
     <xs:element name="BasisSurface" type="ifc:IfcSurface" nillable="true"/>
     <xs:element name="Boundaries">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcBoundaryCurve" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcBoundaryCurve"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ImplicitOuter" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveStyle" type="ifc:IfcCurveStyle" substitutionGroup="ifc:IfcPresentationStyle" nillable="true"/>
 <xs:complexType name="IfcCurveStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationStyle">
    <xs:sequence>
     <xs:element name="CurveFont" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcCurveFontOrScaledCurveFontSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CurveWidth" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CurveColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColour"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ModelOrDraughting" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveStyleFont" type="ifc:IfcCurveStyleFont" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcCurveStyleFont">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="PatternList">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCurveStyleFontPattern" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCurveStyleFontPattern"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveStyleFontAndScaling" type="ifc:IfcCurveStyleFontAndScaling" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcCurveStyleFontAndScaling">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="CurveFont">
      <xs:complexType>
       <xs:group ref="ifc:IfcCurveStyleFontSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="CurveFontScaling" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCurveStyleFontPattern" type="ifc:IfcCurveStyleFontPattern" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcCurveStyleFontPattern">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="VisibleSegmentLength" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="InvisibleSegmentLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcCylindricalSurface" type="ifc:IfcCylindricalSurface" substitutionGroup="ifc:IfcElementarySurface" nillable="true"/>
 <xs:complexType name="IfcCylindricalSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementarySurface">
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDamper" type="ifc:IfcDamper" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcDamper">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcDamperTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDamperType" type="ifc:IfcDamperType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcDamperType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDamperTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDerivedProfileDef" type="ifc:IfcDerivedProfileDef" substitutionGroup="ifc:IfcProfileDef" nillable="true"/>
 <xs:complexType name="IfcDerivedProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProfileDef">
    <xs:sequence>
     <xs:element name="ParentProfile" type="ifc:IfcProfileDef" nillable="true"/>
     <xs:element name="Operator" type="ifc:IfcCartesianTransformationOperator2D" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Label" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDerivedUnit" type="ifc:IfcDerivedUnit" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcDerivedUnit">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Elements">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcDerivedUnitElement" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcDerivedUnitElement"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="UnitType" type="ifc:IfcDerivedUnitEnum" use="optional"/>
    <xs:attribute name="UserDefinedType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDerivedUnitElement" type="ifc:IfcDerivedUnitElement" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcDerivedUnitElement">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Unit" type="ifc:IfcNamedUnit" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Exponent" type="xs:long" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDimensionalExponents" type="ifc:IfcDimensionalExponents" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcDimensionalExponents">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="LengthExponent" type="xs:long" use="optional"/>
    <xs:attribute name="MassExponent" type="xs:long" use="optional"/>
    <xs:attribute name="TimeExponent" type="xs:long" use="optional"/>
    <xs:attribute name="ElectricCurrentExponent" type="xs:long" use="optional"/>
    <xs:attribute name="ThermodynamicTemperatureExponent" type="xs:long" use="optional"/>
    <xs:attribute name="AmountOfSubstanceExponent" type="xs:long" use="optional"/>
    <xs:attribute name="LuminousIntensityExponent" type="xs:long" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDirection" type="ifc:IfcDirection" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcDirection">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:attribute name="DirectionRatios" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:double"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDiscreteAccessory" type="ifc:IfcDiscreteAccessory" substitutionGroup="ifc:IfcElementComponent" nillable="true"/>
 <xs:complexType name="IfcDiscreteAccessory">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponent">
    <xs:attribute name="PredefinedType" type="ifc:IfcDiscreteAccessoryTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDiscreteAccessoryType" type="ifc:IfcDiscreteAccessoryType" substitutionGroup="ifc:IfcElementComponentType" nillable="true"/>
 <xs:complexType name="IfcDiscreteAccessoryType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDiscreteAccessoryTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionChamberElement" type="ifc:IfcDistributionChamberElement" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcDistributionChamberElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcDistributionChamberElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionChamberElementType" type="ifc:IfcDistributionChamberElementType" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcDistributionChamberElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDistributionChamberElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionCircuit" type="ifc:IfcDistributionCircuit" substitutionGroup="ifc:IfcDistributionSystem" nillable="true"/>
 <xs:complexType name="IfcDistributionCircuit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionSystem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionControlElement" type="ifc:IfcDistributionControlElement" substitutionGroup="ifc:IfcDistributionElement" nillable="true"/>
 <xs:complexType name="IfcDistributionControlElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionControlElementType" type="ifc:IfcDistributionControlElementType" abstract="true" substitutionGroup="ifc:IfcDistributionElementType" nillable="true"/>
 <xs:complexType name="IfcDistributionControlElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionElement" type="ifc:IfcDistributionElement" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcDistributionElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionElementType" type="ifc:IfcDistributionElementType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcDistributionElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionFlowElement" type="ifc:IfcDistributionFlowElement" substitutionGroup="ifc:IfcDistributionElement" nillable="true"/>
 <xs:complexType name="IfcDistributionFlowElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionFlowElementType" type="ifc:IfcDistributionFlowElementType" abstract="true" substitutionGroup="ifc:IfcDistributionElementType" nillable="true"/>
 <xs:complexType name="IfcDistributionFlowElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionPort" type="ifc:IfcDistributionPort" substitutionGroup="ifc:IfcPort" nillable="true"/>
 <xs:complexType name="IfcDistributionPort">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPort">
    <xs:attribute name="FlowDirection" type="ifc:IfcFlowDirectionEnum" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcDistributionPortTypeEnum" use="optional"/>
    <xs:attribute name="SystemType" type="ifc:IfcDistributionSystemEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDistributionSystem" type="ifc:IfcDistributionSystem" substitutionGroup="ifc:IfcSystem" nillable="true"/>
 <xs:complexType name="IfcDistributionSystem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSystem">
    <xs:attribute name="LongName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcDistributionSystemEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDocumentInformation" type="ifc:IfcDocumentInformation" substitutionGroup="ifc:IfcExternalInformation" nillable="true"/>
 <xs:complexType name="IfcDocumentInformation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalInformation">
    <xs:sequence>
     <xs:element name="DocumentOwner" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Editors" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcActorSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Location" type="ifc:IfcURIReference" use="optional"/>
    <xs:attribute name="Purpose" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="IntendedUse" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Scope" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Revision" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="CreationTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="LastRevisionTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ElectronicFormat" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="ValidFrom" type="ifc:IfcDate" use="optional"/>
    <xs:attribute name="ValidUntil" type="ifc:IfcDate" use="optional"/>
    <xs:attribute name="Confidentiality" type="ifc:IfcDocumentConfidentialityEnum" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcDocumentStatusEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDocumentInformationRelationship" type="ifc:IfcDocumentInformationRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcDocumentInformationRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingDocument" type="ifc:IfcDocumentInformation" nillable="true"/>
     <xs:element name="RelatedDocuments">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcDocumentInformation" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcDocumentInformation"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="RelationshipType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDocumentReference" type="ifc:IfcDocumentReference" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcDocumentReference">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference">
    <xs:sequence>
     <xs:element name="ReferencedDocument" type="ifc:IfcDocumentInformation" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoor" type="ifc:IfcDoor" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcDoor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="OverallHeight" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="OverallWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcDoorTypeEnum" use="optional"/>
    <xs:attribute name="OperationType" type="ifc:IfcDoorTypeOperationEnum" use="optional"/>
    <xs:attribute name="UserDefinedOperationType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoorLiningProperties" type="ifc:IfcDoorLiningProperties" substitutionGroup="ifc:IfcPreDefinedPropertySet" nillable="true"/>
 <xs:complexType name="IfcDoorLiningProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedPropertySet">
    <xs:sequence>
     <xs:element name="ShapeAspectStyle" type="ifc:IfcShapeAspect" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="LiningDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LiningThickness" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="ThresholdDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="ThresholdThickness" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="TransomThickness" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="TransomOffset" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="LiningOffset" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="ThresholdOffset" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="CasingThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="CasingDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LiningToPanelOffsetX" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="LiningToPanelOffsetY" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoorPanelProperties" type="ifc:IfcDoorPanelProperties" substitutionGroup="ifc:IfcPreDefinedPropertySet" nillable="true"/>
 <xs:complexType name="IfcDoorPanelProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedPropertySet">
    <xs:sequence>
     <xs:element name="ShapeAspectStyle" type="ifc:IfcShapeAspect" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PanelDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PanelOperation" type="ifc:IfcDoorPanelOperationEnum" use="optional"/>
    <xs:attribute name="PanelWidth" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="PanelPosition" type="ifc:IfcDoorPanelPositionEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoorStandardCase" type="ifc:IfcDoorStandardCase" substitutionGroup="ifc:IfcDoor" nillable="true"/>
 <xs:complexType name="IfcDoorStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDoor"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoorStyle" type="ifc:IfcDoorStyle" substitutionGroup="ifc:IfcTypeProduct" nillable="true"/>
 <xs:complexType name="IfcDoorStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProduct">
    <xs:attribute name="OperationType" type="ifc:IfcDoorStyleOperationEnum" use="optional"/>
    <xs:attribute name="ConstructionType" type="ifc:IfcDoorStyleConstructionEnum" use="optional"/>
    <xs:attribute name="ParameterTakesPrecedence" type="xs:boolean" use="optional"/>
    <xs:attribute name="Sizeable" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDoorType" type="ifc:IfcDoorType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcDoorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDoorTypeEnum" use="optional"/>
    <xs:attribute name="OperationType" type="ifc:IfcDoorTypeOperationEnum" use="optional"/>
    <xs:attribute name="ParameterTakesPrecedence" type="xs:boolean" use="optional"/>
    <xs:attribute name="UserDefinedOperationType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDraughtingPreDefinedColour" type="ifc:IfcDraughtingPreDefinedColour" substitutionGroup="ifc:IfcPreDefinedColour" nillable="true"/>
 <xs:complexType name="IfcDraughtingPreDefinedColour">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedColour"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDraughtingPreDefinedCurveFont" type="ifc:IfcDraughtingPreDefinedCurveFont" substitutionGroup="ifc:IfcPreDefinedCurveFont" nillable="true"/>
 <xs:complexType name="IfcDraughtingPreDefinedCurveFont">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedCurveFont"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctFitting" type="ifc:IfcDuctFitting" substitutionGroup="ifc:IfcFlowFitting" nillable="true"/>
 <xs:complexType name="IfcDuctFitting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFitting">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctFittingType" type="ifc:IfcDuctFittingType" substitutionGroup="ifc:IfcFlowFittingType" nillable="true"/>
 <xs:complexType name="IfcDuctFittingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFittingType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctSegment" type="ifc:IfcDuctSegment" substitutionGroup="ifc:IfcFlowSegment" nillable="true"/>
 <xs:complexType name="IfcDuctSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegment">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctSegmentType" type="ifc:IfcDuctSegmentType" substitutionGroup="ifc:IfcFlowSegmentType" nillable="true"/>
 <xs:complexType name="IfcDuctSegmentType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegmentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctSilencer" type="ifc:IfcDuctSilencer" substitutionGroup="ifc:IfcFlowTreatmentDevice" nillable="true"/>
 <xs:complexType name="IfcDuctSilencer">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctSilencerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcDuctSilencerType" type="ifc:IfcDuctSilencerType" substitutionGroup="ifc:IfcFlowTreatmentDeviceType" nillable="true"/>
 <xs:complexType name="IfcDuctSilencerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcDuctSilencerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEdge" type="ifc:IfcEdge" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcEdge">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem">
    <xs:sequence>
     <xs:element name="EdgeStart" type="ifc:IfcVertex" nillable="true" minOccurs="0"/>
     <xs:element name="EdgeEnd" type="ifc:IfcVertex" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEdgeCurve" type="ifc:IfcEdgeCurve" substitutionGroup="ifc:IfcEdge" nillable="true"/>
 <xs:complexType name="IfcEdgeCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEdge">
    <xs:sequence>
     <xs:element name="EdgeGeometry" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="SameSense" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEdgeLoop" type="ifc:IfcEdgeLoop" substitutionGroup="ifc:IfcLoop" nillable="true"/>
 <xs:complexType name="IfcEdgeLoop">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLoop">
    <xs:sequence>
     <xs:element name="EdgeList">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcOrientedEdge" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcOrientedEdge"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricAppliance" type="ifc:IfcElectricAppliance" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcElectricAppliance">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricApplianceType" type="ifc:IfcElectricApplianceType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcElectricApplianceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricApplianceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricDistributionBoard" type="ifc:IfcElectricDistributionBoard" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcElectricDistributionBoard">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricDistributionBoardTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricDistributionBoardType" type="ifc:IfcElectricDistributionBoardType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcElectricDistributionBoardType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricDistributionBoardTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricFlowStorageDevice" type="ifc:IfcElectricFlowStorageDevice" substitutionGroup="ifc:IfcFlowStorageDevice" nillable="true"/>
 <xs:complexType name="IfcElectricFlowStorageDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowStorageDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricFlowStorageDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricFlowStorageDeviceType" type="ifc:IfcElectricFlowStorageDeviceType" substitutionGroup="ifc:IfcFlowStorageDeviceType" nillable="true"/>
 <xs:complexType name="IfcElectricFlowStorageDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowStorageDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricFlowStorageDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricGenerator" type="ifc:IfcElectricGenerator" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcElectricGenerator">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricGeneratorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricGeneratorType" type="ifc:IfcElectricGeneratorType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcElectricGeneratorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricGeneratorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricMotor" type="ifc:IfcElectricMotor" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcElectricMotor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricMotorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricMotorType" type="ifc:IfcElectricMotorType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcElectricMotorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricMotorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricTimeControl" type="ifc:IfcElectricTimeControl" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcElectricTimeControl">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricTimeControlTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElectricTimeControlType" type="ifc:IfcElectricTimeControlType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcElectricTimeControlType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElectricTimeControlTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElement" type="ifc:IfcElement" abstract="true" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct">
    <xs:attribute name="Tag" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementAssembly" type="ifc:IfcElementAssembly" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcElementAssembly">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement">
    <xs:attribute name="AssemblyPlace" type="ifc:IfcAssemblyPlaceEnum" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcElementAssemblyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementAssemblyType" type="ifc:IfcElementAssemblyType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcElementAssemblyType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcElementAssemblyTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementComponent" type="ifc:IfcElementComponent" abstract="true" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcElementComponent" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementComponentType" type="ifc:IfcElementComponentType" abstract="true" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcElementComponentType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementQuantity" type="ifc:IfcElementQuantity" substitutionGroup="ifc:IfcQuantitySet" nillable="true"/>
 <xs:complexType name="IfcElementQuantity">
  <xs:complexContent>
   <xs:extension base="ifc:IfcQuantitySet">
    <xs:sequence>
     <xs:element name="Quantities">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPhysicalQuantity" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPhysicalQuantity"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="MethodOfMeasurement" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementType" type="ifc:IfcElementType" abstract="true" substitutionGroup="ifc:IfcTypeProduct" nillable="true"/>
 <xs:complexType name="IfcElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProduct">
    <xs:attribute name="ElementType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcElementarySurface" type="ifc:IfcElementarySurface" abstract="true" substitutionGroup="ifc:IfcSurface" nillable="true"/>
 <xs:complexType name="IfcElementarySurface" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurface">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEllipse" type="ifc:IfcEllipse" substitutionGroup="ifc:IfcConic" nillable="true"/>
 <xs:complexType name="IfcEllipse">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConic">
    <xs:attribute name="SemiAxis1" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="SemiAxis2" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEllipseProfileDef" type="ifc:IfcEllipseProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcEllipseProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="SemiAxis1" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="SemiAxis2" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEnergyConversionDevice" type="ifc:IfcEnergyConversionDevice" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcEnergyConversionDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEnergyConversionDeviceType" type="ifc:IfcEnergyConversionDeviceType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcEnergyConversionDeviceType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEngine" type="ifc:IfcEngine" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcEngine">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcEngineTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEngineType" type="ifc:IfcEngineType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcEngineType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcEngineTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEvaporativeCooler" type="ifc:IfcEvaporativeCooler" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcEvaporativeCooler">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcEvaporativeCoolerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEvaporativeCoolerType" type="ifc:IfcEvaporativeCoolerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcEvaporativeCoolerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcEvaporativeCoolerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEvaporator" type="ifc:IfcEvaporator" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcEvaporator">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcEvaporatorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEvaporatorType" type="ifc:IfcEvaporatorType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcEvaporatorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcEvaporatorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEvent" type="ifc:IfcEvent" substitutionGroup="ifc:IfcProcess" nillable="true"/>
 <xs:complexType name="IfcEvent">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProcess">
    <xs:sequence>
     <xs:element name="EventOccurenceTime" type="ifc:IfcEventTime" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcEventTypeEnum" use="optional"/>
    <xs:attribute name="EventTriggerType" type="ifc:IfcEventTriggerTypeEnum" use="optional"/>
    <xs:attribute name="UserDefinedEventTriggerType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEventTime" type="ifc:IfcEventTime" substitutionGroup="ifc:IfcSchedulingTime" nillable="true"/>
 <xs:complexType name="IfcEventTime">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSchedulingTime">
    <xs:attribute name="ActualDate" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="EarlyDate" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="LateDate" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ScheduleDate" type="ifc:IfcDateTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcEventType" type="ifc:IfcEventType" substitutionGroup="ifc:IfcTypeProcess" nillable="true"/>
 <xs:complexType name="IfcEventType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProcess">
    <xs:attribute name="PredefinedType" type="ifc:IfcEventTypeEnum" use="optional"/>
    <xs:attribute name="EventTriggerType" type="ifc:IfcEventTriggerTypeEnum" use="optional"/>
    <xs:attribute name="UserDefinedEventTriggerType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExtendedProperties" type="ifc:IfcExtendedProperties" abstract="true" substitutionGroup="ifc:IfcPropertyAbstraction" nillable="true"/>
 <xs:complexType name="IfcExtendedProperties" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyAbstraction">
    <xs:sequence>
     <xs:element name="Properties">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProperty" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProperty"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternalInformation" type="ifc:IfcExternalInformation" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcExternalInformation" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternalReference" type="ifc:IfcExternalReference" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcExternalReference" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Location" type="ifc:IfcURIReference" use="optional"/>
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternalReferenceRelationship" type="ifc:IfcExternalReferenceRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcExternalReferenceRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingReference" type="ifc:IfcExternalReference" nillable="true"/>
     <xs:element name="RelatedResourceObjects">
      <xs:complexType>
       <xs:group ref="ifc:IfcResourceObjectSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcResourceObjectSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternalSpatialElement" type="ifc:IfcExternalSpatialElement" substitutionGroup="ifc:IfcExternalSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcExternalSpatialElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalSpatialStructureElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcExternalSpatialElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternalSpatialStructureElement" type="ifc:IfcExternalSpatialStructureElement" abstract="true" substitutionGroup="ifc:IfcSpatialElement" nillable="true"/>
 <xs:complexType name="IfcExternalSpatialStructureElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternallyDefinedHatchStyle" type="ifc:IfcExternallyDefinedHatchStyle" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcExternallyDefinedHatchStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternallyDefinedSurfaceStyle" type="ifc:IfcExternallyDefinedSurfaceStyle" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcExternallyDefinedSurfaceStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExternallyDefinedTextFont" type="ifc:IfcExternallyDefinedTextFont" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcExternallyDefinedTextFont">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExtrudedAreaSolid" type="ifc:IfcExtrudedAreaSolid" substitutionGroup="ifc:IfcSweptAreaSolid" nillable="true"/>
 <xs:complexType name="IfcExtrudedAreaSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptAreaSolid">
    <xs:sequence>
     <xs:element name="ExtrudedDirection" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Depth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcExtrudedAreaSolidTapered" type="ifc:IfcExtrudedAreaSolidTapered" substitutionGroup="ifc:IfcExtrudedAreaSolid" nillable="true"/>
 <xs:complexType name="IfcExtrudedAreaSolidTapered">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExtrudedAreaSolid">
    <xs:sequence>
     <xs:element name="EndSweptArea" type="ifc:IfcProfileDef" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFace" type="ifc:IfcFace" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcFace">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem">
    <xs:sequence>
     <xs:element name="Bounds">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcFaceBound" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcFaceBound"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFaceBasedSurfaceModel" type="ifc:IfcFaceBasedSurfaceModel" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcFaceBasedSurfaceModel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="FbsmFaces">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcConnectedFaceSet" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcConnectedFaceSet"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFaceBound" type="ifc:IfcFaceBound" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcFaceBound">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem">
    <xs:sequence>
     <xs:element name="Bound" type="ifc:IfcLoop" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Orientation" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFaceOuterBound" type="ifc:IfcFaceOuterBound" substitutionGroup="ifc:IfcFaceBound" nillable="true"/>
 <xs:complexType name="IfcFaceOuterBound">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFaceBound"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFaceSurface" type="ifc:IfcFaceSurface" substitutionGroup="ifc:IfcFace" nillable="true"/>
 <xs:complexType name="IfcFaceSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFace">
    <xs:sequence>
     <xs:element name="FaceSurface" type="ifc:IfcSurface" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="SameSense" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFacetedBrep" type="ifc:IfcFacetedBrep" substitutionGroup="ifc:IfcManifoldSolidBrep" nillable="true"/>
 <xs:complexType name="IfcFacetedBrep">
  <xs:complexContent>
   <xs:extension base="ifc:IfcManifoldSolidBrep"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFacetedBrepWithVoids" type="ifc:IfcFacetedBrepWithVoids" substitutionGroup="ifc:IfcFacetedBrep" nillable="true"/>
 <xs:complexType name="IfcFacetedBrepWithVoids">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFacetedBrep">
    <xs:sequence>
     <xs:element name="Voids">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcClosedShell" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcClosedShell"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFailureConnectionCondition" type="ifc:IfcFailureConnectionCondition" substitutionGroup="ifc:IfcStructuralConnectionCondition" nillable="true"/>
 <xs:complexType name="IfcFailureConnectionCondition">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralConnectionCondition">
    <xs:attribute name="TensionFailureX" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="TensionFailureY" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="TensionFailureZ" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="CompressionFailureX" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="CompressionFailureY" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="CompressionFailureZ" type="ifc:IfcForceMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFan" type="ifc:IfcFan" substitutionGroup="ifc:IfcFlowMovingDevice" nillable="true"/>
 <xs:complexType name="IfcFan">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcFanTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFanType" type="ifc:IfcFanType" substitutionGroup="ifc:IfcFlowMovingDeviceType" nillable="true"/>
 <xs:complexType name="IfcFanType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFanTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFastener" type="ifc:IfcFastener" substitutionGroup="ifc:IfcElementComponent" nillable="true"/>
 <xs:complexType name="IfcFastener">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponent">
    <xs:attribute name="PredefinedType" type="ifc:IfcFastenerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFastenerType" type="ifc:IfcFastenerType" substitutionGroup="ifc:IfcElementComponentType" nillable="true"/>
 <xs:complexType name="IfcFastenerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFastenerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFeatureElement" type="ifc:IfcFeatureElement" abstract="true" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcFeatureElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFeatureElementAddition" type="ifc:IfcFeatureElementAddition" abstract="true" substitutionGroup="ifc:IfcFeatureElement" nillable="true"/>
 <xs:complexType name="IfcFeatureElementAddition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFeatureElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFeatureElementSubtraction" type="ifc:IfcFeatureElementSubtraction" abstract="true" substitutionGroup="ifc:IfcFeatureElement" nillable="true"/>
 <xs:complexType name="IfcFeatureElementSubtraction" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFeatureElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFillAreaStyle" type="ifc:IfcFillAreaStyle" substitutionGroup="ifc:IfcPresentationStyle" nillable="true"/>
 <xs:complexType name="IfcFillAreaStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationStyle">
    <xs:sequence>
     <xs:element name="FillStyles">
      <xs:complexType>
       <xs:group ref="ifc:IfcFillStyleSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcFillStyleSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ModelorDraughting" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFillAreaStyleHatching" type="ifc:IfcFillAreaStyleHatching" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcFillAreaStyleHatching">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="HatchLineAppearance" type="ifc:IfcCurveStyle" nillable="true"/>
     <xs:element name="StartOfNextHatchLine">
      <xs:complexType>
       <xs:group ref="ifc:IfcHatchLineDistanceSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="PointOfReferenceHatchLine" type="ifc:IfcCartesianPoint" nillable="true" minOccurs="0"/>
     <xs:element name="PatternStart" type="ifc:IfcCartesianPoint" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="HatchLineAngle" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFillAreaStyleTiles" type="ifc:IfcFillAreaStyleTiles" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcFillAreaStyleTiles">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="TilingPattern">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcVector" minOccurs="2" maxOccurs="2"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcVector"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Tiles">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcStyledItem" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcStyledItem"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TilingScale" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFilter" type="ifc:IfcFilter" substitutionGroup="ifc:IfcFlowTreatmentDevice" nillable="true"/>
 <xs:complexType name="IfcFilter">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcFilterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFilterType" type="ifc:IfcFilterType" substitutionGroup="ifc:IfcFlowTreatmentDeviceType" nillable="true"/>
 <xs:complexType name="IfcFilterType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFilterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFireSuppressionTerminal" type="ifc:IfcFireSuppressionTerminal" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcFireSuppressionTerminal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcFireSuppressionTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFireSuppressionTerminalType" type="ifc:IfcFireSuppressionTerminalType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcFireSuppressionTerminalType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFireSuppressionTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFixedReferenceSweptAreaSolid" type="ifc:IfcFixedReferenceSweptAreaSolid" substitutionGroup="ifc:IfcSweptAreaSolid" nillable="true"/>
 <xs:complexType name="IfcFixedReferenceSweptAreaSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptAreaSolid">
    <xs:sequence>
     <xs:element name="Directrix" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="FixedReference" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="StartParam" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="EndParam" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowController" type="ifc:IfcFlowController" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowController">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowControllerType" type="ifc:IfcFlowControllerType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowControllerType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowFitting" type="ifc:IfcFlowFitting" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowFitting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowFittingType" type="ifc:IfcFlowFittingType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowFittingType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowInstrument" type="ifc:IfcFlowInstrument" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcFlowInstrument">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcFlowInstrumentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowInstrumentType" type="ifc:IfcFlowInstrumentType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcFlowInstrumentType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFlowInstrumentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowMeter" type="ifc:IfcFlowMeter" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcFlowMeter">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcFlowMeterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowMeterType" type="ifc:IfcFlowMeterType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcFlowMeterType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFlowMeterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowMovingDevice" type="ifc:IfcFlowMovingDevice" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowMovingDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowMovingDeviceType" type="ifc:IfcFlowMovingDeviceType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowMovingDeviceType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowSegment" type="ifc:IfcFlowSegment" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowSegmentType" type="ifc:IfcFlowSegmentType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowSegmentType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowStorageDevice" type="ifc:IfcFlowStorageDevice" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowStorageDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowStorageDeviceType" type="ifc:IfcFlowStorageDeviceType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowStorageDeviceType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowTerminal" type="ifc:IfcFlowTerminal" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowTerminal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowTerminalType" type="ifc:IfcFlowTerminalType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowTerminalType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowTreatmentDevice" type="ifc:IfcFlowTreatmentDevice" substitutionGroup="ifc:IfcDistributionFlowElement" nillable="true"/>
 <xs:complexType name="IfcFlowTreatmentDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFlowTreatmentDeviceType" type="ifc:IfcFlowTreatmentDeviceType" abstract="true" substitutionGroup="ifc:IfcDistributionFlowElementType" nillable="true"/>
 <xs:complexType name="IfcFlowTreatmentDeviceType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionFlowElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFooting" type="ifc:IfcFooting" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcFooting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcFootingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFootingType" type="ifc:IfcFootingType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcFootingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcFootingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFurnishingElement" type="ifc:IfcFurnishingElement" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcFurnishingElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFurnishingElementType" type="ifc:IfcFurnishingElementType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcFurnishingElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFurniture" type="ifc:IfcFurniture" substitutionGroup="ifc:IfcFurnishingElement" nillable="true"/>
 <xs:complexType name="IfcFurniture">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFurnishingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcFurnitureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcFurnitureType" type="ifc:IfcFurnitureType" substitutionGroup="ifc:IfcFurnishingElementType" nillable="true"/>
 <xs:complexType name="IfcFurnitureType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFurnishingElementType">
    <xs:attribute name="AssemblyPlace" type="ifc:IfcAssemblyPlaceEnum" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcFurnitureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeographicElement" type="ifc:IfcGeographicElement" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcGeographicElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcGeographicElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeographicElementType" type="ifc:IfcGeographicElementType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcGeographicElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcGeographicElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeometricCurveSet" type="ifc:IfcGeometricCurveSet" substitutionGroup="ifc:IfcGeometricSet" nillable="true"/>
 <xs:complexType name="IfcGeometricCurveSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricSet"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeometricRepresentationContext" type="ifc:IfcGeometricRepresentationContext" substitutionGroup="ifc:IfcRepresentationContext" nillable="true"/>
 <xs:complexType name="IfcGeometricRepresentationContext">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentationContext">
    <xs:sequence>
     <xs:element name="WorldCoordinateSystem" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TrueNorth" type="ifc:IfcDirection" nillable="true" minOccurs="0"/>
     <xs:element name="HasSubContexts" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcGeometricRepresentationSubContext" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcGeometricRepresentationSubContext"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="CoordinateSpaceDimension" type="ifc:IfcDimensionCount" use="optional"/>
    <xs:attribute name="Precision" type="xs:double" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeometricRepresentationItem" type="ifc:IfcGeometricRepresentationItem" abstract="true" substitutionGroup="ifc:IfcRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcGeometricRepresentationItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="IfcGeometricRepresentationSubContext-temp" abstract="true">
  <xs:complexContent>
   <xs:restriction base="ifc:IfcGeometricRepresentationContext">
    <xs:sequence/>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeometricRepresentationSubContext" type="ifc:IfcGeometricRepresentationSubContext" substitutionGroup="ifc:IfcGeometricRepresentationContext" nillable="true"/>
 <xs:complexType name="IfcGeometricRepresentationSubContext">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationSubContext-temp">
    <xs:attribute name="TargetScale" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
    <xs:attribute name="TargetView" type="ifc:IfcGeometricProjectionEnum" use="optional"/>
    <xs:attribute name="UserDefinedTargetView" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGeometricSet" type="ifc:IfcGeometricSet" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcGeometricSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Elements">
      <xs:complexType>
       <xs:group ref="ifc:IfcGeometricSetSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcGeometricSetSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGrid" type="ifc:IfcGrid" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcGrid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct">
    <xs:sequence>
     <xs:element name="UAxes">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcGridAxis" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcGridAxis"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="VAxes">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcGridAxis" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcGridAxis"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="WAxes" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcGridAxis" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcGridAxis"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcGridTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGridAxis" type="ifc:IfcGridAxis" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcGridAxis">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="AxisCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="AxisTag" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="SameSense" type="ifc:IfcBoolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGridPlacement" type="ifc:IfcGridPlacement" substitutionGroup="ifc:IfcObjectPlacement" nillable="true"/>
 <xs:complexType name="IfcGridPlacement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObjectPlacement">
    <xs:sequence>
     <xs:element name="PlacementLocation" type="ifc:IfcVirtualGridIntersection" nillable="true"/>
     <xs:element name="PlacementRefDirection" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcGridPlacementDirectionSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcGroup" type="ifc:IfcGroup" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcGroup">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcHalfSpaceSolid" type="ifc:IfcHalfSpaceSolid" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcHalfSpaceSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="BaseSurface" type="ifc:IfcSurface" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="AgreementFlag" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcHeatExchanger" type="ifc:IfcHeatExchanger" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcHeatExchanger">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcHeatExchangerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcHeatExchangerType" type="ifc:IfcHeatExchangerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcHeatExchangerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcHeatExchangerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcHumidifier" type="ifc:IfcHumidifier" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcHumidifier">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcHumidifierTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcHumidifierType" type="ifc:IfcHumidifierType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcHumidifierType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcHumidifierTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIShapeProfileDef" type="ifc:IfcIShapeProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcIShapeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="OverallWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="OverallDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="WebThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeEdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcImageTexture" type="ifc:IfcImageTexture" substitutionGroup="ifc:IfcSurfaceTexture" nillable="true"/>
 <xs:complexType name="IfcImageTexture">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurfaceTexture">
    <xs:attribute name="URLReference" type="ifc:IfcURIReference" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIndexedColourMap" type="ifc:IfcIndexedColourMap" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcIndexedColourMap">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="Overrides" type="ifc:IfcSurfaceStyleShading" nillable="true" minOccurs="0"/>
     <xs:element name="Colours" type="ifc:IfcColourRgbList" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="ColourIndex" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIndexedTextureMap" type="ifc:IfcIndexedTextureMap" abstract="true" substitutionGroup="ifc:IfcTextureCoordinate" nillable="true"/>
 <xs:complexType name="IfcIndexedTextureMap" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTextureCoordinate">
    <xs:sequence>
     <xs:element name="TexCoords" type="ifc:IfcTextureVertexList" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIndexedTriangleTextureMap" type="ifc:IfcIndexedTriangleTextureMap" substitutionGroup="ifc:IfcIndexedTextureMap" nillable="true"/>
 <xs:complexType name="IfcIndexedTriangleTextureMap">
  <xs:complexContent>
   <xs:extension base="ifc:IfcIndexedTextureMap">
    <xs:attribute name="TexCoordIndex" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcInterceptor" type="ifc:IfcInterceptor" substitutionGroup="ifc:IfcFlowTreatmentDevice" nillable="true"/>
 <xs:complexType name="IfcInterceptor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcInterceptorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcInterceptorType" type="ifc:IfcInterceptorType" substitutionGroup="ifc:IfcFlowTreatmentDeviceType" nillable="true"/>
 <xs:complexType name="IfcInterceptorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTreatmentDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcInterceptorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcInventory" type="ifc:IfcInventory" substitutionGroup="ifc:IfcGroup" nillable="true"/>
 <xs:complexType name="IfcInventory">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGroup">
    <xs:sequence>
     <xs:element name="Jurisdiction" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ResponsiblePersons" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPerson" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPerson"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CurrentValue" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
     <xs:element name="OriginalValue" type="ifc:IfcCostValue" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcInventoryTypeEnum" use="optional"/>
    <xs:attribute name="LastUpdateDate" type="ifc:IfcDate" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIrregularTimeSeries" type="ifc:IfcIrregularTimeSeries" substitutionGroup="ifc:IfcTimeSeries" nillable="true"/>
 <xs:complexType name="IfcIrregularTimeSeries">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTimeSeries">
    <xs:sequence>
     <xs:element name="Values">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcIrregularTimeSeriesValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcIrregularTimeSeriesValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcIrregularTimeSeriesValue" type="ifc:IfcIrregularTimeSeriesValue" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcIrregularTimeSeriesValue">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ListValues">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="ifc:IfcDateTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcJunctionBox" type="ifc:IfcJunctionBox" substitutionGroup="ifc:IfcFlowFitting" nillable="true"/>
 <xs:complexType name="IfcJunctionBox">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFitting">
    <xs:attribute name="PredefinedType" type="ifc:IfcJunctionBoxTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcJunctionBoxType" type="ifc:IfcJunctionBoxType" substitutionGroup="ifc:IfcFlowFittingType" nillable="true"/>
 <xs:complexType name="IfcJunctionBoxType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFittingType">
    <xs:attribute name="PredefinedType" type="ifc:IfcJunctionBoxTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLShapeProfileDef" type="ifc:IfcLShapeProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcLShapeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="Depth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Width" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Thickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="EdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="LegSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLaborResource" type="ifc:IfcLaborResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcLaborResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcLaborResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLaborResourceType" type="ifc:IfcLaborResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcLaborResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcLaborResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLagTime" type="ifc:IfcLagTime" substitutionGroup="ifc:IfcSchedulingTime" nillable="true"/>
 <xs:complexType name="IfcLagTime">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSchedulingTime">
    <xs:sequence>
     <xs:element name="LagValue">
      <xs:complexType>
       <xs:group ref="ifc:IfcTimeOrRatioSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="DurationType" type="ifc:IfcTaskDurationEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLamp" type="ifc:IfcLamp" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcLamp">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcLampTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLampType" type="ifc:IfcLampType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcLampType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcLampTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLibraryInformation" type="ifc:IfcLibraryInformation" substitutionGroup="ifc:IfcExternalInformation" nillable="true"/>
 <xs:complexType name="IfcLibraryInformation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalInformation">
    <xs:sequence>
     <xs:element name="Publisher" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcActorSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Version" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="VersionDate" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="Location" type="ifc:IfcURIReference" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLibraryReference" type="ifc:IfcLibraryReference" substitutionGroup="ifc:IfcExternalReference" nillable="true"/>
 <xs:complexType name="IfcLibraryReference">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExternalReference">
    <xs:sequence>
     <xs:element name="ReferencedLibrary" type="ifc:IfcLibraryInformation" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Language" type="ifc:IfcLanguageId" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightDistributionData" type="ifc:IfcLightDistributionData" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcLightDistributionData">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="MainPlaneAngle" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="SecondaryPlaneAngle" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcPlaneAngleMeasure"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LuminousIntensity" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLuminousIntensityDistributionMeasure"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightFixture" type="ifc:IfcLightFixture" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcLightFixture">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcLightFixtureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightFixtureType" type="ifc:IfcLightFixtureType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcLightFixtureType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcLightFixtureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightIntensityDistribution" type="ifc:IfcLightIntensityDistribution" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcLightIntensityDistribution">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="DistributionData">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcLightDistributionData" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcLightDistributionData"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="LightDistributionCurve" type="ifc:IfcLightDistributionCurveEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSource" type="ifc:IfcLightSource" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcLightSource" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="LightColour" type="ifc:IfcColourRgb" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="AmbientIntensity" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="Intensity" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSourceAmbient" type="ifc:IfcLightSourceAmbient" substitutionGroup="ifc:IfcLightSource" nillable="true"/>
 <xs:complexType name="IfcLightSourceAmbient">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLightSource"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSourceDirectional" type="ifc:IfcLightSourceDirectional" substitutionGroup="ifc:IfcLightSource" nillable="true"/>
 <xs:complexType name="IfcLightSourceDirectional">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLightSource">
    <xs:sequence>
     <xs:element name="Orientation" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSourceGoniometric" type="ifc:IfcLightSourceGoniometric" substitutionGroup="ifc:IfcLightSource" nillable="true"/>
 <xs:complexType name="IfcLightSourceGoniometric">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLightSource">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true"/>
     <xs:element name="ColourAppearance" type="ifc:IfcColourRgb" nillable="true" minOccurs="0"/>
     <xs:element name="LightDistributionDataSource">
      <xs:complexType>
       <xs:group ref="ifc:IfcLightDistributionDataSourceSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ColourTemperature" type="ifc:IfcThermodynamicTemperatureMeasure" use="optional"/>
    <xs:attribute name="LuminousFlux" type="ifc:IfcLuminousFluxMeasure" use="optional"/>
    <xs:attribute name="LightEmissionSource" type="ifc:IfcLightEmissionSourceEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSourcePositional" type="ifc:IfcLightSourcePositional" substitutionGroup="ifc:IfcLightSource" nillable="true"/>
 <xs:complexType name="IfcLightSourcePositional">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLightSource">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcCartesianPoint" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="ConstantAttenuation" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="DistanceAttenuation" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="QuadricAttenuation" type="ifc:IfcReal" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLightSourceSpot" type="ifc:IfcLightSourceSpot" substitutionGroup="ifc:IfcLightSourcePositional" nillable="true"/>
 <xs:complexType name="IfcLightSourceSpot">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLightSourcePositional">
    <xs:sequence>
     <xs:element name="Orientation" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="ConcentrationExponent" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="SpreadAngle" type="ifc:IfcPositivePlaneAngleMeasure" use="optional"/>
    <xs:attribute name="BeamWidthAngle" type="ifc:IfcPositivePlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLine" type="ifc:IfcLine" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcLine">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve">
    <xs:sequence>
     <xs:element name="Pnt" type="ifc:IfcCartesianPoint" nillable="true"/>
     <xs:element name="Dir" type="ifc:IfcVector" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLocalPlacement" type="ifc:IfcLocalPlacement" substitutionGroup="ifc:IfcObjectPlacement" nillable="true"/>
 <xs:complexType name="IfcLocalPlacement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObjectPlacement">
    <xs:sequence>
     <xs:element name="PlacementRelTo" type="ifc:IfcObjectPlacement" nillable="true" minOccurs="0"/>
     <xs:element name="RelativePlacement">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcLoop" type="ifc:IfcLoop" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcLoop">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcManifoldSolidBrep" type="ifc:IfcManifoldSolidBrep" abstract="true" substitutionGroup="ifc:IfcSolidModel" nillable="true"/>
 <xs:complexType name="IfcManifoldSolidBrep" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSolidModel">
    <xs:sequence>
     <xs:element name="Outer" type="ifc:IfcClosedShell" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMapConversion" type="ifc:IfcMapConversion" substitutionGroup="ifc:IfcCoordinateOperation" nillable="true"/>
 <xs:complexType name="IfcMapConversion">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCoordinateOperation">
    <xs:attribute name="Eastings" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="Northings" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="OrthogonalHeight" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="XAxisAbscissa" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="XAxisOrdinate" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="Scale" type="ifc:IfcReal" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMappedItem" type="ifc:IfcMappedItem" substitutionGroup="ifc:IfcRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcMappedItem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentationItem">
    <xs:sequence>
     <xs:element name="MappingSource" type="ifc:IfcRepresentationMap" nillable="true"/>
     <xs:element name="MappingTarget" type="ifc:IfcCartesianTransformationOperator" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterial" type="ifc:IfcMaterial" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterial">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="HasRepresentation" type="ifc:IfcMaterialDefinitionRepresentation" nillable="true" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialClassificationRelationship" type="ifc:IfcMaterialClassificationRelationship" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMaterialClassificationRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="MaterialClassifications">
      <xs:complexType>
       <xs:group ref="ifc:IfcClassificationSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcClassificationSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ClassifiedMaterial" type="ifc:IfcMaterial" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialConstituent" type="ifc:IfcMaterialConstituent" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialConstituent">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="Material" type="ifc:IfcMaterial" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Fraction" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialConstituentSet" type="ifc:IfcMaterialConstituentSet" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialConstituentSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="MaterialConstituents" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterialConstituent" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterialConstituent"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialDefinition" type="ifc:IfcMaterialDefinition" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMaterialDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="HasProperties" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterialProperties" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterialProperties"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialDefinitionRepresentation" type="ifc:IfcMaterialDefinitionRepresentation" substitutionGroup="ifc:IfcProductRepresentation" nillable="true"/>
 <xs:complexType name="IfcMaterialDefinitionRepresentation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProductRepresentation"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialLayer" type="ifc:IfcMaterialLayer" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialLayer">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="Material" type="ifc:IfcMaterial" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="LayerThickness" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="IsVentilated" type="ifc:IfcLogical" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Priority" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialLayerSet" type="ifc:IfcMaterialLayerSet" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialLayerSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="MaterialLayers">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterialLayer" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterialLayer"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="LayerSetName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialLayerSetUsage" type="ifc:IfcMaterialLayerSetUsage" substitutionGroup="ifc:IfcMaterialUsageDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialLayerSetUsage">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialUsageDefinition">
    <xs:sequence>
     <xs:element name="ForLayerSet" type="ifc:IfcMaterialLayerSet" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="LayerSetDirection" type="ifc:IfcLayerSetDirectionEnum" use="optional"/>
    <xs:attribute name="DirectionSense" type="ifc:IfcDirectionSenseEnum" use="optional"/>
    <xs:attribute name="OffsetFromReferenceLine" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="ReferenceExtent" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialLayerWithOffsets" type="ifc:IfcMaterialLayerWithOffsets" substitutionGroup="ifc:IfcMaterialLayer" nillable="true"/>
 <xs:complexType name="IfcMaterialLayerWithOffsets">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialLayer">
    <xs:attribute name="OffsetDirection" type="ifc:IfcLayerSetDirectionEnum" use="optional"/>
    <xs:attribute name="OffsetValues" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialList" type="ifc:IfcMaterialList" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMaterialList">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Materials">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterial" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterial"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProfile" type="ifc:IfcMaterialProfile" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialProfile">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="Material" type="ifc:IfcMaterial" nillable="true" minOccurs="0"/>
     <xs:element name="Profile" type="ifc:IfcProfileDef" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Priority" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProfileSet" type="ifc:IfcMaterialProfileSet" substitutionGroup="ifc:IfcMaterialDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialProfileSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialDefinition">
    <xs:sequence>
     <xs:element name="MaterialProfiles">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterialProfile" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterialProfile"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CompositeProfile" type="ifc:IfcCompositeProfileDef" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProfileSetUsage" type="ifc:IfcMaterialProfileSetUsage" substitutionGroup="ifc:IfcMaterialUsageDefinition" nillable="true"/>
 <xs:complexType name="IfcMaterialProfileSetUsage">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialUsageDefinition">
    <xs:sequence>
     <xs:element name="ForProfileSet" type="ifc:IfcMaterialProfileSet" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="CardinalPoint" type="ifc:IfcCardinalPointReference" use="optional"/>
    <xs:attribute name="ReferenceExtent" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProfileSetUsageTapering" type="ifc:IfcMaterialProfileSetUsageTapering" substitutionGroup="ifc:IfcMaterialProfileSetUsage" nillable="true"/>
 <xs:complexType name="IfcMaterialProfileSetUsageTapering">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialProfileSetUsage">
    <xs:sequence>
     <xs:element name="ForProfileEndSet" type="ifc:IfcMaterialProfileSet" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="CardinalEndPoint" type="ifc:IfcCardinalPointReference" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProfileWithOffsets" type="ifc:IfcMaterialProfileWithOffsets" substitutionGroup="ifc:IfcMaterialProfile" nillable="true"/>
 <xs:complexType name="IfcMaterialProfileWithOffsets">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMaterialProfile">
    <xs:attribute name="OffsetValues" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialProperties" type="ifc:IfcMaterialProperties" substitutionGroup="ifc:IfcExtendedProperties" nillable="true"/>
 <xs:complexType name="IfcMaterialProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExtendedProperties"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialRelationship" type="ifc:IfcMaterialRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcMaterialRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingMaterial" type="ifc:IfcMaterial" nillable="true"/>
     <xs:element name="RelatedMaterials">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcMaterial" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcMaterial"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Expression" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMaterialUsageDefinition" type="ifc:IfcMaterialUsageDefinition" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMaterialUsageDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMeasureWithUnit" type="ifc:IfcMeasureWithUnit" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMeasureWithUnit">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ValueComponent">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="UnitComponent">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMechanicalFastener" type="ifc:IfcMechanicalFastener" substitutionGroup="ifc:IfcElementComponent" nillable="true"/>
 <xs:complexType name="IfcMechanicalFastener">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponent">
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="NominalLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcMechanicalFastenerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMechanicalFastenerType" type="ifc:IfcMechanicalFastenerType" substitutionGroup="ifc:IfcElementComponentType" nillable="true"/>
 <xs:complexType name="IfcMechanicalFastenerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcMechanicalFastenerTypeEnum" use="optional"/>
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="NominalLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMedicalDevice" type="ifc:IfcMedicalDevice" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcMedicalDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcMedicalDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMedicalDeviceType" type="ifc:IfcMedicalDeviceType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcMedicalDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcMedicalDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMember" type="ifc:IfcMember" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcMember">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcMemberTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMemberStandardCase" type="ifc:IfcMemberStandardCase" substitutionGroup="ifc:IfcMember" nillable="true"/>
 <xs:complexType name="IfcMemberStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMember"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMemberType" type="ifc:IfcMemberType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcMemberType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcMemberTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMetric" type="ifc:IfcMetric" substitutionGroup="ifc:IfcConstraint" nillable="true"/>
 <xs:complexType name="IfcMetric">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstraint">
    <xs:sequence>
     <xs:element name="DataValue">
      <xs:complexType>
       <xs:group ref="ifc:IfcMetricValueSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ReferencePath" type="ifc:IfcReference" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Benchmark" type="ifc:IfcBenchmarkEnum" use="optional"/>
    <xs:attribute name="ValueSource" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="IfcMirroredProfileDef-temp" abstract="true">
  <xs:complexContent>
   <xs:restriction base="ifc:IfcDerivedProfileDef">
    <xs:sequence>
     <xs:element name="ParentProfile" type="ifc:IfcProfileDef" nillable="true"/>
    </xs:sequence>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMirroredProfileDef" type="ifc:IfcMirroredProfileDef" substitutionGroup="ifc:IfcDerivedProfileDef" nillable="true"/>
 <xs:complexType name="IfcMirroredProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcMirroredProfileDef-temp"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMonetaryUnit" type="ifc:IfcMonetaryUnit" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcMonetaryUnit">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Currency" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMotorConnection" type="ifc:IfcMotorConnection" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcMotorConnection">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcMotorConnectionTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcMotorConnectionType" type="ifc:IfcMotorConnectionType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcMotorConnectionType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcMotorConnectionTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcNamedUnit" type="ifc:IfcNamedUnit" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcNamedUnit" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Dimensions" type="ifc:IfcDimensionalExponents" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="UnitType" type="ifc:IfcUnitEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcObject" type="ifc:IfcObject" abstract="true" substitutionGroup="ifc:IfcObjectDefinition" nillable="true"/>
 <xs:complexType name="IfcObject" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObjectDefinition">
    <xs:attribute name="ObjectType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcObjectDefinition" type="ifc:IfcObjectDefinition" abstract="true" substitutionGroup="ifc:IfcRoot" nillable="true"/>
 <xs:complexType name="IfcObjectDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRoot"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcObjectPlacement" type="ifc:IfcObjectPlacement" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcObjectPlacement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcObjective" type="ifc:IfcObjective" substitutionGroup="ifc:IfcConstraint" nillable="true"/>
 <xs:complexType name="IfcObjective">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstraint">
    <xs:sequence>
     <xs:element name="BenchmarkValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcConstraint" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcConstraint"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="LogicalAggregator" type="ifc:IfcLogicalOperatorEnum" use="optional"/>
    <xs:attribute name="ObjectiveQualifier" type="ifc:IfcObjectiveEnum" use="optional"/>
    <xs:attribute name="UserDefinedQualifier" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOccupant" type="ifc:IfcOccupant" substitutionGroup="ifc:IfcActor" nillable="true"/>
 <xs:complexType name="IfcOccupant">
  <xs:complexContent>
   <xs:extension base="ifc:IfcActor">
    <xs:attribute name="PredefinedType" type="ifc:IfcOccupantTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOffsetCurve2D" type="ifc:IfcOffsetCurve2D" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcOffsetCurve2D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve">
    <xs:sequence>
     <xs:element name="BasisCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Distance" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="SelfIntersect" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOffsetCurve3D" type="ifc:IfcOffsetCurve3D" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcOffsetCurve3D">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve">
    <xs:sequence>
     <xs:element name="BasisCurve" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="RefDirection" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Distance" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="SelfIntersect" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOpenShell" type="ifc:IfcOpenShell" substitutionGroup="ifc:IfcConnectedFaceSet" nillable="true"/>
 <xs:complexType name="IfcOpenShell">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConnectedFaceSet"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOpeningElement" type="ifc:IfcOpeningElement" substitutionGroup="ifc:IfcFeatureElementSubtraction" nillable="true"/>
 <xs:complexType name="IfcOpeningElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFeatureElementSubtraction">
    <xs:attribute name="PredefinedType" type="ifc:IfcOpeningElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOpeningStandardCase" type="ifc:IfcOpeningStandardCase" substitutionGroup="ifc:IfcOpeningElement" nillable="true"/>
 <xs:complexType name="IfcOpeningStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcOpeningElement"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOrganization" type="ifc:IfcOrganization" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcOrganization">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Roles" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcActorRole" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcActorRole"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Addresses" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAddress" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAddress"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOrganizationRelationship" type="ifc:IfcOrganizationRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcOrganizationRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingOrganization" type="ifc:IfcOrganization" nillable="true"/>
     <xs:element name="RelatedOrganizations">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcOrganization" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcOrganization"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="IfcOrientedEdge-temp" abstract="true">
  <xs:complexContent>
   <xs:restriction base="ifc:IfcEdge">
    <xs:sequence/>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOrientedEdge" type="ifc:IfcOrientedEdge" substitutionGroup="ifc:IfcEdge" nillable="true"/>
 <xs:complexType name="IfcOrientedEdge">
  <xs:complexContent>
   <xs:extension base="ifc:IfcOrientedEdge-temp">
    <xs:sequence>
     <xs:element name="EdgeElement" type="ifc:IfcEdge" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Orientation" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOuterBoundaryCurve" type="ifc:IfcOuterBoundaryCurve" substitutionGroup="ifc:IfcBoundaryCurve" nillable="true"/>
 <xs:complexType name="IfcOuterBoundaryCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundaryCurve"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOutlet" type="ifc:IfcOutlet" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcOutlet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcOutletTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOutletType" type="ifc:IfcOutletType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcOutletType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcOutletTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcOwnerHistory" type="ifc:IfcOwnerHistory" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcOwnerHistory">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="OwningUser" type="ifc:IfcPersonAndOrganization" nillable="true"/>
     <xs:element name="OwningApplication" type="ifc:IfcApplication" nillable="true"/>
     <xs:element name="LastModifyingUser" type="ifc:IfcPersonAndOrganization" nillable="true" minOccurs="0"/>
     <xs:element name="LastModifyingApplication" type="ifc:IfcApplication" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="State" type="ifc:IfcStateEnum" use="optional"/>
    <xs:attribute name="ChangeAction" type="ifc:IfcChangeActionEnum" use="optional"/>
    <xs:attribute name="LastModifiedDate" type="ifc:IfcTimeStamp" use="optional"/>
    <xs:attribute name="CreationDate" type="ifc:IfcTimeStamp" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcParameterizedProfileDef" type="ifc:IfcParameterizedProfileDef" abstract="true" substitutionGroup="ifc:IfcProfileDef" nillable="true"/>
 <xs:complexType name="IfcParameterizedProfileDef" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProfileDef">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcAxis2Placement2D" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPath" type="ifc:IfcPath" substitutionGroup="ifc:IfcTopologicalRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcPath">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTopologicalRepresentationItem">
    <xs:sequence>
     <xs:element name="EdgeList">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcOrientedEdge" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcOrientedEdge"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPcurve" type="ifc:IfcPcurve" substitutionGroup="ifc:IfcCurve" nillable="true"/>
 <xs:complexType name="IfcPcurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCurve">
    <xs:sequence>
     <xs:element name="BasisSurface" type="ifc:IfcSurface" nillable="true"/>
     <xs:element name="ReferenceCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPerformanceHistory" type="ifc:IfcPerformanceHistory" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcPerformanceHistory">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="LifeCyclePhase" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcPerformanceHistoryTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPermeableCoveringProperties" type="ifc:IfcPermeableCoveringProperties" substitutionGroup="ifc:IfcPreDefinedPropertySet" nillable="true"/>
 <xs:complexType name="IfcPermeableCoveringProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedPropertySet">
    <xs:sequence>
     <xs:element name="ShapeAspectStyle" type="ifc:IfcShapeAspect" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="OperationType" type="ifc:IfcPermeableCoveringOperationEnum" use="optional"/>
    <xs:attribute name="PanelPosition" type="ifc:IfcWindowPanelPositionEnum" use="optional"/>
    <xs:attribute name="FrameDepth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FrameThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPermit" type="ifc:IfcPermit" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcPermit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="PredefinedType" type="ifc:IfcPermitTypeEnum" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPerson" type="ifc:IfcPerson" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPerson">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Roles" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcActorRole" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcActorRole"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Addresses" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAddress" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAddress"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="FamilyName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="GivenName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="MiddleNames" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="PrefixTitles" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="SuffixTitles" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPersonAndOrganization" type="ifc:IfcPersonAndOrganization" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPersonAndOrganization">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ThePerson" type="ifc:IfcPerson" nillable="true"/>
     <xs:element name="TheOrganization" type="ifc:IfcOrganization" nillable="true"/>
     <xs:element name="Roles" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcActorRole" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcActorRole"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPhysicalComplexQuantity" type="ifc:IfcPhysicalComplexQuantity" substitutionGroup="ifc:IfcPhysicalQuantity" nillable="true"/>
 <xs:complexType name="IfcPhysicalComplexQuantity">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalQuantity">
    <xs:sequence>
     <xs:element name="HasQuantities">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPhysicalQuantity" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPhysicalQuantity"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Discrimination" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Quality" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Usage" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPhysicalQuantity" type="ifc:IfcPhysicalQuantity" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPhysicalQuantity" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPhysicalSimpleQuantity" type="ifc:IfcPhysicalSimpleQuantity" abstract="true" substitutionGroup="ifc:IfcPhysicalQuantity" nillable="true"/>
 <xs:complexType name="IfcPhysicalSimpleQuantity" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalQuantity">
    <xs:sequence>
     <xs:element name="Unit" type="ifc:IfcNamedUnit" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPile" type="ifc:IfcPile" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcPile">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcPileTypeEnum" use="optional"/>
    <xs:attribute name="ConstructionType" type="ifc:IfcPileConstructionEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPileType" type="ifc:IfcPileType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcPileType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcPileTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPipeFitting" type="ifc:IfcPipeFitting" substitutionGroup="ifc:IfcFlowFitting" nillable="true"/>
 <xs:complexType name="IfcPipeFitting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFitting">
    <xs:attribute name="PredefinedType" type="ifc:IfcPipeFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPipeFittingType" type="ifc:IfcPipeFittingType" substitutionGroup="ifc:IfcFlowFittingType" nillable="true"/>
 <xs:complexType name="IfcPipeFittingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowFittingType">
    <xs:attribute name="PredefinedType" type="ifc:IfcPipeFittingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPipeSegment" type="ifc:IfcPipeSegment" substitutionGroup="ifc:IfcFlowSegment" nillable="true"/>
 <xs:complexType name="IfcPipeSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegment">
    <xs:attribute name="PredefinedType" type="ifc:IfcPipeSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPipeSegmentType" type="ifc:IfcPipeSegmentType" substitutionGroup="ifc:IfcFlowSegmentType" nillable="true"/>
 <xs:complexType name="IfcPipeSegmentType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowSegmentType">
    <xs:attribute name="PredefinedType" type="ifc:IfcPipeSegmentTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPixelTexture" type="ifc:IfcPixelTexture" substitutionGroup="ifc:IfcSurfaceTexture" nillable="true"/>
 <xs:complexType name="IfcPixelTexture">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurfaceTexture">
    <xs:attribute name="Width" type="ifc:IfcInteger" use="optional"/>
    <xs:attribute name="Height" type="ifc:IfcInteger" use="optional"/>
    <xs:attribute name="ColourComponents" type="ifc:IfcInteger" use="optional"/>
    <xs:attribute name="Pixel" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:hexBinary"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlacement" type="ifc:IfcPlacement" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcPlacement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Location" type="ifc:IfcCartesianPoint" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlanarBox" type="ifc:IfcPlanarBox" substitutionGroup="ifc:IfcPlanarExtent" nillable="true"/>
 <xs:complexType name="IfcPlanarBox">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPlanarExtent">
    <xs:sequence>
     <xs:element name="Placement">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlanarExtent" type="ifc:IfcPlanarExtent" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcPlanarExtent">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:attribute name="SizeInX" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="SizeInY" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlane" type="ifc:IfcPlane" substitutionGroup="ifc:IfcElementarySurface" nillable="true"/>
 <xs:complexType name="IfcPlane">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementarySurface"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlate" type="ifc:IfcPlate" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcPlate">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcPlateTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlateStandardCase" type="ifc:IfcPlateStandardCase" substitutionGroup="ifc:IfcPlate" nillable="true"/>
 <xs:complexType name="IfcPlateStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPlate"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPlateType" type="ifc:IfcPlateType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcPlateType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcPlateTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPoint" type="ifc:IfcPoint" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcPoint" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPointOnCurve" type="ifc:IfcPointOnCurve" substitutionGroup="ifc:IfcPoint" nillable="true"/>
 <xs:complexType name="IfcPointOnCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPoint">
    <xs:sequence>
     <xs:element name="BasisCurve" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="PointParameter" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPointOnSurface" type="ifc:IfcPointOnSurface" substitutionGroup="ifc:IfcPoint" nillable="true"/>
 <xs:complexType name="IfcPointOnSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPoint">
    <xs:sequence>
     <xs:element name="BasisSurface" type="ifc:IfcSurface" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="PointParameterU" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="PointParameterV" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPolyLoop" type="ifc:IfcPolyLoop" substitutionGroup="ifc:IfcLoop" nillable="true"/>
 <xs:complexType name="IfcPolyLoop">
  <xs:complexContent>
   <xs:extension base="ifc:IfcLoop">
    <xs:sequence>
     <xs:element name="Polygon">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCartesianPoint" minOccurs="3" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCartesianPoint"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPolygonalBoundedHalfSpace" type="ifc:IfcPolygonalBoundedHalfSpace" substitutionGroup="ifc:IfcHalfSpaceSolid" nillable="true"/>
 <xs:complexType name="IfcPolygonalBoundedHalfSpace">
  <xs:complexContent>
   <xs:extension base="ifc:IfcHalfSpaceSolid">
    <xs:sequence>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true"/>
     <xs:element name="PolygonalBoundary" type="ifc:IfcBoundedCurve" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPolyline" type="ifc:IfcPolyline" substitutionGroup="ifc:IfcBoundedCurve" nillable="true"/>
 <xs:complexType name="IfcPolyline">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedCurve">
    <xs:sequence>
     <xs:element name="Points">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCartesianPoint" minOccurs="2" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCartesianPoint"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPort" type="ifc:IfcPort" abstract="true" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcPort" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPostalAddress" type="ifc:IfcPostalAddress" substitutionGroup="ifc:IfcAddress" nillable="true"/>
 <xs:complexType name="IfcPostalAddress">
  <xs:complexContent>
   <xs:extension base="ifc:IfcAddress">
    <xs:sequence>
     <xs:element name="AddressLines" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcLabel-wrapper" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcLabel-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="InternalLocation" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="PostalBox" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Town" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Region" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="PostalCode" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Country" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedColour" type="ifc:IfcPreDefinedColour" abstract="true" substitutionGroup="ifc:IfcPreDefinedItem" nillable="true"/>
 <xs:complexType name="IfcPreDefinedColour" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedCurveFont" type="ifc:IfcPreDefinedCurveFont" abstract="true" substitutionGroup="ifc:IfcPreDefinedItem" nillable="true"/>
 <xs:complexType name="IfcPreDefinedCurveFont" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedItem" type="ifc:IfcPreDefinedItem" abstract="true" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcPreDefinedItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedProperties" type="ifc:IfcPreDefinedProperties" abstract="true" substitutionGroup="ifc:IfcPropertyAbstraction" nillable="true"/>
 <xs:complexType name="IfcPreDefinedProperties" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyAbstraction"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedPropertySet" type="ifc:IfcPreDefinedPropertySet" abstract="true" substitutionGroup="ifc:IfcPropertySetDefinition" nillable="true"/>
 <xs:complexType name="IfcPreDefinedPropertySet" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertySetDefinition"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPreDefinedTextFont" type="ifc:IfcPreDefinedTextFont" abstract="true" substitutionGroup="ifc:IfcPreDefinedItem" nillable="true"/>
 <xs:complexType name="IfcPreDefinedTextFont" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPresentationItem" type="ifc:IfcPresentationItem" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPresentationItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPresentationLayerAssignment" type="ifc:IfcPresentationLayerAssignment" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPresentationLayerAssignment">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="AssignedItems">
      <xs:complexType>
       <xs:group ref="ifc:IfcLayeredItem" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcLayeredItem"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="Identifier" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPresentationLayerWithStyle" type="ifc:IfcPresentationLayerWithStyle" substitutionGroup="ifc:IfcPresentationLayerAssignment" nillable="true"/>
 <xs:complexType name="IfcPresentationLayerWithStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationLayerAssignment">
    <xs:sequence>
     <xs:element name="LayerStyles">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPresentationStyle" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPresentationStyle"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="LayerOn" type="ifc:logical" use="optional"/>
    <xs:attribute name="LayerFrozen" type="ifc:logical" use="optional"/>
    <xs:attribute name="LayerBlocked" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPresentationStyle" type="ifc:IfcPresentationStyle" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPresentationStyle" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPresentationStyleAssignment" type="ifc:IfcPresentationStyleAssignment" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPresentationStyleAssignment">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Styles">
      <xs:complexType>
       <xs:group ref="ifc:IfcPresentationStyleSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPresentationStyleSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProcedure" type="ifc:IfcProcedure" substitutionGroup="ifc:IfcProcess" nillable="true"/>
 <xs:complexType name="IfcProcedure">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProcess">
    <xs:attribute name="PredefinedType" type="ifc:IfcProcedureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProcedureType" type="ifc:IfcProcedureType" substitutionGroup="ifc:IfcTypeProcess" nillable="true"/>
 <xs:complexType name="IfcProcedureType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProcess">
    <xs:attribute name="PredefinedType" type="ifc:IfcProcedureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProcess" type="ifc:IfcProcess" abstract="true" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcProcess" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject">
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProduct" type="ifc:IfcProduct" abstract="true" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcProduct" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject">
    <xs:sequence>
     <xs:element name="ObjectPlacement" type="ifc:IfcObjectPlacement" nillable="true" minOccurs="0"/>
     <xs:element name="Representation" type="ifc:IfcProductRepresentation" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProductDefinitionShape" type="ifc:IfcProductDefinitionShape" substitutionGroup="ifc:IfcProductRepresentation" nillable="true"/>
 <xs:complexType name="IfcProductDefinitionShape">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProductRepresentation">
    <xs:sequence>
     <xs:element name="HasShapeAspects" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcShapeAspect" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcShapeAspect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProductRepresentation" type="ifc:IfcProductRepresentation" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcProductRepresentation" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Representations">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcRepresentation" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcRepresentation"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProfileDef" type="ifc:IfcProfileDef" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="HasProperties" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProfileProperties" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProfileProperties"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ProfileType" type="ifc:IfcProfileTypeEnum" use="optional"/>
    <xs:attribute name="ProfileName" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProfileProperties" type="ifc:IfcProfileProperties" substitutionGroup="ifc:IfcExtendedProperties" nillable="true"/>
 <xs:complexType name="IfcProfileProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcExtendedProperties"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProject" type="ifc:IfcProject" substitutionGroup="ifc:IfcContext" nillable="true"/>
 <xs:complexType name="IfcProject">
  <xs:complexContent>
   <xs:extension base="ifc:IfcContext"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProjectLibrary" type="ifc:IfcProjectLibrary" substitutionGroup="ifc:IfcContext" nillable="true"/>
 <xs:complexType name="IfcProjectLibrary">
  <xs:complexContent>
   <xs:extension base="ifc:IfcContext"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProjectOrder" type="ifc:IfcProjectOrder" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcProjectOrder">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="PredefinedType" type="ifc:IfcProjectOrderTypeEnum" use="optional"/>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProjectedCRS" type="ifc:IfcProjectedCRS" substitutionGroup="ifc:IfcCoordinateReferenceSystem" nillable="true"/>
 <xs:complexType name="IfcProjectedCRS">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCoordinateReferenceSystem">
    <xs:sequence>
     <xs:element name="MapUnit" type="ifc:IfcNamedUnit" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="MapProjection" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="MapZone" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProjectionElement" type="ifc:IfcProjectionElement" substitutionGroup="ifc:IfcFeatureElementAddition" nillable="true"/>
 <xs:complexType name="IfcProjectionElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFeatureElementAddition">
    <xs:attribute name="PredefinedType" type="ifc:IfcProjectionElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProperty" type="ifc:IfcProperty" abstract="true" substitutionGroup="ifc:IfcPropertyAbstraction" nillable="true"/>
 <xs:complexType name="IfcProperty" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyAbstraction">
    <xs:attribute name="Name" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyAbstraction" type="ifc:IfcPropertyAbstraction" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcPropertyAbstraction" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyBoundedValue" type="ifc:IfcPropertyBoundedValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyBoundedValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="UpperBoundValue" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="LowerBoundValue" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SetPointValue" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyDefinition" type="ifc:IfcPropertyDefinition" abstract="true" substitutionGroup="ifc:IfcRoot" nillable="true"/>
 <xs:complexType name="IfcPropertyDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRoot"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyDependencyRelationship" type="ifc:IfcPropertyDependencyRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcPropertyDependencyRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="DependingProperty" type="ifc:IfcProperty" nillable="true"/>
     <xs:element name="DependantProperty" type="ifc:IfcProperty" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Expression" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyEnumeratedValue" type="ifc:IfcPropertyEnumeratedValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyEnumeratedValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="EnumerationValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="EnumerationReference" type="ifc:IfcPropertyEnumeration" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyEnumeration" type="ifc:IfcPropertyEnumeration" substitutionGroup="ifc:IfcPropertyAbstraction" nillable="true"/>
 <xs:complexType name="IfcPropertyEnumeration">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyAbstraction">
    <xs:sequence>
     <xs:element name="EnumerationValues">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyListValue" type="ifc:IfcPropertyListValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyListValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="ListValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyReferenceValue" type="ifc:IfcPropertyReferenceValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyReferenceValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="PropertyReference" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcObjectReferenceSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="UsageName" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertySet" type="ifc:IfcPropertySet" substitutionGroup="ifc:IfcPropertySetDefinition" nillable="true"/>
 <xs:complexType name="IfcPropertySet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertySetDefinition">
    <xs:sequence>
     <xs:element name="HasProperties">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProperty" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProperty"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertySetDefinition" type="ifc:IfcPropertySetDefinition" abstract="true" substitutionGroup="ifc:IfcPropertyDefinition" nillable="true"/>
 <xs:complexType name="IfcPropertySetDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyDefinition"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertySetTemplate" type="ifc:IfcPropertySetTemplate" substitutionGroup="ifc:IfcPropertyTemplateDefinition" nillable="true"/>
 <xs:complexType name="IfcPropertySetTemplate">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyTemplateDefinition">
    <xs:sequence>
     <xs:element name="HasPropertyTemplates">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPropertyTemplate" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPropertyTemplate"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TemplateType" type="ifc:IfcPropertySetTemplateTypeEnum" use="optional"/>
    <xs:attribute name="ApplicableEntity" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertySingleValue" type="ifc:IfcPropertySingleValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertySingleValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="NominalValue" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyTableValue" type="ifc:IfcPropertyTableValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyTableValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty">
    <xs:sequence>
     <xs:element name="DefiningValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="DefinedValues" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="DefiningUnit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="DefinedUnit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Expression" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="CurveInterpolation" type="ifc:IfcCurveInterpolationEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyTemplate" type="ifc:IfcPropertyTemplate" abstract="true" substitutionGroup="ifc:IfcPropertyTemplateDefinition" nillable="true"/>
 <xs:complexType name="IfcPropertyTemplate" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyTemplateDefinition"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPropertyTemplateDefinition" type="ifc:IfcPropertyTemplateDefinition" abstract="true" substitutionGroup="ifc:IfcPropertyDefinition" nillable="true"/>
 <xs:complexType name="IfcPropertyTemplateDefinition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyDefinition"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProtectiveDevice" type="ifc:IfcProtectiveDevice" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcProtectiveDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcProtectiveDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProtectiveDeviceTrippingUnit" type="ifc:IfcProtectiveDeviceTrippingUnit" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcProtectiveDeviceTrippingUnit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcProtectiveDeviceTrippingUnitTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProtectiveDeviceTrippingUnitType" type="ifc:IfcProtectiveDeviceTrippingUnitType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcProtectiveDeviceTrippingUnitType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcProtectiveDeviceTrippingUnitTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProtectiveDeviceType" type="ifc:IfcProtectiveDeviceType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcProtectiveDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcProtectiveDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcProxy" type="ifc:IfcProxy" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcProxy">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct">
    <xs:attribute name="ProxyType" type="ifc:IfcObjectTypeEnum" use="optional"/>
    <xs:attribute name="Tag" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPump" type="ifc:IfcPump" substitutionGroup="ifc:IfcFlowMovingDevice" nillable="true"/>
 <xs:complexType name="IfcPump">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcPumpTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcPumpType" type="ifc:IfcPumpType" substitutionGroup="ifc:IfcFlowMovingDeviceType" nillable="true"/>
 <xs:complexType name="IfcPumpType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowMovingDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcPumpTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityArea" type="ifc:IfcQuantityArea" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityArea">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="AreaValue" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityCount" type="ifc:IfcQuantityCount" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityCount">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="CountValue" type="ifc:IfcCountMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityLength" type="ifc:IfcQuantityLength" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityLength">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="LengthValue" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantitySet" type="ifc:IfcQuantitySet" abstract="true" substitutionGroup="ifc:IfcPropertySetDefinition" nillable="true"/>
 <xs:complexType name="IfcQuantitySet" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertySetDefinition"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityTime" type="ifc:IfcQuantityTime" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityTime">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="TimeValue" type="ifc:IfcTimeMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityVolume" type="ifc:IfcQuantityVolume" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityVolume">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="VolumeValue" type="ifc:IfcVolumeMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcQuantityWeight" type="ifc:IfcQuantityWeight" substitutionGroup="ifc:IfcPhysicalSimpleQuantity" nillable="true"/>
 <xs:complexType name="IfcQuantityWeight">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPhysicalSimpleQuantity">
    <xs:attribute name="WeightValue" type="ifc:IfcMassMeasure" use="optional"/>
    <xs:attribute name="Formula" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRailing" type="ifc:IfcRailing" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcRailing">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcRailingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRailingType" type="ifc:IfcRailingType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcRailingType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcRailingTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRamp" type="ifc:IfcRamp" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcRamp">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcRampTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRampFlight" type="ifc:IfcRampFlight" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcRampFlight">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcRampFlightTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRampFlightType" type="ifc:IfcRampFlightType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcRampFlightType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcRampFlightTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRampType" type="ifc:IfcRampType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcRampType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcRampTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRationalBSplineCurveWithKnots" type="ifc:IfcRationalBSplineCurveWithKnots" substitutionGroup="ifc:IfcBSplineCurveWithKnots" nillable="true"/>
 <xs:complexType name="IfcRationalBSplineCurveWithKnots">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBSplineCurveWithKnots">
    <xs:attribute name="WeightsData" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:double"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRationalBSplineSurfaceWithKnots" type="ifc:IfcRationalBSplineSurfaceWithKnots" substitutionGroup="ifc:IfcBSplineSurfaceWithKnots" nillable="true"/>
 <xs:complexType name="IfcRationalBSplineSurfaceWithKnots">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBSplineSurfaceWithKnots">
    <xs:sequence>
     <xs:element name="WeightsData">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:double-wrapper" minOccurs="4" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:double-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRectangleHollowProfileDef" type="ifc:IfcRectangleHollowProfileDef" substitutionGroup="ifc:IfcRectangleProfileDef" nillable="true"/>
 <xs:complexType name="IfcRectangleHollowProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRectangleProfileDef">
    <xs:attribute name="WallThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="InnerFilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="OuterFilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRectangleProfileDef" type="ifc:IfcRectangleProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcRectangleProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="XDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="YDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRectangularPyramid" type="ifc:IfcRectangularPyramid" substitutionGroup="ifc:IfcCsgPrimitive3D" nillable="true"/>
 <xs:complexType name="IfcRectangularPyramid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCsgPrimitive3D">
    <xs:attribute name="XLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="YLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Height" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRectangularTrimmedSurface" type="ifc:IfcRectangularTrimmedSurface" substitutionGroup="ifc:IfcBoundedSurface" nillable="true"/>
 <xs:complexType name="IfcRectangularTrimmedSurface">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedSurface">
    <xs:sequence>
     <xs:element name="BasisSurface" type="ifc:IfcSurface" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="U1" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="V1" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="U2" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="V2" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="Usense" type="xs:boolean" use="optional"/>
    <xs:attribute name="Vsense" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRecurrencePattern" type="ifc:IfcRecurrencePattern" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRecurrencePattern">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="TimePeriods" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTimePeriod" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTimePeriod"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="RecurrenceType" type="ifc:IfcRecurrenceTypeEnum" use="optional"/>
    <xs:attribute name="DayComponent" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcDayInMonthNumber"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="WeekdayComponent" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcDayInWeekNumber"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="MonthComponent" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcMonthInYearNumber"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Position" type="ifc:IfcInteger" use="optional"/>
    <xs:attribute name="Interval" type="ifc:IfcInteger" use="optional"/>
    <xs:attribute name="Occurrences" type="ifc:IfcInteger" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReference" type="ifc:IfcReference" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcReference">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="InnerReference" type="ifc:IfcReference" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="TypeIdentifier" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="AttributeIdentifier" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="InstanceName" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ListPositions" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRegularTimeSeries" type="ifc:IfcRegularTimeSeries" substitutionGroup="ifc:IfcTimeSeries" nillable="true"/>
 <xs:complexType name="IfcRegularTimeSeries">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTimeSeries">
    <xs:sequence>
     <xs:element name="Values">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTimeSeriesValue" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTimeSeriesValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TimeStep" type="ifc:IfcTimeMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcementBarProperties" type="ifc:IfcReinforcementBarProperties" substitutionGroup="ifc:IfcPreDefinedProperties" nillable="true"/>
 <xs:complexType name="IfcReinforcementBarProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedProperties">
    <xs:attribute name="TotalCrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="SteelGrade" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="BarSurface" type="ifc:IfcReinforcingBarSurfaceEnum" use="optional"/>
    <xs:attribute name="EffectiveDepth" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="NominalBarDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BarCount" type="ifc:IfcCountMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcementDefinitionProperties" type="ifc:IfcReinforcementDefinitionProperties" substitutionGroup="ifc:IfcPreDefinedPropertySet" nillable="true"/>
 <xs:complexType name="IfcReinforcementDefinitionProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedPropertySet">
    <xs:sequence>
     <xs:element name="ReinforcementSectionDefinitions">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcSectionReinforcementProperties" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcSectionReinforcementProperties"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="DefinitionType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingBar" type="ifc:IfcReinforcingBar" substitutionGroup="ifc:IfcReinforcingElement" nillable="true"/>
 <xs:complexType name="IfcReinforcingBar">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElement">
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="CrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="BarLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcReinforcingBarTypeEnum" use="optional"/>
    <xs:attribute name="BarSurface" type="ifc:IfcReinforcingBarSurfaceEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingBarType" type="ifc:IfcReinforcingBarType" substitutionGroup="ifc:IfcReinforcingElementType" nillable="true"/>
 <xs:complexType name="IfcReinforcingBarType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElementType">
    <xs:sequence>
     <xs:element name="BendingParameters" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcBendingParameterSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcBendingParameterSelect"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcReinforcingBarTypeEnum" use="optional"/>
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="CrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="BarLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BarSurface" type="ifc:IfcReinforcingBarSurfaceEnum" use="optional"/>
    <xs:attribute name="BendingShapeCode" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingElement" type="ifc:IfcReinforcingElement" abstract="true" substitutionGroup="ifc:IfcElementComponent" nillable="true"/>
 <xs:complexType name="IfcReinforcingElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponent">
    <xs:attribute name="SteelGrade" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingElementType" type="ifc:IfcReinforcingElementType" abstract="true" substitutionGroup="ifc:IfcElementComponentType" nillable="true"/>
 <xs:complexType name="IfcReinforcingElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementComponentType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingMesh" type="ifc:IfcReinforcingMesh" substitutionGroup="ifc:IfcReinforcingElement" nillable="true"/>
 <xs:complexType name="IfcReinforcingMesh">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElement">
    <xs:attribute name="MeshLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="MeshWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarNominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TransverseBarNominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarCrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="TransverseBarCrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarSpacing" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TransverseBarSpacing" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcReinforcingMeshTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReinforcingMeshType" type="ifc:IfcReinforcingMeshType" substitutionGroup="ifc:IfcReinforcingElementType" nillable="true"/>
 <xs:complexType name="IfcReinforcingMeshType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElementType">
    <xs:sequence>
     <xs:element name="BendingParameters" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcBendingParameterSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcBendingParameterSelect"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcReinforcingMeshTypeEnum" use="optional"/>
    <xs:attribute name="MeshLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="MeshWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarNominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TransverseBarNominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarCrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="TransverseBarCrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="LongitudinalBarSpacing" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TransverseBarSpacing" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BendingShapeCode" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAggregates" type="ifc:IfcRelAggregates" substitutionGroup="ifc:IfcRelDecomposes" nillable="true"/>
 <xs:complexType name="IfcRelAggregates">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDecomposes">
    <xs:sequence>
     <xs:element name="RelatingObject" type="ifc:IfcObjectDefinition" nillable="true"/>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcObjectDefinition" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcObjectDefinition"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssigns" type="ifc:IfcRelAssigns" abstract="true" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelAssigns" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship">
    <xs:sequence>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcObjectDefinition" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcObjectDefinition"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="RelatedObjectsType" type="ifc:IfcObjectTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToActor" type="ifc:IfcRelAssignsToActor" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToActor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingActor" type="ifc:IfcActor" nillable="true"/>
     <xs:element name="ActingRole" type="ifc:IfcActorRole" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToControl" type="ifc:IfcRelAssignsToControl" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToControl">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingControl" type="ifc:IfcControl" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToGroup" type="ifc:IfcRelAssignsToGroup" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToGroup">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingGroup" type="ifc:IfcGroup" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToGroupByFactor" type="ifc:IfcRelAssignsToGroupByFactor" substitutionGroup="ifc:IfcRelAssignsToGroup" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToGroupByFactor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssignsToGroup">
    <xs:attribute name="Factor" type="ifc:IfcRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToProcess" type="ifc:IfcRelAssignsToProcess" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToProcess">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingProcess">
      <xs:complexType>
       <xs:group ref="ifc:IfcProcessSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="QuantityInProcess" type="ifc:IfcMeasureWithUnit" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToProduct" type="ifc:IfcRelAssignsToProduct" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToProduct">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingProduct">
      <xs:complexType>
       <xs:group ref="ifc:IfcProductSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssignsToResource" type="ifc:IfcRelAssignsToResource" substitutionGroup="ifc:IfcRelAssigns" nillable="true"/>
 <xs:complexType name="IfcRelAssignsToResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssigns">
    <xs:sequence>
     <xs:element name="RelatingResource">
      <xs:complexType>
       <xs:group ref="ifc:IfcResourceSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociates" type="ifc:IfcRelAssociates" abstract="true" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelAssociates" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship">
    <xs:sequence>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:group ref="ifc:IfcDefinitionSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcDefinitionSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesApproval" type="ifc:IfcRelAssociatesApproval" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesApproval">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingApproval" type="ifc:IfcApproval" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesClassification" type="ifc:IfcRelAssociatesClassification" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesClassification">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingClassification">
      <xs:complexType>
       <xs:group ref="ifc:IfcClassificationSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesConstraint" type="ifc:IfcRelAssociatesConstraint" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesConstraint">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingConstraint" type="ifc:IfcConstraint" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Intent" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesDocument" type="ifc:IfcRelAssociatesDocument" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesDocument">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingDocument">
      <xs:complexType>
       <xs:group ref="ifc:IfcDocumentSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesLibrary" type="ifc:IfcRelAssociatesLibrary" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesLibrary">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingLibrary">
      <xs:complexType>
       <xs:group ref="ifc:IfcLibrarySelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelAssociatesMaterial" type="ifc:IfcRelAssociatesMaterial" substitutionGroup="ifc:IfcRelAssociates" nillable="true"/>
 <xs:complexType name="IfcRelAssociatesMaterial">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelAssociates">
    <xs:sequence>
     <xs:element name="RelatingMaterial">
      <xs:complexType>
       <xs:group ref="ifc:IfcMaterialSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnects" type="ifc:IfcRelConnects" abstract="true" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelConnects" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsElements" type="ifc:IfcRelConnectsElements" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelConnectsElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="ConnectionGeometry" type="ifc:IfcConnectionGeometry" nillable="true" minOccurs="0"/>
     <xs:element name="RelatingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="RelatedElement" type="ifc:IfcElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsPathElements" type="ifc:IfcRelConnectsPathElements" substitutionGroup="ifc:IfcRelConnectsElements" nillable="true"/>
 <xs:complexType name="IfcRelConnectsPathElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnectsElements">
    <xs:attribute name="RelatingPriorities" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:double"/>
       </xs:simpleType>
       <xs:minLength value="0"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="RelatedPriorities" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:double"/>
       </xs:simpleType>
       <xs:minLength value="0"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="RelatedConnectionType" type="ifc:IfcConnectionTypeEnum" use="optional"/>
    <xs:attribute name="RelatingConnectionType" type="ifc:IfcConnectionTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsPortToElement" type="ifc:IfcRelConnectsPortToElement" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelConnectsPortToElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingPort" type="ifc:IfcPort" nillable="true"/>
     <xs:element name="RelatedElement" type="ifc:IfcDistributionElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsPorts" type="ifc:IfcRelConnectsPorts" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelConnectsPorts">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingPort" type="ifc:IfcPort" nillable="true"/>
     <xs:element name="RelatedPort" type="ifc:IfcPort" nillable="true"/>
     <xs:element name="RealizingElement" type="ifc:IfcElement" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsStructuralActivity" type="ifc:IfcRelConnectsStructuralActivity" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelConnectsStructuralActivity">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingElement">
      <xs:complexType>
       <xs:group ref="ifc:IfcStructuralActivityAssignmentSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatedStructuralActivity" type="ifc:IfcStructuralActivity" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsStructuralMember" type="ifc:IfcRelConnectsStructuralMember" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelConnectsStructuralMember">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingStructuralMember" type="ifc:IfcStructuralMember" nillable="true"/>
     <xs:element name="RelatedStructuralConnection" type="ifc:IfcStructuralConnection" nillable="true"/>
     <xs:element name="AppliedCondition" type="ifc:IfcBoundaryCondition" nillable="true" minOccurs="0"/>
     <xs:element name="AdditionalConditions" type="ifc:IfcStructuralConnectionCondition" nillable="true" minOccurs="0"/>
     <xs:element name="ConditionCoordinateSystem" type="ifc:IfcAxis2Placement3D" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="SupportedLength" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsWithEccentricity" type="ifc:IfcRelConnectsWithEccentricity" substitutionGroup="ifc:IfcRelConnectsStructuralMember" nillable="true"/>
 <xs:complexType name="IfcRelConnectsWithEccentricity">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnectsStructuralMember">
    <xs:sequence>
     <xs:element name="ConnectionConstraint" type="ifc:IfcConnectionGeometry" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelConnectsWithRealizingElements" type="ifc:IfcRelConnectsWithRealizingElements" substitutionGroup="ifc:IfcRelConnectsElements" nillable="true"/>
 <xs:complexType name="IfcRelConnectsWithRealizingElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnectsElements">
    <xs:sequence>
     <xs:element name="RealizingElements">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcElement" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcElement"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ConnectionType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelContainedInSpatialStructure" type="ifc:IfcRelContainedInSpatialStructure" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelContainedInSpatialStructure">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatedElements">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProduct" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProduct"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingStructure" type="ifc:IfcSpatialElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelCoversBldgElements" type="ifc:IfcRelCoversBldgElements" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelCoversBldgElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingBuildingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="RelatedCoverings">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCovering" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCovering"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelCoversSpaces" type="ifc:IfcRelCoversSpaces" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelCoversSpaces">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingSpace" type="ifc:IfcSpace" nillable="true"/>
     <xs:element name="RelatedCoverings">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCovering" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCovering"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDeclares" type="ifc:IfcRelDeclares" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelDeclares">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship">
    <xs:sequence>
     <xs:element name="RelatingContext" type="ifc:IfcContext" nillable="true"/>
     <xs:element name="RelatedDefinitions">
      <xs:complexType>
       <xs:group ref="ifc:IfcDefinitionSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcDefinitionSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDecomposes" type="ifc:IfcRelDecomposes" abstract="true" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelDecomposes" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDefines" type="ifc:IfcRelDefines" abstract="true" substitutionGroup="ifc:IfcRelationship" nillable="true"/>
 <xs:complexType name="IfcRelDefines" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelationship"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDefinesByObject" type="ifc:IfcRelDefinesByObject" substitutionGroup="ifc:IfcRelDefines" nillable="true"/>
 <xs:complexType name="IfcRelDefinesByObject">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDefines">
    <xs:sequence>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcObject" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcObject"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingObject" type="ifc:IfcObject" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDefinesByProperties" type="ifc:IfcRelDefinesByProperties" substitutionGroup="ifc:IfcRelDefines" nillable="true"/>
 <xs:complexType name="IfcRelDefinesByProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDefines">
    <xs:sequence>
     <xs:element name="RelatedObjects" type="ifc:IfcObjectDefinition" nillable="true" maxOccurs="1"/>
     <xs:element name="RelatingPropertyDefinition">
      <xs:complexType>
       <xs:group ref="ifc:IfcPropertySetDefinitionSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDefinesByTemplate" type="ifc:IfcRelDefinesByTemplate" substitutionGroup="ifc:IfcRelDefines" nillable="true"/>
 <xs:complexType name="IfcRelDefinesByTemplate">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDefines">
    <xs:sequence>
     <xs:element name="RelatedPropertySets">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcPropertySetDefinition" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcPropertySetDefinition"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingTemplate" type="ifc:IfcPropertySetTemplate" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelDefinesByType" type="ifc:IfcRelDefinesByType" substitutionGroup="ifc:IfcRelDefines" nillable="true"/>
 <xs:complexType name="IfcRelDefinesByType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDefines">
    <xs:sequence>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcObject" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcObject"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingType" type="ifc:IfcTypeObject" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelFillsElement" type="ifc:IfcRelFillsElement" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelFillsElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingOpeningElement" type="ifc:IfcOpeningElement" nillable="true"/>
     <xs:element name="RelatedBuildingElement" type="ifc:IfcElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelFlowControlElements" type="ifc:IfcRelFlowControlElements" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelFlowControlElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatedControlElements">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcDistributionControlElement" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcDistributionControlElement"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingFlowElement" type="ifc:IfcDistributionFlowElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelInterferesElements" type="ifc:IfcRelInterferesElements" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelInterferesElements">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="RelatedElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="InterferenceGeometry" type="ifc:IfcConnectionGeometry" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="InterferenceType" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="ImpliedOrder" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelNests" type="ifc:IfcRelNests" substitutionGroup="ifc:IfcRelDecomposes" nillable="true"/>
 <xs:complexType name="IfcRelNests">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDecomposes">
    <xs:sequence>
     <xs:element name="RelatingObject" type="ifc:IfcObjectDefinition" nillable="true"/>
     <xs:element name="RelatedObjects">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcObjectDefinition" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcObjectDefinition"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelProjectsElement" type="ifc:IfcRelProjectsElement" substitutionGroup="ifc:IfcRelDecomposes" nillable="true"/>
 <xs:complexType name="IfcRelProjectsElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDecomposes">
    <xs:sequence>
     <xs:element name="RelatingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="RelatedFeatureElement" type="ifc:IfcFeatureElementAddition" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelReferencedInSpatialStructure" type="ifc:IfcRelReferencedInSpatialStructure" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelReferencedInSpatialStructure">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatedElements">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProduct" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProduct"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingStructure" type="ifc:IfcSpatialElement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelSequence" type="ifc:IfcRelSequence" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelSequence">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingProcess" type="ifc:IfcProcess" nillable="true"/>
     <xs:element name="RelatedProcess" type="ifc:IfcProcess" nillable="true"/>
     <xs:element name="TimeLag" type="ifc:IfcLagTime" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="SequenceType" type="ifc:IfcSequenceEnum" use="optional"/>
    <xs:attribute name="UserDefinedSequenceType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelServicesBuildings" type="ifc:IfcRelServicesBuildings" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelServicesBuildings">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingSystem" type="ifc:IfcSystem" nillable="true"/>
     <xs:element name="RelatedBuildings">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcSpatialElement" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcSpatialElement"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelSpaceBoundary" type="ifc:IfcRelSpaceBoundary" substitutionGroup="ifc:IfcRelConnects" nillable="true"/>
 <xs:complexType name="IfcRelSpaceBoundary">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelConnects">
    <xs:sequence>
     <xs:element name="RelatingSpace">
      <xs:complexType>
       <xs:group ref="ifc:IfcSpaceBoundarySelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatedBuildingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="ConnectionGeometry" type="ifc:IfcConnectionGeometry" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PhysicalOrVirtualBoundary" type="ifc:IfcPhysicalOrVirtualEnum" use="optional"/>
    <xs:attribute name="InternalOrExternalBoundary" type="ifc:IfcInternalOrExternalEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelSpaceBoundary1stLevel" type="ifc:IfcRelSpaceBoundary1stLevel" substitutionGroup="ifc:IfcRelSpaceBoundary" nillable="true"/>
 <xs:complexType name="IfcRelSpaceBoundary1stLevel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelSpaceBoundary">
    <xs:sequence>
     <xs:element name="ParentBoundary" type="ifc:IfcRelSpaceBoundary1stLevel" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelSpaceBoundary2ndLevel" type="ifc:IfcRelSpaceBoundary2ndLevel" substitutionGroup="ifc:IfcRelSpaceBoundary1stLevel" nillable="true"/>
 <xs:complexType name="IfcRelSpaceBoundary2ndLevel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelSpaceBoundary1stLevel">
    <xs:sequence>
     <xs:element name="CorrespondingBoundary" type="ifc:IfcRelSpaceBoundary2ndLevel" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelVoidsElement" type="ifc:IfcRelVoidsElement" substitutionGroup="ifc:IfcRelDecomposes" nillable="true"/>
 <xs:complexType name="IfcRelVoidsElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRelDecomposes">
    <xs:sequence>
     <xs:element name="RelatingBuildingElement" type="ifc:IfcElement" nillable="true"/>
     <xs:element name="RelatedOpeningElement" type="ifc:IfcFeatureElementSubtraction" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRelationship" type="ifc:IfcRelationship" abstract="true" substitutionGroup="ifc:IfcRoot" nillable="true"/>
 <xs:complexType name="IfcRelationship" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRoot"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcReparametrisedCompositeCurveSegment" type="ifc:IfcReparametrisedCompositeCurveSegment" substitutionGroup="ifc:IfcCompositeCurveSegment" nillable="true"/>
 <xs:complexType name="IfcReparametrisedCompositeCurveSegment">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCompositeCurveSegment">
    <xs:attribute name="ParamLength" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRepresentation" type="ifc:IfcRepresentation" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRepresentation" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ContextOfItems" type="ifc:IfcRepresentationContext" nillable="true"/>
     <xs:element name="Items">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcRepresentationItem" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcRepresentationItem"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="RepresentationIdentifier" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="RepresentationType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRepresentationContext" type="ifc:IfcRepresentationContext" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRepresentationContext" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="ContextIdentifier" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ContextType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRepresentationItem" type="ifc:IfcRepresentationItem" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRepresentationItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="StyledByItem" type="ifc:IfcStyledItem" nillable="true" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRepresentationMap" type="ifc:IfcRepresentationMap" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRepresentationMap">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="MappingOrigin">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="MappedRepresentation" type="ifc:IfcRepresentation" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcResource" type="ifc:IfcResource" abstract="true" substitutionGroup="ifc:IfcObject" nillable="true"/>
 <xs:complexType name="IfcResource" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObject">
    <xs:attribute name="Identification" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcResourceApprovalRelationship" type="ifc:IfcResourceApprovalRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcResourceApprovalRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatedResourceObjects">
      <xs:complexType>
       <xs:group ref="ifc:IfcResourceObjectSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcResourceObjectSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="RelatingApproval" type="ifc:IfcApproval" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcResourceConstraintRelationship" type="ifc:IfcResourceConstraintRelationship" substitutionGroup="ifc:IfcResourceLevelRelationship" nillable="true"/>
 <xs:complexType name="IfcResourceConstraintRelationship">
  <xs:complexContent>
   <xs:extension base="ifc:IfcResourceLevelRelationship">
    <xs:sequence>
     <xs:element name="RelatingConstraint" type="ifc:IfcConstraint" nillable="true"/>
     <xs:element name="RelatedResourceObjects">
      <xs:complexType>
       <xs:group ref="ifc:IfcResourceObjectSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcResourceObjectSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcResourceLevelRelationship" type="ifc:IfcResourceLevelRelationship" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcResourceLevelRelationship" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcResourceTime" type="ifc:IfcResourceTime" substitutionGroup="ifc:IfcSchedulingTime" nillable="true"/>
 <xs:complexType name="IfcResourceTime">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSchedulingTime">
    <xs:attribute name="ScheduleWork" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="ScheduleUsage" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
    <xs:attribute name="ScheduleStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ScheduleFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ScheduleContour" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="LevelingDelay" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="IsOverAllocated" type="xs:boolean" use="optional"/>
    <xs:attribute name="StatusTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ActualWork" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="ActualUsage" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
    <xs:attribute name="ActualStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ActualFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="RemainingWork" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="RemainingUsage" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
    <xs:attribute name="Completion" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRevolvedAreaSolid" type="ifc:IfcRevolvedAreaSolid" substitutionGroup="ifc:IfcSweptAreaSolid" nillable="true"/>
 <xs:complexType name="IfcRevolvedAreaSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptAreaSolid">
    <xs:sequence>
     <xs:element name="Axis" type="ifc:IfcAxis1Placement" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Angle" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRevolvedAreaSolidTapered" type="ifc:IfcRevolvedAreaSolidTapered" substitutionGroup="ifc:IfcRevolvedAreaSolid" nillable="true"/>
 <xs:complexType name="IfcRevolvedAreaSolidTapered">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRevolvedAreaSolid">
    <xs:sequence>
     <xs:element name="EndSweptArea" type="ifc:IfcProfileDef" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRightCircularCone" type="ifc:IfcRightCircularCone" substitutionGroup="ifc:IfcCsgPrimitive3D" nillable="true"/>
 <xs:complexType name="IfcRightCircularCone">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCsgPrimitive3D">
    <xs:attribute name="Height" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="BottomRadius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRightCircularCylinder" type="ifc:IfcRightCircularCylinder" substitutionGroup="ifc:IfcCsgPrimitive3D" nillable="true"/>
 <xs:complexType name="IfcRightCircularCylinder">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCsgPrimitive3D">
    <xs:attribute name="Height" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRoof" type="ifc:IfcRoof" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcRoof">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcRoofTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRoofType" type="ifc:IfcRoofType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcRoofType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcRoofTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRoot" type="ifc:IfcRoot" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcRoot" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="OwnerHistory" type="ifc:IfcOwnerHistory" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="GlobalId" type="ifc:IfcGloballyUniqueId" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcRoundedRectangleProfileDef" type="ifc:IfcRoundedRectangleProfileDef" substitutionGroup="ifc:IfcRectangleProfileDef" nillable="true"/>
 <xs:complexType name="IfcRoundedRectangleProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRectangleProfileDef">
    <xs:attribute name="RoundingRadius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="IfcSIUnit-temp" abstract="true">
  <xs:complexContent>
   <xs:restriction base="ifc:IfcNamedUnit">
    <xs:sequence/>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSIUnit" type="ifc:IfcSIUnit" substitutionGroup="ifc:IfcNamedUnit" nillable="true"/>
 <xs:complexType name="IfcSIUnit">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSIUnit-temp">
    <xs:attribute name="Prefix" type="ifc:IfcSIPrefix" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcSIUnitName" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSanitaryTerminal" type="ifc:IfcSanitaryTerminal" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcSanitaryTerminal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcSanitaryTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSanitaryTerminalType" type="ifc:IfcSanitaryTerminalType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcSanitaryTerminalType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSanitaryTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSchedulingTime" type="ifc:IfcSchedulingTime" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcSchedulingTime" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="DataOrigin" type="ifc:IfcDataOriginEnum" use="optional"/>
    <xs:attribute name="UserDefinedDataOrigin" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSectionProperties" type="ifc:IfcSectionProperties" substitutionGroup="ifc:IfcPreDefinedProperties" nillable="true"/>
 <xs:complexType name="IfcSectionProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedProperties">
    <xs:sequence>
     <xs:element name="StartProfile" type="ifc:IfcProfileDef" nillable="true"/>
     <xs:element name="EndProfile" type="ifc:IfcProfileDef" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="SectionType" type="ifc:IfcSectionTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSectionReinforcementProperties" type="ifc:IfcSectionReinforcementProperties" substitutionGroup="ifc:IfcPreDefinedProperties" nillable="true"/>
 <xs:complexType name="IfcSectionReinforcementProperties">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedProperties">
    <xs:sequence>
     <xs:element name="SectionDefinition" type="ifc:IfcSectionProperties" nillable="true"/>
     <xs:element name="CrossSectionReinforcementDefinitions">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcReinforcementBarProperties" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcReinforcementBarProperties"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="LongitudinalStartPosition" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="LongitudinalEndPosition" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="TransversePosition" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="ReinforcementRole" type="ifc:IfcReinforcingBarRoleEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSectionedSpine" type="ifc:IfcSectionedSpine" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcSectionedSpine">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="SpineCurve" type="ifc:IfcCompositeCurve" nillable="true"/>
     <xs:element name="CrossSections">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcProfileDef" minOccurs="2" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcProfileDef"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="CrossSectionPositions">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcAxis2Placement3D" minOccurs="2" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAxis2Placement3D"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSensor" type="ifc:IfcSensor" substitutionGroup="ifc:IfcDistributionControlElement" nillable="true"/>
 <xs:complexType name="IfcSensor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSensorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSensorType" type="ifc:IfcSensorType" substitutionGroup="ifc:IfcDistributionControlElementType" nillable="true"/>
 <xs:complexType name="IfcSensorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcDistributionControlElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSensorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShadingDevice" type="ifc:IfcShadingDevice" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcShadingDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcShadingDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShadingDeviceType" type="ifc:IfcShadingDeviceType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcShadingDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcShadingDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShapeAspect" type="ifc:IfcShapeAspect" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcShapeAspect">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ShapeRepresentations">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcShapeModel" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcShapeModel"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="ProductDefinitional" type="ifc:logical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShapeModel" type="ifc:IfcShapeModel" abstract="true" substitutionGroup="ifc:IfcRepresentation" nillable="true"/>
 <xs:complexType name="IfcShapeModel" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentation"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShapeRepresentation" type="ifc:IfcShapeRepresentation" substitutionGroup="ifc:IfcShapeModel" nillable="true"/>
 <xs:complexType name="IfcShapeRepresentation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcShapeModel"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcShellBasedSurfaceModel" type="ifc:IfcShellBasedSurfaceModel" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcShellBasedSurfaceModel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="SbsmBoundary">
      <xs:complexType>
       <xs:group ref="ifc:IfcShell" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcShell"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSimpleProperty" type="ifc:IfcSimpleProperty" abstract="true" substitutionGroup="ifc:IfcProperty" nillable="true"/>
 <xs:complexType name="IfcSimpleProperty" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProperty"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSimplePropertyTemplate" type="ifc:IfcSimplePropertyTemplate" substitutionGroup="ifc:IfcPropertyTemplate" nillable="true"/>
 <xs:complexType name="IfcSimplePropertyTemplate">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPropertyTemplate">
    <xs:sequence>
     <xs:element name="Enumerators" type="ifc:IfcPropertyEnumeration" nillable="true" minOccurs="0"/>
     <xs:element name="PrimaryUnit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SecondaryUnit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TemplateType" type="ifc:IfcSimplePropertyTemplateTypeEnum" use="optional"/>
    <xs:attribute name="PrimaryMeasureType" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="SecondaryMeasureType" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Expression" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="AccessState" type="ifc:IfcStateEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSite" type="ifc:IfcSite" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcSite">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement">
    <xs:sequence>
     <xs:element name="SiteAddress" type="ifc:IfcPostalAddress" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="RefLatitude" type="ifc:List-IfcCompoundPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="RefLongitude" type="ifc:List-IfcCompoundPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="RefElevation" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="LandTitleNumber" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSlab" type="ifc:IfcSlab" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcSlab">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSlabTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSlabElementedCase" type="ifc:IfcSlabElementedCase" substitutionGroup="ifc:IfcSlab" nillable="true"/>
 <xs:complexType name="IfcSlabElementedCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSlab"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSlabStandardCase" type="ifc:IfcSlabStandardCase" substitutionGroup="ifc:IfcSlab" nillable="true"/>
 <xs:complexType name="IfcSlabStandardCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSlab"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSlabType" type="ifc:IfcSlabType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcSlabType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSlabTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSlippageConnectionCondition" type="ifc:IfcSlippageConnectionCondition" substitutionGroup="ifc:IfcStructuralConnectionCondition" nillable="true"/>
 <xs:complexType name="IfcSlippageConnectionCondition">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralConnectionCondition">
    <xs:attribute name="SlippageX" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="SlippageY" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="SlippageZ" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSolarDevice" type="ifc:IfcSolarDevice" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcSolarDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcSolarDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSolarDeviceType" type="ifc:IfcSolarDeviceType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcSolarDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSolarDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSolidModel" type="ifc:IfcSolidModel" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcSolidModel" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpace" type="ifc:IfcSpace" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcSpace">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpaceTypeEnum" use="optional"/>
    <xs:attribute name="ElevationWithFlooring" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpaceHeater" type="ifc:IfcSpaceHeater" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcSpaceHeater">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpaceHeaterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpaceHeaterType" type="ifc:IfcSpaceHeaterType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcSpaceHeaterType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpaceHeaterTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpaceType" type="ifc:IfcSpaceType" substitutionGroup="ifc:IfcSpatialStructureElementType" nillable="true"/>
 <xs:complexType name="IfcSpaceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpaceTypeEnum" use="optional"/>
    <xs:attribute name="LongName" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialElement" type="ifc:IfcSpatialElement" abstract="true" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcSpatialElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct">
    <xs:attribute name="LongName" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialElementType" type="ifc:IfcSpatialElementType" abstract="true" substitutionGroup="ifc:IfcTypeProduct" nillable="true"/>
 <xs:complexType name="IfcSpatialElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProduct">
    <xs:attribute name="ElementType" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialStructureElement" type="ifc:IfcSpatialStructureElement" abstract="true" substitutionGroup="ifc:IfcSpatialElement" nillable="true"/>
 <xs:complexType name="IfcSpatialStructureElement" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialElement">
    <xs:attribute name="CompositionType" type="ifc:IfcElementCompositionEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialStructureElementType" type="ifc:IfcSpatialStructureElementType" abstract="true" substitutionGroup="ifc:IfcSpatialElementType" nillable="true"/>
 <xs:complexType name="IfcSpatialStructureElementType" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialElementType"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialZone" type="ifc:IfcSpatialZone" substitutionGroup="ifc:IfcSpatialElement" nillable="true"/>
 <xs:complexType name="IfcSpatialZone">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpatialZoneTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSpatialZoneType" type="ifc:IfcSpatialZoneType" substitutionGroup="ifc:IfcSpatialElementType" nillable="true"/>
 <xs:complexType name="IfcSpatialZoneType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSpatialZoneTypeEnum" use="optional"/>
    <xs:attribute name="LongName" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSphere" type="ifc:IfcSphere" substitutionGroup="ifc:IfcCsgPrimitive3D" nillable="true"/>
 <xs:complexType name="IfcSphere">
  <xs:complexContent>
   <xs:extension base="ifc:IfcCsgPrimitive3D">
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStackTerminal" type="ifc:IfcStackTerminal" substitutionGroup="ifc:IfcFlowTerminal" nillable="true"/>
 <xs:complexType name="IfcStackTerminal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminal">
    <xs:attribute name="PredefinedType" type="ifc:IfcStackTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStackTerminalType" type="ifc:IfcStackTerminalType" substitutionGroup="ifc:IfcFlowTerminalType" nillable="true"/>
 <xs:complexType name="IfcStackTerminalType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowTerminalType">
    <xs:attribute name="PredefinedType" type="ifc:IfcStackTerminalTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStair" type="ifc:IfcStair" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcStair">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcStairTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStairFlight" type="ifc:IfcStairFlight" substitutionGroup="ifc:IfcBuildingElement" nillable="true"/>
 <xs:complexType name="IfcStairFlight">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElement">
    <xs:attribute name="NumberOfRiser" type="xs:long" use="optional"/>
    <xs:attribute name="NumberOfTreads" type="xs:long" use="optional"/>
    <xs:attribute name="RiserHeight" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TreadLength" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcStairFlightTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStairFlightType" type="ifc:IfcStairFlightType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcStairFlightType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcStairFlightTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStairType" type="ifc:IfcStairType" substitutionGroup="ifc:IfcBuildingElementType" nillable="true"/>
 <xs:complexType name="IfcStairType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBuildingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcStairTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralAction" type="ifc:IfcStructuralAction" abstract="true" substitutionGroup="ifc:IfcStructuralActivity" nillable="true"/>
 <xs:complexType name="IfcStructuralAction" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralActivity">
    <xs:attribute name="DestabilizingLoad" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralActivity" type="ifc:IfcStructuralActivity" abstract="true" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcStructuralActivity" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct">
    <xs:sequence>
     <xs:element name="AppliedLoad" type="ifc:IfcStructuralLoad" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="GlobalOrLocal" type="ifc:IfcGlobalOrLocalEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralAnalysisModel" type="ifc:IfcStructuralAnalysisModel" substitutionGroup="ifc:IfcSystem" nillable="true"/>
 <xs:complexType name="IfcStructuralAnalysisModel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSystem">
    <xs:sequence>
     <xs:element name="OrientationOf2DPlane" type="ifc:IfcAxis2Placement3D" nillable="true" minOccurs="0"/>
     <xs:element name="LoadedBy" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcStructuralLoadGroup" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcStructuralLoadGroup"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="HasResults" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcStructuralResultGroup" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcStructuralResultGroup"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SharedPlacement" type="ifc:IfcObjectPlacement" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcAnalysisModelTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralConnection" type="ifc:IfcStructuralConnection" abstract="true" substitutionGroup="ifc:IfcStructuralItem" nillable="true"/>
 <xs:complexType name="IfcStructuralConnection" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralItem">
    <xs:sequence>
     <xs:element name="AppliedCondition" type="ifc:IfcBoundaryCondition" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralConnectionCondition" type="ifc:IfcStructuralConnectionCondition" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcStructuralConnectionCondition" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralCurveAction" type="ifc:IfcStructuralCurveAction" substitutionGroup="ifc:IfcStructuralAction" nillable="true"/>
 <xs:complexType name="IfcStructuralCurveAction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralAction">
    <xs:attribute name="ProjectedOrTrue" type="ifc:IfcProjectedOrTrueLengthEnum" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralCurveActivityTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralCurveConnection" type="ifc:IfcStructuralCurveConnection" substitutionGroup="ifc:IfcStructuralConnection" nillable="true"/>
 <xs:complexType name="IfcStructuralCurveConnection">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralConnection">
    <xs:sequence>
     <xs:element name="Axis" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralCurveMember" type="ifc:IfcStructuralCurveMember" substitutionGroup="ifc:IfcStructuralMember" nillable="true"/>
 <xs:complexType name="IfcStructuralCurveMember">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralMember">
    <xs:sequence>
     <xs:element name="Axis" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralCurveMemberTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralCurveMemberVarying" type="ifc:IfcStructuralCurveMemberVarying" substitutionGroup="ifc:IfcStructuralCurveMember" nillable="true"/>
 <xs:complexType name="IfcStructuralCurveMemberVarying">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralCurveMember"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralCurveReaction" type="ifc:IfcStructuralCurveReaction" substitutionGroup="ifc:IfcStructuralReaction" nillable="true"/>
 <xs:complexType name="IfcStructuralCurveReaction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralReaction">
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralCurveActivityTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralItem" type="ifc:IfcStructuralItem" abstract="true" substitutionGroup="ifc:IfcProduct" nillable="true"/>
 <xs:complexType name="IfcStructuralItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProduct"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLinearAction" type="ifc:IfcStructuralLinearAction" substitutionGroup="ifc:IfcStructuralCurveAction" nillable="true"/>
 <xs:complexType name="IfcStructuralLinearAction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralCurveAction"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoad" type="ifc:IfcStructuralLoad" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcStructuralLoad" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadCase" type="ifc:IfcStructuralLoadCase" substitutionGroup="ifc:IfcStructuralLoadGroup" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadCase">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadGroup">
    <xs:attribute name="SelfWeightCoefficients" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcRatioMeasure"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
       <xs:maxLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadConfiguration" type="ifc:IfcStructuralLoadConfiguration" substitutionGroup="ifc:IfcStructuralLoad" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadConfiguration">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoad">
    <xs:sequence>
     <xs:element name="Values">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcStructuralLoadOrResult" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcStructuralLoadOrResult"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Locations" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcLengthMeasure-wrapper" minOccurs="1" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcLengthMeasure-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list-unique list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadGroup" type="ifc:IfcStructuralLoadGroup" substitutionGroup="ifc:IfcGroup" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadGroup">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGroup">
    <xs:attribute name="PredefinedType" type="ifc:IfcLoadGroupTypeEnum" use="optional"/>
    <xs:attribute name="ActionType" type="ifc:IfcActionTypeEnum" use="optional"/>
    <xs:attribute name="ActionSource" type="ifc:IfcActionSourceTypeEnum" use="optional"/>
    <xs:attribute name="Coefficient" type="ifc:IfcRatioMeasure" use="optional"/>
    <xs:attribute name="Purpose" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadLinearForce" type="ifc:IfcStructuralLoadLinearForce" substitutionGroup="ifc:IfcStructuralLoadStatic" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadLinearForce">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadStatic">
    <xs:attribute name="LinearForceX" type="ifc:IfcLinearForceMeasure" use="optional"/>
    <xs:attribute name="LinearForceY" type="ifc:IfcLinearForceMeasure" use="optional"/>
    <xs:attribute name="LinearForceZ" type="ifc:IfcLinearForceMeasure" use="optional"/>
    <xs:attribute name="LinearMomentX" type="ifc:IfcLinearMomentMeasure" use="optional"/>
    <xs:attribute name="LinearMomentY" type="ifc:IfcLinearMomentMeasure" use="optional"/>
    <xs:attribute name="LinearMomentZ" type="ifc:IfcLinearMomentMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadOrResult" type="ifc:IfcStructuralLoadOrResult" abstract="true" substitutionGroup="ifc:IfcStructuralLoad" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadOrResult" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoad"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadPlanarForce" type="ifc:IfcStructuralLoadPlanarForce" substitutionGroup="ifc:IfcStructuralLoadStatic" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadPlanarForce">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadStatic">
    <xs:attribute name="PlanarForceX" type="ifc:IfcPlanarForceMeasure" use="optional"/>
    <xs:attribute name="PlanarForceY" type="ifc:IfcPlanarForceMeasure" use="optional"/>
    <xs:attribute name="PlanarForceZ" type="ifc:IfcPlanarForceMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadSingleDisplacement" type="ifc:IfcStructuralLoadSingleDisplacement" substitutionGroup="ifc:IfcStructuralLoadStatic" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadSingleDisplacement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadStatic">
    <xs:attribute name="DisplacementX" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="DisplacementY" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="DisplacementZ" type="ifc:IfcLengthMeasure" use="optional"/>
    <xs:attribute name="RotationalDisplacementRX" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="RotationalDisplacementRY" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="RotationalDisplacementRZ" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadSingleDisplacementDistortion" type="ifc:IfcStructuralLoadSingleDisplacementDistortion" substitutionGroup="ifc:IfcStructuralLoadSingleDisplacement" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadSingleDisplacementDistortion">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadSingleDisplacement">
    <xs:attribute name="Distortion" type="ifc:IfcCurvatureMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadSingleForce" type="ifc:IfcStructuralLoadSingleForce" substitutionGroup="ifc:IfcStructuralLoadStatic" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadSingleForce">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadStatic">
    <xs:attribute name="ForceX" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="ForceY" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="ForceZ" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="MomentX" type="ifc:IfcTorqueMeasure" use="optional"/>
    <xs:attribute name="MomentY" type="ifc:IfcTorqueMeasure" use="optional"/>
    <xs:attribute name="MomentZ" type="ifc:IfcTorqueMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadSingleForceWarping" type="ifc:IfcStructuralLoadSingleForceWarping" substitutionGroup="ifc:IfcStructuralLoadSingleForce" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadSingleForceWarping">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadSingleForce">
    <xs:attribute name="WarpingMoment" type="ifc:IfcWarpingMomentMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadStatic" type="ifc:IfcStructuralLoadStatic" abstract="true" substitutionGroup="ifc:IfcStructuralLoadOrResult" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadStatic" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadOrResult"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralLoadTemperature" type="ifc:IfcStructuralLoadTemperature" substitutionGroup="ifc:IfcStructuralLoadStatic" nillable="true"/>
 <xs:complexType name="IfcStructuralLoadTemperature">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadStatic">
    <xs:attribute name="DeltaTConstant" type="ifc:IfcThermodynamicTemperatureMeasure" use="optional"/>
    <xs:attribute name="DeltaTY" type="ifc:IfcThermodynamicTemperatureMeasure" use="optional"/>
    <xs:attribute name="DeltaTZ" type="ifc:IfcThermodynamicTemperatureMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralMember" type="ifc:IfcStructuralMember" abstract="true" substitutionGroup="ifc:IfcStructuralItem" nillable="true"/>
 <xs:complexType name="IfcStructuralMember" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralPlanarAction" type="ifc:IfcStructuralPlanarAction" substitutionGroup="ifc:IfcStructuralSurfaceAction" nillable="true"/>
 <xs:complexType name="IfcStructuralPlanarAction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralSurfaceAction"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralPointAction" type="ifc:IfcStructuralPointAction" substitutionGroup="ifc:IfcStructuralAction" nillable="true"/>
 <xs:complexType name="IfcStructuralPointAction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralAction"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralPointConnection" type="ifc:IfcStructuralPointConnection" substitutionGroup="ifc:IfcStructuralConnection" nillable="true"/>
 <xs:complexType name="IfcStructuralPointConnection">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralConnection">
    <xs:sequence>
     <xs:element name="ConditionCoordinateSystem" type="ifc:IfcAxis2Placement3D" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralPointReaction" type="ifc:IfcStructuralPointReaction" substitutionGroup="ifc:IfcStructuralReaction" nillable="true"/>
 <xs:complexType name="IfcStructuralPointReaction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralReaction"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralReaction" type="ifc:IfcStructuralReaction" abstract="true" substitutionGroup="ifc:IfcStructuralActivity" nillable="true"/>
 <xs:complexType name="IfcStructuralReaction" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralActivity"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralResultGroup" type="ifc:IfcStructuralResultGroup" substitutionGroup="ifc:IfcGroup" nillable="true"/>
 <xs:complexType name="IfcStructuralResultGroup">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGroup">
    <xs:sequence>
     <xs:element name="ResultForLoadGroup" type="ifc:IfcStructuralLoadGroup" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="TheoryType" type="ifc:IfcAnalysisTheoryTypeEnum" use="optional"/>
    <xs:attribute name="IsLinear" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralSurfaceAction" type="ifc:IfcStructuralSurfaceAction" substitutionGroup="ifc:IfcStructuralAction" nillable="true"/>
 <xs:complexType name="IfcStructuralSurfaceAction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralAction">
    <xs:attribute name="ProjectedOrTrue" type="ifc:IfcProjectedOrTrueLengthEnum" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralSurfaceActivityTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralSurfaceConnection" type="ifc:IfcStructuralSurfaceConnection" substitutionGroup="ifc:IfcStructuralConnection" nillable="true"/>
 <xs:complexType name="IfcStructuralSurfaceConnection">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralConnection"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralSurfaceMember" type="ifc:IfcStructuralSurfaceMember" substitutionGroup="ifc:IfcStructuralMember" nillable="true"/>
 <xs:complexType name="IfcStructuralSurfaceMember">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralMember">
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralSurfaceMemberTypeEnum" use="optional"/>
    <xs:attribute name="Thickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralSurfaceMemberVarying" type="ifc:IfcStructuralSurfaceMemberVarying" substitutionGroup="ifc:IfcStructuralSurfaceMember" nillable="true"/>
 <xs:complexType name="IfcStructuralSurfaceMemberVarying">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralSurfaceMember"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStructuralSurfaceReaction" type="ifc:IfcStructuralSurfaceReaction" substitutionGroup="ifc:IfcStructuralReaction" nillable="true"/>
 <xs:complexType name="IfcStructuralSurfaceReaction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralReaction">
    <xs:attribute name="PredefinedType" type="ifc:IfcStructuralSurfaceActivityTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStyleModel" type="ifc:IfcStyleModel" abstract="true" substitutionGroup="ifc:IfcRepresentation" nillable="true"/>
 <xs:complexType name="IfcStyleModel" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentation"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStyledItem" type="ifc:IfcStyledItem" substitutionGroup="ifc:IfcRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcStyledItem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentationItem">
    <xs:sequence>
     <xs:element name="Styles">
      <xs:complexType>
       <xs:group ref="ifc:IfcStyleAssignmentSelect" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcStyleAssignmentSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcStyledRepresentation" type="ifc:IfcStyledRepresentation" substitutionGroup="ifc:IfcStyleModel" nillable="true"/>
 <xs:complexType name="IfcStyledRepresentation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStyleModel"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSubContractResource" type="ifc:IfcSubContractResource" substitutionGroup="ifc:IfcConstructionResource" nillable="true"/>
 <xs:complexType name="IfcSubContractResource">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResource">
    <xs:attribute name="PredefinedType" type="ifc:IfcSubContractResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSubContractResourceType" type="ifc:IfcSubContractResourceType" substitutionGroup="ifc:IfcConstructionResourceType" nillable="true"/>
 <xs:complexType name="IfcSubContractResourceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcConstructionResourceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSubContractResourceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSubedge" type="ifc:IfcSubedge" substitutionGroup="ifc:IfcEdge" nillable="true"/>
 <xs:complexType name="IfcSubedge">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEdge">
    <xs:sequence>
     <xs:element name="ParentEdge" type="ifc:IfcEdge" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurface" type="ifc:IfcSurface" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurface" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceCurveSweptAreaSolid" type="ifc:IfcSurfaceCurveSweptAreaSolid" substitutionGroup="ifc:IfcSweptAreaSolid" nillable="true"/>
 <xs:complexType name="IfcSurfaceCurveSweptAreaSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptAreaSolid">
    <xs:sequence>
     <xs:element name="Directrix" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="ReferenceSurface" type="ifc:IfcSurface" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="StartParam" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="EndParam" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceFeature" type="ifc:IfcSurfaceFeature" substitutionGroup="ifc:IfcFeatureElement" nillable="true"/>
 <xs:complexType name="IfcSurfaceFeature">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFeatureElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSurfaceFeatureTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceOfLinearExtrusion" type="ifc:IfcSurfaceOfLinearExtrusion" substitutionGroup="ifc:IfcSweptSurface" nillable="true"/>
 <xs:complexType name="IfcSurfaceOfLinearExtrusion">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptSurface">
    <xs:sequence>
     <xs:element name="ExtrudedDirection" type="ifc:IfcDirection" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Depth" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceOfRevolution" type="ifc:IfcSurfaceOfRevolution" substitutionGroup="ifc:IfcSweptSurface" nillable="true"/>
 <xs:complexType name="IfcSurfaceOfRevolution">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptSurface">
    <xs:sequence>
     <xs:element name="AxisPosition" type="ifc:IfcAxis1Placement" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceReinforcementArea" type="ifc:IfcSurfaceReinforcementArea" substitutionGroup="ifc:IfcStructuralLoadOrResult" nillable="true"/>
 <xs:complexType name="IfcSurfaceReinforcementArea">
  <xs:complexContent>
   <xs:extension base="ifc:IfcStructuralLoadOrResult">
    <xs:attribute name="SurfaceReinforcement1" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="SurfaceReinforcement2" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLengthMeasure"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="ShearReinforcement" type="ifc:IfcRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyle" type="ifc:IfcSurfaceStyle" substitutionGroup="ifc:IfcPresentationStyle" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationStyle">
    <xs:sequence>
     <xs:element name="Styles">
      <xs:complexType>
       <xs:group ref="ifc:IfcSurfaceStyleElementSelect" maxOccurs="5"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcSurfaceStyleElementSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Side" type="ifc:IfcSurfaceSide" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyleLighting" type="ifc:IfcSurfaceStyleLighting" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyleLighting">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="DiffuseTransmissionColour" type="ifc:IfcColourRgb" nillable="true"/>
     <xs:element name="DiffuseReflectionColour" type="ifc:IfcColourRgb" nillable="true"/>
     <xs:element name="TransmissionColour" type="ifc:IfcColourRgb" nillable="true"/>
     <xs:element name="ReflectanceColour" type="ifc:IfcColourRgb" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyleRefraction" type="ifc:IfcSurfaceStyleRefraction" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyleRefraction">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="RefractionIndex" type="ifc:IfcReal" use="optional"/>
    <xs:attribute name="DispersionFactor" type="ifc:IfcReal" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyleRendering" type="ifc:IfcSurfaceStyleRendering" substitutionGroup="ifc:IfcSurfaceStyleShading" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyleRendering">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurfaceStyleShading">
    <xs:sequence>
     <xs:element name="DiffuseColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColourOrFactor"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="TransmissionColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColourOrFactor"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="DiffuseTransmissionColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColourOrFactor"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ReflectionColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColourOrFactor"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SpecularColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColourOrFactor"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="SpecularHighlight" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSpecularHighlightSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Transparency" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="ReflectanceMethod" type="ifc:IfcReflectanceMethodEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyleShading" type="ifc:IfcSurfaceStyleShading" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyleShading">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="SurfaceColour" type="ifc:IfcColourRgb" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceStyleWithTextures" type="ifc:IfcSurfaceStyleWithTextures" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurfaceStyleWithTextures">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="Textures">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcSurfaceTexture" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcSurfaceTexture"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSurfaceTexture" type="ifc:IfcSurfaceTexture" abstract="true" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcSurfaceTexture" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="TextureTransform" type="ifc:IfcCartesianTransformationOperator2D" nillable="true" minOccurs="0"/>
     <xs:element name="Parameter" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcIdentifier-wrapper" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcIdentifier-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="RepeatS" type="xs:boolean" use="optional"/>
    <xs:attribute name="RepeatT" type="xs:boolean" use="optional"/>
    <xs:attribute name="Mode" type="ifc:IfcIdentifier" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSweptAreaSolid" type="ifc:IfcSweptAreaSolid" abstract="true" substitutionGroup="ifc:IfcSolidModel" nillable="true"/>
 <xs:complexType name="IfcSweptAreaSolid" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSolidModel">
    <xs:sequence>
     <xs:element name="SweptArea" type="ifc:IfcProfileDef" nillable="true"/>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSweptDiskSolid" type="ifc:IfcSweptDiskSolid" substitutionGroup="ifc:IfcSolidModel" nillable="true"/>
 <xs:complexType name="IfcSweptDiskSolid">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSolidModel">
    <xs:sequence>
     <xs:element name="Directrix" type="ifc:IfcCurve" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="Radius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="InnerRadius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="StartParam" type="ifc:IfcParameterValue" use="optional"/>
    <xs:attribute name="EndParam" type="ifc:IfcParameterValue" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSweptDiskSolidPolygonal" type="ifc:IfcSweptDiskSolidPolygonal" substitutionGroup="ifc:IfcSweptDiskSolid" nillable="true"/>
 <xs:complexType name="IfcSweptDiskSolidPolygonal">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSweptDiskSolid">
    <xs:attribute name="FilletRadius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSweptSurface" type="ifc:IfcSweptSurface" abstract="true" substitutionGroup="ifc:IfcSurface" nillable="true"/>
 <xs:complexType name="IfcSweptSurface" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSurface">
    <xs:sequence>
     <xs:element name="SweptCurve" type="ifc:IfcProfileDef" nillable="true"/>
     <xs:element name="Position" type="ifc:IfcAxis2Placement3D" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSwitchingDevice" type="ifc:IfcSwitchingDevice" substitutionGroup="ifc:IfcFlowController" nillable="true"/>
 <xs:complexType name="IfcSwitchingDevice">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowController">
    <xs:attribute name="PredefinedType" type="ifc:IfcSwitchingDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSwitchingDeviceType" type="ifc:IfcSwitchingDeviceType" substitutionGroup="ifc:IfcFlowControllerType" nillable="true"/>
 <xs:complexType name="IfcSwitchingDeviceType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowControllerType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSwitchingDeviceTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSystem" type="ifc:IfcSystem" substitutionGroup="ifc:IfcGroup" nillable="true"/>
 <xs:complexType name="IfcSystem">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGroup"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSystemFurnitureElement" type="ifc:IfcSystemFurnitureElement" substitutionGroup="ifc:IfcFurnishingElement" nillable="true"/>
 <xs:complexType name="IfcSystemFurnitureElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFurnishingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcSystemFurnitureElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcSystemFurnitureElementType" type="ifc:IfcSystemFurnitureElementType" substitutionGroup="ifc:IfcFurnishingElementType" nillable="true"/>
 <xs:complexType name="IfcSystemFurnitureElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFurnishingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcSystemFurnitureElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTShapeProfileDef" type="ifc:IfcTShapeProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcTShapeProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="Depth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeWidth" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="WebThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeThickness" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="FilletRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="FlangeEdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="WebEdgeRadius" type="ifc:IfcNonNegativeLengthMeasure" use="optional"/>
    <xs:attribute name="WebSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
    <xs:attribute name="FlangeSlope" type="ifc:IfcPlaneAngleMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTable" type="ifc:IfcTable" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTable">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Rows" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTableRow" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTableRow"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Columns" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTableColumn" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTableColumn"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTableColumn" type="ifc:IfcTableColumn" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTableColumn">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="ReferencePath" type="ifc:IfcReference" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Identifier" type="ifc:IfcIdentifier" use="optional"/>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTableRow" type="ifc:IfcTableRow" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTableRow">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="RowCells" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="IsHeading" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTank" type="ifc:IfcTank" substitutionGroup="ifc:IfcFlowStorageDevice" nillable="true"/>
 <xs:complexType name="IfcTank">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowStorageDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcTankTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTankType" type="ifc:IfcTankType" substitutionGroup="ifc:IfcFlowStorageDeviceType" nillable="true"/>
 <xs:complexType name="IfcTankType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcFlowStorageDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcTankTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTask" type="ifc:IfcTask" substitutionGroup="ifc:IfcProcess" nillable="true"/>
 <xs:complexType name="IfcTask">
  <xs:complexContent>
   <xs:extension base="ifc:IfcProcess">
    <xs:sequence>
     <xs:element name="TaskTime" type="ifc:IfcTaskTime" nillable="true" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="WorkMethod" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="IsMilestone" type="xs:boolean" use="optional"/>
    <xs:attribute name="Priority" type="xs:long" use="optional"/>
    <xs:attribute name="PredefinedType" type="ifc:IfcTaskTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTaskTime" type="ifc:IfcTaskTime" substitutionGroup="ifc:IfcSchedulingTime" nillable="true"/>
 <xs:complexType name="IfcTaskTime">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSchedulingTime">
    <xs:attribute name="DurationType" type="ifc:IfcTaskDurationEnum" use="optional"/>
    <xs:attribute name="ScheduleDuration" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="ScheduleStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ScheduleFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="EarlyStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="EarlyFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="LateStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="LateFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="FreeFloat" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="TotalFloat" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="IsCritical" type="xs:boolean" use="optional"/>
    <xs:attribute name="StatusTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ActualDuration" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="ActualStart" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="ActualFinish" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="RemainingTime" type="ifc:IfcDuration" use="optional"/>
    <xs:attribute name="Completion" type="ifc:IfcPositiveRatioMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTaskTimeRecurring" type="ifc:IfcTaskTimeRecurring" substitutionGroup="ifc:IfcTaskTime" nillable="true"/>
 <xs:complexType name="IfcTaskTimeRecurring">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTaskTime">
    <xs:sequence>
     <xs:element name="Recurrance" type="ifc:IfcRecurrencePattern" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTaskType" type="ifc:IfcTaskType" substitutionGroup="ifc:IfcTypeProcess" nillable="true"/>
 <xs:complexType name="IfcTaskType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeProcess">
    <xs:attribute name="PredefinedType" type="ifc:IfcTaskTypeEnum" use="optional"/>
    <xs:attribute name="WorkMethod" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTelecomAddress" type="ifc:IfcTelecomAddress" substitutionGroup="ifc:IfcAddress" nillable="true"/>
 <xs:complexType name="IfcTelecomAddress">
  <xs:complexContent>
   <xs:extension base="ifc:IfcAddress">
    <xs:attribute name="TelephoneNumbers" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="FacsimileNumbers" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="PagerNumber" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ElectronicMailAddresses" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcLabel"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="WWWHomePageURL" type="ifc:IfcURIReference" use="optional"/>
    <xs:attribute name="MessagingIDs" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcURIReference"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTendon" type="ifc:IfcTendon" substitutionGroup="ifc:IfcReinforcingElement" nillable="true"/>
 <xs:complexType name="IfcTendon">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcTendonTypeEnum" use="optional"/>
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="CrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="TensionForce" type="ifc:IfcForceMeasure" use="optional"/>
    <xs:attribute name="PreStress" type="ifc:IfcPressureMeasure" use="optional"/>
    <xs:attribute name="FrictionCoefficient" type="ifc:IfcNormalisedRatioMeasure" use="optional"/>
    <xs:attribute name="AnchorageSlip" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="MinCurvatureRadius" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTendonAnchor" type="ifc:IfcTendonAnchor" substitutionGroup="ifc:IfcReinforcingElement" nillable="true"/>
 <xs:complexType name="IfcTendonAnchor">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcTendonAnchorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTendonAnchorType" type="ifc:IfcTendonAnchorType" substitutionGroup="ifc:IfcReinforcingElementType" nillable="true"/>
 <xs:complexType name="IfcTendonAnchorType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcTendonAnchorTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTendonType" type="ifc:IfcTendonType" substitutionGroup="ifc:IfcReinforcingElementType" nillable="true"/>
 <xs:complexType name="IfcTendonType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcReinforcingElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcTendonTypeEnum" use="optional"/>
    <xs:attribute name="NominalDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="CrossSectionArea" type="ifc:IfcAreaMeasure" use="optional"/>
    <xs:attribute name="SheethDiameter" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTessellatedFaceSet" type="ifc:IfcTessellatedFaceSet" abstract="true" substitutionGroup="ifc:IfcTessellatedItem" nillable="true"/>
 <xs:complexType name="IfcTessellatedFaceSet" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTessellatedItem">
    <xs:sequence>
     <xs:element name="Coordinates" type="ifc:IfcCartesianPointList3D" nillable="true"/>
     <xs:element name="HasColours" type="ifc:IfcIndexedColourMap" nillable="true" minOccurs="0" maxOccurs="1"/>
     <xs:element name="HasTextures" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcIndexedTextureMap" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcIndexedTextureMap"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Normals" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Closed" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTessellatedItem" type="ifc:IfcTessellatedItem" abstract="true" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcTessellatedItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextLiteral" type="ifc:IfcTextLiteral" substitutionGroup="ifc:IfcGeometricRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextLiteral">
  <xs:complexContent>
   <xs:extension base="ifc:IfcGeometricRepresentationItem">
    <xs:sequence>
     <xs:element name="Placement">
      <xs:complexType>
       <xs:group ref="ifc:IfcAxis2Placement"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Literal" type="ifc:IfcPresentableText" use="optional"/>
    <xs:attribute name="Path" type="ifc:IfcTextPath" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextLiteralWithExtent" type="ifc:IfcTextLiteralWithExtent" substitutionGroup="ifc:IfcTextLiteral" nillable="true"/>
 <xs:complexType name="IfcTextLiteralWithExtent">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTextLiteral">
    <xs:sequence>
     <xs:element name="Extent" type="ifc:IfcPlanarExtent" nillable="true"/>
    </xs:sequence>
    <xs:attribute name="BoxAlignment" type="ifc:IfcBoxAlignment" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextStyle" type="ifc:IfcTextStyle" substitutionGroup="ifc:IfcPresentationStyle" nillable="true"/>
 <xs:complexType name="IfcTextStyle">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationStyle">
    <xs:sequence>
     <xs:element name="TextCharacterAppearance" type="ifc:IfcTextStyleForDefinedFont" nillable="true" minOccurs="0"/>
     <xs:element name="TextStyle" type="ifc:IfcTextStyleTextModel" nillable="true" minOccurs="0"/>
     <xs:element name="TextFontStyle">
      <xs:complexType>
       <xs:group ref="ifc:IfcTextFontSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="ModelOrDraughting" type="xs:boolean" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextStyleFontModel" type="ifc:IfcTextStyleFontModel" substitutionGroup="ifc:IfcPreDefinedTextFont" nillable="true"/>
 <xs:complexType name="IfcTextStyleFontModel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPreDefinedTextFont">
    <xs:sequence>
     <xs:element name="FontFamily">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTextFontName-wrapper" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTextFontName-wrapper"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="FontSize">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="FontStyle" type="ifc:IfcFontStyle" use="optional"/>
    <xs:attribute name="FontVariant" type="ifc:IfcFontVariant" use="optional"/>
    <xs:attribute name="FontWeight" type="ifc:IfcFontWeight" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextStyleForDefinedFont" type="ifc:IfcTextStyleForDefinedFont" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextStyleForDefinedFont">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="Colour">
      <xs:complexType>
       <xs:group ref="ifc:IfcColour"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="BackgroundColour" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcColour"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextStyleTextModel" type="ifc:IfcTextStyleTextModel" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextStyleTextModel">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="TextIndent" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="LetterSpacing" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="WordSpacing" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="LineHeight" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcSizeSelect"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="TextAlign" type="ifc:IfcTextAlignment" use="optional"/>
    <xs:attribute name="TextDecoration" type="ifc:IfcTextDecoration" use="optional"/>
    <xs:attribute name="TextTransform" type="ifc:IfcTextTransformation" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextureCoordinate" type="ifc:IfcTextureCoordinate" abstract="true" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextureCoordinate" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:sequence>
     <xs:element name="Maps">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcSurfaceTexture" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcSurfaceTexture"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextureCoordinateGenerator" type="ifc:IfcTextureCoordinateGenerator" substitutionGroup="ifc:IfcTextureCoordinate" nillable="true"/>
 <xs:complexType name="IfcTextureCoordinateGenerator">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTextureCoordinate">
    <xs:attribute name="Mode" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Parameter" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcReal"/>
       </xs:simpleType>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextureMap" type="ifc:IfcTextureMap" substitutionGroup="ifc:IfcTextureCoordinate" nillable="true"/>
 <xs:complexType name="IfcTextureMap">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTextureCoordinate">
    <xs:sequence>
     <xs:element name="Vertices">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTextureVertex" minOccurs="3" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTextureVertex"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="MappedTo" type="ifc:IfcFace" nillable="true"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextureVertex" type="ifc:IfcTextureVertex" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextureVertex">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="Coordinates" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
       <xs:maxLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTextureVertexList" type="ifc:IfcTextureVertexList" substitutionGroup="ifc:IfcPresentationItem" nillable="true"/>
 <xs:complexType name="IfcTextureVertexList">
  <xs:complexContent>
   <xs:extension base="ifc:IfcPresentationItem">
    <xs:attribute name="TexCoordsList" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="ifc:IfcParameterValue"/>
       </xs:simpleType>
       <xs:minLength value="2"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTimePeriod" type="ifc:IfcTimePeriod" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTimePeriod">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:attribute name="StartTime" type="ifc:IfcTime" use="optional"/>
    <xs:attribute name="EndTime" type="ifc:IfcTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTimeSeries" type="ifc:IfcTimeSeries" abstract="true" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTimeSeries" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Unit" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
    <xs:attribute name="StartTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="EndTime" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="TimeSeriesDataType" type="ifc:IfcTimeSeriesDataTypeEnum" use="optional"/>
    <xs:attribute name="DataOrigin" type="ifc:IfcDataOriginEnum" use="optional"/>
    <xs:attribute name="UserDefinedDataOrigin" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTimeSeriesValue" type="ifc:IfcTimeSeriesValue" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTimeSeriesValue">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="ListValues">
      <xs:complexType>
       <xs:group ref="ifc:IfcValue" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcValue"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTopologicalRepresentationItem" type="ifc:IfcTopologicalRepresentationItem" abstract="true" substitutionGroup="ifc:IfcRepresentationItem" nillable="true"/>
 <xs:complexType name="IfcTopologicalRepresentationItem" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcRepresentationItem"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTopologyRepresentation" type="ifc:IfcTopologyRepresentation" substitutionGroup="ifc:IfcShapeModel" nillable="true"/>
 <xs:complexType name="IfcTopologyRepresentation">
  <xs:complexContent>
   <xs:extension base="ifc:IfcShapeModel"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTransformer" type="ifc:IfcTransformer" substitutionGroup="ifc:IfcEnergyConversionDevice" nillable="true"/>
 <xs:complexType name="IfcTransformer">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDevice">
    <xs:attribute name="PredefinedType" type="ifc:IfcTransformerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTransformerType" type="ifc:IfcTransformerType" substitutionGroup="ifc:IfcEnergyConversionDeviceType" nillable="true"/>
 <xs:complexType name="IfcTransformerType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcEnergyConversionDeviceType">
    <xs:attribute name="PredefinedType" type="ifc:IfcTransformerTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTransportElement" type="ifc:IfcTransportElement" substitutionGroup="ifc:IfcElement" nillable="true"/>
 <xs:complexType name="IfcTransportElement">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElement">
    <xs:attribute name="PredefinedType" type="ifc:IfcTransportElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTransportElementType" type="ifc:IfcTransportElementType" substitutionGroup="ifc:IfcElementType" nillable="true"/>
 <xs:complexType name="IfcTransportElementType">
  <xs:complexContent>
   <xs:extension base="ifc:IfcElementType">
    <xs:attribute name="PredefinedType" type="ifc:IfcTransportElementTypeEnum" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTrapeziumProfileDef" type="ifc:IfcTrapeziumProfileDef" substitutionGroup="ifc:IfcParameterizedProfileDef" nillable="true"/>
 <xs:complexType name="IfcTrapeziumProfileDef">
  <xs:complexContent>
   <xs:extension base="ifc:IfcParameterizedProfileDef">
    <xs:attribute name="BottomXDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TopXDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="YDim" type="ifc:IfcPositiveLengthMeasure" use="optional"/>
    <xs:attribute name="TopXOffset" type="ifc:IfcLengthMeasure" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTriangulatedFaceSet" type="ifc:IfcTriangulatedFaceSet" substitutionGroup="ifc:IfcTessellatedFaceSet" nillable="true"/>
 <xs:complexType name="IfcTriangulatedFaceSet">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTessellatedFaceSet">
    <xs:attribute name="CoordIndex" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="NormalIndex" use="optional">
     <xs:simpleType>
      <xs:restriction>
       <xs:simpleType>
        <xs:list itemType="xs:long"/>
       </xs:simpleType>
       <xs:minLength value="3"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTrimmedCurve" type="ifc:IfcTrimmedCurve" substitutionGroup="ifc:IfcBoundedCurve" nillable="true"/>
 <xs:complexType name="IfcTrimmedCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedCurve">
    <xs:sequence>
     <xs:element name="BasisCurve" type="ifc:IfcCurve" nillable="true"/>
     <xs:element name="Trim1">
      <xs:complexType>
       <xs:group ref="ifc:IfcTrimmingSelect" maxOccurs="2"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTrimmingSelect"/>
       <xs:attribute ref="ifc:cType" fixed="set"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Trim2">
      <xs:complexType>
       <xs:group ref="ifc:IfcTrimmingSelect" maxOccurs="2"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc: