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 (мм.)"
Если внутри имени содержится двойная кавычка то ее необходимо маскировать левым слешем - \”
Операторы выражения
Операнды выражения
| |||
parent child ancestor descendant | Связь через уровни родительского дерева | parent.ifcBuilding.property.Общие.Тип = 1 ancestor.ifcSite.property.Общие.Тип = 1 Door::ancestor.ifcSite.property.Общие.Тип = 1 | в данной итерации разработки не используется |
grid | поиск к осях | grid(axis,’1Б x 2A’,-10.0,10.0) grid(near,’1 х A’,-10.0,10.0,full) grid(intersection,’1 x A’,-10.0,10.0,full) grid(area,’1B x AГ’,-10.0,10.0,full) | |
typeof | проверка типа атрибута | typeof(attribute, type, unit) typeof(property.Qto_WallBaseQuantities.Height, double, ? [mm] ) typeof(property.Qto_WallBaseQuantities.Height, str) typeof(property.Qto_WallBaseQuantities.Height, range, 0, 100) | |
Пример по IDS
entity in(’ifcWall’ ,’ifcWallStandartCase”) and floor = ”Этаж 1” and property.Qto_WallBaseQuantities.Height > 2000
(property.Qto_WallBaseQuantities.Height * property.Qto_WallBaseQuantities.WIdth) / 1000
entity in(’ifcWall’ ,’ifcWallStandartCase”) and floor = ”Этаж 1” and property.Qto_WallBaseQuantities.Height > 2000 having ancestor(ifcBuilding).attrubute. > 0