Приложение 6. Структура файла документов и формат записи

The UNESCO micro CDS/ISIS Software

6.1. Формат записи файла документов

Записи документов являются записями переменной длины, содержащими три части: головная часть фиксированной длины, оглавление, и поля данных переменной длины.

6.1.1. Формат головной части

Головная часть содержит следующие 7 целых (поля, отмеченные * являются 31-битовыми целыми со знаком):

MFN   * Номер файла документов (МFN);
MFRL    Длина записи (всегда одинаковое число);
MFBWB * Обратный указатель - номер блока;
MFBWP   Обратный указатель - смещение;
BASE  Смещение для переменных полей (это комбинированная длина головной части и оглавления записи в байтах);
NVF     Число полей в записи (т. е. вхождений в оглавление);
STATUS  Индикатор логического удаления (0 = запись действительна, 1=запись отмечена для удаления).

MFBWB и MFBWP первоначально установлены в 0, когда запись создается. Впоследствии они обновляются каждый раз, когда сама запись обновляется (смотри ниже).

6.1.2. Формат оглавления.

Оглавление - это таблица указывающая на содержимое записи. Имеется одно вхождение в оглавление для каждого поля, представленного в записи (т. е. оглавление имеет точно ЧПЗ вхождений).
Каждое вхождение в оглавление состоит из 3 целых чисел:

TAG    Метка поля;
POS    Смещение позиции первого символа поля в части переменного поля (первое поле имеет POS=0);
LEN    Длина поля в байтах;

Общая длина оглавления в байтах является, таким образом, 6*NVF; поле BASE в головной части всегда: 18+6*NVF.

6.1.3. Переменные поля

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

6.2. Управляющая запись

Первая запись в главном файле является управляющей, ее система устанавливает автоматически. Это никогда не доступно пользователю ISIS. Ее содержание следующее (поля, отмеченные * являются 31-битовыми целыми со знаком):

CTLMFN * всегда 0;
NXTMFN * MFN назначен следующей создаваемой записи в базе данных;
NXTMFB * Номер последнего блока, расположенного в файле документов (первый блок равен 1);
NXTMFF   Смещение следующей доступной позиции в последнем блоке;
METYPE  Всегда 0 для данных пользователя (1 для файлов системных сообщений).

6.3. Формат блока файла документов

Записи файла документов записываются последовательно, одна за другой, каждая запись занимает точно MFRL байт. Файл записывается физическими блоками в 512 байт. Запись может начинаться на границе любого слова между 0-498 (ни одна запись не начинается между 500-510) и может продолжаться на втором и более блоках.

Так как файл документов создается и/или обновляется, система устанавливает индекс, указывающий позицию каждой записи. Индекс записывается в файле перекрестных ссылок (.XRF).

6.4. Файл перекрестных ссылок

Файл XRF организован, как таблица указателей на файл документов. Первый указатель соответствует MFN1, второй - MFN2 и т. д.
Каждый указатель

RECCNT *
MFCXX1 *
MFCXX2 *
MFCXX3 *

состоит из двух полей:

XRFMFB (21 бит) Номер блока файла документов, содержащего запись
XRFMFP (11 бит) Смещение в блоке позиции первого символа записи (первая позиция блока равна 0)

которые записаны в 31-битовом целом со знаком (4 байта) следующим образом:

указатель = XRFMFB*2048+XRFMFP

(таким образом, дающий максимальный размер файла документов в 500 Мегабайт).

Каждый блок файла XRF имеет 512 байт и содержит 127 указателей. Первое поле каждого блока (XRFPOS) является 31-битовым целым со знаком, имеющим абсолютное значение номера блока XRF. Отрицательный XRFPOS указывает на последний блок.

Удаленные записи указываются следующим образом:

XRFMFB 0 XRFMFP 0 логически удаленная запись (в этом случае ABS (XRFMFB) является точный указатель блока и XRFMFP является смещением записи, которая таким образом еще может быть восстановлена).
XRFMFB=-1 XRFMFP=0 физически удаленная запись.
XRFMFB=0 XRFMFP=0 несуществующая запись (все записи за самым большим MFN, присвоенным в базе данных)

6.5. Техника обновления файла документов
6.5.1. Создание новых записей

Новые записи всегда добавляются в конец файла документов, с позиции, указанной в полях NXTMFB/NXTMFP в управляющей записи файла документов. MFN, который будет назначен, также берется из поля NXTMFN в управляющей записи.

После добавления записи, NXTMFN увеличивается на 1 и NXT-MFB/NXTMFP обновляются на место следующей доступной позиции. При добавлении новый указатель в файле XRF и поле XRFMFP соответствует создаваемой записи, увеличенной на 1024, что указывает на необходимость инвертирования новой записи (после инвертирования новой записи, 1024 вычитается из XRFMFP).

6.5.2. Обновление существующих записей

Если вы обновляете запись (т. е. вы вызываете ее при вводе данных и выходите с помощью опции Х из редактора), система записывает запись обратно в файл документов, где запись зависит от статуса записи, которая была первоначально прочитана.

1. Попытка обновить запись не инвертированного файла

Это условие указывается следующим:

В  XRF  XRFMFP<512 и
В  MST  MFBWB=0 и MFWBP=0

В этом случае, запись всегда переписывается в конец файла документов (так, если бы это была новая запись), что указывается NXTMFB/NXTMFP в управляющей записи. В новой версии записи MFBWB/MFBWP устанавливаются на место старой версии записи, пока в файле XRF указатель не укажет на новую версию. При добавлении, 512 добавляется к XRFMFP, что указывает на необходимость обновления инвертированного файла. Когда инвертированный файл будет обновлен, старая версия записи будет определена к удалению, а новая версия будет добавлена к новому отправлению. После обновления инвертированного файла, 512 будет вычтено из XRFMFP, а MFBWB/MFBWP будут установлены в 0.

2. Попытка обновить инвертированный файл

Это условие указывается следующим:

В XRF XRFMFP  512 и
В MST MFBWB  0

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

6.5.3. Удаление записей.

Удаление записи аналогично обновлению, со следующими дополнительными особенностями:

В XRF XRFMFB отрицательно
В MST STATUS установлен в 1

6.6. Реорганизация файла документов.

Как указано выше, записи главного файла обновляются, увеличивая размер файла MST, и это приводит к потере пространства в файле, которое не может быть использовано. Реорганизация позволяет использовать это пространство, исправив файл с помощью
пеpекомпановки.

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

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

Во время фазы восстановления, файл сброса последовательно читается и программа воссоздает файлы MST и XRF. В этом месте все записи, которые отмечены для логического удаления (до сброса), вновь отмечаются, как физически удаленные (установкой XRFMFB=-1 и XRFMFP=0). Удаленные записи обнаруживаются проверкой пропусков в нумерации MFN.