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

Autodesk forge IFC实体类型名称是否区分大小写?,autodesk-forge,revit,ifc,bim,freecad,Autodesk Forge,Revit,Ifc,Bim,Freecad,任何人都可以帮助了解IFC实体类型名称是区分大小写还是不区分大小写 ENTITY IfcPerson; 例如:我们可以将*.ifc文件中的IFCPERSON替换为IFCPERSON(驼峰型)或IFCPERSON(小型)吗?在每个上下文中应用以下约定如何: 简单地假设它们区分大小写,并相应地工作 如果你总是这样做,你就永远不会有问题 如果您看到不同的套管示例,并且所有这些示例都有效,则可以假定它不区分大小写 ENTITY IfcPerson; 否则,如果你只是简单地遵循你所看到并被证明的案例惯

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

ENTITY IfcPerson;

例如:我们可以将*.ifc文件中的
IFCPERSON
替换为
IFCPERSON
(驼峰型)或
IFCPERSON
(小型)吗?

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

简单地假设它们区分大小写,并相应地工作

如果你总是这样做,你就永远不会有问题

如果您看到不同的套管示例,并且所有这些示例都有效,则可以假定它不区分大小写

ENTITY IfcPerson;
否则,如果你只是简单地遵循你所看到并被证明的案例惯例,你将永远是安全的

此外,您应该始终为每一项功能实现单元测试


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

您可能需要查看定义STEP数据格式(.ifc文件的文件格式)的文件


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

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

架构定义中的实体类型名称 根据,在EXPRESS中,实体名称不区分大小写。语法仅提及实体标识符的小写字母(第7.4节标识符和第7.1.2节字母),保留大写字母表示保留单词,如
实体

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定义(例如for)和相应BuildingSMART中看到的驼峰案例并不重要,只是为了可读性而选择的

实例编码中的实体类型名称 当涉及到物理文件编码()步骤和实际实例文件时,语法只提到实体类型的大写字符:

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

您知道IFC是什么吗?根据你的回答,你只是在谈论字母表。因为我的问题是,如果区分大小写,那么它将是大写还是驼色。由于这两种格式在我的测试中都适用,我确实知道IFC是什么。二三十年前,我是IFC的创始成员之一和全球国际秘书:-)根据STEP文件格式规范,“单一实体数据类型的实例通过以大写字母书写实体名称来表示”,参见[ISO 10303-21 Wikipedia description]()。但是,IFC工具包通常以一种区分大小写的语言(例如C++)实现,并使用实体名称的CAMEL外壳来提高可读性。因此,我想这取决于上下文。我同意你的观点,先生,ISO是区分大小写的,IFC在其工作期间使用它,但这些是ISO标准,他们谈论的是ISO中使用的关键字及其格式。但是Buildingsmart已经定义了它的IFC实体,我只知道它们都是大写还是小写。因此ISO-10303-p21中的规则适用于这些文件。在规范中(例如,以及th EXPRESS模式规范),他们使用的是驼峰大小写。然而,如果你想编写符合标准的.IFC文件,你必须遵守STEP数据格式。我不认为这种情况是敏感的。在这个特定的上下文中,如果具有不同大小写的实体类型的标识符表示不同的类型,那么我将谈论大小写敏感度。从技术上讲,如果外壳固定在上部,这是不可能的。EXPRESS中的实体类型名称绝对不区分大小写,STEP文件的大写限制只是为了避免混淆。