04_Язык IFCQL

Version 12.1 by Bimit Administrator on 17.04.2026, 13:51

IFCQL - внедрение языка в BIMIT

Общее описание

IFCQL - это язык запросов к объектной модели здания, представленной в формате IFC

Формат представления логического выражения соответствует подмножеству спецификации JPQL (язык запросов к объектной базе данных)

https://openjpa.apache.org/builds/3.2.2/apache-openjpa/docs/index.html#jpa_langref_cond

Семантика операндов максимально приближена к формату IDS

Имена переменных и их значения

имена переменных могут содержать символы А-Я, а-я, A-Z, a-z, _,-,(,),#, $, ‘,’, ‘ ‘, [,],|, ,\

имена переменных (и их частей) в строке выражения должны быть взяты в символ двойные кавычки (при наличии в них символа пробела, точки, слеша скобок, или одинарной кавычки ), например:

property."Размеры"."Ширина ступени (в мм. или ‘ ) / ширина марша" > 200.23

Если внутри имени содержится двойная кавычка, то ее необходимо маскировать левым слешем - \”

значения переменных могут содержать символы А-Я, а-я, A-Z, a-z, _,-,(,),#, $, ‘,’, ‘ ‘,  \ [,],|, ;, δ,Ø

значения переменных в строке выражения должны быть взяты в символ двойные кавычки, если переменная строковая:

"200 (мм.)"

Если внутри имени содержится двойная кавычка, то ее необходимо маскировать левым слешем - \”

Операторы выражения

Оператор

Действие

+

сложение

-

вычитание

/

деление

*

умножение

=

равенство

>=

больше или равно

<=

меньше или равно

>

больше

<

меньше

!=

не равно

not like

не содержит

like

содержит часть

and

логическое “И”

or 

логическое “ИЛИ”

not null

имеет значение

is null

не имеет значение

in

состоит в множестве

||

конкатенация

Операнды выражения

Операнд

Описание

Пример

Примечание

entity

IFC класс

 

entity = "IfcWall"

 

classification

Классификация элемента

classification = "Uniclass.01_02"

 classification in ("BIMIT Проверки".0-1,Uniclass.01_03)

 

в данной итерации разработки оператор in не применим 

attribute

Атрибут элемента IFC

attribute.Width = 200

 

property

Свойство 

property.Огнестойкость.Тип = 1

 

parent

child

ancestor

descendant

 

Связь через уровни родительского дерева

parent.IfcBuilding.property.Общие.Тип = 1

ancestor.IfcSite.property.Общие.Тип = 1

 

material

Элемент содержит материал

material = "Бетон 25"

 

()

группировка в операнд

  

geom

обращение к параметрам геометрии

geom.TotalSurfaceArea

geom.TotalShapeVolume

geom.SurfaceAreaAlongX 

geom.SurfaceAreaAlongY

geom.SurfaceAreaAlongZ

geom.BoundingBoxSizeAlongX

geom.BoundingBoxSizeAlongY

geom.BoundingBoxSizeAlongZ

geom.LargestFaceArea

 

model

обращение к модели

model = "КР"

 

floor

этаж

аналог

partOf(IFCRELNESTS, IFCBUILDINGSTORE).attribute.name="Этаж 1"

 

layer

слой

аналог

partOf(IFCRELNESTS, IFCBUILDLAYER).attribute.name="слой 1"

 

group

Группировка

group = "1 группа"

 

identification

Идентификация

identification.PropIfcId

identification.PropId

identification.PropName

 
  • Parent – элемент, находящийся на один уровень выше по дереву элементов.
  • Child – элемент, находящийся на один уровень ниже по дереву элементов.
  • Ancestor – элемент, который находится выше по дереву элементов.
  • Descendant – элемент, который находится ниже по дереву элементов.

1776422167825-824.png

Для элемента BuildingStorey элементы Site и Building являются Ancestors, при этом Building выступает в роли Parent.

Элементы Beam, Column и WallStandartCase являются Descendants, при этом Beam и Column являются Childs.

1776422167832-476.png

Происходит поиск родственника с указанным IFC-классом, содержащим конкретный атрибут.

Имена переменных (и их частей) в строке выражения должны быть взяты в символ двойные кавычки (при наличии в них символа пробела, точки, слеша скобок, или одинарной кавычки ), например:

property."Размеры"."Ширина ступени (в мм. или ‘ ) / ширина марша" > 200.23

Пример IFCQL

ПараметрВыбор сравненияПример ifcql
МодельЛюбаяmodel is any
Равноmodel = "АР-АР"
Не равноmodel != "КР"
Содержитmodel like "АР"
Не содержитmodel not like "КР"

Этаж

 

Равноfloor = 'Этаж 2'
Не равноfloor != 'Этаж 3'
Содержитfloor like '2'
Не содержитfloor not like '3'

