Упрощенная инфраструктура для трансформации XML-моделей
Запропоновано варіант полегшеної інфраструктури для моделе-орієнтованої розробки великих програмних систем. Основою є первинне представлення моделі у вигляді предметно-залежного XML-формату. Модель має максимально компактне уявлення, дозволяє застосовувати розвинені засоби зміни та розширення, легко...
Saved in:
| Published in: | Кибернетика и системный анализ |
|---|---|
| Date: | 2010 |
| Main Authors: | , |
| Format: | Article |
| Language: | Russian |
| Published: |
Інститут кібернетики ім. В.М. Глушкова НАН України
2010
|
| Subjects: | |
| Online Access: | https://nasplib.isofts.kiev.ua/handle/123456789/45130 |
| Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
| Journal Title: | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| Cite this: | Упрощенная инфраструктура для трансформации XML-моделей / Н.Н. Глибовец, В.М. Федорченко // Кибернетика и системный анализ. — 2010. — № 1. — С. 105–110. — Бібліогр.: 13 назв. — рос. |
Institution
Digital Library of Periodicals of National Academy of Sciences of Ukraine| _version_ | 1860254229529100288 |
|---|---|
| author | Глибовец, Н.Н. Федорченко, В.М. |
| author_facet | Глибовец, Н.Н. Федорченко, В.М. |
| citation_txt | Упрощенная инфраструктура для трансформации XML-моделей / Н.Н. Глибовец, В.М. Федорченко // Кибернетика и системный анализ. — 2010. — № 1. — С. 105–110. — Бібліогр.: 13 назв. — рос. |
| collection | DSpace DC |
| container_title | Кибернетика и системный анализ |
| description | Запропоновано варіант полегшеної інфраструктури для моделе-орієнтованої розробки великих програмних систем. Основою є первинне представлення моделі у вигляді предметно-залежного XML-формату. Модель має максимально компактне уявлення, дозволяє застосовувати розвинені засоби зміни та розширення, легко визначати трансформації для перетворення створених предметно-залежних моделей в будь-які інші моделі. Використання XSL для опису трансформацій дозволяє ефективно організовувати як вертикальні трансформації з довільною кількістю шарів абстракції, так і горизонтальні.
An approach is proposed to the construction of a lightweight infrastructure for the model-oriented development of complex software systems. It is based on the use of a domain-dependent XML format for primary models. A model has a compact representation, allows for the use of advanced tools for changing and extending it, and makes it possible to easily determine transformations for converting domain-dependent XML models into any other models. The use of XSL for describing transformations allows one to organize both vertical and horizontal transformations (with any number of abstraction layers) and provides optimum conditions for collaboration.
|
| first_indexed | 2025-12-07T18:46:56Z |
| format | Article |
| fulltext |
ÓÄÊ 004.4’242
Í.Í. ÃËÈÁÎÂÅÖ, Â.Ì. ÔÅÄÎÐ×ÅÍÊÎ
ÓÏÐÎÙÅÍÍÀß ÈÍÔÐÀÑÒÐÓÊÒÓÐÀ
ÄËß ÒÐÀÍÑÔÎÐÌÀÖÈÈ XML-ÌÎÄÅËÅÉ
Êëþ÷åâûå ñëîâà: ìîäåëå-îðèåíòèðîâàííàÿ ðàçðàáîòêà, ïðåäìåòíî-çàâèñèìàÿ
ìîäåëü, òðàíñôîðìàöèÿ ìîäåëåé, IoC-êîíòåéíåð.
ÂÂÅÄÅÍÈÅ
Ïðîãðàììèðîâàíèå, êàê ñïîñîá ôîðìàëèçàöèè îïèñàíèÿ ðàçíîîáðàçíûõ ïðîöåñ-
ñîâ, çàâèñèò îò êîíêðåòíûõ òåõíè÷åñêèõ îãðàíè÷åíèé è èíôðàñòðóêòóðû, â ðàì-
êàõ êîòîðîé ýòà ôîðìàëèçàöèÿ ïðîâîäèòñÿ. Áëàãîäàðÿ ïðîãðåññó â ýòîé îáëàñòè
ïðèîðèòåò â ïðîãðàììèðîâàíèè äëÿ ìíîãèõ òèïîâ çàäà÷ ñìåñòèëñÿ c ìàêñèìàëü-
íî ýôôåêòèâíîãî (â êîíòåêñòå èñïîëüçóåìûõ òåõíè÷åñêèõ ðåñóðñîâ) êîäèðîâàíèÿ
íà ìàêñèìàëüíî áûñòðóþ (â êîíòåêñòå ÷åëîâå÷åñêèõ ðåñóðñîâ) è îäíîâðåìåííî
êà÷åñòâåííóþ (quality) ðàçðàáîòêó [1–4].
ÌÎÄÅËÅ-ÎÐÈÅÍÒÈÐÎÂÀÍÍÀß ÐÀÇÐÀÁÎÒÊÀ
Êëþ÷åâûå êîíöåïöèè MDD (Model Driven Development) — ïðåäìåòíî-çàâèñè-
ìûé ÿçûê ìîäåëèðîâàíèÿ è òðàíñôîðìàöèÿ ìîäåëåé [5, 6]. Â êîíòåêñòå MDD
ìîäåëü ïðåäñòàâëÿåò àáñòðàêöèþ ïðîãðàììíîé ñèñòåìû èëè/è îêðóæåíèÿ íàä åå
ïðîãðàììíîé ðåàëèçàöèåé. Òàê, ñîãëàñíî ýòîìó îïðåäåëåíèþ ïðîãðàììíûé êîä
òàêæå ïðåäñòàâëÿåò ìîäåëü, ïîñêîëüêó ÿâëÿåòñÿ àáñòðàêöèåé íàä ìàøèííûì êî-
äîì, ãåíåðèðóåìûì êîìïèëÿòîðîì. Ìåòàìîäåëü (metamodel) îïèñûâàåò ñèíòàê-
ñèñ è ñåìàíòèêó DSM-ÿçûêà ÷åðåç îïðåäåëåíèå ïîíÿòèé è èõ îòíîøåíèé â êîí-
êðåòíîé ïðåäìåòíîé îáëàñòè (ïðîöåññ ñîçäàíèÿ DSML íàçûâàþò
ìåòàìîäåëèðîâàíèåì).
Òðàíñôîðìàöèÿ ìîäåëåé (Model Transformations) èãðàåò êëþ÷åâóþ ðîëü â MDD
è îòâå÷àåò çà ïðåîáðàçîâàíèå ìîäåëåé, îïðåäåëåííûõ ñ ïîìîùüþ DSML, â äðóãèå
ïðîãðàììíûå àðòåôàêòû è ôîðìû ïðåäñòàâëåíèÿ. Íàïðèìåð, ìîäåëü ìîæåò áûòü
òðàíñôîðìèðîâàíà â êîìáèíàöèþ èñõîäíûõ òåêñòîâ, ðåñóðñîâ è XML-êîíôèãóðàöèé
(ïîñêîëüêó â êîíòåêñòå MDA (Model Driven Architecture) ïðîãðàììà â ëþáîé ôîðìå
ÿâëÿåòñÿ ñîáñòâåííî ìîäåëüþ). Êîíñîðöèóì OMG (Object Management Group) ïðåä-
ëîæèë ñîáñòâåííûé âàðèàíò òàêîé òåõíîëîãèè ïîä íàçâàíèåì ìîäåëå-îðèåíòèðî-
âàííàÿ àðõèòåêòóðà (MDA) â âèäå ðÿäà ñïåöèôèêàöèé è ñòàíäàðòîâ [7].
Ñóùåñòâóþùèå ïîäõîäû ê òðàíñôîðìàöèè âõîäíîé ìîäåëè óñëîâíî ðàçäåëÿþò
íà òå, êîòîðûå ãåíåðèðóþò èñõîäíóþ ìîäåëü â âèäå òåêñòà (îáû÷íî ýòî òåêñò ïðîãðàì-
ìû íà îïðåäåëåííîì ÿçûêå ïðîãðàììèðîâàíèÿ îáùåãî íàçíà÷åíèÿ, íàïðèìåð Java,
C++), è òå, êîòîðûå ãåíåðèðóþò èñõîäíóþ ìîäåëü â áîëåå ñòðóêòóðèðîâàííîì âèäå
(íàïðèìåð, XML), êîòîðàÿ îòâå÷àåò íåêîòîðîé ìåòàìîäåëè. Ïîñêîëüêó ïðîãðàììíûé
êîä ÿâëÿåòñÿ òàêæå ìîäåëüþ, òî ïîäõîäû îòëè÷àþòñÿ ëèøü ñïîñîáîì èñïîëüçîâàíèÿ
èñõîäíîé ìåòàìîäåëè.  ñëó÷àå, êîãäà ãåíåðèðóåòñÿ òåêñò, òðàíñôîðìàòîðó íå îáÿçà-
òåëüíî îïåðèðîâàòü ñòðóêòóðîé ìåòàìîäåëè ÿçûêà ïðîãðàììèðîâàíèÿ (ïîáî÷íûì ýô-
ôåêòîì òàêîãî óïðîùåíèÿ ÿâëÿåòñÿ âåðîÿòíîñòü ãåíåðàöèè íåêîððåêòíîãî êîäà).
Äîñòàòî÷íî ðàñïðîñòðàíåíà ïðàêòèêà îïðåäåëåíèÿ òðàíñôîðìàòîðîâ, êîòîðûå
áàçèðóþòñÿ íà ñî÷åòàíèè íåñêîëüêèõ ïîäõîäîâ. Òèïè÷íûì ïðèìåðîì ÿâëÿåòñÿ
ñòàíäàðò QVT, íà îñíîâå êîòîðîãî ìîæíî îïðåäåëÿòü òðàíñôîðìàöèè â MDA [7].
Äðóãèì îáùåäîñòóïíûì è ìîùíûì òðàíñôîðìàòîðîì ÿâëÿåòñÿ ðåàëèçàöèÿ ñòàí-
äàðòà XSLT, ïîñêîëüêó ëþáàÿ ìîäåëü ìîæåò áûòü ïðåäñòàâëåíà â âèäå XML ñ ïî-
ìîùüþ ôîðìàòà XMI (XML Metadata Interchange [8]). Îäíàêî ïðè ýòîì èìååòñÿ ñó-
ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1 105
© Í.Í. Ãëèáîâåö, Â.Ì. Ôåäîð÷åíêî, 2010
ùåñòâåííûé íåäîñòàòîê: ôîðìàò XMI äîñòàòî÷íî ãðîìîçäîê (äëÿ ðàçðàáîò÷èêà
òðàíñôîðìàöèè), ÷òî ïðèâîäèò ê ñîçäàíèþ ñëîæíûõ äëÿ ðàçðàáîòêè è ïîääåðæêè
XSL-ïðàâèë.
Äëÿ óñïåøíîãî âíåäðåíèÿ MDD ïðè ðàçðàáîòêå ïðîãðàììíûõ ïðîäóêòîâ íåîá-
õîäèìà èíôðàñòðóêòóðà, êîòîðàÿ ïîääåðæèâàåò ìîäåëå-îðèåíòèðîâàííóþ ðàçðàáîòêó
è äîëæíà óäîâëåòâîðÿòü ñëåäóþùèì òðåáîâàíèÿì: âîçìîæíîñòü ãèáêîãî ìàíèïóëè-
ðîâàíèÿ ïàðàìåòðàìè æèçíåííîãî öèêëà, îïðåäåëåíèå è ðàñøèðåíèå ìîäåëåé ïî íå-
îáõîäèìîñòè (by demand), âîçìîæíîñòü îäíîâðåìåííîãî èñïîëüçîâàíèÿ ìîäåëåé ðàç-
íîãî óðîâíÿ àáñòðàêöèè, èíòåãðàöèÿ ñ óæå ñóùåñòâóþùèìè ïðîãðàììíûìè ñèñòåìà-
ìè, ìèíèìèçàöèÿ ðàñõîäîâ íà èíòåãðàöèþ è ïîääåðæêó èíôðàñòðóêòóðû äëÿ MDD.
ÓÏÐÎÙÅÍÍÀß ÈÍÔÐÀÑÒÐÓÊÒÓÐÀ
Ðàññìîòðèì âàðèàíò òàêîé óïðîùåííîé èíôðàñòðóêòóðû äëÿ ìîäåëå-îðèåíòèðî-
âàííîé ðàçðàáîòêè, êîòîðàÿ óäîâëåòâîðÿåò îïèñàííûì âûøå òðåáîâàíèÿì. Ñóòü
çàêëþ÷àåòñÿ â âîçâðàùåíèè ê ïåðâè÷íîìó ïðåäñòàâëåíèþ ìîäåëè â âèäå ïðåä-
ìåòíî-çàâèñèìîãî XML-ôîðìàòà, êîòîðûé ïîçâîëèò èçáàâèòüñÿ îò íåäîñòàòêîâ
âàðèàíòà XMI+XSL. Ìîäåëü áóäåò èìåòü ìàêñèìàëüíî êîìïàêòíîå ïðåäñòàâëå-
íèå, ïðè ýòîì ÷òåíèå è èçìåíåíèå ìîäåëè ïðîãðàììèñòàìè âîçìîæíî áåç èñ-
ïîëüçîâàíèÿ êàêèõ-ëèáî ñïåöèàëèçèðîâàííûõ èíñòðóìåíòîâ (ðåäàêòîðîâ, âèçóà-
ëèçàòîðîâ). Ýòî ñâîéñòâî ïðèîáðåòàåò ïåðâîî÷åðåäíîå çíà÷åíèå â ñëó÷àÿõ, êîãäà
â ïðåäìåòíî-çàâèñèìóþ ìåòàìîäåëü âíîñÿòñÿ èçìåíåíèÿ â ïðîöåññå ðàçðàáîòêè.
Ïðè ýòîì ñîõðàíÿåòñÿ âîçìîæíîñòü áûñòðî èçìåíÿòü è ðàñøèðÿòü ìåòàìîäåëü,
à â ñëó÷àå ñòàáèëèçàöèè ïðåäìåòíî-çàâèñèìîé ìåòàìîäåëè — îïðåäåëÿòü òðàíñ-
ôîðìàöèè äëÿ ñîçäàííûõ ïðåäìåòíî-çàâèñèìûõ ìîäåëåé â ëþáûå äðóãèå (ñòàí-
äàðòèçèðîâàííûå) ìîäåëè (íàïðèìåð, UML).
Íà ïðàêòèêå äîïóñòèìî ñâåñòè îïðåäåëåíèå ìåòàìîäåëè ê ñîçäàíèþ XML-ñõå-
ìû (XSD) ïðåäìåòíî-çàâèñèìîé ìîäåëè. Ýòîò ÿçûê õîðîøî èçâåñòåí ïðîãðàììè-
ñòàì è èìååò èíñòðóìåíòàëüíóþ ïîääåðæêó â ëþáîé ñîâðåìåííîé ïëàòôîðìå. Ïðè
ýòîì ìîæíî îáåñïå÷èòü ïðèåìëåìûé íà ïðàêòèêå óðîâåíü âàëèäàöèè ìîäåëåé ñ ìè-
íèìàëüíûìè ðàñõîäàìè âðåìåíè íà ðàñøèðåíèå ìåòàìîäåëè. Åñòåñòâåííî, XSD
èìååò äîñòàòî÷íî îãðàíè÷åííûå âîçìîæíîñòè äëÿ îïèñàíèÿ ìåòàìîäåëè, íî â ñëó-
÷àå ìàêñèìàëüíî óïðîùåííîé èíôðàñòðóêòóðû ýòîò âàðèàíò ÿâëÿåòñÿ ïðèåìëåìûì
êîìïðîìèññîì, ïîñêîëüêó ïðè íåîáõîäèìîñòè åñòü âîçìîæíîñòü äîáàâëÿòü ñîá-
ñòâåííûå ìåòàäàííûå ê XML-ñõåìå. Åñëè è ýòîãî áóäåò íåäîñòàòî÷íî, äîïîëíèòü
ìåòàìîäåëè ìîæíî ñ ïîìîùüþ ñòàíäàðòà MOF (MetaObject Facility [7]), ïîñêîëüêó
ýòà ñïåöèôèêàöèÿ äîïóñêàåò îïðåäåëåíèå ëþáîé ìåòàìîäåëè.
 äàííîì ñëó÷àå èñïîëüçîâàíèå XSL äëÿ îïèñàíèÿ òðàíñôîðìàöèé ïðåäñòàâëÿ-
åòñÿ íàèáîëåå ïðèåìëåìûì âàðèàíòîì, ïîñêîëüêó ýòîò ÿçûê ÿâëÿåòñÿ ìîùíûì
èíñòðóìåíòîì (ñîäåðæèò òüþðèíã-ïîëíûé íàáîð ôóíêöèé), îñîáåííî êîãäà âûõîä-
íàÿ ìîäåëü òàêæå ìîæåò áûòü ïðåäñòàâëåíà â ôîðìàòå XML. Ýòî ïîçâîëèò îðãàíèçî-
âûâàòü êàê âåðòèêàëüíûå òðàíñôîðìàöèè ñ ïðîèçâîëüíûì êîëè÷åñòâîì ñëîåâ
àáñòðàêöèè, òàê è ãîðèçîíòàëüíûå. Øèðîêàÿ ðàñïðîñòðàíåííîñòü è îáùåèçâåñòíîñòü
òàêîãî ÿçûêà ñîçäàåò íåîáõîäèìûå óñëîâèÿ äëÿ êîìàíäíîé ðàáîòû, êîãäà îïðåäåëå-
íèå ìåòàìîäåëè è îäíîâðåìåííîå ñîçäàíèå ìîäåëåé íà îñíîâå ýòîé ìåòàìîäåëè âû-
ïîëíÿåòñÿ îäíîé ãðóïïîé ðàçðàáîò÷èêîâ. Ýòîò ôàêòîð ÷ðåçâû÷àéíî âàæåí äëÿ ñîâðå-
ìåííîãî ïðîöåññà ðàçðàáîòêè, êîãäà íåîáõîäèìî îáåñïå÷èòü ìèíèìàëüíûé ïðîìåæó-
òîê âðåìåíè ìåæäó íà÷àëîì ðàçðàáîòêè è ïåðâûìè ðåçóëüòàòàìè.
Ïîñëåäíèì ýòàïîì â ôîðìèðîâàíèè óïðîùåííîé èíôðàñòðóêòóðû äëÿ ìîäåëå-îðè-
åíòèðîâàííîé ðàçðàáîòêè ÿâëÿåòñÿ îïðåäåëåíèå ôîðìàòà ìîäåëè ñàìîãî íèçêîãî óðîâíÿ,
äîñòóïíîãî â ðàìêàõ èñïîëüçóåìîé èíôðàñòðóêòóðû. Êàê îòìå÷åíî âûøå, öåëåñîîáðàç-
íî, ÷òîáû ýòà ìîäåëü èìåëà åñòåñòâåííîå ïðåäñòàâëåíèå â ôîðìàòå XML, ïðè ýòîì áûëà
äîñòàòî÷íî ïðîñòîé äëÿ òðèâèàëüíîãî ïðåîáðàçîâàíèÿ â ìàøèííûé êîä è îäíîâðåìåííî
äîñòàòî÷íî óäîáíîé äëÿ âûðàæåíèÿ êîíöåïöèé èç ìîäåëåé áîëåå âûñîêèõ óðîâíåé
àáñòðàêöèè (õîòÿ ýòè äâà óñëîâèÿ ÿâëÿþòñÿ íåñêîëüêî ïðîòèâîðå÷èâûìè).
106 ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1
 ïîñëåäíèå ãîäû øèðîêî èñïîëüçóþòñÿ IoC-êîíòåéíåðû, êîíôèãóðàöèÿ êîòî-
