【问题标题】:Are IFC entity type names case sensitive or not?IFC 实体类型名称是否区分大小写?
【发布时间】:2019-08-03 18:27:51
【问题描述】:

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

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

【问题讨论】:

    标签: autodesk-forge revit ifc bim freecad


    【解决方案1】:

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

    只需假设它们区分大小写并相应地工作。

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

    如果您看到不同的大小写示例,并且它们都有效,您可以假设它不区分大小写。

    否则,如果您只遵循您看到并得到证明的案例约定,您将永远是安全的。

    此外,您应该始终为每个功能实施单元测试。

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

    【讨论】:

    • 你知道国际金融公司是什么吗?根据您的回答,您只是在谈论字母。因为我的问题是如果区分大小写,那么它会是上层还是骆驼。因为在我的测试过程中这两种格式都适用于我
    • 我知道国际金融公司是什么。两三年前,我是 IFC 的创始成员和全球国际秘书之一 :-) 根据 STEP 文件格式规范,“单个实体数据类型的实例通过用大写字母书写实体名称来表示",参见。 [ISO 10303-21 维基百科描述](en.wikipedia.org/wiki/ISO_10303-21)。
    • 但是,IFC 工具包通常以区分大小写的语言(例如 C++)实现,并使用实体名称的驼峰式大小写以提高可读性。所以我想这取决于上下文。
    【解决方案2】:

    您可能想查看an online version of ISO10303-p21,它定义了 STEP 数据格式(.ifc 文件的文件格式)。

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

    【讨论】:

    • 我同意您的观点,先生,ISO 区分大小写,IFC 在其工作期间使用它,但这些是 ISO 标准,他们正在谈论 Iso 中使用的关键字及其格式。但是 Building smart 已经定义了它的 IFC 实体,我只是想知道它们都是上层还是 Camel Case。
    • Buildingsmart 对其 .ifc 文件使用 STEP 数据格式。因此 ISO-10303-p21 中的规则适用于这些文件。在规范(例如buildingsmart-tech.org/ifc/IFC4/Add2TC1/html 以及 EXPRESS 模式规范)中,他们使用的是驼峰式大小写。尽管如此,如果您想编写符合标准的 .ifc 文件,则必须遵守 STEP 数据格式。
    • 我不会考虑这种区分大小写的问题。在这个特定的上下文中,如果具有不同大小写的实体类型的标识符表示不同的类型,我会说区分大小写。如果表壳固定在上部,从技术上讲这是不可能的。 EXPRESS 中的实体类型名称绝对不区分大小写,STEP 文件的大写限制只是为了避免混淆。
    【解决方案3】:

    让我们看看 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 不同。

    STEP 解析器区分大小写

    回到原来的问题,IFCPERSON是否可以替换为IfcPerson。如果您在哪里编写标准,您可以使用任何您喜欢的大小写,因为实体类型名称不区分大小写。

    ENTITY IfcPerson;
    

    如果您正在编写 IFC-STEP 文件,则对标准的严格解释需要以大写形式编写实体类型名称。

    #1 = IFCPERSON('ID', 'Last', 'First', $, $, $, $, $));
    

    实际上,解析器无论如何都必须依赖模式的不区分大小写。因此,它们将对模式定义的实体类型名称执行不区分大小写的比较。他们很可能会在 *.ifc 文件中接受混合或小写的实体类型名称。

    但解析器也可以拒绝具有混合大小写实体类型名称的 IFC 文件,因为它不符合标准,或者只是忽略不是全大写的实体。想象一个实现,它只是将模式定义转换为大写,然后对实体实例类型进行区分大小写的查找。这将完全符合标准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 2018-09-07
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多