Реферат: Разработки интеллектуальной справочной системы по музыкальным произведениям

Разработки интеллектуальнойсправочной системы по музыкальным произведениям


ОГЛАВЛЕНИЕ

Перечень условных обозначений

Введение

1. Технико-экономическое обоснованиепроектируемой интеллектуальной системы

1.1 Актуальность разработкиинтеллектуальной справочной системы по музыкальным произведениям

1.2 Категории пользователей системы

1.2.1 Меломан

1.2.2 Начинающий слушатель

1.2.3 Владелец музыкального магазина илиинтернет-магазина

1.2.4 Исполнитель

1.3 Анализ аналогичных систем

1.3.1 All Music Guide

1.3.2 MusicBrainz!

1.3.3 Музыкальный словарь Гроува 

1.3.4 Сравнение аналогичных систем синтеллектуальным справочником по музыкальным произведениям

2. База знаний проектируемойинтеллектуальной системы

2.1 Задачно-ориентированная спецификациябазы знаний проектируемой интеллектуальной системы

2.1.1 Тестовый сборник вопросов

2.1.2  Список используемых в базе знанийпроектируемой интеллектуальной справочной системы ip-компонентов

2.2 Онтология базы знаний проектируемойинтеллектуальной системы

2.3 Содержательная декомпозиция базызнаний проектируемой интеллектуальной системы

2.4 Исходные тексты базы знанийпрототипа интеллектуальной системы

2.5  Верификация и отладка базы знанийпрототипа интеллектуальной системы

2.6 Спецификация разработанной базызнаний интеллектуальной системы и сертификация разработанных ip-компоненто

3. Машина обработки знаний проектируемойинтеллектуальной справочной системы

3.1 Задачно-ориентированная спецификациямашины обработки знаний проектируемой интеллектуальной справочной системы

3.1.1 Тестовый список задач

3.1.2 Содержательная классификация задач

3.1.3 Список используемых в операцияхip-компонентов

3.1.4 Классификация и спецификацияопераций проектируемой машины обработки знаний

3.1.5 Декомпозиция операций наподпрограммы и содержательная структура библиотеки программ специфицированныхопераций

3.2  Алгоритмы и исходные текстыпрограмм, реализующие операции машины обработки знаний прототипаинтеллектуальной справочной системы

3.3 Верификация и отладка программспецифицированных операций

3.4 Спецификация разработанных операцийи библиотеки программ, сертификация разработанных ip-компонентов 

4. Пользовательский интерфейспроектируемой интеллектуальной справочной системы

4.1 Задачно-ориентированная спецификацияпользовательского интерфейса проектируемой интеллектуальной системы

4.1.1 Декомпозиция пользовательскогоинтерфейса 

4.1.2 Список используемых ip-компонентовпользовательского интерфейса 

4.2  Проектирование интерфейсныхподсистем 

4.3 Верификация и отладкапользовательского интерфейса 

4.4 Спецификация разработанногопользовательского интерфейса, сертификация разработанных ip-компонентов

5. Интеграция разработанной системы сдругими системами

6. Направления дальнейшего развитияпрототипа интеллектуальной справочной системы и пути промышленного изготовленияспроектированной интеллектуальной системы

7. Вклад в развитие семантическихтехнологий проектирования интеллектуальных систем

7.1 Список выявленных ошибок средыпроектирования интеллектуальных систем

7.2 Список предложений посовершенствованию среды проектирования интеллектуальных систем

7.3 Список предложений посовершенствованию семантических технологий проектирования интеллектуальныхсистем

7.4  Создание и использованиеip-компонентов

Библиографический указатель


Перечень условныхобозначений

МП – музыкальныепроизведения

БЗ – база знаний

ИСС – интеллектуальнаясправочная система

МОЗ – машина обработкизнаний

ПИ – пользовательскийинтерфейс


Введение

Независимо от родадеятельности, возраста и пола, любому из нас приходилось сталкиваться с такимпонятием как музыка. И если раньше это было мало распространенным, доступнымдля узкого круга людей, то в наши дни трудно встретить человека, которыйникогда не слышал «волшебных» звуков музыки. В наши дни можно говорить о целоймузыкальной индустрии, людей и средств, в которой задействовано не меньше, чемв автомобилестроении или разработке IT-технологий. Одни зарабатывают на этомденьги: устраивая звукозаписывающие лейблы и студии, предоставляя свои услугипо записи, продюсированию исполнителей; открывают обычные и интернет-магазины,где успешно и не очень занимаются продажей уже готовой продукции (кассеты,компакт-диски, DVD-диски, и даже, для особых «гурманов», виниловые пластинки скомпозициями различных жанров и направлений). У других музыка – это способсамовыражения: поиск сподвижников, создание группы, а возможно выступлениесоло, написание текста и сочинение музыки, затем запись на студии, организацияконцертов. Третьи выступают в роли потребителей: скупают компакт-диски сальбомами любимых групп и исполнителей, посещают концерты, чтобы вживуюуслышать кумиров. Не стоит забывать и про тех, для кого музыка это простоприятный фон дома, на работе или в авто, который помогает скрасить серые буднимегаполисов.

Хочу обратить вниманиена термины: звукозаписывающие лейблы, компакт-диски, виниловые пластинки,группы, направление, жанры и т.д. и т.п… И если с пониманием что это и длячего оно нужно помогут справиться какая-нибудь музыкальная энциклопедия иливездесущий Google. То, что делать и у кого просить помощи, когда любимаякомпозиция после н-ного раза прослушивания перестает нравиться, а домашняя коллекцияпрослушана и переслушана вдоль и поперек. Да, песен и исполнителей в миремного. Есть маленькое «но» — их слишком много! Так в электронной версии«Музыкального словаря Гроува» содержится 27000 композиций поп-музыки или более50 дней непрерывного прослушивания (если допустить, что средняяпродолжительность композиции около 3 минут). А ведь жанров и направлений неменьше сотни! Так и целой жизни будет мало, чтобы переслушать все, что сочинилмузыкальный гений человека, и выбрать именно то, что подходит по вкусу.

Можно выделитьнесколько аспектов проблемы выбора и поиска музыкальных произведений:

— большой объемнеструктурированной информации, хранящейся в различных местах;

— трудностьформализации, а порой и отсутствие, правил описания и оценки музыкальныхпроизведений;

— формулированиезапроса для поиска композиции. Как говорил известный герой не менее известногофильма: «А ну, сочини для меня что-нибудь такое, чтоб душа сначаларазвернулась, а потом обратно завернулась».

Такие тяжеловесы какMicrosoft Corp. и Yahoo Inc. тратят миллиарды долларов, пытаясь отобрать уGoogle хотя бы небольшой сегмент рынка интернет-поиска. Но параллельно этому,растущие нишевые поисковые системы переосмысляют способ поиска информации,разрабатывая инструменты, которые тщательно ищут истинный смысл слов навеб-страницах вместо того, чтобы просто предоставить список сайтов ссовпадающими ключевыми словами, эти претенденты надеются создать сервисы,которые помогут пользователям быстрее находить то, что те ищут. Потребители хотятнаходить информацию быстрее, и они ищут инструменты, которые помогли бы имсделать это. Такие поисковые системы используют семантическую науку, изучающуюсмысл слов, чтобы производить более релевантный поиск. Дело в том, что уровеньконтекста позволяет семантическим поисковым системам представлять информацию всоответствии с тем, как обычно думают люди. Семантический поиск представляетинтерес, как для частных предпринимателей, так и для крупных компаний. Ключ куспеху семантического поиска в том, чтобы выдать результаты в контексте. Этосложно, так как объём информации всё возрастает. Причина, по которой люди хотятразрабатывать семантические поисковые системы, в том, что это лучший способнахождения информации. Учитывая, что объём контента растёт всё быстрее,поисковые системы должны быть более эффективны и работать по образцу того, какдумают люди. Подобные инструменты поиска показывают связи между различнымидокументами и сайтами, основываясь не на ссылках, а на информации, содержащейсяна страницах с помощью технологии под названием «графики семантическихкластеров». Она отображает результаты в виде, который напоминает паучьюпаутину.

Одним из примеровинтеллектуальных «помощников» является Семантическая Справочная Система (SRS),на базе которой была построена справочная система по музыкальным произведениям.SRS состоит из трех компонентов:

База знаний (БЗ),

Машина обработкизнаний,

Пользовательскийинтерфейс.

Уточним задачикомпонентов:

База знаний необходимадля хранения знаний о предметной области в системе.

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

Пользовательскийинтерфейс необходим для осуществления взаимодействия пользователя с системой.

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

Разработка машиныобработки знаний переведет прикладную систему на качественно новый уровень –уровень интеллектуального решателя задач предметной области.

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

