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,711 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: LUR Package Format
|
|
3
|
+
parent: Core Topics
|
|
4
|
+
nav_order: 11
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Purpose
|
|
8
|
+
|
|
9
|
+
LUR (LutaML UML Repository) is a compressed binary package format designed for fast loading and efficient querying of UML models.
|
|
10
|
+
|
|
11
|
+
== What is LUR?
|
|
12
|
+
|
|
13
|
+
LUR packages are ZIP archives containing:
|
|
14
|
+
|
|
15
|
+
* Serialized UML model data (Marshal or YAML)
|
|
16
|
+
* Pre-built indexes for O(1) lookups
|
|
17
|
+
* Metadata and statistics
|
|
18
|
+
* Versioning information
|
|
19
|
+
|
|
20
|
+
[source]
|
|
21
|
+
----
|
|
22
|
+
model.lur (ZIP Archive)
|
|
23
|
+
├── metadata.yaml # Package info, statistics
|
|
24
|
+
├── models/
|
|
25
|
+
│ └── document.marshal # Serialized UML model
|
|
26
|
+
├── indexes/
|
|
27
|
+
│ └── all.marshal # Pre-built indexes
|
|
28
|
+
└── statistics.yaml # Detailed statistics
|
|
29
|
+
----
|
|
30
|
+
|
|
31
|
+
== Why LUR Format?
|
|
32
|
+
|
|
33
|
+
=== Fast Loading
|
|
34
|
+
|
|
35
|
+
**100x faster** than parsing source files:
|
|
36
|
+
|
|
37
|
+
[cols="1,1,1"]
|
|
38
|
+
|===
|
|
39
|
+
|Source |Load Time |Notes
|
|
40
|
+
|
|
41
|
+
|XMI file
|
|
42
|
+
|5-8 seconds
|
|
43
|
+
|XML parsing
|
|
44
|
+
|
|
45
|
+
|QEA file
|
|
46
|
+
|1-2 seconds
|
|
47
|
+
|SQLite access
|
|
48
|
+
|
|
49
|
+
|LUR package
|
|
50
|
+
|<100ms
|
|
51
|
+
|Pre-built, indexed
|
|
52
|
+
|===
|
|
53
|
+
|
|
54
|
+
=== Efficient Storage
|
|
55
|
+
|
|
56
|
+
Compression reduces file size:
|
|
57
|
+
|
|
58
|
+
* **15-30MB** for large models
|
|
59
|
+
* **Zlib compression** built-in
|
|
60
|
+
* **Delta encoding** for versions
|
|
61
|
+
* **Incremental updates** possible
|
|
62
|
+
|
|
63
|
+
===Built-In Indexing
|
|
64
|
+
|
|
65
|
+
Pre-computed indexes enable O(1) lookups:
|
|
66
|
+
|
|
67
|
+
* **By name** - Find elements instantly
|
|
68
|
+
* **By stereotype** - Filter by type
|
|
69
|
+
* **By package** - Navigate hierarchy
|
|
70
|
+
* **By XMI ID** - Reference resolution
|
|
71
|
+
|
|
72
|
+
=== Portability
|
|
73
|
+
|
|
74
|
+
Single file contains everything:
|
|
75
|
+
|
|
76
|
+
* Complete model
|
|
77
|
+
* All metadata
|
|
78
|
+
* Statistics
|
|
79
|
+
* No external dependencies
|
|
80
|
+
|
|
81
|
+
== Package Metadata
|
|
82
|
+
|
|
83
|
+
=== General
|
|
84
|
+
|
|
85
|
+
LUR packages contain structured metadata describing the package itself. This metadata is separate from the model data and provides information about the package's identity, licensing, and provenance.
|
|
86
|
+
|
|
87
|
+
Package metadata is defined using the [`PackageMetadata`](../../lib/lutaml/uml_repository/package_metadata.rb) class and stored in `metadata.yaml` inside the LUR archive.
|
|
88
|
+
|
|
89
|
+
=== Metadata Fields
|
|
90
|
+
|
|
91
|
+
==== Required Fields
|
|
92
|
+
|
|
93
|
+
name:: Package name (string). Human-readable identifier for the package.
|
|
94
|
+
version:: Package version (string). Semantic version recommended (e.g., "1.0.0").
|
|
95
|
+
|
|
96
|
+
==== Recommended Fields
|
|
97
|
+
|
|
98
|
+
publisher:: Organization or person publishing the package (string).
|
|
99
|
+
license:: Software license identifier (string). Use SPDX identifiers (e.g., "CC-BY-4.0", "MIT").
|
|
100
|
+
description:: Short description of the package contents (string).
|
|
101
|
+
|
|
102
|
+
==== Optional Fields
|
|
103
|
+
|
|
104
|
+
homepage:: Project homepage URL (string).
|
|
105
|
+
keywords:: Search keywords (array of strings).
|
|
106
|
+
authors:: Package authors (array of strings). Format: "Name <email>".
|
|
107
|
+
maintainers:: Package maintainers (array of strings). Format: "Name <email>".
|
|
108
|
+
repository:: Source repository URL (string).
|
|
109
|
+
documentation:: Documentation URL (string).
|
|
110
|
+
|
|
111
|
+
==== Technical Fields (Auto-Populated)
|
|
112
|
+
|
|
113
|
+
created_at:: Package creation timestamp (ISO 8601 datetime).
|
|
114
|
+
created_by:: Tool and version used to create package (string). Example: "lutaml-xmi v0.9.0".
|
|
115
|
+
lutaml_version:: LutaML library version (string).
|
|
116
|
+
serialization_format:: Document serialization format (string). Either "marshal" or "yaml".
|
|
117
|
+
|
|
118
|
+
==== Custom Fields
|
|
119
|
+
|
|
120
|
+
Any additional metadata can be stored in the `custom` hash. This allows domain-specific metadata without modifying the core structure.
|
|
121
|
+
|
|
122
|
+
[example]
|
|
123
|
+
====
|
|
124
|
+
[source,yaml]
|
|
125
|
+
----
|
|
126
|
+
custom:
|
|
127
|
+
industry: "geospatial"
|
|
128
|
+
standard: "ISO 19109"
|
|
129
|
+
compliance_level: "full"
|
|
130
|
+
revision_date: "2024-01-15"
|
|
131
|
+
----
|
|
132
|
+
====
|
|
133
|
+
|
|
134
|
+
=== Specifying Metadata via CLI
|
|
135
|
+
|
|
136
|
+
==== Basic Metadata
|
|
137
|
+
|
|
138
|
+
[source,console]
|
|
139
|
+
----
|
|
140
|
+
$ lutaml uml build model.xmi \
|
|
141
|
+
--name "Urban Planning Model" \
|
|
142
|
+
--version "2.3.0" \
|
|
143
|
+
--publisher "City Planning Department" \
|
|
144
|
+
--license "CC-BY-4.0"
|
|
145
|
+
----
|
|
146
|
+
|
|
147
|
+
==== Extended Metadata
|
|
148
|
+
|
|
149
|
+
[source,console]
|
|
150
|
+
----
|
|
151
|
+
$ lutaml uml build model.qea \
|
|
152
|
+
--name "PLATEAU City GML" \
|
|
153
|
+
--version "5.1" \
|
|
154
|
+
--publisher "MLIT Japan" \
|
|
155
|
+
--license "CC-BY-4.0" \
|
|
156
|
+
--description "3D city model application schema" \
|
|
157
|
+
--homepage "https://plateauproject.jp" \
|
|
158
|
+
--keywords "3dcity,gml,plateau,urban" \
|
|
159
|
+
--authors "MLIT,Project Team"
|
|
160
|
+
----
|
|
161
|
+
|
|
162
|
+
==== From Metadata File
|
|
163
|
+
|
|
164
|
+
Create a metadata file (YAML or JSON):
|
|
165
|
+
|
|
166
|
+
[source,yaml]
|
|
167
|
+
----
|
|
168
|
+
# package-info.yaml
|
|
169
|
+
name: "Urban Planning Model"
|
|
170
|
+
version: "2.3.0"
|
|
171
|
+
publisher: "City Planning Department"
|
|
172
|
+
license: "CC-BY-4.0"
|
|
173
|
+
description: "Comprehensive urban planning data model"
|
|
174
|
+
homepage: "https://example.org/urbanplanning"
|
|
175
|
+
keywords:
|
|
176
|
+
- urban
|
|
177
|
+
- planning
|
|
178
|
+
- gis
|
|
179
|
+
authors:
|
|
180
|
+
- "John Doe <john@example.org>"
|
|
181
|
+
- "Jane Smith <jane@example.org>"
|
|
182
|
+
custom:
|
|
183
|
+
standard: "ISO 19109"
|
|
184
|
+
revision_date: "2024-01-15"
|
|
185
|
+
compliance_level: "full"
|
|
186
|
+
----
|
|
187
|
+
|
|
188
|
+
Then reference it:
|
|
189
|
+
|
|
190
|
+
[source,console]
|
|
191
|
+
----
|
|
192
|
+
$ lutaml uml build model.xmi --metadata-file package-info.yaml
|
|
193
|
+
----
|
|
194
|
+
|
|
195
|
+
CLI options override file values:
|
|
196
|
+
|
|
197
|
+
[source,console]
|
|
198
|
+
----
|
|
199
|
+
$ lutaml uml build model.xmi \
|
|
200
|
+
--metadata-file package-info.yaml \
|
|
201
|
+
--version "2.4.0" # Overrides version from file
|
|
202
|
+
----
|
|
203
|
+
|
|
204
|
+
=== Specifying Metadata via API
|
|
205
|
+
|
|
206
|
+
==== Creating Metadata Object
|
|
207
|
+
|
|
208
|
+
[source,ruby]
|
|
209
|
+
----
|
|
210
|
+
require "lutaml/uml_repository"
|
|
211
|
+
|
|
212
|
+
metadata = Lutaml::UmlRepository::PackageMetadata.new(
|
|
213
|
+
name: "Urban Planning Model",
|
|
214
|
+
version: "2.3.0",
|
|
215
|
+
publisher: "City Planning Department",
|
|
216
|
+
license: "CC-BY-4.0",
|
|
217
|
+
description: "Comprehensive urban planning data model",
|
|
218
|
+
keywords: ["urban", "planning", "gis"],
|
|
219
|
+
authors: ["John Doe <john@example.org>", "Jane Smith <jane@example.org>"],
|
|
220
|
+
homepage: "https://example.org/urbanplanning"
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
# Add custom fields
|
|
224
|
+
metadata.add_custom("standard", "ISO 19109")
|
|
225
|
+
metadata.add_custom("revision_date", "2024-01-15")
|
|
226
|
+
metadata.add_custom("compliance_level", "full")
|
|
227
|
+
----
|
|
228
|
+
|
|
229
|
+
==== Exporting with Metadata
|
|
230
|
+
|
|
231
|
+
[source,ruby]
|
|
232
|
+
----
|
|
233
|
+
repo = Lutaml::UmlRepository::Repository.from_xmi("model.xmi")
|
|
234
|
+
|
|
235
|
+
# Using PackageMetadata object
|
|
236
|
+
repo.export_to_package("model.lur", metadata: metadata)
|
|
237
|
+
|
|
238
|
+
# Or using Hash (backward compatible)
|
|
239
|
+
repo.export_to_package("model.lur",
|
|
240
|
+
name: "Urban Planning Model",
|
|
241
|
+
version: "2.3.0",
|
|
242
|
+
publisher: "City Planning Department",
|
|
243
|
+
license: "CC-BY-4.0",
|
|
244
|
+
serialization_format: :marshal
|
|
245
|
+
)
|
|
246
|
+
----
|
|
247
|
+
|
|
248
|
+
==== Loading Metadata
|
|
249
|
+
|
|
250
|
+
[source,ruby]
|
|
251
|
+
----
|
|
252
|
+
repo = Lutaml::UmlRepository::Repository.from_package("model.lur")
|
|
253
|
+
|
|
254
|
+
metadata = repo.metadata
|
|
255
|
+
puts "Package: #{metadata.name} v#{metadata.version}"
|
|
256
|
+
puts "Publisher: #{metadata.publisher}"
|
|
257
|
+
puts "License: #{metadata.license}"
|
|
258
|
+
puts "Created: #{metadata.created_at}"
|
|
259
|
+
puts "Format: #{metadata.serialization_format}"
|
|
260
|
+
|
|
261
|
+
# Access custom fields
|
|
262
|
+
if metadata.custom_fields["standard"]
|
|
263
|
+
puts "Standard: #{metadata.custom_fields['standard']}"
|
|
264
|
+
end
|
|
265
|
+
----
|
|
266
|
+
|
|
267
|
+
=== Metadata Validation
|
|
268
|
+
|
|
269
|
+
Package metadata is validated before export to ensure required fields are present.
|
|
270
|
+
|
|
271
|
+
[source,ruby]
|
|
272
|
+
----
|
|
273
|
+
metadata = Lutaml::UmlRepository::PackageMetadata.new(
|
|
274
|
+
version: "1.0.0"
|
|
275
|
+
# Missing required 'name' field
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
metadata.validate!
|
|
279
|
+
# Raises: "Package metadata is invalid: name is required"
|
|
280
|
+
----
|
|
281
|
+
|
|
282
|
+
Required fields:
|
|
283
|
+
- `name` - Must be present and non-empty
|
|
284
|
+
- `version` - Must be present and non-empty
|
|
285
|
+
|
|
286
|
+
All other fields are optional but recommended for proper package identification and licensing.
|
|
287
|
+
|
|
288
|
+
=== Best Practices
|
|
289
|
+
|
|
290
|
+
1. **Use Semantic Versioning**: Follow semver (MAJOR.MINOR.PATCH) for the version field.
|
|
291
|
+
2. **Specify License**: Always include a license to clarify usage rights.
|
|
292
|
+
3. **Provide Publisher**: Identify the organization or person responsible for the package.
|
|
293
|
+
4. **Use SPDX Identifiers**: Use standard license identifiers from https://spdx.org/licenses/.
|
|
294
|
+
5. **Include Description**: Help users understand package contents at a glance.
|
|
295
|
+
6. **Add Keywords**: Improve discoverability through search.
|
|
296
|
+
7. **Document Authors**: Give credit to contributors.
|
|
297
|
+
8. **Use Metadata Files**: For complex metadata, use YAML/JSON files instead of long CLI commands.
|
|
298
|
+
9. **Custom Fields for Domain Data**: Use custom fields for domain-specific metadata (standards compliance, industry codes, etc.).
|
|
299
|
+
|
|
300
|
+
=== Common Use Cases
|
|
301
|
+
|
|
302
|
+
==== Standards Compliance
|
|
303
|
+
|
|
304
|
+
[source,yaml]
|
|
305
|
+
----
|
|
306
|
+
name: "ISO 19109 Application Schema"
|
|
307
|
+
version: "3.0.0"
|
|
308
|
+
publisher: "Standards Organization"
|
|
309
|
+
license: "CC-BY-4.0"
|
|
310
|
+
custom:
|
|
311
|
+
standard: "ISO 19109"
|
|
312
|
+
compliance_level: "full"
|
|
313
|
+
certification_date: "2024-01-15"
|
|
314
|
+
----
|
|
315
|
+
|
|
316
|
+
==== Open Data Publishing
|
|
317
|
+
|
|
318
|
+
[source,yaml]
|
|
319
|
+
----
|
|
320
|
+
name: "City Infrastructure Model"
|
|
321
|
+
version: "2024.1"
|
|
322
|
+
publisher: "City Planning Department"
|
|
323
|
+
license: "CC0-1.0"
|
|
324
|
+
description: "Open data model for city infrastructure"
|
|
325
|
+
homepage: "https://data.cityname.gov"
|
|
326
|
+
keywords:
|
|
327
|
+
- open-data
|
|
328
|
+
- infrastructure
|
|
329
|
+
- city-planning
|
|
330
|
+
----
|
|
331
|
+
|
|
332
|
+
==== Academic Research
|
|
333
|
+
|
|
334
|
+
[source,yaml]
|
|
335
|
+
----
|
|
336
|
+
name: "Research Data Model"
|
|
337
|
+
version: "1.0.0"
|
|
338
|
+
publisher: "University Research Lab"
|
|
339
|
+
license: "CC-BY-NC-4.0"
|
|
340
|
+
authors:
|
|
341
|
+
- "Dr. Jane Smith <jane@university.edu>"
|
|
342
|
+
- "Dr. John Doe <john@university.edu>"
|
|
343
|
+
custom:
|
|
344
|
+
project: "NSF Grant #12345"
|
|
345
|
+
doi: "10.1234/example.doi"
|
|
346
|
+
publication_date: "2024-06-15"
|
|
347
|
+
----
|
|
348
|
+
|
|
349
|
+
=== Accessing Metadata via CLI
|
|
350
|
+
|
|
351
|
+
View package metadata:
|
|
352
|
+
|
|
353
|
+
[source,console]
|
|
354
|
+
----
|
|
355
|
+
$ lutaml uml info model.lur
|
|
356
|
+
|
|
357
|
+
Package: Urban Planning Model
|
|
358
|
+
Version: 2.3.0
|
|
359
|
+
Publisher: City Planning Department
|
|
360
|
+
License: CC-BY-4.0
|
|
361
|
+
Created: 2024-01-15 10:30:00 UTC
|
|
362
|
+
Format: marshal
|
|
363
|
+
Source: xmi
|
|
364
|
+
|
|
365
|
+
Description: Comprehensive urban planning data model
|
|
366
|
+
Homepage: https://example.org/urbanplanning
|
|
367
|
+
|
|
368
|
+
Keywords: urban, planning, gis
|
|
369
|
+
|
|
370
|
+
Authors:
|
|
371
|
+
- John Doe <john@example.org>
|
|
372
|
+
- Jane Smith <jane@example.org>
|
|
373
|
+
|
|
374
|
+
Custom Fields:
|
|
375
|
+
standard: ISO 19109
|
|
376
|
+
revision_date: 2024-01-15
|
|
377
|
+
compliance_level: full
|
|
378
|
+
|
|
379
|
+
Statistics:
|
|
380
|
+
Packages: 58
|
|
381
|
+
Classes: 693
|
|
382
|
+
Attributes: 1,910
|
|
383
|
+
...
|
|
384
|
+
----
|
|
385
|
+
|
|
386
|
+
== Package Structure
|
|
387
|
+
|
|
388
|
+
=== Metadata
|
|
389
|
+
|
|
390
|
+
`metadata.yaml` contains package information:
|
|
391
|
+
|
|
392
|
+
[source,yaml]
|
|
393
|
+
----
|
|
394
|
+
name: "My UML Model"
|
|
395
|
+
version: "1.0.0"
|
|
396
|
+
created_at: "2024-01-01T00:00:00Z"
|
|
397
|
+
serialization_format: "marshal" # or "yaml"
|
|
398
|
+
model_format: "xmi" # source format
|
|
399
|
+
statistics:
|
|
400
|
+
total_packages: 58
|
|
401
|
+
total_classes: 693
|
|
402
|
+
total_attributes: 1910
|
|
403
|
+
total_operations: 245
|
|
404
|
+
total_connectors: 908
|
|
405
|
+
total_diagrams: 205
|
|
406
|
+
----
|
|
407
|
+
|
|
408
|
+
=== Model Data
|
|
409
|
+
|
|
410
|
+
Serialized UML document:
|
|
411
|
+
|
|
412
|
+
* **Marshal format** (default) - Fast binary
|
|
413
|
+
* **YAML format** (optional) - Human-readable
|
|
414
|
+
|
|
415
|
+
Format choice affects:
|
|
416
|
+
|
|
417
|
+
* **Load speed** - Marshal is faster
|
|
418
|
+
* **Portability** - YAML more portable
|
|
419
|
+
* **Debugging** - YAML easier to inspect
|
|
420
|
+
|
|
421
|
+
=== Indexes
|
|
422
|
+
|
|
423
|
+
Pre-built indexes for common queries:
|
|
424
|
+
|
|
425
|
+
[source,ruby]
|
|
426
|
+
----
|
|
427
|
+
{
|
|
428
|
+
by_name: {
|
|
429
|
+
"Building" => <Lutaml::Uml::Class>,
|
|
430
|
+
"Person" => <Lutaml::Uml::Class>,
|
|
431
|
+
# ...
|
|
432
|
+
},
|
|
433
|
+
by_stereotype: {
|
|
434
|
+
"featureType" => [<Class>, <Class>, ...],
|
|
435
|
+
"dataType" => [<Class>, ...],
|
|
436
|
+
# ...
|
|
437
|
+
},
|
|
438
|
+
by_package: {
|
|
439
|
+
"ModelRoot::Core" => [<Class>, <Class>, ...],
|
|
440
|
+
# ...
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
----
|
|
444
|
+
|
|
445
|
+
=== Statistics
|
|
446
|
+
|
|
447
|
+
Detailed model statistics:
|
|
448
|
+
|
|
449
|
+
[source,yaml]
|
|
450
|
+
----
|
|
451
|
+
classes_by_stereotype:
|
|
452
|
+
featureType: 123
|
|
453
|
+
dataType: 45
|
|
454
|
+
enumeration: 12
|
|
455
|
+
|
|
456
|
+
packages_by_depth:
|
|
457
|
+
level_1: 5
|
|
458
|
+
level_2: 15
|
|
459
|
+
level_3: 38
|
|
460
|
+
|
|
461
|
+
complexity:
|
|
462
|
+
average_attributes_per_class: 2.76
|
|
463
|
+
average_operations_per_class: 0.35
|
|
464
|
+
max_inheritance_depth: 4
|
|
465
|
+
----
|
|
466
|
+
|
|
467
|
+
== Creating LUR Packages
|
|
468
|
+
|
|
469
|
+
=== From XMI
|
|
470
|
+
|
|
471
|
+
[source,ruby]
|
|
472
|
+
----
|
|
473
|
+
require "lutaml"
|
|
474
|
+
|
|
475
|
+
# Build from XMI
|
|
476
|
+
repo = Lutaml::UmlRepository::Repository.from_xmi("model.xmi")
|
|
477
|
+
|
|
478
|
+
# Export to LUR
|
|
479
|
+
repo.export_to_package("model.lur",
|
|
480
|
+
name: "My Model",
|
|
481
|
+
version: "1.0",
|
|
482
|
+
serialization_format: :marshal
|
|
483
|
+
)
|
|
484
|
+
----
|
|
485
|
+
|
|
486
|
+
=== From QEA
|
|
487
|
+
|
|
488
|
+
[source,ruby]
|
|
489
|
+
----
|
|
490
|
+
# Build from QEA (faster)
|
|
491
|
+
repo = Lutaml::UmlRepository::Repository.from_qea("model.qea")
|
|
492
|
+
|
|
493
|
+
# Export to LUR
|
|
494
|
+
repo.export_to_package("model.lur")
|
|
495
|
+
----
|
|
496
|
+
|
|
497
|
+
=== Via CLI
|
|
498
|
+
|
|
499
|
+
[source,console]
|
|
500
|
+
----
|
|
501
|
+
# Build from XMI
|
|
502
|
+
$ lutaml uml build model.xmi -o model.lur
|
|
503
|
+
|
|
504
|
+
# Build from QEA (recommended)
|
|
505
|
+
$ lutaml uml build model.qea -o model.lur
|
|
506
|
+
|
|
507
|
+
# With options
|
|
508
|
+
$ lutaml uml build model.xmi \
|
|
509
|
+
--output model.lur \
|
|
510
|
+
--name "My Model" \
|
|
511
|
+
--version "1.0" \
|
|
512
|
+
--format yaml
|
|
513
|
+
----
|
|
514
|
+
|
|
515
|
+
== Loading LUR Packages
|
|
516
|
+
|
|
517
|
+
=== Basic Loading
|
|
518
|
+
|
|
519
|
+
[source,ruby]
|
|
520
|
+
----
|
|
521
|
+
require "lutaml/uml_repository"
|
|
522
|
+
|
|
523
|
+
# Load LUR package
|
|
524
|
+
repo = Lutaml::UmlRepository::Repository.from_package("model.lur")
|
|
525
|
+
|
|
526
|
+
# Immediate access - no parsing needed
|
|
527
|
+
package = repo.find_package("ModelRoot::Core")
|
|
528
|
+
klass = repo.find_class("ModelRoot::Core::Building")
|
|
529
|
+
----
|
|
530
|
+
|
|
531
|
+
=== Lazy Loading
|
|
532
|
+
|
|
533
|
+
For very large models:
|
|
534
|
+
|
|
535
|
+
[source,ruby]
|
|
536
|
+
----
|
|
537
|
+
# Lazy repository - load on demand
|
|
538
|
+
repo = Lutaml::UmlRepository::LazyRepository.new("model.lur")
|
|
539
|
+
|
|
540
|
+
# Only loads requested packages
|
|
541
|
+
package = repo.find_package("ModelRoot::Core") # Loads this package
|
|
542
|
+
----
|
|
543
|
+
|
|
544
|
+
=== Smart Caching
|
|
545
|
+
|
|
546
|
+
Auto-detect and cache:
|
|
547
|
+
|
|
548
|
+
[source,ruby]
|
|
549
|
+
----
|
|
550
|
+
# Auto-detect format and use cache
|
|
551
|
+
repo = Lutaml::UmlRepository::Repository.from_file("model.xmi")
|
|
552
|
+
# First run: parses XMI, creates model.lur
|
|
553
|
+
# Subsequent runs: loads model.lur (if newer)
|
|
554
|
+
|
|
555
|
+
# Force cache use
|
|
556
|
+
repo = Lutaml::UmlRepository::Repository.from_file_cached("model.xmi")
|
|
557
|
+
----
|
|
558
|
+
|
|
559
|
+
== Querying LUR Packages
|
|
560
|
+
|
|
561
|
+
=== Indexed Lookups
|
|
562
|
+
|
|
563
|
+
O(1) performance:
|
|
564
|
+
|
|
565
|
+
[source,ruby]
|
|
566
|
+
----
|
|
567
|
+
# By qualified name
|
|
568
|
+
klass = repo.find_class("ModelRoot::Core::Building")
|
|
569
|
+
|
|
570
|
+
# By stereotype (indexed)
|
|
571
|
+
feature_types = repo.find_classes_by_stereotype("featureType")
|
|
572
|
+
|
|
573
|
+
# By package (indexed)
|
|
574
|
+
classes = repo.classes_in_package("ModelRoot::Core")
|
|
575
|
+
----
|
|
576
|
+
|
|
577
|
+
=== Search
|
|
578
|
+
|
|
579
|
+
Full-text search:
|
|
580
|
+
|
|
581
|
+
[source,ruby]
|
|
582
|
+
----
|
|
583
|
+
results = repo.search("urban planning",
|
|
584
|
+
types: [:class, :attribute]
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
puts "Found #{results[:total]} matches"
|
|
588
|
+
results[:classes].each do |klass|
|
|
589
|
+
puts "- #{klass.qualified_name}"
|
|
590
|
+
end
|
|
591
|
+
----
|
|
592
|
+
|
|
593
|
+
=== Query DSL
|
|
594
|
+
|
|
595
|
+
Complex queries:
|
|
596
|
+
|
|
597
|
+
[source,ruby]
|
|
598
|
+
----
|
|
599
|
+
results = repo.query! do |q|
|
|
600
|
+
q.classes
|
|
601
|
+
.with_stereotype('featureType')
|
|
602
|
+
.where { |c| c.attributes&.size > 10 }
|
|
603
|
+
.order_by(:name)
|
|
604
|
+
.limit(10)
|
|
605
|
+
end
|
|
606
|
+
----
|
|
607
|
+
|
|
608
|
+
== Versioning
|
|
609
|
+
|
|
610
|
+
LUR supports model versioning:
|
|
611
|
+
|
|
612
|
+
=== Version Metadata
|
|
613
|
+
|
|
614
|
+
[source,ruby]
|
|
615
|
+
----
|
|
616
|
+
repo.export_to_package("model-v2.lur",
|
|
617
|
+
version: "2.0",
|
|
618
|
+
changelog: "Added new features"
|
|
619
|
+
)
|
|
620
|
+
----
|
|
621
|
+
|
|
622
|
+
=== Version Comparison
|
|
623
|
+
|
|
624
|
+
[source,ruby]
|
|
625
|
+
----
|
|
626
|
+
v1 = Lutaml::UmlRepository::Repository.from_package("model-v1.lur")
|
|
627
|
+
v2 = Lutaml::UmlRepository::Repository.from_package("model-v2.lur")
|
|
628
|
+
|
|
629
|
+
# Compare versions
|
|
630
|
+
diff = v1.diff(v2)
|
|
631
|
+
puts "Added: #{diff[:added].count} classes"
|
|
632
|
+
puts "Removed: #{diff[:removed].count} classes"
|
|
633
|
+
puts "Modified: #{diff[:modified].count} classes"
|
|
634
|
+
----
|
|
635
|
+
|
|
636
|
+
== Configuration
|
|
637
|
+
|
|
638
|
+
=== Export Options
|
|
639
|
+
|
|
640
|
+
[source,ruby]
|
|
641
|
+
----
|
|
642
|
+
repo.export_to_package("model.lur",
|
|
643
|
+
name: "My Model",
|
|
644
|
+
version: "1.0",
|
|
645
|
+
serialization_format: :marshal, # or :yaml
|
|
646
|
+
compression_level: 9, # 0-9, default 6
|
|
647
|
+
include_statistics: true, # default true
|
|
648
|
+
validate: true # validate before export
|
|
649
|
+
)
|
|
650
|
+
----
|
|
651
|
+
|
|
652
|
+
=== Load Options
|
|
653
|
+
|
|
654
|
+
[source,ruby]
|
|
655
|
+
----
|
|
656
|
+
repo = Lutaml::UmlRepository::Repository.from_package("model.lur",
|
|
657
|
+
lazy: false, # default false
|
|
658
|
+
validate: true, # validate after load
|
|
659
|
+
rebuild_indexes: false # default false
|
|
660
|
+
)
|
|
661
|
+
----
|
|
662
|
+
|
|
663
|
+
== Performance Characteristics
|
|
664
|
+
|
|
665
|
+
=== Build Time
|
|
666
|
+
|
|
667
|
+
* **From XMI**: <10s for 20MB files
|
|
668
|
+
* **From QEA**: <3s for 20MB files
|
|
669
|
+
* **Incremental**: <1s for small changes
|
|
670
|
+
|
|
671
|
+
=== Load Time
|
|
672
|
+
|
|
673
|
+
* **First load**: Parse + index + export (~10s)
|
|
674
|
+
* **Cached load**: <100ms
|
|
675
|
+
* **Lazy load**: <50ms initial + on-demand
|
|
676
|
+
|
|
677
|
+
=== Package Size
|
|
678
|
+
|
|
679
|
+
* **Typical**: 15-30MB for large models
|
|
680
|
+
* **Compression ratio**: 3-5x vs uncompressed
|
|
681
|
+
* **Index overhead**: ~10-15% of package size
|
|
682
|
+
|
|
683
|
+
=== Query Performance
|
|
684
|
+
|
|
685
|
+
* **Indexed lookup**: O(1)
|
|
686
|
+
* **Linear search**: O(n) with optimizations
|
|
687
|
+
* **Query DSL**: Depends on filters
|
|
688
|
+
|
|
689
|
+
== Best Practices
|
|
690
|
+
|
|
691
|
+
1. **Use QEA source** when possible (faster build)
|
|
692
|
+
2. **Use Marshal format** for production (faster load)
|
|
693
|
+
3. **Use YAML format** for debugging/inspection
|
|
694
|
+
4. **Enable caching** for development workflows
|
|
695
|
+
5. **Validate packages** before deployment
|
|
696
|
+
6. **Version packages** for tracking changes
|
|
697
|
+
7. **Use lazy loading** for very large models
|
|
698
|
+
|
|
699
|
+
== Limitations
|
|
700
|
+
|
|
701
|
+
* **Binary format** - Not human-editable
|
|
702
|
+
* **Ruby-specific** - Marshal ties to Ruby
|
|
703
|
+
* **No incremental updates** - Full rebuild required
|
|
704
|
+
* **Memory usage** - Full model loaded (unless lazy)
|
|
705
|
+
|
|
706
|
+
== See Also
|
|
707
|
+
|
|
708
|
+
* link:qea-parsing[QEA Direct Parsing]
|
|
709
|
+
* link:../architecture[System Architecture]
|
|
710
|
+
* link:../../tutorials/first-lur-package[Tutorial: Building LUR Packages]
|
|
711
|
+
* link:../../guides[Repository Management Guide]
|