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

 
Beschreibung
Expression
Aktuellen Eigenschaftswert abrufen:$property.value()
 
Name des Property Sets abrufen, in dem sich die Eigenschaft befindet:$property.propertySet.name()
 
Name des Typs des aktuellen Elements abrufen:$element.type().name()
 
Wert der Eigenschaft myProp aus dem Property Set myPset des aktuellen Elements abrufen:$element.propertySet(‘myPset’).property(‘myProp’).value()
 
Alternative Schreibweise:VALUE(PROPERTY(PROPERTY_SET($element, ‘myPset’),‘myProp’))
 
Prüfen, ob die Eigenschaft myProp im Property Set myPset im aktuellen
Element 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"
  • booleanTRUE, 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),
toIfcDateTime(a)
** **LISTE VERVOLLSTÄNDIGEN**
 

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)