Целью работы являетсяразработка проекта интеллектуальной справочной системы.

Задачи курсовогопроекта:

·  технико-экономическоеобоснование проектируемой интеллектуальной справочной системы;

·  разработкабазы знаний проектируемой интеллектуальной справочной системы;

·  разработкамашины обработки знаний проектируемой интеллектуальной справочной системы;

·  разработкапользовательского интерфейса интеллектуальной справочной системы;

·  реализацияпрототипа интеллектуальной справочной системы.


1. Технико-экономическоеобоснование проектируемой интеллектуальной системы

1.1 Актуальностьразработки интеллектуальной справочной системы по музыкальным произведениям

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

Перечислим наиболеераспространенные вопросы, интересующие людей в отношении музыкальныхпроизведений:

Общие вопросы:

Какие музыкальные жанрысуществуют?

На каких носителяхможно приобрести муз.произведения?

Какие типы музыкальныхколлективов бывают?

и т.д.

Вопросы для конкретногопроизведения:

Кто автор текста,музыки?

Кто исполнитель?

В какой альбом входит?

В каком году издано?

и т.д.

Для несколькихпроизведений, альбомов, исполнителей:

Что общего между этимиальбомами?

и т.д.

Поиск музыкальныхпроизведений:

Поиск по описаниютекста, музыки.

Поиск по году издания,жанру, рейтингу в чартах.

Поиск по исполнителю,альбому.

Поиск автора и названияпо фрагменту композиции.

Разрабатываемаяинтеллектуальная система ответит на подобные вопросы пользователя. Дополненнаябаза знаний позволит осуществить расширенный и углубленный поиск. Удобныйинтерфейс позволит интуитивно и просто найти все интересующие пользователясведения. Именно поэтому разработка справочника является актуальной ивостребованной.

1.2 Категориипользователей системы

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

·  меломан

·  начинающийслушатель

·  владелецмузыкального магазина или интернет-магазина

·  исполнитель

Далее приведеныпортреты пользователей системы.

 

1.2.1 Меломан

Портрет:

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

Функциональныевозможности:

·  добавлениеи удаление видеоклипов

·  добавлениеи удаление аудиоматериала

·  редактированиеимеющихся знаний

·  просмотрзнаний содержащихся в БЗ

·  поисккомпозиций по ключевым словам, по четким критериям

Цели:

·  пополнениесвоих знаний

·  поискмузыкальных произведений

·  заимствованиесвоего опыта для менее «продвинутых» пользователей

 

1.2.2 Начинающий слушатель

Портрет:

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

Функциональныевозможности:

·  просмотрзнаний содержащихся в БЗ

·  просмотрвидеоклипов

·  прослушиваниемузыкальных композиций

·  поискисполнителя по фрагменту музыкального произведения

·  поисккомпозиций по ключевым словам в описании

·  поисккомпозиций по эмоциональной окраске музыки и текста

·  поисккомпозиций по жанрам

·  поисккомпозиций с помощью временной ленты

·  получениеответа на нетривиальные вопросы о музыкальных произведениях

Цели:

·  получениебазовых знаний в предметной области

·  помощьв ориентировании по музыкальным произведениям

·  поискмузыкальных произведений по различным признакам

 

1.2.3 Владелец музыкального магазина илиинтернет-магазина

Портрет:

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

Функциональныевозможности:

·  просмотринформации об исполнителях, альбомах и композициях

·  добавлениеинформации о новых исполнителях, альбомах, композициях

·  поискмузыкальных произведений

Цели:

·  пополнениебазы знаний новой информацией об исполнителях, альбомах и композициях

·  предоставленииинформации конечному потребителю


1.2.4 Исполнитель

Портрет:

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

Функциональныевозможности:

·  поискмузыкальных произведений

·  сравнениемузыкальных произведений

Цели:

·  ориентированиев современной музыкальной индустрии

 

1.3 Анализ аналогичных систем

1.3.1 All Music Guide

Крупная онлайноваямузыкальная база данных, принадлежащая организации All Media Guide. Данный продуктявляется энциклопедией с удобным графическим интерфейсом и поиском по ключевымсловам, названиям произведений, альбомов, исполнителей, содержит хорошопроработанную БД с большим количеством информации. Язык интерфейса английский.

1.3.2 MusicBrainz!

Проект созданияоткрытой музыкальной энциклопедии. MusicBrainz хранит сведения о музыке,которая когда-либо была записана, а не саму музыку. Все основные данные,хранимые в MusicBrainz (зафиксированные данные об исполнителях, альбомах,треках и т.п.) считаются общественным достоянием, а дополнительные сведения,такие, как данные о модерациях, распространяются под лицензией Creative Commonsnon-commercial share-and-share-alike. Язык интерфейса английский.

 

1.3.3 Музыкальный словарь Гроува

Британское справочноеиздание, посвящённое академической музыке. Под редакцией Лоры Мейси работаетпостоянно обновляемая и пополняемая сетевая версия словаря. Годовая подписка напользование ею составляет 300 долларов. Права на издание и онлайн-версию с 2004г. принадлежат издательству Оксфордского университета, вследствие чего сайт изGrove Music Online был переименован в Oxford Music Online. Включает в себяболее 50000 статей и 28000 биографий, внесенных более чем 6000 ученых со всегомира. Язык интерфейса английский.

 

1.3.4 Сравнение аналогичных систем синтеллектуальным справочником по музыкальным произведениям

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

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


/>2.База знаний проектируемой интеллектуальной системы

/> 

2.1 Задачно-ориентированная спецификациябазы знаний проектируемой интеллектуальной системы

/>2.1.1Тестовый сборник вопросов

Описание тестовыхвопросов:

Все известныеисполнители.

Фотография конкретногоисполнителя.

Альбомы выбранногоисполнителя.

Изображение обложкиальбома.

Сравнение двух альбомовпо их характеристикам.

Композиции входящие ввыбранный альбом.

Прослушиваниекомпозиции.

Просмотр видеоклипа навыбранную композицю.

Поиск альбома по егохарактеристикам.

Поиск композиции по еехарактеристикам.

Описание музыкальногожанра.

Виды носителей.

Авторы текста икомпозиторы.

Переченьдемонстрационных вопросов:

Получение всехисполнителей БЗ.

Описание основныххарактеристик исполнителя.

Просмотр фотографииисполнителя.

Альбомы выбранного исполнителя.

Просмотр обложкиальбома.

Описание основныххарактеристик альбома.

Композиции входящие вданный альбом.

Описание основныххарактеристик композиции.

Поиск композиций порейтингу.

 

2.1.2 Список используемых в базе знанийпроектируемой интеллектуальной справочной системы ip-компонентов

В даннойинтеллектуальной справочной системе использованы исходные разделы база знанийhelp-системы:

ИсхБз. SC-ядро

ИсхБз. SCg-язык

ИсхБз. SС-язык множеств

ИсхБз. SС-языкотношений

ИсхБз. SС-язык числовыхсистем

ИсхБз. ЛогическийSС-язык

ИсхБз. ГипермедийныйSС-язык

ИсхБз. ДидактическийSС-язык

ИсхБз. SС-язык описанияошибок

ИсхБз. Пользовательскийинтерфейс SRS

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

2.2 Онтология базызнаний проектируемой интеллектуальной системы

Бинарные отношения:

«альбом*» — бинарноеотношение между исполнителем и его альбомами.

«композиция*» — бинарное отношение между альбомом и композициями в него входящими.

«описание*» — бинарноеотношение между объектом и параметрами, его характеризующими.

«страна*» — бинарноеотношение между исполнителем и страной исполнителя.

«год*» — бинарноеотношение между исполнителем и годом его основания.

«вид*» — бинарноеотношение между исполнителем и его видом (группа, соло и т.д.).

«обложка*» — бинарноеотношение между альбомом и его обложкой.

«год выпуска*» — бинарное отношение между альбомом и годом его выпуска.

«носитель*» — бинарноеотношение между альбомом и носителем, на котором он был издан.

«тип записи*» — бинарное отношение между альбомом и типом его записи.

«объем*» — бинарноеотношение между альбомом и его объемом.

«награды*» — бинарноеотношение между альбомом и его наградами.

«музыка*» — бинарноеотношение между композицией и его музыкой.

«текст*» — бинарноеотношение между композицией и его текстом.

«время*» — бинарноеотношение между композицией и его продолжительностью.

«место в чарте*» — бинарное отношение между композицией и местом в чарте.

«лейбл*» — бинарноеотношение между композицией и лейблом звукозаписи.

«композитор*» — бинарное отношение между музыкой композиции и его композитором.

«автор*» — бинарноеотношение между текстом композиции и его автором.

«тема*» — бинарноеотношение между текстом композиции и его темой.

Всего: 20 бинарныхотношений.

