CN114064696A - 插件式bim模型检查方法及装置 - Google Patents
插件式bim模型检查方法及装置 Download PDFInfo
- Publication number
- CN114064696A CN114064696A CN202111412359.6A CN202111412359A CN114064696A CN 114064696 A CN114064696 A CN 114064696A CN 202111412359 A CN202111412359 A CN 202111412359A CN 114064696 A CN114064696 A CN 114064696A
- Authority
- CN
- China
- Prior art keywords
- plug
- rule
- computability
- snl
- engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000007689 inspection Methods 0.000 claims abstract description 81
- 238000004364 calculation method Methods 0.000 claims abstract description 42
- 238000000605 extraction Methods 0.000 claims abstract description 17
- 230000006870 function Effects 0.000 claims description 37
- 238000011068 loading method Methods 0.000 claims description 15
- 230000001502 supplementing effect Effects 0.000 claims description 10
- 230000000875 corresponding effect Effects 0.000 description 38
- 230000008569 process Effects 0.000 description 15
- 238000004458 analytical method Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 238000011161 development Methods 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 239000013256 coordination polymer Substances 0.000 description 5
- 238000007781 pre-processing Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000013589 supplement Substances 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- CSCPPACGZOOCGX-UHFFFAOYSA-N Acetone Chemical compound CC(C)=O CSCPPACGZOOCGX-UHFFFAOYSA-N 0.000 description 2
- 238000009411 base construction Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000010985 leather Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000013439 planning Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000011232 storage material Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2448—Query languages for particular applications; for extensibility, e.g. user defined types
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/10—Geometric CAD
- G06F30/13—Architectural design, e.g. computer-aided architectural design [CAAD] related to design of buildings, bridges, landscapes, production plants or roads
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Geometry (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Structural Engineering (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Architecture (AREA)
- Civil Engineering (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开一种插件式BIM模型检查方法及装置,该方法包括:通过对基于建筑规则描述语言SNL的规则文件进行解析,确定规则文件中SNL语句包含的插件标识对应的计算性规则插件,插件标识与计算性规则中的几何计算相关;插件包括与插件标识相关的配置信息以及可执行的几何计算相关代码;基于与原始检查引擎兼容的目标引擎在插件中填充运行插件所需的预设通用代码,并对预设通用代码进行解析,以将插件嵌入原始检查引擎中;通过由SNL语句生成的SPARQL语句查询建筑语义模型,获得插件运行所需的模型数据;建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;根据模型数据反射调用插件,获得插件包含的计算性规则对应的查询结果。
Description
技术领域
本发明涉及建筑技术领域,具体而言,涉及一种插件式BIM模型检查方法及装置。
背景技术
BIM(Building Information Model,建筑信息模型)是以三维模型为基础的面向建筑信息应用的技术,能够有效应用于建筑与基础设施的规划、设计、建造、管理等阶段,是建筑、工程和施工阶段最具发展力的技术之一。在BIM技术推广落地过程中,实现基于BIM模型的建筑规范审查,对于促进BIM行业进步和发展具有重要作用。
相关技术中,可以使用建筑规范审查工具BIMChecker对BIM模型进行审查,以确定BIM模型对应的建筑是否符合规范。如图1所示,BIMChecker工具主要由规则库构建子工具、语义模型转换模块、BIM模型检查引擎和输出展示模块等构成。规则库构建子工具用于向用户提供将自然语言建筑规范条款编写成便于计算机解析执行的SNL(Structural NaturalLanguage,建筑规范描述语言)规则的接口,供用户编写SNL规则(可参考领域数据库编写),并将用户编写的SNL规则自动转换成SPARQL语句用于查询。语义模型转换模块用于对BIM模型进行语义提取,获得包含模型语义内容的OWL(Web Ontology Language,网络本体语言)模型。BIM模型检查引擎用于通过SPARQL语句查询OWL模型,以确定建筑是否符合规范,并传输给输出展示模块展示检查结果。
在现有计算性规则及相关条款的应用实践中,计算性规则一般仅限于通用的几何计算。当前引擎中内置实现的通用计算性规则共11项,包含紧邻、距离、线关系、空间上下方关系等。在根据规范编制更复杂的SNL规则时,已有的计算性规则通常不能简单地描述这些条款的内容。或者,条款计算内容局限性较强,仅适用于某一规范,与其他规范存在描述上的冲突。这些条件下,计算性规则都不适合作为BIMChecker检查引擎内核模块进行实现。此外,建筑行业企业进行模型审查时对具体几何计算算法往往需要依据模型实际设计内容进行动态调整,为满足每个动态变化的需求,都需要修改引擎内核重新发布版本,操作繁琐。
由此可知,如何提供一种便于开发和更新复杂计算性规则的方案是亟待解决的。
发明内容
本发明提供了一种插件式BIM模型检查方法及装置,能够基于便于开发、更新和扩展的计算性规则插件查询BIM模型是否符合建筑规范。具体的技术方案如下:
第一方面,本发明实施例提供了一种插件式BIM模型检查方法,所述方法包括:
通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,所述插件标识与计算性规则中的几何计算相关;所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码;
基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中;
通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据;所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;
根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
可选的,通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,包括:
通过对所述基于SNL的规则文件进行解析,判断SNL语句中是否含有插件标识,所述插件标识包括基于计算性规则中的几何计算确定的关键词或者基于计算性规则中的几何计算自定义的函数;
若所述SNL语句中含有插件标识,则查找所述插件标识对应的计算性规则插件。
可选的,基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中,包括:
补充与所述目标引擎相关的插件类声明和与插件类相关的函数,构成完整的插件类;
补充所述原始检查引擎内置对象的引用;
通过所述目标引擎中的类装载器,解析所述插件类,生成兼容所述原始检查引擎的目标对象。
可选的,所述方法还包括:
与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及所述原始检查引擎内置规则的加载优先级依次降低。
可选的,所述方法还包括:
对所有全局计算性规则插件加载完成后,生成一个包含所有全局计算性规则插件相关信息的插件列表,其中每个全局计算性规则插件对应一个计数器,所述计数器初始值为0;
当接收到检查任务后,将所述检查任务对应的全局计算性规则插件的计数器加1;
当确定所述检查任务完成后,将所述检查任务对应的全局计算性规则插件的计数器减1;
当加载到更新后的全局计算性规则插件时,将所述更新后的全局计算性规则插件加入所述插件列表队尾;
若检测到更新后的全局计算性规则插件所对应的原始全局计算性规则插件的计数器为0,则使用所述更新后的全局计算性规则插件执行后续接收到的检查任务。
可选的,在基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码之前,所述方法还包括:
检测所述插件是否存在语法错误;
基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码包括:
若所述插件不存在语法错误,则基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码。
可选的,所述原始检查引擎为基于Java的检查引擎,所述目标引擎为Groovy引擎。
第二方面,本发明实施例提供了一种插件式BIM模型检查装置,所述装置包括:
确定单元,用于通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,所述插件标识与计算性规则中的几何计算相关;所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码;
嵌入单元,用于基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中;
查询单元,用于通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据;所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;
调用单元,用于根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
可选的,所述确定单元包括:
判断模块,用于通过对所述基于SNL的规则文件进行解析,判断SNL语句中是否含有插件标识,所述插件标识包括基于计算性规则中的几何计算确定的关键词或者基于计算性规则中的几何计算自定义的函数;
查找模块,用于若所述SNL语句中含有插件标识,则查找所述插件标识对应的计算性规则插件。
可选的,所述嵌入单元,包括:
补充模块,用于补充与所述目标引擎相关的插件类声明和与插件类相关的函数,构成完整的插件类;补充所述原始检查引擎内置对象的引用;
解析模块,用于通过所述目标引擎中的类装载器,解析所述插件类,生成兼容所述原始检查引擎的目标对象。
可选的,所述装置还包括加载单元,所述加载单元用于按照与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及所述原始检查引擎内置规则的加载优先级依次降低的顺序进行加载。
可选的,所述装置还包括:
生成单元,用于对所有全局计算性规则插件加载完成后,生成一个包含所有全局计算性规则插件相关信息的插件列表,其中每个全局计算性规则插件对应一个计数器,所述计数器初始值为0;
计数单元,用于当接收到检查任务后,将所述检查任务对应的全局计算性规则插件的计数器加1;当确定所述检查任务完成后,将所述检查任务对应的全局计算性规则插件的计数器减1;
添加单元,用于当加载到更新后的全局计算性规则插件时,将所述更新后的全局计算性规则插件加入所述插件列表队尾;
更新单元,用于若检测到更新后的全局计算性规则插件所对应的原始全局计算性规则插件的计数器为0,则使用所述更新后的全局计算性规则插件执行后续接收到的检查任务。
可选的,所述装置还包括:
检测单元,用于在基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码之前,检测所述插件是否存在语法错误;
所述嵌入单元,用于若所述插件不存在语法错误,则基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码。
可选的,所述原始检查引擎为基于Java的检查引擎,所述目标引擎为Groovy引擎。
第三方面,本发明实施例提供了一种存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现第一方面所述的方法。
第四方面,本发明实施例提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现第一方面所述的方法。
由上述内容可知,本发明实施例提供的一种插件式BIM模型检查方法及装置,能够开发一种包括与SNL关联的配置信息以及可执行的几何计算相关代码的计算性规则插件,该插件便于编写、更新和扩展,解决现有技术计算性规则开发、更新、扩展困难的问题。针对计算性规则插件检查BIM模型的具体实现过程是一个智能化过程,具体可以包括:通过对基于SNL的规则文件进行解析,确定规则文件中SNL语句包含的插件标识对应的计算性规则插件;基于与原始检查引擎兼容的目标引擎在该插件中填充运行插件所需的预设通用代码,并对该预设通用代码进行解析,以将插件嵌入原始检查引擎中;通过由SNL语句生成的SPARQL语句查询建筑语义模型,获得插件运行所需的模型数据;根据模型数据反射调用插件,获得插件包含的计算性规则对应的查询结果。当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
本发明实施例的创新点包括:
1、通过先将计算性规则插件嵌入原始检查引擎,再结合SPARQL语句查询建筑语义模型获取计算性规则插件所需模型数据,最后通过反射调用插件的方式来实现计算性规则的运算,从而在不改变原有检查流程的基础上实现了计算性规则插件的自动化运行。
2、为避免相同命名规则在加载运算时产生错误或冲突,可以设置不同规则的优先级,使得与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及原始检查引擎内置规则的加载优先级依次降低。
3、对所有已加载的插件与当前执行的检查进行绑定计数,通过WatchService监听全局插件文件存储路径,当插件发生变化时,对其进行重新加载。当前置任务结束后,计数器归零时,再完全卸载旧版本插件。从而不仅可以保证在修改平台计算性规则插件时,不会影响正在检查的模型,造成结果的不一致,还可以保证新提交的模型可以及时使用最新版本全局插件进行模型检查。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术提供的一种建筑规范审查工具结构示意图;
图2为本发明实施例提供的一种插件式BIM模型检查方法流程示意图;
图3为本发明实施例提供的一种插件嵌入原检查流程的流程示意图;
图4为本发明实施例提供的一种解析执行插件的示意图;
图5为本发明实施例提供的一种计算性规则插件与内置规则优先级的示意图;
图6为本发明实施例提供的一种计算性规则插件与内置规则加载方法的流程示意图;
图7为本发明实施例提供的一种插件语法结构示意图;
图8为本发明实施例提供的一种插件提供的内容函数接口示意图;
图9为本发明实施例提供的一种BIM模型智能检查引擎平台化系统的整体架构图;
图10为本发明实施例提供的一种BIM模型智能检查引擎平台化系统的功能模块框图;
图11为本发明实施例提供的一种插件式BIM模型检查装置的一种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明实施例及附图中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含的一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
本发明提供了一种插件式BIM模型检查方法及装置,能够基于便于开发、更新和扩展的计算性规则插件查询BIM模型是否符合建筑规范。本发明实施例所提供的方法,可以应用于任一具有计算能力的电子设备,该电子设备可以为终端或者服务器。在一种实现中,实现该方法的功能软件可以以单独的客户端软件的形式存在,也可以以目前相关的客户端软件的插件的形式存在,这都是可以的。
下面对本发明实施例进行详细说明。
图2为本发明实施例提供的插件式BIM模型检查方法的一种流程示意图。该方法可以包括如下步骤:
S100:通过对基于SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件。
SNL从结构上主要可以分为简单句、复合句和条件句。
简单句=(前缀名词短语(后缀名词短语((<且>|<或>)后缀名词短语)*)|(前缀名词动词短语((<且>|<或>)动词短语)*))
复合句=简单句(<并且>简单句)*
条件句=<IF>(复合条件句|存在一个条件句)
<THEN>(复合条件句|存在一个条件句)
示例性的,下述文本一是一条基于SNL的普通规则样例,文本二是一条涉及几何计算的SNL规则样例,从样例可观察到SNL易于理解,基本上能够按照汉语的语序顺畅阅读。
文本一
文本二
所述插件标识与计算性规则中的几何计算相关。所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码。具体的,可以通过对所述基于SNL的规则文件进行解析,判断SNL语句中是否含有插件标识,所述插件标识包括基于计算性规则中的几何计算确定的关键词或者基于计算性规则中的几何计算自定义的函数;若所述SNL语句中含有插件标识,则查找所述插件标识对应的计算性规则插件;若所述SNL语句中没有插件标识,则确定该规则文件没有关联的计算性规则插件。
其中,关键词主要包括两类。针对第一类,例如若SNL语句为“如果建筑有卧室那么卧室的局部净高>2100”,则可以将“局部净高”配置为计算性规则插件关键词,CPkey=“局部净高”。针对第二类,例如需要特殊距离计算,而引擎内置的(最小/最大)(水平/竖直)距离等规则不能满足要求时,可以定义为“A-B特殊距离”格式作为计算性规则关键词。例如若SNL语句为“如果建筑有房间那么房间的房间-卫生间特殊距离<100”,则用户配置的“A-B特殊距离”关键词便作为插件编写内容之一,记为CPkey=“A-B特殊距离”。
针对自定义的函数,可以提供完全自由的关键词解析接口,由用户自行基于正则表达式等实现,记为CPfunc。
在确定用户提供的规则插件关键词后,计算性规则插件的判定就能够以关键词或自定义判定函数为目标。在解析SNL语句后,对每一个插件标识,按顺序筛选出为插件的SNL简单句,最终得到需要调用外部插件的SNL列表。此处需要注意的是,由于用户提供多个插件关键词CPkey或判定函数CPfunc是存在顺序的,故本发明实施例中以插件文件存储顺序进行处理,即顺序靠前的插件优先级更高,更优先处理。正常情况下,用户应避免多个相同关键词的插件。在进行插件判定后,还可以根据插件标识从SNL语句中提取几何计算的主体(以下简称为实体),以便于后续查询使用。
下面是针对上述插件判定与实体提取算法的伪代码。
输入:plugin_list计算性规则插件代码文本列表,snl_list规则语句列表
输出:snl_judge_map规则语句与插件映射表
1:function plugin_judge(plugin_list,snl_list)
2:judge_func_list=[]//高阶函数生成的判定函数
3:snl_judge_map={}//snl语句与插件的映射
4:for plugin_text in plugin_list
5://插件自定义判定函数(III类)
6:custom_func←extract_judge_func(plugin_text)
7:if text not null then
8:judge_list.push(custom_func)
9:else
10://插件判定名称(I、II类)
11:judge_list.push(text_judge(extract_judge_text(plugin_text)))
12:end if
13:for snl in snl_list
14:for judge_func in judge_func_list
15:is_computational←judge_func(snl)
16:if is_computational then
17:snl_judge_map.put(snl,judge_func)
18:end if
19:return snl_judge_map
20:end function
S110:基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中。
在成功判定插件后,需要将插件的内容嵌入到原检查流程。具体嵌入过程包括:补充与所述目标引擎相关的插件类声明和与插件类相关的函数,构成完整的插件类;补充所述原始检查引擎内置对象的引用,对插件脚本暴露模型、几何计算、辅助工具等相关引擎内部类与函数;通过所述目标引擎中的类装载器,解析所述插件类,生成兼容所述原始检查引擎的目标对象。
其中,目标引擎是与原始检查引擎语法兼容的引擎,例如,原始检查引擎为基于Java的检查引擎时,目标引擎可以为Groovy引擎,目标引擎中的类装载器可以为GroovyClassLoader,目标对象可以为Java Class对象。
可选的,当用户编写的插件内容存在错误时,将无法正常基于插件实现针对建筑信息模型进行计算性规则检查,因此在基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码之前,可以先检测所述插件是否存在语法错误;若所述插件不存在语法错误,则基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码;若所述插件存在语法错误,则可以输出语法错误提示信息,以便用户进行修正。
综上所述,结合语法检查步骤,将插件嵌入原检查流程的流程可以如图3所示。其中,读取插件可以利用BIMChecker智能检查引擎内核的SNL解析模块,补充引擎内置对象引用可以利用内置几何处理模块,插件的缓存加载备用可以利用内置计算性规则运算模块。
S120:通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据。
所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型,例如OWL(Web Ontology Language,网络本体语言)模型。在将插件嵌入原检查流程后,可以先对插件的实际使用数据(即模型数据)进行提取与处理,再对插件的算法进行解析与执行。下面针对插件所需的实际使用数据进行分析:
在此基础上,外置的计算性规则插件中,为了保证原流程的正确性,计算性规则插件应尽量不修改原流程,只关注于计算性规则所在简单句本身,在必要的情况下引用当前计算性规则所需的数据。该设计能够将内置规则与外置插件以同一流程处理。通过上式中是否包含Sifcomp可以拆分为纯语义查询和计算性规则处理部分。此时,进入计算性规则前的构件数据可以通过引擎SPARQL查询获得,相应的查询相关内部数据也可直接进行地获取。经筛选,暴露给计算性规则插件的数据表1所示。
表1
该表中,最主要的数据是插件需要处理的构件Id或Id元组,即进入计算性规则插件前对SNL条件句等拆分出语义查询部分查询得到的结果。实体数据正是引擎根据S100中提及的实体提取方法从插件中提取的实体列表,便于对照Id数据。Simple子句即含当前计算性规则的SNL简单句,或可重载为整个SNL语句结构,可供复杂场景插件使用。SPLVars同样是为提供SPARQL查询高级功能时,对应的构件变量名称,方便快速构造SPARQL语句。
综上,实际插件最重要的传入数据即涉及到计算性规则的构件列表。大部分定制化需求都可以通过构件列表配合具体几何数据查询与计算解决。其余数据为可选,在有特殊需求时,可深度开发具体插件。
S130:根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
在确定了插件的数据提取方法,获取到计算性规则插件需要的数据后,即达到关键的插件算法解析执行部分。本发明实施例采用Groovy脚本语言的目的即将用户编写的插件编译后完全放置于运行引擎的JVM环境中,减少数据传输等开销,同时能够借助脚本形态的优势,使用户仍有能力调用外部程序进行计算。上述步骤S110已提及了整体嵌入流程,如图4所示是使用GroovyClassLoader解析插件算法脚本的流程示意。借助Groovy语言设计的优势,引擎中可以直接生成Class字节码。由计算性规则处理流程直接通过Class构造对象,将前述提取的数据通过反射直接调用计算方法,运行插件计算流程。
本发明实施例提供的一种插件式BIM模型检查方法,能够开发一种包括与SNL关联的配置信息以及可执行的几何计算相关代码的计算性规则插件,该插件便于编写、更新和扩展,解决现有技术计算性规则开发、更新、扩展困难的问题。针对计算性规则插件检查BIM模型的具体实现过程是一个智能化过程,具体可以包括:通过对基于SNL的规则文件进行解析,确定规则文件中SNL语句包含的插件标识对应的计算性规则插件;基于与原始检查引擎兼容的目标引擎在该插件中填充运行插件所需的预设通用代码,并对该预设通用代码进行解析,以将插件嵌入原始检查引擎中;通过由SNL语句生成的SPARQL语句查询建筑语义模型,获得插件运行所需的模型数据;根据模型数据反射调用插件,获得插件包含的计算性规则对应的查询结果。
在一种实施方式中,计算性规则插件的一大优势在于作用域可以脱离引擎内核而存在。然而,脱离内核后,插件的放置位置就有多种选择,相应的作用范围也就不尽相同。不同企业内部存在的规范,或不同企业对同一规范不同的理解,都会造成最终SNL规则编制的不一致。对于与个别规则强相关的计算性规则插件,可以与SNL规则高度绑定。而对于不同地方政府或企业自身对某些概念的不同理解,或者对某些基础计算性规则计算如距离的阈值要求不同,这些半通用的计算性规则插件又可以作为全局插件进行使用。
因此,计算性规则与其插件是三层结构,如图5所示。与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及所述原始检查引擎内置规则的加载优先级依次降低。当出现命名重复的规则时,需要采用高优先级的实现。在此情况下,企业与最终用户能够通过自编写的计算性规则插件覆盖原有实现。
处理插件加载的逻辑如图6所示。平台启动时会对全局计算性规则插件进行读取加载。当上传模型与规范审查时,读取上传SNL文件内部记录的计算性规则插件文本进行加载。处理到计算性规则时,优先查找SNL内绑定的插件项,当无法找到时,继续从平台加载的全局插件搜索,最后再查找BC(即BIMChecker)引擎内置的计算性规则。若最终无法查到对应计算性规则则对单条规则进行报错,继续执行剩余检查。
在一种实施方式中,与上述提出的插件作用域相关,插件的动态特征也会带来更新相关问题。其中,SNL文件附加的插件在修改SNL文件时即可更新。引擎内置规则尽量通用且稳定,只能在重新部署新版本时更新。而两者之间的全局插件正相当于一个折中选项,既不需要与每个SNL进行绑定,也不需要更新版本重新部署整个平台。由此带来的问题即全局插件需要支持热更新才可体现其通用且更新自由的优势。
本发明实施例提出的全局插件热更新方法简要介绍即对所有已加载的插件与当前执行的检查进行绑定计数,通过WatchService监听全局插件文件存储路径,当插件发生变化时,对其进行重新加载。当前置任务结束后,计数器归零时,再完全卸载旧版本插件。具体的,可以对所有全局计算性规则插件加载完成后,生成一个包含所有全局计算性规则插件相关信息的插件列表,其中每个全局计算性规则插件对应一个计数器,所述计数器初始值为0;当接收到检查任务后,将所述检查任务对应的全局计算性规则插件的计数器加1;当确定所述检查任务完成后,将所述检查任务对应的全局计算性规则插件的计数器减1;当加载到更新后的全局计算性规则插件时,将所述更新后的全局计算性规则插件加入所述插件列表队尾;若检测到更新后的全局计算性规则插件所对应的原始全局计算性规则插件的计数器为0,则使用所述更新后的全局计算性规则插件执行后续接收到的检查任务。
其中,为了判断当前插件是否为旧版本插件,需要判断该插件在插件列表中的序号是否小于旧版本插件总数,若小于,则确定为旧版本插件。当旧版本插件的计数器为0时,说明该旧版本插件没有需要处理的任务,可以将其卸载,使用新版本插件代替它处理后续检查任务,从而可以保证在修改平台计算性规则插件时,不会影响正在检查的模型,造成结果的不一致。同时,该方法可以保证新提交的模型可以及时使用最新版本全局插件进行模型检查。
在一种实施方式中,为了使得计算性规则插件尽可能在单机版与平台端通用,本发明实施例提出的插件是以纯文本的脚本为基础的,便于以脚本发明实施例本的形式内嵌于SNL文件内、存储于平台端或以.comp文件形式作为单机版支持。计算性规则插件语法以Groovy语法为基础,进行少量的约定,以作为类DSL(Domain Specific Language,领域特定语言)的形式,为检查引擎提供更强的二次开发能力。下面分别针对插件的基本结构以及插件语法与工具函数进行介绍。
(一)插件的基本结构
插件以可读的代码文本的基本形式存在。本发明实施例提出的计算性规则插件从功能上主要分为两大部分,配置部分与运算部分。其中,配置部分又分为基本信息配置、实体提取配置等,如图7所示是插件语法的基本结构。其中,配置部分基本信息以脚本变量的形式声明了插件的标识符、名称和说明等必要和可选的信息,同时以字符串变量或函数的形式声明实体提取的方式。运算部分,唯一的限制即入口函数compute(),此入口对应上一小节的插件数据提取内容。此外,运算部分可以自由放置其他需要用到的工具函数等内容。该结构中,配置与运算两部分一定程度上也需要分别与规则库SNL编辑和检查引擎内核互相解析调用。
(二)插件语法与工具函数
针对上文插件脚本中每个部分,下面分别介绍其具体语法。
配置部分如文本三所示,基本信息语法在设计上比较简洁,通过字符串定义的一系列变量,确定必需和可选参数。
文本三
在插件判定与实体提取部分,插件判定以全字匹配或正则判定,实体提取分为三类,可分别以默认主语、正则提取与自定义函数提取三类实现。文本四是判定与实体提取各种形式的语法参考。
文本四
以上两部分配置信息以CONFIG START与END注释分隔,其后是插件语法的运算部分,如文本五所述。其中,除compute()入口函数是强制的以外,可追加任意编写的工具类和函数置于插件末尾。
文本五
明确结构与具体语法后,为了使得用户能够更便捷地编写计算性规则插件,本工作向用户暴露了一系列类与方法可在groovy脚本中直接调用。提供给用户的内部数据结构与工具函数经过严格筛选,既提供给用户必要的开发能力,又不可暴露无关的数据,避免插件对原始数据进行破坏。如图8所示是插件提供的数据结构,其中主要分为规则相关与模型检查相关。规则中主要提供SNLSentence结构供插件高级解析整句时使用。模型相关数据主要提供语义模型、几何模型和规范条款模型。通过暴露的模型相关函数,可以在插件编写阶段获取到构件的全部信息,满足基础与高级定制插件开发的需求。
此外,由于暴露接口的改动,部分涉及到引擎内部的类与函数需要对可见性进行修改。由于模型检查阶段插件只需读取,因此本发明实施例对此采用数据隔离的方法,只提供数据查询接口,避免插件对数据的意外修改,保证模型语义与几何数据的一致性。
根据上述方法实施例,本发明的另一个实施例提供了一种BIM模型智能检查引擎平台化系统,该系统整体上分为前端模型提交与检查结果展示部分,以及后端平台检查引擎部分,整体软件架构如图9所示。用户可以通过Web界面选择提交的模型文件与SNL规则库文件,并选择具体的检查条款列表,提交至平台后端进行检查。提交后无需在线等待,对于检查耗时相对较久的模型,前端Web界面会展示当前检查进度等信息。后端将处理所有用户提交的模型与规范数据,期间将处理SNL中涉及的所有计算性规则插件内容的计算。模型检查完成后,平台提供前端结果展示界面,供用户查看报告内容并下载。
本发明实施例实现的平台的详细功能模块图如图10所示。整体分为前端展示模块、前端预处理模块、后端计算性规则插件模块,以及后端检查引擎模块。
前端展示模块,用于实现模型检查平台前端交互界面。包含模型列表展示界面模块、新建审查界面模块、结果查询界面模块。该三模块分别实现了从展示当前平台存储的历史模型检查请求列表,到新建模型检查的SNL选择、模型选择、SNL条款选择部分的界面,再到提交审查结果详情展示界面的所有内容。
前端预处理模块,主要包含前端部分中非交互界面展示部分,包含了前端的SNL条款内容解析器、前端的模型压缩预处理模块、数据处理与上传模块。SNL条款解析器模块负责在前端对用户上传的SNL规则库内容进行解析与简单展示。模型压缩预处理模块使用DEFLATE算法对用户待上传的模块进行压缩等预处理操作。数据处理与上传模块负责对全部模型与SNL等数据进行处理并与平台后端通信。
后端计算性规则插件模块,主要包含计算性规则插件解析模块、计算性规则融合模块。计算性规则插件解析模块负责对用户输入的计算性规则进行解析,获取需要用到的计算性规则配置与计算逻辑。计算性规则融合模块负责对插件端的计算与引擎内部计算进行整合,并对错误构件、错误值等进行融合,计算得到最终融合后结果,并最终并入后续检查报告生成的流程。
后端检查引擎模块,包括平台多模型检查模块、完整性和一致性检查模块。针对平台化提供多模型同时审查的功能,进而分别对完整性、一致性进行检查。其中,完整性检查主要目标是验证条款中所涉及的构件相关属性是否完整。而一致性检查的重点是条款本身是否符合规定。
后端检查引擎部分,需要负责对前端提供的BIM模型、规则库文件数据以及选择的检查条款、检查命名等文本数据的处理。同时,后端需要提供对这些输入数据以及检查结果数据的存储支持。在实现上,后端接口以Spring Boot框架为基础,以RESTful API形式进行设计,提供对前端检查的数据提交与结果查询的支持。前端以React为基础框架,以Axios网络库作为API支持进行实现。部分关键接口列表如表2所示。
表2
检查数据存储方面,鉴于模型的规模及应用模式,该系统直接采用文件系统作为存储模型与检查条款的方式,并将检查相关元数据以JSON形式存储。同一检查中的模型、检查条款SNL、元数据、检查结果等以文件形式存储于同一个以UUID为唯一标识的目录下。其中,模型与SNL条款文件以原始二进制文件形式存储,元数据与检查结果以JSON形式存储。
下面以实际案例对计算性规则插件进行分析:
《建筑设计防火规范》条款3.6.4中,“厂房泄压面积”的计算与厂房的长宽比、具体厂房用途等都有关联,计算过程相对复杂,可以通过使用插件简化原有SNL文本,使得计算性规则更容易实现更新。下面从进行二次开发的企业用户的视角,对整个插件从理解、编制到测试等作出介绍。
A1、厂房泄压面积插件程序编制。
编制防火规范3.6.4泄压面积相关插件时,首先再次详细阅读条款。由于原规范在厂房存储物质等细节分类上过于复杂,这里取典型的样例说明。泄压面积计算公式为其中,A为泄压面积,V是厂房的容积,C是泄压比,是根据原规范表格中不同改的厂房的爆炸性物质危险类别,泄压比有不同的阈值。
而当厂房长径比大于3时,需要拆分成几段长径比不大于3的段分别计算。SNL规则编制入手,此时可自然地写出一系列不同厂房SNL,下述是摘选其中两条作为样例:
样例一:如果厂房的Name contains“粮食”或contains“皮革”那么厂房的泄压比>=0.03
样例二:如果厂房的Name contains“丙酮”或contains“汽油”那么厂房的泄压比>=0.11
简而言之,泄压面积是指爆炸时可以轻易“泄压”的构件的总面积,也就是如门窗这类可以被“炸开”的构件。综上,本规范是指计算厂房的门窗总面积是否大于厂房的容积乘一个厂房内物品相关的系数,在厂房过于窄长(长径比大于3)时,由于不易横向泄压,需拆分成多段分别计算。
在设计了预期的SNL语句样式后,用户可以开始选择计算性规则插件关键词。在此,采用“泄压比”三个字直接作为完全匹配的插件关键词能够满足需求。按照上述插件语法介绍,用户可以较为容易地写出插件基本配置与实体提取配置信息(备注描述等非重要信息已省略)。具体如文本六所示:
文本六
此后用户需要对具体运算部分进行编写。运算思路可以自然地整理为以下步骤:
a1.通过SNL自动获取到符合筛选条件的厂房;
a2.通过OWLModel查询并计算厂房的容积;
a3.通过SPARQL接口查询到厂房相关门窗;
a4.通过OWLModel查询门窗的面积并求和;
a5.计算后对比规范中泄压比表格数据,判断当前厂房是否合规,并确定是否返回错误值。
按照以上思路,编写插件计算部分如文本七所示。
文本七
厂房泄压面积插件运行测试。当插件编制结束后,使用Revit构建测试模型用于检测运行结果的正确性。例如一个测试模型样例为9500mm×3500mm×4000mm的房间,对其名称标记为“粮食厂房”,即可与前述设计的SNL对应。根据规范查表,容积133m2的粮食厂房,泄压比应为0.03。提取全部门窗计算的总面积是4.32m2。因其长径比小于3,根据上述泄压面积计算公式计算,实际泄压比C=0.0166<0.03。该结果不满足泄压面积要求,需要报错。
与原始实现方式对比,在不使用本文的插件化扩展方法前,用户想要实现本条规范较为困难。一种方案是针对不同条件组合生成大量的SNL。涉及具体几何计算中,总构件面积功能可以从引擎与SNL定制的角度,特别实现。定制引擎后,对门窗的总面积再进行计算。然而,对于厂房的容积及长径比等,都需要在SNL中直接通过四则运算体现。这种情况的数据再与厂房类别集合进行笛卡尔积,最终SNL条款将达数十条,非常冗余。另一种方案是将泄压比直接作为一个计算性规则实现,理论上固然可行,但此方案需要修改引擎内核增加内置计算性规则。并且,这类与防火规范等某一本规范强相关的计算性规则,倘若都置于内核实现,内核将十分臃肿,同时容易产生规则冲突。
从本案例可发现,上述实施例介绍的插件化扩展方法能够不重新部署新版本BIMChecker引擎内核,针对复杂条款按照自然的思路仅进行简单的规则插件定义与算法构造后即可进行检查。同时,工具又不会遗失SNL对条款描述的流畅自然的能力,即SNL与计算性规则插件是相辅相成的状态。相比其他只能直接以代码或配置数据形式增加条款的模型检查工具,实现本方法的BIMChecker拥有编写、修改简单,可定制性强的优势。这样即可编制并运行新的复杂计算条款的计算性规则,部署新规则的成本能够得到有效的降低。最后,实验中也可得知,本方法仍需插件编写人员拥有一定的与SNL编制工作相近的思维能力,并且也需要付出一定的学习。相比完全无法实现该需求,或强行通过JAVA二次开发解决问题,插件编写的低难度性仍具有整体的优势。
相应于上述方法实施例,本发明实施例提供了一种插件式BIM模型检查装置,如图11所示,所述装置可以包括:
确定单元20,用于通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,所述插件标识与计算性规则中的几何计算相关;所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码;
嵌入单元22,用于基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中;
查询单元24,用于通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据;所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;
调用单元26,用于根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
可选的,所述确定单元20包括:
判断模块,用于通过对所述基于SNL的规则文件进行解析,判断SNL语句中是否含有插件标识,所述插件标识包括基于计算性规则中的几何计算确定的关键词或者基于计算性规则中的几何计算自定义的函数;
查找模块,用于若所述SNL语句中含有插件标识,则查找所述插件标识对应的计算性规则插件。
可选的,所述嵌入单元22,包括:
补充模块,用于补充与所述目标引擎相关的插件类声明和与插件类相关的函数,构成完整的插件类;补充所述原始检查引擎内置对象的引用;
解析模块,用于通过所述目标引擎中的类装载器,解析所述插件类,生成兼容所述原始检查引擎的目标对象。
可选的,所述装置还包括加载单元,所述加载单元用于按照与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及所述原始检查引擎内置规则的加载优先级依次降低的顺序进行加载。
可选的,所述装置还包括:
生成单元,用于对所有全局计算性规则插件加载完成后,生成一个包含所有全局计算性规则插件相关信息的插件列表,其中每个全局计算性规则插件对应一个计数器,所述计数器初始值为0;
计数单元,用于当接收到检查任务后,将所述检查任务对应的全局计算性规则插件的计数器加1;当确定所述检查任务完成后,将所述检查任务对应的全局计算性规则插件的计数器减1;
添加单元,用于当加载到更新后的全局计算性规则插件时,将所述更新后的全局计算性规则插件加入所述插件列表队尾;
更新单元,用于若检测到更新后的全局计算性规则插件所对应的原始全局计算性规则插件的计数器为0,则使用所述更新后的全局计算性规则插件执行后续接收到的检查任务。
可选的,所述装置还包括:
检测单元,用于在基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码之前,检测所述插件是否存在语法错误;
所述嵌入单元,用于若所述插件不存在语法错误,则基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码。
可选的,所述原始检查引擎为基于Java的检查引擎,所述目标引擎为Groovy引擎。
基于上述方法实施例,本发明的另一个实施例还提供了一种存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现如上所述的方法。
基于上述方法实施例,本发明的另一个实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的方法。
上述系统、装置实施例与方法实施例相对应,与该方法实施例具有同样的技术效果,具体说明参见方法实施例。装置实施例是基于方法实施例得到的,具体的说明可以参见方法实施例部分,此处不再赘述。本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。
Claims (10)
1.一种插件式BIM模型检查方法,其特征在于,所述方法包括:
通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,所述插件标识与计算性规则中的几何计算相关;所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码;
基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中;
通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据;所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;
根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
2.如权利要求1所述的方法,其特征在于,通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,包括:
通过对所述基于SNL的规则文件进行解析,判断SNL语句中是否含有插件标识,所述插件标识包括基于计算性规则中的几何计算确定的关键词或者基于计算性规则中的几何计算自定义的函数;
若所述SNL语句中含有插件标识,则查找所述插件标识对应的计算性规则插件。
3.如权利要求1所述的方法,其特征在于,基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中,包括:
补充与所述目标引擎相关的插件类声明和与插件类相关的函数,构成完整的插件类;
补充所述原始检查引擎内置对象的引用;
通过所述目标引擎中的类装载器,解析所述插件类,生成兼容所述原始检查引擎的目标对象。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
与基于SNL的规则文件绑定的计算性规则插件、全局计算性规则插件以及所述原始检查引擎内置规则的加载优先级依次降低。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
对所有全局计算性规则插件加载完成后,生成一个包含所有全局计算性规则插件相关信息的插件列表,其中每个全局计算性规则插件对应一个计数器,所述计数器初始值为0;
当接收到检查任务后,将所述检查任务对应的全局计算性规则插件的计数器加1;
当确定所述检查任务完成后,将所述检查任务对应的全局计算性规则插件的计数器减1;
当加载到更新后的全局计算性规则插件时,将所述更新后的全局计算性规则插件加入所述插件列表队尾;
若检测到更新后的全局计算性规则插件所对应的原始全局计算性规则插件的计数器为0,则使用所述更新后的全局计算性规则插件执行后续接收到的检查任务。
6.如权利要求1所述的方法,其特征在于,在基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码之前,所述方法还包括:
检测所述插件是否存在语法错误;
基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码包括:
若所述插件不存在语法错误,则基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码。
7.如权利要求1-6中任一项所述的方法,其特征在于,所述原始检查引擎为基于Java的检查引擎,所述目标引擎为Groovy引擎。
8.一种插件式BIM模型检查装置,其特征在于,所述装置包括:
确定单元,用于通过对基于建筑规则描述语言SNL的规则文件进行解析,确定所述规则文件中SNL语句包含的插件标识对应的计算性规则插件,所述插件标识与计算性规则中的几何计算相关;所述插件包括与所述插件标识相关的配置信息以及可执行的几何计算相关代码;
嵌入单元,用于基于与原始检查引擎兼容的目标引擎在所述插件中填充运行插件所需的预设通用代码,并对所述预设通用代码进行解析,以将所述插件嵌入所述原始检查引擎中;
查询单元,用于通过由所述SNL语句生成的SPARQL语句查询建筑语义模型,获得所述插件运行所需的模型数据;所述建筑语义模型为基于建筑信息模型BIM模型进行语义抽取获得的模型;
调用单元,用于根据所述模型数据反射调用所述插件,获得所述插件包含的计算性规则对应的查询结果。
9.一种存储介质,其特征在于,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1-7中任一项的方法。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1-7中任一项的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111412359.6A CN114064696A (zh) | 2021-11-25 | 2021-11-25 | 插件式bim模型检查方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111412359.6A CN114064696A (zh) | 2021-11-25 | 2021-11-25 | 插件式bim模型检查方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114064696A true CN114064696A (zh) | 2022-02-18 |
Family
ID=80276279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111412359.6A Pending CN114064696A (zh) | 2021-11-25 | 2021-11-25 | 插件式bim模型检查方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064696A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115576523A (zh) * | 2022-12-12 | 2023-01-06 | 数云科际(深圳)技术有限公司 | 一种基于模板自动生成检验规则语句的方法 |
-
2021
- 2021-11-25 CN CN202111412359.6A patent/CN114064696A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115576523A (zh) * | 2022-12-12 | 2023-01-06 | 数云科际(深圳)技术有限公司 | 一种基于模板自动生成检验规则语句的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9208057B2 (en) | Efficient model checking technique for finding software defects | |
Marcus et al. | Using the conceptual cohesion of classes for fault prediction in object-oriented systems | |
US8527965B2 (en) | Layered static program analysis framework for software testing | |
US7996816B2 (en) | Method and apparatus for dynamically binding service component implementations for specific unit test cases | |
US10803061B2 (en) | Software vulnerability graph database | |
CN111507086B (zh) | 本地化应用程序中翻译文本位置的自动发现 | |
US20170315903A1 (en) | Systems and methods for analyzing violations of coding rules | |
US8302069B1 (en) | Methods and systems utilizing behavioral data models with variants | |
US8959646B2 (en) | Automated detection and validation of sanitizers | |
US20080276221A1 (en) | Method and apparatus for relations planning and validation | |
CN112256271B (zh) | 一种基于静态分析的区块链智能合约安全检测系统 | |
US11301221B2 (en) | Rapid code compiling system | |
EP2199905A1 (en) | Lifecycle management and consistency checking of object models using application platform tools | |
US20220137959A1 (en) | Detecting duplicated code patterns in visual programming language code instances | |
CN114064696A (zh) | 插件式bim模型检查方法及装置 | |
US10929106B1 (en) | Semantic analyzer with grammatical-number enforcement within a namespace | |
Chen et al. | Tracking down dynamic feature code changes against Python software evolution | |
Gogolla et al. | Quality improvement of conceptual uml and ocl schemata through model validation and verification | |
Ajila et al. | Aspectualization of code clones—an algorithmic approach | |
US11782682B2 (en) | Providing metric data for patterns usable in a modeling environment | |
CN117370377B (zh) | 一种基于结构化查询语言的三维场景管理方法及装置 | |
Drechsler et al. | Automated and quality-driven requirements engineering | |
Žabokrtský et al. | TECTOMT, DEVELOPER'S GUIDE | |
Abdulla et al. | Replacing store buffers by load buffers in TSO | |
Savitskii et al. | Fast analysis of source code in C and C++ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |