ko444evnik (ko444evnik) wrote,
ko444evnik
ko444evnik

ISO 15926 DiagramDesigner

ISO 15926 DiagramDesigner

Программа для построения и визуализации схем в стиле стандарта ISO-15926 ("диаграмм экземпляров" ("instance diagram") части 2, некоторых компонентов "диаграмм определения шаблонов" и "диаграмм инстансов шаблонов" части 7), а также экспорта данных в формат кода языка Python, используемый в программе .15926 Editor компании TechInvestLab.ru).

(Изменения относительно предыдущей версии текста выделяются подчеркиванием).

на 2012-10-17: версия 1.0.0.9 (альфа) СКАЧАТЬ


Программа написана на C# под Windows и .NET 4.0 ( необходимо также присутствие .NET 3.5 и .NET 3.5 sp1). требует инсталляции.


0.Инструкция по установке:

Распаковать .zip-архив и запустить setup.exe.

На текущий момент - инсталлятор действует по технологии ClickOnce что означает:

1) программа самостоятельно установится в папку вида:
C:\Documents and Settings\[имя-юзера]\Local Settings\Apps\2.0\[длинная-неосмысленная-строка]\

2) в меню "Пуск" добавится как:
Start\Programs\House of Lazy Dragon\ISO_15926_DiagramDesigner_NG
(или Пуск\Программы\House of Lazy Dragon\ISO_15926_DiagramDesigner_NG)

3) в случае, если в системе отсутствуют необходимые для работы компоненты - инсталлятор самостоятельно выкачает их с сайта Microsoft и установит (если не повезет - процесс выкачивания может оказаться длительным - вплоть до пары десятков минут).

4) в процессе установки появится окошко, в котором Windows будет запрашивать - следует ли доверять предоставленному сертификату, на что следует ответить утвердительно (в ином случае установка прекратится).

5) удаление программы производится стандартно - через Пуск\Настройки\Установка и удаление программ.


1.Инструкция по применению

1.1. Общий вид:



1.2. Рабочий процесс. Построение схем вручную.

1.2.1. Последовательность действий.

1.2.1.1. Необходимое количество элементов перетаскиваются ( в смысле drag'n'drop ) на поверхность холста из вкладок "Entities" ("Сущности" в смысле стандарта 15926) и "Resources" ("Ресурсы" - дополнительные поясняющие картину внешние данные, текст, изображения и т.п.).

1.2.1.2. Элементы нужным образом размещаются на холсте, упорядочиваются, группируются, редактируются, связываются между собой.

1.2.1.3. Полученная картина сохраняется в виде файла .xml ( импорт и экспорт в .owl на данный момент не поддерживаются ) или изображения .png.

1.2.1.4. Схема может экспортироваться в формат кода на языке Python (посредством клика мышкой на иконке "Слона") и через копирование текста в буфер – передаваться на дальнейшую обработку в программу .15926 Editor.

1.2.2. Редактирование элемента с "сущностью".

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

ID : редактируемая текстовая строка - имя/идентификатор сущности.

EntityType : точный тип сущности - выбирается из выпадающего списка "201-сущности-описанной-в-стандарте-15926-части-2".

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

AboutRdl : (на данной момент используется лишь для изменения цвета элемента в целях повышения выразительности ).

флаг IsEntity : если включен, не будет показываться строка ID.

флаг IsInstance : если включен, не будет показываться строка EntityType.

флаг IsVacancy : если включен, сущность трактуется как "вакансия в шаблоне"..

Примечание: в случае если элемент содержит в себе сущность типа Relationship (либо производную от нее) установка обоих флагов IsEntity и IsInstance - практикуется чтобы получить часто используемую на практике нотацию "чистого 'ромба' без всяких сопроводительных надписей".

иллюстрация к редактированию сущностей:


иллюстрация: действие флагов IsEntity и IsInstance:


иллюстрация: действие флагов IsVacancy:


1.2.3. Связывание сущностей:

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

Последовательность действий:
1. навести указатель мыши на потребный элемент - на нем подсветятся призрачные квадратики коннекторов;
2. навести мышкой на один из коннекторов;
3. нажать левую кнопку мыши;
4. потянуть указатель мыши на элемент с другой сущностью;
5. навестись на тот его коннектор, который подсветится зеленым (хотя допустимо и на любой другой - но тогда полученная связь не будет "корректной");
6. отпустить кнопку мыши.



У разных типов сущностей (Индивидов, Отношений, МногомерныхОбъектов) - набор коннекторов и их расположение несколько отличается. Порядок расположения коннекторов по сравнению с предыдущей версией несколько изменен. Также добавлен специализированный коннектор Vacancy для сущностей с установленным флагом IsVacancy - с целью реализации функционала шаблонов части 7.



Корректными-с-точки-зрения-стандарта-15926 будут такие связи:

Связь между коннекторами [classification_out] и [classification_in] обозначает "классификацию" ( на рисунке связь между "СlassOfClass(1)" и "Class(2)" ).

Связь между коннекторами [specialization_out] и [specialization_in] обозначает "специализацию" ( на рисунке связь между "Class(3)" и "Class(4)" ).

Связь между коннекторами [role_out] и [role_in] означает "роль в отношении" ( на рисунке "Class(5)" связан с "#6" посредством отношения "xyz-relation". причем "Class(5)" играет в нем роль "role A", а "#6" - соответственно "role B" ).

Связь между коннекторами [multidimensional] и [role_in] означает "агрегацию" - "включение" одного элемента в другой ( на рисунке "Multidimensional(9)" включает в себя "#(7)" и "#(8)" - причем первому назначен индекс "1", а второму - индекс "2" ).

