lutaml 0.9.43 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/docs.yml +63 -0
- data/.github/workflows/links.yml +99 -0
- data/.github/workflows/rake.yml +13 -2
- data/.github/workflows/release.yml +12 -6
- data/.gitignore +3 -0
- data/.rubocop.yml +11 -3
- data/.rubocop_todo.yml +336 -0
- data/Gemfile +18 -7
- data/README.adoc +1854 -21
- data/Rakefile +7 -1
- data/bin/plantuml2lutaml +3 -3
- data/bin/yaml2lutaml +2 -2
- data/config/diagram_styles.yml +200 -0
- data/config/model_transformations.yml +266 -0
- data/config/package_metadata.example.yml +58 -0
- data/config/qea_schema.yml +1024 -0
- data/config/static_site.yml +166 -0
- data/docs/.github/workflows/docs.yml +66 -0
- data/docs/.github/workflows/links.yml +78 -0
- data/docs/CONTINUATION_PLAN.md +168 -0
- data/docs/Gemfile +13 -0
- data/docs/MIGRATION_GUIDE.md +202 -0
- data/docs/README.md +252 -0
- data/docs/REFACTOR_PLAN.md +214 -0
- data/docs/_config.yml +144 -0
- data/docs/_guides/diagram-generation.adoc +316 -0
- data/docs/_guides/index.adoc +135 -0
- data/docs/{lutaml-express.adoc → _guides/parsing/express-parsing.adoc} +7 -0
- data/docs/_guides/parsing/index.adoc +77 -0
- data/docs/{lutaml-xmi.adoc → _guides/parsing/xmi-parsing.adoc} +7 -0
- data/docs/_guides/sysml-modeling.adoc +37 -0
- data/docs/{lutaml-uml.adoc → _guides/uml-modeling.adoc} +8 -2
- data/docs/_pages/concepts/diagram-generation.adoc +337 -0
- data/docs/_pages/concepts/lur-format.adoc +711 -0
- data/docs/_pages/concepts/qea-parsing.adoc +418 -0
- data/docs/_pages/core/architecture.adoc +329 -0
- data/docs/_pages/core/installation.adoc +321 -0
- data/docs/_pages/core/overview.adoc +197 -0
- data/docs/_pages/index.adoc +48 -0
- data/docs/_pages/uml-syntax.adoc +995 -0
- data/docs/_references/configuration/diagram-styles.adoc +716 -0
- data/docs/_references/configuration/index.adoc +52 -0
- data/docs/_references/configuration/package-metadata.adoc +416 -0
- data/docs/_references/formats/index.adoc +42 -0
- data/docs/{lutaml_syntax.adoc → _references/formats/lutaml-syntax.adoc} +7 -0
- data/docs/_references/formats/qea-structure.adoc +1364 -0
- data/docs/_references/index.adoc +197 -0
- data/docs/_tutorials/index.adoc +109 -0
- data/docs/index.adoc +64 -0
- data/docs/lychee.toml +83 -0
- data/examples/UML_EA.DTD +6856 -0
- data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
- data/examples/lur/basic.lur +0 -0
- data/examples/lur/test-output.lur +0 -0
- data/examples/lur/test.lur +0 -0
- data/examples/lur_basic_usage.rb +220 -0
- data/examples/lur_cli_workflow.rb +262 -0
- data/examples/lur_statistics.rb +325 -0
- data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
- data/examples/qea/ArcGISWorkspace_template.qea +0 -0
- data/examples/qea/README_qea_parser.adoc +230 -0
- data/examples/qea/UmlModel_template.qea +0 -0
- data/examples/qea/basic.qea +0 -0
- data/examples/qea/simple.qea +0 -0
- data/examples/qea/simple_example.qea +0 -0
- data/examples/qea/test.qea +0 -0
- data/examples/xmi/20251010_current_plateau_v5.1.xmi +118121 -0
- data/examples/xmi/ArcGISWorkspace_template.xmi +1467 -0
- data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +158 -0
- data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +659 -0
- data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +411 -0
- data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +102 -0
- data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +169 -0
- data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +403 -0
- data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +175 -0
- data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +360 -0
- data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +195 -0
- data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +218 -0
- data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +471 -0
- data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +56 -0
- data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +262 -0
- data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +286 -0
- data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +164 -0
- data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +66 -0
- data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +95 -0
- data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +63 -0
- data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +306 -0
- data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +45 -0
- data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +193 -0
- data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +444 -0
- data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +168 -0
- data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +10 -0
- data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +60 -0
- data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +188 -0
- data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +426 -0
- data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +169 -0
- data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +277 -0
- data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +575 -0
- data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +255 -0
- data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +183 -0
- data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +10 -0
- data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +310 -0
- data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +155 -0
- data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +81 -0
- data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +520 -0
- data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +173 -0
- data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +722 -0
- data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +181 -0
- data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +92 -0
- data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +187 -0
- data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +217 -0
- data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +157 -0
- data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +180 -0
- data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +31 -0
- data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +166 -0
- data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +361 -0
- data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +32 -0
- data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +234 -0
- data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +183 -0
- data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +42 -0
- data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +192 -0
- data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +124 -0
- data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +140 -0
- data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +266 -0
- data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +80 -0
- data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +584 -0
- data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +155 -0
- data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +17 -0
- data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +78 -0
- data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +454 -0
- data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +81 -0
- data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +379 -0
- data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +126 -0
- data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +199 -0
- data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +162 -0
- data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +136 -0
- data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +161 -0
- data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +71 -0
- data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +209 -0
- data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +123 -0
- data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +218 -0
- data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +236 -0
- data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +353 -0
- data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +242 -0
- data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +246 -0
- data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +290 -0
- data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +60 -0
- data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +318 -0
- data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +24 -0
- data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +127 -0
- data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +412 -0
- data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +130 -0
- data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +96 -0
- data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +10 -0
- data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +143 -0
- data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +114 -0
- data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +37 -0
- data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +254 -0
- data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +187 -0
- data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +145 -0
- data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +76 -0
- data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +196 -0
- data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +35 -0
- data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +348 -0
- data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +72 -0
- data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +187 -0
- data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +114 -0
- data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +181 -0
- data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +196 -0
- data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +55 -0
- data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +195 -0
- data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +90 -0
- data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +174 -0
- data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +142 -0
- data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +740 -0
- data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +105 -0
- data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +554 -0
- data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +228 -0
- data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +154 -0
- data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +273 -0
- data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +239 -0
- data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +10 -0
- data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +116 -0
- data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +200 -0
- data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +136 -0
- data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +181 -0
- data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +324 -0
- data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +342 -0
- data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +105 -0
- data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +681 -0
- data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +136 -0
- data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +718 -0
- data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +487 -0
- data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +292 -0
- data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +715 -0
- data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +116 -0
- data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +284 -0
- data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +159 -0
- data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +10 -0
- data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +172 -0
- data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +153 -0
- data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +290 -0
- data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +149 -0
- data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +194 -0
- data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +143 -0
- data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +357 -0
- data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +171 -0
- data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +218 -0
- data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +204 -0
- data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +263 -0
- data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +398 -0
- data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +174 -0
- data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +310 -0
- data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +144 -0
- data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +144 -0
- data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +198 -0
- data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +143 -0
- data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +114 -0
- data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +339 -0
- data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +429 -0
- data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +245 -0
- data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +173 -0
- data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +31 -0
- data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +256 -0
- data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +95 -0
- data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +176 -0
- data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +179 -0
- data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +207 -0
- data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +189 -0
- data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +165 -0
- data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +22 -0
- data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +266 -0
- data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +183 -0
- data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +303 -0
- data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +178 -0
- data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +158 -0
- data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +286 -0
- data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +305 -0
- data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +171 -0
- data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +174 -0
- data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +180 -0
- data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +656 -0
- data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +158 -0
- data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +409 -0
- data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +361 -0
- data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +96 -0
- data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +173 -0
- data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +97 -0
- data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +193 -0
- data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +32 -0
- data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +108 -0
- data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +49 -0
- data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +592 -0
- data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +42 -0
- data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +76 -0
- data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +147 -0
- data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +318 -0
- data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +45 -0
- data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +158 -0
- data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +200 -0
- data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +61 -0
- data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +78 -0
- data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +67 -0
- data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +79 -0
- data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +194 -0
- data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +96 -0
- data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +271 -0
- data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +332 -0
- data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +639 -0
- data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +134 -0
- data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +193 -0
- data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +58 -0
- data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +384 -0
- data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +590 -0
- data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +365 -0
- data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +165 -0
- data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +61 -0
- data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +76 -0
- data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +123 -0
- data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +202 -0
- data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +351 -0
- data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +189 -0
- data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +215 -0
- data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +124 -0
- data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +208 -0
- data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +302 -0
- data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +524 -0
- data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +730 -0
- data/examples/xmi/UML_EA.DTD +6856 -0
- data/examples/xmi/UmlModel_template.xmi +23 -0
- data/examples/xmi/basic.xmi +9086 -0
- data/examples/xmi/simple.xmi +655 -0
- data/examples/xmi/simple_example.xmi +23 -0
- data/examples/xmi/test.xmi +1703 -0
- data/exe/lutaml +2 -16
- data/exe/lutaml-wsd2uml +3 -3
- data/exe/lutaml-yaml2uml +2 -2
- data/lib/lutaml/cli/commands/base_command.rb +118 -0
- data/lib/lutaml/cli/element_identifier.rb +165 -0
- data/lib/lutaml/cli/enhanced_formatter.rb +502 -0
- data/lib/lutaml/cli/interactive_shell.rb +911 -0
- data/lib/lutaml/cli/lml_commands.rb +201 -0
- data/lib/lutaml/cli/output_formatter.rb +348 -0
- data/lib/lutaml/cli/resource_registry.rb +127 -0
- data/lib/lutaml/cli/tree_view_formatter.rb +308 -0
- data/lib/lutaml/cli/uml/build_command.rb +538 -0
- data/lib/lutaml/cli/uml/diagram_command.rb +421 -0
- data/lib/lutaml/cli/uml/export_command.rb +78 -0
- data/lib/lutaml/cli/uml/find_command.rb +122 -0
- data/lib/lutaml/cli/uml/info_command.rb +104 -0
- data/lib/lutaml/cli/uml/inspect_command.rb +88 -0
- data/lib/lutaml/cli/uml/ls_command.rb +105 -0
- data/lib/lutaml/cli/uml/repl_command.rb +50 -0
- data/lib/lutaml/cli/uml/search_command.rb +88 -0
- data/lib/lutaml/cli/uml/serve_command.rb +59 -0
- data/lib/lutaml/cli/uml/shared_helpers.rb +51 -0
- data/lib/lutaml/cli/uml/spa_command.rb +209 -0
- data/lib/lutaml/cli/uml/stats_command.rb +60 -0
- data/lib/lutaml/cli/uml/tree_command.rb +85 -0
- data/lib/lutaml/cli/uml/validate_command.rb +195 -0
- data/lib/lutaml/cli/uml/verify_command.rb +107 -0
- data/lib/lutaml/cli/uml_commands.rb +163 -0
- data/lib/lutaml/cli.rb +72 -0
- data/lib/lutaml/command_line.rb +8 -6
- data/lib/lutaml/converter/dsl_to_uml.rb +2 -0
- data/lib/lutaml/converter/xmi_to_uml.rb +40 -19
- data/lib/lutaml/ea/diagram/configuration.rb +379 -0
- data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +81 -0
- data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +330 -0
- data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +55 -0
- data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +69 -0
- data/lib/lutaml/ea/diagram/extractor.rb +559 -0
- data/lib/lutaml/ea/diagram/layout_engine.rb +251 -0
- data/lib/lutaml/ea/diagram/path_builder.rb +258 -0
- data/lib/lutaml/ea/diagram/style_parser.rb +315 -0
- data/lib/lutaml/ea/diagram/style_resolver.rb +291 -0
- data/lib/lutaml/ea/diagram/svg_renderer.rb +285 -0
- data/lib/lutaml/ea/diagram/util.rb +69 -0
- data/lib/lutaml/ea/diagram.rb +77 -0
- data/lib/lutaml/express/parsers/exp.rb +1 -1
- data/lib/lutaml/express.rb +4 -2
- data/lib/lutaml/formatter/base.rb +6 -6
- data/lib/lutaml/formatter/graphviz.rb +10 -8
- data/lib/lutaml/formatter.rb +3 -0
- data/lib/lutaml/layout/engine.rb +9 -7
- data/lib/lutaml/layout/graph_viz_engine.rb +2 -1
- data/lib/lutaml/layout.rb +8 -0
- data/lib/lutaml/model_transformations/configuration.rb +333 -0
- data/lib/lutaml/model_transformations/format_registry.rb +394 -0
- data/lib/lutaml/model_transformations/parsers/base_parser.rb +389 -0
- data/lib/lutaml/model_transformations/parsers/qea_parser.rb +455 -0
- data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +301 -0
- data/lib/lutaml/model_transformations/transformation_engine.rb +409 -0
- data/lib/lutaml/model_transformations.rb +143 -0
- data/lib/lutaml/parser.rb +15 -7
- data/lib/lutaml/qea/benchmark.rb +212 -0
- data/lib/lutaml/qea/database.rb +324 -0
- data/lib/lutaml/qea/factory/association_transformer.rb +115 -0
- data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +60 -0
- data/lib/lutaml/qea/factory/attribute_transformer.rb +103 -0
- data/lib/lutaml/qea/factory/base_transformer.rb +132 -0
- data/lib/lutaml/qea/factory/class_transformer.rb +734 -0
- data/lib/lutaml/qea/factory/constraint_transformer.rb +78 -0
- data/lib/lutaml/qea/factory/data_type_transformer.rb +162 -0
- data/lib/lutaml/qea/factory/diagram_transformer.rb +182 -0
- data/lib/lutaml/qea/factory/document_builder.rb +275 -0
- data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +260 -0
- data/lib/lutaml/qea/factory/enum_transformer.rb +87 -0
- data/lib/lutaml/qea/factory/generalization_transformer.rb +106 -0
- data/lib/lutaml/qea/factory/instance_transformer.rb +96 -0
- data/lib/lutaml/qea/factory/object_property_transformer.rb +61 -0
- data/lib/lutaml/qea/factory/operation_transformer.rb +75 -0
- data/lib/lutaml/qea/factory/package_transformer.rb +199 -0
- data/lib/lutaml/qea/factory/reference_resolver.rb +99 -0
- data/lib/lutaml/qea/factory/tagged_value_transformer.rb +41 -0
- data/lib/lutaml/qea/factory/transformer_registry.rb +85 -0
- data/lib/lutaml/qea/file_detector.rb +178 -0
- data/lib/lutaml/qea/infrastructure/database_connection.rb +100 -0
- data/lib/lutaml/qea/infrastructure/schema_reader.rb +136 -0
- data/lib/lutaml/qea/infrastructure/table_reader.rb +224 -0
- data/lib/lutaml/qea/models/base_model.rb +48 -0
- data/lib/lutaml/qea/models/ea_attribute.rb +135 -0
- data/lib/lutaml/qea/models/ea_attribute_tag.rb +109 -0
- data/lib/lutaml/qea/models/ea_complexity_type.rb +81 -0
- data/lib/lutaml/qea/models/ea_connector.rb +162 -0
- data/lib/lutaml/qea/models/ea_connector_type.rb +62 -0
- data/lib/lutaml/qea/models/ea_constraint_type.rb +65 -0
- data/lib/lutaml/qea/models/ea_datatype.rb +108 -0
- data/lib/lutaml/qea/models/ea_diagram.rb +117 -0
- data/lib/lutaml/qea/models/ea_diagram_link.rb +80 -0
- data/lib/lutaml/qea/models/ea_diagram_object.rb +86 -0
- data/lib/lutaml/qea/models/ea_diagram_type.rb +58 -0
- data/lib/lutaml/qea/models/ea_document.rb +68 -0
- data/lib/lutaml/qea/models/ea_object.rb +208 -0
- data/lib/lutaml/qea/models/ea_object_constraint.rb +62 -0
- data/lib/lutaml/qea/models/ea_object_property.rb +96 -0
- data/lib/lutaml/qea/models/ea_object_type.rb +75 -0
- data/lib/lutaml/qea/models/ea_operation.rb +153 -0
- data/lib/lutaml/qea/models/ea_operation_param.rb +73 -0
- data/lib/lutaml/qea/models/ea_package.rb +75 -0
- data/lib/lutaml/qea/models/ea_script.rb +69 -0
- data/lib/lutaml/qea/models/ea_status_type.rb +68 -0
- data/lib/lutaml/qea/models/ea_stereotype.rb +59 -0
- data/lib/lutaml/qea/models/ea_tagged_value.rb +105 -0
- data/lib/lutaml/qea/models/ea_xref.rb +174 -0
- data/lib/lutaml/qea/parser.rb +61 -0
- data/lib/lutaml/qea/repositories/base_repository.rb +215 -0
- data/lib/lutaml/qea/repositories/object_repository.rb +221 -0
- data/lib/lutaml/qea/services/configuration.rb +211 -0
- data/lib/lutaml/qea/services/database_loader.rb +215 -0
- data/lib/lutaml/qea/validation/association_validator.rb +75 -0
- data/lib/lutaml/qea/validation/attribute_validator.rb +103 -0
- data/lib/lutaml/qea/validation/base_validator.rb +305 -0
- data/lib/lutaml/qea/validation/class_validator.rb +123 -0
- data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +111 -0
- data/lib/lutaml/qea/validation/database/orphan_validator.rb +155 -0
- data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +130 -0
- data/lib/lutaml/qea/validation/diagram_validator.rb +114 -0
- data/lib/lutaml/qea/validation/formatters/json_formatter.rb +137 -0
- data/lib/lutaml/qea/validation/formatters/text_formatter.rb +235 -0
- data/lib/lutaml/qea/validation/operation_validator.rb +81 -0
- data/lib/lutaml/qea/validation/package_validator.rb +113 -0
- data/lib/lutaml/qea/validation/validation_engine.rb +497 -0
- data/lib/lutaml/qea/validation/validation_message.rb +144 -0
- data/lib/lutaml/qea/validation/validation_result.rb +212 -0
- data/lib/lutaml/qea/validation/validator_registry.rb +134 -0
- data/lib/lutaml/qea/verification/comparison_result.rb +264 -0
- data/lib/lutaml/qea/verification/document_normalizer.rb +177 -0
- data/lib/lutaml/qea/verification/document_verifier.rb +320 -0
- data/lib/lutaml/qea/verification/element_comparator.rb +306 -0
- data/lib/lutaml/qea/verification/structure_matcher.rb +287 -0
- data/lib/lutaml/qea.rb +226 -0
- data/lib/lutaml/sysml/allocate.rb +2 -0
- data/lib/lutaml/sysml/allocated.rb +2 -0
- data/lib/lutaml/sysml/binding_connector.rb +2 -0
- data/lib/lutaml/sysml/block.rb +2 -0
- data/lib/lutaml/sysml/constraint_block.rb +2 -0
- data/lib/lutaml/sysml/copy.rb +2 -0
- data/lib/lutaml/sysml/derive_requirement.rb +2 -0
- data/lib/lutaml/sysml/nested_connector_end.rb +2 -0
- data/lib/lutaml/sysml/refine.rb +2 -0
- data/lib/lutaml/sysml/requirement.rb +2 -0
- data/lib/lutaml/sysml/requirement_related.rb +2 -0
- data/lib/lutaml/sysml/satisfy.rb +2 -0
- data/lib/lutaml/sysml/test_case.rb +2 -0
- data/lib/lutaml/sysml/trace.rb +2 -0
- data/lib/lutaml/sysml/verify.rb +2 -0
- data/lib/lutaml/sysml/xmi_file.rb +2 -0
- data/lib/lutaml/sysml.rb +3 -1
- data/lib/lutaml/uml/association.rb +4 -0
- data/lib/lutaml/uml/class.rb +11 -9
- data/lib/lutaml/uml/classifier.rb +3 -0
- data/lib/lutaml/uml/comment.rb +13 -0
- data/lib/lutaml/uml/data_type.rb +7 -6
- data/lib/lutaml/uml/diagram.rb +12 -0
- data/lib/lutaml/uml/diagram_link.rb +26 -0
- data/lib/lutaml/uml/diagram_object.rb +30 -0
- data/lib/lutaml/uml/document.rb +18 -0
- data/lib/lutaml/uml/enum.rb +4 -3
- data/lib/lutaml/uml/fontname.rb +13 -0
- data/lib/lutaml/uml/generalization.rb +2 -0
- data/lib/lutaml/uml/group.rb +2 -0
- data/lib/lutaml/uml/namespace.rb +2 -2
- data/lib/lutaml/uml/node/{field.rb → attribute.rb} +4 -4
- data/lib/lutaml/uml/node/base.rb +1 -1
- data/lib/lutaml/uml/node/class_node.rb +12 -12
- data/lib/lutaml/uml/node/class_relationship.rb +2 -2
- data/lib/lutaml/uml/node/document.rb +2 -2
- data/lib/lutaml/uml/node/method_argument.rb +3 -3
- data/lib/lutaml/uml/node/{method.rb → operation.rb} +4 -4
- data/lib/lutaml/uml/node/relationship.rb +3 -3
- data/lib/lutaml/uml/package.rb +7 -4
- data/lib/lutaml/uml/package_path.rb +235 -0
- data/lib/lutaml/uml/parsers/attribute.rb +2 -2
- data/lib/lutaml/uml/parsers/dsl.rb +3 -4
- data/lib/lutaml/uml/parsers/yaml.rb +1 -1
- data/lib/lutaml/uml/qualified_name.rb +178 -0
- data/lib/lutaml/uml/tagged_value.rb +21 -0
- data/lib/lutaml/uml/top_element.rb +7 -1
- data/lib/lutaml/uml/top_element_attribute.rb +4 -0
- data/lib/lutaml/uml/validation/document_structure_validator.rb +389 -0
- data/lib/lutaml/uml.rb +89 -45
- data/lib/lutaml/uml_repository/error_handler.rb +203 -0
- data/lib/lutaml/uml_repository/exporters/base_exporter.rb +61 -0
- data/lib/lutaml/uml_repository/exporters/json_exporter.rb +344 -0
- data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +598 -0
- data/lib/lutaml/uml_repository/index_builder.rb +460 -0
- data/lib/lutaml/uml_repository/lazy_repository.rb +238 -0
- data/lib/lutaml/uml_repository/package_exporter.rb +336 -0
- data/lib/lutaml/uml_repository/package_loader.rb +220 -0
- data/lib/lutaml/uml_repository/package_metadata.rb +77 -0
- data/lib/lutaml/uml_repository/presenters/association_presenter.rb +86 -0
- data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +101 -0
- data/lib/lutaml/uml_repository/presenters/class_presenter.rb +75 -0
- data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +108 -0
- data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +508 -0
- data/lib/lutaml/uml_repository/presenters/element_presenter.rb +92 -0
- data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +83 -0
- data/lib/lutaml/uml_repository/presenters/package_presenter.rb +48 -0
- data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +76 -0
- data/lib/lutaml/uml_repository/queries/association_query.rb +187 -0
- data/lib/lutaml/uml_repository/queries/base_query.rb +45 -0
- data/lib/lutaml/uml_repository/queries/class_query.rb +117 -0
- data/lib/lutaml/uml_repository/queries/diagram_query.rb +111 -0
- data/lib/lutaml/uml_repository/queries/inheritance_query.rb +259 -0
- data/lib/lutaml/uml_repository/queries/package_query.rb +239 -0
- data/lib/lutaml/uml_repository/queries/search_query.rb +357 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +28 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +46 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +84 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +84 -0
- data/lib/lutaml/uml_repository/query_dsl/order.rb +90 -0
- data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +296 -0
- data/lib/lutaml/uml_repository/repository.rb +764 -0
- data/lib/lutaml/uml_repository/repository_enhanced.rb +439 -0
- data/lib/lutaml/uml_repository/search_result.rb +86 -0
- data/lib/lutaml/uml_repository/static_site/configuration.rb +270 -0
- data/lib/lutaml/uml_repository/static_site/data_transformer.rb +967 -0
- data/lib/lutaml/uml_repository/static_site/generator.rb +401 -0
- data/lib/lutaml/uml_repository/static_site/id_generator.rb +115 -0
- data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +317 -0
- data/lib/lutaml/uml_repository/static_site.rb +88 -0
- data/lib/lutaml/uml_repository/statistics_calculator.rb +334 -0
- data/lib/lutaml/uml_repository/validators/repository_validator.rb +404 -0
- data/lib/lutaml/uml_repository/web_ui/app.rb +144 -0
- data/lib/lutaml/uml_repository/web_ui/public/app.js +452 -0
- data/lib/lutaml/uml_repository/web_ui/public/styles.css +381 -0
- data/lib/lutaml/uml_repository/web_ui/views/index.erb +40 -0
- data/lib/lutaml/uml_repository.rb +97 -0
- data/lib/lutaml/version.rb +3 -1
- data/lib/lutaml/xmi/liquid_drops/association_drop.rb +60 -58
- data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +55 -53
- data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +15 -13
- data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +50 -46
- data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +19 -17
- data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +93 -90
- data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +26 -24
- data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +26 -24
- data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +40 -37
- data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +20 -18
- data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +64 -62
- data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +142 -140
- data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +174 -170
- data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +23 -21
- data/lib/lutaml/xmi/liquid_drops/package_drop.rb +95 -93
- data/lib/lutaml/xmi/liquid_drops/root_drop.rb +28 -25
- data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +39 -37
- data/lib/lutaml/xmi/parsers/xmi_base.rb +27 -17
- data/lib/lutaml/xmi/parsers/xml.rb +9 -9
- data/lib/lutaml/xmi.rb +37 -6
- data/lib/lutaml/xml/parsers/xml.rb +3 -1
- data/lib/lutaml/xml.rb +3 -1
- data/lib/lutaml.rb +14 -2
- data/lutaml.gemspec +16 -8
- data/plateau_all_packages.lur +0 -0
- data/templates/static_site/assets/scripts/app.js +45 -0
- data/templates/static_site/assets/scripts/core/state.js +419 -0
- data/templates/static_site/assets/scripts/core/utils.js +133 -0
- data/templates/static_site/assets/scripts/ui/details.js +74 -0
- data/templates/static_site/assets/scripts/ui/diagrams.js +345 -0
- data/templates/static_site/assets/scripts/ui/search.js +187 -0
- data/templates/static_site/assets/scripts/ui/sidebar.js +214 -0
- data/templates/static_site/assets/styles/00-variables.css +144 -0
- data/templates/static_site/assets/styles/01-reset.css +79 -0
- data/templates/static_site/assets/styles/02-base.css +149 -0
- data/templates/static_site/assets/styles/03-layout.css +171 -0
- data/templates/static_site/assets/styles/04-components.css +856 -0
- data/templates/static_site/assets/styles/05-utilities.css +89 -0
- data/templates/static_site/assets/styles/06-diagrams.css +277 -0
- data/templates/static_site/components/class_details.liquid +328 -0
- data/templates/static_site/components/content.liquid +508 -0
- data/templates/static_site/components/diagram_list.liquid +52 -0
- data/templates/static_site/components/diagram_viewer.liquid +71 -0
- data/templates/static_site/components/header.liquid +134 -0
- data/templates/static_site/components/package_details.liquid +119 -0
- data/templates/static_site/components/sidebar.liquid +46 -0
- data/templates/static_site/components/tree_node.liquid +81 -0
- data/templates/static_site/multi_file.liquid +46 -0
- data/templates/static_site/single_file.liquid +52 -0
- metadata +604 -31
- data/CODE_OF_CONDUCT.md +0 -74
- data/docs/lutaml-sysml.adoc +0 -10
|
@@ -0,0 +1,995 @@
|
|
|
1
|
+
== LutaML diagram syntax
|
|
2
|
+
|
|
3
|
+
=== Purpose
|
|
4
|
+
|
|
5
|
+
LutaML Diagram is a textual language for defining UML diagrams. It is designed
|
|
6
|
+
to be simple and easy to read and write.
|
|
7
|
+
|
|
8
|
+
The language is used to define the structure of a UML diagram, supporting
|
|
9
|
+
classes, attributes, methods, associations, data types, and enumerations.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
=== Diagram
|
|
13
|
+
|
|
14
|
+
A diagram is defined by a `diagram` block. The block contains a list of
|
|
15
|
+
elements that are used to define the diagram.
|
|
16
|
+
|
|
17
|
+
[source]
|
|
18
|
+
----
|
|
19
|
+
diagram CeramicInformationModel {
|
|
20
|
+
title "Ceramic Information Model" <1>
|
|
21
|
+
caption "Modeling klins, colors, and cultural artifacts" <2>
|
|
22
|
+
fontname "Times New Roman" <3>
|
|
23
|
+
}
|
|
24
|
+
----
|
|
25
|
+
<1> `title`: (optional) set a custom title for the diagram
|
|
26
|
+
<2> `caption`: (optional) set a custom caption for the diagram
|
|
27
|
+
<3> `fontname`: (optional) specify the font name to use
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
== LutaML UML syntax
|
|
31
|
+
|
|
32
|
+
=== Purpose
|
|
33
|
+
|
|
34
|
+
LutaML UML is a textual language for defining UML models, based on the OMG UML
|
|
35
|
+
2.5 specification.
|
|
36
|
+
|
|
37
|
+
It is used for defining the structure of a UML model, supporting packages,
|
|
38
|
+
classes, attributes, methods, associations, data types, and enumerations.
|
|
39
|
+
|
|
40
|
+
=== Syntax
|
|
41
|
+
|
|
42
|
+
The syntax supports the following modeling elements:
|
|
43
|
+
|
|
44
|
+
* Package
|
|
45
|
+
* Class
|
|
46
|
+
** Attributes
|
|
47
|
+
** Methods
|
|
48
|
+
* Enumeration
|
|
49
|
+
* Data types
|
|
50
|
+
* Associations
|
|
51
|
+
* Comments
|
|
52
|
+
* Value specification
|
|
53
|
+
|
|
54
|
+
=== Common
|
|
55
|
+
|
|
56
|
+
==== Element structure
|
|
57
|
+
|
|
58
|
+
The following syntax is used to define a common structure for supported elements.
|
|
59
|
+
|
|
60
|
+
The elements supported are:
|
|
61
|
+
|
|
62
|
+
* `package`
|
|
63
|
+
* `class`
|
|
64
|
+
* `enum`
|
|
65
|
+
* `data_type`
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
[source]
|
|
69
|
+
----
|
|
70
|
+
[visibility] [element_type] element_name {
|
|
71
|
+
// element definition
|
|
72
|
+
}
|
|
73
|
+
----
|
|
74
|
+
|
|
75
|
+
Where:
|
|
76
|
+
|
|
77
|
+
`visibility`:: (optional) Represents the visibility of the element. It accepts the following values:
|
|
78
|
+
|
|
79
|
+
`-` (private):: The element is private.
|
|
80
|
+
`+` (public):: The element is public.
|
|
81
|
+
`#` (protected):: The element is protected.
|
|
82
|
+
`~` (friendly):: The element is friendly.
|
|
83
|
+
|
|
84
|
+
`element_type`::
|
|
85
|
+
(optional for `package` and `class` blocks)
|
|
86
|
+
The type of the element. The default value differs in each context: in a
|
|
87
|
+
`package` block, the default value is `class`; in a `class` block, the default
|
|
88
|
+
value is `attribute`. In other contexts, the element type is required.
|
|
89
|
+
+
|
|
90
|
+
It can be one of the following:
|
|
91
|
+
|
|
92
|
+
`package`:: A package.
|
|
93
|
+
`class`:: A class.
|
|
94
|
+
`enum`:: An enumeration.
|
|
95
|
+
`data_type`:: A data type.
|
|
96
|
+
|
|
97
|
+
`element_name`:: The name of the element.
|
|
98
|
+
|
|
99
|
+
`element definition`:: The definition of the element.
|
|
100
|
+
|
|
101
|
+
NOTE: A named element is an element that can have a name and a defined
|
|
102
|
+
visibility (`public`, `private`, `protected`, `package`).
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
[example]
|
|
106
|
+
.Declaring a class named "Ceramic"
|
|
107
|
+
====
|
|
108
|
+
[source]
|
|
109
|
+
----
|
|
110
|
+
class Ceramic {
|
|
111
|
+
// class definition
|
|
112
|
+
}
|
|
113
|
+
----
|
|
114
|
+
====
|
|
115
|
+
|
|
116
|
+
==== Comment
|
|
117
|
+
|
|
118
|
+
===== Single-line comment
|
|
119
|
+
|
|
120
|
+
Comments can be entered at any line after the special symbol pattern `//`.
|
|
121
|
+
|
|
122
|
+
These lines are ignored by the parser.
|
|
123
|
+
|
|
124
|
+
[example]
|
|
125
|
+
====
|
|
126
|
+
[source]
|
|
127
|
+
----
|
|
128
|
+
// TODO: attributes <1>
|
|
129
|
+
class Ceramic {
|
|
130
|
+
// Write docs <2>
|
|
131
|
+
+ glazeType: GlazeType // Glaze type <3>
|
|
132
|
+
}
|
|
133
|
+
----
|
|
134
|
+
|
|
135
|
+
<1> A line beginning with `//` is a comment.
|
|
136
|
+
<2> A line beginning with whitespaces followed by `//` is a comment.
|
|
137
|
+
<3> A line with `//` is a tail comment: the text after `//` is a comment.
|
|
138
|
+
====
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
===== Multi-line comment
|
|
142
|
+
|
|
143
|
+
Use `\**`(one line comment) or `*| |*`(multiline comment) to create comment object for diagram entry.
|
|
144
|
+
|
|
145
|
+
If this syntax is used inside a `class`/`enum`/`association` block, it will be created for owner of this block.
|
|
146
|
+
|
|
147
|
+
[source]
|
|
148
|
+
----
|
|
149
|
+
** I am a document comment
|
|
150
|
+
|
|
151
|
+
*|
|
|
152
|
+
This is a
|
|
153
|
+
multi-line
|
|
154
|
+
document comment.
|
|
155
|
+
*|
|
|
156
|
+
|
|
157
|
+
class A
|
|
158
|
+
enum B {
|
|
159
|
+
** one line enum comment
|
|
160
|
+
foo
|
|
161
|
+
*|
|
|
162
|
+
This is a
|
|
163
|
+
multi-line
|
|
164
|
+
class comment.
|
|
165
|
+
*|
|
|
166
|
+
bar
|
|
167
|
+
}
|
|
168
|
+
----
|
|
169
|
+
|
|
170
|
+
==== Description
|
|
171
|
+
|
|
172
|
+
The `definition` block is used to define a multiline description for a class.
|
|
173
|
+
|
|
174
|
+
Syntax:
|
|
175
|
+
|
|
176
|
+
[source]
|
|
177
|
+
----
|
|
178
|
+
class ClassName {
|
|
179
|
+
definition {
|
|
180
|
+
inner text
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
----
|
|
184
|
+
|
|
185
|
+
[example]
|
|
186
|
+
.Declaring a class named "Ceramic" with a description
|
|
187
|
+
====
|
|
188
|
+
[source]
|
|
189
|
+
----
|
|
190
|
+
class Ceramic {
|
|
191
|
+
definition {
|
|
192
|
+
This class represents a ceramic object.
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
----
|
|
196
|
+
====
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
=== Package
|
|
202
|
+
|
|
203
|
+
==== General
|
|
204
|
+
|
|
205
|
+
A package is a container for other elements, such as classes, data types, and
|
|
206
|
+
enumerations.
|
|
207
|
+
|
|
208
|
+
[source]
|
|
209
|
+
----
|
|
210
|
+
package PackageName {
|
|
211
|
+
// package definition
|
|
212
|
+
}
|
|
213
|
+
----
|
|
214
|
+
|
|
215
|
+
[example]
|
|
216
|
+
.Declaring a package named "Ceramic"
|
|
217
|
+
====
|
|
218
|
+
[source]
|
|
219
|
+
----
|
|
220
|
+
package Ceramic {
|
|
221
|
+
// package definition
|
|
222
|
+
}
|
|
223
|
+
----
|
|
224
|
+
====
|
|
225
|
+
|
|
226
|
+
==== Inner and multiple packages
|
|
227
|
+
|
|
228
|
+
A package can contain one or more inner packages.
|
|
229
|
+
|
|
230
|
+
[source]
|
|
231
|
+
----
|
|
232
|
+
package PackageName {
|
|
233
|
+
package SubPackageName {
|
|
234
|
+
// package definition
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
----
|
|
238
|
+
|
|
239
|
+
[example]
|
|
240
|
+
.Declaring a package named "Ceramic" with an inner package named "Glaze"
|
|
241
|
+
====
|
|
242
|
+
[source]
|
|
243
|
+
----
|
|
244
|
+
package Ceramic {
|
|
245
|
+
package Glaze {
|
|
246
|
+
// package definition
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
----
|
|
250
|
+
====
|
|
251
|
+
|
|
252
|
+
[example]
|
|
253
|
+
.Declaring a package named "Ceramic" with multiple inner packages
|
|
254
|
+
====
|
|
255
|
+
[source]
|
|
256
|
+
----
|
|
257
|
+
package Ceramic {
|
|
258
|
+
package Glaze {
|
|
259
|
+
// package definition
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
package Kiln {
|
|
263
|
+
// package definition
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
----
|
|
267
|
+
====
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
==== Visibility
|
|
271
|
+
|
|
272
|
+
A package can set visibility modifier on its contents, which can be one of the
|
|
273
|
+
following:
|
|
274
|
+
|
|
275
|
+
`+` (public):: The element is public and can be accessed from any other package.
|
|
276
|
+
`-` (private):: The element is private and can only be accessed from within the package.
|
|
277
|
+
`#` (protected):: The element is protected and can only be accessed from within the package.
|
|
278
|
+
`~` (friendly):: The element is friendly and can only be accessed from within the package and its subclasses.
|
|
279
|
+
|
|
280
|
+
The name of the element and its visibility are optional.
|
|
281
|
+
|
|
282
|
+
[example]
|
|
283
|
+
.Declaring a package named "Ceramic" with a public visibility modifier
|
|
284
|
+
====
|
|
285
|
+
[source]
|
|
286
|
+
----
|
|
287
|
+
package CeramicInformationModel {
|
|
288
|
+
class Ceramic {}
|
|
289
|
+
- class PrivateCeramic {}
|
|
290
|
+
# class ProtectedCeramic {}
|
|
291
|
+
}
|
|
292
|
+
----
|
|
293
|
+
====
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
=== Class
|
|
298
|
+
|
|
299
|
+
==== General
|
|
300
|
+
|
|
301
|
+
A class is a blueprint for creating objects. It represents a concept or
|
|
302
|
+
entity in the real world.
|
|
303
|
+
|
|
304
|
+
A class can be created inside a package or as a top-level element.
|
|
305
|
+
|
|
306
|
+
[source]
|
|
307
|
+
----
|
|
308
|
+
class ClassName {
|
|
309
|
+
// class definition
|
|
310
|
+
}
|
|
311
|
+
----
|
|
312
|
+
|
|
313
|
+
[example]
|
|
314
|
+
.Declaring a class named "Ceramic"
|
|
315
|
+
====
|
|
316
|
+
[source]
|
|
317
|
+
----
|
|
318
|
+
class Ceramic {
|
|
319
|
+
// class definition
|
|
320
|
+
}
|
|
321
|
+
----
|
|
322
|
+
====
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
==== Abstract class
|
|
326
|
+
|
|
327
|
+
An abstract class is a class that cannot
|
|
328
|
+
be instantiated. It is used as a base class for other classes.
|
|
329
|
+
|
|
330
|
+
[source]
|
|
331
|
+
----
|
|
332
|
+
abstract class ClassName {
|
|
333
|
+
// class definition
|
|
334
|
+
}
|
|
335
|
+
----
|
|
336
|
+
|
|
337
|
+
[example]
|
|
338
|
+
.Declaring an abstract class named "CeramicBluePrint"
|
|
339
|
+
====
|
|
340
|
+
[source]
|
|
341
|
+
----
|
|
342
|
+
abstract class CeramicBluePrint {
|
|
343
|
+
// class definition
|
|
344
|
+
}
|
|
345
|
+
----
|
|
346
|
+
====
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
==== Inheritance
|
|
350
|
+
|
|
351
|
+
Inheritance is a mechanism in which a new class inherits attributes and methods
|
|
352
|
+
from an existing class.
|
|
353
|
+
|
|
354
|
+
[source]
|
|
355
|
+
----
|
|
356
|
+
class ClassName {
|
|
357
|
+
generalize ParentClassName
|
|
358
|
+
}
|
|
359
|
+
----
|
|
360
|
+
|
|
361
|
+
[example]
|
|
362
|
+
.Declaring a class named "Ceramic" that inherits from "CeramicBluePrint"
|
|
363
|
+
====
|
|
364
|
+
[source]
|
|
365
|
+
----
|
|
366
|
+
class CeramicBluePrint {
|
|
367
|
+
// class definition
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
class Ceramic {
|
|
371
|
+
generalize CeramicBluePrint
|
|
372
|
+
}
|
|
373
|
+
----
|
|
374
|
+
====
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
// ==== Interface
|
|
380
|
+
|
|
381
|
+
// An interface is a class that contains only abstract methods. It is used to
|
|
382
|
+
// define a contract that other classes must implement.
|
|
383
|
+
|
|
384
|
+
// [source]
|
|
385
|
+
// ----
|
|
386
|
+
// interface InterfaceName {
|
|
387
|
+
// // class definition
|
|
388
|
+
// }
|
|
389
|
+
// ----
|
|
390
|
+
|
|
391
|
+
// [example]
|
|
392
|
+
// .Declaring an interface named "CeramicInterface"
|
|
393
|
+
// ====
|
|
394
|
+
// [source]
|
|
395
|
+
// ----
|
|
396
|
+
// interface CeramicInterface {
|
|
397
|
+
// // class definition
|
|
398
|
+
// }
|
|
399
|
+
// ----
|
|
400
|
+
// ====
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
=== Data types
|
|
406
|
+
|
|
407
|
+
==== General
|
|
408
|
+
|
|
409
|
+
A data type is a type that represents a set of values. It is used to define the
|
|
410
|
+
type of an attribute.
|
|
411
|
+
|
|
412
|
+
LutaML supports three types of data types: `data_type`, `primitive`, and `enum`.
|
|
413
|
+
|
|
414
|
+
[example]
|
|
415
|
+
====
|
|
416
|
+
[source]
|
|
417
|
+
----
|
|
418
|
+
diagram CeramicInformationModel {
|
|
419
|
+
title "Ceramic Information Model"
|
|
420
|
+
caption "Modeling kilns, colors, and cultural artifacts"
|
|
421
|
+
fontname "Times New Roman"
|
|
422
|
+
|
|
423
|
+
enum GlazeType {}
|
|
424
|
+
|
|
425
|
+
enum KilnType {
|
|
426
|
+
+kilnType: CharacterString
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
data_type "Ceramic Information" {
|
|
430
|
+
"glaze code"
|
|
431
|
+
"kiln temperature"
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
primitive Integer
|
|
435
|
+
|
|
436
|
+
enum Profile {
|
|
437
|
+
implicitAttributeProfile: CharacterString
|
|
438
|
+
+attributeProfile: CharacterString
|
|
439
|
+
-privateAttributeProfile: CharacterString
|
|
440
|
+
~friendlyAttributeProfile: CharacterString
|
|
441
|
+
#protectedAttributeProfile: CharacterString
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
----
|
|
445
|
+
====
|
|
446
|
+
|
|
447
|
+
==== Custom data type
|
|
448
|
+
|
|
449
|
+
A custom data type is a user-defined data type that can be used to define
|
|
450
|
+
attributes with specific properties.
|
|
451
|
+
|
|
452
|
+
Define a custom data type by using the `data_type` keyword with a list of
|
|
453
|
+
attributes.
|
|
454
|
+
|
|
455
|
+
Syntax:
|
|
456
|
+
|
|
457
|
+
[source]
|
|
458
|
+
----
|
|
459
|
+
data_type "DataTypeName" {
|
|
460
|
+
"attribute1"
|
|
461
|
+
"attribute2"
|
|
462
|
+
...
|
|
463
|
+
}
|
|
464
|
+
----
|
|
465
|
+
|
|
466
|
+
[example]
|
|
467
|
+
.Declaring a custom data type named "Ceramic Information" with two attributes
|
|
468
|
+
====
|
|
469
|
+
[source]
|
|
470
|
+
----
|
|
471
|
+
data_type "Ceramic Information" {
|
|
472
|
+
"glaze code"
|
|
473
|
+
"kiln temperature"
|
|
474
|
+
}
|
|
475
|
+
----
|
|
476
|
+
====
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
==== Basic data type
|
|
480
|
+
|
|
481
|
+
A basic data type is a predefined data type that is provided by the language.
|
|
482
|
+
|
|
483
|
+
The keyword `primitive` is used to define a basic data type.
|
|
484
|
+
|
|
485
|
+
Syntax:
|
|
486
|
+
|
|
487
|
+
[source]
|
|
488
|
+
----
|
|
489
|
+
primitive DataTypeName
|
|
490
|
+
----
|
|
491
|
+
|
|
492
|
+
[example]
|
|
493
|
+
.Declaring a primitive data type named "Integer"
|
|
494
|
+
====
|
|
495
|
+
[source]
|
|
496
|
+
----
|
|
497
|
+
primitive Integer
|
|
498
|
+
----
|
|
499
|
+
====
|
|
500
|
+
|
|
501
|
+
==== Enumeration
|
|
502
|
+
|
|
503
|
+
An enumeration is a list of named values. It is used to define a set of
|
|
504
|
+
constants.
|
|
505
|
+
|
|
506
|
+
The keyword `enum` is used to define an enumeration with a list of attributes.
|
|
507
|
+
|
|
508
|
+
Syntax:
|
|
509
|
+
|
|
510
|
+
[source]
|
|
511
|
+
----
|
|
512
|
+
enum EnumName {
|
|
513
|
+
+attribute1: DataType
|
|
514
|
+
-attribute2: DataType
|
|
515
|
+
...
|
|
516
|
+
}
|
|
517
|
+
----
|
|
518
|
+
|
|
519
|
+
Example:
|
|
520
|
+
|
|
521
|
+
[source]
|
|
522
|
+
----
|
|
523
|
+
enum Profile {
|
|
524
|
+
implicitAttributeProfile: CharacterString
|
|
525
|
+
+attributeProfile: CharacterString
|
|
526
|
+
-privateAttributeProfile: CharacterString
|
|
527
|
+
~friendlyAttributeProfile: CharacterString
|
|
528
|
+
#protectedAttributeProfile: CharacterString
|
|
529
|
+
}
|
|
530
|
+
----
|
|
531
|
+
|
|
532
|
+
NOTE: Attribute visibility is described in <<attribute-visibility>>.
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
=== Attributes
|
|
536
|
+
|
|
537
|
+
==== General
|
|
538
|
+
|
|
539
|
+
An attribute is a property of a class that represents a value or a relationship
|
|
540
|
+
to another class.
|
|
541
|
+
|
|
542
|
+
Syntax:
|
|
543
|
+
|
|
544
|
+
[source]
|
|
545
|
+
----
|
|
546
|
+
[visibility][/][attribute] name [:type][multiplicity][=initial value][{attribute body}]
|
|
547
|
+
----
|
|
548
|
+
|
|
549
|
+
Where:
|
|
550
|
+
|
|
551
|
+
`visibility`:: (optional) Represents the visibility of the attribute. It accepts the following values:
|
|
552
|
+
|
|
553
|
+
`-` (private):: The attribute is private.
|
|
554
|
+
`+` (public):: The attribute is public.
|
|
555
|
+
`#` (protected):: The attribute is protected.
|
|
556
|
+
`~` (friendly):: The attribute is friendly.
|
|
557
|
+
|
|
558
|
+
`/`:: Represents a derived attribute.
|
|
559
|
+
|
|
560
|
+
`attribute`:: (optional) Explicit declaration of an attribute. Without this
|
|
561
|
+
keyword, the attribute is still implicitly declared.
|
|
562
|
+
|
|
563
|
+
`name`:: The name of the attribute.
|
|
564
|
+
|
|
565
|
+
`type`:: (optional) The data type of the attribute.
|
|
566
|
+
|
|
567
|
+
`multiplicity`:: (optional) Represents the number of values that an attribute can have. It accepts the following values:
|
|
568
|
+
|
|
569
|
+
`1`:: The attribute has one value.
|
|
570
|
+
`*`:: The attribute has many values.
|
|
571
|
+
`[1..*]`:: The attribute has one or many values.
|
|
572
|
+
`[0..1]`:: The attribute has zero or one value.
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
`initial value`:: The initial value of the attribute, when no value is provided.
|
|
576
|
+
|
|
577
|
+
`{attribute body}`:: (optional) Additional properties for the attribute.
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
One can use explicit or implicit syntax for attribute definition.
|
|
581
|
+
|
|
582
|
+
Explicit syntax (`attribute` keyword included):
|
|
583
|
+
|
|
584
|
+
[source]
|
|
585
|
+
----
|
|
586
|
+
class A {
|
|
587
|
+
attribute my_attribute
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
enum A {
|
|
591
|
+
entry my_val2
|
|
592
|
+
}
|
|
593
|
+
----
|
|
594
|
+
|
|
595
|
+
Implicit syntax (`attribute` keyword omitted):
|
|
596
|
+
|
|
597
|
+
[source]
|
|
598
|
+
----
|
|
599
|
+
class A {
|
|
600
|
+
my_attribute
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
enum A {
|
|
604
|
+
my_val2
|
|
605
|
+
}
|
|
606
|
+
----
|
|
607
|
+
|
|
608
|
+
[[attribute-visibility]]
|
|
609
|
+
==== Visibility
|
|
610
|
+
|
|
611
|
+
Syntax for defining visibility: `[+|-|#|~] [attribute] attribute_name`.
|
|
612
|
+
|
|
613
|
+
LutaML uses these modifiers to define attribute (entry) visibility:
|
|
614
|
+
|
|
615
|
+
`+`:: public
|
|
616
|
+
`-`:: private
|
|
617
|
+
`#`:: protected
|
|
618
|
+
`~`:: package
|
|
619
|
+
|
|
620
|
+
[example]
|
|
621
|
+
.Declaring attributes with different visibility modifiers
|
|
622
|
+
====
|
|
623
|
+
[source]
|
|
624
|
+
----
|
|
625
|
+
class Figure {
|
|
626
|
+
// Public attribute `radius`
|
|
627
|
+
+ radius
|
|
628
|
+
// Private attribute `filled`
|
|
629
|
+
- filled
|
|
630
|
+
// Protected attribute `length`
|
|
631
|
+
# length
|
|
632
|
+
}
|
|
633
|
+
----
|
|
634
|
+
====
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
==== Description
|
|
638
|
+
|
|
639
|
+
The `definition` block is used to define a multiline description for an attribute.
|
|
640
|
+
|
|
641
|
+
Syntax:
|
|
642
|
+
|
|
643
|
+
[source]
|
|
644
|
+
----
|
|
645
|
+
class ClassName {
|
|
646
|
+
+ attribute_name {
|
|
647
|
+
definition {
|
|
648
|
+
inner text
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
----
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
[example]
|
|
656
|
+
.Declaring a class named "Ceramic" with an attribute named "glazeType" and a description
|
|
657
|
+
====
|
|
658
|
+
[source]
|
|
659
|
+
----
|
|
660
|
+
class Figure {
|
|
661
|
+
+ radius {
|
|
662
|
+
definition {
|
|
663
|
+
Radius of the Figure
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
----
|
|
668
|
+
====
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
=== Methods
|
|
672
|
+
|
|
673
|
+
==== General
|
|
674
|
+
|
|
675
|
+
A method is a function that is defined inside a class and can be called to
|
|
676
|
+
perform a specific task.
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
Syntax for defining methods:
|
|
680
|
+
|
|
681
|
+
[source]
|
|
682
|
+
----
|
|
683
|
+
[visibility] method-name (parameter-list): return type {property-modifier}
|
|
684
|
+
----
|
|
685
|
+
|
|
686
|
+
Where:
|
|
687
|
+
|
|
688
|
+
`visibility`:: (optional) Represents the visibility of the method. It accepts
|
|
689
|
+
the following values:
|
|
690
|
+
|
|
691
|
+
`-` (private)::: The method is private.
|
|
692
|
+
`+` (public)::: The method is public.
|
|
693
|
+
`#` (protected)::: The method is protected.
|
|
694
|
+
`~` (friendly)::: The method is friendly.
|
|
695
|
+
|
|
696
|
+
`return type`:: (optional) Represents the return type of the method.
|
|
697
|
+
|
|
698
|
+
`property-modifier`:: (optional) Represents the properties of the method.
|
|
699
|
+
By default, `unordered` and `nonunique` are applied.
|
|
700
|
+
It accepts the following values:
|
|
701
|
+
|
|
702
|
+
`redefines`::: The method redefines a method in the superclass.
|
|
703
|
+
`query`::: The method is a query and does not modify the state of the object.
|
|
704
|
+
`ordered`::: The method returns an ordered collection.
|
|
705
|
+
`unordered`::: (default) The method returns an unordered collection.
|
|
706
|
+
`unique`::: The method returns a collection with unique elements.
|
|
707
|
+
`nonunique`::: (default) The method returns a collection with non-unique elements.
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
`parameter-list`:: (optional) Represents the list of parameters that the method
|
|
711
|
+
accepts. It is defined as follows:
|
|
712
|
+
+
|
|
713
|
+
[source]
|
|
714
|
+
----
|
|
715
|
+
[direction] name:type [multiplicity] [=default] [{property string}]
|
|
716
|
+
----
|
|
717
|
+
+
|
|
718
|
+
Where:
|
|
719
|
+
|
|
720
|
+
`direction`:: (optional) Represents the direction of the parameter. It accepts
|
|
721
|
+
the following values:
|
|
722
|
+
`in`:: The parameter is an input parameter.
|
|
723
|
+
`out`:: The parameter is an output parameter.
|
|
724
|
+
`inout`:: The parameter is an input/output parameter.
|
|
725
|
+
`return`:: The parameter is a return parameter.
|
|
726
|
+
|
|
727
|
+
`name`:: The name of the parameter.
|
|
728
|
+
|
|
729
|
+
`type`:: The data type of the parameter.
|
|
730
|
+
|
|
731
|
+
`multiplicity`:: (optional) Represents the number of values that a parameter can have. It accepts the following values:
|
|
732
|
+
`1`:: The parameter has one value.
|
|
733
|
+
`*`:: The parameter has many values.
|
|
734
|
+
`[1..*]`:: The parameter has one or many values.
|
|
735
|
+
`[0..1]`:: The parameter has zero or one value.
|
|
736
|
+
|
|
737
|
+
`default`:: (optional) The default value of the parameter.
|
|
738
|
+
|
|
739
|
+
`property string`:: (optional) Additional properties for the parameter.
|
|
740
|
+
|
|
741
|
+
[example]
|
|
742
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType"
|
|
743
|
+
====
|
|
744
|
+
[source]
|
|
745
|
+
----
|
|
746
|
+
class Ceramic {
|
|
747
|
+
+ getGlazeType(): GlazeType
|
|
748
|
+
}
|
|
749
|
+
----
|
|
750
|
+
====
|
|
751
|
+
|
|
752
|
+
[example]
|
|
753
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that accepts a parameter
|
|
754
|
+
====
|
|
755
|
+
[source]
|
|
756
|
+
----
|
|
757
|
+
class Ceramic {
|
|
758
|
+
+ getGlazeType(glazeCode: CharacterString): GlazeType
|
|
759
|
+
}
|
|
760
|
+
----
|
|
761
|
+
====
|
|
762
|
+
|
|
763
|
+
[example]
|
|
764
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that accepts a parameter with a default value
|
|
765
|
+
====
|
|
766
|
+
[source]
|
|
767
|
+
----
|
|
768
|
+
class Ceramic {
|
|
769
|
+
+ getGlazeType(glazeCode: CharacterString = "123"): GlazeType
|
|
770
|
+
}
|
|
771
|
+
----
|
|
772
|
+
====
|
|
773
|
+
|
|
774
|
+
[example]
|
|
775
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of values
|
|
776
|
+
====
|
|
777
|
+
[source]
|
|
778
|
+
----
|
|
779
|
+
class Ceramic {
|
|
780
|
+
+ getGlazeType(): GlazeType[1..*]
|
|
781
|
+
}
|
|
782
|
+
----
|
|
783
|
+
====
|
|
784
|
+
[example]
|
|
785
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of unique values
|
|
786
|
+
====
|
|
787
|
+
[source]
|
|
788
|
+
----
|
|
789
|
+
class Ceramic {
|
|
790
|
+
+ getGlazeType(): GlazeType[1..*] {unique}
|
|
791
|
+
}
|
|
792
|
+
----
|
|
793
|
+
====
|
|
794
|
+
|
|
795
|
+
[example]
|
|
796
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered values
|
|
797
|
+
====
|
|
798
|
+
[source]
|
|
799
|
+
----
|
|
800
|
+
class Ceramic {
|
|
801
|
+
+ getGlazeType(): GlazeType[1..*] {ordered}
|
|
802
|
+
}
|
|
803
|
+
----
|
|
804
|
+
====
|
|
805
|
+
|
|
806
|
+
[example]
|
|
807
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered and unique values
|
|
808
|
+
====
|
|
809
|
+
[source]
|
|
810
|
+
----
|
|
811
|
+
class Ceramic {
|
|
812
|
+
+ getGlazeType(): GlazeType[1..*] {ordered, unique}
|
|
813
|
+
}
|
|
814
|
+
----
|
|
815
|
+
====
|
|
816
|
+
|
|
817
|
+
[example]
|
|
818
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered and unique values and redefines a method in the superclass
|
|
819
|
+
====
|
|
820
|
+
[source]
|
|
821
|
+
----
|
|
822
|
+
class Ceramic {
|
|
823
|
+
+ getGlazeType(): GlazeType[1..*] {ordered, unique, redefines}
|
|
824
|
+
}
|
|
825
|
+
----
|
|
826
|
+
====
|
|
827
|
+
|
|
828
|
+
[example]
|
|
829
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered and unique values and is a query method
|
|
830
|
+
====
|
|
831
|
+
[source]
|
|
832
|
+
----
|
|
833
|
+
class Ceramic {
|
|
834
|
+
+ getGlazeType(): GlazeType[1..*] {ordered, unique, query}
|
|
835
|
+
}
|
|
836
|
+
----
|
|
837
|
+
====
|
|
838
|
+
|
|
839
|
+
[example]
|
|
840
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered and unique values and is a query method with a parameter
|
|
841
|
+
====
|
|
842
|
+
[source]
|
|
843
|
+
----
|
|
844
|
+
class Ceramic {
|
|
845
|
+
+ getGlazeType(glazeCode: CharacterString): GlazeType[1..*] {ordered, unique, query}
|
|
846
|
+
}
|
|
847
|
+
----
|
|
848
|
+
====
|
|
849
|
+
|
|
850
|
+
[example]
|
|
851
|
+
.Declaring a class named "Ceramic" with a method named "getGlazeType" that returns a collection of ordered and unique values and is a query method with a parameter that has a default value
|
|
852
|
+
====
|
|
853
|
+
[source]
|
|
854
|
+
----
|
|
855
|
+
class Ceramic {
|
|
856
|
+
+ getGlazeType(glazeCode: CharacterString = "123"): GlazeType[1..*] {ordered, unique, query}
|
|
857
|
+
}
|
|
858
|
+
----
|
|
859
|
+
====
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
=== Associations
|
|
864
|
+
|
|
865
|
+
==== General
|
|
866
|
+
|
|
867
|
+
An association is a relationship between two classes. It represents how the
|
|
868
|
+
classes are connected to each other.
|
|
869
|
+
|
|
870
|
+
Syntax:
|
|
871
|
+
|
|
872
|
+
[source]
|
|
873
|
+
----
|
|
874
|
+
association {
|
|
875
|
+
// association definition
|
|
876
|
+
}
|
|
877
|
+
----
|
|
878
|
+
|
|
879
|
+
[example]
|
|
880
|
+
.Declaring an association between the classes "Ceramic" and "Glaze"
|
|
881
|
+
====
|
|
882
|
+
[source]
|
|
883
|
+
----
|
|
884
|
+
association {
|
|
885
|
+
Ceramic -> Glaze
|
|
886
|
+
}
|
|
887
|
+
----
|
|
888
|
+
====
|
|
889
|
+
|
|
890
|
+
==== Explicit declaration
|
|
891
|
+
|
|
892
|
+
Syntax:
|
|
893
|
+
|
|
894
|
+
[source]
|
|
895
|
+
----
|
|
896
|
+
association name {
|
|
897
|
+
owned_type association|composition|aggregation|generalization|uses
|
|
898
|
+
member_type association|composition|aggregation|generalization|uses
|
|
899
|
+
owned association_name[#attribute_name] [{property_string}][cardinality]
|
|
900
|
+
member association_name[#attribute_name] [{property_string}][cardinality]
|
|
901
|
+
}
|
|
902
|
+
----
|
|
903
|
+
|
|
904
|
+
where:
|
|
905
|
+
|
|
906
|
+
* `owned_type` - optional, use to define a bidirectional association (`association`|`composition`|`aggregation`|`generalization`|`uses`)
|
|
907
|
+
* `member_type` - association type (`association`|`composition`|`aggregation`|`generalization`|`uses`)
|
|
908
|
+
* `owned|member` - end of association, use `\#attribute_name` to set a role name
|
|
909
|
+
* `property_string` - property string for attributes associations
|
|
910
|
+
* `cardinality` - examples: `1..*`, `*`
|
|
911
|
+
|
|
912
|
+
Example:
|
|
913
|
+
|
|
914
|
+
[source]
|
|
915
|
+
----
|
|
916
|
+
class Association {
|
|
917
|
+
+association:
|
|
918
|
+
}
|
|
919
|
+
class Type {
|
|
920
|
+
+endType:
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
association AssociatingTypeAndAssociation {
|
|
924
|
+
type uses
|
|
925
|
+
from Association#+association {subsets relationship}[*]
|
|
926
|
+
to Type#+/endType {readOnly, subsets relatedElement} [1..*]
|
|
927
|
+
}
|
|
928
|
+
----
|
|
929
|
+
|
|
930
|
+
==== Undirected associations
|
|
931
|
+
|
|
932
|
+
The simplest way to define relationship between two classes is to use `generalize` keyword:
|
|
933
|
+
|
|
934
|
+
[source]
|
|
935
|
+
----
|
|
936
|
+
class Pet {}
|
|
937
|
+
class Cat {
|
|
938
|
+
generalize Pet
|
|
939
|
+
}
|
|
940
|
+
----
|
|
941
|
+
|
|
942
|
+
==== Attribute relationship
|
|
943
|
+
|
|
944
|
+
Derived attribute `relatedElement` can have 1 to many `Element` associated with it through `union`
|
|
945
|
+
|
|
946
|
+
[source]
|
|
947
|
+
----
|
|
948
|
+
class Relationship {
|
|
949
|
+
+/relatedElement: Element[1..*] {union}
|
|
950
|
+
}
|
|
951
|
+
class Element {}
|
|
952
|
+
----
|
|
953
|
+
|
|
954
|
+
=== Class' multiline "definition" property
|
|
955
|
+
|
|
956
|
+
==== Definition
|
|
957
|
+
|
|
958
|
+
Full syntax:
|
|
959
|
+
|
|
960
|
+
[source]
|
|
961
|
+
----
|
|
962
|
+
definition {
|
|
963
|
+
inner text
|
|
964
|
+
}
|
|
965
|
+
----
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
=== import files
|
|
969
|
+
|
|
970
|
+
Use `include` special word:
|
|
971
|
+
|
|
972
|
+
[source]
|
|
973
|
+
----
|
|
974
|
+
include path/to/file
|
|
975
|
+
----
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
=== Value specification
|
|
981
|
+
|
|
982
|
+
A value specification indicates one or several values in a model. Examples for value specifications include simple, mathematical expressions, such as `4+2`, and expressions with values from the object model, `Integer::MAX_INT-1`
|
|
983
|
+
|
|
984
|
+
[source]
|
|
985
|
+
----
|
|
986
|
+
class {Class name, if any} {as ref name, optional} {
|
|
987
|
+
{attribute name} = {attribute value}
|
|
988
|
+
{attribute name}:{attribute class} = {attribute value}
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
instance :{Class name, if any} {as ref name, optional} {
|
|
992
|
+
{attribute name} = {attribute value}
|
|
993
|
+
{attribute name}:{attribute class} = {attribute value}
|
|
994
|
+
}
|
|
995
|
+
----
|