Абриаль 2.1 Начало Выше Дальше29/09/04 А.И.Пацкин [packin.ru]
[ Строение гипертаблиц ] Интерфейс гипертаблиц ] Навигация в таблицах ] Изменение данных в таблицах ] Дополнительные возможности таблиц ]

Строение гипертаблиц


В этом разделе описано...устройство гипертаблиц.

Обозначения внутри таблиц

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

  • Текст в ячейках, щелкнув по которым, можно перейти в другую таблицу, выглядит как ссылка интернета, т.е. обычно он синий, подчеркнутый, и над ним привычно видоизменяется указатель мыши. Эти столбцы имеют разновидности, отличающиеся друг от друга цветом. Объектный столбец показывает вид со стороны связи на объект, поэтому в их ячейках всегда находится изображение одного и только одного объекта. Аспектный столбец показывает один аспект одного объекта, в соответствующих ячейках может быть либо ничего, либо одна связь, либо много связей.
  • Если текст выглядит иначе, то в этой ячейке лежит значение, которое можно корректировать на месте.
  • Если текст в ячейке не заключен в скобки, значит в ячейке может находится ровно один объект.
  • В фигурные скобки: {А1,А2,А3} заключаются элементы множеств. Множества автоматически упорядочиваются системой и не могут содержать одинаковых элементов.
  • В круглых скобках: (а4,а1,а1,а8) изображаются списки, которые могут содержать повторяющиеся элементы, и порядком в списках управляет пользователь.
  • Если внутри скобок (любого типа) заключена последовательность скобочных структур - это аспект сложного, многоместного отношения. Тогда внутренние скобки соответствуют строчкам таблицы, "упакованной" в данной ячейке, знак "*" внутри этих скобок обозначает заглавный объект таблицы, т.е. тот объект, со стороны которого мы смотрим.
  • Если щелкнуть по тексту в скобках, делается переход на таблицу соответствующего аспекта, если щелкнуть по одиночному элементу в ячейке - происходит переход на таблицу (форму) данного объекта, или для простых объектов - значений - начинается редактирование значения прямо в данной ячейке.
  • Если слева таблицы виден столбец с номерами - строки таблицы можно перетаскивать в этом столбце мышью, меняя порядок строк, и  новый порядок будет зафиксирован в данных. 

Разновидности гипертаблиц.

Таблицы делятся на следующие разновидности:

Объектные формы

Формы более всего напоминают то, что называется фреймом в объектно-фреймовых системах. Структура формы самая простая. Форма состоит из двух столбцов. Первый столбец содержит названия аспектов, а второй - их содержание для данного объекта.

Фактически, форма представляет собой строчку таблицы представителей, развёрнутую для большей наглядности вертикально.

Таблица представителей

Частным случаем такой таблицы является таблица классов (т.е. представителей класса CLASS) которая используется в роли наиболее удобной исходной точкой навигации.

В таблице представителей собраны все сущности некоторого класса. Например, для следующей базы данных...

Родитель:LINK(Родители:{&Личность},Дети:{&Личность})
Пол:LINK(Пол:&Личность,Пол_для:{&Пол})
Пол(Андрей,Муж)
Пол(Борис,Муж)
Пол(Вера,Жен)
Пол(Геннадий,Муж)
Пол(Дмитрий,Муж)
Пол(Екатерина,Жен)
Родитель(Андрей,Борис)
Родитель(Андрей,Вера)
Родитель(Вера,Дмитрий)
Родитель(Вера,Екатерина)
Родитель(Геннадий,Екатерина)

таблицы представителей класса Личность и класса Пол имеют примерно такую структуру

ITEMS(Личность)

Name Object:Class Родители Дети Пол
Андрей Андрей:Личность {Борис,Вера}   Муж
Борис Борис:Личность   {Андрей} Муж
Вера Вера:Личность {Дмитрий,Екатерина} {Андрей} Жен
Геннадий Геннадий:Личность   Муж
Дмитрий Дмитрий:Личность   {Вера} Муж
Екатерина Екатерина:Личность   {Вера,Геннадий} Жен

ITEMS(Пол)

Name Object:Class Пол_для
Муж Муж:Пол {Андрей,Борис,Геннадий,Дмитрий}
Жен Жен:Пол {Вера,Екатерина}

Как мы видим, у таблиц представителей слева появился титульный столбец с именем объекта расположенного в данной строке. Титульный столбец не прокручивается при просмотре таблицы и всегда виден, так же как и верхняя титульная строка таблицы.

(Строго говоря, таблицы представителей тоже "аспектные" т.к. образуются аспектом ITEMS из системного отношения NAME, соединяющего дескрипторы классов с сущностями этих классов).

Особая разновидность таблиц представителей существует для локально именуемых объектов. Такая таблица собирает не вообще все объекты класса, все объекты принадлежащие одному старшему объекту. Например, в такой таблице могут быть собраны все улицы одного города, при том, что общей таблицы улиц просто не существует. (Среди улиц вообще могут быть одноименные, а объекты с одинаковыми именами не могут находиться в одной таблице представителей).

Аспектные таблицы

содержат все связи одного аспекта некоторого объекта.  Эта пара аспект-объект называются заглавным аспектом и заглавным объектом таблицы, а совместно они образуют  заголовок таблицы, записываемый в форме Аспект(Объект:Класс).  Например так выглядит таблица для объектов класса c1 красного цвета, т.е. по аспекту "Цвет для" объекта Красный. Заголовок у этой таблицы: Цвет для(Красный:Цвет)

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

Таблицы для многоместных аспектов будут подробно рассмотрены ниже.

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

Формирование аспектной таблицы.

Рассмотрим подробнее как образуется аспектная таблица.

