<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 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.6 at buildingsmart-tech.org -->
 <!-- root element declaration (for SCHEMA definitions) -->
 <xs:element name="uos" type="ifc:uos" abstract="true"/>
<xs:simpleType name="Seq-anyURI">
<xs:list itemType="xs:anyURI"/>
</xs:simpleType>
 <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:attribute name="express" type="ifc:Seq-anyURI" use="optional"/>
  <xs:attribute name="configuration" type="ifc:Seq-anyURI" 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: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="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: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="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="IfcBuilding" type="ifc:IfcBuilding" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcBuilding">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement"/>
  </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: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="Name" type="ifc:IfcLabel" 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: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:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="ConstraintGrade" type="ifc:IfcConstraintEnum" 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: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: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: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="UnitsInContext" type="ifc:IfcUnitAssignment" nillable="true" minOccurs="0"/>
    </xs:sequence>
   </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: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="IfcDimensionalExponents" type="ifc:IfcDimensionalExponents" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcDimensionalExponents">
  <xs:complexContent>
   <xs:extension base="ifc:Entity"/>
  </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: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: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: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="Identification" type="ifc:IfcIdentifier" use="optional"/>
   </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="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="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:sequence>
    <xs:attribute name="Benchmark" type="ifc:IfcBenchmarkEnum" 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: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="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="ObjectiveQualifier" type="ifc:IfcObjectiveEnum" use="optional"/>
   </xs:extension>
  </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: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="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:sequence>
    <xs:attribute name="State" type="ifc:IfcStateEnum" use="optional"/>
    <xs:attribute name="ChangeAction" type="ifc:IfcChangeActionEnum" use="optional"/>
    <xs:attribute name="CreationDate" type="ifc:IfcTimeStamp" 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="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: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:sequence>
   </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: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: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="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="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: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: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="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: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="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="IfcPropertyEnumeratedValue" type="ifc:IfcPropertyEnumeratedValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertyEnumeratedValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty"/>
  </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: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="IfcPropertySingleValue" type="ifc:IfcPropertySingleValue" substitutionGroup="ifc:IfcSimpleProperty" nillable="true"/>
 <xs:complexType name="IfcPropertySingleValue">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSimpleProperty"/>
  </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: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: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="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: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: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="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="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: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="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="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="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: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: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="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="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="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="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: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="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: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: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="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: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="IfcSite" type="ifc:IfcSite" substitutionGroup="ifc:IfcSpatialStructureElement" nillable="true"/>
 <xs:complexType name="IfcSite">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSpatialStructureElement"/>
  </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: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: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: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="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="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="Name" type="ifc:IfcLabel" use="optional"/>
    <xs:attribute name="Description" type="ifc:IfcText" 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: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="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: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="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: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="IfcTypeObject" type="ifc:IfcTypeObject" substitutionGroup="ifc:IfcObjectDefinition" nillable="true"/>
 <xs:complexType name="IfcTypeObject">
  <xs:complexContent>
   <xs:extension base="ifc:IfcObjectDefinition">
    <xs:sequence>
     <xs:element name="HasPropertySets" nillable="true" minOccurs="0">
      <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:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTypeProduct" type="ifc:IfcTypeProduct" substitutionGroup="ifc:IfcTypeObject" nillable="true"/>
 <xs:complexType name="IfcTypeProduct">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeObject"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcTypeResource" type="ifc:IfcTypeResource" abstract="true" substitutionGroup="ifc:IfcTypeObject" nillable="true"/>
 <xs:complexType name="IfcTypeResource" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcTypeObject"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcUnitAssignment" type="ifc:IfcUnitAssignment" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcUnitAssignment">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Units">
      <xs:complexType>
       <xs:group ref="ifc:IfcUnit" maxOccurs="unbounded"/>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcUnit"/>
       <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="IfcWorkControl" type="ifc:IfcWorkControl" abstract="true" substitutionGroup="ifc:IfcControl" nillable="true"/>
 <xs:complexType name="IfcWorkControl" abstract="true">
  <xs:complexContent>
   <xs:extension base="ifc:IfcControl">
    <xs:attribute name="CreationDate" type="ifc:IfcDateTime" use="optional"/>
    <xs:attribute name="StartTime" type="ifc:IfcDateTime" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcWorkSchedule" type="ifc:IfcWorkSchedule" substitutionGroup="ifc:IfcWorkControl" nillable="true"/>
 <xs:complexType name="IfcWorkSchedule">
  <xs:complexContent>
   <xs:extension base="ifc:IfcWorkControl"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="IfcZone" type="ifc:IfcZone" substitutionGroup="ifc:IfcSystem" nillable="true"/>
 <xs:complexType name="IfcZone">
  <xs:complexContent>
   <xs:extension base="ifc:IfcSystem"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- group declarations (for SELECT data type definitions) -->
 <xs:group name="IfcActorSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcOrganization"/>
   <xs:element ref="ifc:IfcPerson"/>
   <xs:element ref="ifc:IfcPersonAndOrganization"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcClassificationReferenceSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcClassification"/>
   <xs:element ref="ifc:IfcClassificationReference"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcClassificationSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcClassification"/>
   <xs:element ref="ifc:IfcClassificationReference"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcDefinitionSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcObjectDefinition"/>
   <xs:element ref="ifc:IfcPropertyDefinition"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcDocumentSelect">
  <xs:choice>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcMetricValueSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcAreaMeasure-wrapper"/>
   <xs:element ref="ifc:IfcDate-wrapper"/>
   <xs:element ref="ifc:IfcDateTime-wrapper"/>
   <xs:element ref="ifc:IfcDuration-wrapper"/>
   <xs:element ref="ifc:IfcIdentifier-wrapper"/>
   <xs:element ref="ifc:IfcInteger-wrapper"/>
   <xs:element ref="ifc:IfcLabel-wrapper"/>
   <xs:element ref="ifc:IfcLengthMeasure-wrapper"/>
   <xs:element ref="ifc:IfcMeasureWithUnit"/>
   <xs:element ref="ifc:IfcMonetaryMeasure-wrapper"/>
   <xs:element ref="ifc:IfcPositiveLengthMeasure-wrapper"/>
   <xs:element ref="ifc:IfcReal-wrapper"/>
   <xs:element ref="ifc:IfcReference"/>
   <xs:element ref="ifc:IfcTable"/>
   <xs:element ref="ifc:IfcText-wrapper"/>
   <xs:element ref="ifc:IfcTime-wrapper"/>
   <xs:element ref="ifc:IfcTimeStamp-wrapper"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcPropertySetDefinitionSelect">
  <xs:choice>
   <xs:element ref="ifc:IfcPropertySetDefinition"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcUnit">
  <xs:choice>
   <xs:element ref="ifc:IfcNamedUnit"/>
  </xs:choice>
 </xs:group>
 <xs:group name="IfcValue">
  <xs:choice>
   <xs:element ref="ifc:IfcAreaMeasure-wrapper"/>
   <xs:element ref="ifc:IfcDate-wrapper"/>
   <xs:element ref="ifc:IfcDateTime-wrapper"/>
   <xs:element ref="ifc:IfcDuration-wrapper"/>
   <xs:element ref="ifc:IfcIdentifier-wrapper"/>
   <xs:element ref="ifc:IfcInteger-wrapper"/>
   <xs:element ref="ifc:IfcLabel-wrapper"/>
   <xs:element ref="ifc:IfcLengthMeasure-wrapper"/>
   <xs:element ref="ifc:IfcMonetaryMeasure-wrapper"/>
   <xs:element ref="ifc:IfcPositiveLengthMeasure-wrapper"/>
   <xs:element ref="ifc:IfcReal-wrapper"/>
   <xs:element ref="ifc:IfcText-wrapper"/>
   <xs:element ref="ifc:IfcTime-wrapper"/>
   <xs:element ref="ifc:IfcTimeStamp-wrapper"/>
  </xs:choice>
 </xs:group>
 <!-- enumeration type declarations (for ENUMERATION data type definitions) -->
 <xs:simpleType name="IfcBenchmarkEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="greaterthan"/>
   <xs:enumeration value="greaterthanorequalto"/>
   <xs:enumeration value="lessthan"/>
   <xs:enumeration value="lessthanorequalto"/>
   <xs:enumeration value="equalto"/>
   <xs:enumeration value="notequalto"/>
   <xs:enumeration value="includes"/>
   <xs:enumeration value="notincludes"/>
   <xs:enumeration value="includedin"/>
   <xs:enumeration value="notincludedin"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcChangeActionEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="nochange"/>
   <xs:enumeration value="modified"/>
   <xs:enumeration value="added"/>
   <xs:enumeration value="deleted"/>
   <xs:enumeration value="notdefined"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcConstraintEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="hard"/>
   <xs:enumeration value="soft"/>
   <xs:enumeration value="advisory"/>
   <xs:enumeration value="userdefined"/>
   <xs:enumeration value="notdefined"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcConstructionProductResourceTypeEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="assembly"/>
   <xs:enumeration value="formwork"/>
   <xs:enumeration value="userdefined"/>
   <xs:enumeration value="notdefined"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcObjectiveEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="codecompliance"/>
   <xs:enumeration value="codewaiver"/>
   <xs:enumeration value="designintent"/>
   <xs:enumeration value="external"/>
   <xs:enumeration value="healthandsafety"/>
   <xs:enumeration value="mergeconflict"/>
   <xs:enumeration value="modelview"/>
   <xs:enumeration value="parameter"/>
   <xs:enumeration value="requirement"/>
   <xs:enumeration value="specification"/>
   <xs:enumeration value="triggercondition"/>
   <xs:enumeration value="userdefined"/>
   <xs:enumeration value="notdefined"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcRecurrenceTypeEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="daily"/>
   <xs:enumeration value="weekly"/>
   <xs:enumeration value="monthly_by_day_of_month"/>
   <xs:enumeration value="monthly_by_position"/>
   <xs:enumeration value="by_day_count"/>
   <xs:enumeration value="by_weekday_count"/>
   <xs:enumeration value="yearly_by_day_of_month"/>
   <xs:enumeration value="yearly_by_position"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcSIPrefix">
  <xs:restriction base="xs:string">
   <xs:enumeration value="exa"/>
   <xs:enumeration value="peta"/>
   <xs:enumeration value="tera"/>
   <xs:enumeration value="giga"/>
   <xs:enumeration value="mega"/>
   <xs:enumeration value="kilo"/>
   <xs:enumeration value="hecto"/>
   <xs:enumeration value="deca"/>
   <xs:enumeration value="deci"/>
   <xs:enumeration value="centi"/>
   <xs:enumeration value="milli"/>
   <xs:enumeration value="micro"/>
   <xs:enumeration value="nano"/>
   <xs:enumeration value="pico"/>
   <xs:enumeration value="femto"/>
   <xs:enumeration value="atto"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcSIUnitName">
  <xs:restriction base="xs:string">
   <xs:enumeration value="ampere"/>
   <xs:enumeration value="becquerel"/>
   <xs:enumeration value="candela"/>
   <xs:enumeration value="coulomb"/>
   <xs:enumeration value="cubic_metre"/>
   <xs:enumeration value="degree_celsius"/>
   <xs:enumeration value="farad"/>
   <xs:enumeration value="gram"/>
   <xs:enumeration value="gray"/>
   <xs:enumeration value="henry"/>
   <xs:enumeration value="hertz"/>
   <xs:enumeration value="joule"/>
   <xs:enumeration value="kelvin"/>
   <xs:enumeration value="lumen"/>
   <xs:enumeration value="lux"/>
   <xs:enumeration value="metre"/>
   <xs:enumeration value="mole"/>
   <xs:enumeration value="newton"/>
   <xs:enumeration value="ohm"/>
   <xs:enumeration value="pascal"/>
   <xs:enumeration value="radian"/>
   <xs:enumeration value="second"/>
   <xs:enumeration value="siemens"/>
   <xs:enumeration value="sievert"/>
   <xs:enumeration value="square_metre"/>
   <xs:enumeration value="steradian"/>
   <xs:enumeration value="tesla"/>
   <xs:enumeration value="volt"/>
   <xs:enumeration value="watt"/>
   <xs:enumeration value="weber"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcStateEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="readwrite"/>
   <xs:enumeration value="readonly"/>
   <xs:enumeration value="locked"/>
   <xs:enumeration value="readwritelocked"/>
   <xs:enumeration value="readonlylocked"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcUnitEnum">
  <xs:restriction base="xs:string">
   <xs:enumeration value="absorbeddoseunit"/>
   <xs:enumeration value="amountofsubstanceunit"/>
   <xs:enumeration value="areaunit"/>
   <xs:enumeration value="doseequivalentunit"/>
   <xs:enumeration value="electriccapacitanceunit"/>
   <xs:enumeration value="electricchargeunit"/>
   <xs:enumeration value="electricconductanceunit"/>
   <xs:enumeration value="electriccurrentunit"/>
   <xs:enumeration value="electricresistanceunit"/>
   <xs:enumeration value="electricvoltageunit"/>
   <xs:enumeration value="energyunit"/>
   <xs:enumeration value="forceunit"/>
   <xs:enumeration value="frequencyunit"/>
   <xs:enumeration value="illuminanceunit"/>
   <xs:enumeration value="inductanceunit"/>
   <xs:enumeration value="lengthunit"/>
   <xs:enumeration value="luminousfluxunit"/>
   <xs:enumeration value="luminousintensityunit"/>
   <xs:enumeration value="magneticfluxdensityunit"/>
   <xs:enumeration value="magneticfluxunit"/>
   <xs:enumeration value="massunit"/>
   <xs:enumeration value="planeangleunit"/>
   <xs:enumeration value="powerunit"/>
   <xs:enumeration value="pressureunit"/>
   <xs:enumeration value="radioactivityunit"/>
   <xs:enumeration value="solidangleunit"/>
   <xs:enumeration value="thermodynamictemperatureunit"/>
   <xs:enumeration value="timeunit"/>
   <xs:enumeration value="volumeunit"/>
   <xs:enumeration value="userdefined"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- simple type declarations (for TYPE defined data type definitions) -->
 <xs:simpleType name="IfcAreaMeasure">
  <xs:restriction base="xs:double"/>
 </xs:simpleType>
 <xs:simpleType name="IfcDate">
  <xs:restriction base="xs:normalizedString"/>
 </xs:simpleType>
 <xs:simpleType name="IfcDateTime">
  <xs:restriction base="xs:normalizedString"/>
 </xs:simpleType>
 <xs:simpleType name="IfcDayInMonthNumber">
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <xs:simpleType name="IfcDayInWeekNumber">
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <xs:simpleType name="IfcDuration">
  <xs:restriction base="xs:normalizedString"/>
 </xs:simpleType>
 <xs:simpleType name="IfcGloballyUniqueId">
  <xs:restriction base="xs:normalizedString">
   <xs:minLength value="22"/>
   <xs:maxLength value="22"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcIdentifier">
  <xs:restriction base="xs:normalizedString">
   <xs:maxLength value="255"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcInteger">
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <xs:simpleType name="IfcLabel">
  <xs:restriction base="xs:normalizedString">
   <xs:maxLength value="255"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IfcLengthMeasure">
  <xs:restriction base="xs:double"/>
 </xs:simpleType>
 <xs:simpleType name="IfcMonetaryMeasure">
  <xs:restriction base="xs:double"/>
 </xs:simpleType>
 <xs:simpleType name="IfcMonthInYearNumber">
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <xs:simpleType name="IfcPositiveLengthMeasure">
  <xs:restriction base="ifc:IfcLengthMeasure"/>
 </xs:simpleType>
 <xs:simpleType name="IfcReal">
  <xs:restriction base="xs:double"/>
 </xs:simpleType>
 <xs:simpleType name="IfcText">
  <xs:restriction base="xs:normalizedString"/>
 </xs:simpleType>
 <xs:simpleType name="IfcTime">
  <xs:restriction base="xs:normalizedString"/>
 </xs:simpleType>
 <xs:simpleType name="IfcTimeStamp">
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <!-- base entity and entity attribute declaration (for embeded base schema definitions) -->
 <xs:element name="Entity" type="ifc:Entity" abstract="true" nillable="true"/>
 <xs:complexType name="Entity" abstract="true">
  <xs:attribute name="href" type="xs:anyURI" use="optional"/>
  <xs:attribute name="ref" type="xs:IDREF" use="optional"/>
  <xs:attributeGroup ref="ifc:instanceAttributes"/>
 </xs:complexType>
 <!-- base global attribute declaration (for embeded base schema definitions) -->
 <xs:attributeGroup name="instanceAttributes">
  <xs:attribute name="id" type="xs:ID" use="optional"/>
  <xs:attribute name="path" type="xs:NMTOKENS" use="optional"/>
  <xs:attribute name="pos" use="optional">
   <xs:simpleType>
    <xs:restriction>
     <xs:simpleType>
      <xs:list itemType="xs:integer"/>
     </xs:simpleType>
     <xs:minLength value="1"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:attributeGroup>
 <xs:attribute name="arraySize">
  <xs:simpleType>
   <xs:restriction>
    <xs:simpleType>
     <xs:list itemType="xs:integer"/>
    </xs:simpleType>
    <xs:minLength value="1"/>
   </xs:restriction>
  </xs:simpleType>
 </xs:attribute>
 <xs:attribute name="itemType">
  <xs:simpleType>
   <xs:list itemType="xs:QName"/>
  </xs:simpleType>
 </xs:attribute>
 <xs:attribute name="cType">
  <xs:simpleType>
   <xs:list itemType="ifc:aggregateType"/>
  </xs:simpleType>
 </xs:attribute>
 <xs:simpleType name="aggregateType">
  <xs:restriction base="xs:normalizedString">
   <xs:enumeration value="array"/>
   <xs:enumeration value="list"/>
   <xs:enumeration value="set"/>
   <xs:enumeration value="bag"/>
   <xs:enumeration value="array-unique"/>
   <xs:enumeration value="array-optional"/>
   <xs:enumeration value="array-optional-unique"/>
   <xs:enumeration value="list-unique"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- base global simple type declaration (for embeded base schema definitions) -->
 <xs:complexType name="hexBinary">
  <xs:simpleContent>
   <xs:extension base="xs:hexBinary">
    <xs:attribute name="extraBits" type="xs:integer" use="optional"/>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <xs:simpleType name="logical">
  <xs:restriction base="xs:normalizedString">
   <xs:enumeration value="false"/>
   <xs:enumeration value="true"/>
   <xs:enumeration value="unknown"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->
 <xs:element name="IfcAreaMeasure-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcAreaMeasure">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcDate-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcDate">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcDateTime-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcDateTime">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcDuration-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcDuration">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcIdentifier-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcIdentifier">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcInteger-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcInteger">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcLabel-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcLabel">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcLengthMeasure-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcLengthMeasure">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcMonetaryMeasure-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcMonetaryMeasure">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcPositiveLengthMeasure-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcPositiveLengthMeasure">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcReal-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcReal">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcText-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcText">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcTime-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcTime">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="IfcTimeStamp-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcTimeStamp">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="double-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="xs:double">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
</xs:schema>