Введение

Представление моделей бизнес-процессов на основе онтологий (онтологическое моделирование) эквивалентно Semantic BPM. Введение в семантический BPM (Business Process Management) см. «Semantic BPM. Семантика и синтаксис бизнес‑процессов» [semBPM24]. Если кратко, то можно провести аналогию: если классическая BPM система (BPMS: ARIS, бизнес‑студия, fox‑manager и т. п.) — это технологический аналог mediawiki (wikipedia), то Semantic BPM — это технологический аналог semantic mediaWiki (Wikidata), т.е.

IF MediaWiki → Semantic MediaWiki then BPM (ARIS, BPMS, EA) → Semantic BPM

Основной замысел (цель) семантического представления процессов (BPM, EA) не классическими BPM-системами, а семантическими (Linked Data) - такой же, как и у семантических wiki

Одно из ключевых дополнений к wiki-гиперссылки (html) это указание не просто что «ОбъектА связан с ОбъектомБ» (т.е. просто «связано») и соответствующий кликабельный переход (wiki-ссылки, markdown syntax), а указание, что «ОбъектА связан с ОбъектомБ» такими-то типом отношения (впрочем, как и задание других свойств объекта через отношения).

Изначально все BPMS (изначально называемые CASE‑средствами) — семантические, т.к. их суть — это отношения между объектами, только в них семантика глубоко спрятана «под капотом» BPMS и нестандартная (собственная, проприетарная). Semantic BPM «поднимает» семантическую составляющую на поверхность (возможность работы с семантическим слоем) и использует стандартные сематические технологии Linked Data.

В основе RDF (Resource Description Framework) — триплеты «субъект — отношение — объект» лежит ERD: Entity Relationship (ER) diagram. RDF \ ERD — это способ формализации знаний на основе атома знания — триплета. Вообще ER, subject, predicate, типы рассуждений и другие базовые элементы для работы со знаниями в СССР содержались в школьных учебниках [Логика54].

Ставится задача: получить RDF‑представление (набор триплетов) — как однозначную интерпретацию графического представления (модели) процесса в нотации VAD. Это задача типа «diagram to script / triple»: на входе схема + онтология, на выходе обычный rdf и его «обычный» граф.

Обратная задача «script to diagram» показана в [SmartDesign24] (генерация схемы процесса по скрипту dot). Применительно к Semantic BPM нужно из таблицы сделать не сразу dot, а вначале rdf, а из него уже dot (graphviz) через таблицу соответствия объектов схемы процесса примитивам dot.

Рассмотрим технологию формализации верхнеуровневых процессов компании посредством нотации VAD: Value Added Chain (diagram) — цепочка добавленной ценности, точнее упрощенный вариант — без указания систем (инструментов) и исполнителей процесса, входов и выходов (документальных), но с различными типами процессов (подпроцессов, function): внешний (заимствованный), предваряющий \ последующий.

Задача: По имеющейся схеме процесса в нотации VAD построить набор троек (триплетов — атомарной единицы «знания») по спецификации RDF (turtle). Схема процесса строится из шаблона (путем перетаскивания эталонных объектов — Master), сам шаблон (набор графических примитивов, трафарет) обычно описывается в Соглашении о моделировании процессов и публикуется как «корпоративный трафарет» на корпоративном портале компании, например, в случае с visio — виде vss \ vssx файла.

1. Базовые элементы используемой онтологии и легенды (нотации) VAD

Полное описание онтологии процессов — как элемента архитектуры предприятия, ЕА — требует отдельного повествования. Тут будут показаны только объекты типа «Процесс», но в связке с «VAD — оберткой» (графический синтаксис, нотация BPM), визуализирующей в графическом виде семантические концепты. На рис. 1 показаны базовые элементы VAD‑легенды и визуализируемые ими семантические конструкции.

Рис. 1 Базовый трафарет VAD – диаграммы и соответствующие семантические конструкции
Рис. 1 Базовый трафарет VAD – диаграммы и соответствующие семантические конструкции

В состав рассматриваемого процесса, название которого задается перемой MainProcess, входят объекты (подпроцессы) со связями (предикатом) hasParent и isExt. Такие связи задают границы процесса.

