Referencing bSDD in IDS and IFC

Referencing bSDD in IFC and IDS

To associate a class from an external reference (such as bSDD) to objects in an IFC model, the following documentation shall be used.

The main IFC concept template to be used is: Classification Association

The main entities involved are:
IfcClassification
IfcClassificationReference
IfcRelAssociatesClassification

The next section indicates the mapping rules between the bSDD data model and IFC concepts used for class. To support this, snippets (βœ‚οΈ) of IFC files and bSDD dictionary files are reported as examples, click to open them.

openBIM workflows

The buildingSMART Data Dictionary is a key component in many openBIM workflows. Among other things, it allows to:
– access various kinds of standards to enrich an openBIM model
– check data for compliance
– provide concepts for Information Delivery Specifications (IDS)
– extend the IFC standard
– and much more, which you can read at: bSDD website

bSDD – IFC mapping

Mapping rules are defined for the following concepts:


1. bSDD dictionary

In bSDD, a dictionary (a.k.a., class system) is a standardised collection of object definitions, properties, and materials owned and maintained by one organisation. One organisation can own one or more dictionaries.

In IFC, dictionary information are captured using IfcClassification. Below are the mapping rules for different IFC versions.

bSDD IFC4x3_ADD2 IFC4 IFC2x3 IDS1.0
Dictionary name DictionaryName IfcClassification.Name IfcClassification.Name IfcClassification.Name ids:classification.system / (uri)*
Dictionary source uri of the dictionary IfcClassification.Specification IfcClassification.Location ❌ (IfcClassification.Source can be used as a workaround) uri
Dictionary version DictionaryVersion IfcClassification.Edition IfcClassification.Edition IfcClassification.Edition (uri)*
Dictionary owner OrganizationCode IfcClassification.Source IfcClassification.Source IfcClassification.Source (uri)*
Dictionary date ReleaseDate IfcClassification.EditionDate IfcClassification.EditionDate IfcClassification.EditionDate (uri)*

* IDS references bSDD using URI, instead of copying its content. Thanks to that, the information is still accessible by following the URI link. Note that the URI include many of those information: uri=”http://identifier.buildingsmart.org/uri/<OrganizationCode>/<DictionaryCode>/<DictionaryVersion>/....”

Snippets

βœ‚οΈ bSDD

{
    "OrganizationCode": "text",
    "DictionaryCode": "text",
    "DictionaryVersion": "text",
    "DictionaryName": "text",
    "ReleaseDate": null,
    "Status": "text",
    "MoreInfoUrl": "text",
    "UseOwnUri": false,
    "DictionaryUri": "text",
    "LanguageIsoCode": "text",
    "LanguageOnly": false,
    "License": "text",
    "LicenseUrl": "text",
    "QualityAssuranceProcedure": "text",
    "QualityAssuranceProcedureUrl": "text",
    "Classes": [], 
    "Properties": []
  }
βœ‚οΈ IFC4x3_ADD2 (IfcClassification)

/*           Source,   Edition, EditionDate,  Name,                Description,            Specification,                                                      ReferenceTokens  */
#1=IFCCLASSIFICATION('Molio',  '1.0',   '2023-08-27', 'CCI Construction',  'List of codes...',    'https://identifier.buildingsmart.org/uri/molio/cciconstruction/1.0', ('.'));
βœ‚οΈ IFC4 (IfcClassification)

/*           Source,   Edition, EditionDate,  Name,                Description,            Location,                                                      ReferenceTokens   */
#1=IFCCLASSIFICATION('Molio',  '1.0',   '2023-08-27', 'CCI Construction',  'List of codes...',    'https://identifier.buildingsmart.org/uri/molio/cciconstruction/1.0', ('.'));
βœ‚οΈ IFC2x3 (IfcClassification)

/*           Source,   Edition, EditionDate,  Name    */
#1=IFCCLASSIFICATION('Molio',  '1.0',   '2023-08-27', 'CCI Construction');

2. bSDD class (objects)

