Selbstlernbereich

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

JSON Import
29. Januar 2026

JSON-Standard Dokumentation

Fabian Suda

Fabian Suda

Senior Developer

Diese Seite beschreibt den grundsätzlichen Aufbau sowie die Struktur eines bim-t-Standards im JSON-Format. Ziel ist es, transparent darzustellen, wie ein solcher Standard logisch gegliedert ist und welche Elemente er enthält, um eine einheitliche und nachvollziehbare Nutzung zu ermöglichen.

Die hier beschriebenen JSON-Strukturen dienen als technische Grundlage zur Abbildung von Standards innerhalb der bim-t-Umgebung. Auf Basis dieser Definitionen können strukturierte Dateien erstellt werden, die alle relevanten Informationen in maschinenlesbarer Form enthalten. Dadurch wird sichergestellt, dass Inhalte konsistent, erweiterbar und systemübergreifend nutzbar sind.

Die erstellten JSON-Dateien können anschließend direkt in die entsprechende Applikation importiert werden. Dort werden sie weiterverarbeitet und bilden die Basis für standardisierte Abläufe, Auswertungen oder Konfigurationen. Durch diesen Ansatz lassen sich Standards flexibel pflegen, versionieren und bei Bedarf an neue Anforderungen anpassen.

Der Artikel richtet sich sowohl an technisch versierte Anwender:innen als auch an Personen, die ein grundlegendes Verständnis für die Funktionsweise und den Nutzen der JSON-basierten Standards innerhalb von bim-t gewinnen möchten.

Sie können den Beispiel-Standard im JSON-Format hier herunterladen und direkt in bim-t ausprobieren:

StandardExport_ExportstrukturStandard.json

Grundstruktur

Hinweis: Inhalte im Feld description werden als Markdown interpretiert. Eine Übersicht der unterstützten Formatierungen finden Sie hier: Markdown-Format

{
  "standards": [
    {
      "id": "urn:uuid:temp__std1",
      "name": "Exportstruktur Standard",
      "version": "1.4.5",
      "description": "Beschreibung im Markdown Format\n\n# Überschrift 1\n## Überschrift 2\n\n*italic*\n**bold**\n\n> Zitat\n\n`codesimple`\n\n```\ncodeblock\n```\n\n[bim-t link](https://bim-t.com)\n\n- bullet1\n- bullet2\n- bullet3\n\n1. numlist\n2. numlist\n3. numlist\n\n- [ ] task1\n- [ ] task2\n- [x] task3(done)\n\n### Mathematische Formeln:\n[dokumentation/cheatsheet](https://www.upyesp.org/posts/makrdown-vscode-math-notation/)\n\n**The Cauchy-Schwarz Inequality**\n$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$\n\n**Summenbeispiel zentriert**\n$$\n\displaystyle\sum_{k=3}^5 k^2=3^2 + 4^2 + 5^2 =50\n$$",
      "features": [],
      "propertySets": [],
      "classificationSchemas": []
    }
  ]
}

Attribute:

  • description: Beschreibung im Markdown-Format (optional)
  • version: Versionsangabe nach SemVer (MAJOR.MINOR.PATCH) (optional)
  • features: Array der Features
  • propertySets: Array der PropertySets
  • classificationSchemas: Array der ClassificationSchemas

PropertySet

Beispiel eines PropertySets

{
  "id": "urn:uuid:temp__ps_custom",
  "name": "BimTSet_Custom",
  "description": "markdown beschreibung optional"
}

Feature (Merkmal)

Ein Feature beschreibt ein einzelnes Merkmal inklusive Datentyp und optionaler Zusatzinformationen.

Beispiel eines Textmerkmals

{
  "id": "urn:uuid:temp__f_text",
  "name": "TextMerkmal",
  "description": "",
  "type": {
    "__typename": "StringType"
  },
  "instanceValues": []
}