«Исполнители» — группавсех исполнителей.

«Альбомы» — группа всехальбомов.

«Композиции» — группавсех композиций.

«Носители» — группавсех носителей.

«Композиторы»» — группавсех композиторов музыки.

«Авторы» — группа всехавторов текста.

Всего: 6 узлов групп.

 

2.3 Содержательная декомпозиция базызнаний проектируемой интеллектуальной системы

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

Так при описанииисполнителя представлены следующие характеристики: страна*, год основания*,вид*. Пример описания одного из исполнителей представлен на рисунке 2.3.1.

/>

Рисунок 2.3.1. – Описание исполнителя

При описании альбома вкачестве его характеристик представлены: обложка альбома*, год выпуска*,носитель*, тип записи*, объем*, награды*. Пример описания альбома представленна рисунке 2.3.2.


/>

Рисунок 2.3.2. – Описание альбома

Пример описания МПпредставлен на рисунке 2.3.3.

/>

Рисунок 2.3.3. – Описание МП


Пример описанияструктуры отношений представлен на рисунке 2.3.4.

/>

Рисунок 2.3.4. –Описание структуры отношений

 

2.4 Исходные тексты базы знанийпрототипа интеллектуальной системы

Исходные тексты базызнаний прототипа интеллектуальной системы хранятся в следующих файлах:

8diagrams_album.gwf

bringdaruckus_track.gwf

clapyohands_track.gwf

enterthewutang_album.gwf

familytree_track.gwf

iicons_album.gwf

intro.gwf

naughtybynature_artist.gwf

naughtybynature_struct.gwf

oldergods_track.gwf