ðûõ îáû÷íî èìååò XML-ïðåäñòàâëåíèå (SpringFramework [9], Winter.NET [10]).
IoC-êîíòåéíåðû ÿâëÿþòñÿ ðåàëèçàöèåé ïàòòåðíà ïðîãðàììèðîâàíèÿ «èíâåðñèÿ
óïðàâëåíèÿ» (inversion of control), òàêæå èçâåñòíîãî ïîä íàçâàíèåì «èíñòàíöèàöèÿ
çàâèñèìîñòåé» (dependency injection), êîòîðûé ñòàë îñîáåííî ïîïóëÿðíûì ïîñëå
ñòàòüè Ìàðòèíà Ôàóëåðà [11]. Ñóòü ýòîãî ïàòòåðíà çàêëþ÷àåòñÿ â àáñòðàãèðîâàíèè
ñîçäàíèÿ è èíèöèàëèçàöèè îäíèõ îáúåêòîâ äðóãèìè ïóòåì äåëåãèðîâàíèÿ îïðåäå-
ëåííûõ äåéñòâèé îñîáûì òèïàì îáúåêòîâ (IoC-êîíòåéíåðàì). Ïðè ýòîì âñå äðóãèå
îáúåêòû ëèøü äåêëàðèðóþò ìèíèìàëüíî íåîáõîäèìûå äëÿ ôóíêöèîíèðîâàíèÿ çà-
âèñèìîñòè (÷åðåç èíòåðôåéñû). Ñîçäàíèå ãðàôà îáúåêòîâ è ñîîòâåòñòâåííî îïðåäå-
ëåíèå çàâèñèìîñòåé â âèäå êîíêðåòíûõ ýêçåìïëÿðîâ îáúåêòîâ, êîòîðûå ðåàëèçóþò
íóæíûå èíòåðôåéñû, ïîëàãàåòñÿ òàêæå íà IoC-êîíòåéíåð. Â êîíòåêñòå MDD ýòà
ñïåöèôèêà äàåò óíèêàëüíóþ âîçìîæíîñòü óäîâëåòâîðèòü îáà óñëîâèÿ äëÿ ìîäåëè
ñàìîãî íèçêîãî óðîâíÿ, ïîñêîëüêó ñïîñîá ñâÿçûâàíèÿ îáúåêòîâ ÿâëÿåòñÿ
ôèêñèðîâàííûì (è ÷ðåçâû÷àéíî ïðîñòûì), à ñàìè îáúåêòû ìîãóò ðåàëèçîâûâàòü
äîñòàòî÷íî ñëîæíûå êîíöåïòû. Ñîçäàíèå òàêîãî ãðàôà ïî XML-êîíôèãóðàöèè
ÿâëÿåòñÿ äîñòàòî÷íî áûñòðîé è òðèâèàëüíîé çàäà÷åé [9, 10].
 òåðìèíàõ MDA IoC-êîíôèãóðàöèÿ — ýòî ìîäåëü PSM (Platform Specific
Model), çàâèñèìàÿ îò ïëàòôîðìû ñàìîãî íèçêîãî óðîâíÿ (ïîñêîëüêó âêëþ÷àåò ññûë-
êè íà êëàññû è ñâîéñòâà âïîëíå êîíêðåòíîé ïëàòôîðìû), à ïðåäìåòíî-çàâèñèìûå
XML-ìîäåëè, åñëè îíè íå èìåþò ïðèâÿçêè ê îñîáåííîñòÿì ïëàòôîðìû, îòíîñÿòñÿ ê
PIM. Åñòåñòâåííî, ýòî äîñòàòî÷íî óñëîâíîå äåëåíèå.  ïðåäëîæåííîì âàðèàíòå èí-
ôðàñòðóêòóðû èìååòñÿ âîçìîæíîñòü ðåãóëèðîâàòü ñòåïåíü àáñòðàêöèè PSM â çàâèñè-
ìîñòè îò êîíêðåòíîé ñèòóàöèè.
ÏÐÈÌÅÐ ÑÎÇÄÀÍÈß ÓÏÐÎÙÅÍÍÎÉ MDD ÈÍÔÐÀÑÒÐÓÊÒÓÐÛ
Äëÿ èëëþñòðàöèè îïèñàííîãî ïîäõîäà ðàññìîòðèì ñîçäàíèå óïðîùåííîé MDD èí-
ôðàñòðóêòóðû äëÿ òðàíñôîðìàöèè ìîäåëåé â ñôåðå àâòîìàòèçàöèè áèçíåñ-ïðîöåññîâ.
Îïðåäåëåíèå áàçîâûõ ïîíÿòèé äëÿ òàêîé ìîäåëè ìîæíî ïîçàèìñòâîâàòü èç
ìíîãî÷èñëåííûõ âàðèàíòîâ êîðïîðàòèâíûõ îíòîëîãèé (enterprise ontology), íàïðè-
ìåð CEO (Core Enterprise Ontology [12]), êàê îäíîé èç ñàìûõ ïðîñòûõ. Â ðåçóëüòàòå
òðàíñôîðìàöèè ïîëó÷èì êîíôèãóðàöèþ Winter IoC-êîíòåéíåðà [10] äëÿ
ïðèìåíåíèÿ íà ïëàòôîðìå Microsoft .NET.
CEO ïðåäíàçà÷åíà äëÿ îïèñàíèÿ áèçíåñ-ïðîöåññîâ è ìîäåëèðîâàíèÿ â âèäå èí-
ôîðìàöèîííîé ñèñòåìû (ÈÑ). Â óïðîùåííîì âèäå (ìèíèìàëüíî íåîáõîäèìîì äëÿ ïî-
ñòðîåíèÿ ìåòàìîäåëè) ýòà îíòîëîãèÿ ñîñòîèò èç òàêèõ áàçîâûõ ïîíÿòèé [12].
• Ïàññèâíûå ñóùíîñòè (passive entity) — ïðåäñòàâëÿþò áèçíåñ-îáúåêòû, ïàññèâ-
íûå ýëåìåíòû êîðïîðàòèâíîé ñðåäû, êîòîðûå ñîçäàþòñÿ, èçìåíÿþòñÿ, ïåðåñìàòðèâà-
þòñÿ ñ öåëüþ ïîëó÷åíèÿ êàêîé-òî èíôîðìàöèè. Âàæíûì ñâîéñòâîì ïàññèâíûõ ñóù-
íîñòåé ÿâëÿåòñÿ èäåíòèôèöèðóåìîñòü, ÷òî ÿâëÿåòñÿ íåîáõîäèìûì óñëîâèåì äëÿ âêëþ-
÷åíèÿ ïàññèâíûõ ñóùíîñòåé ê îïðåäåëåíèþ ñõåìû äàííûõ èíôîðìàöèîííîé ñèñòåìû.
• Àêòèâíûå ñóùíîñòè (active entity) — ýòî àêòèâíûå ýëåìåíòû èç êîðïîðàòèâ-
íîé ñðåäû, êîòîðûå èìåþò âîçìîæíîñòü ïðèíèìàòü ðåøåíèÿ è èíèöèèðîâàòü
îïðåäåëåííûå äåéñòâèÿ. Èìè ìîãóò áûòü êàê ëþäè, òàê è îðãàíèçàöèè (îôèñ, äå-
ïàðòàìåíò, îòäåë). Èìåííî ïî îòíîøåíèþ ê àêòèâíûì ñóùíîñòÿì îïðåäåëÿþòñÿ
îáÿçàííîñòè, ïðàâà äîñòóïà è ò.ä.
• Òðàíñôîðìàöèè (transformation) — ýòî ëþáûå äåéñòâèÿ, îïåðàöèè è ïðîöåñ-
ñû, êîòîðûå ñóùåñòâóþò â êîðïîðàòèâíîé ñðåäå è èìåþò îòîáðàæåíèå â ÈÑ. Îáû÷-
íî â òðàíñôîðìàöèÿõ ïðèíèìàþò ó÷àñòèå êàê ïàññèâíûå, òàê è àêòèâíûå ñóùíîñòè.
• Óñëîâèÿ — ýòî ïðåäèêàòû, êîòîðûå ìîãóò áûòü âû÷èñëåíû ñ öåëüþ îïðåäå-
ëåíèÿ èõ èñòèííîñòè. Íà ýòîì áàçîâîì êîíöåïòå îñíîâàíû òàêèå ïîíÿòèÿ, êàê öåëü,
ïðàâèëî, îãðàíè÷åíèå, ñîñòîÿíèå.
Äåòàëüíûé àíàëèç CEO âûõîäèò çà ðàìêè äàííîé ñòàòüè. Ìåòàìîäåëü íà îñíî-
âå ýòèõ ïîíÿòèé ïîçâîëÿåò îïèñûâàòü ðàçíîîáðàçíûå áèçíåñ-ïðîöåññû. Îòìåòèì,
ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1 107
÷òî äàæå ñàìîå ïðîñòîå îïèñàíèå òàêèõ ïîíÿòèé äîñòàòî÷íî îáúåìíî, ïîýòîìó äëÿ
èëëþñòðàöèè óïðîùåííîãî ïîäõîäà ê òðàíñôîðìàöèè ìîäåëåé â äåòàëÿõ ðàññìîò-
ðèì ëèøü îïðåäåëåíèå ïîíÿòèÿ «ñóùíîñòü».
Îïèøåì ìåòàìîäåëü, êîòîðàÿ â ðàìêàõ óïðîùåííîé èíôðàñòðóêòðû ïðåäñòàâ-
ëÿåòñÿ â âèäå XML-ñõåìû:
<xsd:element name="entity">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="storage">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="sourcename" type="xsd:string" minOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="versions" type="xsd:boolean" use="optional"
default="false" />
</xsd:complexType>
</xsd:element>
<xsd:element name="schema">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="field" minOccurs="1">
<xsd:complexType>
<xsd:attribute name="uid" type="xsd:boolean" use="optional"
default="false" />
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="type" type="xsd:string" use="required"/>
<xsd:attribute name="nullable" type="xsd:boolean" use="optional"
default="false" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
Íà îñíîâå ýòîé ìåòàìîäåëè ìîäåëü íåêîé ñóùíîñòè, íàïðèìåð «çàêàç», áóäåò
èìåòü òàêîé âèä:
<entity name="purchaseOrder">
<storage versions="true">
<sourcename>purchase_orders</sourcename>
</storage>
<schema>
<field uid="true" name="id" type="int"/>
<field name="contact_id" type="int"/>
<field name="sum" type="decimal"/>
<field name="delta" type="decimal"/>
<field name="expired_date" type="dateTime" nullable="true"/>
</schema>
</entity>
Òàêèì îáðàçîì, èíôîðìàöèîííóþ ñèñòåìó ïîïîëíÿåò åùå îäíà ïàññèâíàÿ
ñóùíîñòü «purchaseOrder» ñ õàðàêòåðèñòèêàìè «id» (óíèêàëüíûé èäåíòèôèêàòîð),
«contact_id», «sum», «delta» è «expired_date». Ýòè õàðàêòåðèñòèêè äîëæíû ñîõðà-
íÿòüñÿ â õðàíèëèùå äàííûõ (íàïðèìåð, ÁÄ) ïîä èìåíåì «purchase_orders». Ýòà
ñóùíîñòü ïî îïðåäåëåíèþ äîëæíà òàêæå èìåòü âîçìîæíîñòü ñîõðàíÿòüñÿ, èçìå-
íÿòüñÿ è çàãðóæàòüñÿ èç õðàíèëèùà äàííûõ. Áîëåå òîãî, ìàðêèðîâêà versions=«true»
îáÿçûâàåò ÈÑ õðàíèòü âñå âåðñèè ýòîé ñóùíîñòè, êîòîðûå ñîõðàíÿëèñü â õðàíèëè-
ùå äàííûõ.
Äëÿ îïðåäåëåíèÿ òðàíñôîðìàöèè ýòîé ìîäåëè ê êîíôèãóðàöèè êîìïîíåíòîâ
IoC-êîíòåéíåðà íåîáõîäèìî èìåòü âîçìîæíîñòü ïðåäñòàâèòü êîíöåïò ïàññèâíîé
ñóùíîñòè ñ îïèñàííûì âûøå íàáîðîì ñâîéñòâ ñ ïîìîùüþ îäíîãî èëè êîìïîçèöèè
íåñêîëüêèõ îáúåêòîâ. Ïðåäïîëîæèì, ÷òî ñóùåñòâóåò íåêîòîðûé êëàññ, â êîòîðîì
â ñîîòâåòñòâèè ñ ïàòòåðíîì «àêòèâíàÿ çàïèñü» (Active Record [13]) ðåàëèçîâàíû
ñâîéñòâà õðàíåíèÿ, çàãðóçêè è èçìåíåíèÿ çàïèñè â õðàíèëèùå äàííûõ (C#):
108 ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1
public interface IActiveRecord {
string XmlSchema { get; set; }
string SourceName { get; set; }
bool VersionsEnabled { get; set; }
bool IsPersisted { get; }
object[] Uid {get; set;}
object this[string fieldName] { get; set; }
void Save();
void Load(object[] uid);
void Delete();
void Disconnect();
}
Äîïóñòèì òàêæå, ÷òî èìååòñÿ êëàññ DbActiveRecord (ðåàëèçóþùèé èíòåðôåéñ
IActiveRecord), äëÿ ôóíêöèîíèðîâàíèÿ êîòîðîãî íåîáõîäèìî èíèöèàëèçèðîâàòü
ñâîéñòâà XmlSchema, SourceName è VersionsEnabled, ïðè÷åì ñâîéñòâî XmlSchema
äîëæíî áûòü ïðåäñòàâëåíî â ôîðìàòå, êîòîðûé íåîáõîäèì ìåòîäó ReadXmlSchema
êëàññà System.Data.DataSet. Òîãäà òðàíñôîðìàöèÿ ìîäåëè ñóùíîñòè ê IoC-êîíôèãó-
ðàöèè êëàñà ActiveRecord áóäåò èìåòü âèä (XSL)
<xsl:template match=’entity’>
<component name="{@name}"
type="LightweightTransformSample.DbActiveRecord"
singleton="false">
<property name="XmlSchema">
<xml>
<xsl:apply-templates select="schema"/>
</xml>
</property>
<property name="SourceName">
<value>
<xsl:value-of select="storage/sourcename"/>
</value>
</property>
<property name="VersionsEnabled">
<value>
<xsl:value-of select="storage/@versions"/>
</value>
</property>
</component>
</xsl:template>
Ïîñëåäíèé ýòàï — ýòî îïðåäåëåíèå êîíôèãóðàöèè IoC-êîíòåéíåðà òàêèì îá-
ðàçîì, ÷òîáû òðàíñôîðìàöèÿ âûïîëíÿëàñü àâòîìàòè÷åñêè ïðè çàãðóçêå êîíôèãóðà-
öèè êîíòåéíåðà (ìîäåëè ñóùíîñòåé ñîõðàíåíû â ôàéëå entityModel.xml.config, à
îïèñàíèå XSL-òðàíñôîðìàöèè — â ôàéëå entityModelToIoCTransform.xsl):
<components>
<import
file="config/entityModel.xml.config"
xsl-file="config/xslt/entityModelToIoCTransform.xsl"/>
</components>
 ðåçóëüòàòå îïðåäåëåíèå «çàêàç» äîñòóïíî äëÿ ñâÿçûâàíèÿ ñ äðóãèìè êîìïî-
íåíòàìè. Ýòîò ïðèìåð èëëþñòðèðóåò ïðîñòåéøèé ñëó÷àé ïðåîáðàçîâàíèÿ ìîäåëè
PIM (êîòîðàÿ îïèñûâàåò àáñòðàêòíóþ ïàññèâíóþ ñóùíîñòü «çàêàç») â PSM â âèäå
êîíôèãóðàöèè Winter IoC-êîíòåéíåðà.
Àíàëîãè÷íûì îáðàçîì ñòðîÿòñÿ è çíà÷èòåëüíî áîëåå ñëîæíûå ïðåîáðàçîâàíèÿ.
Òàê, åñëè êëàññ DbActiveRecord íå èìååò ñâîéñòâà VersionsEnabled, òî ýòîò àñïåêò íå-
îáõîäèìî îòîáðàçèòü ÷åðåç îïðåäåëåíèå åùå îäíîé ñóùíîñòè äëÿ ñîõðàíåíèÿ âåðñèé è
ãåíåðàöèè êîíôèãóðàöèè äëÿ ñîîòâåòñòâóþùåãî òðèããåðà, êîòîðûé áû ñîçäàâàë íîâóþ
âåðñèþ ïðè êàæäîì èçìåíåíèè ñóùíîñòè purchaseOrder. Èíûìè ñëîâàìè, îáùàÿ ñòðà-
òåãèÿ çàêëþ÷àåòñÿ â êîíôèãóðàöèè ñëîæíûõ êîíöåïòîâ èç ìåòàìîäåëè PIM â âèäå
êîìïîçèöèè áîëåå ïðèìèòèâíûõ êîíöåïòîâ, êîòîðûå äîñòóïíû â PSM.
ÇÀÊËÞ×ÅÍÈÅ
Ðàññìîòðåííûé âàðèàíò óïðîùåííîé èíôðàñòðóêòóðû äëÿ ìîäåëå-îðèåíòèðîâàííîé
ðàçðàáîòêè óäîâëåòâîðÿåò ñîâðåìåííûì òðåáîâàíèÿì ñîçäàíèÿ áîëüøèõ ïðîãðàì-
ìíûõ ñèñòåì. Ñëåäóåò îòìåòèòü, ÷òî ïåðâè÷íîå ïðåäñòàâëåíèå ìîäåëåé â âèäå
ïðåäìåòíî-çàâèñèìîãî XML-ôîðìàòà èçáàâëåíî îò íåäîñòàòêîâ âàðèàíòà XMI+XSL.
ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1 109
Ìîäåëü èìååò ìàêñèìàëüíî êîìïàêòíîå ïðåäñòàâëåíèå, ïðè ýòîì ïðîñìîòð è åå
èçìåíåíèå äîñòóïíû ïðîãðàììèñòàì áåç èñïîëüçîâàíèÿ êàêèõ-ëèáî ñïåöèàëèçè-
ðîâàííûõ èíñòðóìåíòîâ. Ñîõðàíÿåòñÿ âîçìîæíîñòü áûñòðî èçìåíÿòü è ðàñøè-
ðÿòü ìåòàìîäåëü. Ïîñëå ñòàáèëèçàöèè ïðåäìåòíî-çàâèñèìîé ìåòàìîäåëè ìîæíî
îïðåäåëèòü òðàíñôîðìàöèè äëÿ ïðåîáðàçîâàíèÿ èñïîëüçóåìûõ ïðåäìåòíî-çàâèñè-
ìûõ ìîäåëåé â ëþáûå äðóãèå ìîäåëè (íàïðèìåð, UML).
Èñïîëüçîâàíèå XSL äëÿ îïèñàíèÿ òðàíñôîðìàöèé ïðèåìëåìî, ïîñêîëüêó ýòîò
ÿçûê ÿâëÿåòñÿ ìîùíûì èíñòðóìåíòîì (ñîäåðæèò òüþðèíã-ïîëíûé íàáîð ôóíêöèé).
Òàêîé ïîäõîä îñîáåííî ýôôåêòèâåí â ñëó÷àå, êîãäà âûõîäíàÿ ìîäåëü ìîæåò áûòü
ïðåäñòàâëåíà â ôîðìàòå XML. Ýòî ïîçâîëÿåò îðãàíèçîâûâàòü êàê âåðòèêàëüíûå òðàíñ-
ôîðìàöèè ñ ïðîèçâîëüíûì êîëè÷åñòâîì ñëîåâ àáñòðàêöèè, òàê è ãîðèçîíòàëüíûå.
 óñëîâèÿõ ñîâðåìåííîãî ïðîöåññà ðàçðàáîòêè, êîãäà íåîáõîäèìî îáåñïå÷èòü
ìèíèìàëüíûé ïðîìåæóòîê âðåìåíè ìåæäó íà÷àëîì ðàçðàáîòêè è ïåðâûìè ðåçóëü-
òàòàìè (feedback), èñïîëüçîâàíèå óïðîùåííîé èíôðàñòðóêòóðû (íà îñíîâå ñòàíäàð-
òîâ XML) ïîçâîëÿåò ñîçäàòü îïòèìàëüíûå óñëîâèÿ äëÿ ýôôåêòèâíîé êîìàíäíîé ðà-
áîòû ïðîãðàììèñòîâ.
Ïðåäëîæåííûé ïîäõîä ê âíåäðåíèþ ïðîöåññà ìîäåëå-îðèåíòèðîâàííîé ðàçðà-
áîòêè áûë àïðîáèðîâàí â ôèðìå «NewtonIdeas» (http://www.newtonideas.com), êîòî-
ðàÿ ñïåöèàëèçèðóåòñÿ íà ñîçäàíèè áîëüøîãî êîëè÷åñòâà îäíîðîäíûõ âåá-ïðîåêòîâ
â îáëàñòè ñèñòåì óïðàâëåíèÿ áèçíåñ-ïðîöåññàìè (BPMS, Business Process
Management Systems). Ïîçèòèâíûé ýôôåêò ïîëó÷åí óæå ïîñëå ïåðâûõ äâóõ ìåñÿöåâ
âíåäðåíèÿ, â òå÷åíèå êîòîðûõ ôîðìèðîâàëèñü îñíîâíûå ìåòàìîäåëè è òðàíñôîðìà-
öèè (íà äàííûé ìîìåíò îïðåäåëåíî îêîëî 900 ïîíÿòèé, êîòîðûå ïîâòîðíî èñïîëü-
çóþòñÿ â ðàçëè÷íûõ ïðîåêòàõ; áèáëèîòåêà èç áîëåå 1000 êëàññîâ èñïîëüçóåòñÿ äëÿ
ðåàëèçàöèè ýòèõ ïîíÿòèé). Ìåíåå ÷åì çà äâà ãîäà ïîñëå íà÷àëà âíåäðåíèÿ âûøå-
îïèñàííûé ïîäõîä ïîëíîñòüþ ïîäòâåðäèë ñâîþ ýôôåêòèâíîñòü: áåç êàêèõ-ëèáî ñó-
ùåñòâåííûõ çàòðàò íà âíåäðåíèå ñòåïåíü ïîâòîðíîãî èñïîëüçîâàíèÿ êîäà (è òðàíñ-
ôîðìàöèé) óâåëè÷èëàñü íà ïîðÿäîê.
ÑÏÈÑÎÊ ËÈÒÅÐÀÒÓÐÛ
1. D i j k s t r a E . W . On the role of scientific thought // Selected Writings on Computing: A Personal Per-
spective. — N.-Y.: Springer-Verlag, 1982. — 362 p.
2. Ï å ð å â î ç ÷ è ê î â à Î . Ë . Îñíîâè ñèñòåìíîãî àíàë³çó îá’ºêò³â ³ ïðîöåñ³â êîìï’þòåðèçàö³¿. — Ê.:
Âèäàâíè÷èé ä³ì «ÊÌ Àêàäåì³ÿ», 2003. — 432 ñ.
3. H u n t A . , T h o m a s D . Pragmatic programmer, The: From journeyman to master. — Addison Wesley,
1999. — 352 p.
4. I S O / I E C 1 2 2 0 7 : 1 9 9 5 Information technology — Software life cycle processes (ÄÑÒÓ 3918-99 -
²íôîðìàö³éí³ òåõíîëî㳿. Ïðîöåñè æèòòºâîãî öèêëó ïðîãðàìíîãî çàáåçïå÷åííÿ).
5. C z a r n e c k i K . , S t a h l T . , V o l t e r M . Model-driven software development: Technology, engi-
neering, management. — John Wiley&Sons, 2006 — 444 p.
6. G a s e v i c D . , D j u r i c D . , D e v e d z i c V . Model driven architecture and ontology development. —
N.-Y.: Springer, 2006. — 312 p.
7. K l e p p e A . , W a r m e r J . , B a s t W . MDA explained: The model driven architecture™: Practice and
promise. — Addison-Wesley Professional. — 2003. — 192 p.
8. I S O / I E C 1 9 5 0 3 : 2 0 0 5 Information technology — XML Metadata Interchange (XMI) (standard).
9. W a l l s C . , B r e i d e n b a c h R . Spring in action. — Manning Publications; 2 ed. — 2007. — 650 p.
10. L i g h t w e i g h t . N E T . Inversion of Control container — Winter4Net (http://www.winter4.net)
11. F o w l e r M . Inversion of control containers and the dependency injection pattern, 2004
(http://martinfowler.com/articles/injection.html)
12. B e r t o l a z z i P . , K r u s i c h C . , M i s s i k o f f M . An approach to the definition of a core enterprise
ontology: CEO / Intern. Workshop on Open Enterprise Solutions: Systems, Experiences, and Organizations
(OES-SEO 2001). — Luiss Publications, 2001. — 175 p.
13. F o w l e r M . a t e l . Patterns of enterprise application architecture. — Addison-Wesley Professional,
2002. — 560 p.
Ïîñòóïèëà 22.12.2008
110 ISSN 0023-1274. Êèáåðíåòèêà è ñèñòåìíûé àíàëèç, 2010, ¹ 1
|
| id | nasplib_isofts_kiev_ua-123456789-45130 |
| institution | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| issn | 0023-1274 |
| language | Russian |
| last_indexed | 2025-12-07T18:46:56Z |
| publishDate | 2010 |
| publisher | Інститут кібернетики ім. В.М. Глушкова НАН України |
| record_format | dspace |
| spelling | Глибовец, Н.Н. Федорченко, В.М. 2013-06-07T19:38:06Z 2013-06-07T19:38:06Z 2010 Упрощенная инфраструктура для трансформации XML-моделей / Н.Н. Глибовец, В.М. Федорченко // Кибернетика и системный анализ. — 2010. — № 1. — С. 105–110. — Бібліогр.: 13 назв. — рос. 0023-1274 https://nasplib.isofts.kiev.ua/handle/123456789/45130 004.4’242 Запропоновано варіант полегшеної інфраструктури для моделе-орієнтованої розробки великих програмних систем. Основою є первинне представлення моделі у вигляді предметно-залежного XML-формату. Модель має максимально компактне уявлення, дозволяє застосовувати розвинені засоби зміни та розширення, легко визначати трансформації для перетворення створених предметно-залежних моделей в будь-які інші моделі. Використання XSL для опису трансформацій дозволяє ефективно організовувати як вертикальні трансформації з довільною кількістю шарів абстракції, так і горизонтальні. An approach is proposed to the construction of a lightweight infrastructure for the model-oriented development of complex software systems. It is based on the use of a domain-dependent XML format for primary models. A model has a compact representation, allows for the use of advanced tools for changing and extending it, and makes it possible to easily determine transformations for converting domain-dependent XML models into any other models. The use of XSL for describing transformations allows one to organize both vertical and horizontal transformations (with any number of abstraction layers) and provides optimum conditions for collaboration. ru Інститут кібернетики ім. В.М. Глушкова НАН України Кибернетика и системный анализ Системный анализ Упрощенная инфраструктура для трансформации XML-моделей Спрощена інфраструктура для трансформації XML-моделей Lightweight infrastructure for XML models transformation Article published earlier |
| spellingShingle | Упрощенная инфраструктура для трансформации XML-моделей Глибовец, Н.Н. Федорченко, В.М. Системный анализ |
| title | Упрощенная инфраструктура для трансформации XML-моделей |
| title_alt | Спрощена інфраструктура для трансформації XML-моделей Lightweight infrastructure for XML models transformation |
| title_full | Упрощенная инфраструктура для трансформации XML-моделей |
| title_fullStr | Упрощенная инфраструктура для трансформации XML-моделей |
| title_full_unstemmed | Упрощенная инфраструктура для трансформации XML-моделей |
| title_short | Упрощенная инфраструктура для трансформации XML-моделей |
| title_sort | упрощенная инфраструктура для трансформации xml-моделей |
| topic | Системный анализ |
| topic_facet | Системный анализ |
| url | https://nasplib.isofts.kiev.ua/handle/123456789/45130 |
| work_keys_str_mv | AT glibovecnn uproŝennaâinfrastrukturadlâtransformaciixmlmodelei AT fedorčenkovm uproŝennaâinfrastrukturadlâtransformaciixmlmodelei AT glibovecnn sproŝenaínfrastrukturadlâtransformacííxmlmodelei AT fedorčenkovm sproŝenaínfrastrukturadlâtransformacííxmlmodelei AT glibovecnn lightweightinfrastructureforxmlmodelstransformation AT fedorčenkovm lightweightinfrastructureforxmlmodelstransformation |