type: Es gibt folgende Typen, die in __typename definiert sein können:
  • BooleanType : Boolescher Wert (IFCBOOLEAN)
  • DateTimeType: ISO 8601 Date+Time
  • DateType: ISO 8601 Date
  • DurationType: ISO 8601 Duration Strings
  • LogicalType: Logischer Wert Ja / Nein / Unbekannt (IFCLOGICAL)
  • ReferenceType: Auch ein Textmerkmal generiert, aber IFCREFERENCE
  • StringType: Textmerkmal (generiert IFCLABEL oder IFCTEXT, abhängig der Länge des Textes)
  • TimeStampType: Zeitstempel (IFCTIMESTAMP)
  • TimeType: ISO 8601 Time
  • YearMonthType: ISO 8601 Date (Aber nur mit Jahres-/Monatsangabe YYYY-MM)
  • YearType: ISO 8601 Date (Aber nur mit Jahresangabe YYYY)
  • EnumerationType: Enumerationsmerkmal (derzeit nur mit String-Werten), für Textmerkmale, die grundsätzlich nur bestimmte Ausprägungen haben dürfen
  • NumericType: Numerisches Merkmal (siehe Beschreibung unten)
  • OtherType: Derzeit verwendet für alle Merkmale, die von bim-t noch nicht unterstützt werden. (z.B. IFCBINARY)

Enumerationsmerkmal

Beispiel eines Enumerationsmerkmals mit drei Werten und ohne Mehrfachauswahl

{
  "id": "urn:uuid:temp__f_enum",
  "name": "Enumeration",
  "description": "",
  "type": {
    "id": "urn:uuid:temp_f_enumtype1",
    "__typename": "EnumerationType",
    "options": [
      {
        "id": "urn:uuid:temp__f_enum_val1",
        "value": {
          "__typename": "StringValue",
          "stringValue": "Wert1"
        },
        "description": "Beschreibung Wert1"
      },
      {
        "id": "urn:uuid:temp__f_enum_val2",
        "value": {
          "__typename": "StringValue",
          "stringValue": "Wert2"
        },
        "description": "Beschreibung Wert2"
      },
      {
        "id": "urn:uuid:temp__f_enum_val3",
        "value": {
          "__typename": "StringValue",
          "stringValue": "Wert3"
        },
        "description": "Beschreibung Wert3"
      }
    ],
    "allowMultiple": false
  }
}

Numerische Merkmale

Numerische Merkmale haben die zusätzlichen Attribute quantityKind, unit, integer, signRestriction:

  • quantityKind: Messgröße
  • unit: Einheit
  • integer: Ganze Zahl (ja / nein)
  • signRestriction: Zeichenbeschränkung
    • UNRESTRICTED
    • NONZERO
    • NONZERO_POSITIVE
    • NONZERO_NEGATIVE
    • ZERO_OR_NEGATIVE
    • ZERO_OR_POSITIVE

Beispiel Zeit in Sekunden (ganzzahlig)

{
  "id": "urn:uuid:temp__f_time",
  "name": "ZeitInSekunden",
  "description": "",
  "type": {
    "__typename": "NumericType",
    "integer": true,
    "signRestriction": "UNRESTRICTED",
    "quantityKind": "http://qudt.org/vocab/quantitykind/Time",
    "unit": "http://qudt.org/vocab/unit/SEC"
  }
}

Beispiel Länge in Meter

{
  "id": "urn:uuid:temp__f_length",
  "name": "LaengeMeter",
  "description": "",
  "type": {
    "__typename": "NumericType",
    "integer": false,
    "signRestriction": "UNRESTRICTED",
    "quantityKind": "http://qudt.org/vocab/quantitykind/Length",
    "unit": "http://qudt.org/vocab/unit/M"
  }
}

Beispiel Positive Länge in Zentimeter

{
  "id": "urn:uuid:temp__f4",
  "name": "PosLaengeInCM",
  "description": "",
  "type": {
    "__typename": "NumericType",
    "integer": false,
    "signRestriction": "NONZERO_POSITIVE",
    "quantityKind": "http://qudt.org/vocab/quantitykind/PositiveLength",
    "unit": "http://qudt.org/vocab/unit/CentiM"
  }
}

Hinweis: Die in den Merkmalen verfügbaren Messgrößen und Einheiten können in der QUDT-Tabelle nachgelesen werden.

Klassifikationsschema