Связь между коннекторами [vacancy] и [role_in] трактуется как соотнесения инстанса сущности с вакансией в определении шаблона (в текущей версии программы функционал шаблонов реализован все еще не полностью).

Некорректные связи между элементами с сущностями выделяются пунктиром. Пунктиром же обозначаются связи между "элементами с сущностями" и "элементами с ресурсами" ( на рисунке - связь "ClassOfClass(10)" с "some text" ).

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



1.2.4. Редактирование связи.

Связь можно дополнительно настраивать, редактируя текст меток и включая/отключая их показ.



Последовательность действий:
1. выбрать связь (щелчком на линии);
2. вызвать контекстное меню (щелчок правой кнопки мыши);
3. выбрать пункт выпавшего меню 'Edit';
4. внести требуемые изменения;
5. новым, по отношением к предыдущей версии, функционалом является предоставлению пользователю готовых вариантов заполнения меток, которые доступны через соответствующие выпадающие списки в правой части окна редактирования. К примеру, для связей, подключенным к сущностям типа Relationship - в средней строке доступны имена ролей; для подключенным к MultidimensionalObject – в верхней и нижней строке доступны индексы и идентификаторы полей и т.п.



1.2.5. Ресурсы.

Под ресурсами здесь подразумеваются разнообразные внешние данные, поясняющие схему, но не имеющими прямого отношения к стандарту ISO 15926:
- текст,
- текстовые файлы разных форматов и кодировок (в текущей версии программы : FlowDocument в .xaml, .rtf, unicode UTF8, windows-1251 ),
- изображения из файлов,
- рисунки пером,
и их комбинации.



Один ресурсный элемент может иметь одновременно несколько типов содержимого. Настраивается это путем установки соответствующих флажков в Редакторе Ресурса (вызывается путем нажатия все той же кнопки "edit", появляющейся над элементом при наведении на него курсора мыши ).




2. Рабочий процесс.
2.1. Автоматическая генерация схемы.

В текущей версии программы функционал декомпиляции схемы d псевдокод и генерации схемы из псевдокода в Graphviz-подобной-нотации отключен и в дальнейшем поддерживаться не будет. В последующих версиях программы функционал генерации/декомпиляции будет реализован заново с использованием языка определения данных RDF и языка запросов к данным SPARQL.


2.2. Взаимодействие с .15926 Editor

Процесс декомпиляции схемы в код на языке Python выполняется в специализированном окне, вызываемом с помощью кнопки "Decompile for .15926 Editor" ("иконка со слоном"). Описание Python-нотации изложено в документации к самому редактору.

Особенности процесса в текущей версии программы:

1. На текущий момент декомпиляция поддерживается лишь для сущностей части 2, но не для шаблонов части 7 ISO 15926.

2. Так как часть 8 стандарта не имеет стандартного представления для типа MultidimensionalObject части 2, и .15926 Editor не поддерживает этот функционал - отношения агрегации игнорируются, о чем в получаемом коде упоминается с помощью комментария.

3. Игнорируются также любые элементы, не относящиеся к стандарту (ресурсы, отношения ассоциации и т.п.).

4. В случае, если в схеме для какого-либо отношения не указана роль – вместо нее в код вставляется строка "NEED-ROLE-NAME!!!" (пример: builder.role( id=name006, NEED-ROLE-NAME!!!=name009 ) ), которая не является корректной с точки зрения Python, следствием чего будет являться ошибка интерпретации, если не внести необходимую правку.

Результатом декомпиляции подобной схемы:



будет следующий код:




Текстовое представление:

name001 = part2.ClassOfClassOfIndividual(label='Ford Colour Class')
name002 = part2.ClassOfIndividual(label='Ford Red')
name003 = part2.ClassOfIndividual(label='Ford Black')
name004 = part2.ArrangedIndividual(label='Car Ford-896 #2343')
name005 = part2.ClassOfArrangedIndividual(label='Ford Car')
name006 = part2.ClassOfArrangedIndividual(label=' Car')
name007 = part2.ClassOfClassification(label='Car has Colour')
name008 = 'http://rds.posccaesar.org/2008/06/OWL/RDL#RDS38249'
name009 = part2.ClassOfClassification(label='Ford Car has Colour')
name010 = part2.Classification(label='relation')
name011 = 'http://rds.posccaesar.org/2008/06/OWL/RDL#RDS6508325'
builder.role( id=name007, hasClassOfClassifier=name008 )
builder.role( id=name007, hasClassOfClassified=name006 )

builder.role( id=name009, hasClassOfClassified=name005 )
builder.role( id=name009, hasClassOfClassifier=name001 )

builder.role( id=name010, hasClassified=name004 )
builder.role( id=name010, hasClassifier=name003 )

part2.Classification( hasClassifier=name001, hasClassified=name002 )
part2.Classification( hasClassifier=name001, hasClassified=name003 )
part2.Classification( hasClassifier=name005, hasClassified=name004 )
part2.Classification( hasClassifier=name009, hasClassified=name010 )
part2.Classification( hasClassifier=name008, hasClassified=name011 )

part2.Specialization( hasSuperclass=name006, hasSubclass=name005 )
part2.Specialization( hasSuperclass=name008, hasSubclass=name001 )
part2.Specialization( hasSuperclass=name007, hasSubclass=name009 )
part2.Specialization( hasSuperclass=name011, hasSubclass=name003 )


3. Ссылки на использованные материалы:
1. Базовые классы кода редактора основаны на серии статей за авторством sukram на codeproject.com;
2. Иконка со слоном за авторством Martin Berube.

Примечание:
Текущая версия .15926 Editor 1.00, та, которую можно скачать сейчас, НЕ ПОДДЕРЖИВАЕТ ИМПОРТА кода диаграмм! О выходе поддерживающей версии будет объявлено дополнительно.
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments