Рефераты

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

    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)

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

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

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

Вопрос-7

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

Ответ-7

Рисунок 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)

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

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

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


Вопрос-8

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

Ответ-8

Рисунок 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)

//#----_ydalili dugu 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,)

//#-----_povtaryaem vse 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)

//#----_ydalili dugu 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)

//#--------_Naxodim obschie 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).

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

• рецепторные операции(пользователь-память)

• системные эффекторные операции(память-память)

• пользовательские эффекторные операции (память-пользователь)

Примером рецепторной операции является функция обработки нажатия кнопки, она осуществляет генерацию множества выходных параметров:

void pluginView::OnBnClickedButton2()

{

  CComboBox *combo = new CComboBox();

  combo = (CComboBox*)GetDlgItem(IDC_COMBO1);

  CString str;

  int index = 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,

[[

  "main window"= "/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, которая обрабатывает ключевой узел интерфейсной команды для отображения идентификаторов выходных параметров в элемент управления:

void pluginSheet::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_addr album_addr = it->value(2);

    sc_string str = s->get_idtf(album_addr);

    albumList.Add(str);

  }

 

  m_pView->UpdateListBox2(albumList);

}


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

Для реализации и тестирования базы данных использовался SRS Studio. Для написания кода операций использовал Notepad++, интерфейс реализован по средствам библиотек MFC на языке программирования С++, верификация и тестирование с помощью SRS Studio, 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.   Режим доступа: http://www.skilfully.org/18.08.2008/1. - Дата доступа: 21.12.2008.

2.   Режим доступа: http://www.encyclopedia.ru/news/enc/detail/2321/. – Дата доступа: 21.12.2008.

3.   Справочно-информационный портал Википедия. - Режим доступа: http://ru.wikipedia.org/wiki/Семантическая_паутина. - Дата доступа: 20.12.2008.

4.   The Semantic Web. Scientific American, 17 мая 2001, русский перевод: Семантическая Сеть.

5.   Справочно-информационный портал Википедия. - Режим доступа: http://ru.wikipedia.org/wiki/Семантическая_сеть. - Дата доступа: 21.12.2008.

6.   http://www.trizland.ru/trizba.php?id=186. Дата доступа: 21.12.2008.

7.   Руководство разработчика семантической справочной системы, Минск, 2008.

8.   Руководство по программированию на языке SCP, Минск, 2005.


Страницы: 1, 2


© 2010 Собрание рефератов