Сайт Информационных Технологий

5.2.3 Реализация программы - конвертора

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

Для заполнения созданной структуры данными необходимо сформировать поток, оформленный в виде структурированного глобала ^QS. Он будет содержать все данные из исходного файла, размещенные в соответствующие понятия под необходимым кодом записи созданных объектов. Кроме того, для отображения рисунков работ необходимо создать глобал ^Qres, в котором под определенным номером содержится соответствующее изображение произведения.

Создание глобала ^Qres обеспечивает рабочий метод wpic программного класса %qgw. Параметром данного метода является имя директории, в котором хранятся файлы с расширением jpg. Результатом отработки метода является создание ^Qres с индексами, являющимися именами файлов из указанного каталога.

Файл rmus.txt преобразуется с помощью рабочего метода wflf класса %qgw. Результатом выполнения метода является создание ^QSPvl, в котором содержатся все строки исходного файла, разделенные управляющими символами $C(13,10).

Программа-конвертор реализована в виде трех методов в созданном новом классе TParser. Первый метод ExtStr (обращается к внутреннему методу Newstk, доступному только через этот метод) обеспечивает последовательную выборку строк, находящихся между разделителями $C(13,10) из исходного глобала ^QSPvl. Второй метод Newqqc формирует новое значение кода записи (кода экземпляра фрейма) qqc. Такое решение не привязывает данные методы к конкретной реализации информационной системы и дает возможность использования их при разработке других приложений. Главный метод Creatqs вызывает первые два метода и создает глобал ^QS.

Рассмотрим физическую структуру qW более детально. Как было сказано выше, представление данных объекта qWORD можно описать в виде деревьев: ^Словарь и ^Таблица№. Глобал ^Словарь имеет имя ^QW, а ^Таблица№ обозначается ^Q№объекта. В данной работе ^Q№объекта получил название ^Q4 (здесь под объектом понимается сущность, лежащая на один уровень ниже в иерархии qW, чем сам объект qW). В данном случае этим объектом является информационная система “Русский музей”. Введем обозначение qqc=”код записи”, qqw=” код понятия ” и отметим, что название атрибута характеризуется кодом понятия. Тогда физическая структура представления данных в qW имеет следующий вид:

^Q4(“qqc”,”qqw”)=код слова
^QW(1,”qqw ”,1,”qqc”)=слово
^QW(1,”qqw ”,0,”слово”)=qqc
^QW(1,”qqw ”,0,”слово”,4,”qqc”)=””

Заполнение данных глобалов производится из потока ^QS, имеющего структуру:

^QS(4,”qqc”,”qqw ”)=слово
^QS(4,”qqc”,”С”)=qqc

В соответствии с описанными выше преимуществами структурированного ключа в программе-конверторе используется именно эта концепция при формировании значения кода записи (qqc). Под каждый уровень иерархии объектов информационной системы отводится три разряда. Каждый разряд может принимать значение символа, ASCII код которого лежит в пределах от 0 до 256. Каждый код записи любого подуровня в иерархии образуется путем конкатенации кодов записей вышележащих уровней.

Рассмотрим вышесказанное на примере. Пусть существует два автора которых необходимо занести в информационную базу – например Адливанкин С.Я. и Акишин Л. И.. С учетом рассмотренной логической структуры, фамилии авторов помещаются в понятия autor верхнего уровня объектов “Авторы”. При этом первая запись в объекте пусть имеет код “$$$”. Тогда запись в ^QS должна выглядеть следующим образом:

^QS(4,”$$$”,”о”)=”Авторы”
^QS(4,”$$$”,”autor”)=”Адливанкин С.Я.”
^QS(4,”$$$”,”С”)=”$$$”
^QS(4,”$$%”,”о”)=”Авторы”
^QS(4,”$$%”,”autor”)=”Акишин Л.И.”
^QS(4,”$$%”,”С”)=”$$%”

Объект “Факты об авторах” находится на один уровень ниже в иерархии объектов и не имеет понятий (атрибутов). Поэтому ^QS должен быть дополнен следующими узлами:

^QS(4,”$$$$$$”,”о”)=”Факты об авторах”
^QS(4,”$$$$$$”,”С”)=”$$$$$”
^QS(4,”$$%$$$”,”о”)=”Факты об авторах”
^QS(4,”$$%$$$”,”С”)=”$$%$$$”

При переходе к объекту “Факты”, понятием которого является “f”, получаем (для случая наличия единственного факта у каждого из авторов) :

^QS(4,”$$$$$$$$$”,”о”)=”Факты”
^QS(4,”$$$$$$$$$”,”С”)=”$$$$$$$$”
^QS(4,”$$$$$$$$$”,”f”)=”Факт1”
^QS(4,”$$%$$$$$$”,”о”)=”Факты”
^QS(4,”$$%$$$$$$”,”C”)=”$$%$$$$$$”
^QS(4,”$$%$$$$$$”,”f”)=”Факт2”

Таким образом, как говорилось выше, доступ к каждому нижележащему уровню осуществляется путем конкатенации кодов записей вышележащих объектов. При этом количество экземпляров каждого объекта (количество групп понятий) принимает значение 256*256*256=16777216 (в нашем случае 220*220*220=10648000).

Код методов, рассмотренных ранее и реализующих данный подход к формированию кода записей приведен в Приложении 1.

Для запуска главного метода Creatqs необходимо создать и проинициализировать в созданном классе Tparser объект (назовем его Rmus), после чего запустить метод созданного объекта. Для этого создадим программу со следующим кодом:

n Rmus
S Rmus=##class(TParser).%New()
d Rmus.Creatqs()

Результатом выполнения данной программы является отработка метода Creatqs, т.е. создание глобала ^QS (выборка из этого глобала представлена в Приложении 2).

Для загрузки сформированного ^QS в qW в меню сервиса режима администратора необходимо выбрать пункт “Восстановить из потока”.

Результат создания информационной базы “Русский музей” при отображении всех уровней иерархии объектов и всех понятий приведен на рис. 5.9.

Рис. 5.9. Готовая к использованию информационная система “Русский музей”