Давайте посмотрим, как определяются случаи в стандартах для 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 с именами типов объектов со смешанным регистром как не соответствующий стандарту или простоигнорировать сущности, которые не являются все капиталПредставьте себе реализацию, которая просто преобразует определения схемы в верхний регистр, а затем выполняет поиск с учетом регистра для типов экземпляров сущности.Это было бы идеально в соответствии со стандартом.