Informix Logo


Informix Magazine Russian Edition Декабрь 1997г.

Житкова Н.И.   ИВВС РАН
Сотников А.Н. ИВВС РАН
Малинин А.И.    ИВВС РАН
Челноков В.П.   ИВВС РАН
Хусаинов М.М.  ИВВС РАН
Трусов А.В.        МИФИ

GLS-система глобальной поддержки языков в Informix.

Введение

Выполнение большинства приложений, выполняемых на сервере БД или на компьютере клиента, не зависит от языковой среды. Однако это не всегда так. Например, сервер БД должен уметь по-разному сортировать символьные данные, составленные на английском и французском языках. Кроме того, приложение должно по-разному отображать французские и английские денежные значения.

Фирма Informix попыталась максимально удовлетворить пожелания разработчиков приложений и предложила универсальный подход к решению проблемы поддержки работы приложений в любой языковой среде. Начиная с версии 7.2, все ее основные продукты: серверы БД и интерфейсы API, оснащены GLS (Global Language Support) - системой глобальной поддержки языков. Для этого в состав этих продуктов включены локали - файлы описаний языковой cреды, а также файлы перекодировок. Кроме того, GLS включает соответствующие библиотеки функций.

Если пользователь хочет запустить приложение сервера БД в своей национальной среде, то он должен правильно установить переменные окружения GLS для этой национальной среды. Тогда любое правильно разраьотанное приложение без какой-либо переделки будет работать в этой национальной среде. Например, если во Франции была сделана программа бухгалтерского учета, то после правильной установки переменных окружения для русской среды она будет выдавать денежные значения не во франках, а в рублях. Кроме того, символьные данные будут отсортированы в соответствии с алфавитом русского, а не французского языка.

Система GLS также поддерживает более ранние системы поддержки национальной среды, разработанные в Informix - NLS и ALS. Эти системы кратко описаны ниже.

Большая помощь при написании этой статьи была оказана Европейским Центром локализации фирмы Informix (Informix Software Ireland Lmd.; Ирландия, Дублин).
Особую признательность хотелось бы выразить руководителю проекта Дайдре Вильямс и ведущим сотрудникам: Хелен Вошерн (руководитель группы), Айлин Ахерн, Мари Леонард, Джону О'Дрискол (руководитель группы), Джону Гриффин и Майклу Корзи (руководитель группы). Кроме того, хотелось бы поблагодарить Абрахама Тхпопхилуса (МИФИ), сделавшего ценные замечания при прочтении рукописи статьи.
 

1. Система поддержки национальных языков NLS

Система поддержки национальных языков NLS (Native Language Support) была разработана для продуктов Informix версии 6.х и выше (раньше, чем система GLS). Она не является логическим подмножеством системы GLS. В настоящее время Informix рекомендует применять только систему GLS, хотя в GLS поддерживаются более ранние разработки на базе NLS.

Система NLS применяется при обработке данных, составленных на европейских языках с использованием 8-битовых кодировок.

Кодировка ASCII традиционно используется во всех компьютерных системах. Она содержит 128 символов, коды которых (7-битовые байты в диапазоне от 0 до 127) занимают левую половину однобайтовой таблицы кодировки.

8-битовым символом называется однобайтовый символ, код которого принадлежат диапазону от 128 до 255 и располагается в правой половине однобайтовой таблицы кодировки. Алфавиты большинства языков европейских стран имеют менее 256 символов, и для их представления достаточно однобайтовой кодировки.

В странах Западной Европы используется латинский алфавит (как и в английском языке) или его расширение, поэтому однобайтовые таблицы кодировок для языков этих стран имеют следующую структуру: левую половину таблицы занимают символы ASCII, а правую половину - дополнительные символы. Например, в правую половину кодировки ISO8859-1 "залезают" диакритические и денежные символы.

Во многих странах Восточной Европы используется свой алфавит - "кириллица", который не пересекается с латинским алфавитом. Таблицы кодировок этих стран построены так: левую половину таблицы занимают символы ASCII, а правую половину - буквы национального алфавита. Существует международная кодировка ISO8859-5, содержащая символы всех "кириллиц", в том числе и символы русского языка.

Сейчас в России используются и другие кодировки: CP866 (в MS-DOS), CP1251 (во всех Windows) и KOI-8 (в E-Mail). Русская локализация продуктов Informix обеспечивает поддержку всех этих 4 кодировок.

