Selbstlernbereich

Fundiertes Wissen für den sicheren Umgang mit unserer BIM-Anwendung.

IFC-Editor-Formeldokumentation
• 18. November 2025

Dokumentation der Formelsprache in Regeln

René Holzer

René Holzer

Product Owner

Dieses Projekt definiert eine Ausdrückesprache („Expression Language”) für IFC-Modelle.
Ein Ausdruck wird im Kontext eines Elements des IFC-Modells sowie einer spezifischen Eigenschaft dieses Elements ausgewertet.
 

Folgende Themen werden hier behandelt:

Schnittstelle

 

Es gibt zwei Wege, mit ifc-expression zu interagieren:

  • Einen Ausdruck direkt auswerten — Ergebnis: ExprEvalSuccessResult | ExprEvalError
  • Oder:
    • Einen Ausdruck parsen — Ergebnis: IfcExpressionParseResult
    • Einen IfcExpressionParseResult auswerten — Ergebnis: ExprEvalSuccessResult | ExprEvalError
       

Verwendung

 

Um ifc-expressions mit Ihrem IFC-Modell zu verbinden, müssen Sie eine Implementierung von
src/context/IfcExpressionContext bereitstellen. Ohne einen solchen Kontext können Ausdrücke, die Referenzen auf das Modell enthalten, nicht ausgewertet werden.
 

import {IfcExpression} from "ifc-expression";
import {IfcExpressionContext} from "./IfcExpressionContext";
const result = IfcExpression.evaluate("1 + 1"); // Auswertung ohne Kontext
console.log(JSON.stringify(result));
// ExprEvalSuccessObj {
// status: 1000,
// result: NumericValue {
// value: 2
// }
//}
const ctx: IfcExpressionContext = ... ; // hier Ihren Kontext einfügen
const result2 = IfcExpression.evaluate("$element.property('width').value() * 2 ", ctx);

 

Kurzübersicht

Die folgenden Beispiele zeigen häufig verwendete Zugriffe auf das aktuelle Element und seine Merkmale:

Aktuellen Merkmalswert abrufen

Ruft den Wert des Merkmals ab, das von der Aktion verändert werden soll.

$property.value()

Namen des Property Sets abrufen

Ruft den Namen des Property Sets ab, in dem sich das aktuelle Merkmal befindet.

$property.propertySet.name()

Namen des Elementtyps abrufen

Ruft den Namen des Typs des aktuellen Elements ab.

$element.type().name()

Merkmalswert aus einem bestimmten Property Set abrufen

Ruft den Wert des Merkmals myProp aus dem Property Set myPset des aktuellen Elements ab.

$element.propertySet("myPset").property("myProp").value()

Alternative Funktionsschreibweise verwenden

Ruft denselben Merkmalswert wie im vorherigen Beispiel in Funktionsschreibweise ab.

VALUE(PROPERTY(PROPERTY_SET($element, "myPset"), "myProp"))

Existenz eines Merkmals prüfen

Prüft, ob das Merkmal myProp im Property Set myPset des aktuellen Elements existiert.

$element.propertySet("myPset").property("myProp").exists()

Hinweise:

  • Funktions-/Methodennamen sind nicht case-sensitive
  • Operatoren:
    • + - * / ^ für numerische Werte
    • && || >< ! für Booleans (>< = xor)
    • == != >= <= > < für Strings, Booleans und numerische Werte
  • .toString() ist auf allen Typen verfügbar
  • REPLACE, MATCHES, CONTAINS nutzen nur das Wildcard *
  • REGEXREPLACE, REGEXMATCHES, REGEXCONTAINS nutzen vollständige JavaScript-RegExps

IFC Expression Language Syntax

Das Projekt verwendet ANTLR4 für das Parsing.
Die Grammatik befindet sich in src/grammar/ifcExpression.g4.

Ein Ausdruck liefert einen Wert des Typs:

  • string
  • numeric
  • boolean
  • ifcObjectRef
  • oder einen temporalen Typ (IfcDateTime, IfcDate, IfcTime, IfcDuration, IfcTimeStamp)

Es kann nur ein einzelner Ausdruck angegeben werden.
Es gibt keine Kontrollstrukturen oder benutzerdefinierten Funktionen/Typen.

Ausdrucksarten

Ein Ausdruck kann sein:

  • ein Literal wie 'hello world' oder 17
  • eine Variablenreferenz wie $property oder $element
  • ein Funktionsaufruf, z. B. REPLACE("hello", "he", "hi")
  • ein Methodenaufruf, z. B. "hello".replace("he","hi")
  • ein Ausdruck mit Operatoren wie +, &&, ==

Datentypen

  • string — z. B. 'abc' oder "abc"
  • boolean — TRUE, false
  • numeric — z. B. 1, 3.141
  • array — z. B. [1,2,"hi"]  

Operatoren

Numerische Operatoren

  • + Addition
  • - Subtraktion
  • * Multiplikation
  • / Division
  • ^ Potenzierung  

Boolesche Operatoren

  • && AND
  • || OR
  • >< XOR
  • ! NOT

String-Operatoren

  • + String-Konkatenation  

Funktionen

Konvertierungsfunktionen

toString(a)
toNumeric(a)
toBoolean(a)
toIfcDate(a)
toIfcDateTime(a)
toIfcTime(a)
toIfcDuration(a)
toIfcTimeStamp(a)
toUpperCase()
toLowerCase()
substring(from, to)
substring(from)
split(start)
split(start, end)

Temporale Funktionen

addDuration(IfcTimeStamp|IfcDateTime, IfcDuration)

Vergleichsfunktionen

equals(a,b)
greaterThan(a,b)
greaterThanOrEquals(a,b)
lessThan(a,b)
lessThanOrEqual(a,b)

Boolesche Funktionen

not(a)
and(a,b)
or(a,b)
xor(a,b)
implies(a,b)

String-Matching

contains(string, pattern)
regexContains(string, regex)
matches(string, pattern)
regexMatches(string, regex)

String-Ersetzung

replace(string, pattern, replacement)
regexReplace(string, regex, replacement)

IFC-Objektzugriff

property(object, name)
propertySet(object)
propertySet(object, name)
type(object)
exists(object)

Übersetzungs- & Bedingungsfunktionen

map(input, mapping, default)
if(condition, thenValue, elseValue)
choose(mapping, default)