Принцип схож с ГОСТ 2.711–82 ЕСКД Схема деления изделия на составные части (схема деления изделия \ процесса), где hasParent — это собственные процессы (изделия в 2.711), а isExt (Ext = external) — внешние (заимствованные) процессы (изделия). Это позволяет выстроить стройную иерархию идентификаторов процессов и построить единое дерево процессов на основе их идентификаторов. Обратные отношения показаны в скобках, т. е. это hasChild (имеет потомка) и hasEx (содержит внешний процесс).

Объекты «.Master» = Процесс и «.Master» = Процесс_Внешний (заимствованный) — это составные элементы MainProcess, в отличие от Предваряющего и Последующего процессов. В состав объекта ProcessDia (схема процесса, т. е. один процесс может быть описан разными схемами) включаются кроме объектов в составе MainProcess (его составные элементы): Предваряющие, Последующие процессы, Заголовок_процесса и другие объекты, отраженные на схеме но не входящие в границы (в состав) процесса MainProcess.

Заголовок_процесса — заголовок с названием детализируемого процесса — технически может быть представлен по разному, например, как штатный заголовок листа (схемы), т. е. специальный объект (title и т. п.) в спецификациях dot, drawio, visio и др. Тут мы используем универсальный вариант: Заголовок процесса — это обычный объект из шаблона (трафарета VAD).

Рис. 2 Схема (VAD) процесса Изготовление скрепки (лист visio)
Рис. 2 Схема (VAD) процесса Изготовление скрепки (лист visio)

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

Введение в Resource Description Framework (RDF) см.

- слайды

- описание

RDF — это синтаксис описания ресурсов, который использует элементарные конструкции «триплет» Субъект — Предикат — Объект, отношений между Субъект — Объект и оперирует URI‑ссылками вместо слов для обозначения сущностей.

Онтологическое моделировании возможно и на более высоком уровне, например, Глобальная онтология Индустрии 4.0, где также используются абстракции #Process и т. п. [i4go].

2. Получение RDF — модели процесса из схемы Visio

Обработка выполнена в VBA Visio. Шаблоны из рис. 1 хранятся в составе трафарета (левое окно), схемы процессов и обработчик (макрос), окно результата (Immediate) — все это в одном файле visio (visioOntoVAD.vsdm).

Visio – файл visioOntoVAD.vsdm выложен на github.com/bpmbpm/vadtordf

pdf файл показывает листы и результат в окне Immediate (у кого нет visio).

В приложении 1 показан краткий алгоритм обработки листа visio (алгоритм макроса), а в приложении 2 — результат выгрузки в RDF (упрощено для понимания, в т.ч. не использовано qname «a»).

Действия для получения модели процесса в формате RDF (turtle):

  • в visio открыть файл visioOntoVAD.vsdm,

  • открыть лист «vad» или «vadE» (English) со схемой процесса в нотации VAD (построенной по шаблонам из трафарета),

  • запустить макрос — и в окне Immediate (VBA Immediate Window) будет выведено RDF — представление процесса VAD.

На схеме процесса (листы «vad» и «vadE» или вновь созданные) вызывается макрос Main (Alt F8), который в окне MsgBox выдаст часть RDF (в Visio 2016 и ранних отрезается 255 символов), а полный в окно отладчика.

Далее открываем Visual Basic Editor (Alt F11, Ctrl G) и окно Immediate (Debug.Print). При копировании русскоязычного текста из окна Immediate нужно включать русскую раскладку клавиатуры.

Для визуализации в виде графа из окна Immediate копируем RDF триплеты (Ctrl A, Ctrl C) и вставляем их, например, в RDF online редактор, например, RDF grapher и получаем граф.

Полученное представление более сложно для восприятия, но отражает «анатомические» (через онтологию) свойства формализуемого (моделируемого) процесса. 

Microsoft десятилетиями ленится сделать нормальную поддержку в MS Office русского языка (особенно редактора Visio VBA), поэтому при копировании текста из триплетами RDF на русском из окна Immediate — нужно включать русскую раскладку клавиатуры. Поэтому и приведен «безотказный» англоязычный пример (лист vadE). Если нужно выгрузку RDF сохранять в файл, то можно заимствовать код из exDOT SmartDesign см. [SmartDesign24], в нем же для поддержки русского сделана перекодировка.