povetry`sparadise_album.gwf

protectyaneck_track.gwf

shameonanigga_track.gwf

whatyouwannado_track.gwf

wutangclan_artist.gwf

wutangclan_struct.gwf

wutangforever_album.gwf

elmanana_track.gwf

feelgoodinc_track.gwf

ogreenworld_track.gwf

kidswithguns_track.gwf

lastlivingsouls_track.gwf

intro_track.gwf

demondays_album.gwf

gorillaz_struct.gwf

rockthehouse_track.gwf

doublebass_track.gwf

soundcheck_track.gwf

punk_track.gwf

manresearch_track.gwf

clinteastwood_track.gwf

newgenius_track.gwf

tomorrowcomestoday_track.gwf

54_track.gwf

re-hash_track.gwf

gorillaz_album.gwf

gorillaz_artist.gwf

Пример содержания этихфайлов можно увидеть на рисунках 2.3.1, 2.3.2, 2.3.3, 2.3.4.


2.5  Верификация иотладка базы знаний прототипа интеллектуальной системы

Верификация базы знанийв текущей версии интеллектуальной справочной системы по МП не производилась,так как в предыдущей версии системы база знаний была грамотно организована. Базабыла дополнена новыми исполнителями, альбомами и композициями. Дополнение ипроверка производилась с помощью SRS Studio.

2.6 Спецификацияразработанной базы знаний интеллектуальной системы и сертификация разработанныхip-компонентов

В базе знаний на данныймомент содержится 3 исполнителя, 7 альбомов и более 20 композиций.

В качествеip-компонентов могут быть использованы:

Определения понятий(МП, альбом, исполнитель, жанр и т.д.).

Музыкальные композиции.

Видеоклипы кмузыкальным произведениям.


3. Машина обработкизнаний проектируемой интеллектуальной справочной системы

3.1Задачно-ориентированная спецификация машины обработки знаний проектируемойинтеллектуальной справочной системы

3.1.1 Тестовый списокзадач

Под предметнымизадачами будем понимать все задачи, специфичные для данной предметной области:

·  поискисполнителей по описанию

·  поискинформации об исполнителях

·  поискальбомов по описанию

·  поискинформации об альбомах

·  поискМП по описанию

·  сравнениеальбомов

 

3.1.2 Содержательнаяклассификация задач

Множество предметныхзадач с точки зрения методов их решения можно разбить на два класса:

·  информационно-поисковыезадачи, ответы на которые присутствуют в базе знаний решателя предметных задачи, следовательно, их надо только найти;

·  задачи,ответы на которые требуется построить.

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

·  поискинформации о МП;

·  поискинформации об альбоме;

·  поискинформации об исполнителе.

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

·  сравнениеальбомов;

·  поискальбомов по нескольким характеристикам;

·  поискМП по нескольким характеристикам.

/> 

3.1.3 Списокиспользуемых в операциях ip-компонентов

В даннойинтеллектуально справочной системе были использованы следующие операции,являющиеся Ip-компонентами, и предоставленные вместе со средой разработкиинтеллектуальных справочных систем:

all_input

all_output_all_types

analogy

example

graph

lib

logic_queries

logical_hierarhy

paramsProcessing

printSetArcs

printSetElems

main_close

main_open

open

pack_menu

peresechenie

reduce_menu

remove_menu_item

searchEnvironmentSmart

searchPatternEx

synonym_by_node

synonym_by_node_ui

synonym_by_term_ui

tests

ui_io_build_srs

ui_io_copy_scg

ui_io_erase_scg_countur

ui_io_erase_scg_el

ui_io_exec_command

ui_io_gen_srswindow

ui_io_increase

ui_io_load_folder

ui_io_load_scg

ui_io_modify_scg_el_content

ui_io_modify_scg_el_name

ui_io_modify_scg_el_type

ui_io_paste_scg

ui_io_reduction

ui_io_save_scg

ui_io_select_all

ui_registration_type_wnd

ui_show_content

ui_show_content_swf

ui_unregistration_type_wnd

update_menu

ways

whatisknown


/>3.1.4Классификация и спецификация операций проектируемой машины обработки знаний

1. Классификацияоперации all_performers.m4scp.

Название операции:all_performer.

Предметная ориентация:МП.

Входные параметры: нет.

Выходные параметры: всеизвестные исполнители.

Способ вызова:автоматически, при создании окна пользовательского интерфейса.

Спецификация операцииall_performers.m4scp.

Идентификатороперации:descr_all_performer.

Полноеимя:\operation\ all_performers.m4scp.

Комментарий: операцияпоиска в БЗ всех известных исполнителей.

Автор: Лукша Н.В.

2. Классификацияоперации all_albums_this_performer.m4scp.

Названиеоперации:all_albums_this_performer.

Предметная ориентация:МП.

Входные параметры: узелс именем исполнителя.

Выходные параметры: всеальбомы данного исполнителя.

Способ вызова: привыборе исполнителя из ListBox.

Спецификацияоперацииall_albums_this_performer.m4scp.

Идентификатороперации:descr_all_albums_this_performer.

Полноеимя:\operation\all_albums_this_performer.m4scp.

Комментарий: операцияпоиска в БЗ всех альбомов данного исполнителя.

Автор: Лукша Н.В.

3. Классификацияоперации all_tracks_this_album.m4scp.

Названиеоперации:all_tracks_this_album.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: всеМП данного альбома.

Способ вызова: привыборе альбома из ListBox.

Спецификация операцииall_tracks_this_album.m4scp.

Идентификатор операции:descr_all_tracks_this_album.

Полноеимя:\operation\all_tracks_this_album.m4scp.

Комментарий: операцияпоиска в БЗ всех МП из данного альбома.

Автор: Лукша Н.В.

4. Классификация операцииcountry_of_performer.m4scp.

Названиеоперации:country_of_performer.

Предметная ориентация:МП.

Входные параметры: узелс именем исполнителя.

Выходные параметры:страна данного исполнителя.

Способ вызова: привыборе исполнителя из ListBox.

Спецификацияоперацииcountry_of_performer.m4scp.

Идентификатороперации:descr_country_of_performer.

Полноеимя:\operation\country_of_performer.m4scp.

Комментарий: операцияпоиска в БЗ страны данного исполнителя.

Автор: Лукша Н.В.

5. Классификацияоперации kind_of_performer.m4scp.

Названиеоперации:kind_of_performer.

Предметная ориентация:МП.

Входные параметры: узелс именем исполнителя.

Выходные параметры: видданного исполнителя.

Способ вызова: привыборе исполнителя из ListBox.

Спецификацияоперацииkind_of_performer.m4scp.

Идентификатороперации:descr_kind_of_performer.

Полноеимя:\operation\kind_of_performer.m4scp.

Комментарий: операцияпоиска в БЗ вида данного исполнителя.

Автор: Лукша Н.В.

6. Классификацияоперации year_of_foundation.m4scp.

Названиеоперации:year_of_foundation.

Предметная ориентация:МП.

Входные параметры: узелс именем исполнителя.

Выходные параметры: годоснования данного исполнителя.

Способ вызова: привыборе исполнителя из ListBox.

Спецификацияоперацииyear_of_foundation.m4scp.

Идентификатороперации:descr_year_of_foundation.

Полноеимя:\operation\year_of_foundation.m4scp.

Комментарий: операцияпоиска в БЗ года основания данного исполнителя.

Автор: Лукша Н.В.

7. Классификацияоперации type_rec.m4scp.

Название операции:type_rec.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииtype_rec.m4scp.

Идентификатор операции:descr_type_rec.

Полноеимя:\operation\type_rec.m4scp.

Комментарий: операцияпоиска в БЗ типа записи данного альбома.

Автор: Лукша Н.В.

8. Классификацияоперации vol.m4scp.

Название операции: vol.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииvol.m4scp.

Идентификатор операции:descr_vol.

Полноеимя:\operation\vol.m4scp.

Комментарий: операцияпоиска в БЗ типа записи данного альбома.

Автор: Лукша Н.В.

9. Классификацияоперации style_of_track.m4scp.

Название операции:style_of_track.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: при выбореисполнителя из ListBox.

Спецификация операцииstyle_of_track.m4scp.

Идентификатороперации:descr_style_of_track.

Полноеимя:\operation\style_of_track.m4scp.

Комментарий: стиль МП.

Автор: Лукша Н.В.

10. Классификацияоперации rewards.m4scp.

Название операции:rewards.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииrewards.m4scp.

Идентификатор операции:descr_rewards.

Полноеимя:\operation\rewards.m4scp.

Комментарий: наградыданного альбома.

Автор: Лукша Н.В.

11. Классификацияоперации type_rec.m4scp.

Название операции:type_rec.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииtype_rec.m4scp.

Идентификатор операции:descr_type_rec.

Полноеимя:\operation\type_rec.m4scp.

Комментарий: операцияпоиска в БЗ типа записи данного альбома.

Автор: Лукша Н.В.

12. Классификацияоперации rating.m4scp.

Название операции:rating.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииrating.m4scp.

Идентификатор операции:descr_rating.

Полноеимя:\operation\rating.m4scp.

Комментарий: рейтингданной композиции.

Автор: Лукша Н.В.

13. Классификацияоперации label_rec.m4scp.

Название операции:label_rec.

Предметная ориентация:МП.

Входные параметры: узелс именем альбома.

Выходные параметры: типзаписи данного альбома.

Способ вызова: привыборе исполнителя из ListBox.

Спецификация операцииlabel_rec.m4scp.

Идентификатор операции:descr_label_rec.

Полноеимя:\operation\label_rec.m4scp.

Комментарий: поисклейбла звукозаписи.

Автор: Лукша Н.В.


3.1.5 Декомпозицияопераций на подпрограммы и содержательная структура библиотеки программспецифицированных операций

В написанныхscp-операциях подпрограммы не использовались.

 

3.2  Алгоритмы и исходные текстыпрограмм, реализующие операции машины обработки знаний прототипаинтеллектуальной справочной системы

·  поискальбома по описанию (файл search_by_param.m4scp)

·  входныепараметры: узлы, характеризующие искомый альбом;

·  выходныепараметры: все альбомы подходящие под данное описание.

Алгоритм:

Делаем копию входныхпараметров.

Проверяем первыйпараметр.

Находим все альбомы,которые удовлетворяют п.2 и объединяем их в множество 1.

Проверяем второйпараметр (если такового нет, переходим п.10).

Находим все альбомы,которые удовлетворяют п.4 и объединяем их в множество 2.

Проверяем третийпараметр (если такового нет, переходим в п.9).

Находим все альбомы,которые удовлетворяют п.6 и объединяем их в множество 3.

Находим пересечениемножеств 1 и 3 и записываем в множество 1.

Находим пересечениемножеств 1 и 2 и записываем в множество 1.

Выводим множество 1 нановый лист.

Пример диалога:


/>

Рисунок 3.2.1 — вопрос «Поиск альбома поописанию»

/>

Рисунок 3.2.2 — ответна вопрос «Поиск альбома по описанию»

Исходный текстоперации:

//#Операция поискаальбома по его описанию

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(search_by_param,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  «MB_TEXT_ERROR1»= /«Не равны»/;

  «MB_TEXT_ERROR2»= /«А сломалося!»/;

  «Альбомы»;

  «описание*»;

  «типзаписи*»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node_temp,

  node_temp1,

  arc,

  arc1,

  arc2,

  attr_arc,

  selected_els,

  selected_els_copy,

  result_set,

  result_set1,

  result_set2,

  temp_node_with_param,

  test_node,

  node_param,

  result,

  set_albums_copy,

  node_album,

  set_album_param,

  temp_node,

  temp_set_1,

  temp_set_2,

  temp_set_3,

  temp_set_5,

  temp_set_0,

  resultSet1,

  resultSet2,

  resultSet3,

  resultSet4,

  node_out_resSet2,

  node_out_resSet3,

  node_out_resSet4,

  output_set

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

genEl([

 1_:assign_: node_: output_set

])

genEl([

 1_:assign_: node_: result_set

])

genEl([

 1_:assign_: node_: result_set1

])

genEl([

 1_:assign_: node_: result_set2

])

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаемкопиюset_albums_copy всех альбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler)

genElStr3([

 1_:fixed_: result_set,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album,)

label(not_other_album)

////////////////////////////////////////////////////////////////////////

////

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

],,output)

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаемкопиюset_albums_copy всех альбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album1)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album1)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler1)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album1)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler1)

genElStr3([

 1_:fixed_: result_set1,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album1,)

////////////////////////////////////////////////////////////////////////

label(not_other_album1)

////////////////////////////////////////////////////////////////////////

//

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

],,output)

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаемкопиюset_albums_copy всех альбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album2)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album2)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler2)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album2)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler2)

genElStr3([

 1_:fixed_: result_set2,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album2,)

////////////////////////////////////////////////////////////////////////

label(not_other_album2)

//////////////////////////

label(output)

////////////////////////////////////////////////////////////////////////

searchSetStr3([

    1_:fixed_: result_set,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:fixed_: output_set

])

//#Проверим является лимножество result_set1 пустым

searchElStr3([

    1_:fixed_: result_set1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node

],,out)

selectYStr3([

    1_:fixed_: result_set1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: output_set

])

//#Проверим является лимножество result_set2 пустым

searchElStr3([

    1_:fixed_: result_set2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node

],,out)

selectYStr3([

    1_:fixed_: result_set2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: output_set

])

////////////////////////////////////////////////////////////////////////

label(out)

ui_sheet_create([

    1_:assign_: sheet,

   2_:fixed_: sheet_type,

   3_:fixed_: sheet_title,

   4_:fixed_: layout

])

ui_output([1_:fixed_: sheet, 2_: fixed_: output_set])

return()

end

поискальбомапотипузаписи(файлsearch_by_type.m4scp)

входные параметры:узел, содержащий тип записи;

выходные параметры: всеальбомы с данным типом записи.

Пример диалога:

/>

Рисунок 3.2.3 — вопрос «Поиск альбома потипу записи»

/>

Рисунок 3.2.4 — ответ на вопрос «Поискальбома по типу записи»

Алгоритм:

Делаем копию входныхпараметров.

Находим все узлыальбомов, подходящие под введенное описание и записываем их в множество 1.

Выводим на новый листмножество 1.

Исходный текстоперации:

//#Операция поискаальбома по его описанию

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(search_by_type,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  «MB_TEXT_ERROR1»= /«Не равны»/;

  «MB_TEXT_ERROR2»= /«А сломалося!»/;

  «Альбомы»;

  «описание*»;

  «типзаписи*»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node_temp,

  node_temp1,

  arc,

  arc1,

  arc2,

  attr_arc,

  selected_els,

  selected_els_copy,

  result_set,

  temp_node_with_param,

  test_node,

  node_param,

  result,

  set_albums_copy,

  node_album,

  set_album_param,

  temp_node,

  temp_set_1,

  temp_set_2,

  temp_set_3,

  temp_set_5,

  temp_set_0,

  resultSet1,

  resultSet2,

  resultSet3,

  resultSet4,

  node_out_resSet2,

  node_out_resSet3,

  node_out_resSet4

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

genEl([

 1_:assign_: node_: result_set

])

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаемкопиюset_albums_copy всех альбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_:fixed_: arc

])

//#--------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «тип записи*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler)

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#--------_Выделяемодно из описаний типа записи node_param_----------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_param

])

//#--------_Проверкаравенства найденного описания и введенного пользователем_-----

ifCoin([

 1_:fixed_: node_param,

 2_:fixed_: temp_node_with_param

],,other_album)

//#--------_Если альбомудовлетворяет условию, то заносим его в result_set_-------

genElStr3([

 1_:fixed_: result_set,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album,other_album,other_album)

label(not_other_album)

ui_sheet_create([

    1_:assign_: sheet,

   2_:fixed_: sheet_type,

   3_:fixed_: sheet_title,

   4_:fixed_: layout

])

ui_output([1_:fixed_: sheet, 2_: fixed_: result_set])

return()

end

сравнение альбомов(файл ass.m4scp)

входные параметры:альбомы для сравнения;

выходные параметры:общие характеристики для сравниваемых альбом.

Пример диалога:


/>

Рисунок 3.1.5 — вопрос «Поиск альбома потипу записи»

/>

Рисунок 3.1.6 — ответ на вопрос «Поискальбома по типу записи»

Алгоритм:

Делаем копию входныхданных.

Находим все параметрыописания для первого альбома и записываем в множество 1.

Находим все параметрыописания для второго альбома и записываем в множество 2.

Находим пересечениемножеств 1 и 2, записываем результат в множество 1.

Выводим на новый листмножество 1.

Исходный текстоперации:

//#Операция общее междудвумя альбомами

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(ass,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  «MB_TEXT_ERROR1»= /«Не равны»/;

  «MB_TEXT_ERROR2»= /«А сломалося!»/;

  «Альбомы»;

  «описание*»;

  «типзаписи*»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node_temp,

  node_temp1,

  arc,

  arc1,

  arc2,

  attr_arc,

  selected_els,

  selected_els_copy,

  result_set,

  result_set1,

  result_set2,

  temp_node_with_param,

  test_node,

  node_param,

  result,

  set_albums_copy,

  node_album,

  set_album_param,

  temp_node,

  temp_set_1,

  temp_set_2,

  temp_set_3,

  temp_set_5,

  temp_set_0,

  resultSet1,

  resultSet2,

  resultSet3,

  resultSet4,

  node_out_resSet2,

  node_out_resSet3,

  node_out_resSet4,

  output_set,

  set1,

  set2,

  set3,

  set4,

  node_in,

  node_to_result_set1,

  node_to_result_set2,

  node_out,

  node_to_description,

  node_start_descr,

  set_with_node_start_descrp,

  node_to_result,

  set_album1,

  set_album2

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

genEl([

 1_:assign_: node_: output_set

])

genEl([

 1_:assign_: node_: result_set

])

genEl([

 1_:assign_: node_: result_set1

])

genEl([

 1_:assign_: node_: result_set2

])

genEl([

 1_:assign_: node_: result

])

genEl([

 1_:assign_: node_: set_album1

])

genEl([

 1_:assign_: node_: set_album2

])

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: node_album

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchElStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node_to_description,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

])

//#---------------2_проходимтройку_------------------

searchSetStr3([

    1_:fixed_: node_to_description,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_start_descr,

    set3_:assign_: set_with_node_start_descrp

])

//#--------------_Записываемвсе параметры в сеты для каждого альбома----------------

label(next_descrp)

searchElStr3([

    1_:fixed_: set_with_node_start_descrp,

    2_:assign_: arc,

    3_:assign_: node_in

],,next_album)

//#----_ydalilidugu k yzly_---

eraseEl([

    1_:fixed_: arc

])

//#--------_Пройдемпятерочку_----

searchElStr5([

    1_:assign_: node_out,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_in,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_: atr1

])

searchElStr5([

    1_:fixed_: node_out,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node_to_result,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_: atr2

])

genElStr3([

    1_:fixed_: set_album1,

    2_:assign_: arc_: arc,

    3_:fixed_: node_to_result

],next_descrp,)

//#-----_povtaryaemvse dlya vtorogo alboma_--------

label(next_album)

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: node_album

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Найдеммножествоset_album_param всех описанийальбомаnode_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchElStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node_to_description,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

])

//#---------------2_проходимтройку_------------------

searchSetStr3([

    1_:fixed_: node_to_description,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_start_descr,

    set3_:assign_: set_with_node_start_descrp

])

//#--------------_Записываемвсе параметры в сеты для каждого альбома----------------

label(next_descrp2)

searchElStr3([

    1_:fixed_: set_with_node_start_descrp,

    2_:assign_: arc,

    3_:assign_: node_in

],,out)

//#----_ydalilidugu k yzly_---

eraseEl([

    1_:fixed_: arc

])

//#--------_Пройдемпятерочку_----

searchElStr5([

    1_:assign_: node_out,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_in,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_: atr1

])

searchElStr5([

    1_:fixed_: node_out,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node_to_result,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_: atr2

])

genElStr3([

    1_:fixed_: set_album2,

    2_:assign_: arc_: arc,

    3_:fixed_: node_to_result

],next_descrp2,)

label(out)

//#--------_Naxodimobschie elementy_--------

selectYStr3([

    1_:fixed_: set_album2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: set_album1

])

//#--------_Вывод_-------

ui_sheet_create([

    1_:assign_: sheet,

   2_:fixed_: sheet_type,

   3_:fixed_: sheet_title,

   4_:fixed_: layout

])

ui_output([1_:fixed_: sheet, 2_: fixed_: set_album1])

return()

end

поиск года основанияисполнителя (файл year_of_foundation.m4scp)

входные параметры:узел, содержащий название исполнителя;

выходные параметры: годоснования исполнителя.

Пример диалога:


/>

Рисунок 3.2.6 — вопрос год основанияисполнителя

Алгоритм:

Делаем копию входныхпараметров.

Ищем год основанияисполнителя.

Формируемрезультирующее множество.

Исходный текстоперации:

//#Операция получениягода основания выбранного исполнителя

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(year_of_foundation,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  sall= "/etc/im_keynode/get_year";

  cmd= "/operation/ui_io_exec_command_par/exec_command_par";

  beg= /"...!!year_of_found_performer!!..\n"/;

  «описание*»;

  «годоснования*»;

  «Исполнители»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node2,

  node3,

  node4,

  node5,

  performer,

  arc,

  arc1,

  arc2,

  arc3,

  selected_els,

  selected_els_copy,

  set,

  set1,

  set2,

  set3,

  set4,

  result_set,

  output_set,

  out,

  descr

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

label(other_copy)

//#Выделяемодинизэлементовperformer множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: const_: arc,

    3_:assign_: const_: performer

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer

eraseEl([

    1_:fixed_: arc

])

//#Проходим первуюпятерку пары

searchSetStr5([

 1_:assign_: const_: node1,

 2_:assign_: const_: arc1,

 3_:fixed_: performer,

    4_:assign_: const_: arc2,

    5_:fixed_: atr1,

 set1_:assign_: set

],,other_copy,other_copy)

//#Под отношениемописание*

searchSetStr3([

    1_: fixed_:«описание*»,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set1

])

//#Находим пересечениемножеств set и set1

selectYStr3([

 1_:fixed_: set1,

 2_:assign_: const_: arc3,

 3_:assign_: node_: node2,

 set3_:fixed_: set

 ],,other_copy,other_copy)

searchElStr3([

    1_:fixed_: set,

    2_:assign_: const_: arc,

    3_:assign_: const_: node3

])

//#Проходим вторуюпятерку пары

searchSetStr5([

 1_:fixed_: node3,

 2_:assign_: const_: arc1,

 3_:assign_: node4,

    4_:assign_: const_: arc2,

    5_:fixed_: atr2,

 set3_:assign_: set2

],,other_copy,other_copy)

searchElStr3([

    1_:fixed_: set2,

    2_:assign_: const_: arc,

    3_:assign_: const_: node1

])

//#Проходимтройку

searchSetStr3([

    1_:fixed_: node1,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set

])

label(other_node)

searchElStr3([

    1_:fixed_: set,

    2_:assign_: const_: arc,

    3_:assign_: const_: node5

])

//#Удаляемдугуarc

eraseEl([

    1_:fixed_: arc

])

//#Проходим первуюпятерку второй пары

searchSetStr5([

 1_:assign_: const_: node1,

 2_:assign_: const_: arc1,

 3_:fixed_: node5,

    4_:assign_: const_: arc2,

    5_:fixed_: atr1,

 set1_:assign_: set3

],,other_node,other_node)

//#Под отношением годоснования*

searchSetStr3([

    1_:fixed_: «год основания*»,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set4

])

//#Находим пересечениемножеств set3 и set4

selectYStr3([

 1_:fixed_: set4,

 2_:assign_: const_: arc3,

 3_:assign_: node_: node2,

 set3_:fixed_: set3

 ],,other_node,other_node)

searchElStr3([

    1_:fixed_: set3,

    2_:assign_: const_: arc,

    3_:assign_: const_: node3

])

//#Проходим вторую пятеркувторой пары

searchSetStr5([

 1_:fixed_: node3,

 2_:assign_: const_: arc1,

 3_:assign_: const_: node5,

    4_:assign_: const_: arc2,

    5_:fixed_: atr2,

 set3_:assign_: out

])

printNl([1_:fixed_: beg])

callReturn([1_:fixed_: cmd,

      2_:fixed_:{[

          1_:out,

          2_:sheet,

          3_:sall     

      ]}

],descr)

return()

end

поиск композиции порейтингу (файл search_by_rating.m4scp)

входные параметры:узел, содержащий название исполнителя;

выходные параметры: годоснования исполнителя.

Пример диалога:

/>

Рисунок 3.2.7 — вопрос композиции свыбранным рейтингом

Алгоритм:

Делаем копию входныхпараметров.

Ищем композиции порейтингу.

Формируемрезультирующее множество.

Исходный текстоперации:

//#Операция получениястраны выбранного исполнителя

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(search_by_rating,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  sall= "/etc/im_keynode/get_search_rating";

  cmd= "/operation/ui_io_exec_command_par/exec_command_par";

  beg= /"...!!search_by_rating!!..\n"/;

  «описание*»;

  «место вчарте*»;

  «Исполнители»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node2,

  node3,

  node4,

  node5,

  node6,

  performer,

  arc,

  arc1,

  arc2,

  arc3,

  selected_els,

  selected_els_copy,

  output_set,

  set,

  set1,

  set2,

  set3,

  set4,

  set_bean,

  out,

  descr

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

genEl([

    1_:assign_: node_: out

])

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

label(other_copy)

//#Выделяемодинизэлементовperformer множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: const_: arc,

    3_:assign_: const_: performer

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer

eraseEl([

    1_:fixed_: arc

])

//#Проходим первуюпятерку пары

searchSetStr5([

 1_:assign_: const_: node1,

 2_:assign_: const_: arc1,

 3_:fixed_: performer,

    4_:assign_: const_: arc2,

    5_:fixed_: atr2,

 set1_:assign_: set_bean

],,other_copy,other_copy)

//#Под отношением местов чарте*

searchSetStr3([

    1_:fixed_: «место вчарте*»,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set1

])

//#Находим пересечениемножеств set и set1

selectYStr3([

 1_:fixed_: set1,

 2_:assign_: const_: arc3,

 3_:assign_: node_: node2,

 set3_:fixed_: set_bean

 ],,other_copy,other_copy)

label(other_bean)

//#Выделяем один изэлементов

searchElStr3([

    1_:fixed_: set_bean,

    2_:assign_: const_: arc,

    3_:assign_: const_: node6

],,to_end,to_end)

//#Удаляем дугу arcпроведенную

eraseEl([

    1_:fixed_: arc

])

searchSetStr5([

 1_:fixed_: node6,

 2_:assign_: const_: arc1,

 3_:assign_: const_: node5,

    4_:assign_: const_: arc2,

    5_:fixed_: atr1,

    set3_:fixed_: out

],other_bean)

label(to_end)

printNl([1_:fixed_: beg])

callReturn([1_:fixed_: cmd,

      2_:fixed_:{[

          1_:out,

          2_:sheet,

          3_:sall     

      ]}

],descr)

return()

end

поисккомпозициипорейтингу(файлsearch_by_rating.m4scp)

входные параметры:узел, содержащий название альбома;

выходные параметры:обложка альбома.

Пример диалога:

/>

Рисунок 3.2.8 — вопрос композиции свыбранным рейтингом


Алгоритм:

Делаем копию входныхпараметров.

Ищем композиции порейтингу.

Формируемрезультирующее множество.

Исходный текст операции:

//#Операция поискаальбома по его описанию

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(search_by_param,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  «MB_TEXT_ERROR1»= /«Не равны»/;

  «MB_TEXT_ERROR2»= /«А сломалося!»/;

  «Альбомы»;

  «описание*»;

  «типзаписи*»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node_temp,

  node_temp1,

  arc,

  arc1,

  arc2,

  attr_arc,

  selected_els,

  selected_els_copy,

  result_set,

  result_set1,

  result_set2,

  temp_node_with_param,

  test_node,

  node_param,

  result,

  set_albums_copy,

  node_album,

  set_album_param,

  temp_node,

  temp_set_1,

  temp_set_2,

  temp_set_3,

  temp_set_5,

  temp_set_0,

  resultSet1,

  resultSet2,

  resultSet3,

  resultSet4,

  node_out_resSet2,

  node_out_resSet3,

  node_out_resSet4,

  output_set

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

genEl([

 1_:assign_: node_: output_set

])

genEl([

 1_:assign_: node_: result_set

])

genEl([

 1_:assign_: node_: result_set1

])

genEl([

 1_:assign_: node_: result_set2

])

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаем копию set_albums_copyвсехальбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбом node_albumиз множества альбомов set_albums_copy

label(other_album)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдем множество set_album_paramвсехописаний альбома node_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler)

genElStr3([

 1_:fixed_: result_set,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album,)

label(not_other_album)

////////////////////////////////////////////////////////////////////////

////

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

],,output)

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаем копию set_albums_copyвсехальбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album1)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album1)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдем множество set_album_paramвсехописаний альбома node_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler1)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album1)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler1)

genElStr3([

 1_:fixed_: result_set1,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album1,)

////////////////////////////////////////////////////////////////////////

label(not_other_album1)

////////////////////////////////////////////////////////////////////////

//

//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: temp_node_with_param

],,output)

//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node

eraseEl([

    1_:fixed_: arc

])

//#Делаем копию set_albums_copyвсехальбомов

searchSetStr3([

    1_:fixed_: «Альбомы»,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: set_albums_copy

])

//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param

//#Берем один альбомnode_album из множества альбомов set_albums_copy

label(other_album2)

searchElStr3([

    1_:fixed_: set_albums_copy,

    2_:assign_: arc_: pos_: const_: arc,

    3_:assign_: node_: const_: node_album

],,not_other_album2)

//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album

eraseEl([

    1_:fixed_: arc

])

//#Найдем множество set_album_paramвсехописаний альбома node_album

//#---------------1_проходимпервуюпару_------------------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_album,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr3([

    1_:fixed_: «описание*»,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

])

searchElStr3([

    1_:fixed_: resultSet2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet2

])

searchSetStr5([

    1_:fixed_: node_out_resSet2,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: const_: node_: node,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set3_:assign_: resultSet3

])

//#---------------2_проходимтройку_------------------

searchElStr3([

    1_:fixed_: resultSet3,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet3

])

searchSetStr3([

    1_:fixed_: node_out_resSet3,

    2_:assign_: pos_: arc_: const_: arc,

    3_:assign_: node,

    set3_:assign_: resultSet4

])

//#Альбомы описываютсяпо трем критериям, проверяем каждый из

//#---------------1_Проверкапо типу записи_--------------

label(other_handler2)

searchElStr3([

    1_:fixed_: resultSet4,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node_out_resSet4

],,other_album2)

//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4

eraseEl([

    1_: fixed_: arc

])

//#--------Ищем альбомпо его введенному описанию---------

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: node_out_resSet4,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr1,

    set1_:assign_: resultSet1

])

searchSetStr5([

    1_:assign_: const_: node_: node,

    2_:assign_: pos_: arc_: const_: arc,

    3_:fixed_: temp_node_with_param,

    4_:assign_: pos_: arc_: const_: arc1,

    5_:fixed_:atr2,

    set1_:assign_: resultSet2

])

selectYStr3([

    1_:fixed_: resultSet1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: resultSet2

],,other_handler2)

genElStr3([

 1_:fixed_: result_set2,

 2_:assign_: const_: pos_: arc,

 3_:fixed_: node_album

],other_album2,)

////////////////////////////////////////////////////////////////////////

label(not_other_album2)

//////////////////////////

label(output)

////////////////////////////////////////////////////////////////////////

searchSetStr3([

    1_:fixed_: result_set,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:fixed_: output_set

])

//#Проверим является лимножество result_set1 пустым

searchElStr3([

    1_:fixed_: result_set1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node

],,out)

selectYStr3([

    1_:fixed_: result_set1,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: output_set

])

//#Проверим является лимножество result_set2 пустым

searchElStr3([

    1_:fixed_: result_set2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node

],,out)

selectYStr3([

    1_:fixed_: result_set2,

    2_:assign_: const_: pos_: arc,

    3_:assign_: node_: node,

    set3_:fixed_: output_set

])

////////////////////////////////////////////////////////////////////////

label(out)

ui_sheet_create([

    1_:assign_: sheet,

   2_:fixed_: sheet_type,

   3_:fixed_: sheet_title,

   4_:fixed_: layout

])

ui_output([1_:fixed_: sheet, 2_: fixed_: output_set])

return()

end

поиск композиции порейтингу (файл type_rec.m4scp)

входные параметры:узел, содержащий название альбома;

выходные параметры: типальбома.

Пример диалога:


/>

Рисунок 3.2.9 — вопрос тип выбранногоальбома

Алгоритм:

Делаем копию входныхпараметров.

Ищем тип записиальбома.

Формируемрезультирующее множество.

Исходный текстоперации:

//#Операция получениятипа записи альбома

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

procedure(type_rec,

[[

  sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  sheet_title= /«Операция прошла успешно»/;

  atr1= "/proc/keynode/1_";

  atr2= "/proc/keynode/2_";

  ui_information;

  layout;

  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;

  «MB_TEXT_METKA»= /«Метка»/;

  sall= "/etc/im_keynode/get_type";

  cmd= "/operation/ui_io_exec_command_par/exec_command_par";

  beg= /"...!!type_of_track!!..\n"/;

  «описание*»;

  «типзаписи*»;

  «Исполнители»

]],

[{

  sheet,

  shift,

  node,

  node1,

  node2,

  node3,

  node4,

  node5,

  performer,

  arc,

  arc1,

  arc2,

  arc3,

  selected_els,

  selected_els_copy,

  set,

  set1,

  set2,

  set3,

  set4,

  result_set,

  output_set,

  out,

  descr

}],

{[

  1_:in_: selected_els,

  2_:in_: sheet,

  3_:in_: shift

]}

)

//#Копияselected_els_copy входных данных

searchSetStr3([

    1_:fixed_: selected_els,

    2_:assign_: const_: pos_: arc_: arc,

    3_:assign_: node_: const_: node,

    set3_:assign_: selected_els_copy

])

label(other_copy)

//#Выделяемодинизэлементовperformer множестваselected_els_copy

searchElStr3([

    1_:fixed_: selected_els_copy,

    2_:assign_: const_: arc,

    3_:assign_: const_: performer

])

//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer

eraseEl([

    1_:fixed_: arc

])

//#Проходим первуюпятерку пары

searchSetStr5([

 1_:assign_: const_: node1,

 2_:assign_: const_: arc1,

 3_:fixed_: performer,

    4_:assign_: const_: arc2,

    5_:fixed_: atr1,

 set1_:assign_: set

],,other_copy,other_copy)

//#Под отношениемописание*

searchSetStr3([

    1_: fixed_:«описание*»,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set1

])

//#Находим пересечениемножеств set и set1

selectYStr3([

 1_:fixed_: set1,

 2_:assign_: const_: arc3,

 3_:assign_: node_: node2,

 set3_:fixed_: set

 ],,other_copy,other_copy)

searchElStr3([

    1_:fixed_: set,

    2_:assign_: const_: arc,

    3_:assign_: const_: node3

])

//#Проходим вторуюпятерку пары

searchSetStr5([

 1_:fixed_: node3,

 2_:assign_: const_: arc1,

 3_:assign_: node4,

    4_:assign_: const_: arc2,

    5_:fixed_: atr2,

 set3_:assign_: set2

],,other_copy,other_copy)

searchElStr3([

    1_:fixed_: set2,

    2_:assign_: const_: arc,

    3_:assign_: const_: node1

])

//#Проходимтройку

searchSetStr3([

    1_:fixed_: node1,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set

])

label(other_node)

searchElStr3([

    1_:fixed_: set,

    2_:assign_: const_: arc,

    3_:assign_: const_: node5

])

//#Удаляемдугуarc

eraseEl([

    1_:fixed_: arc

])

//#Проходим первуюпятерку второй пары

searchSetStr5([

 1_:assign_: const_: node1,

 2_:assign_: const_: arc1,

 3_:fixed_: node5,

    4_:assign_: const_: arc2,

    5_:fixed_: atr1,

 set1_:assign_: set3

],,other_node,other_node)

//#Под отношением типзаписи*

searchSetStr3([

    1_:fixed_: «тип записи*»,

    2_:assign_: const_: arc,

    3_:assign_: const_: node,

    set3_:assign_: set4

])

//#Находим пересечениемножеств set3 и set4

selectYStr3([

 1_:fixed_: set4,

 2_:assign_: const_: arc3,

 3_:assign_: node_: node2,

 set3_:fixed_: set3

 ],,other_node,other_node)

searchElStr3([

    1_:fixed_: set3,

    2_:assign_: const_: arc,

    3_:assign_: const_: node3

])

//#Проходим вторую пятеркувторой пары

searchSetStr5([

 1_:fixed_: node3,

 2_:assign_: const_: arc1,

 3_:assign_: const_: node5,

    4_:assign_: const_: arc2,

    5_:fixed_: atr2,

 set3_:assign_: out

])

printNl([1_:fixed_: beg])

callReturn([1_:fixed_: cmd,

      2_:fixed_:{[

           1_:out,

          2_:sheet,

          3_:sall     

      ]}

],descr)

return()

end

3.3 Верификация иотладка программ специфицированных операций

Отладка производилась спомощью Notepad++, SRS Studio и сообщений в командной строке. В процессеотладки текущей версии системы был выявлен следующий ряд ошибок:

1. Добавление в файлmenu.scsy нового пункта меню: SRS Studio запускалась, но меню было не доступно.

Типовые ошибки:

·  стоялилишние запятые в тексте программы;

·  нехватало запятых;

·  нехватало закрывающих list_next скобок.

2. Добавлениеnsm-комманд в файл event.scsx: при попытке нажать на пункт меню,соответствующий nsm-комманде выводилось сообщение «Ошибка! Описание данногособытия не найдено!»

Ошибка: в файлеevent.scsx указан неправильный id или ссылка на операцию.

Типовые ошибки,допущенные в процессе написания SCP-программы:

·  необъявлены используемые переменные;

·  поставленылишние запятые;

·  непроставлены необходимые запятые;

·  проставленылишние пробелы (при копировании операторов из Руководства по SCP v0.7);

·  проставленыатрибуты fixed_ вместо assign_ и наоборот.

В результате такихошибок при выборе соответствующего пункта меню ничего не происходило.

 

3.4  Спецификация разработанных операцийи библиотеки программ, сертификация разработанных ip-компонентов

В процессе разработкибыл реализовано более 20 различных scp-операций поиска. Выделить среди нихкакой-либо ip-компонент, на данный момент, не представляется возможным, т.к.тема проекта довольно специализированная и интеграции с другими системами непризводилось.


4. Пользовательскийинтерфейс проектируемой интеллектуальной справочной системы

4.1Задачно-ориентированная спецификация пользовательского интерфейса проектируемойинтеллектуальной системы

4.1.1  Декомпозицияпользовательского интерфейса

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

Подсистема диалога спользователем (windows-окна, scs-окна, диалоговые окна, элементы управления);

Подсистема трансляции сязыка SC на естественный язык;

Подсистема обработкидействий пользователя;

Подсистема хранения данныхдля отображения на экране.

4.1.2 Списокиспользуемых ip-компонентов пользовательского интерфейса

Для разработки даннойинтеллектуальной справочной системы были использованы следующие ip-компоненты:

Окна scs-интерфейса

диалоговые scs-окна

Окно раздела справочнойинформации SRS

это srs-окно,

класс sheet

класс shell

атомарные системныеинтерфейсные команды:

main_menu

update_menu

reduce_menu

load_folder

load_scg

save_scg

build_srs

erase_set

open_gwf

change_colour

reduction

increase

select_all

modify_scg_el_content

modify_scg_el_type

modify_scg_el_name

erase_scg_countur

erase_scg_el

paste

copy

gen_srswindow

child_command

 

4.2 Проектирование интерфейсныхподсистем

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

База знанийпользовательского интерфейса интеллектуальной справочной системы по МП включаетв себя ключевые узлы интерфейсных команд (файл em_keynode), описаниеобработчиков интерфейсных команд(event.scsy), дерево событий(event.scsy).

Машина обработка знанийпользовательского интерфейса включает в себя следующие классы интерфейсныхопераций:

• рецепторныеоперации(пользователь-память)

• системные эффекторныеоперации(память-память)

• пользовательскиеэффекторные операции (память-пользователь)

Примером рецепторнойоперации является функция обработки нажатия кнопки, она осуществляет генерациюмножества выходных параметров:

voidpluginView::OnBnClickedButton2()

{

  CComboBox*combo = new CComboBox();

  combo= (CComboBox*)GetDlgItem(IDC_COMBO1);

  CStringstr;

  intindex = combo->GetCurSel();

  combo->GetLBText(index,str);

  m_pSheet->sendMyEv(«323322222222222221»,str);//получитькомпозициистакимрейтингом

}

Примером системныхэффекторных операций является операция ui_io_exec_command, которая генерируетрезультирующую sc-конструкцию интерфейсной операции для последующей её обработки:

///////////////////////////////////////////////////////////////////////////////

// 

//

#include«scp_keynodes.scsy»

#include"../seb/planimetry.scsy"

#include«im_keynodes.scsy»

procedure(exec_command,

[[

  «mainwindow»= "/etc/im_keynode/main window";

  ch_comm= "/etc/im_keynode/child_command";

  $errors_found= /«Неверно заданы аргументы.»/;

 sheet_type= "/proc/agents/shell/keynode/SCgSheet";

  layout=c= /«logical»/;

  p_sheet_title=c= /«Результаты верификации»/;

  1_,2_;

]],

[{

  notfound,main_wnd,show_set,comm,p2,s,cmd,

  arc,a,arc2,

  resultall,

 command,

 segment,scg_el,wnd,sheet,set_scg_el

}],

{[

 1_:in_: set_scg_el,

 2_:in_: sheet,

 3_:in_: cmd

]}

)

genEl([

 1_:assign_: node_:const_:resultall

 ])

searchElStr3([1_:fixed_: «main window»,

 2_:assign_: a,

 3_:assign_: main_wnd],,notfound)

sys_get_location([1_:fixed_: main_wnd, 2_: assign_: segment])

sys_set_default_segment([1_:fixed_: segment])

genEl([

 1_:assign_: node_:const_:command

 ])

genElStr3([

 1_:fixed_: ch_comm,

 2_:assign_: arc_:const_: pos_: arc,

 3_:fixed_: command

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: ch_comm

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: command

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: arc

 ])

///////////////////////////////////////////////

// создание параметровкоманды

//

//первыйпараметр

genElStr5([1_:fixed_: command,

   2_:assign_: const_: actual_: pos_: temporary_: arc,

   3_:fixed_: sheet,

   4_:assign_: const_: actual_: pos_: temporary_: arc2,

   5_:fixed_: 1_

   ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: sheet

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: 1_

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: arc

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_:const_: pos_: a,

 3_:fixed_: arc2

 ])

// генерация узласвязки второго параметра команды 

genElStr5([1_:fixed_: command,

   2_:assign_: const_: actual_: pos_: temporary_: arc,

   3_:assign_: const_: node_: p2,

   4_:assign_: const_: actual_: pos_: temporary_: arc2,

   5_:fixed_: 2_

   ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: p2

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: 2_

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc2

 ])

// генерация второгопараметра

genElStr5([1_: fixed_:p2,

   2_:assign_: const_: actual_: pos_: temporary_: arc,

   3_:assign_: const_: node_: s,

   4_:assign_: const_: actual_: pos_: temporary_: arc2,

   5_:fixed_: 1_

   ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: s

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc2

 ])

//формируемдочернююкоманду

genElStr5([1_:fixed_: cmd,

   2_:assign_: const_: actual_: pos_: temporary_: arc,

   3_:assign_: const_: node_: comm,

   4_:assign_: const_: actual_: pos_: temporary_: arc2,

   5_:fixed_: s

   ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: comm

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc2

 ])

genElStr3([

 1_:fixed_: s,

 2_:assign_: arc_: const_: pos_: arc,

 3_:fixed_: comm

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc

 ])

genElStr3([

 1_:fixed_: s,

 2_:assign_: arc_: const_: pos_: arc,

 3_:fixed_: cmd

 ])

genElStr3([

 1_:fixed_: resultall,

 2_:assign_: arc_: const_: pos_: a,

 3_:fixed_: arc

 ])

   

varAssign([1_:assign_:wnd,2_:fixed_:main_wnd],ok_msg,ok_msg)

// если произошлаошибочная ситуация

label(err_msg)

genElStr3([1_:fixed_:resultall,

   2_:assign_: const_: temporary_: actual_: pos_: a,

   3_:fixed_: $errors_found])

ui_sheet_create([1_: assign_: const_: node_: wnd,

   2_:fixed_: sheet_type,

   3_:fixed_: p_sheet_title,

   4_:fixed_: layout])

printEl([1_:resultall])

//выводрезультата

label(ok_msg)

ui_send([1_:fixed_: wnd, 2_: fixed_: resultall])

eraseEl([1_:fixed_:f_: resultall])

return()

end

Примеромпользовательской эффекторной операции (память-пользователь) является функцияsetAlbumList, которая обрабатывает ключевой узел интерфейсной команды дляотображения идентификаторов выходных параметров в элемент управления:

voidpluginSheet::setAlbumList(sc_addr addr)

{

  CArray<sc_string,sc_string&> albumList;

  albumList.FreeExtra();

  Shell*shell = Shell::getInstance();

  sc_session*s = shell->getSession();

  sc_iterator*it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);

  for(;!it->is_over(); it->next())

  {

    sc_addralbum_addr = it->value(2);

    sc_stringstr = s->get_idtf(album_addr);

    albumList.Add(str);

  }

 

  m_pView->UpdateListBox2(albumList);

}


4.3 Верификация иотладка пользовательского интерфейса

Для реализации итестирования базы данных использовался SRS Studio. Для написания кода операцийиспользовал Notepad++, интерфейс реализован по средствам библиотек MFC на языкепрограммирования С++, верификация и тестирование с помощью SRSStudio, Microsoft Visual Studio .NET 2003 илогаpm вкоманднойстроке.

 

4.4 Спецификацияразработанного пользовательского интерфейса, сертификация разработанныхip-компонентов


5. Интеграция разработаннойсистемы с другими системами

Интеллектуальнаясправочная система может быть интегрирована с другими система, работающими вданной предметной области.

Кроме этого могут бытьзаимствованы операции и ip-компоненты для качественного улучшения системы.

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

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

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


6. Направлениядальнейшего развития прототипа интеллектуальной справочной системы и путипромышленного изготовления спроектированной интеллектуальной системы

Для полноценногофункционирования справочной системы и достижения главной цели – способностьсистемы отвечать на самые нетривиальные вопросы и привлекать широкие массыпользователей, нужно:

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

Развитие машиныобработки заключается в увеличении количества классов задач, которые будетрешать данная интеллектуальная справочная система.

Пользовательскийинтерфейс прикладной системы должен давать возможность работать как синформацией, представленной на языках, являющихся подмножествами языка SC, таки на естественном языке.

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

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

Следует уделитьвнимание «дружелюбности» интерфейса. Необходимо стремиться к тому, чтобы дажене опытному пользователю было понятно, как работать с системой. Время, котороенеобходимо для освоения навыков работы со средой интеллектуальной справочнойсистемы должно сводиться к минимуму.


7. Вклад в развитиесемантических технологий проектирования интеллектуальных систем

7.1 Список выявленныхошибок среды проектирования интеллектуальных систем

После закрытия всехокон SRS-Studio, в системе остаётся незавершенный процесс, который не даётзапуститься собранной системе или ещё одной копии SRS-Studio.

При загрузкеsc-элементов в память не загружаются дуги.

 

7.2 Список предложений посовершенствованию среды проектирования интеллектуальных систем

Доработка руководствапользователя по операциям на языке SCP.

Разработкаинструментария для написания scp-программ (минимум отладчика).

Написание новыхscp-функций (например, переход по паре).

Исправление указанныхошибок.

Создание ip-компонентовбазы знаний, машины обработки знаний, пользовательского интерфейса.

Отладка текущегоинструментария для уменьшения используемых ресурсов.

 

7.3 Список предложений посовершенствованию семантических технологий проектирования интеллектуальныхсистем

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

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

Так же важным этапом вразвитии технологии является создание ip-компонентов, задача которых упроститьи ускорить процесс разработка за счёт повторного использования каких-либоэлементов интеллектуальной системы. Важным является создание ip-компонентоввсех подсистем: базы знаний, машины обработки знаний, пользовательскогоинтерфейса.

 

7.4 Создание и использованиеip-компонентов

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


Библиографическийуказатель

1.  Режимдоступа: www.skilfully.org/18.08.2008/1. — Дата доступа: 21.12.2008.

2.  Режимдоступа: www.encyclopedia.ru/news/enc/detail/2321/. – Дата доступа:21.12.2008.

3.  Справочно-информационныйпортал Википедия. — Режим доступа: ru.wikipedia.org/wiki/Семантическая_паутина. - Дата доступа: 20.12.2008.

4.  TheSemantic Web. Scientific American, 17 мая 2001, русский перевод: СемантическаяСеть.

5.  Справочно-информационныйпортал Википедия. — Режим доступа: ru.wikipedia.org/wiki/Семантическая_сеть. - Дата доступа: 21.12.2008.

6.  http://www.trizland.ru/trizba.php?id=186.– Дата доступа: 21.12.2008.

7.  Руководстворазработчика семантической справочной системы, Минск, 2008.

8.  Руководствопо программированию на языке SCP, Минск, 2005.

еще рефераты
Еще работы по информатике, программированию