{
  "id": "urn:uuid:temp_schema1",
  "name": "TestSchema",
  "ifcVersionName": "IFC 2x3 TC1",
  "description": "Markdown fähig",
  "criteria": [
    {
      "level": 0,
      "accessor": {
        "__typename": "SourceAsType",
        "value": "ELEMENT_CLASS"
      }
    },
    {
      "level": 1,
      "accessor": {
        "__typename": "SourceAsType",
        "value": "ELEMENT_PREDEFINEDTYPE"
      }
    },
    {
      "level": 2,
      "accessor": {
        "__typename": "SourceAsType",
        "value": "ELEMENT_OBJECTTYPE"
      }
    },
    {
      "level": 3,
      "accessor": {
        "__typename": "FeatureAccessor",
        "feature": {
          "__typename": "Feature",
          "id": "urn:uuid:temp__f_enum",
          "name": "Enumeration"
        },
        "propertySet": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__ps_custom"
        }
      }
    },
    {
      "level": 4,
      "accessor": {
        "__typename": "FeatureAccessor",
        "feature": {
          "__typename": "Feature",
          "id": "urn:uuid:temp__f_text",
          "name": "TextMerkmal"
        },
        "propertySet": null
      }
    }
  ],
  "classifications": []
}

Beispiel Klassifikation Simpel

{
  "id": "urn:uuid:temp__cl_1",
  "name": "Klassifikation Simpel",
  "description": "",
  "requirements": [
    {
      "allowedValues": [
        {
          "__typename": "StringValue",
          "stringValue": "xyz"
        },
        {
          "__typename": "StringValue",
          "stringValue": "123"
        },
        {
          "__typename": "StringValue",
          "stringValue": "abc"
        }
      ],
      "tags": [],
      "feature": {
        "id": "urn:uuid:temp__f_text",
        "name": "TextMerkmal"
      },
      "optional": false,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    },
    {
      "allowedValues": [
        {
          "__typename": "FloatValue",
          "floatValue": 1.5
        },
        {
          "__typename": "FloatValue",
          "floatValue": 4.2
        }
      ],
      "tags": [],
      "feature": {
        "id": "urn:uuid:temp__length",
        "name": "LaengeMeter"
      },
      "optional": false,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    },
    {
      "allowedValues": [
        {
          "__typename": "IntegerValue",
          "integerValue": 2
        },
        {
          "__typename": "IntegerValue",
          "integerValue": 3
        },
        {
          "__typename": "IntegerValue",
          "integerValue": 4
        }
      ],
      "tags": ["LOI100", "LOI200", "LOI300"],
      "feature": {
        "id": "urn:uuid:temp__f_time",
        "name": "ZeitInSekunden"
      },
      "optional": true,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    },
    {
      "allowedValues": [
        {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__f_enum_val1"
        },
        {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__f_enum_val2"
        }
      ],
      "tags": ["LOI100", "LOI200"],
      "feature": {
        "id": "urn:uuid:temp__f_enum",
        "name": "Enumeration"
      },
      "optional": false,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    }
  ],
  "condition": {
    "__typename": "ConditionGroup",
    "connective": "AND",
    "conditions": [
      {
        "__typename": "ElementCondition",
        "source": "ELEMENT_CLASS",
        "predicate": "EQUALS",
        "value": {
          "__typename": "IDValue",
          "idValue": "https://bim-t.com/bt-ifc#IfcElement"
        }
      },
      {
        "__typename": "SingleCondition",
        "feature": {
          "id": "urn:uuid:temp__f_text",
          "name": "TextMerkmal"
        },
        "propertySet": null,
        "predicate": "EQUALS",
        "value": {
          "__typename": "StringValue",
          "stringValue": "test"
        }
      },
      {
        "__typename": "SingleCondition",
        "feature": {
          "id": "urn:uuid:temp__f_enum",
          "name": "Enumeration"
        },
        "propertySet": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__ps_custom"
        },
        "predicate": "HAS",
        "value": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__f_enum_val2"
        }
      }
    ]
  }
}

Beispiel Klassifikation mit Bedingungen

