Являются ли имена типов объектов IFC чувствительными к регистру или нет? - PullRequest
3 голосов
/ 13 марта 2019

Может ли кто-нибудь помочь узнать, являются ли имена типов объектов IFC чувствительными к регистру или нечувствительными к регистру.

Например: можем ли мы заменить IFCPERSON на IfcPerson (верблюжий чемодан) или ifcperson (маленький) в файле * .ifc?

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Как насчет применения следующего соглашения в каждом отдельном контексте:

Просто предположите, что они чувствительны к регистру и работают соответственно.

Если вы всегда так делаете, у вас никогда не будет проблем.

Если вы видите разные примеры корпусов, и все они работают, вы можете предположить, что они не чувствительны к регистру.

В противном случае вы всегда будете в безопасности, если будете просто следовать условным обозначениям, которые вы видите и доказали.

Кроме того, вы всегда должны реализовывать модульные тесты для каждого элемента функциональности.

Если у вас есть вопросы по поводу чувствительности к регистру, используйте модульные тесты, чтобы подтвердить свои предположения.

0 голосов
/ 18 марта 2019

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

0 голосов
/ 14 марта 2019

Возможно, вы захотите взглянуть на онлайн-версию ISO10303-p21 , которая определяет формат данных STEP (формат файлов .ifc).

Глава 5.4 определяет формат токенов, к которым относятся имена сущностей, которые должны содержать только заглавные буквы и цифры. Поэтому в основном они чувствительны к регистру, то есть они могут содержать только заглавные буквы.

...