IFC-тип

 

Равноentity = 'IfcWindow'
Не равноentity != 'IfcWindow'
Содержитentity like 'window'
Не содержитentity not like 'pile'

Зона

 

Равноzone = '318'
Не равноzone != 1111
Содержитzone like 31
Не содержитzone not like 4

Слои

 

Равноlayer = 'A-GLAZ-____-OTLN'
Не равноlayer != 'glaz'
Содержитlayer like 'glaz'
Не содержитlayer not like 'door'
АтрибутРавноproperty."IFC_0_Идентификация_Несколько категорий"."8. Категория" = 'Окна'
Не равноproperty."IFC_0_Идентификация_Несколько категорий"."8. Категория" != 'Дверь'
Большеproperty.OverallWidth > 590
Меньшеproperty.OverallWidth < 3000
Больше или равноproperty.OverallWidth >= 600
Меньше или равноproperty.OverallWidth <=2740
Содержитproperty.OverallWidth like 0 or property.OverallWidth like 5
Не содержитproperty.OverallWidth not like "string"
Имеет значениеproperty.OverallWidth not null
Не имеет значенияproperty."IFC_0_Идентификация_Несколько категорий"."Атрибут" is null
Значение из набораproperty.OverallWidth in ("2740", "2220", "1960", "1180", "1000", "975", "600")
СтрокаtypeOf(property."IFC_0_Идентификация_Несколько категорий"."1. Семейство и типоразмер", string)
ЧислоtypeOf(property.OverallWidth, double, mm)
ДиапазонtypeOf(property.OverallWidth, range, 600, 3000)
Классификатор classification = "Классификатор/1-1"

Геометрия

 

Равноgeom.TotalSurfaceArea = 11.5888045433455
Не равноgeom.TotalSurfaceArea != 9999
Большеgeom.TotalSurfaceArea > 1
Меньшеgeom.TotalSurfaceArea < 42
Больше или равноgeom.TotalSurfaceArea >= 1.3808
Меньше или равноgeom.TotalSurfaceArea <= 42
Содержитgeom.TotalSurfaceArea not null
Не содержитgeom.TotalSurfaceArea is null
Идентификация  
Идентификатор элемента IFCРавноidentification.propIfcId = '1frPR7$Cv8DvigHLricagB'
Не равноidentification.propIfcId != '1frPR7$Cv8DvigHLricagB'
Содержитidentification.propIfcId like 'cagB'
Не содержитidentification.propIfcId not like 'true'
Элемент из набораidentification.propIfcId in ("1iEabr5VfAtezMZlBWDYPn", "1iEabr5VfAtezMZlBWDYyZ", "1iEabr5VfAtezMZlBWDYPs")
Идентификатор элемента ревизииРавноidentification.propId = "8cab2777-d21e-4544-b4e8-d1dfaf63292e"
Не равноidentification.propId != "857b6c89-8141-4c30-9735-94f679eac2a2"
Содержитidentification.propId like "292e"
Не содержитidentification.PropId not like "true"
Название элементаРавноidentification.propName = "Воздуховод прямоугольного сечения:ADSK_Без огнезащиты_Врезки_ГОСТ 14918-80:1636934"
Не равноidentification.propName != "Воздуховод"
Содержитidentification.propName like "Воздуховод"
Не содержитidentification.propName not like "Дверь"
ГруппировкаРавноgroup = "Окна"
Не равноgroup != "Окна"
Содержитgroup like "Окна"
Не содержитgroup not like "Окна"
МатериалыРавноmaterial = "ADSK_Изоляция_Минеральная_KNAUF INSULATION ПРОФ TS 0,34" and material = "ADSK_Изоляция_Воздух"
Не равноmaterial != "Базовая стена:ADSK_Наружная_Кирпич640_Гляссе:612459"
Содержитmaterial like "Изоляция"
Не содержитmaterial not like "Бетон"
СистемаРавноsystem = "B1"
Не равноsystem != "B12"
Содержитsystem like "B1"
Не содержитsystem not like "B12"
ДисциплиныРавноdiscipline = "АР"
Не равноdiscipline != "КР"
Содержитdiscipline like "АР"
Не содержитdiscipline not like "КР"
Комплексные примеры

Выборка: Поиск всех окон на 1 этаже.

Условие: Проверка, что их высота > 1000 мм и ширина < 800 мм

entity = "IfcWindow" and floor = "Этаж 1"

attribute.OverallHeight > 1000

and attribute.OverallWidth < 800

Пример написания формулы((property."МОГЭ_Геометрические параметры".Периметр / 100) / (100 / 3)) + 2 > 5.62
Пример написания childchild.IfcMaterialLayer.property."Название элемента" like "Изоляция"
 child.IfcMaterialLayer.property.Name like "Изоляция"
Пример написания ancestorancestor.ifcBuilding.property.Name like "школа"