Все кодировки включают в себя ASCII-символы, поэтому ASCII-буквы (A-Z и a-z) также считаются буквами всех кодировок. Полное описание языка (помимо кодировки) должно содержать описание назначения символов (какие символы используются как буквы, цифры, пробелы), упорядочивания символов, а также форматы даты/времени и числовых и денежных значений.

Описания языковых сред хранятся в специальных файлах, которые называются локалями (locale). Во многих ОС имеются средства составления локалей и их категорий. Обычно для задания в ОС национальной среды требуется:
- составить файлы-локали, оттранслировать их и поместить в специальный каталог;
- с помощью специальных переменных окружения указать нужную локаль и ее категории.

Часто ОС снабжены уже готовыми к работе файлами локалей. Поэтому все, что требуется для включения в ОС национальной среды - это правильно установить ее переменные окружения.

Система NLS использует именно такую поддержку национальной среды в ОС. Кроме того, она рассчитана на возможность обработки в ОС 8-битовых символов.

Серверы БД, поддерживающие NLS, могут обрабатывать данные типа NCHAR и NVARCHAR, хранящие символы национального языка. В отличие от старых типов данных CHAR и VARCHAR, сервер БД сортирует данные типа NCHAR и NVARCHAR по алфавиту, описанному в локали ОС.
 

2. Система поддержки азиатских языков ALS

Многие языки стран Восточной Азии содержат от 3000 до 8000 символов-иероглифов. Поэтому кодировки этих языков содержат как однобайтовые, так и многобайтовые символы, и называются многобайтовыми.

Для языков стран Восточной Азии (Китая, Японии и Кореи) в Informix была создана система поддержки азиатских языков ALS (Asian Language Support), которая применяется для работы в средах, использующих многобайтовые кодировки.

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

При обработке многобайтовых символов возникает масса проблем. Опишем некоторые из них.
- Для сортировки многобайтовых символов нужно использовать специальные функции, поскольку длина разных символов неодинакова.
- Усложняется задача перекодировки текстов, поскольку размер исходной строки в общем случае не равен размеру перекодированной строки.
- При просмотре многобайтовых строк также нужно учитывать разную длину многобайтовых символов.

Кроме того, при обозначении даты/времени в некоторых странах Восточной Азии используются эры (согласно периодам правления местных императоров), а также специальные обозначения цифр, что усложняет задание форматов ввода и вывода. Все эти проблемы успешно решены в GLS.
 

3.1. Основные достоинства GLS

Система глобальной поддержки языков GLS (Global Language Support) позволяет продуктам Informix легко обрабатывать данные, составленные на разных национальных языках в соответствующих кодировках. В этих данных могут быть использованы обозначения, принятые в разных странах Европы, Восточной Азии, Латинской Америки и Ближнего Востока.

Ранее продукты Informix использовали либо средства ALS для поддержки азиатских многобайтовых данных, либо средства NLS для поддержки однобайтовых данных, составленных на европейском языке.

В системе GLS используется унифицированный способ хранения сведений по национальной среде - локали GLS. Локаль GLS - это файл, хранящийся в специальном каталоге Informix. Когда продукту Informix нужно получить сведения по национальной среде, он вызывает функции библиотеки GLS, которые, в свою очередь, обращаются к соответствующей локали GLS и возвращают запрашиваемые сведения. Локаль указывается с помощью переменной окружения.

Средства GLS обеспечивают более мобильный способ поддержки национальной среды по сравнению с ОС. Во многих ОС реализована поддержка национальных данных. Однако в разных ОС это делается по-разному. В настоящее время для описания форматов национальной среды существует не один стандарт. Поэтому при переносе приложения из одной ОС в другую может возникнуть необходимость в изменении способов запросов языковой поддержки у ОС, используемых в приложении. Более того, может так оказаться, что новая ОС вообще не предоставляет такие возможности по языковой поддержке, какие обеспечивала прежняя ОС.

Продукты Informix, использующие GLS, обращаются за сведениями по национальной среде независимо от ОС, под управлением которой они работают. Они могут найти сведения локали на любой платформе.

И, наконец, средства GLS обеспечивают преемственность в работе приложений: если приложение было создано в расчете на использование NLS или ALS, то оно также сможет работать и в среде GLS. Для этого в комплект локалей GLS входят локали ОС, которыми могут воспользоваться указанные приложения.

Локали GLS составляются только специалистами Informix и поставляются вместе с продуктами Informix. Пользователи не могут их изменять.
 

3.2. Поддержка GLS на серверах БД Informix

