任何人都可以帮助了解IFC实体类型名称是区分大小写还是不区分大小写。
例如:我们可以用* .ifc文件中的IFCPERSON
(camel case)或IfcPerson
(small)替换ifcperson
吗?
如何在每个上下文中应用以下约定:
简单地假设它们区分大小写并相应地工作。
如果你总是这样做,你永远不会有问题。
如果您看到不同的外壳示例,并且所有这些示例都有效,则可以假设它不区分大小写。
否则,如果您只是遵循您看到并经过验证的案例约定,您将始终处于安全的一面。
此外,您应该始终为每个功能实现单元测试。
如果您对区分大小写有疑问,请执行单元测试以证明您的假设是正确的。
您可能需要查看定义STEP数据格式(.ifc文件的文件格式)的an online version of ISO10303-p21。
第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文件,因为它不符合标准,或者只是忽略非全部资本的实体。想象一下只是将模式定义转换为大写的实现,然后对实体实例类型进行区分大小写的查找。这完全符合标准。