【发布时间】:2019-08-03 18:27:51
【问题描述】:
任何人都可以帮助了解 IFC 实体类型名称是区分大小写还是不区分大小写。
例如:我们可以在 *.ifc 文件中将 IFCPERSON 替换为 IfcPerson(驼峰式)或 ifcperson(小)吗?
【问题讨论】:
标签: autodesk-forge revit ifc bim freecad
任何人都可以帮助了解 IFC 实体类型名称是区分大小写还是不区分大小写。
例如:我们可以在 *.ifc 文件中将 IFCPERSON 替换为 IfcPerson(驼峰式)或 ifcperson(小)吗?
【问题讨论】:
标签: autodesk-forge revit ifc bim freecad
如何在每个上下文中应用以下约定:
只需假设它们区分大小写并相应地工作。
如果你总是这样做,你永远不会有问题。
如果您看到不同的大小写示例,并且它们都有效,您可以假设它不区分大小写。
否则,如果您只遵循您看到并得到证明的案例约定,您将永远是安全的。
此外,您应该始终为每个功能实施单元测试。
如果您对区分大小写有疑问,请实施单元测试来证明您的假设是正确的。
【讨论】:
您可能想查看an online version of ISO10303-p21,它定义了 STEP 数据格式(.ifc 文件的文件格式)。
第 5.4 章定义了实体名称所属的标记格式,仅包含大写字母和数字。所以基本上它们是区分大小写的,这意味着它们可能只包含大写字母。
【讨论】:
让我们看看 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 不同。
回到原来的问题,IFCPERSON是否可以替换为IfcPerson。如果您在哪里编写标准,您可以使用任何您喜欢的大小写,因为实体类型名称不区分大小写。
ENTITY IfcPerson;
如果您正在编写 IFC-STEP 文件,则对标准的严格解释需要以大写形式编写实体类型名称。
#1 = IFCPERSON('ID', 'Last', 'First', $, $, $, $, $));
实际上,解析器无论如何都必须依赖模式的不区分大小写。因此,它们将对模式定义的实体类型名称执行不区分大小写的比较。他们很可能会在 *.ifc 文件中接受混合或小写的实体类型名称。
但解析器也可以拒绝具有混合大小写实体类型名称的 IFC 文件,因为它不符合标准,或者只是忽略不是全大写的实体。想象一个实现,它只是将模式定义转换为大写,然后对实体实例类型进行区分大小写的查找。这将完全符合标准。
【讨论】: