# What is IFC?

## Introduction

**Industry Foundation Classes (IFC)** is an international standard for Building Information Model (BIM) data [(buildingSMART, 2020a)](https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/). The standard, [ISO 16739-1](https://www.iso.org/standard/70303.html), is used to exchanged BIM data among software applications used by the various participants in the AEC industry [(ISO, 2020a)](https://www.iso.org/standard/70303.html).

IFC is developed and mainteined by buildingSMART International and is used with [openBIM](https://www.buildingsmart.org/about/openbim/)   ([buildingSMART, 2020b)](https://technical.buildingsmart.org/standards/ifc/). According to [(ISO, 2020a)](https://www.iso.org/standard/70303.html), the IFC specifies:

1. **A data schema**
2. **An exchange file format structure**

### 1. Data Schema

The data schema is defined in:

* EXPRESS data specification language, [ISO 10303-11](https://www.iso.org/standard/38047.html),

### 2. E**xchange File Format Structure**

The exchange file formats structure is used for exchanging and sharing the data according to the **data schema**. The exchange file formats structure is defined in:

* Clear text encoding of the exchange structure, [ISO 10303-21](https://www.iso.org/standard/63141.html)

## In more detail

Let's try to explain IFC in layman's terms.

### 1. Data Schema

According to ([buildingSMART, 2020b)](https://technical.buildingsmart.org/standards/ifc/), the IFC **data schema** describes:

* identities and semantics
  * name, machine-readable unique identifier, object type or function
* &#x20;characteristics **or** attributes
  * material, color, thermal properties, etc.
* relationships
  * locations, connections, ownership, etc.
* abstract concepts
  * *performance, costing, etc.*
* processes
  * *installation, operations, etc.*
* people
  * owners, designers, contractors, suppliers, etc.
* Etc.

### 2. E**xchange File Format Structure**

Whereas the **Exchange File Format Structure** allows the data described to be transferred from one computer system to another.

{% hint style="info" %}
**Example:** The .IFC file can be used to transfer the BIM model from [Revit](https://www.autodesk.com/products/revit/overview) to [Solibri](https://www.solibri.com)
{% endhint %}

## Example

In this example we're going to take a look at a window. Please note that this section will simply introduce the data schema and STEP-file. We will explain how these works in detail later.

### 1. Data Schema

**IFC2x Edition 3 Technical Corrigendum 1**, or simply [IFC2x3](https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/), describes a window like this:&#x20;

```python
ENTITY IfcWindow
	SUBTYPE OF (IfcBuildingElement);
		OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
		OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
```

**To clarify:**  This is the **data schema** for a window class. The window is defined using the EXPRESS data specification language ([ISO 10303-11](https://www.iso.org/standard/38047.html)).&#x20;

{% hint style="info" %}
This is an abstract representation of a window object.\
I.e. this window doesn't exist in our building.
{% endhint %}

### 2. E**xchange File Format Structure**

The **STEP-file,** [ISO 10303-21](https://www.iso.org/standard/63141.html), describes the window object like this:&#x20;

```javascript
#13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
```

{% hint style="info" %}
This is an representation of a physical window.\
I.e. this window exist somewhere in our building.
{% endhint %}

## Summary

IFC is an international standard by buildingSMART International. It has two parts;

1. A data schema, **EXPRESS**
2. A file format, **STEP-File**

{% tabs %}
{% tab title="EXPRESS" %}

```javascript
ENTITY IfcWindow
	SUBTYPE OF (IfcBuildingElement);
		OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
		OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
```

{% endtab %}

{% tab title="STEP-File" %}

```javascript
#13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Use the tab above to switch between the **EXPRESS data schema** and the **STEP-file**
{% endhint %}

**In summary:**

* The data schema, **EXPRESS**, specifies: How an object should be represented&#x20;
* The file format, **STEP-file**, specifies: An actual object

Notice that we need both the data schema and the file format to understand our BIM model.&#x20;

**In other words:**

* The data schema is the **manual**
* The file format is the **usage** of the manual

**In object oriented programming words:**

* The data schema, EXPRESS, is the **class**
* The file format, STEP-file, is the **object**&#x20;

{% hint style="danger" %}
**Editor's note:**

I know that this can hard to understand. Please, take a good look at this article. Read it agian, think and reflect about the content.
{% endhint %}

&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bimwhale.gitbook.io/ifc-js/what-is-ifc/an-introduction-to-ifc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
