工业基础类IFC—EXPRESS语言

简介: 工业基础类IFC—EXPRESS语言

01 EXRESS建模语言


IFC标准是参考STEP(Standard for the Exchange of Product Model Data,产品数据交换标准)标准进行开发并逐步完善的,EXPRESS建模语言是STEP格式最重要的产物,它采用了很多面向对象的概念,包括多重继承,所以IFC标准的整体架构同样也是以EXPRESS语言为基础的,并通过STEP物理文件完成对数据信息的描述。


EXPRESS是一种表达产品数据的标准化数据建模语言,它提供了对建筑信息模型和建设工程数据的详细描述,同时也提供了与这些对象有关的信息和约束的描述。原始建筑数据的最大特点是分散,实体构件的属性特征如几何尺寸、材料、颜色、创建日期、名称、编号等依赖于实体构件存在,不成体系,条理混乱。EXPRESS语言将构件以及构件的属性归纳为不同模块下的实体类,类与类之间通过关联关系(约束、指向、引用等)表达一个完整的构件。EXPRESS语言不同于C++和Java等面向对象的程序设计语言。与它们相比,EXPRESS语言看重信息描述方式的可读性,重视数据的定义和描述,而不是计算机对代码的可执行程度。EXPRESS语言的设计是为了实现计算机对大规模数据的可读性,其优势包括:


使用机器可读的建模语言—EXPRESS,而不是一般的文件格式;

该语言强调数据声明,且包括规则和约束的程序化功能;

该语言可以实现不同的数据映射,包括文本文件格式,数据库模式定义和XML模式;

参考子模型,它们是较大的标准模型的共享和重复使用的子集,可满足几何,测量,表示分类和其他一般需求。

作为用于数据描述的语言,EXPRESS语言对数据的定义与面向对象中的类的概念对应。在类的定义中,类从声名关键词ENTITY开始,到END_ENTITY结束。属性是类的特征表示(数据和行为关系),需要它们来支持对类的理解和使用。ESPRESS语言在定义IFC标准时使用了超类和子类的概念,这两个概念建立IFC实体之间的继承关系,形成IFC实体之间的层次关系。图1中的文本为EXPRESS定义IFC实体类的实例,该文本中定义3个IFC实体,通过超类和子类表明它们之间的继承关系。这三个实体分别为IfcRoot、IfcRelationship和IfcRelDefines,它们之间的继承关系表达为:IfcRoot是IfcRelationship的超类,IfcRelDefines则是IfcRelationship的一个子类。


7eff4fe75607a47a568b557eb17fa9c7.png


02 EXPRESS-G 图形表达


EXPRESS语言非常适合计算机的数据读写和处理,但人工读取存在相当大的困难,如图2所示,为了提高内容的可读性,以关系图表为表达形式的EXPRESS-G视图得到普遍应用。


EXPRESS-G是由STEP开发的图表建模方法。如图3所示,在EXPRESS-G视图中,使用实线矩形框来表示IFC实体,利用多种关系连接线建立实体之间以及实体与属性之间的关系。当属性类型为聚合数据类型时,可直接在属性关系线上标出,使用聚合数据类型的第一个字母(即L/S/B/A)进行表示,例如“S[m:n]”表示该属性为一个集合(SET),其中 “m” 代表该集合的索引最小值,“n” 代表该集合的索引最大值,若 “n” 为 “?” 则表示集合中的元素数量是可变的,这里的索引表示实体和属性的基数关系,如果属性没有规定聚合,则基数关系为1。此外,存在部分被称为“抽象类”的实体,该类实体可以作为其他实体的超类,在实体前标注“(ABS)”表示该实体是抽象类。实体间有强制、可选、继承、选择四种关系。


f077a7d242260ea1c9f92a91119db111.png


ad78aa0f749dbeeb15a719d9c36bea0d.png

03 IFC物理文件解析


IFC物理文件可以直接用文本编辑器进行查看,文本内容以“ ISO-10303-21 ;”开头,以“END-ISO-10303-21;”结尾,其文件结构分为两个部分:头段和数据段。头段内容位于标识符“HEADER”和最先出现的标识符“ENDSEC”之间,主要给出关于文件本身的基本信息,包括文件描述、文件名、IFC框架版本;数据段则以关键字“DATA”作为开始标识,同样以“ENDSEC”作为结束标识,该部分是IFC数据模型的主要内容,包含了要交换的工程信息。

39afcd65553c3f9f358a17b33b45078a.png


图4中的文本为IFC文件的实例。从头段内容可以看出该文件为IFC4版本文件,数据段的内容通过 “#”+ 整数值 的方式定义标示符,其中整数值并不一定连续,其它实体对象可通过该标识符来进行关联和引用。等号后面的内容由IFC实体类型名称和其属性定义组成,其中实体类型名称均采用大写,而括号内则是该实体的属性定义,不同属性之间以逗号分隔。不同的属性类型表示方法也不尽相同,具体如下:


① 当为单值类型时,可直接在其属性定义位置处给出相应的值;


② 当为枚举类型时,需在给出枚举类型值的同时,前后各加一个“.”,以便区分;


③ 当为聚合类型时,属性值需在半角字符的括号内,数据之间以逗号作为分隔符;


④ 当属性定义为引用对象时,则直接标明被引用对象的标识符即可;


⑤ 当属性定义为空时,以“$”表示。


04 参考文献


[1] 王平,李嘉璠. 一种产品数据的图形表达方法─EXPRESS-G(下)[J]. 计算机辅助设计与制造,1999,(10):40-42+50.


[2] 基于IFC的桥梁施工监控数据集成与可视化研究


相关文章
|
数据可视化 C# C++
工业基础类IFC—提取模型结构树
工业基础类IFC—提取模型结构树
工业基础类IFC—提取模型结构树
|
存储 Rust 自然语言处理
C代码演示WebAssembly工作流程
【2月更文挑战第3天】 工作流程: * C 代码使用 Emssripten 工具编译为 wasm 后缀的二进制文件,同时可以生成访问wasm的js胶水代码和html代码 * wasm后缀的二进制格式文件的文本表示方式为后缀为wat格式的文本文件,方便在编辑器和浏览器开发者工具中查看 * 可以使用wabt工具将wat格式的文本文件直接打包成wasm的二进制文件 * 使用WebAssemblyJavascriptAPI发起对wasm的调用 * 编写胶水代码 * 使用fetch/xhr获取wasm * 借助胶水代码访问wasm中的函数
690 0
|
2月前
|
人工智能 数据可视化 API
阿里云部署 Hermes Agent 从入门到精通:技能体系与模型配置实战指南
在AI智能体快速普及的今天,能够自主学习、持续进化、长期记忆、多端运行的Agent框架,正在成为新一代效率工具的核心。Hermes Agent凭借自进化能力、全平台支持、轻量化架构与极高的活跃度,成为2026年最值得学习的AI Agent框架。其最新版本带来了全平台出击的能力,正式支持微信、iMessage、安卓Termux环境,同时大幅优化稳定性、速度与生态兼容性。无论是本地运行、云端部署、多平台接入,还是从同类框架平滑迁移,Hermes Agent都提供了完整方案。
685 2
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
1292 2
|
数据可视化 JavaScript 前端开发
代码可视化平台
这是一个代码可视化工具,旨在简化代码理解过程。用户无需额外配置,直接复制代码即可实时观看执行过程,支持前进后退和动画展示。目前支持JavaScript和Python,未来将扩展更多语言。工具提供了数组、链表、栈、队列、二叉树和哈希表的可视化,并包含辅助函数和自定义注释功能。主要局限在于仅支持单段代码,且执行步数限制为500步。[了解更多](https://staying.fun/zh)
1002 20
|
缓存 网络协议 测试技术
NFS挂载信息如何调整?
NFS挂载信息如何调整?
1139 3
|
消息中间件 设计模式 中间件
中间件事件总线发布与订阅
【6月更文挑战第20天】
320 4
|
SQL 关系型数据库 MySQL
Go语言中进行MySQL预处理和SQL注入防护
在现代Web应用开发中,安全性至关重要。SQL注入是一种常见的攻击方式,攻击者可通过构造特殊SQL查询来非法访问或修改数据库数据。本文介绍如何利用Go语言中的预处理SQL语句来防范此类攻击。预处理不仅能提升安全性,还能提高性能并简化代码。通过使用`?`作为占位符,Go自动处理参数转义,有效避免SQL注入。此外,文章还提供了连接MySQL数据库、执行预处理查询以及最佳实践的示例代码。务必遵循这些指导原则,确保应用程序的安全性。
549 0
|
人工智能 安全 测试技术
探索AI在软件开发中的应用:提升开发效率与质量
【10月更文挑战第31天】在快速发展的科技时代,人工智能(AI)已成为软件开发领域的重要组成部分。本文探讨了AI在代码生成、缺陷预测、自动化测试、性能优化和CI/CD中的应用,以及这些应用如何提升开发效率和产品质量。同时,文章也讨论了数据隐私、模型可解释性和技术更新等挑战。
|
机器学习/深度学习 人工智能 测试技术
探索 AI 驱动的软件开发:未来技术的新趋势
【10月更文挑战第19天】本文探讨了人工智能(AI)在软件开发中的应用现状和技术优势,包括代码生成、缺陷检测、自动化测试和性能优化。AI 可以提高开发效率、减少人为错误、加速创新并持续学习。文章还讨论了实施 AI 驱动开发的挑战和最佳实践,强调了数据管理和技能培训的重要性。