IFC实体类型名称是否区分大小写?

时间:2019-03-13 06:36:03

标签: autodesk-forge revit ifc bim freecad

任何人都可以帮助了解IFC实体类型名称区分大小写还是不区分大小写。

例如:是否可以在* .ifc文件中将IFCPERSON替换为IfcPerson(驼峰大小写)或ifcperson(小)?

3 个答案:

答案 0 :(得分:1)

如何在每个上下文中应用以下约定:

简单地假设它们区分大小写并可以正常工作。

如果您始终这样做,那么您永远不会有问题。

如果您看到不同的大小写示例,并且所有示例均有效,则可以假定它不区分大小写。

否则,如果您仅遵循所看到并证明的案例惯例,您将永远处于安全状态。

此外,您应该始终为每个功能实施单元测试。

如果您对区分大小写有疑问,请执行单元测试以证明您的假设正确。

答案 1 :(得分:0)

您可能想看看an online version of ISO10303-p21,它定义了STEP数据格式(.ifc文件的文件格式)。

第5.4章定义了实体名称所属的令牌的格式,只包含大写字母和数字。因此,基本上它们是区分大小写的,这意味着它们只能包含大写字母。

答案 2 :(得分:0)

让我们看看如何在EXPRESS(用于指定模式)和STEP物理文件(用于实际* .ifc文件)的标准中定义大小写。

架构定义中的实体类型名称

根据ISO10303-11,在EXPRESS中,实体名称不区分大小写。语法仅提及实体标识符的小写字母(第7.4节标识符和7.1.2字母),为 EXPRESS 保留字(例如ENTITY)保留大写字母。

entity_head = ENTITY entity_id subsuper ";" .
entity_id = simple_id .
simple_id = letter { letter | digit | '_' }
letter = 'a' | 'b' | 'c' | ... | 'x' | 'y' | 'z'

因此,架构无法定义仅因大小写而不同的两个不同实体类型。此外,该标准还明确规定了不区分大小写:

  

EXPRESS 使用英语字母[..]的大写和小写字母。仅在显式字符串文字中,字母的大小写才有意义。   注意- EXPRESS 可以使用大写,小写或大小写混合的字母[..]来编写。

因此,您在IFC-EXPRESS定义(例如IFC4)和相应的BuildingSMART documentation中看到的驼峰案例并不重要,只是为了便于阅读而选择。

实例编码中的实体类型名称

当涉及到STEP物理文件编码(ISO10303-21)和您的实际实例文件时,该语法仅提及实体类型的大写字符:

SIMPLE_ENTITY_INSTANCE  = ENTITY_INSTANCE_NAME "=" SIMPLE_RECORD ";" .
SIMPLE_RECORD = KEYWORD "(" [ PARAMETER_LIST ] ")" .
KEYWORD = USER_DEFINED_KEYWORD | STANDARD_KEYWORD .
STANDARD_KEYWORD  = UPPER { UPPER | DIGIT } .
UPPER = "A" | "B" | "C" | .. | "X" | "Y" | "Z" | "_" .

ISO10303-21进一步指定了如何将架构定义映射到实际的IFC文件(第12.2节)。关于实体类型名称的编码,它指出STEP文件应仅使用大写字符。

  

[..]在任何一种情况下,任何小写字母均应转换为小写字母   相应的大写字母,即编码中不得包含   任何小写字母。

这也可以确保不区分大小写,但是方式与EXPRESS不同。

STEP解析器中的大小写敏感性

回到最初的问题,是否可以将IFCPERSON替换为IfcPerson。如果您在哪里编写标准,则可以使用任意大小写,因为实体类型名称不区分大小写。

ENTITY IfcPerson;

如果您正在编写IFC-STEP文件,则对该标准的严格解释将要求以大写形式写实体类型名称。

#1 = IFCPERSON('ID', 'Last', 'First', $, $, $, $, $));

在实践中,解析器无论如何都必须依赖于模式的不区分大小写。因此,它们将对与模式定义的实体类型名称进行不区分大小写的比较。他们很可能会在* .ifc文件中接受大小写混合的实体类型。

但是,解析器还可以拒绝大小写混合的IFC文件,因为它们不符合标准,或者只是忽略了不是全大写的实体。想象一下一个实现,该实现只是将模式定义转换为大写,然后对实体实例类型进行区分大小写的查找。这完全符合标准。