Форматы путей к файлам и каталогам
Colorer Library поддерживает несколько форматов и механизмов для указания путей к файлам и каталогам. Это абсолютные и относительные пути, ссылки на файлы внутри ZIP-архивов и использование переменных окружения. Данные форматы применимы при указании местоположения файлов в конфигурационных XML-файлах (например, в catalog.xml), а также внутри HRC- и HRD-файлов (например, для импорта других схем или указания на внешние ресурсы).
Абсолютный (полный) путь
Это стандартный полный путь к файлу или каталогу в файловой системе операционной системы. Например:
c:\user\test\1.xml
/home/user/1.xml
Длинные пути (Windows)
Для операционной системы Windows Colorer Library поддерживает специальный префикс \\?\
для работы с путями, превышающими стандартное ограничение MAX_PATH. Это позволяет обращаться к файлам и каталогам с очень длинными именами или глубокой вложенностью. Пример: \\?\C:\Very long path\Another very long path segment\...\file.txt
Относительный путь
Относительный путь указывает местоположение файла или каталога относительно другого, "базового" пути. В контексте Colorer Library базовым путем обычно является местоположение файла, в котором данный относительный путь указан (например, catalog.xml или HRC-файл).
Путь считается относительным, если он не является абсолютным (т.е. не начинается с корневого каталога или буквы диска в Windows) и может содержать специальные обозначения, такие как .
(текущий каталог) и ..
(родительский каталог).
Пример: Если в файле C:\projects\my_project\config\catalog.xml
указан относительный путь ../schemas/main.hrc
, то он будет разрешен в абсолютный путь C:\projects\my_project\schemas\main.hrc
.
Файл внутри ZIP-архива
Colorer Library позволяет обращаться к файлам, находящимся внутри ZIP-архивов. Это особенно удобно для распространения библиотек схем, которые могут содержать большое количество HRC и HRD файлов.
Синтаксис пути к файлу внутри архива следующий:
jar:путь_до_архива!путь_до_файла_в_архиве
Где:
jar:
– специальный префикс, указывающий на использование ZIP-архива. (Примечание: префиксjar
является историческим наследием, так как JAR-файлы в Java являются ZIP-архивами).<путь_к_ZIP_архиву>
– путь к самому ZIP-файлу. Этот путь может быть абсолютным, относительным или использовать переменные окружения (см. ниже).!
– разделитель между путем к архиву и путем внутри архива.<путь_к_файлу_внутри_архива>
– путь к целевому файлу или каталогу внутри структуры ZIP-архива.- Пример:
jar:schemes.zip!languages/cplusplus.hrc
Этот путь указывает на файл languages/cplusplus.hrc
, который находится внутри архива schemes.zip
. Если schemes.zip
указан без абсолютного пути, он будет искаться относительно базового пути (например, каталога, где находится catalog.xml
).
Сам <путь_к_ZIP_архиву>
может быть задан с использованием любого из форматов, описанных в этом разделе (абсолютный, относительный, с переменными окружения).
Использование переменных окружения
Colorer Library поддерживает подстановку значений переменных окружения в путях к файлам и каталогам. Синтаксис зависит от операционной системы:
- Windows: Переменные указываются в формате
%VARIABLE_NAME%
(например,%COLORER_HOME%\catalog\catalog.xml
). - Linux/macOS: Переменные указываются в формате
$VARIABLE_NAME
или${VARIABLE_NAME}
(например,$COLORER_HOME\catalog\catalog.xml
или${COLORER_HOME}\catalog\catalog.xml
).
Особенности указания путей в XML External Entities
При определении внешних XML-сущностей (External Entities) в декларации DOCTYPE
XML-файла (например, в catalog.xml), строка, указанная в атрибуте SYSTEM
, также интерпретируется как путь к файлу. Например:
<!ENTITY my_include SYSTEM "includes/common_settings.xml">
Эти пути в целом следуют ранее описанным правилам (абсолютные, относительные, ссылки на архивы), но имеют важные отличия при использовании переменных окружения:
- Формат переменных окружения: Независимо от операционной системы, переменные окружения внутри SYSTEM-идентификатора всегда указываются в формате
$VARIABLE_NAME
(без{}
) - Префикс
env:
для путей с переменными окружения (не в архивах): Если путь содержит переменную окружения и не является путем к файлу внутри архива (т.е. не начинается сjar:
), он должен начинаться со специального префиксаenv:
. Этот префикс указывает парсеру Colorer, что необходимо произвести подстановку переменных окружения.
Примеры:
<!ENTITY catalog-console SYSTEM "hrd/catalog-console.xml">
<!ENTITY catalog-console SYSTEM "jar:data/common-allpacked.zip!hrd/catalog-console.xml">
jar:
, путь к архиву data/common-allpacked.zip
разрешается относительно текущего XML-файла.
<!ENTITY catalog-console SYSTEM "env:$FARHOME/hrd/catalog-console.xml">
$FARHOME
будет заменено значением переменной окружения. Префикс env:
обязателен, так как путь не указывает на архив.
<!ENTITY catalog-console SYSTEM "jar:$FARHOME/data/common-allpacked.zip!hrd/catalog-console.xml">
$FARHOME
будет заменено значением переменной окружения. Префикс env:
не нужен, так как путь уже начинается с jar:
, что является достаточным указанием для специальной обработки.