С помощью средств GLS все три типа существующих серверов БД фирмы Infоrmix: INFORMIX-Universal Server, INFORMIX OnLine Dynamic Server и INFORMIX-SE, обеспечивают поддержку следующих возможностей национальной среды:

- обработка символов и символьных строк, составленных в кодировке, включающей не-ASCII-символы
Не-ASCII-символы можно использовать для обозначения имен объектов БД. Эти имена объектов можно сортировать по алфавиту. Не-ASCII-символы можно также применять при вычислении спецификаторов WHERE и ORDER BY операторов SELECT или для сортировки данных столбцов типа NCHAR и NVARCHAR. При этом не требуется изменять существующие программы.

- Вычисление регулярных выражений
Не-ASCII-символы можно использовать в операциях сравнения регулярных выражений, использующих данные типа NCHAR и NVARCHAR.

- Трансляция значений, обозначающих даты, моменты времени, числа и денежные значения
Можно применять национальные форматы для обозначения значений дат, моментов времени, числовых и денежных значений. Сервер БД может выполнить трансляцию этих форматов в соответствующие внутренние форматы БД.

- Возможность использования ранее несовместимых кодировок символов
На стороне клиента можно выполнять перекодировку между совместимыми кодировками, что обеспечит возможность взаимодействия БД и их клиентов, использующих разные кодировки.
 

3.3. Возможности GLS, предоставляемые приложениями-клиентами Informix

При использовании средств GLS в качестве приложения-клиента может выступать либо приложение интерфейса SQL API (INFORMIXESQL/C или INFORMIXESQL/COBOL), либо утилита сервера БД Informix (DB-Access, dbexport или onmode). Далее перечислены приложения, обеспечивающие поддержку возможностей GLS:
- DB-Access допускает использование не-ASCII-символов и возможность сортировки по локализации объектов БД.
- программы интерфейсов SQL API могут использовать не-ASCII-символы в именах главных и индикаторных переменных, а также в именах объектов БД.
- в утилитах сервера БД dbexport и onmode можно указывать не-ASCII-символы в ключах командной строки.
 

3.4. Дополнительные возможности GLS

В состав продуктов Informix входят файлы локалей GLS, предназначенные для поддержки локали по умолчанию (американской локали U.S. English) и большинства неазиатских локалей. Если же пользователь не нашел локаль своего языка, то он должен инсталлировать инструмент "Поддержка национальных языков" (Language Supplement) для добавления описания своего языка в продукт Informix.

Этот инструмент "Поддержка национальных языков" предоставляет файлы локалей и сообщений об ошибках для нескольких языков. Инструмент "Интернациональная поддержка языков" (International Language Supplement) обеспечивает поддержку всех неазиатских языков. Кроме того, с помощью дополнительных инструментов можно получить поддержку для азиатских языков (таких как корейский, японский и китайский языки).
 

3.5. Локаль GLS

3.5.1. Общее представление о локали GLS

Локаль GLS - это набор файлов Informix, содержащих описания национальной среды.

Различают три вида файлов локалей:
- собственно файлы локалей, описывающие особенности языка (файлы локалей);
- файлы, описывающие кодировки (файлы кодировок);
- файлы, описывающие перекодировки (файлы перекодировок).

Все эти файлы сначала составляются специалистами Informix в виде исходных текстовых файлов, а затем транслируются в объектные файлы, которые и используются серверами БД и приложениями. Они не зависят от используемых платформ, и их можно переписывать с одной платформы на другую. Единственное ограничение: эти файлы должны быть размещены в соответствующем каталоге и иметь правильное имя.
 

3.5.2. Схемы упорядочивания

Под упорядочиванием понимается порядок сортировки символьных данных. Серверы БД Informix поддерживают следующие два способа упорядочивания символьных данных:
- упорядочивание по кодировке;
- упорядочивание по локализации.

Упорядочивание по кодировке определяется порядком расположения кодов символов в таблице кодировки. Сервер БД сортирует данные столбцов типа CHAR, VARCHAR и TEXT по кодировке.

Упорядочивание по локализации определяется порядком символов в алфавите национального языка. Локаль определяет порядок сортировки символов в соответствии с упорядочиванием по локализации и описывает его в категории COLLATION.

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

Если в локали GLS задано упорядочивание по локализации, то сервер БД отсортирует данные столбцов типа NCHAR и NVARCHAR по локализации. В общем случае, сортировка по локализации выполняется медленнее, чем сортировка по кодировке.