Итак, каждая аспектная таблица представляет определённый аспект одного объекта. Строки таблицы представляют связи, из которых состоит данный аспект. Например, рассмотрим аспект Родители объекта Андрей, пусть родителями Андрея являются Борис и Вера. Тогда есть два факта (две связи,)

 Родитель(Андрей,Борис)
 Родитель(Андрей,Вера)

Эти факты образуют таблицу
 
Отпрыск Родитель
Андрей Борис
Андрей Вера

Первый столбец этой таблицы, соответствующий её заглавному аспекту, можно отбросить, т.к. он заведомо содержит одинаковые ссылки на заглавный объект таблицы (Андрей). Остаётся таблица из одного столбца
 
Родитель
Борис
Вера

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

Дело в том, что если таблица образуется для бинарного отношения, то для этих случаев единственный столбец "разворачивается" на множество столбцов, по числу потенциальных аспектов (т.е. по числу атрибутов класса) объекта. Получается, что в большинстве таблиц соседствуют столбцы двух типов:

  1. объектные столбцы, ячейки которых показывают объекты со стороны связей., и
  2. аспектные столбцы, ячейки которых показывают связи со стороны объекта т.е. содержат аспекты объектов.

Итак, столбцы таблицы делятся на объектные и аспектные. Ячейка объектного столбца соответствует ровно одному объекту. Это как бы скелетные столбцы, на которых висит всё остальное. Аспектные столбцы - дополнительные. В ячейках аспектного столбца отображаются аспекты объекта из ближайшей слева ячейки объектного столбца.

Многоместные аспектные таблицы

Бинарные отношения наиболее часты на практике, но случай этот слишком примитивен, чтобы на нем понять технику работы с таблицами. В бинарных аспектных таблицах, единственный объектный столбец был дополнен множеством аспектных столбцов.

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

Пусть мы имеем два класса Личность и Роль и для них пусть имеется отношение Играет (т.е. "Играет Роль").

Играет:LINK(Кто:{&Личность},Роль:{&Роль},Для-Кого:{&Личность})

Это отношение имеет три аспекта

  1. Кто - указывает на личность, играющую роль.
  2. Роль - указывает на играемую роль.
  3. Для-кого - указывает на личность, для которой играется роль.

Например, следующий факт

 Играет(Зина,Поклонник,Алла)

означает, что есть некто Зина, играющая роль поклонницы для некой Аллы. Или такой факт

 Играет(Алла,Кумир,Зина)

Это значит примерно то же самое, только с другой стороны. Добавим к этим фактам еще несколько:

 Играет(Ваня,Муж,Зина)
 Играет(Ваня,Поклонник,Алла)
 Играет(Зина,Жена,Ваня)
 Играет(Алла,Жена,Филя)
 Играет(Филя,Муж,Алла)
 Играет(Филя,Кумир,Зина)
 Играет(Филя,Друг,Петя)
 Играет(Петя,Начальник,Ваня)

И посмотрим теперь, какие для этих данных получаются таблицы. Сначала посмотрим со стороны аспекта Кто.

Кто(Алла)

Роль Для-кого
Жена Филя
Кумир Ваня
Кумир Зина

В этой таблице три строки, т.к. есть три факта, у которых в аспекте Кто присутствует объект Алла. Аналогично для других объектов:

Кто(Ваня)

Роль Для-кого
Муж Зина
Поклонник Алла

Кто(Филя)

Роль Для-кого
Друг Петя
Кумир Зина
Муж Алла

Кто(Петя)

Роль Для-кого
Начальник Ваня

Теперь посмотрим на данные со стороны аспекта Для-Кого:

Для-Кого(Алла)

Кто Роль
Ваня Поклонник
Зина Поклонник
Филя Муж

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

Для-Кого(Ваня)

Кто Роль
Зина Жена
Петя Начальник

Для-Кого(Петя)

Кто Роль
Филя Друг

И, наконец, посмотрим со стороны аспекта Роль. Например, мы можем увидеть кто кому Муж или Поклонник или Друг.

Роль(Муж)

Кто Для-Кого
Ваня Зина
Филя Алла

Роль(Поклонник)

Кто Для-Кого
Ваня Алла
Зина Алла

Роль(Друг)

Кто Для-Кого
Филя Петя

Формальная классификация столбцов.

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

Классификация строк.

Со строками всё обстоит значительно проще, чем со столбцами. Есть всего три разновидности строк.

  1. Титульная строка. Это первая сверху строка таблицы, она не прокручивается и не доступна для редактирования. В ней записываются заголовки столбцов, которые либо заданы явно в свойствах аспектов, по умолчанию равны именам аспектов столбцов. В титульных строках можно мышью менять ширину. Ширина столбцов запоминается системой и сохраняться вместе с базой данных. Щелчок мышью по заголовку выравнивает ширину по самому длинному тексту в ячейках. Щелчок с нажатой клавишей CTRL позволяет изменить заголовок на месте.
  2. Рядовая строка. Все рядовые строки в точности соответствуют связям одного объекта по одному аспекту. Если этот аспект - списочный, то порядок строк и соответствующих связей можно менять мышью в номерном столбце.
  3. Строка ввода. Это последняя строка таблицы, изначально пустая, в которую можно вводить новые связи, (иногда вместе с висящими на этих связях объектами - значениями). В тех таблицах, где новые связи добавлять нельзя, строка ввода отсутствует.
 

Все права защищены. © 2000-2004 РосНИИ ИИ
http://artint.ru
Copyright. © 2000-2004 by RRIAI
Александр Иосифович Пацкин [mailto:aleksandr@tochka.ru].
29/09/04

К началу документа.