In Part 2 we looked at the Root template and how it has 3 children: Object Definition, Relationship, and Property Definition. Within Part 2 we looked into Object Definition, in Part 3 we looked at Relationship, and so to complete the set here’s a post on the Property template.
So far we’ve dealt with many attributes, things like descriptions, IDs, and names. However, we appear to be missing an awful lot of additional information and the templates look kind of sparse when it comes to the extra design and construction details we’d usually expect to find in a construction and facilities management project.
Things like fire rating for walls, material grade for concrete, pipe thickness, and other information that is essential but have no specific attributes or templates available for them. In this post we’ll find out how to add these additional properties.
Exactly what extra pieces of information should be included for any piece of equipment can vary from country to country, company to company, and across different projects. Despite many attempts at creating a common standard for properties, it has so far proved to be an extraordinarily difficult task. The reasons for this will be left for a discussion another day!
For better or worse, IFC has the ability to add almost any type of extra information with very little restriction. This post we’re going to look at the exact mechanisms of doing so.
First up, I need to make the difference between attributes and properties very clear. When looking at the Oxford English Dictionary definitions, for us in construction and facilities management land there really isn’t a clear or useful difference so we’re not going to play pedant with the English language. Instead I’ll describe the words simply in terms of what they do in IFC.
In IFC an attribute is a part of a template. Attributes can not be changed by the user, they are a fundamental part of IFC. New attributes can’t be added and you can’t modify or remove existing attributes.
If you do change any attributes then you no longer have a working IFC file. It’s likely software will no longer be able to read it because you have broken the entire point of using IFC, which is to have your construction and facilities management project information in a format that computers can make assumptions about and do things with.
Unlike attributes, properties are less standard and up to a point we can choose what they are and we can add any number of them to an IFC file.
Wait! If I just said when we add, change, or remove attributes we break IFC, how on earth are we going to be able to add extra information with properties?? Have I lied to you? No, of course not, I would never do that to you dear reader. The way we handle this is fiendishly clever and allows us to keep information predictable.
To demonstrate this we’re going to make some properties of our very own, add them to a property set, and link them to a wall. The two properties we’re going to add are Course Style (Running, Flemish, English etc) and Mortar Thickness.
To keep the information format predictable, we obviously need to use standard IFC attributes and templates.
The first template we’re going to look at is simply called Property and is sort of a utility template. It isn’t from the main IFC family tree we talked about in Part 2 as it doesn’t have Root as it’s ultimate parent. However, it does have a number of children and grandchildren itself and so is just an additional little family tree in the IFC world.
Property has two attributes, Name and Description. This is very similar to the Root template that we looked at in Part 2 except that Name isn’t optional here (what would be the point of a property with no name?). For our two properties we will use the names “Course Style” and “Mortar Thickness”.
Property has two children, Simple Property and Complex Property. A Complex Property is not really available to use in any existing software so we’ll leave that and go with Simple Property.
Simple Property adds no additional attributes but has six children:
- Single: A simple single value. E.g. Text, number, true / false
- Enumerated: Restricts you to select one value from a predefined list of possible values.
- Bounded: Allows you to specify a minimum and maximum value in one property. E.g. tolerance.
- Table: A whole table of values. For example a sizing table for a valve.
- Reference: A link to another object.
- List: You could enter multiple values into a List property.
From this list you can see that IFC actually has a very wide range of possible types of values for properties, probably beyond what most would even consider as properties. Unfortunately, despite how useful they could be, most software can only handle a Single property and not the more advanced types so we’ll stick to that.
The Single value property gives us two new attributes. Nominal Value and Units. Units is optional so we won’t use it for Course Style, but we will need “mm” for mortar thickness. Nominal Value is where we’re going to store the actual values for our two new properties.
Single Value Properties
Let’s stop for a second here.
Do you see what we’ve done? We’ve just added additional information by using templates and attributes so our IFC is still completely valid and correct! Isn’t that clever?? Well, I think it is even if you don’t…
Anyway, now we know how to describe a Property, we need to put them into a Property Set.
The Property template isn’t descended from Root but the Property Set template is, which means it inherits a very useful Name attribute. Let’s call our Property Set “Brick Properties”. The other attribute we need is Has Properties, which is simply an attribute where we can store a list of filled in Property templates, which for us is the two properties we’ve just made, Course Style and Mortar Thickness.
|Name [optional]||Brick Properties|
|Description [optional]||Properties relating to the bricks in a wall.|
|Owner History||Tim Davies|
|Has Properties||Course Style, Mortar Thickness|
Linking to a wall
We now have our Property Set and just need to link it to a Wall. From Part 3 we know we’ll need a Defines relationship to act as a link between the property and the wall. Specifically, we’ll need a child of the Defines template called Defines By Properties.
This template has two attributes of interest, Related Objects and Relating Property Definition. Related Objects is a list of things that will have this Property Set, in our case it is just a single Wall. Relating Property Definition is a reference to the Property Set itself, which for us is the “Brick Properties” set we made.
Defines by Properties
|Owner History||Tim Davies|
|Related Objects||A wall|
|Relating Property Definition||Brick Properties|
So there we have it, we have put together Properties, a Property Set and created a link to an object.
That was rather super easy wasn’t it?
To sum up, we can’t add, remove, or change attributes or templates without breaking IFC, but we can use existing attributes and templates to add more properties. Property templates are filled in and then grouped together into a Property Set. The Property Set is then linked to a particular item using a Relationship.
In the next, and last, part of this mini series we’re going to bring together all that we’ve learned (Objects, Relationships, and Properties) to manually read the contents of an IFC file with just Notepad! Sounds scary, but I promise that it won’t be…