Серверы БД Informix с поддержкой ALS используют упорядочивание по кодировке для столбцов типа CHAR и VARCHAR; однако они не поддерживают данные типа NCHAR и NVARCHAR.

Если в локали не определено упорядочивание по локализации, то сервер БД упорядочивает данные типа NCHAR и NVARCHAR по кодировке.
 

3.5.3. Форматы конечных пользователей

Формат конечных пользователей (далее просто формат пользователей) - это формат внешнего представления данных в приложении-клиенте, используемый при вводе/выводе данных.

Форматы пользователей используются для представления значений таких типов данных, форматы хранения которых в БД отличаются от форматов, к которым привыкли пользователи. Используя формат пользователей, данные могут указываться в операторах SQL как значения столбцов или же как параметры функций библиотек интерфейса SQL API.

Локаль GLS определяет форматы пользователей для денежных и числовых значений,

а также значений даты и времени.
 

3.5.4 Формат имени локали GLS

Имя локали GLS обозначает язык, территорию и кодировку, которую будет использовать продукт Informix. Это имя имеет следующий формат:

<язык> _ <территория> . <кодировка> [<@модификатор>]

где: кодировка - имя кодировки, поддерживаемой локалью; язык - 2-символьное имя, обозначающее язык конкретной локали; территория - 2-символьное имя, обозначающее территориальную национальную среду (например, с помощью этого спецификатора можно было бы указать язык, используемый в конкретных районах Швейцарии); модификатор - необязательный модификатор локали, состоящий из не более, чем 4 алфавитно-цифровых символов. Обычно модификатор задает специальный вид упорядочивания по локализации (по словарю или по телефонной книге).

Локаль, используемая по умолчанию, U.S. English имеет имя "en_us.кодировка", в котором "en" обозначает английский язык, "us" - территорию США, а "кодировка" - имя конкретной для данной платформы кодировки по умолчанию (например, en_us.cp1252 для Windows). Примером русской локали является ru_ru.CP1251, которая используется кодировку MS-Windows.

В имени локали ее кодировку можно указать либо в развернутом виде как имя этой кодировки (en_us.8859-1), либо в упакованном виде как сжатое имя этой кодировки (en_us.0333). Сжатое имя кодировки - это порядковый номер кодировки в системе нумерации IBM CCISD.
 

3.6. Использование локалей GLS в среде клиент/сервер

Когда приложение БД работает в среде клиент/сервер, то это приложение, сервер БД и используемые БД могут размещаться на разных машинах. Эти машины могут работать под управлением разных ОС и использовать разные системы языковой поддержки. Для языковой поддержки всех этих трех составляющих приложения БД продукты Informix предоставляют следующие локали:
- локаль клиента, используемая приложением для обработки символьных данных;
- локаль БД, используемая сервером для хранения символьных данных в БД и их обработки;
- локаль сервера, используемая сервером для обращения к своим рабочим файлам.

Если все эти локали GLS одинаковы или совместимы, то приложение не будет зависеть от того, как на конкретной машине ее ОС реализует средства поддержки используемых языков.

Локаль клиента указывается в переменной окружения CLIENT_LOCALE, а локаль БД - в переменной окружения DB_LOCALE. Эти переменные должны быть установлены для клиента на его машине. Локаль сервера БД указывается в переменной окружения SERVER_LOCALE, устанавливаемой на машине сервера БД.

Применяются следующие правила по умолчанию: если не установлена CLIENT_LOCALE, то используется локаль по умолчанию (en_us.кодировка). Если не установлена DB_LOCALE, то используется локаль, указанная в CLIENT_LOCALE. Если не установлена SERVER_LOCALE, то используется локаль по умолчанию.

Локаль национальной среды, отличной от американской, обычно называется неосновной локалью.

При подсоединении к серверу БД приложение-клиент АВТОМАТИЧЕСКИ передает этому серверу значения своих переменных CLIENT_LOCALE и DB_LOCALE. Если сервер БД обнаруживает несоответствие значений этих переменных, то выдает приложению-клиенту предупреждение, установив флаг SQLWARN7 в зоне связи сервера и приложения-клиента (структура SQLCA). Приложение-клиент в принципе может игнорировать это предупреждение и продолжить свою работу, но за это оно может поплатиться тем, что данные будут неправильно обработаны.

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

3.7 Рабочая локаль

Сервер БД использует рабочую локаль для получения им сведений по локали при поддержке работы своих внутренних сеансов и всех соединений. Когда сервер БД приступает к своей работе, он инициализирует в качестве рабочей локали локаль по умолчанию. Когда приложение-клиент запрашивает соединение, то сервер БД должен переопределить рабочую локаль для учета локали приложения-клиента и локали БД.

Сервер БД получает из своей рабочей локали следующие сведения:
- сведения по локали, используемые в БД (например, упорядочивание по локализации, используемое при сортировке данных типа NCHAR и NVARCHAR).
- сведения по локали, используемые для данных приложения-клиента (например, форматы пользователей).

Напомним также, что сервер БД использует локаль сервера для выполнения операций чтения и записи в собственные файлы, которые используются им в ОС.
 

3.8 Перекодировка

Продукты Informix используют локали GLS для выполнения перекодировки. Перекодировка может выполняться как на клиенте Informix, так и на сервере БД Informix. Сразу же заметим, что перекодировка выполняется АВТОМАТИЧЕСКИ, и ее не требуется программировать.

На этапе выполнения продукты Informix придерживаются следующих правил при определении используемых кодировок:
- приложение-клиент использует кодировку клиента (CLIENT_LOCALE) при записи во все файлы на своем компьютере, а также при вводе/выводе.
- сервер БД использует кодировку сервера (SERVER_LOCALE) при записи в свои файлы (такие как файлы отладки и предупреждений).
- сервер БД использует кодировку БД (DB_LOCALE) при обмене данными с БД.

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

Для каждого символа исходной кодировки в целевой кодировке должен существовать соответствующий ему символ. Однако если в целевой кодировке не отражены все символы исходной кодировки, то сама программа перекодировки должна определить, как преобразовать эти неучтенные символы.

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

В среде клиент/сервер перекодировка может потребоваться в следующих случаях:
-если локаль клиента и локаль БД имеют разные кодировки, то перекодировка выполняется на клиенте, чтобы уберечь компьютер сервера БД от выполнения этой работы;
-если локаль сервера и рабочая локаль имеют разные кодировки, то сервер БД выполняет перекодировку при проведении обмена с файлами операционной системы, например, при обращении к файлам журналов.

Для поддержки перекодировки используются файлы перекодировки. Если они отсутствуют, то клиент выдает ошибку в начале своей работы. При наличии же файлов перекодировок клиент автоматически выполняет перекодировку при обмене данными с сервером БД.
 

3.9 Интернационализация приложений с помощью интерфейса GLS API

Конечная цель интернационализации приложения - это создание (или изменение) приложения таким образом, чтобы при его использовании в другой языковой среде требовалось бы произвести только одно изменение: указать правильную локаль GLS.

В книге "Функциональные возможности GLS" (глава 4) обсуждаются вопросы, возникающие при создании приложения, которое должно отвечать всем требованиям интернационализации. В этой книге описываются функции и макроопределения, используемые для создания таких приложений.
 

Заключение

Система глобальной поддержки языков GLS представляет собой новое поколение средств интернационализации приложений БД фирмы Informix. Эта система является с одной стороны логическим продолжением развития средств NLS и ALS, а с другой стороны имеет новые возможности по сравнению с предыдущими системами, главная из которых - поддержка полной интернационализации при построении приложений БД. И все это не снижает эффективность их работы.

Управление национальной вычислительной средой производится только с помощью переменных окружения. Кроме того, система GLS поддерживает работу ранее созданных приложений, ориентированных на системы NLS и ALS.

Система GLS является платформно-независимой благодаря своим локалям. Если у пользователя не хватает файлов локалей и файлов перекодировок GLS на одной платформе, то он может их просто переписать с другой платформы (мы это проверяли). Не стоит даже говорить, как это удобно: переписываешь эти файлы с Unix на NT, и у тебя все работает.

В настоящее время глобальная поддержка языков реализована для поддержки новых типов данных на сервере БД INFORMIX-Universal Server. По ряду причин особенности ее применения на этом сервере в данной статье не описаны.

Несомненно, что у системы GLS имеются перспективы для развития. Надеемся, что в следующих версиях появятся новые возможности, а также будут устранены имеющиеся недостатки.
 

Литература

1. Функциональные возможности GLS. Руководство пользователя.
Informix Software Lmd.
Версия 9.1, март 1997 года, номер 000-4810-R.

2. DB-Access. Подсистема управления базами данных. Руководство пользователя.
Informix Software Lmd.
Версия 9.1, март 1997 года, номер 000-4811-R.
 


Украинская баннерная сеть
 

[Home]

Сайт поддерживается группой пользователей Информикс на Украине.

Hosted by NO-more.