In bSDD, a class can be any (abstract) object (e.g. IfcWall), abstract concept (e.g. Costing) or process (e.g. Installation”.

In IFC, class information is captured using IfcClassificationReference. Below are the mapping rules, for different IFC versions.

bSDD IFC4x3_ADD2 & IFC4 IFC2x3 IDS1.0
Class name name of the class IfcClassificationReference.Name IfcClassificationReference.Name (uri)*
Class code code of the class IfcClassificationReference.Identification IfcClassificationReference.ItemReference (uri)*
Class identifier uri of the class IfcClassificationReference.Location IfcClassificationReference.Location uri

* IDS references bSDD using URI, instead of copying its content. Thanks to that, the information is still accessible by following the URI link. Note that the URI include many of those information: uri=”http://identifier.buildingsmart.org/uri/<OrganizationCode>/<DictionaryCode>/<DictionaryVersion>/class/<ClassCode>.”

Snippets

βœ‚οΈ bSDD class

{
    "Code": "text",
    "Uid": "text",
    "OwnedUri": "text",
    "Name": "text",
    "Definition": "text",
    "Status": "text",
    "ActivationDateUtc": "2022-05-12T00:00:00+02:00",
    "RevisionDateUtc": null,
    "VersionDateUtc": "2022-05-12T00:00:00+02:00",
    "DeActivationDateUtc": null,
    "VersionNumber": null,
    "RevisionNumber": null,
    "ReplacedObjectCodes": [],
    "ReplacingObjectCodes": [],
    "DeprecationExplanation": "text",
    "CreatorLanguageIsoCode": "text",
    "VisualRepresentationUri": "text",
    "CountriesOfUse": [],
    "SubdivisionsOfUse": [],
    "CountryOfOrigin": "text",
    "DocumentReference": "text",
    "Synonyms": [],
    "ReferenceCode": "text",
    "ClassRelations": [
      {
        "RelationType": "text",
        "RelatedClassUri": "text",
        "RelatedClassName": "text",
        "Fraction": null
      }
    ],
    "ClassType": "text",
    "ParentClassCode": "text",
    "RelatedIfcEntityNamesList": [],
    "ClassProperties": [
      {
        "AllowedValues": [
          {
            "Uri": "text",
            "Code": "text",
            "Value": "text",
            "Description": "text",
            "SortNumber": null
          }
        ],
        "Code": "text",
        "Description": "text",
        "IsRequired": null,
        "IsWritable": null,
        "MaxExclusive": null,
        "MaxInclusive": null,
        "MinExclusive": null,
        "MinInclusive": null,
        "Pattern": "text",
        "PredefinedValue": "text",
        "PropertyCode": "text",
        "PropertyUri": "text",
        "PropertySet": "text",
        "PropertyType": "text",
        "SortNumber": null,
        "Symbol": "text",
        "Unit": "text"
      }
    ]
}
βœ‚οΈ IFC4x3_ADD2 & IFC4

/*           Source,   Edition, EditionDate,  Name,                Description,            Specification,                                                      ReferenceTokens   */
#1=IFCCLASSIFICATION('Molio',  '1.0',   '2023-08-27', 'CCI Construction',  'List of codes...',    'https://identifier.buildingsmart.org/uri/molio/cciconstruction/1.0', ('.'));

/*                Location,                                                                        Identification, Name,             ReferencedSource, Description,           Sort   */
#2=IFCCLASSIFICATIONREFERENCE('https://identifier.buildingsmart.org/uri/molio/cciconstruction/1.0/class/L-BD', 'L-BD',         'Wall structure', #1,               'structural system...', $);

/*         GlobalId,                 OwnerHistory, Name, Description, ObjectType, ObjectPlacement, Representation, Tag, PredefinedType   */
#3=IFCWALL('3t3TDZl_D9NOIWB0BSjzJI', $,            $,    $,           $,          $,               $,              $,   $);

/*                    GlobalId,                 OwnerHistory, Name, Description, RelatedObjects, RelatingClassification  */
#4=IFCRELASSOCIATESCLASSIFICATION('2t3TDZl_D9NOIWB0BSjzJI', $,            $,    $,           (#3),           #2);
βœ‚οΈ IFC2x3

/*            Source,   Edition, EditionDate,  Name   */
#1=IFCCLASSIFICATION('Molio',  '1.0',   '2023-08-27', 'CCI Construction');

/*                Location,                                                                        ItemReference, Name,             ReferencedSource  */
#2=IFCCLASSIFICATIONREFERENCE('https://identifier.buildingsmart.org/uri/molio/cciconstruction/1.0/class/L-BD', 'L-BD',        'Wall structure', #1);

/*         GlobalId,                 OwnerHistory, Name, Description, ObjectType, ObjectPlacement, Representation, Tag   */
#3=IFCWALL('3t3TDZl_D9NOIWB0BSjzJI', $,            $,    $,           $,          $,               $,              $);

/*                    GlobalId,                 OwnerHistory, Name, Description, RelatedObjects, RelatingClassification    */
#4=IFCRELASSOCIATESCLASSIFICATION('2t3TDZl_D9NOIWB0BSjzJI', $,            $,    $,           (#3),           #2);
βœ‚οΈ IDS1.0

<ids:classification uri="https://identifier.buildingsmart.org/uri/bs-agri/fruitvegs/1.1/class/apple" cardinality="required" instructions="Those objects must be classified as apples.">
  <ids:value>
    <ids:simpleValue>apple</ids:simpleValue>
  </ids:value>
  <ids:system>
    <ids:simpleValue>fruitvegs</ids:simpleValue>
  </ids:system>
</ids:classification>

3. bSDD materials

In bSDD, a material is defined with a class of type ‘Material’. The main difference is in the mapping rules for IFC models. The bSDD class of type ‘Material’ should be linked to the IfcMaterial, which is then linked to various IfcObject.

In IFC, IfcMaterial are associated with objects through IfcRelAssociatesMaterial relation. However, when more than one material is associated with an element, there are many possible ways to define this relation through layer sets, profiles or constituents (% of content). Read more about: Material Association, in particular: Material Constituent Set, Material Layer Set Usage, Material Profile Set Usage, Material Set, Material Single.

Below are the mapping rules for different IFC versions.

bSDD IFC4x3_ADD2 & IFC4 IFC2x3 IDS1.0
Material name Class(Material).Name IfcMaterial.Name & IfcExternalReferenceRelationship.RelatingReference.IfcClassificationReference.Name IfcMaterial.Name (uri)*
Material code Class(Material).Code IfcExternalReferenceRelationship.RelatingReference.IfcClassificationReference.Identification IfcMaterialClassificationRelationship.IfcClassificationReference.ItemReference (uri)*
Material identifier Class(Material).Uri IfcExternalReferenceRelationship.RelatingReference.IfcClassificationReference.Location IfcMaterialClassificationRelationship.IfcClassificationReference.Location uri

* IDS references bSDD using URI, instead of copying its content. Thanks to that, the information is still accessible by following the URI link. Note that the URI include many of those information: uri=”http://identifier.buildingsmart.org/uri/<OrganizationCode>/<DictionaryCode>/<DictionaryVersion>/class/<MaterialCode>.”

Snippets

For the bSDD snippet, look at the bSDD classes (objects)

βœ‚οΈ IFC4x3_ADD2 & IFC4

/*           Source, Edition, EditionDate,  Name,                Description,            Specification,                                                      ReferenceTokens   */
#1=IFCCLASSIFICATION('bs-agri',  '1.1',     '2022-12-26', 'Fruit and vegetables', 'Demonstration dictionary', 'https://identifier.buildingsmart.org/uri/bs-agri/fruitvegs/1.1', ('.'));

/*                Location,                                                                   Identification, Name,     ReferencedSource, Description,           Sort   */
#2=IFCCLASSIFICATIONREFERENCE('https://identifier.buildingsmart.org/uri/sbe/swedishmaterials/1/class/CE--', 'CE--',         'Betong', #1,               'kompositmaterial...', $);

/*          Name,    Description,          Category   */
#3=IFCMATERIAL('Betong','kompositmaterial...','concrete');

/*                   Name,     Description,          RelatingReference, RelatedResourceObjects  */
#4=IFCEXTERNALREFERENCERELATIONSHIP('Betong', 'kompositmaterial...', #2,                (#3));
βœ‚οΈ IFC2x3

/*           Source, Edition, EditionDate, Name             */
#1=IFCCLASSIFICATION('bs-agri',  '1.1',    '2022-12-26', 'Fruit and vegetables');

/*                Location,                                                                   ItemReference, Name,     ReferencedSource */
#2=IFCCLASSIFICATIONREFERENCE('https://identifier.buildingsmart.org/uri/bs-agri/fruitvegs/1.1/class/fiber', 'fiber',        'Fiber', #1);
 IfcClassificationReference( $,**ItemReference**,$,$)

/*              Name      */
#3=IFCMATERIAL('Fiber');

/*                       MaterialClassifications, ClassifiedMaterial  */
#4=IFCMATERIALCLASSIFICATIONRELATIONSHIP(#2,                      #3);
βœ‚οΈ IDS1.0

<ids:material uri="https://identifier.buildingsmart.org/uri/bs-agri/fruitvegs/1.1/class/fiber" cardinality="required" instructions="The material should be called fiber.">
  <ids:value>
    <ids:simpleValue>fiber</ids:simpleValue>
  </ids:value>
</ids:material>

4. bSDD properties

In bSDD, a class (object) can have multiple properties, and a property can be part of many classes (objects).

In IFC, properties information are captured using IfcProperty (and grouped using IfcPropertySet). IfcProperty is an abstract definition, meaning it can not be instantiated. Instead, there are many forms it might take, with the most common being IfcPropertySingleValue.

Below are the mapping rules for different IFC versions.

bSDD IFC4x3_ADD2 IFC4 & IFC2x3 IDS1.0
Property name PropertyCode (of ClassProperty) IfcPropertySingleValue.Name IfcPropertySingleValue.Name (uri)*
Property identifier uri (of ClassProperty) IfcPropertySingleValue.Specification IfcPropertySingleValue.Description uri
Property predefined value (single value) PredefinedValue (of ClassProperty) IfcPropertySingleValue.NominalValue IfcPropertySingleValue.NominalValue (uri)*
Property unit (single value or from enumeration) PredefinedValue (of Property or ClassProperty) IfcPropertySingleValue.Unit IfcPropertySingleValue.Unit (uri)*
Property allowed values (from enumeration) AllowedValues (of Property or ClassProperty) IfcPropertyEnumeratedValue .EnumerationValues IfcPropertyEnumeratedValue .EnumerationValues (uri)*
PropertySet name PropertySet (of ClassProperty) IfcPropertySet.Name IfcPropertySet.Name (uri)*

* IDS references bSDD using URI, instead of copying its content. Thanks to that, the information is still accessible by following the URI link. Note that the URI include many of those information: uri=”http://identifier.buildingsmart.org/uri/<OrganizationCode>/<DictionaryCode>/<DictionaryVersion>/prop/<PropertyCode>.”

⚠️ IMPORTANT
In bSDD, properties exist independently of the class (object) they might be assigned to. Therefore:

  • The AllowedValues of a Property are defined at the level of each property.
  • The PredefinedValues of a Property is defined at the level of each class (object).
  • The relationship between a property and its property set is defined at the level of each class (object).
  • AllowedValues can be defined also at the level of each class (object). When this happens, the AllowedValue defined at the level of the Property is overwritten.

The human-readable and translatable Name that exists in bSDD has no reflection in IFC. That is why it is important to remember that the Code will be used in IFC datasets, and Name will only be displayed by software capable of reading the names from bSDD. The reason for this is that we need the datasets to follow consistent terms, regardless of the language displayed to the user.

Snippets

βœ‚οΈ bSDD property

{
    "Code": "text",
    "Uid": "text",
    "OwnedUri": "text",
    "Name": "text",
    "Definition": "text",
    "Status": "text",
    "ActivationDateUtc": "2022-05-12T00:00:00+02:00",
    "RevisionDateUtc": null,
    "VersionDateUtc": "2022-05-12T00:00:00+02:00",
    "DeActivationDateUtc": null,
    "VersionNumber": null,
    "RevisionNumber": null,
    "ReplacedObjectCodes": [],
    "ReplacingObjectCodes": [],
    "DeprecationExplanation": "text",
    "CreatorLanguageIsoCode": "text",
    "VisualRepresentationUri": "text",
    "CountriesOfUse": [],
    "SubdivisionsOfUse": [],
    "CountryOfOrigin": "text",
    "DocumentReference": "text",
    "Description": "text",
    "Example": "text",
    "ConnectedPropertyCodes": [],
    "PhysicalQuantity": "text",
    "Dimension": "text",
    "DimensionLength": null,
    "DimensionMass": null,
    "DimensionTime": null,
    "DimensionElectricCurrent": null,
    "DimensionThermodynamicTemperature": null,
    "DimensionAmountOfSubstance": null,
    "DimensionLuminousIntensity": null,
    "MethodOfMeasurement": "text",
    "DataType": "text",
    "PropertyValueKind": "text",
    "MinInclusive": null,
    "MaxInclusive": null,
    "MinExclusive": null,
    "MaxExclusive": null,
    "Pattern": "text",
    "IsDynamic": false,
    "DynamicParameterPropertyCodes": [],
    "Units": [],
    "AllowedValues": [
      {
        "Uri": "text",
        "Code": "text",
        "Value": "text",
        "Description": "text",
        "SortNumber": null
      }
    ],
    "TextFormat": "text",
    "PropertyRelations": [
      {
        "RelationType": "text",
        "RelatedPropertyUri": "text",
        "RelatedPropertyName": "text"
      }
    ]
}
βœ‚οΈ IFC2x3

/*                         Name,       Description,                               NominalValue, Unit */
#1=IFCPROPERTYSINGLEVALUE("EF021146", "https://identifier.buildingsmart.org/uri/etim/etim/9.0/prop/EF021146", $,            $);
βœ‚οΈ IFC4x3_ADD2

/*                         Name,       Specification,                             NominalValue, Unit */
#1=IFCPROPERTYSINGLEVALUE("EF021146", "https://identifier.buildingsmart.org/uri/etim/etim/9.0/prop/EF021146", $,            $);
βœ‚οΈ IDS1.0

<ids:property dataType="IFCLABEL" uri="http://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/prop/manufacturer" cardinality="required" instructions="One of the two manufacturers must be specified.">
  <ids:propertySet>
    <ids:simpleValue>Pset_ManufacturerTypeInformation</ids:simpleValue>
  </ids:propertySet>
  <ids:baseName>
    <ids:simpleValue>Manufacturer</ids:simpleValue>
  </ids:baseName>
  <ids:value>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Manufacturer 1" />
      <xs:enumeration value="Manufacturer 2" />
    </xs:restriction>
  </ids:value>
</ids:property>

 

Imported from MarkDown source file