A Gentle Introduction to IDS
Published on

David Ghitulescu
OpenBIM advocate and technical lead at Sortdesk

The Problem
Context
You want to ensure the Quality of an IFC file, this usually implies:
- all parties agreeing on a set of criteria and their meaning
- writing a document (e.g. excel) which lists all of the above
- when an IFC is ready for checking:
- go through each item in the IFC file
- and compare against all the applicable requirements
If this is a manual process process even if each criterial take 1 sec to check, multiply it by 20 criteria and 1000 items and it becomes hours or days of QA.
What IDS is
Information Delivery Specification is a structured text document which defines how the data inside an IFC file should be structured.
You can find a concrete example (specifications.ids) of how it looks towards the end of this article, but that is generally not relevant as the main way to interact with it will be through various IDS Editors which provide a user interface.
What IDS solves
Generally speaking, IDS helps you define alphanumeric requirements for the entities inside the IFC file, it does not process the geometry so you can’t use it for geometric requirements (level of detail, collisions, tolerances, closed loops, alignments, etc.)
An IDS file:
- forces specifying concrete alphanumeric values
- i.e. no room for ambiguity
- is machine readable & checkable against an IFC file
- i.e. the QA process is reduced to pressing a button
- is backed by an interoperable set of standards
- i.e. once a requirement is defined it could be reused across different projects or companies
What it CAN do
- filter and check any combination of concrete alphanumeric values, text patterns or ranges
- e.g. “the Name is Room-XX where X is a digit”, “the Length is >= 2 and <= 3”
- work with IFC2X3, IFC4, IFC4x3_ADD2
- access attributes, classifications, any IFC entity, materials, properties
- e.g. “when a Flooring’s Element Type is ‘Wood’, it’s material must be ‘Wood-O-52’”
- filter and check relationships (generally: X is a part of Y)
- e.g. “IfcMembers must be aggregated in Girder IfcElementAssembly”
What it CANNOT (yet) do
- check for uniqueness e.g. “All Room names must be unique”
- aggregate values e.g. “Total area must be < 100m^2”
- count entities e.g. “There must be 2 fire exit doors per floor”
- compare values e.g. “Expiration Date > Installation Date + 5 years”
- clash detection (or anything geometric)
Note: Values for areas, heights, lengths, etc. can be checked if they are pre-calculated and stored as attributes or properties
A concrete requirement
Let’s take the example of "all IFC columns are called 'Column Precast 300x300' or 'Column Precast 500x500'"
to write as a specification & check it against an IFC file.
Generating an .ids file
While you technically could write a .ids file by hand, it’s much handier to use an interface to do it. I’ll use viewer.sortdesk.com, but it’s an interchangeable file: you can generate it with any application and run it with any other
Note: (currently IDS v1.0 is the version that is widely supported, but in the future you might want to check that the tool you’re using generates the version you want)
- Pick the Specification name and applicable IFC Versions:
- name:
Column naming
- version:
IFC2x3
- name:
- Select under what condition the rule applies:
is Entity
:- name:
IFCCOLUMN
- name:
- Select the requirements:
has Attribute
:- name:
Name
- value: enumeration of
Column Precast 300x300
andColumn Precast 500x500
- name:
For a step-by-step tutorial on using this interface, see this tutorial.
This creates a file which under the hood looks like:
Click to expand the specifications.ids file
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ids xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://standards.buildingsmart.org/IDS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://standards.buildingsmart.org/IDS http://standards.buildingsmart.org/IDS/1.0/ids.xsd">
<info>
<title>New IDS</title>
</info>
<specifications>
<specification name="Column naming" ifcVersion="IFC2X3">
<applicability>
<entity>
<name>
<simpleValue>IFCCOLUMN</simpleValue>
</name>
<predefinedType>
<simpleValue></simpleValue>
</predefinedType>
</entity>
</applicability>
<requirements>
<attribute>
<name>
<simpleValue>Name</simpleValue>
</name>
<value>
<xs:restriction>
<xs:enumeration value="Column Precast 300x300"></xs:enumeration>
<xs:enumeration value="Column Precast 500x500"></xs:enumeration>
</xs:restriction>
</value>
</attribute>
</requirements>
</specification>
</specifications>
</ids>
Running the checks
This specifications.ids
file can be given alongside your_model.ifc
to any IDS Checker to obtain a result,
which in this case means pressing “Check Loaded Model” to get a visualization of the failures:
- For a step-by-step tutorial on how to run files in the interface above, see this tutorial.
- You also have the option of creating a gate with a preloaded IDS file and share the link where you just drag & drop the file