任何人都可以帮助了解IFC实体类型名称区分大小写还是不区分大小写。
例如:是否可以在* .ifc文件中将IFCPERSON
替换为IfcPerson
(驼峰大小写)或ifcperson
(小)?
答案 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不同。
回到最初的问题,是否可以将IFCPERSON
替换为IfcPerson
。如果您在哪里编写标准,则可以使用任意大小写,因为实体类型名称不区分大小写。
ENTITY IfcPerson;
如果您正在编写IFC-STEP文件,则对该标准的严格解释将要求以大写形式写实体类型名称。
#1 = IFCPERSON('ID', 'Last', 'First', $, $, $, $, $));
在实践中,解析器无论如何都必须依赖于模式的不区分大小写。因此,它们将对与模式定义的实体类型名称进行不区分大小写的比较。他们很可能会在* .ifc文件中接受大小写混合的实体类型。
但是,解析器还可以拒绝大小写混合的IFC文件,因为它们不符合标准,或者只是忽略了不是全大写的实体。想象一下一个实现,该实现只是将模式定义转换为大写,然后对实体实例类型进行区分大小写的查找。这完全符合标准。