{"id":272074,"date":"2016-01-13T16:18:02","date_gmt":"2016-01-13T13:18:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=272074"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=272074","title":{"rendered":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 (\u0438\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u044c)"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fdd\/02c\/ed9\/fdd02ced973f401a883d5578cbd1f9f6.jpg\"\/><\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u00ab\u041d\u0430\u0447\u0430\u043b\u043e\u00bb \u041a\u0440\u0438\u0441\u0442\u043e\u0444\u0435\u0440\u0430 \u041d\u043e\u043b\u0430\u043d\u0430, \u0433\u0434\u0435 \u043b\u044e\u0434\u0438 \u0432\u0438\u0434\u0435\u043b\u0438 \u0441\u043d\u044b \u0432\u043e \u0441\u043d\u0430\u0445.<\/p>\n<p>  \u042d\u0442\u043e 7-\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u042f \u0443\u0436\u0435 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0422\u0430\u043a \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0445\u043e\u0442\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u00abHello World\u00bb, \u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0440\u043e\u0441 \u0432 \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4><font color=\"#902213\"><b>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/b><\/font><\/h4>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438, \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0441\u0442\u0430\u0442\u0438\u043a\u0438 \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<h5><font color=\"#902213\">Query\/View\/Transformation (QVT)<\/font><\/h5>\n<p>  QVT \u2013 \u044d\u0442\u043e \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0412 <a href=\"http:\/\/www.omg.org\/spec\/QVT\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 OMG QVT<\/a> \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0440\u0438 \u044f\u0437\u044b\u043a\u0430:<\/p>\n<ul>\n<li>QVT Core (QVTc) \u2013 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c UML- \u0438 ER-\u043c\u043e\u0434\u0435\u043b\u0438. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e QVT Core \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u00ab\u0441\u043a\u0430\u0437\u0430\u0442\u044c\u00bb, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0432 UML-\u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u0432 ER-\u043c\u043e\u0434\u0435\u043b\u044f\u0445, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 UML-\u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u0432 ER-\u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0438 \u0442.\u0434. \u041e\u043f\u0438\u0441\u0430\u0432 \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 UML-\u043c\u043e\u0434\u0435\u043b\u0438 \u0432 ER-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043b\u0438, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, ER-\u043c\u043e\u0434\u0435\u043b\u0438 \u0432 UML-\u043c\u043e\u0434\u0435\u043b\u0438 \u2013 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435.<\/li>\n<li>QVT Relations (QVTr) \u2013 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 QVT Core, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0430\u0445\u0430\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e.<\/li>\n<li>QVT Operational (QVTo) \u2013 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u044d\u0442\u043e\u0442 \u0443\u0436\u0435 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e QVTo \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Borland. \u0410 \u0441 2007-2008 \u0433\u043e\u0434\u043e\u0432 \u043e\u043d <a href=\"https:\/\/projects.eclipse.org\/projects\/modeling.mmt.qvt-oml\">\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Eclipse<\/a>.<\/p>\n<p>  \u0414\u043b\u044f QVTc \u0438 QVTr \u0442\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"https:\/\/projects.eclipse.org\/projects\/modeling.mmt.qvtd\">Eclipse-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a>. \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a \u0440\u0435\u043b\u0438\u0437\u0443 Eclipse Neon \u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043f\u043e\u043a\u0430 \u043e\u043d\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0431\u043e\u0447\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e QVTo-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Eclipse, \u043d\u043e \u0438 \u0432 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0445 Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0423 \u043d\u0430\u0441, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c QVT \u043a\u0430\u043a \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0430\u0434 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/264963\/\">OCL<\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 QVT \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438: \u00ab.\u00bb \u0438 \u00ab-&gt;\u00bb. \u041c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 OCL.<\/p>\n<h5><font color=\"#902213\">ATL Transformation Language (ATL)<\/font><\/h5>\n<p>  ATL \u2013 \u044d\u0442\u043e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 (\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439) \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u043d\u0438\u043a \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 QVT. \u041e\u043d \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 QVT, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f.<\/p>\n<p>  \u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\u041e\u043d \u043d\u0435 \u0431\u044b\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 QVT, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c <a href=\"http:\/\/www.omg.org\/spec\/QVT\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f OMG QVT<\/a>.<\/li>\n<li>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/li>\n<li>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f, \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f OCL, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0447\u0451\u043c-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.omg.org\/spec\/OCL\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 OMG OCL<\/a> \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0430\u043a <a href=\"https:\/\/projects.eclipse.org\/projects\/modeling.mdt.ocl\">Eclipse OCL<\/a>.<\/li>\n<li>\u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445.<\/li>\n<li>\u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a.<\/li>\n<li>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c ANT-\u0441\u043a\u0440\u0438\u043f\u0442\u044b.<\/li>\n<\/ul>\n<p>  \u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li><a href=\"https:\/\/projects.eclipse.org\/projects\/modeling.mdt.ocl\">Eclipse OCL<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 QVT, \u0445\u043e\u0442\u044f \u0438 \u0445\u043e\u0440\u043e\u0448, \u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u044b\u0439. ATL \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u0448\u0443\u0441\u0442\u0440\u044b\u043c, \u0447\u0435\u043c QVTo.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0445 (refining) \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e, \u0442\u043e ATL \u0443\u0434\u043e\u0431\u043d\u0435\u0439. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 QVT \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u043e.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430. ATL \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 ATL-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u043a \u0441 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u0422.\u0435. \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c ATL-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043b\u0438, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c ATL-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 QVT \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e.<\/li>\n<\/ul>\n<p>  <\/p>\n<h5><font color=\"#902213\">Henshin<\/font><\/h5>\n<p>  Henshin \u2013 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u041d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 QVT \u0438 ATL \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u0430 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439. \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439. \u041c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0433\u0440\u0430\u0444\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 (double pushout \u2014 DPO) \u0438\u043b\u0438 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 (single pushout \u2014 SPO).<\/p>\n<p>  \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u044b, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.<\/p>\n<p>  Henshin \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Apache Giraph, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438. \u0425\u043e\u0442\u044f \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e QVTo.<\/p>\n<h5><font color=\"#902213\">\u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/font><\/h5>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: <a href=\"https:\/\/www.eclipse.org\/epsilon\/\">Epsilon Transformation Language<\/a>, <a href=\"http:\/\/www.emorf.org\/\">EMorF<\/a>, <a href=\"http:\/\/user.cs.tu-berlin.de\/~gragra\/agg\/\">AGG (The Attributed Graph Grammar System)<\/a>, <a href=\"https:\/\/www.eclipse.org\/viatra\/\">VIATRA (VIsual Automated model TRAnsformations)<\/a> \u0438 \u0442.\u043f. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u0445. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 QVTo, ATL \u0438\u043b\u0438 Henshin, \u0442\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c XSLT. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u0445, \u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0435\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442. \u042f \u0438 \u0441\u0430\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000-\u0445, \u043d\u0430 \u0437\u0430\u0440\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f XSLT \u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u043d\u0451\u043c \u0438 PHP \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430. \u041e\u043d \u043b\u044e\u0442\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u043b \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043d\u0435\u043c\u044b\u0441\u043b\u0438\u043c\u043e\u0435 \u043f\u043e \u0442\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u043e \u0441\u0443\u0442\u044c \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u0435 \u043f\u043b\u043e\u0445\u0430\u044f, \u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u0438\u0448\u0443 \u043d\u0430 XSLT \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 XSLT \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 XML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0432\u0438\u0434\u0435 XML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0435\u0451 XSLT. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f <a href=\"http:\/\/www.omg.org\/spec\/XMI\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f OMG XMI<\/a> (\u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 XMI-\u0444\u0430\u0439\u043b\u0430). \u041d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0443\u043b\u043e\u0436\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 XML-\u0444\u0430\u0439\u043b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 XML-\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438\u043b\u0438 XML-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 XSLT-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043c\u043e\u0434\u0435\u043b\u044c \u2013 \u044d\u0442\u043e \u0433\u0440\u0430\u0444, \u0430 \u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043e\u0431\u044b\u0447\u043d\u043e \u0432 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u043f\u043e\u043b\u043d\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043c\u0435\u0436\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0445. \u0418\u0441\u043a\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u2013 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0442\u044b\u0439 \u0430\u0434. \u0410 \u0435\u0441\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0435\u0449\u0451 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0438 \u0441\u0442\u0435\u0440\u0435\u043e\u0442\u0438\u043f\u044b \u0432 UML-\u043c\u043e\u0434\u0435\u043b\u044f\u0445, \u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 9-\u044b\u0439 \u043a\u0440\u0443\u0433 \u0430\u0434\u0430.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 XSLT \u2013 \u044d\u0442\u043e XML-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0434\u043e\u0431\u0435\u043d.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f\u043c XSLT \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0441\u043d\u0438\u043b\u0438\u0441\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0436\u0443\u0440\u043d\u0430\u043b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u0432 QVTo, \u043e \u0447\u0451\u043c \u044f \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443 \u043f\u043e\u0437\u0436\u0435 (\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u041e\u0442\u043b\u0430\u0434\u043a\u0430\u00bb).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u043e\u0438 \u0434\u043e\u0432\u043e\u0434\u044b \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b, \u0442\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430 \u043d\u0430\u0441 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u00abHello World\u00bb-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00bb \u043a\u0430\u043a-\u0440\u0430\u0437 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 XMI-\u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0410 \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f ATL-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u0442\u0430\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 XSLT-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, Eclipse Modeling Framework \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c XML-\u0441\u0445\u0435\u043c\u044b \u0438 Ecore-\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 XML-\u0444\u0430\u0439\u043b\u044b \u0432 Ecore-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0427\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c QVTo, ATL \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f XML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<h4><font color=\"#902213\"><b>QVT Operational<\/b><\/font><\/h4>\n<p>  <\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u00abHello world\u00bb<\/font><\/h5>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/eclipse.org\/downloads\/\">Eclipse Modeling Tools<\/a>.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Operational QVT \u0438 ATL (Help -&gt; Install Modeling Components).<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Henshin (Help -&gt; Install New Software\u2026) \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"http:\/\/download.eclipse.org\/modeling\/emft\/henshin\/updates\/release\">http:\/\/download.eclipse.org\/modeling\/emft\/henshin\/updates\/release<\/a>.<\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/github.com\/AresEkb\/HelloWorldTransform\">\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/a> \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 (File -&gt; New -&gt; Other\u2026 -&gt; Operational QVT Project).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/dc3\/8dc\/a67\/dc38dca675de4109bea6b485f865ed54.png\"\/><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 (File -&gt; New -&gt; Other\u2026 -&gt; Operational QVT Transformation).<\/p>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 main \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>transformation HelloWorld1();  main() {     log('Hello world'); } <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f (Run -&gt; Run Configurations\u2026) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c42\/e8c\/b46\/c42e8cb46a6e4978ac40b763946a6e06.png\"\/><\/p>\n<p>  \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/08a\/2f8\/dcc\/08a2f8dccc064ee786395760e27e8b66.png\"\/><\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u00abHello world\u00bb<\/font><\/h5>\n<p>  \u0414\u043b\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u00abHello world\u00bb \u043d\u0443\u0436\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0425\u0432\u0430\u0442\u0438\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043f\u0443\u0441\u0442\u044c QVTo \u0441\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0435\u0451:<\/p>\n<pre><code>modeltype ECORE 'strict' uses 'http:\/\/www.eclipse.org\/emf\/2002\/Ecore';  transformation HelloWorld2(out o : ECORE);  main() {     object EPackage {         name := 'World';         eClassifiers += object EClass { name := 'Alice'; };         eClassifiers += object EClass { name := 'Bob'; };     }; } <\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 modeltype) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. \u0417\u0430\u0442\u0435\u043c, \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c. \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 main \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 World \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 (Alice \u0438 Bob).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 Ctrl \u043d\u0430 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0442\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u0440\u044f\u0434\u043e\u043c \u0435\u0449\u0451 \u0441\u043e\u0442\u043d\u044e-\u0434\u0440\u0443\u0433\u0443\u044e \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0435\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/681\/e73\/379\/681e733797994a87898baa4b15281bc4.png\"\/><\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0437\u044b\u043a\u0430. \u0421 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 <a href=\"http:\/\/www.omg.org\/spec\/QVT\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/a> \u0438\u043b\u0438 \u0432 <a href=\"http:\/\/help.eclipse.org\/mars\/topic\/org.eclipse.m2m.qvt.oml.doc\/references\/M2M-QVTO.pdf\">\u044d\u0442\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c QVTo \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p><\/blockquote>\n<p>  \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c10\/71c\/5f3\/c1071c5f31a14569a71cf7d40b0a40f8.png\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f9d\/c20\/fd9\/f9dc20fd96c6426087a348659cf6c2d0.png\"\/><\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u0442\u0440\u0443\u042a \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u00abHello world\u00bb<\/font><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043d\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c. \u0412 3-\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0443\u043a\u0430\u0436\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f, \u043d\u043e \u0438 \u0432\u0445\u043e\u0434\u043d\u0430\u044f Ecore-\u043c\u043e\u0434\u0435\u043b\u044c. \u0418 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<pre><code>modeltype ECORE 'strict' uses 'http:\/\/www.eclipse.org\/emf\/2002\/Ecore';  transformation HelloWorld3(in i : ECORE, out o : ECORE);  main() {     i.rootObjects()[EPackage]-&gt;toEPackage(); }  mapping EPackage::toEPackage() : EPackage {     name := 'Hello' + self.name;     eClassifiers := self.eClassifiers-&gt;toEDataType(); }  mapping EClassifier::toEDataType() : EDataType {     name := 'Hello' + self.name;     instanceClassName := 'some.ns.' + self.name + 'Class';     serializable := false; } <\/code><\/pre>\n<p>  \u0421\u0443\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f. \u0418\u0449\u0435\u043c \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0441\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u0445 \u0442\u043e\u0436\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442\u044b, \u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0435. \u041a \u0438\u043c\u0435\u043d\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abHello\u00bb, \u0430 \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u043c\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u00abHello\u00bb, \u043d\u0443, \u0438, \u0434\u043e \u043a\u0443\u0447\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u043d\u0435\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0439, \u0430 \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/423\/d9b\/bdf\/423d9bbdf3844153a0b62f0ec768c58d.png\"\/><\/p>\n<h5><font color=\"#902213\">\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/font><\/h5>\n<p>  \u0412 Eclipse QVTo \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u0441\u0435\u0445 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a QVTo \u0432\u0435\u0434\u0451\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0436\u0443\u0440\u043d\u0430\u043b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 (\u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u0441\u0432\u0435\u0440\u0445\u0443). \u0418 \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0436\u0443\u0440\u043d\u0430\u043b\u0430 (\u043a\u044d\u0448\u0430). \u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0436\u0443\u0440\u043d\u0430\u043b\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 resolve. \u0410 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e late resolve \u043c\u043e\u0436\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0449\u0451 \u043d\u0435\u0442! \u0416\u0443\u0440\u043d\u0430\u043b \u2013 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0444\u0438\u0447 QVTo.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/371\/d2d\/d70\/371d2dd70bc44b4c8f1d035e13743668.png\"\/><\/p>\n<h4><font color=\"#902213\"><b>ATL Transformation Language<\/b><\/font><\/h4>\n<p>  <\/p>\n<h5><font color=\"#902213\">\u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0442\u0440\u0443\u042a \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u00abHello world\u00bb<\/font><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 ATL. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (File -&gt; New -&gt; Other\u2026 -&gt; ATL Project). \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 (File -&gt; New -&gt; Other\u2026 -&gt; ATL File). \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e ATL \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 QVTo:<\/p>\n<pre><code>-- @nsURI Ecore = http:\/\/www.eclipse.org\/emf\/2002\/Ecore  module HelloWorld3; create OUT : Ecore from IN : Ecore;  rule toEPackage {     from         package : Ecore!EPackage     to          newPackage : Ecore!EPackage (             name &lt;- 'Hello' + package.name,             eClassifiers &lt;- package.eClassifiers         ) }  rule toEDataType {     from         classifier : Ecore!EClassifier     to          dataType : Ecore!EDataType (             name &lt;- 'Hello' + classifier.name,             instanceClassName &lt;- 'some.ns.' + classifier.name + 'Class',             serializable &lt;- false         ) } <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c. \u041e\u0434\u043d\u0430\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e.<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u041a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e ATL \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u043b\u0441\u044f <a href=\"http:\/\/www.inria.fr\/en\/\">INRIA<\/a> \u0438, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435 \ud83d\ude42 \u041e\u0442 \u0438\u0445 Caml \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435 \u0434\u0432\u043e\u0438\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430\u0445. \u041e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043d\u0442\u043e\u0440\u0430, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0445 \u044f\u0437\u044b\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e. \u0411\u0443\u043a\u0432\u044b \u0432\u0440\u043e\u0434\u0435 \u043f\u043e\u0445\u043e\u0436\u0438, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p><\/blockquote>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f asm-\u0444\u0430\u0439\u043b. \u042d\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u0432 \u0444\u043e\u0440\u043c\u0435, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 ATL.<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u043e \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e-\u0441\u0442\u0430\u0440\u043e\u043c\u0443. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 asm-\u0444\u0430\u0439\u043b \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 drop, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 ATL, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0430 asm-\u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u043b\u0447\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f.<\/p><\/blockquote>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Run -&gt; Run Configurations\u2026 \u041e\u0434\u043d\u0430\u043a\u043e, \u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0440\u0430\u0437\u0443 ANT-\u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0444\u0430\u0439\u043b build.xml \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;project name=&quot;HelloWorldATL&quot;&gt;     &lt;target name=&quot;HelloWorld3&quot;&gt;         &lt;!-- Loading metamodels --&gt;         &lt;atl.loadModel name=&quot;Ecore&quot; metamodel=&quot;MOF&quot; nsURI=&quot;http:\/\/www.eclipse.org\/emf\/2002\/Ecore&quot; \/&gt;         &lt;!-- Loading models --&gt;         &lt;atl.loadModel name=&quot;IN&quot; metamodel=&quot;Ecore&quot; path=&quot;output\/MyModel2.xmi&quot; \/&gt;         &lt;!-- Transformation --&gt;         &lt;atl.launch path=&quot;HelloWorld3.atl&quot;&gt;             &lt;inmodel name=&quot;IN&quot; model=&quot;IN&quot; \/&gt;             &lt;outmodel name=&quot;OUT&quot; model=&quot;OUT&quot; metamodel=&quot;Ecore&quot; \/&gt;         &lt;\/atl.launch&gt;         &lt;!-- Saving models --&gt;         &lt;atl.saveModel model=&quot;OUT&quot; path=&quot;output\/MyModel3.xmi&quot; \/&gt;     &lt;\/target&gt; &lt;\/project&gt; <\/code><\/pre>\n<p>  \u0422\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 QVTo-\u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (Run -&gt; External Tools -&gt; External Tools Configurations\u2026).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/939\/58d\/a0e\/93958da0edf34ac2a590c3b43ca14c4a.png\"\/><\/p>\n<p>  \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u043a build.xml.<\/p>\n<p>  \u041d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Targets \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 HelloWorld3.<\/p>\n<p>  \u0418, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 JRE \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u00abRun in the same JRE as the workspace\u00bb, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u00abThe name is undefined\u00bb.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/074\/e34\/8b7\/074e348b73264dd291602d9204156a56.png\"\/><\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/font><\/h5>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0411\u043e\u0431\u0430, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442:<\/p>\n<pre><code>-- @atlcompiler atl2010 -- @nsURI Ecore = http:\/\/www.eclipse.org\/emf\/2002\/Ecore  module HelloWorld4; create OUT : Ecore refining IN : Ecore;  rule sayHello {     from         s : Ecore!ENamedElement (s.name &lt;&gt; 'Bob')     to         t : Ecore!ENamedElement (             name &lt;- 'Hello' + s.name         ) }  rule killBob {     from         s : Ecore!ENamedElement (s.name = 'Bob')     to         drop } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;project name=&quot;HelloWorldATL&quot;&gt;     &lt;target name=&quot;HelloWorld4&quot;&gt;         &lt;!-- Loading metamodels --&gt;         &lt;atl.loadModel name=&quot;Ecore&quot; metamodel=&quot;MOF&quot; nsURI=&quot;http:\/\/www.eclipse.org\/emf\/2002\/Ecore&quot; \/&gt;         &lt;!-- Loading models --&gt;         &lt;atl.loadModel name=&quot;IN&quot; metamodel=&quot;Ecore&quot; path=&quot;output\/MyModel2.xmi&quot; \/&gt;         &lt;!-- Transformation --&gt;         &lt;atl.launch path=&quot;HelloWorld4.atl&quot; refining=&quot;true&quot;&gt;             &lt;inoutmodel name=&quot;IN&quot; model=&quot;IN&quot; \/&gt;         &lt;\/atl.launch&gt;         &lt;!-- Saving models --&gt;         &lt;atl.saveModel model=&quot;IN&quot; path=&quot;output\/MyModel4.xmi&quot; \/&gt;     &lt;\/target&gt; &lt;\/project&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430 \u043d\u0430\u0441 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u00abHello World\u00bb-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/font><\/h5>\n<p>  \u042f \u0434\u0443\u043c\u0430\u044e, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0432\u044b\u043d\u043e\u0441\u0430 \u043c\u043e\u0437\u0433\u0430. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430 \u043d\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430 \u043d\u0430\u0441 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0410\u043b\u0438\u0441\u0443 \u0438 \u0411\u043e\u0431\u0430:<\/p>\n<pre><code class=\"cs\">-- @nsURI Ecore = http:\/\/www.eclipse.org\/emf\/2002\/Ecore  module HelloWorld5; create OUT : Ecore from IN : Ecore;  rule SayHelloToAlice {     from         classifier : Ecore!EClassifier (             classifier.name = 'Alice'         )     to         datatype : Ecore!EDataType (             name &lt;- 'Hello' + classifier.name         ) }  rule SayHelloToBob {     from         classifier : Ecore!EClassifier (             classifier.name = 'Bob'         )     to         datatype : Ecore!EDataType (             name &lt;- 'Hello' + classifier.name         ) } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 XMI-\u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;project name=&quot;HelloWorldATL&quot;&gt;     &lt;target name=&quot;ATLCopy&quot;&gt;         &lt;!-- Loading metamodels --&gt;         &lt;atl.loadModel name=&quot;ATL&quot; metamodel=&quot;MOF&quot; nsURI=&quot;platform:\/plugin\/org.eclipse.m2m.atl.common\/org\/eclipse\/m2m\/atl\/common\/resources\/ATL.ecore&quot; \/&gt;         &lt;!-- Loading models --&gt;         &lt;atl.loadModel name=&quot;IN&quot; metamodel=&quot;ATL&quot; path=&quot;HelloWorld5.atl&quot;&gt;             &lt;injector name=&quot;ATL&quot; \/&gt;         &lt;\/atl.loadModel&gt;         &lt;!-- Saving models --&gt;         &lt;atl.saveModel model=&quot;IN&quot; path=&quot;output\/HelloWorld5.atl.xmi&quot; \/&gt;     &lt;\/target&gt; &lt;\/project&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; &lt;xmi:XMI xmi:version=&quot;2.0&quot; xmlns:xmi=&quot;http:\/\/www.omg.org\/XMI&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; xmlns:atl=&quot;http:\/\/www.eclipse.org\/gmt\/2005\/ATL&quot; xmlns:ocl=&quot;http:\/\/www.eclipse.org\/gmt\/2005\/OCL&quot;&gt;   &lt;atl:Module location=&quot;3:1-26:2&quot; name=&quot;HelloWorld5&quot;&gt;     &lt;commentsBefore&gt;-- @nsURI Ecore = http:\/\/www.eclipse.org\/emf\/2002\/Ecore&lt;\/commentsBefore&gt;     &lt;inModels location=&quot;4:25-4:35&quot; name=&quot;IN&quot; metamodel=&quot;\/2&quot;\/&gt;     &lt;outModels location=&quot;4:8-4:19&quot; name=&quot;OUT&quot; metamodel=&quot;\/1&quot;\/&gt;     &lt;elements xsi:type=&quot;atl:MatchedRule&quot; location=&quot;6:1-15:2&quot; name=&quot;SayHelloToAlice&quot;&gt;       &lt;outPattern location=&quot;11:2-14:4&quot;&gt;         &lt;elements xsi:type=&quot;atl:SimpleOutPatternElement&quot; location=&quot;12:3-14:4&quot; varName=&quot;datatype&quot;&gt;           &lt;type xsi:type=&quot;ocl:OclModelElement&quot; location=&quot;12:14-12:29&quot; name=&quot;EDataType&quot; model=&quot;\/4&quot;\/&gt;           &lt;bindings location=&quot;13:4-13:37&quot; propertyName=&quot;name&quot;&gt;             &lt;value xsi:type=&quot;ocl:OperatorCallExp&quot; location=&quot;13:12-13:37&quot; operationName=&quot;+&quot;&gt;               &lt;source xsi:type=&quot;ocl:StringExp&quot; location=&quot;13:12-13:19&quot; stringSymbol=&quot;Hello&quot;\/&gt;               &lt;arguments xsi:type=&quot;ocl:NavigationOrAttributeCallExp&quot; location=&quot;13:22-13:37&quot; name=&quot;name&quot;&gt;                 &lt;source xsi:type=&quot;ocl:VariableExp&quot; location=&quot;13:22-13:32&quot; referredVariable=&quot;\/0\/@elements.0\/@inPattern\/@elements.0&quot;\/&gt;               &lt;\/arguments&gt;             &lt;\/value&gt;           &lt;\/bindings&gt;         &lt;\/elements&gt;       &lt;\/outPattern&gt;       &lt;inPattern location=&quot;7:2-10:4&quot;&gt;         &lt;elements xsi:type=&quot;atl:SimpleInPatternElement&quot; location=&quot;8:3-8:33&quot; varName=&quot;classifier&quot; variableExp=&quot;\/0\/@elements.0\/@inPattern\/@filter\/@source\/@source \/0\/@elements.0\/@outPattern\/@elements.0\/@bindings.0\/@value\/@arguments.0\/@source&quot;&gt;           &lt;type xsi:type=&quot;ocl:OclModelElement&quot; location=&quot;8:16-8:33&quot; name=&quot;EClassifier&quot; model=&quot;\/3&quot;\/&gt;         &lt;\/elements&gt;         &lt;filter xsi:type=&quot;ocl:OperatorCallExp&quot; location=&quot;9:4-9:29&quot; operationName=&quot;=&quot;&gt;           &lt;source xsi:type=&quot;ocl:NavigationOrAttributeCallExp&quot; location=&quot;9:4-9:19&quot; name=&quot;name&quot;&gt;             &lt;source xsi:type=&quot;ocl:VariableExp&quot; location=&quot;9:4-9:14&quot; referredVariable=&quot;\/0\/@elements.0\/@inPattern\/@elements.0&quot;\/&gt;           &lt;\/source&gt;           &lt;arguments xsi:type=&quot;ocl:StringExp&quot; location=&quot;9:22-9:29&quot; stringSymbol=&quot;Alice&quot;\/&gt;         &lt;\/filter&gt;       &lt;\/inPattern&gt;     &lt;\/elements&gt;     &lt;elements xsi:type=&quot;atl:MatchedRule&quot; location=&quot;17:1-26:2&quot; name=&quot;SayHelloToBob&quot;&gt;       &lt;outPattern location=&quot;22:2-25:4&quot;&gt;         &lt;elements xsi:type=&quot;atl:SimpleOutPatternElement&quot; location=&quot;23:3-25:4&quot; varName=&quot;datatype&quot;&gt;           &lt;type xsi:type=&quot;ocl:OclModelElement&quot; location=&quot;23:14-23:29&quot; name=&quot;EDataType&quot; model=&quot;\/6&quot;\/&gt;           &lt;bindings location=&quot;24:4-24:37&quot; propertyName=&quot;name&quot;&gt;             &lt;value xsi:type=&quot;ocl:OperatorCallExp&quot; location=&quot;24:12-24:37&quot; operationName=&quot;+&quot;&gt;               &lt;source xsi:type=&quot;ocl:StringExp&quot; location=&quot;24:12-24:19&quot; stringSymbol=&quot;Hello&quot;\/&gt;               &lt;arguments xsi:type=&quot;ocl:NavigationOrAttributeCallExp&quot; location=&quot;24:22-24:37&quot; name=&quot;name&quot;&gt;                 &lt;source xsi:type=&quot;ocl:VariableExp&quot; location=&quot;24:22-24:32&quot; referredVariable=&quot;\/0\/@elements.1\/@inPattern\/@elements.0&quot;\/&gt;               &lt;\/arguments&gt;             &lt;\/value&gt;           &lt;\/bindings&gt;         &lt;\/elements&gt;       &lt;\/outPattern&gt;       &lt;inPattern location=&quot;18:2-21:4&quot;&gt;         &lt;elements xsi:type=&quot;atl:SimpleInPatternElement&quot; location=&quot;19:3-19:33&quot; varName=&quot;classifier&quot; variableExp=&quot;\/0\/@elements.1\/@inPattern\/@filter\/@source\/@source \/0\/@elements.1\/@outPattern\/@elements.0\/@bindings.0\/@value\/@arguments.0\/@source&quot;&gt;           &lt;type xsi:type=&quot;ocl:OclModelElement&quot; location=&quot;19:16-19:33&quot; name=&quot;EClassifier&quot; model=&quot;\/5&quot;\/&gt;         &lt;\/elements&gt;         &lt;filter xsi:type=&quot;ocl:OperatorCallExp&quot; location=&quot;20:4-20:27&quot; operationName=&quot;=&quot;&gt;           &lt;source xsi:type=&quot;ocl:NavigationOrAttributeCallExp&quot; location=&quot;20:4-20:19&quot; name=&quot;name&quot;&gt;             &lt;source xsi:type=&quot;ocl:VariableExp&quot; location=&quot;20:4-20:14&quot; referredVariable=&quot;\/0\/@elements.1\/@inPattern\/@elements.0&quot;\/&gt;           &lt;\/source&gt;           &lt;arguments xsi:type=&quot;ocl:StringExp&quot; location=&quot;20:22-20:27&quot; stringSymbol=&quot;Bob&quot;\/&gt;         &lt;\/filter&gt;       &lt;\/inPattern&gt;     &lt;\/elements&gt;   &lt;\/atl:Module&gt;   &lt;ocl:OclModel location=&quot;4:14-4:19&quot; name=&quot;Ecore&quot; model=&quot;\/0\/@outModels.0&quot;\/&gt;   &lt;ocl:OclModel location=&quot;4:30-4:35&quot; name=&quot;Ecore&quot; model=&quot;\/0\/@inModels.0&quot;\/&gt;   &lt;ocl:OclModel location=&quot;8:16-8:21&quot; name=&quot;Ecore&quot; elements=&quot;\/0\/@elements.0\/@inPattern\/@elements.0\/@type&quot;\/&gt;   &lt;ocl:OclModel location=&quot;12:14-12:19&quot; name=&quot;Ecore&quot; elements=&quot;\/0\/@elements.0\/@outPattern\/@elements.0\/@type&quot;\/&gt;   &lt;ocl:OclModel location=&quot;19:16-19:21&quot; name=&quot;Ecore&quot; elements=&quot;\/0\/@elements.1\/@inPattern\/@elements.0\/@type&quot;\/&gt;   &lt;ocl:OclModel location=&quot;23:14-23:19&quot; name=&quot;Ecore&quot; elements=&quot;\/0\/@elements.1\/@outPattern\/@elements.0\/@type&quot;\/&gt; &lt;\/xmi:XMI&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u0437-\u0437\u0430 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0433\u043e\u0444\u0438\u0447\u0438 ATL \u0432 ANT-\u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a ATL.ecore. \u0410 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 XMI-\u0444\u0430\u0439\u043b \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d <a href=\"http:\/\/www.eclipse.org\/gmt\/2005\/ATL\">www.eclipse.org\/gmt\/2005\/ATL<\/a> \u0438 <a href=\"http:\/\/www.eclipse.org\/gmt\/2005\/OCL\">www.eclipse.org\/gmt\/2005\/OCL<\/a> \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 Eclipse. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f, \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e ATL-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p><\/blockquote>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c (\u0442.\u0435. \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438):<\/p>\n<pre><code>-- @nsURI Ecore = http:\/\/www.eclipse.org\/emf\/2002\/Ecore -- @path  ATL = platform:\/plugin\/org.eclipse.m2m.atl.common\/org\/eclipse\/m2m\/atl\/common\/resources\/ATL.ecore  module GenerateHelloWorld; create OUT : ATL from IN : Ecore;  rule EPackageToModule {     from         package : Ecore!EPackage     to         _module : ATL!Module (             name &lt;- 'HelloWorld5',             inModels &lt;- thisModule.createEcoreModel('IN'),             outModels &lt;- thisModule.createEcoreModel('OUT'),             elements &lt;- package.eClassifiers         ) }  rule EClassifierToRule {     from         classifier : Ecore!EClassifier     to         _rule : ATL!MatchedRule (             name &lt;- 'SayHelloTo' + classifier.name,             inPattern &lt;- _in,             outPattern &lt;- _out         ),         -- InPattern         _in : ATL!InPattern (             elements &lt;- inElement,             filter &lt;- inFilter         ),         inElement : ATL!SimpleInPatternElement (             varName &lt;- 'classifier',             type &lt;- thisModule.createEcoreModelElement('EClassifier')         ),         inFilter : ATL!&quot;OCL::OperatorCallExp&quot; (             operationName &lt;- '=',             source &lt;- thisModule.createAttributeCallExp(inElement, 'name'),             arguments &lt;- thisModule.createStringExp(classifier.name)         ),         -- OutPattern         _out : ATL!OutPattern (             elements &lt;- outElement         ),         outElement : ATL!SimpleOutPatternElement (             varName &lt;- 'datatype',             type &lt;- thisModule.createEcoreModelElement('EDataType'),             bindings &lt;- nameBinding         ),         nameBinding : ATL!Binding (             propertyName &lt;- 'name',             value &lt;- helloPrefixOperatorExp         ),         helloPrefixOperatorExp : ATL!&quot;OCL::OperatorCallExp&quot; (             operationName &lt;- '+',             source &lt;- thisModule.createStringExp('Hello'),             arguments &lt;- thisModule.createAttributeCallExp(inElement, 'name')         ) }  lazy rule createEcoreModel {     from         name : String     to         model : ATL!OclModel (             name &lt;- name,             metamodel &lt;- ecoreMM         ),         ecoreMM : ATL!OclModel (             name &lt;- 'Ecore'         ) }  lazy rule createEcoreModelElement {     from         name : String     to         element : ATL!&quot;OCL::OclModelElement&quot; (                model &lt;- model,             name &lt;- name         ),         model : ATL!OclModel (             name &lt;- 'Ecore'         ) }  lazy rule createAttributeCallExp {     from         var : ATL!SimpleInPatternElement,         name : String     to         expr : ATL!&quot;OCL::NavigationOrAttributeCallExp&quot; (             name &lt;- name,             source &lt;- variableExp         ),         variableExp : ATL!&quot;OCL::VariableExp&quot; (             referredVariable &lt;- var         ) }  lazy rule createStringExp {     from         str : String     to         expr : ATL!&quot;OCL::StringExp&quot; (             stringSymbol &lt;- str         ) } <\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 XSLT-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;project name=&quot;HelloWorldATL&quot;&gt;     &lt;target name=&quot;GenerateHelloWorld&quot;&gt;         &lt;!-- Loading metamodels --&gt;         &lt;atl.loadModel name=&quot;Ecore&quot; metamodel=&quot;MOF&quot; nsURI=&quot;http:\/\/www.eclipse.org\/emf\/2002\/Ecore&quot; \/&gt;         &lt;atl.loadModel name=&quot;ATL&quot; metamodel=&quot;MOF&quot; nsURI=&quot;platform:\/plugin\/org.eclipse.m2m.atl.common\/org\/eclipse\/m2m\/atl\/common\/resources\/ATL.ecore&quot; \/&gt;         &lt;!-- Loading models --&gt;         &lt;atl.loadModel name=&quot;IN&quot; metamodel=&quot;Ecore&quot; path=&quot;output\/MyModel2.xmi&quot; \/&gt;         &lt;!-- Transformation --&gt;         &lt;atl.launch path=&quot;GenerateHelloWorld.atl&quot;&gt;             &lt;inmodel name=&quot;IN&quot; model=&quot;IN&quot; \/&gt;             &lt;outmodel name=&quot;OUT&quot; model=&quot;OUT&quot; metamodel=&quot;ATL&quot; \/&gt;         &lt;\/atl.launch&gt;         &lt;!-- Saving models --&gt;         &lt;atl.saveModel model=&quot;OUT&quot; path=&quot;output\/HelloWorld5.atl&quot;&gt;             &lt;extractor name=&quot;ATL&quot; \/&gt;         &lt;\/atl.saveModel&gt;     &lt;\/target&gt; &lt;\/project&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b (\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 SayHelloToAlice \u0438 SayHelloToBob).<\/p>\n<h5><font color=\"#902213\">\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435&#8230;<\/font><\/h5>\n<p>  \u0428\u0443\u0442\u043a\u0430. \u0421\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h4><font color=\"#902213\"><b>Henshin<\/b><\/font><\/h4>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0439\u0442\u0438 \u0432 \u0441\u0435\u0431\u044f \u043f\u043e\u0441\u043b\u0435 \u0436\u0443\u0442\u043a\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 ATL, \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u044b\u0448\u043a\u043e\u0439.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u043b\u0438 Java (File -&gt; New -&gt; Other\u2026 -&gt; Java Project).<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 Henshin-\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443, \u043c\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043c\u043e\u0434\u0435\u043b\u044c. \u041a \u0441\u043b\u043e\u0432\u0443, \u0432 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/267335\/\">\u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e Sirius<\/a> \u043c\u044b \u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0f5\/972\/ef2\/0f5972ef2ba9480eabe3edae352786b1.png\"\/><\/p>\n<p>  \u0421\u043c\u044b\u0441\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u0435\u043d. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0431\u0438\u0432\u0430\u0435\u043c \u0411\u043e\u0431\u0430 \u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c \u041a\u0430\u0440\u043b\u043e\u0441\u0430. \u041f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445.<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044b\u043a\u043d\u0443\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0432 Sequential Unit, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p><\/blockquote>\n<p>  \u0421\u043b\u0435\u0432\u0430 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u0438\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0443 henshin-\u0444\u0430\u0439\u043b\u0430. \u0418 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 Henshin -&gt; Apply Transformation. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0442\u0430\u043a \u0438 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0441 \u0440\u0430\u043d\u0435\u0435 \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u043b\u043e QVTo-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/08d\/377\/c74\/08d377c7458c41839dfcba6a3baf3a42.png\"\/><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0410\u043b\u0438\u0441\u044b, \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u0411\u043e\u0431\u0430 \u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u041a\u0430\u0440\u043b\u043e\u0441\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u041d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/da2\/777\/90f\/da277790f05a41caabbb2c428691aa58.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">HelloWorldHenshin.Main<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package HelloWorldHenshin;  import org.eclipse.emf.henshin.interpreter.EGraph; import org.eclipse.emf.henshin.interpreter.Engine; import org.eclipse.emf.henshin.interpreter.UnitApplication; import org.eclipse.emf.henshin.interpreter.impl.EGraphImpl; import org.eclipse.emf.henshin.interpreter.impl.EngineImpl; import org.eclipse.emf.henshin.interpreter.impl.UnitApplicationImpl; import org.eclipse.emf.henshin.model.Module; import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;  public class Main {      public static void main(String[] args) {         HenshinResourceSet resourceSet = new HenshinResourceSet(&quot;model&quot;);         Module module = resourceSet.getModule(&quot;HelloWorld.henshin&quot;, false);         EGraph graph = new EGraphImpl(resourceSet.getResource(&quot;MyModel2.xmi&quot;));         Engine engine = new EngineImpl();          UnitApplication app = new UnitApplicationImpl(engine);         app.setEGraph(graph);         app.setUnit(module.getUnit(&quot;main&quot;));          if (!app.execute(null)) {             throw new RuntimeException(&quot;Execution error&quot;);         }          resourceSet.saveEObject(graph.getRoots().get(0), &quot;MyModel3.xmi&quot;);     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>  \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.eclipse.org\/henshin\/examples.php\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b Henshin-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439<\/a>. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0421\u0435\u0440\u043f\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0438 \u043e\u0431\u0435\u0434\u0430\u044e\u0449\u0438\u0445 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u043e\u0432.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432: <a href=\"http:\/\/www.emorf.org\/\">EMorF<\/a>, <a href=\"http:\/\/user.cs.tu-berlin.de\/~gragra\/agg\/\">AGG<\/a>, <a href=\"https:\/\/www.eclipse.org\/viatra\/\">VIATRA<\/a> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<h4><font color=\"#902213\"><b>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/b><\/font><\/h4>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u0412\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2013 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>  \u0423\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 (SPO, DPO), \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0443\u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0445 Object Management Group (<a href=\"http:\/\/www.omg.org\/spec\/XMI\/\">XMI<\/a>, <a href=\"http:\/\/www.omg.org\/spec\/OCL\/\">OCL<\/a>, <a href=\"http:\/\/www.omg.org\/spec\/QVT\/\">QVT<\/a>, <a href=\"http:\/\/www.omg.org\/spec\/UML\/\">UML<\/a>).<\/p>\n<p>  \u0412\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 <a href=\"https:\/\/www.eclipse.org\/emf\/compare\/\">EMF Compare<\/a>.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d <a href=\"https:\/\/github.com\/AresEkb\/HelloWorldTransform\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 QVTo-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/273449\/\"> http:\/\/habrahabr.ru\/post\/273449\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fdd\/02c\/ed9\/fdd02ced973f401a883d5578cbd1f9f6.jpg\"\/><\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u00ab\u041d\u0430\u0447\u0430\u043b\u043e\u00bb \u041a\u0440\u0438\u0441\u0442\u043e\u0444\u0435\u0440\u0430 \u041d\u043e\u043b\u0430\u043d\u0430, \u0433\u0434\u0435 \u043b\u044e\u0434\u0438 \u0432\u0438\u0434\u0435\u043b\u0438 \u0441\u043d\u044b \u0432\u043e \u0441\u043d\u0430\u0445.<\/p>\n<p>  \u042d\u0442\u043e 7-\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u042f \u0443\u0436\u0435 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0422\u0430\u043a \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0445\u043e\u0442\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u00abHello World\u00bb, \u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0440\u043e\u0441 \u0432 \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-272074","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/272074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=272074"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/272074\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=272074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=272074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=272074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}