3

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

例如:我们可以在 *.ifc 文件中替换IFCPERSONIfcPerson(camel case) 或(small) 吗?ifcperson

4

3 回答 3

1

How about applying the following convention in every single context:

Simply assume that they are case sensitive and work accordingly.

If you always do that, you will never have a problem.

If you see different casing examples, and all of them work, you can assume it is not case sensitive.

Otherwise, you will always be on the safe side if you simply follow the case conventions that you see and are proven.

Furthermore, you should always implement unit tests for every piece of functionality.

If you have questions about case sensitivity, implement unit tests to prove your assumptions right.

于 2019-03-13T13:46:50.890 回答
0

您可能想查看定义 STEP 数据格式(.ifc 文件的文件格式)的 ISO10303-p21 的在线版本。

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

于 2019-03-14T13:27:25.680 回答
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文档中看到的骆驼案例并不重要,只是为了便于阅读而选择。

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

当涉及到 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 文件,因为它不符合标准,或者只是忽略不是全大写的实体。想象一个实现,它只是将模式定义转换为大写,然后对实体实例类型进行区分大小写的查找。这将完全符合标准。

于 2019-03-18T02:56:55.353 回答