{
  "id": "urn:uuid:temp__cl_2",
  "name": "Klassifikation mit Bedingungen",
  "description": "",
  "requirements": [
    {
      "condition": {
        "__typename": "SingleCondition",
        "feature": {
          "id": "urn:uuid:temp__f_poslength",
          "name": "PosLaengeInCM"
        },
        "propertySet": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__ps_custom"
        },
        "predicate": "GREATER_THAN",
        "value": {
          "__typename": "FloatValue",
          "floatValue": 100
        }
      },
      "allowedValues": [],
      "tags": [],
      "feature": {
        "id": "urn:uuid:temp__f_poslength",
        "name": "PosLaengeInCM"
      },
      "optional": false,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    },
    {
      "precondition": {
        "__typename": "SingleCondition",
        "feature": {
          "id": "urn:uuid:temp__f_enum",
          "name": "Enumeration"
        },
        "propertySet": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__ps_custom"
        },
        "predicate": "HAS",
        "value": {
          "__typename": "IDValue",
          "idValue": "urn:uuid:temp__f_enum_val1"
        }
      },
      "allowedValues": [],
      "tags": [],
      "feature": {
        "id": "urn:uuid:temp__length",
        "name": "LaengeMeter"
      },
      "optional": false,
      "propertySet": {
        "__typename": "IDValue",
        "idValue": "urn:uuid:temp__ps_custom"
      }
    }
  ],
  "condition": {
    "__typename": "ConditionGroup",
    "connective": "OR",
    "conditions": [
      {
        "__typename": "ConditionGroup",
        "connective": "AND",
        "conditions": [
          {
            "__typename": "SingleCondition",
            "feature": {
              "id": "urn:uuid:temp__f_enum",
              "name": "Enumeration"
            },
            "propertySet": {
              "__typename": "IDValue",
              "idValue": "urn:uuid:temp__ps_custom"
            },
            "predicate": "HAS",
            "value": {
              "__typename": "IDValue",
              "idValue": "urn:uuid:temp__f_enum_val2"
            }
          },
          {
            "__typename": "ElementCondition",
            "source": "ELEMENT_CLASS",
            "predicate": "EQUALS",
            "value": {
              "__typename": "IDValue",
              "idValue": "https://bim-t.com/bt-ifc#IfcSlab"
            }
          }
        ]
      },
      {
        "__typename": "ConditionGroup",
        "connective": "AND",
        "conditions": [
          {
            "__typename": "SingleCondition",
            "feature": {
              "id": "urn:uuid:temp__f_enum",
              "name": "Enumeration"
            },
            "propertySet": {
              "__typename": "IDValue",
              "idValue": "urn:uuid:temp__ps_custom"
            },
            "predicate": "HAS",
            "value": {
              "__typename": "IDValue",
              "idValue": "urn:uuid:temp__f_enum_val1"
            }
          },
          {
            "__typename": "ElementCondition",
            "source": "ELEMENT_CLASS",
            "predicate": "EQUALS",
            "value": {
              "__typename": "IDValue",
              "idValue": "https://bim-t.com/bt-ifc#IfcWall"
            }
          }
        ]
      }
    ]
  }
}

Regeln für Klassifikationsbedingungen

  • Klassifikationsbedingungen dürfen derzeit nur Merkmale enthalten, die auch in den Kriterien criteria des Klassifikationsschemas enthalten sind.
  • Dabei darf in jeder ConditionGroup ein definiertes Kriterium nur einmal vorkommen und mit einem AND-connective verbunden werden.
  • Gibt es mehrere mögliche Bedingungen (siehe Beispiel), so müssen diese mit einer ConditionGroup und dem OR-connective verbunden werden.
  • Enumerationsmerkmale MÜSSEN mit dem Predicate HAS und einem idValue, der auf den Enum-Wert referenziert, verwendet werden.
  • Alle anderen Merkmale MÜSSEN mit dem Predicate EQUALS und einem korrekten TypedValue angeführt werden, z.B.:
    • String- und Reference-Merkmale: StringValue / stringValue
    • Boolesche Merkmale: BooleanValue / booleanValue
    • weitere Typen entsprechend ihrer Definition

Beschreibung für Requirements

  • precondition: Beliebige Bedingung, die gelten muss, damit diese Anforderung erforderlich ist (optional)
  • condition: Beliebige Bedingung, die zusätzlich zum Merkmal erfüllt sein muss
  • optional: Definiert eine optionale Bedingung (ist das Merkmal nicht vorhanden, gilt die Anforderung als erfüllt; ist es vorhanden, muss es gültig sein)
  • tags: String-Array, das z.B. die LOIs definiert, für die diese Anforderung gültig sein muss (ACHTUNG: Anforderungen OHNE Tags werden IMMER geprüft)

Beschreibung für SingleConditions

  • predicate:
    • NOT
    • EQUALS (bei Enumerationsmerkmalen stattdessen HAS verwenden)
    • CONTAINS
    • CONTAINS_NOT
    • MATCHES (JavaScript-RegEx)
    • PRESENT (vorhanden)
    • NOT_PRESENT (nicht vorhanden)
    • HAS
    • HAS_NOT
    • LESS_THAN
    • LESS_OR_EQUALS
    • GREATER_THAN
    • GREATER_OR_EQUALS