04_Язык IFCQL
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 (мм.)"
Если внутри имени содержится двойная кавычка, то ее необходимо маскировать левым слешем - \”
Операторы выражения
!= | |
| |
| || |
Операнды выражения
| |||
| |||
Пример 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 |