В приложении 2 — показан результат выгрузки в RDF (копия окна Immediate VBA‑редактора) «смысла» процесса, «обернутого» в синтаксис VAD. Полученное семантическое представление процесса в RDF (turtle) обеспечивает однозначное (в рамках используемой онтологии) понимание процесса и может служить универсальным форматом представления знаний о процессах.

Файл visioOntoVAD2.vsdm

В visioOntoVAD2.vsdm для визуализации графа без ручного переноса триплетов добавлен вызов https://www.ldf.fi/service/rdf-grapher?rdf=

Могут быть сложности: изменить путь к браузеру "C:\Program Files\Google\Chrome\Application\chrome.exe" или добавить замены, дополнительно к

ss = Replace(ss, " ", "+") ' Замена пробелов на +

ss = Replace(ss, "#", "%23") ' Замена # на %23

ss = Replace(ss, """", "%22") ' Замена " %22

3. Процессная ARIS-онтология

Как было уже сказано: ведущие BPMS — системы, например, ARIS, основаны на семантике, но нестандартной. Процессная ARIS‑онтология изложена на 5000 страницах [ARISMR17].

Покажем это на пример ARIS Method Reference Version 10.0 — Service Release 3. December 2017 [ARISMR17]:

П.3.2.128 Value-added chain diagram (стр. 2091) вводит триплет:

Source object type = Function

Relationship type (active) = is predecessor of (является предшественником)

Relationship type (passive) = follows (следует, т.е. обратная связь)

Target object type = Function

Таким образом, арисовкий триплет:

Function1 «является предшественником» (is predecessor of) Function2

эквивалентен показанному ранее:

Function1 «имеет следующий за ним элемент» Function2

или в формате RDF

:Function1 :hasNext :Function2 .

Аналогично можно построить триплет (атом знания) через обратные (в ARIS это «passive») предикаты: follows (ARIS) и hasPrev (previous — предшествующий).

Выше было упомянуто про добавление на схему VAD дополнительных элементов, включая входы и выходы в процесс (элемент Function). Для этого в п.3.2.128 [ARISMR17] указаны отношения is input for \ has as output. Пять тысяч страниц [ARISMR17] – это описание «скрытой» семантической части ARIS.

4. VAD — элемент и его представление в Visio

Для RDF — описания процесса был приведен упрощенный подход к VAD — элементу. Более полный включает указание исполнителей процесса (роли в процессе или подразделения \ должности). В ARIS объекты Organizational unit связаны с Function разнообразными типами связи [ARISMR17]: carries out (is carried out by), accepts (is accepted by), contributes to (is worked on by collaboration of), что, видимо, является перебором применительно к VAD.

Рис. 3 VAD — элемент с исполнителями, заданными как данные фигуры
Рис. 3 VAD — элемент с исполнителями, заданными как данные фигуры

На рис. 3 показана техническая реализация добавления (привязки) исполнителя (роли) и комментария через «Данные фигуры»: поле org (Organizational unit) и com (Comment), см. вкладку visio Данные и Расширенные рисунки, связанные с данными.

Через штатную связку visio с excel можно вести репозитарий объектов процесса в excel: excel — repo, визуализируемое через visio. Пример использования штатной связки в BPM‑проекте показано на Рис. Инструмент связывания данных visio + excel [easyEA23].

На VAD — схему добавляются и иные элементы, например, входы и выходы (материалы, документы), как показано на рис. 1.1в «Схема VAD» [SmartDesign24].

Заключение

Рассмотрено «прямое» преобразование: «схема → RDF», обратное преобразование «RDF → схема» может быть построена по технологии SmartDesign BPM, рассмотренной в [SmartDesign24] на примерах excel + dot (exDOT SmartDesign) и js + dot (jsDOT SmartDesign).

Semantic + Repository = Semantic Repository

Однако в случае с классическим BPMS остается вопрос, как и в каком формате хранить данные (логику) моделей? Данные о всех моделях компании и связях между моделями, атрибуты самих моделей и атрибуты объектов моделей. Модели процессов, структуры и иерархии процессов, организационных единиц, данных, документов и т. п. Да еще так, чтобы эти форматы были открытыми и «прозрачными».

Понятно, что речь не про формат Graphviz DOT (Mermaid, PlantUML и т.п.), т.к. это лишь промежуточное представление: синтаксические инструменты «обертывания смысла» через нотации в «цветные картинки» (графическая визуализация сущностей, их свойств, их связей, смыслов). Использовать реляционное (связанные таблички) представление данных модели, как это сделано во всех CASE\ BPMS системах, — это вариант постоянных экспортов \ импортов (ARIS XML) в закрытые проприетарные форматы каждой системы (ARIS Document format, ADF).

Логичным решением становится формат RDF. При этом реализация подхода «Semantic SmartDesign» (совмещение идей [semBPM24] и [SmartDesign24]) предполагает формирование из таблички кроме текстового DOT еще и семантическое описание в RDF \ OWL.

Похожий промер семантической формализации процесса, но в нотации ЕРС, см. https://habr.com/ru/articles/708026/comments/#comment_25053928

Алогичный пример планируется повторить на drawio, кому интересно — присоединяйтесь. Вообще, через выгрузку в RDF можно собирать единый Semantic Repository процессов из схем, сделанных в любых редакторах (visio, drawio) и в разных нотациях (VAD, EPC).

Вопрос: Путь от BPM к Semantic BPM — это встраивание технологий Linked Data в классический BPM (BPMS, т.е. ARIS и т. п.). Однако возможен путь от Semantic к Semantic BPM: для этого нужно найти инструменты Linked Data, которые помимо классического «графа знаний» смогли бы задавать нужные BPM — нотации (VAD, EPC и т. п.) для визуализации через них знаний.

Есть ли такие инструменты Linked Data? Есть попытки типа data explorer for neo4j (yworks), но построить на нем VAD диаграмму (другую BPM нотацию) проблематично (только прямоугольник, эллипс, картинка, нет задания направления и т. п.), кроме того привязка к neo4j и отсутствие загрузки файлов rdf.

Приложение 1. Анализ объектов схемы процесса в нотации VAD. Алгоритм обработки листа схемы visio

Запись @prefix 

Первый проход: все объекты схемы. Все проходы (перебор объектов схемы) осуществляется через For Each DC In ActivePage.Shapes

Поиск ключевых элементов, которые потом будут использоваться для присвоения значений. В данном случае - это корневой элемент – родительский процесс (Parent для остальных) .Master = Заголовок_процесса. Находим и присваиваем значение переменной: MainProcess = .Text объекта «заголовок в схеме типа VAD». Если такого не находим, то:

MsgBox "На схеме не указан Заголовок_процесса (MainProcess). Перенесите из трафарета шаблон (Master) Заголовок_процесса"

Запись триплетов к MainProcess.

Второй проход: все объекты схемы.

Если это конектор (1D) и его тип Динамический_соединитель_VAD (ShpHasNext), то через функции Function Connect_in и Function Connect_out находим начало и конец.

Для получения идентификатора из имени объекта используем замену пробела на подчеркивание.

:Subject .Text = Название процесса, но пробелы в названии процесса преобразуем в “_”.

Далее вставляем предикат :hasNext (следующий элемент)

:Object .Text – end преобразуем в “_”

Формируем строку триплета:

Ss = ss & Chr(13) :Subject :hasNext :Object “_.”

Третий проход: все объекты схемы.

Поиск VAD – объектов. В зависимости от типа VAD - объекта формируем строку составного триплета, например: 

:Нарезка_проволки

    rdfs:label "Нарезка проволки" ;

    rdf:type :Process ;

    :hasParent :Изготовление_скрепки .

rdfs:label оправляет название процесса (подпроцесса), rdf:type – тип объекта (все VAD-кораблики это процессы, Function), предикат :hasParent определяет родительский элемент.

Приложение 2. RDF (turtle) процесса «Изготовление скрепки», построенный по схеме VAD

@prefix : <http://example.org/> .

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:Изготовление_скрепки

    rdf:type :Process ;

    rdfs:label "Изготовление скрепки" ;

    :hasDia :VADscheme_Изготовление_скрепки .

:VADscheme_Изготовление_скрепки rdf:type :Diagram .

 

:Закупка_материалов :hasNext :Нарезка_проволки .

:Нарезка_проволки :hasNext :Сгибание_проволки .

:Сгибание_проволки :hasNext :Фасовка_изделий .

:Фасовка_изделий :hasNext :Складское_хранение .

 

:Закупка_материалов

    rdfs:label "Закупка материалов" ;

    rdf:type :Process ;

    :isBegin :VADscheme_Изготовление_скрепки .

 

:Нарезка_проволки

    rdfs:label "Нарезка проволки" ;

    rdf:type :Process ;

    :hasParent :Изготовление_скрепки .

 

:Фасовка_изделий

    rdfs:label "Фасовка изделий" ;

    rdf:type :Process ;

    :hasParent :Изготовление_скрепки .

 

:Сгибание_проволки

    rdfs:label " Сгибание проволки" ;

    rdf:type :Process ;

    :isExt :Изготовление_скрепки .

Некоторые ссылки:

[semBPM24] Semantic BPM. Семантика и синтаксис бизнес-процессов

[SmartDesign24] ВРМ. Смарт-инструменты «Таблица -> Схема» для формализации бизнес-процессов. Рестайлинг ARIS SmartDesign

[ARISMR17] ARIS Method Reference Version 10.0 - Service Release 3  December 2017

[easyEA23] Простая Enterprise Architecture. Архитектура компании садоводов

[i4go] I40GO: Industry 4.0 Global Ontology. File: variant-domain/manufacturingprocess/1.0/manufacture.owl

https://innoweb.mondragon.edu/ontologies/i4go

Среда Описания Ресурса (RDF): Понятия и Абстрактный Синтаксис

RDF 1.1 Turtle

Как представлять библиографические данные в RDF

[Логика54] С.Н. Виноградов А.Ф. Кузьмин 1954 год Логика Аудиокнига.

visioOntoVAD.vsdm visioOntoVAD2.vsdm (vad diargam to rdf)

github.com/bpmbpm/vadtordf

Комментарии (7)


  1. Surrogate
    11.07.2024 15:11
    +1

    Далее открываем Visual Basic Editor (Alt F11, Ctrl G) и окно Immediate (Debug.Print). При копировании русскоязычного текста из окна Immediate нужно включать русскую раскладку клавиатуры.

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

    ------

    На сайте RDF Grapher есть описание

    Usage:

    http://www.ldf.fi/service/rdf-grapher?rdf=DATA_OR_URI&from=FORMAT&to=FORMAT

    где DATA_OR_URI - это твой триплет;

    from=FORMAT- данные на основе которых строится граф, а данном случае from=ttl;

    to=FORMAT - формат в который экспортируется граф.

    При всавке триплета строится граф, у которого

    ссылка выглядит следующим образом

    https://www.ldf.fi/service/rdf-grapher?rdf=%40prefix+%3A+%3Chttps%3A%2F%2Fbpm%2Fprocess%2Fvad.ttl%23%3E+.%0D%0A%40prefix+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E+.%0D%0A%40prefix+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E+.%0D%0A%3AMaking_a_paper_clip%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++rdfs%3Alabel+%22Making+a+paper+clip%22+%3B%0D%0A++++%3AhasDia+%3AVADscheme_Making_a_paper_clip+.%0D%0A%3AVADscheme_Making_a_paper_clip+rdf%3Atype+%3ADiagram+.%0D%0A%0D%0A%3ABuy_wire+%3AhasNext+%3ACut_the_wire+.%0D%0A%3ACut_the_wire+%3AhasNext+%3ABend_the_wire+.%0D%0A%3ABend_the_wire+%3AhasNext+%3APack_paper_clips+.%0D%0A%3APack_paper_clips+%3AhasNext+%3AProduct_storage+.%0D%0A%0D%0A%3ABuy_wire%0D%0A++++rdfs%3Alabel+%22Buy+wire%22+%3B%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++%3AisBegin+%3AVADscheme_Making_a_paper_clip+.%0D%0A%0D%0A%3ACut_the_wire%0D%0A++++rdfs%3Alabel+%22Cut+the+wire%22+%3B%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++%3AhasParent+%3AMaking_a_paper_clip+.%0D%0A%0D%0A%3APack_paper_clips%0D%0A++++rdfs%3Alabel+%22Pack+paper+clips%22+%3B%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++%3AhasParent+%3AMaking_a_paper_clip+.%0D%0A%0D%0A%3ABend_the_wire%0D%0A++++rdfs%3Alabel+%22Bend+the+wire%22+%3B%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++%3AisExt+%3AMaking_a_paper_clip+.%0D%0A%0D%0A%3AProduct_storage%0D%0A++++rdfs%3Alabel+%22Product+storage%22+%3B%0D%0A++++rdf%3Atype+%3AProcess+%3B%0D%0A++++%3AisEnd+%3AVADscheme_Making_a_paper_clip+.%0D%0A&from=ttl&to=svg

    Можно заметить, что твои триплет записан в одну строку. И ряд символов заменен

    ' https://www.degraeve.com/reference/urlencoding.php
        %40     - @ 
        %3A     - : 
        %3B     - ; 
        %0D%0A  - chr(13) 
        %22     - " 
        %23     - # 
        %3C     - > 
        %3E     - < 
        %2F     - / 
        %3F     - ?

    При попытке программно сгенерировать граф вылезает ошибка

    Error in RDF parsing.

    Error on line 38 - syntax error at 'f'

    Проблема с символами < и >


    1. itGuevara Автор
      11.07.2024 15:11
      +1

      from и to можно не использовать - по умолчанию подходят. А скобки наверное экранировать нужно, хотя вроде и не ругается:

      https://www.ldf.fi/service/rdf-grapher?rdf=@prefix+ex:+<http://example.com/>+. @prefix+ex1:+<http://example11.com/>+.

      Для демонстрации идеи это не принципиально, но из visio (drawio) вызывать визуализацию графа - было бы неплохо.


      1. Surrogate
        11.07.2024 15:11

         из visio (drawio) вызывать визуализацию графа - было бы неплохо.

        из Visio можно программно запустить браузер и открыть на странице визуализации графа

        ' в конце процедуры добавить строки:
        ' urla - путь к сайту визуализации графа с содержимым триплета
        urla = "chrome:http://www.ldf.fi/service/rdf-grapher?rdf=" & ss & "from=ttl&to=svg"
        ' инициализация объекта Shell
        Set obj = CreateObject("Shell.Application")
        ' открытие браузера на странице визуализатора графа с переданным триплетом
        obj.ShellExecute urla


        1. Surrogate
          11.07.2024 15:11

          из visio (drawio) вызывать визуализацию графа - было бы неплохо

          так ты все таки уже переходишь на draw.io? насколько удобно сидеть на двух стульях инструментах :)


          1. itGuevara Автор
            11.07.2024 15:11

            Visio - намного мощнее штука, там почти все есть и на ней делают мощные BPMS системы, например, BPM-X и бизнес-студия. Плюс - можно скачать официальный дистрибутив (visio 2010, 2016 другие не пробовал) и он будет работать, лишь при первом старте выдавая предупреждение о необходимости лицензии. Основная проблема - это web (SharePoint не рассматриваю).

            draw.io - тоже имеет много плюсов (но до visio еще далеко, да и BPMS на базе drawio не встречал), например, кроме Open source, в отличие от visio понятный файл XML, который прямо в VSCode (через плагин) показывает двухстороннюю связку в реальном времени.

            Хотелось бы на обоих платформах сделать первый макет Semantic BPM для верхнеуровневых процессов, тем самым показав универсальный механизм использования формата RDF для хранения данных модели процесса (обе BPM - системы смогут взаимодействовать через него).


  1. Surrogate
    11.07.2024 15:11

    Tumanov очень давно на тему "кавычек" и других спец-символов писал:

    Но сейчас мы живем не с типографиями, а с интернетом и связанными с ним технологиями. А там любое извращение обязательно когда-нибудь выходит боком.Когда-нибудь вы подсунете пользователю текст, в котором "русские" кавычки превратятся в нечитаемый символ. Или в базе не сравнятся две строки, которые вроде бы обязательно должны были сравниться.

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

    При копировании пути из визуализатора графа с последующей вставкой в разные приложения были нюансы. Без искажений текст ссылки вставлялся только в Notepad.exe


    1. itGuevara Автор
      11.07.2024 15:11
      +1

      Кавычки тоже через автозамену сработали. Вызов из visio визуализации графа см. Файл visioOntoVAD2.vsdm