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
data/README.adoc
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
= LutaML:
|
|
1
|
+
= LutaML: Unified data model accessor
|
|
2
2
|
|
|
3
3
|
== Purpose
|
|
4
4
|
|
|
5
|
-
LutaML aims to be a
|
|
5
|
+
LutaML aims to be a unified data model accessor that allows parsing
|
|
6
6
|
data models in multiple languages, including:
|
|
7
7
|
|
|
8
8
|
* EXPRESS (https://www.expresslang.org[EXPRESS Language Foundation], ISO 10303-11)
|
|
9
|
-
*
|
|
9
|
+
* Enterprise Architect UML models in QEA format or exported as OMG XMI
|
|
10
10
|
* UML in LutaML format
|
|
11
11
|
|
|
12
12
|
|
|
@@ -26,28 +26,49 @@ Directly:
|
|
|
26
26
|
$ gem install lutaml
|
|
27
27
|
----
|
|
28
28
|
|
|
29
|
-
==
|
|
29
|
+
== Documentation
|
|
30
|
+
|
|
31
|
+
Complete documentation is available at https://lutaml.github.io/lutaml/
|
|
32
|
+
|
|
33
|
+
The documentation includes:
|
|
34
|
+
|
|
35
|
+
* **Getting Started**: link:docs/_tutorials/getting-started.adoc[Quick Start Tutorial]
|
|
36
|
+
* **User Guides**: link:docs/_guides/index.adoc[Task-oriented how-to guides]
|
|
37
|
+
* **Core Topics**: link:docs/_pages/index.adoc[Fundamental concepts and architecture]
|
|
38
|
+
* **Reference**: link:docs/_references/index.adoc[Detailed specifications and API documentation]
|
|
39
|
+
|
|
40
|
+
You can also build and browse the documentation locally:
|
|
41
|
+
|
|
42
|
+
[source,shell]
|
|
43
|
+
----
|
|
44
|
+
cd docs
|
|
45
|
+
bundle install
|
|
46
|
+
bundle exec jekyll serve
|
|
47
|
+
# Open http://localhost:4000/lutaml/
|
|
48
|
+
----
|
|
49
|
+
|
|
50
|
+
== Usage
|
|
30
51
|
|
|
31
52
|
=== Parsing
|
|
32
53
|
|
|
33
54
|
The `Lutaml::Parser.parse` method provides a single point of entry for parsing
|
|
34
|
-
data model files,
|
|
55
|
+
data model files, including:
|
|
35
56
|
|
|
36
57
|
* EXPRESS files with `.exp` extension
|
|
37
58
|
* YAML Compressed EXPRESS CACHE files
|
|
59
|
+
* QEA files with `.qea` extension (Enterprise Architect databases)
|
|
38
60
|
* XMI files with `.xmi` extension
|
|
39
61
|
* XML files with `.xml` extension
|
|
40
62
|
* LutaML files with `.lutaml` extension
|
|
41
|
-
* LutaML YAML files with `.yml` extension
|
|
42
63
|
|
|
43
64
|
Depending on the input file type, `Lutaml::Parser.parse` returns:
|
|
44
65
|
|
|
45
66
|
* `Expressir::Express::Model::Repository` for EXPRESS files
|
|
46
67
|
* `Expressir::Express::Cache` for EXPRESS CACHE files
|
|
68
|
+
* `Lutaml::Uml::Document` for QEA files (returned as single-element array)
|
|
47
69
|
* `Lutaml::Uml::Document` for XMI files
|
|
48
70
|
* `Lutaml::Uml::Document` for XML files
|
|
49
71
|
* `Lutaml::Uml::Document` for LutaML files
|
|
50
|
-
* `Lutaml::Uml::Document` for LutaML YAML files
|
|
51
72
|
|
|
52
73
|
Examples to use the `Lutaml::Parser.parse`:
|
|
53
74
|
|
|
@@ -81,31 +102,1843 @@ model = Lutaml::Parser.parse([File.new("example.yaml")])
|
|
|
81
102
|
----
|
|
82
103
|
|
|
83
104
|
|
|
84
|
-
|
|
105
|
+
== Working with UML
|
|
106
|
+
|
|
107
|
+
=== General
|
|
108
|
+
|
|
109
|
+
Lutaml supports various UML formats and unifies them under a common data
|
|
110
|
+
model: `Lutaml::Uml::Document`.
|
|
111
|
+
|
|
112
|
+
Lutaml supports the following UML formats:
|
|
113
|
+
|
|
114
|
+
* Enterprise Architect QEA files (`.qea` extension)
|
|
115
|
+
* Enterprise Architect exported XMI files (`.xmi` extension)
|
|
116
|
+
* Enterprise Architect exported XML files (`.xml` extension)
|
|
117
|
+
* LutaML UML files (`.lutaml` extension)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
=== LutaML UML
|
|
121
|
+
|
|
122
|
+
LutaML UML is a simple, human-readable representation of UML models.
|
|
123
|
+
|
|
124
|
+
The syntax is described in link:docs/pages/uml-syntax.adoc[LutaML UML syntax].
|
|
85
125
|
|
|
86
|
-
|
|
126
|
+
=== Enterprise Architect
|
|
87
127
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
128
|
+
Enterprise Architect is a popular UML modeling tool by Sparx Systems.
|
|
129
|
+
It supports exporting UML models in XMI and XML formats.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
== Diagram generation
|
|
134
|
+
|
|
135
|
+
=== LutaML Diagrams
|
|
136
|
+
|
|
137
|
+
LutaML Diagram is a lightweight textual syntax for defining model diagrams.
|
|
138
|
+
|
|
139
|
+
The syntax is described in link:docs/pages/uml-syntax.adoc[LutaML diagram
|
|
140
|
+
syntax].
|
|
141
|
+
|
|
142
|
+
A CLI is provided to generate diagrams from LutaML DSL files:
|
|
91
143
|
|
|
92
144
|
[source,bash]
|
|
93
145
|
----
|
|
94
|
-
#
|
|
146
|
+
# Generate diagrams from LutaML DSL files
|
|
95
147
|
$ lutaml -o . test.lutaml
|
|
96
|
-
|
|
97
|
-
# Will generate `test.png` file in the `assets` directory
|
|
98
148
|
$ lutaml -o assets -t png test.lutaml
|
|
99
149
|
----
|
|
100
150
|
|
|
101
|
-
For additional info refer to `lutaml --help output`.
|
|
102
151
|
|
|
103
|
-
== Other Usages
|
|
104
152
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
153
|
+
//=== CLI
|
|
154
|
+
|
|
155
|
+
==== General
|
|
156
|
+
|
|
157
|
+
LutaML provides comprehensive command-line interfaces for working with data models and UML repositories.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
**UML repository commands** (for XMI, QEA, and LUR files):
|
|
161
|
+
|
|
162
|
+
The `lutaml uml` command suite provides a complete interface for working with UML models. See [CLI commands reference](#cli-commands-reference) for details.
|
|
163
|
+
|
|
164
|
+
[source,bash]
|
|
165
|
+
----
|
|
166
|
+
# Build LUR package from XMI or QEA
|
|
167
|
+
$ lutaml uml build model.xmi -o model.lur
|
|
168
|
+
$ lutaml uml build project.qea -o project.lur
|
|
169
|
+
|
|
170
|
+
# Explore and query
|
|
171
|
+
$ lutaml uml ls model.lur
|
|
172
|
+
$ lutaml uml tree model.lur --depth 2
|
|
173
|
+
$ lutaml uml search model.lur "Building"
|
|
174
|
+
$ lutaml uml stats model.lur
|
|
175
|
+
|
|
176
|
+
# Export and document
|
|
177
|
+
$ lutaml uml export model.lur --format csv -o classes.csv
|
|
178
|
+
$ lutaml uml build-spa model.lur -o docs/index.html
|
|
179
|
+
$ lutaml uml serve model.lur --port 8080
|
|
180
|
+
|
|
181
|
+
# Interactive exploration
|
|
182
|
+
$ lutaml uml repl model.lur
|
|
183
|
+
----
|
|
184
|
+
|
|
185
|
+
==== Thin wrapper principle
|
|
186
|
+
|
|
187
|
+
The CLI is designed as a thin wrapper around the Ruby API. Every CLI command directly maps to Ruby API methods, making it easy to:
|
|
188
|
+
|
|
189
|
+
* Transition from CLI to programmatic usage
|
|
190
|
+
* Understand what the CLI does by reading the API documentation
|
|
191
|
+
* Script complex workflows using Ruby when needed
|
|
192
|
+
|
|
193
|
+
.CLI to API mapping example
|
|
194
|
+
[example]
|
|
195
|
+
====
|
|
196
|
+
[source,bash]
|
|
197
|
+
----
|
|
198
|
+
# CLI command
|
|
199
|
+
$ lutaml uml build model.xmi -o model.lur
|
|
200
|
+
----
|
|
201
|
+
|
|
202
|
+
Equivalent Ruby code:
|
|
203
|
+
|
|
204
|
+
[source,ruby]
|
|
205
|
+
----
|
|
206
|
+
require "lutaml/xmi"
|
|
207
|
+
|
|
208
|
+
repo = Lutaml::UmlRepository::Repository.from_xmi("model.xmi")
|
|
209
|
+
repo.export_to_package("model.lur")
|
|
210
|
+
----
|
|
211
|
+
====
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
== UML support
|
|
215
|
+
|
|
216
|
+
=== QEA Direct Database Parsing
|
|
217
|
+
|
|
218
|
+
LutaML supports direct parsing of Enterprise Architect `.qea` files (SQLite databases) without requiring XMI export. This provides significant performance improvements and access to EA-specific metadata.
|
|
219
|
+
|
|
220
|
+
==== What are QEA files?
|
|
221
|
+
|
|
222
|
+
QEA (Quantified EA) files are Enterprise Architect's native database format based on SQLite. They contain the complete UML model including:
|
|
223
|
+
|
|
224
|
+
* Packages, classes, attributes, operations
|
|
225
|
+
* Associations and generalizations
|
|
226
|
+
* Diagrams and diagram elements
|
|
227
|
+
* EA-specific metadata (stereotypes, tagged values, etc.)
|
|
228
|
+
|
|
229
|
+
==== Why direct parsing?
|
|
230
|
+
|
|
231
|
+
Direct QEA parsing offers several advantages over XMI:
|
|
232
|
+
|
|
233
|
+
* **Performance**: 10-20x faster than XMI parsing
|
|
234
|
+
* **No export step**: Parse directly from EA database
|
|
235
|
+
* **EA metadata**: Access to EA-specific information not available in XMI
|
|
236
|
+
* **Memory efficient**: Streams data from SQLite without loading entire file
|
|
237
|
+
|
|
238
|
+
==== Parser API usage
|
|
239
|
+
|
|
240
|
+
[source,ruby]
|
|
241
|
+
----
|
|
242
|
+
require "lutaml"
|
|
243
|
+
|
|
244
|
+
# Parse QEA file directly
|
|
245
|
+
document = Lutaml::Parser.parse([File.new("model.qea")]).first
|
|
246
|
+
# => returns Lutaml::Uml::Document
|
|
247
|
+
|
|
248
|
+
# Use with UmlRepository
|
|
249
|
+
repo = Lutaml::UmlRepository::Repository.new(document: document)
|
|
250
|
+
|
|
251
|
+
# Query the model
|
|
252
|
+
classes = repo.find_classes_by_stereotype("featureType")
|
|
253
|
+
----
|
|
254
|
+
|
|
255
|
+
==== QEA module API
|
|
256
|
+
|
|
257
|
+
The `Lutaml::Qea` module provides direct access to QEA parsing:
|
|
258
|
+
|
|
259
|
+
[source,ruby]
|
|
260
|
+
----
|
|
261
|
+
require "lutaml/qea"
|
|
262
|
+
|
|
263
|
+
# Parse QEA file
|
|
264
|
+
document = Lutaml::Qea.parse("model.qea")
|
|
265
|
+
|
|
266
|
+
# With options
|
|
267
|
+
document = Lutaml::Qea.parse("model.qea",
|
|
268
|
+
include_diagrams: true,
|
|
269
|
+
validate: true
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
# Load database for low-level access
|
|
273
|
+
database = Lutaml::Qea.load_database("model.qea") do |table, current, total|
|
|
274
|
+
puts "Loading #{table}: #{current}/#{total}"
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
# Get quick statistics
|
|
278
|
+
info = Lutaml::Qea.database_info("model.qea")
|
|
279
|
+
puts info # => {"objects" => 693, "attributes" => 1910, ...}
|
|
280
|
+
----
|
|
281
|
+
|
|
282
|
+
==== CLI usage with QEA files
|
|
283
|
+
|
|
284
|
+
All CLI commands accept both XMI and QEA files:
|
|
285
|
+
|
|
286
|
+
[source,shell]
|
|
287
|
+
----
|
|
288
|
+
# Build LUR from QEA (10-20x faster than XMI)
|
|
289
|
+
lutaml uml build model.qea -o model.lur
|
|
290
|
+
|
|
291
|
+
# Build LUR from XMI
|
|
292
|
+
lutaml uml build model.xmi -o model.lur
|
|
293
|
+
|
|
294
|
+
# All other commands work the same
|
|
295
|
+
lutaml uml search model.lur "Building"
|
|
296
|
+
lutaml uml tree model.lur
|
|
297
|
+
----
|
|
298
|
+
|
|
299
|
+
==== File validation
|
|
300
|
+
|
|
301
|
+
[source,ruby]
|
|
302
|
+
----
|
|
303
|
+
require "lutaml/qea/file_detector"
|
|
304
|
+
|
|
305
|
+
# Check if file is valid QEA
|
|
306
|
+
if Lutaml::Qea::FileDetector.qea_file?("model.qea")
|
|
307
|
+
puts "Valid QEA file"
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Validate structure
|
|
311
|
+
result = Lutaml::Qea::FileDetector.validate_qea("model.qea")
|
|
312
|
+
if result[:valid]
|
|
313
|
+
puts "QEA file is valid"
|
|
314
|
+
else
|
|
315
|
+
result[:errors].each { |e| puts "ERROR: #{e}" }
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# Get file information
|
|
319
|
+
info = Lutaml::Qea::FileDetector.file_info("model.qea")
|
|
320
|
+
puts "Size: #{info[:size_mb]} MB"
|
|
321
|
+
puts "Tables: #{info[:table_count]}"
|
|
322
|
+
puts "Objects: #{info[:object_count]}"
|
|
323
|
+
----
|
|
324
|
+
|
|
325
|
+
==== Performance benchmarking
|
|
326
|
+
|
|
327
|
+
[source,ruby]
|
|
328
|
+
----
|
|
329
|
+
require "lutaml/qea/benchmark"
|
|
330
|
+
|
|
331
|
+
# Compare QEA vs XMI parsing
|
|
332
|
+
results = Lutaml::Qea::Benchmark.compare("model.qea", "model.xmi")
|
|
333
|
+
|
|
334
|
+
puts "QEA: #{results[:qea][:time]}s"
|
|
335
|
+
puts "XMI: #{results[:xmi][:time]}s"
|
|
336
|
+
puts "Speedup: #{results[:speedup]}x faster"
|
|
337
|
+
|
|
338
|
+
# Display formatted results
|
|
339
|
+
puts Lutaml::Qea::Benchmark.format_results(results)
|
|
340
|
+
----
|
|
341
|
+
|
|
342
|
+
==== Performance characteristics
|
|
343
|
+
|
|
344
|
+
Typical performance for a 20MB EA model:
|
|
345
|
+
|
|
346
|
+
* **QEA parsing**: 1-2 seconds
|
|
347
|
+
* **XMI parsing**: 20-40 seconds
|
|
348
|
+
* **Speedup**: 10-20x faster
|
|
349
|
+
* **Memory**: Lower memory footprint with QEA
|
|
350
|
+
|
|
351
|
+
==== Configuration
|
|
352
|
+
|
|
353
|
+
QEA parsing is configured via `config/qea_schema.yml`:
|
|
354
|
+
|
|
355
|
+
[source,yaml]
|
|
356
|
+
----
|
|
357
|
+
tables:
|
|
358
|
+
- table_name: t_object
|
|
359
|
+
enabled: true
|
|
360
|
+
model_class: Object
|
|
361
|
+
|
|
362
|
+
- table_name: t_attribute
|
|
363
|
+
enabled: true
|
|
364
|
+
model_class: Attribute
|
|
365
|
+
|
|
366
|
+
# ... other tables
|
|
367
|
+
----
|
|
368
|
+
|
|
369
|
+
==== Limitations
|
|
370
|
+
|
|
371
|
+
* QEA files must be SQLite 3 format
|
|
372
|
+
* Requires EA-specific table structure
|
|
373
|
+
* Some EA proprietary features may not be fully supported
|
|
374
|
+
* Only reads from QEA; does not write back to EA database
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
=== QEA vs XMI Comparison
|
|
378
|
+
|
|
379
|
+
LutaML supports both QEA (SQLite) and XMI (XML) formats from Enterprise Architect. While functionally equivalent, QEA parsing offers several advantages:
|
|
380
|
+
|
|
381
|
+
==== Performance
|
|
382
|
+
|
|
383
|
+
* **QEA**: 1-2 seconds for 20MB files (direct SQLite access)
|
|
384
|
+
* **XMI**: 20-40 seconds for same files (XML parsing overhead)
|
|
385
|
+
* **Speedup**: 10-20x faster parsing with QEA
|
|
386
|
+
|
|
387
|
+
==== Data Richness
|
|
388
|
+
|
|
389
|
+
QEA preserves more semantic information due to direct database access:
|
|
390
|
+
|
|
391
|
+
**Association type differentiation**::
|
|
392
|
+
QEA preserves the distinction between Association, Aggregation, and Composition connector types through the `member_end_type` field. XMI export from EA hardcodes all association types as "aggregation", losing this semantic information.
|
|
393
|
+
|
|
394
|
+
**Tagged values**::
|
|
395
|
+
QEA includes object properties as tagged values, capturing EA-specific metadata that may not be exported to XMI. For example, a class in QEA might have 3 tagged values while the same class in XMI has 0, representing metadata loss during XMI export.
|
|
396
|
+
|
|
397
|
+
**Association generalization structure**::
|
|
398
|
+
QEA provides rich `AssociationGeneralization` objects with full type information, while XMI reduces these to simple string IDs, losing structural detail.
|
|
399
|
+
|
|
400
|
+
==== Compatibility
|
|
401
|
+
|
|
402
|
+
* **99.6% parity** between formats for core UML data
|
|
403
|
+
* QEA is the preferred format when working with Enterprise Architect models
|
|
404
|
+
* Both formats produce equivalent Lutaml::Uml::Document structures
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
== LutaML UML Repository (LUR)
|
|
410
|
+
|
|
411
|
+
=== General
|
|
412
|
+
|
|
413
|
+
LutaML UML Repository provides a unified interface for UML models with
|
|
414
|
+
built-in indexing and package management.
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
=== Package format
|
|
418
|
+
|
|
419
|
+
LUR packages are ZIP archives containing:
|
|
420
|
+
|
|
421
|
+
----
|
|
422
|
+
model.lur
|
|
423
|
+
├── metadata.yaml # Package info, statistics
|
|
424
|
+
├── models/
|
|
425
|
+
│ └── document.marshal # Serialized UML model
|
|
426
|
+
├── indexes/
|
|
427
|
+
│ ├── all.marshal # Pre-built indexes
|
|
428
|
+
│ └── index_tree.yaml # Human-readable package tree (NEW)
|
|
429
|
+
└── statistics.yaml # Detailed statistics
|
|
430
|
+
----
|
|
431
|
+
|
|
432
|
+
The `index_tree.yaml` file provides a human-readable view of the package
|
|
433
|
+
hierarchy with class counts, making it easy to inspect the structure without
|
|
434
|
+
loading the full repository. This is particularly useful for:
|
|
435
|
+
|
|
436
|
+
* Quick package structure inspection
|
|
437
|
+
* Debugging package organization
|
|
438
|
+
* Understanding model hierarchy
|
|
439
|
+
* Generating documentation
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
=== Quick start
|
|
443
|
+
|
|
444
|
+
==== CLI usage
|
|
445
|
+
|
|
446
|
+
[source,shell]
|
|
447
|
+
----
|
|
448
|
+
# Build LUR package
|
|
449
|
+
lutaml uml package build model.qea -o model.lur
|
|
450
|
+
lutaml uml package build model.xmi -o model.lur
|
|
451
|
+
|
|
452
|
+
# Show package info
|
|
453
|
+
lutaml uml package info model.lur
|
|
454
|
+
|
|
455
|
+
# List packages
|
|
456
|
+
lutaml uml list model.lur
|
|
457
|
+
|
|
458
|
+
# Show package tree
|
|
459
|
+
lutaml uml tree model.lur --max-depth 3
|
|
460
|
+
|
|
461
|
+
# Show class details
|
|
462
|
+
lutaml uml show class "MyPackage::MyClass" model.lur
|
|
463
|
+
|
|
464
|
+
# Search
|
|
465
|
+
lutaml uml search "building" model.lur
|
|
466
|
+
|
|
467
|
+
# Get statistics
|
|
468
|
+
lutaml uml stats model.lur
|
|
469
|
+
|
|
470
|
+
# Command aliases (shortcuts)
|
|
471
|
+
lutaml uml ls model.lur # alias for 'list'
|
|
472
|
+
lutaml uml t model.lur # alias for 'tree'
|
|
473
|
+
lutaml uml s class MyClass model.lur # alias for 'show'
|
|
474
|
+
lutaml uml ? "building" model.lur # alias for 'search'
|
|
475
|
+
lutaml uml f --stereotype featureType model.lur # alias for 'find'
|
|
476
|
+
|
|
477
|
+
# Interactive shell (REPL)
|
|
478
|
+
lutaml uml shell model.lur
|
|
479
|
+
----
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
==== Build repository from XMI or QEA
|
|
483
|
+
|
|
484
|
+
[source,ruby]
|
|
485
|
+
----
|
|
486
|
+
require "lutaml/xmi"
|
|
487
|
+
|
|
488
|
+
# Build from XMI file
|
|
489
|
+
repo = Lutaml::UmlRepository::Repository.from_xmi("model.xmi")
|
|
490
|
+
|
|
491
|
+
# Build from QEA file
|
|
492
|
+
repo = Lutaml::UmlRepository::Repository.from_qea("model.qea")
|
|
493
|
+
|
|
494
|
+
# Query the model
|
|
495
|
+
package = repo.find_package("ModelRoot::MyPackage")
|
|
496
|
+
klass = repo.find_class("ModelRoot::MyPackage::MyClass")
|
|
497
|
+
classes = repo.find_classes_by_stereotype("featureType")
|
|
498
|
+
|
|
499
|
+
# Get statistics
|
|
500
|
+
stats = repo.statistics
|
|
501
|
+
puts "Total classes: #{stats[:total_classes]}"
|
|
502
|
+
----
|
|
503
|
+
|
|
504
|
+
==== Save as LUR package
|
|
505
|
+
|
|
506
|
+
[source,ruby]
|
|
507
|
+
----
|
|
508
|
+
# Export to .lur package (fast loading)
|
|
509
|
+
repo.export_to_package("model.lur",
|
|
510
|
+
name: "My Model",
|
|
511
|
+
version: "1.0",
|
|
512
|
+
serialization_format: :marshal # or :yaml
|
|
513
|
+
)
|
|
514
|
+
|
|
515
|
+
# Load from package (< 100ms vs >5s parsing XMI)
|
|
516
|
+
repo = Lutaml::UmlRepository::Repository.from_package("model.lur")
|
|
517
|
+
|
|
518
|
+
# Smart file detection (auto-detects format)
|
|
519
|
+
repo = Lutaml::UmlRepository::Repository.from_file("model.xmi")
|
|
520
|
+
repo = Lutaml::UmlRepository::Repository.from_file("model.lur")
|
|
521
|
+
|
|
522
|
+
# Intelligent caching (uses cache if fresh, rebuilds if stale)
|
|
523
|
+
repo = Lutaml::UmlRepository::Repository.from_file_cached("model.xmi")
|
|
524
|
+
# Creates model.lur and reuses it on subsequent runs
|
|
525
|
+
----
|
|
526
|
+
|
|
527
|
+
=== LUR configuration
|
|
528
|
+
|
|
529
|
+
==== General
|
|
530
|
+
|
|
531
|
+
A configuration file is used to describe package-specific settings for an
|
|
532
|
+
LUR package, including metadata and features enabled.
|
|
533
|
+
|
|
534
|
+
The configuration format is as follows:
|
|
535
|
+
|
|
536
|
+
[source,yaml]
|
|
537
|
+
----
|
|
538
|
+
metadata:
|
|
539
|
+
name: My Model
|
|
540
|
+
version: 1.0
|
|
541
|
+
description: A sample UML model
|
|
542
|
+
license: MIT
|
|
543
|
+
author: John Doe
|
|
544
|
+
package:
|
|
545
|
+
input: /path/to/model.xmi # or .qea
|
|
546
|
+
storage_format: marshal # or yaml
|
|
547
|
+
include_original_file: true
|
|
548
|
+
----
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
=== Search
|
|
552
|
+
|
|
553
|
+
LUR packages allow full-text search across model elements.
|
|
554
|
+
|
|
555
|
+
[source,ruby]
|
|
556
|
+
----
|
|
557
|
+
# Get helpful suggestions for typos
|
|
558
|
+
repo.find_class("ModelRoot::Buildng", raise_on_error: true)
|
|
559
|
+
# => NameError: Class not found: ModelRoot::Buildng
|
|
560
|
+
# Did you mean one of these?
|
|
561
|
+
# - ModelRoot::Building
|
|
562
|
+
# - ModelRoot::BuildingPart
|
|
563
|
+
|
|
564
|
+
repo.find_package("ModelRoot::i-UP", raise_on_error: true)
|
|
565
|
+
# => NameError: Package not found: ModelRoot::i-UP
|
|
566
|
+
# Did you mean one of these?
|
|
567
|
+
# - ModelRoot::i-UR
|
|
568
|
+
----
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
=== API reference
|
|
572
|
+
|
|
573
|
+
==== Smart loading methods
|
|
574
|
+
|
|
575
|
+
[source,ruby]
|
|
576
|
+
----
|
|
577
|
+
# Auto-detect file type
|
|
578
|
+
repo = Lutaml::UmlRepository::Repository.from_file("model.xmi")
|
|
579
|
+
repo = Lutaml::UmlRepository::Repository.from_file("model.lur")
|
|
580
|
+
|
|
581
|
+
# Smart caching (only rebuilds when XMI is newer than cache)
|
|
582
|
+
repo = Lutaml::UmlRepository::Repository.from_file_cached("model.xmi")
|
|
583
|
+
repo = Lutaml::UmlRepository::Repository.from_file_cached("model.xmi",
|
|
584
|
+
lur_path: "cache/model.lur")
|
|
585
|
+
----
|
|
586
|
+
|
|
587
|
+
==== Error handling with suggestions
|
|
588
|
+
|
|
589
|
+
[source,ruby]
|
|
590
|
+
----
|
|
591
|
+
# Find class with error handling
|
|
592
|
+
klass = repo.find_class("ModelRoot::MyClass", raise_on_error: true)
|
|
593
|
+
# Raises NameError with suggestions if not found
|
|
594
|
+
|
|
595
|
+
# Find package with error handling
|
|
596
|
+
package = repo.find_package("ModelRoot::MyPackage", raise_on_error: true)
|
|
597
|
+
# Raises NameError with suggestions if not found
|
|
598
|
+
----
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
==== Package navigation
|
|
602
|
+
|
|
603
|
+
[source,ruby]
|
|
604
|
+
----
|
|
605
|
+
# Find package by path
|
|
606
|
+
package = repo.find_package("ModelRoot::i-UR::urf")
|
|
607
|
+
|
|
608
|
+
# List packages
|
|
609
|
+
packages = repo.list_packages("ModelRoot::i-UR", recursive: true)
|
|
610
|
+
|
|
611
|
+
# Get package tree
|
|
612
|
+
tree = repo.package_tree("ModelRoot", max_depth: 3)
|
|
613
|
+
----
|
|
614
|
+
|
|
615
|
+
==== Class queries
|
|
616
|
+
|
|
617
|
+
[source,ruby]
|
|
618
|
+
----
|
|
619
|
+
# Find by qualified name
|
|
620
|
+
klass = repo.find_class("ModelRoot::i-UR::urf::Building")
|
|
621
|
+
|
|
622
|
+
# Find by stereotype
|
|
623
|
+
feature_types = repo.find_classes_by_stereotype("featureType")
|
|
624
|
+
|
|
625
|
+
# Get classes in package
|
|
626
|
+
classes = repo.classes_in_package("ModelRoot::i-UR::urf", recursive: false)
|
|
627
|
+
----
|
|
628
|
+
|
|
629
|
+
==== Inheritance queries
|
|
630
|
+
|
|
631
|
+
[source,ruby]
|
|
632
|
+
----
|
|
633
|
+
# Get parent class
|
|
634
|
+
parent = repo.supertype_of("ModelRoot::MyPackage::ChildClass")
|
|
635
|
+
|
|
636
|
+
# Get child classes
|
|
637
|
+
children = repo.subtypes_of("ModelRoot::MyPackage::ParentClass")
|
|
638
|
+
|
|
639
|
+
# Get all children recursively
|
|
640
|
+
all_children = repo.subtypes_of(parent_class, recursive: true)
|
|
641
|
+
|
|
642
|
+
# Get inheritance chain
|
|
643
|
+
ancestors = repo.ancestors_of("ModelRoot::MyPackage::MyClass")
|
|
644
|
+
|
|
645
|
+
# Get all descendants
|
|
646
|
+
descendants = repo.descendants_of(base_class, max_depth: 2)
|
|
647
|
+
----
|
|
648
|
+
|
|
649
|
+
==== Association & diagram queries
|
|
650
|
+
|
|
651
|
+
[source,ruby]
|
|
652
|
+
----
|
|
653
|
+
# Get associations
|
|
654
|
+
assocs = repo.associations_of("ModelRoot::MyPackage::MyClass")
|
|
655
|
+
|
|
656
|
+
# Get owned associations only
|
|
657
|
+
owned = repo.associations_of(my_class, owned_only: true)
|
|
658
|
+
|
|
659
|
+
# Get diagrams
|
|
660
|
+
diagrams = repo.diagrams_in_package("ModelRoot::MyPackage")
|
|
661
|
+
diagram = repo.find_diagram("Class Diagram")
|
|
662
|
+
all_diagrams = repo.all_diagrams
|
|
663
|
+
----
|
|
664
|
+
|
|
665
|
+
==== Search and element display
|
|
666
|
+
|
|
667
|
+
[source,ruby]
|
|
668
|
+
----
|
|
669
|
+
# Text search
|
|
670
|
+
results = repo.search("urban planning", types: [:class, :attribute])
|
|
671
|
+
puts "Found #{results[:total]} matches"
|
|
672
|
+
|
|
673
|
+
# Pattern search
|
|
674
|
+
classes = repo.search("^Urban.*Area$", types: [:class])
|
|
675
|
+
|
|
676
|
+
# Display element details using presenters
|
|
677
|
+
presenter = Lutaml::Xmi::Presenters::PresenterFactory.create(klass)
|
|
678
|
+
puts presenter.to_text
|
|
679
|
+
puts presenter.to_yaml
|
|
680
|
+
puts presenter.to_json
|
|
681
|
+
----
|
|
682
|
+
|
|
683
|
+
==== Query DSL (Advanced queries)
|
|
684
|
+
|
|
685
|
+
The Query DSL provides a fluent, expressive interface for building complex
|
|
686
|
+
queries with method chaining, lazy evaluation, and composable filters.
|
|
687
|
+
|
|
688
|
+
[source,ruby]
|
|
689
|
+
----
|
|
690
|
+
# Basic query with hash conditions
|
|
691
|
+
results = repo.query do |q|
|
|
692
|
+
q.classes.where(stereotype: 'featureType')
|
|
693
|
+
end.all
|
|
694
|
+
|
|
695
|
+
# Complex query with method chaining
|
|
696
|
+
results = repo.query do |q|
|
|
697
|
+
q.classes
|
|
698
|
+
.in_package('ModelRoot::i-UR', recursive: true)
|
|
699
|
+
.where { |c| c.attributes&.size.to_i > 10 }
|
|
700
|
+
.order_by(:name, direction: :desc)
|
|
701
|
+
.limit(5)
|
|
702
|
+
end.execute
|
|
703
|
+
|
|
704
|
+
# Immediate execution with query!
|
|
705
|
+
results = repo.query! do |q|
|
|
706
|
+
q.classes.with_stereotype('featureType')
|
|
707
|
+
end
|
|
708
|
+
----
|
|
709
|
+
|
|
710
|
+
===== Query builder methods
|
|
711
|
+
|
|
712
|
+
* `classes` - Start a class query
|
|
713
|
+
* `packages` - Start a package query
|
|
714
|
+
* `where(conditions)` - Filter by hash conditions (e.g., `stereotype: 'featureType'`)
|
|
715
|
+
* `where { |obj| ... }` - Filter with custom block logic
|
|
716
|
+
* `with_stereotype(stereotype)` - Shortcut for stereotype filtering
|
|
717
|
+
* `in_package(path, recursive: false)` - Filter by package membership
|
|
718
|
+
* `order_by(field, direction: :asc)` - Sort results (`:asc` or `:desc`)
|
|
719
|
+
* `limit(count)` - Limit number of results
|
|
720
|
+
* `execute` / `all` - Execute query and return results
|
|
721
|
+
* `first` - Get first result
|
|
722
|
+
* `last` - Get last result
|
|
723
|
+
* `count` - Count matching results
|
|
724
|
+
* `any?` - Check if any results exist
|
|
725
|
+
* `empty?` - Check if no results exist
|
|
726
|
+
|
|
727
|
+
===== Query examples
|
|
728
|
+
|
|
729
|
+
[source,ruby]
|
|
730
|
+
----
|
|
731
|
+
# Find all feature types with many attributes
|
|
732
|
+
large_features = repo.query! do |q|
|
|
733
|
+
q.classes
|
|
734
|
+
.with_stereotype('featureType')
|
|
735
|
+
.where { |c| c.attributes&.size.to_i > 20 }
|
|
736
|
+
.order_by(:name)
|
|
737
|
+
end
|
|
738
|
+
|
|
739
|
+
# Find classes in package hierarchy
|
|
740
|
+
classes = repo.query do |q|
|
|
741
|
+
q.classes
|
|
742
|
+
.in_package('ModelRoot::i-UR', recursive: true)
|
|
743
|
+
.where(is_abstract: false)
|
|
744
|
+
end.all
|
|
745
|
+
|
|
746
|
+
# Complex filtering with regex
|
|
747
|
+
results = repo.query! do |q|
|
|
748
|
+
q.classes
|
|
749
|
+
.where(name: /^Building/)
|
|
750
|
+
.where { |c| c.associations&.any? }
|
|
751
|
+
.limit(10)
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
# Combining multiple conditions
|
|
755
|
+
feature_types = repo.query do |q|
|
|
756
|
+
q.classes
|
|
757
|
+
.with_stereotype('featureType')
|
|
758
|
+
.where { |c| c.attributes&.size.to_i > 5 }
|
|
759
|
+
.where { |c| c.associations&.size.to_i > 2 }
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
# Get count without loading all results
|
|
763
|
+
count = feature_types.count
|
|
764
|
+
|
|
765
|
+
# Check if any exist
|
|
766
|
+
has_results = feature_types.any?
|
|
767
|
+
|
|
768
|
+
# Get ordered results
|
|
769
|
+
sorted = feature_types.order_by(:name, direction: :desc).all
|
|
770
|
+
----
|
|
771
|
+
|
|
772
|
+
===== Deferred vs immediate execution
|
|
773
|
+
|
|
774
|
+
[source,ruby]
|
|
775
|
+
----
|
|
776
|
+
# Deferred execution - build query, execute later
|
|
777
|
+
builder = repo.query do |q|
|
|
778
|
+
q.classes.with_stereotype('featureType')
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
# Can add more conditions
|
|
782
|
+
builder.where { |c| c.attributes.size > 10 }
|
|
783
|
+
|
|
784
|
+
# Execute when ready
|
|
785
|
+
results = builder.execute
|
|
786
|
+
|
|
787
|
+
# Immediate execution - execute and return results
|
|
788
|
+
results = repo.query! do |q|
|
|
789
|
+
q.classes.with_stereotype('featureType')
|
|
790
|
+
end
|
|
791
|
+
----
|
|
792
|
+
|
|
793
|
+
==== Statistics & validation
|
|
794
|
+
|
|
795
|
+
[source,ruby]
|
|
796
|
+
----
|
|
797
|
+
# Get statistics
|
|
798
|
+
stats = repo.statistics
|
|
799
|
+
puts "Packages: #{stats[:total_packages]}"
|
|
800
|
+
puts "Classes: #{stats[:total_classes]}"
|
|
801
|
+
puts "Stereotypes: #{stats[:classes_by_stereotype]}"
|
|
802
|
+
|
|
803
|
+
# Validate model
|
|
804
|
+
result = repo.validate
|
|
805
|
+
if result.valid?
|
|
806
|
+
puts "Model is valid"
|
|
807
|
+
else
|
|
808
|
+
result.errors.each { |error| puts "ERROR: #{error}" }
|
|
809
|
+
end
|
|
810
|
+
----
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
=== CLI commands
|
|
814
|
+
|
|
815
|
+
==== General
|
|
816
|
+
|
|
817
|
+
The CLI provides 13 commands organized into 5 categories:
|
|
818
|
+
|
|
819
|
+
**Resource lifecycle:**
|
|
820
|
+
|
|
821
|
+
* `build` - Build LUR packages from XMI/QEA files
|
|
822
|
+
* `info` - Show LUR package metadata
|
|
823
|
+
* `validate` - Validate LUR packages
|
|
824
|
+
* `validate-qea` - Validate QEA files
|
|
825
|
+
|
|
826
|
+
**Viewing:**
|
|
827
|
+
|
|
828
|
+
* `ls` - List elements (packages, classes, diagrams)
|
|
829
|
+
* `inspect` - Show element details
|
|
830
|
+
* `tree` - Hierarchical package tree
|
|
831
|
+
* `stats` - Repository statistics
|
|
832
|
+
|
|
833
|
+
**Querying:**
|
|
834
|
+
|
|
835
|
+
* `search` - Full-text search
|
|
836
|
+
* `find` - Criteria-based search
|
|
837
|
+
|
|
838
|
+
**Output:**
|
|
839
|
+
|
|
840
|
+
* `export` - Export to CSV/JSON/Markdown
|
|
841
|
+
* `build-spa` - Generate SPA documentation site
|
|
842
|
+
* `serve` - Start interactive web UI
|
|
843
|
+
|
|
844
|
+
**Development:**
|
|
845
|
+
|
|
846
|
+
* `repl` - Interactive REPL shell
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
[[build-command]]
|
|
850
|
+
==== `build` - Build LUR package
|
|
851
|
+
|
|
852
|
+
Build a LUR package from XMI or QEA source files.
|
|
853
|
+
|
|
854
|
+
[source,shell]
|
|
855
|
+
----
|
|
856
|
+
lutaml uml build MODEL -o OUTPUT.lur [OPTIONS]
|
|
857
|
+
----
|
|
858
|
+
|
|
859
|
+
Where,
|
|
860
|
+
|
|
861
|
+
`MODEL`:: Path to XMI or QEA file
|
|
862
|
+
`-o, --output`:: Output LUR file path (default: input with .lur extension)
|
|
863
|
+
`--name`:: Package name (optional)
|
|
864
|
+
`--version`:: Package version (default: 1.0)
|
|
865
|
+
`--format`:: Serialization format: marshal or yaml (default: marshal)
|
|
866
|
+
`--validate`:: Validate before building (default: true)
|
|
867
|
+
`--strict`:: Fail build on validation errors (default: false)
|
|
868
|
+
|
|
869
|
+
.Building from XMI file
|
|
870
|
+
[example]
|
|
871
|
+
====
|
|
872
|
+
[source,shell]
|
|
873
|
+
----
|
|
874
|
+
$ lutaml uml build model.xmi -o model.lur --name "My Model"
|
|
875
|
+
----
|
|
876
|
+
|
|
877
|
+
Parses the XMI file, validates the model, and creates a LUR package.
|
|
878
|
+
====
|
|
879
|
+
|
|
880
|
+
.Building from QEA file
|
|
881
|
+
[example]
|
|
882
|
+
====
|
|
883
|
+
[source,shell]
|
|
884
|
+
----
|
|
885
|
+
$ lutaml uml build project.qea -o project.lur --validate
|
|
886
|
+
----
|
|
887
|
+
|
|
888
|
+
Parses QEA directly, faster than XMI export+parse.
|
|
889
|
+
====
|
|
890
|
+
|
|
891
|
+
.Build with strict validation
|
|
892
|
+
[example]
|
|
893
|
+
====
|
|
894
|
+
[source,shell]
|
|
895
|
+
----
|
|
896
|
+
$ lutaml uml build model.xmi --strict
|
|
897
|
+
----
|
|
898
|
+
|
|
899
|
+
Fails the build if any validation errors are found.
|
|
900
|
+
====
|
|
901
|
+
|
|
902
|
+
[[info-command]]
|
|
903
|
+
==== `info` - Show package metadata
|
|
904
|
+
|
|
905
|
+
Display metadata and statistics for a LUR package without loading the full repository.
|
|
906
|
+
|
|
907
|
+
[source,shell]
|
|
908
|
+
----
|
|
909
|
+
lutaml uml info LUR [OPTIONS]
|
|
910
|
+
----
|
|
911
|
+
|
|
912
|
+
Where,
|
|
913
|
+
|
|
914
|
+
`LUR`:: Path to LUR package file
|
|
915
|
+
`--format`:: Output format: text, yaml, or json (default: text)
|
|
916
|
+
|
|
917
|
+
.Viewing package information
|
|
918
|
+
[example]
|
|
919
|
+
====
|
|
920
|
+
[source,shell]
|
|
921
|
+
----
|
|
922
|
+
$ lutaml uml info model.lur
|
|
923
|
+
----
|
|
924
|
+
|
|
925
|
+
Shows package name, version, creation date, and contents summary.
|
|
926
|
+
====
|
|
927
|
+
|
|
928
|
+
[[validate-command]]
|
|
929
|
+
==== `validate` - Validate LUR package
|
|
930
|
+
|
|
931
|
+
Validate a LUR package for consistency and completeness.
|
|
932
|
+
|
|
933
|
+
[source,shell]
|
|
934
|
+
----
|
|
935
|
+
lutaml uml validate LUR [OPTIONS]
|
|
936
|
+
----
|
|
937
|
+
|
|
938
|
+
Where,
|
|
939
|
+
|
|
940
|
+
`LUR`:: Path to LUR package file
|
|
941
|
+
`--verbose`:: Show detailed per-attribute type resolution information
|
|
942
|
+
|
|
943
|
+
Checks for:
|
|
944
|
+
|
|
945
|
+
* Dangling references
|
|
946
|
+
* Missing types (with detailed resolution paths when `--verbose` is used)
|
|
947
|
+
* External dependencies
|
|
948
|
+
* Structural integrity
|
|
949
|
+
|
|
950
|
+
.Validating a package
|
|
951
|
+
[example]
|
|
952
|
+
====
|
|
953
|
+
[source,shell]
|
|
954
|
+
----
|
|
955
|
+
$ lutaml uml validate model.lur
|
|
956
|
+
----
|
|
957
|
+
====
|
|
958
|
+
|
|
959
|
+
.Verbose validation with detailed type resolution
|
|
960
|
+
[example]
|
|
961
|
+
====
|
|
962
|
+
[source,shell]
|
|
963
|
+
----
|
|
964
|
+
$ lutaml uml validate model.lur --verbose
|
|
965
|
+
----
|
|
966
|
+
|
|
967
|
+
Shows detailed information about type resolution for each attribute, helping diagnose type reference issues.
|
|
968
|
+
====
|
|
969
|
+
|
|
970
|
+
[[validate-qea-command]]
|
|
971
|
+
==== `validate-qea` - Validate QEA file
|
|
972
|
+
|
|
973
|
+
Validate QEA file structure, referential integrity, and data quality.
|
|
974
|
+
|
|
975
|
+
[source,shell]
|
|
976
|
+
----
|
|
977
|
+
lutaml uml validate-qea FILE [OPTIONS]
|
|
978
|
+
----
|
|
979
|
+
|
|
980
|
+
Where,
|
|
981
|
+
|
|
982
|
+
`FILE`:: Path to QEA file
|
|
983
|
+
`--format`:: Output format: text or json (default: text)
|
|
984
|
+
`-o, --output`:: Save report to file
|
|
985
|
+
`--strict`:: Exit with error if validation fails
|
|
986
|
+
`--show-warnings`:: Show warnings (default: true)
|
|
987
|
+
|
|
988
|
+
.Validating QEA file structure
|
|
989
|
+
[example]
|
|
990
|
+
====
|
|
991
|
+
[source,shell]
|
|
992
|
+
----
|
|
993
|
+
$ lutaml uml validate-qea model.qea --format json -o report.json
|
|
994
|
+
----
|
|
995
|
+
|
|
996
|
+
Validates package structure, associations, references, and exports detailed report.
|
|
997
|
+
====
|
|
998
|
+
|
|
999
|
+
[[ls-command]]
|
|
1000
|
+
==== `ls` - List elements
|
|
1001
|
+
|
|
1002
|
+
List elements at the specified path in the repository.
|
|
1003
|
+
|
|
1004
|
+
[source,shell]
|
|
1005
|
+
----
|
|
1006
|
+
lutaml uml ls LUR [PATH] [OPTIONS]
|
|
1007
|
+
----
|
|
1008
|
+
|
|
1009
|
+
Where,
|
|
1010
|
+
|
|
1011
|
+
`LUR`:: Path to LUR package file
|
|
1012
|
+
`PATH`:: Package path to list (optional, default: root)
|
|
1013
|
+
`--type`:: Element type: packages, classes, diagrams, or all (default: packages)
|
|
1014
|
+
`--format`:: Output format: text, table, yaml, or json (default: text)
|
|
1015
|
+
`-r, --recursive`:: Include nested elements
|
|
1016
|
+
`--lazy`:: Use lazy loading for large repositories
|
|
1017
|
+
|
|
1018
|
+
.List top-level packages
|
|
1019
|
+
[example]
|
|
1020
|
+
====
|
|
1021
|
+
[source,shell]
|
|
1022
|
+
----
|
|
1023
|
+
$ lutaml uml ls model.lur
|
|
1024
|
+
----
|
|
1025
|
+
====
|
|
1026
|
+
|
|
1027
|
+
.List classes in a package
|
|
1028
|
+
[example]
|
|
1029
|
+
====
|
|
1030
|
+
[source,shell]
|
|
1031
|
+
----
|
|
1032
|
+
$ lutaml uml ls model.lur ModelRoot::Core --type classes
|
|
1033
|
+
----
|
|
1034
|
+
====
|
|
1035
|
+
|
|
1036
|
+
.List all diagrams
|
|
1037
|
+
[example]
|
|
1038
|
+
====
|
|
1039
|
+
[source,shell]
|
|
1040
|
+
----
|
|
1041
|
+
$ lutaml uml ls model.lur --type diagrams
|
|
1042
|
+
----
|
|
1043
|
+
====
|
|
1044
|
+
|
|
1045
|
+
[[inspect-command]]
|
|
1046
|
+
==== `inspect` - Show element details
|
|
1047
|
+
|
|
1048
|
+
Display detailed information about a specific element.
|
|
1049
|
+
|
|
1050
|
+
[source,shell]
|
|
1051
|
+
----
|
|
1052
|
+
lutaml uml inspect LUR ELEMENT [OPTIONS]
|
|
1053
|
+
----
|
|
1054
|
+
|
|
1055
|
+
Where,
|
|
1056
|
+
|
|
1057
|
+
`LUR`:: Path to LUR package file
|
|
1058
|
+
`ELEMENT`:: Element identifier in format `type:identifier`
|
|
1059
|
+
+
|
|
1060
|
+
Valid types: `package`, `class`, `diagram`, `attribute`
|
|
1061
|
+
|
|
1062
|
+
`--format`:: Output format: text, yaml, or json (default: text)
|
|
1063
|
+
`--include`:: Sections to include: attributes, associations, operations
|
|
1064
|
+
|
|
1065
|
+
.Inspect a class
|
|
1066
|
+
[example]
|
|
1067
|
+
====
|
|
1068
|
+
[source,shell]
|
|
1069
|
+
----
|
|
1070
|
+
$ lutaml uml inspect model.lur class:Building
|
|
1071
|
+
$ lutaml uml inspect model.lur class:ModelRoot::Core::Building
|
|
1072
|
+
----
|
|
1073
|
+
|
|
1074
|
+
Shows class details including attributes, associations, and operations.
|
|
1075
|
+
====
|
|
1076
|
+
|
|
1077
|
+
.Inspect a package
|
|
1078
|
+
[example]
|
|
1079
|
+
====
|
|
1080
|
+
[source,shell]
|
|
1081
|
+
----
|
|
1082
|
+
$ lutaml uml inspect model.lur package:ModelRoot::Core
|
|
1083
|
+
----
|
|
1084
|
+
====
|
|
1085
|
+
|
|
1086
|
+
.Inspect a diagram
|
|
1087
|
+
[example]
|
|
1088
|
+
====
|
|
1089
|
+
[source,shell]
|
|
1090
|
+
----
|
|
1091
|
+
$ lutaml uml inspect model.lur diagram:ClassDiagram1
|
|
1092
|
+
----
|
|
1093
|
+
====
|
|
1094
|
+
|
|
1095
|
+
[[tree-command]]
|
|
1096
|
+
==== `tree` - Show package tree
|
|
1097
|
+
|
|
1098
|
+
Display a hierarchical tree view of the package structure.
|
|
1099
|
+
|
|
1100
|
+
[source,shell]
|
|
1101
|
+
----
|
|
1102
|
+
lutaml uml tree LUR [PATH] [OPTIONS]
|
|
1103
|
+
----
|
|
1104
|
+
|
|
1105
|
+
Where,
|
|
1106
|
+
|
|
1107
|
+
`LUR`:: Path to LUR package file
|
|
1108
|
+
`PATH`:: Starting package path (optional, default: root)
|
|
1109
|
+
`-d, --depth`:: Maximum depth to display
|
|
1110
|
+
`--show-counts`:: Show class and diagram counts (default: true)
|
|
1111
|
+
`--format`:: Output format: text, yaml, or json (default: text)
|
|
1112
|
+
|
|
1113
|
+
.Show full package tree
|
|
1114
|
+
[example]
|
|
1115
|
+
====
|
|
1116
|
+
[source,shell]
|
|
1117
|
+
----
|
|
1118
|
+
$ lutaml uml tree model.lur
|
|
1119
|
+
----
|
|
1120
|
+
====
|
|
1121
|
+
|
|
1122
|
+
.Show subtree with limited depth
|
|
1123
|
+
[example]
|
|
1124
|
+
====
|
|
1125
|
+
[source,shell]
|
|
1126
|
+
----
|
|
1127
|
+
$ lutaml uml tree model.lur ModelRoot::Core --depth 2
|
|
1128
|
+
----
|
|
1129
|
+
====
|
|
1130
|
+
|
|
1131
|
+
[[element-details]]
|
|
1132
|
+
==== `show` - Display element details
|
|
1133
|
+
|
|
1134
|
+
===== General
|
|
1135
|
+
|
|
1136
|
+
The `show` commands display detailed information about specific UML elements.
|
|
1137
|
+
|
|
1138
|
+
===== Showing class details
|
|
1139
|
+
|
|
1140
|
+
[source,shell]
|
|
1141
|
+
----
|
|
1142
|
+
lutaml uml show class <QUALIFIED_NAME> --from <LUR_PATH>
|
|
1143
|
+
----
|
|
1144
|
+
|
|
1145
|
+
.Viewing a class
|
|
1146
|
+
[example]
|
|
1147
|
+
====
|
|
1148
|
+
[source,shell]
|
|
1149
|
+
----
|
|
1150
|
+
$ lutaml uml show class "ModelRoot::CityGML2.0::bldg::Building" --from plateau.lur
|
|
1151
|
+
----
|
|
1152
|
+
|
|
1153
|
+
Displays:
|
|
1154
|
+
|
|
1155
|
+
* Class name and XMI ID
|
|
1156
|
+
* Stereotype and abstract flag
|
|
1157
|
+
* Inheritance information
|
|
1158
|
+
* Attributes (with types and cardinality)
|
|
1159
|
+
* Associations
|
|
1160
|
+
* Operations
|
|
1161
|
+
====
|
|
1162
|
+
|
|
1163
|
+
===== Showing attribute details
|
|
1164
|
+
|
|
1165
|
+
[source,shell]
|
|
1166
|
+
----
|
|
1167
|
+
lutaml uml show attribute <QUALIFIED_NAME> --from <LUR_PATH>
|
|
1168
|
+
----
|
|
1169
|
+
|
|
1170
|
+
Where `<QUALIFIED_NAME>` includes the class path, e.g., `Package::Class::attributeName`.
|
|
1171
|
+
|
|
1172
|
+
.Viewing an attribute
|
|
1173
|
+
[example]
|
|
1174
|
+
====
|
|
1175
|
+
[source,shell]
|
|
1176
|
+
----
|
|
1177
|
+
$ lutaml uml show attribute "ModelRoot::CityGML2.0::bldg::Building::buildingHeight" --from plateau.lur
|
|
1178
|
+
----
|
|
1179
|
+
|
|
1180
|
+
Displays:
|
|
1181
|
+
|
|
1182
|
+
* Attribute name
|
|
1183
|
+
* Owning class
|
|
1184
|
+
* Type and cardinality
|
|
1185
|
+
* Visibility and stereotype
|
|
1186
|
+
* Documentation
|
|
1187
|
+
====
|
|
1188
|
+
|
|
1189
|
+
===== Showing association details
|
|
1190
|
+
|
|
1191
|
+
[source,shell]
|
|
1192
|
+
----
|
|
1193
|
+
lutaml uml show association <NAME_OR_ID> --from <LUR_PATH>
|
|
1194
|
+
----
|
|
1195
|
+
|
|
1196
|
+
.Viewing an association
|
|
1197
|
+
[example]
|
|
1198
|
+
====
|
|
1199
|
+
[source,shell]
|
|
1200
|
+
----
|
|
1201
|
+
$ lutaml uml show association "cityObjectMember" --from plateau.lur
|
|
1202
|
+
----
|
|
1203
|
+
|
|
1204
|
+
Displays:
|
|
1205
|
+
|
|
1206
|
+
* Association name and XMI ID
|
|
1207
|
+
* Source and target classes
|
|
1208
|
+
* Roles and multiplicities
|
|
1209
|
+
* Association type
|
|
1210
|
+
====
|
|
1211
|
+
|
|
1212
|
+
===== Showing enumeration details
|
|
1213
|
+
|
|
1214
|
+
[source,shell]
|
|
1215
|
+
----
|
|
1216
|
+
lutaml uml show enum <QUALIFIED_NAME> --from <LUR_PATH>
|
|
1217
|
+
----
|
|
1218
|
+
|
|
1219
|
+
.Viewing an enumeration
|
|
1220
|
+
[example]
|
|
1221
|
+
====
|
|
1222
|
+
[source,shell]
|
|
1223
|
+
----
|
|
1224
|
+
$ lutaml uml show enum "ModelRoot::Package::StatusCode" --from plateau.lur
|
|
1225
|
+
----
|
|
1226
|
+
|
|
1227
|
+
Displays:
|
|
1228
|
+
|
|
1229
|
+
* Enum name and package
|
|
1230
|
+
* All literal values
|
|
1231
|
+
* Stereotypes
|
|
1232
|
+
* Documentation
|
|
1233
|
+
====
|
|
1234
|
+
|
|
1235
|
+
===== Showing data type details
|
|
1236
|
+
|
|
1237
|
+
[source,shell]
|
|
1238
|
+
----
|
|
1239
|
+
lutaml uml show datatype <QUALIFIED_NAME> --from <LUR_PATH>
|
|
1240
|
+
----
|
|
1241
|
+
|
|
1242
|
+
.Viewing a data type
|
|
1243
|
+
[example]
|
|
1244
|
+
====
|
|
1245
|
+
[source,shell]
|
|
1246
|
+
----
|
|
1247
|
+
$ lutaml uml show datatype "ModelRoot::gml::MeasureType" --from plateau.lur
|
|
1248
|
+
----
|
|
1249
|
+
|
|
1250
|
+
Displays:
|
|
1251
|
+
|
|
1252
|
+
* Data type name
|
|
1253
|
+
* Attributes (if structured)
|
|
1254
|
+
* Operations
|
|
1255
|
+
* Stereotypes
|
|
1256
|
+
====
|
|
1257
|
+
|
|
1258
|
+
===== Output formats
|
|
1259
|
+
|
|
1260
|
+
All `show` commands support multiple output formats via the `--format` option:
|
|
1261
|
+
|
|
1262
|
+
`--format text`:: Formatted text output (default)
|
|
1263
|
+
`--format yaml`:: YAML structured data
|
|
1264
|
+
`--format json`:: JSON structured data
|
|
1265
|
+
|
|
1266
|
+
.Exporting element details as JSON
|
|
1267
|
+
[example]
|
|
1268
|
+
====
|
|
1269
|
+
[source,shell]
|
|
1270
|
+
----
|
|
1271
|
+
$ lutaml uml show class "ModelRoot::Package::MyClass" --from model.lur --format json
|
|
1272
|
+
----
|
|
1273
|
+
|
|
1274
|
+
Returns structured JSON data suitable for programmatic processing.
|
|
1275
|
+
====
|
|
1276
|
+
|
|
1277
|
+
|
|
1278
|
+
[[stats-command]]
|
|
1279
|
+
==== `stats` - Repository statistics
|
|
1280
|
+
|
|
1281
|
+
Display statistics about the repository or a specific package.
|
|
1282
|
+
|
|
1283
|
+
[source,shell]
|
|
1284
|
+
----
|
|
1285
|
+
lutaml uml stats LUR [OPTIONS]
|
|
1286
|
+
----
|
|
1287
|
+
|
|
1288
|
+
Where,
|
|
1289
|
+
|
|
1290
|
+
`LUR`:: Path to LUR package file
|
|
1291
|
+
`--type`:: Statistics type: packages, classes, diagrams, or all (default: all)
|
|
1292
|
+
`--detailed`:: Show detailed breakdown
|
|
1293
|
+
`--format`:: Output format: text, yaml, or json (default: text)
|
|
1294
|
+
|
|
1295
|
+
.Show repository statistics
|
|
1296
|
+
[example]
|
|
1297
|
+
====
|
|
1298
|
+
[source,shell]
|
|
1299
|
+
----
|
|
1300
|
+
$ lutaml uml stats model.lur --detailed
|
|
1301
|
+
----
|
|
1302
|
+
|
|
1303
|
+
Displays counts of packages, classes, data types, enumerations, diagrams, and stereotypes.
|
|
1304
|
+
====
|
|
1305
|
+
|
|
1306
|
+
[[search-command]]
|
|
1307
|
+
==== `search` - Full-text search
|
|
1308
|
+
|
|
1309
|
+
The `search` command performs powerful text and pattern-based search across
|
|
1310
|
+
classes, attributes, and associations with advanced filtering, export
|
|
1311
|
+
capabilities, and intelligent suggestions.
|
|
1312
|
+
|
|
1313
|
+
Advanced features include wildcard package matching, regex patterns,
|
|
1314
|
+
field-specific search, result export, and search suggestions.
|
|
1315
|
+
|
|
1316
|
+
[source,shell]
|
|
1317
|
+
----
|
|
1318
|
+
lutaml uml search <LUR> <QUERY> [OPTIONS]
|
|
1319
|
+
----
|
|
1320
|
+
|
|
1321
|
+
Where,
|
|
1322
|
+
|
|
1323
|
+
`<LUR>`:: Path to LUR package file
|
|
1324
|
+
`<QUERY>`:: Search query text
|
|
1325
|
+
`--type`:: Element types to search: class, attribute, association (default: all)
|
|
1326
|
+
`--package`:: Filter by package path (supports wildcards: `*`, `?`, `[abc]`)
|
|
1327
|
+
`--regex`:: Treat query as regular expression
|
|
1328
|
+
`--in`:: Fields to search: name, documentation (default: name)
|
|
1329
|
+
`--format`:: Output format: text, table, yaml, or json (default: table)
|
|
1330
|
+
`--limit`:: Maximum results (default: 100)
|
|
1331
|
+
|
|
1332
|
+
.Searching for "building" across all element types
|
|
1333
|
+
[example]
|
|
1334
|
+
====
|
|
1335
|
+
[source,shell]
|
|
1336
|
+
----
|
|
1337
|
+
$ lutaml uml search plateau.lur "building"
|
|
1338
|
+
----
|
|
1339
|
+
|
|
1340
|
+
This searches for "building" in class names, attribute names, and association names, displaying results in a table format:
|
|
1341
|
+
|
|
1342
|
+
[source]
|
|
1343
|
+
----
|
|
1344
|
+
Search Results for 'building':
|
|
1345
|
+
|
|
1346
|
+
Type | Name | Package | Details
|
|
1347
|
+
──────────────────────────────────────────────────────────────────────────────────────
|
|
1348
|
+
Class | Building | ModelRoot::CityGML2.0::bldg | <<FeatureType>>
|
|
1349
|
+
Class | BuildingPart | ModelRoot::CityGML2.0::bldg | <<FeatureType>>
|
|
1350
|
+
Attribute | buildingHeight | ModelRoot::CityGML2.0::bldg | Building::buildingHeight : Double
|
|
1351
|
+
Attribute | buildingCoverageRate | ModelRoot::i-UR::urf | Administration::buildingCoverageRate : xs::integer
|
|
1352
|
+
...
|
|
1353
|
+
|
|
1354
|
+
Summary: 28 class(es), 73 attribute(s), 45 association(s)
|
|
1355
|
+
----
|
|
1356
|
+
====
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
**Core search options**:
|
|
1360
|
+
|
|
1361
|
+
`--element-type <TYPE>`::
|
|
1362
|
+
Filter results by element type.
|
|
1363
|
+
Valid values: `class`, `attribute`, `association`.
|
|
1364
|
+
|
|
1365
|
+
`--package <PATH>`::
|
|
1366
|
+
Filter results to show only elements within the specified package path.
|
|
1367
|
+
Supports explicit wildcards: `*`, `?`, `[abc]`.
|
|
1368
|
+
|
|
1369
|
+
`--sort <FIELD>`::
|
|
1370
|
+
Sort results.
|
|
1371
|
+
Valid values: `type`, `name`, `package`.
|
|
1372
|
+
Default: `type`.
|
|
1373
|
+
|
|
1374
|
+
`--limit <NUMBER>`::
|
|
1375
|
+
Limit the number of results displayed.
|
|
1376
|
+
Default: `100`.
|
|
1377
|
+
|
|
1378
|
+
`--format <FORMAT>`::
|
|
1379
|
+
Output format.
|
|
1380
|
+
Valid values: `table`, `text`, `yaml`, `json`.
|
|
1381
|
+
Default: `table`.
|
|
1382
|
+
|
|
1383
|
+
`--regex`::
|
|
1384
|
+
Treat query as a regular expression pattern.
|
|
1385
|
+
Enables powerful pattern-based searching.
|
|
1386
|
+
|
|
1387
|
+
`--in <FIELDS...>`::
|
|
1388
|
+
Specify which fields to search in.
|
|
1389
|
+
Valid values: `name`, `documentation`.
|
|
1390
|
+
Default: `name`.
|
|
1391
|
+
Can specify multiple fields.
|
|
1392
|
+
|
|
1393
|
+
`--count`::
|
|
1394
|
+
Show only result counts without displaying full results.
|
|
1395
|
+
Displays total count and breakdown by element type.
|
|
1396
|
+
|
|
1397
|
+
`--export <FILE>`::
|
|
1398
|
+
Export search results to a file.
|
|
1399
|
+
Format auto-detected from extension (`.json` or `.yaml`/`.yml`).
|
|
1400
|
+
|
|
1401
|
+
.Wildcard package matching
|
|
1402
|
+
[example]
|
|
1403
|
+
====
|
|
1404
|
+
[source,shell]
|
|
1405
|
+
----
|
|
1406
|
+
$ lutaml uml search plateau.lur "building" --package "*i-UR*"
|
|
1407
|
+
----
|
|
1408
|
+
|
|
1409
|
+
Matches any package path containing "i-UR" anywhere.
|
|
1410
|
+
Found 95 results compared to 50 with full path `"ModelRoot::Conceptual Models::i-UR"`.
|
|
1411
|
+
|
|
1412
|
+
Wildcard patterns supported:
|
|
1413
|
+
|
|
1414
|
+
* `*` - Matches any characters
|
|
1415
|
+
* `?` - Matches single character
|
|
1416
|
+
* `[abc]` - Matches one character from set
|
|
1417
|
+
====
|
|
1418
|
+
|
|
1419
|
+
|
|
1420
|
+
.Regex pattern search
|
|
1421
|
+
[example]
|
|
1422
|
+
====
|
|
1423
|
+
[source,shell]
|
|
1424
|
+
----
|
|
1425
|
+
$ lutaml uml search plateau.lur "^Building" --regex --element-type class
|
|
1426
|
+
----
|
|
1427
|
+
|
|
1428
|
+
Finds all classes whose names start with "Building" (case-sensitive regex).
|
|
1429
|
+
Found 17 classes: Building, BuildingPart, BuildingInstallation, etc.
|
|
1430
|
+
|
|
1431
|
+
The `--regex` flag treats the query as a regular expression:
|
|
1432
|
+
|
|
1433
|
+
* `^Building` - Names starting with "Building"
|
|
1434
|
+
* `.*Address$` - Names ending with "Address"
|
|
1435
|
+
* `Building|Structure` - Names containing either word
|
|
1436
|
+
====
|
|
1437
|
+
|
|
1438
|
+
|
|
1439
|
+
.Searching in documentation
|
|
1440
|
+
[example]
|
|
1441
|
+
====
|
|
1442
|
+
[source,shell]
|
|
1443
|
+
----
|
|
1444
|
+
$ lutaml uml search plateau.lur "urban planning" --in name documentation
|
|
1445
|
+
----
|
|
1446
|
+
|
|
1447
|
+
Searches both name and documentation fields.
|
|
1448
|
+
Useful for finding elements by their purpose or description, not just their name.
|
|
1449
|
+
|
|
1450
|
+
Multiple fields can be specified:
|
|
1451
|
+
|
|
1452
|
+
* `--in name` - Search names only (default)
|
|
1453
|
+
* `--in documentation` - Search documentation only
|
|
1454
|
+
* `--in name documentation` - Search both fields
|
|
1455
|
+
====
|
|
1456
|
+
|
|
1457
|
+
.Count-only mode
|
|
1458
|
+
[example]
|
|
1459
|
+
====
|
|
1460
|
+
[source,shell]
|
|
1461
|
+
----
|
|
1462
|
+
$ lutaml uml search plateau.lur "building" --count
|
|
1463
|
+
----
|
|
1464
|
+
|
|
1465
|
+
Shows statistics without displaying full results:
|
|
1466
|
+
|
|
1467
|
+
[source]
|
|
1468
|
+
----
|
|
1469
|
+
Search Results for 'building':
|
|
1470
|
+
|
|
1471
|
+
Total Results: 146
|
|
1472
|
+
|
|
1473
|
+
Breakdown by Type:
|
|
1474
|
+
Association 45
|
|
1475
|
+
Attribute 73
|
|
1476
|
+
Class 28
|
|
1477
|
+
----
|
|
1478
|
+
|
|
1479
|
+
Useful for quick analysis or when combined with filters:
|
|
1480
|
+
|
|
1481
|
+
[source,shell]
|
|
1482
|
+
----
|
|
1483
|
+
$ lutaml uml search plateau.lur "building" --element-type class --count
|
|
1484
|
+
----
|
|
1485
|
+
====
|
|
1486
|
+
|
|
1487
|
+
.Exporting search results
|
|
1488
|
+
[example]
|
|
1489
|
+
====
|
|
1490
|
+
[source,shell]
|
|
1491
|
+
----
|
|
1492
|
+
$ lutaml uml search plateau.lur "Building" --element-type class --export results.json
|
|
1493
|
+
$ lutaml uml search plateau.lur "Building" --element-type class --export results.yaml
|
|
1494
|
+
----
|
|
1495
|
+
|
|
1496
|
+
Exports filtered search results to a file for further processing.
|
|
1497
|
+
The format is auto-detected from the file extension.
|
|
1498
|
+
|
|
1499
|
+
Exported data includes:
|
|
1500
|
+
|
|
1501
|
+
* `element_type` - Type of element (class, attribute, association)
|
|
1502
|
+
* `qualified_name` - Full qualified name
|
|
1503
|
+
* `package_path` - Package location
|
|
1504
|
+
* `match_field` - Which field matched (name or documentation)
|
|
1505
|
+
* `match_context` - Additional context (e.g., class name for attributes)
|
|
1506
|
+
====
|
|
1507
|
+
|
|
1508
|
+
.Search suggestions
|
|
1509
|
+
[example]
|
|
1510
|
+
====
|
|
1511
|
+
When no results are found, the search suggests similar terms based on edit distance and substring matching:
|
|
1512
|
+
|
|
1513
|
+
[source,shell]
|
|
1514
|
+
----
|
|
1515
|
+
$ lutaml uml search plateau.lur "Buiding"
|
|
1516
|
+
----
|
|
1517
|
+
|
|
1518
|
+
[source]
|
|
1519
|
+
----
|
|
1520
|
+
⚠ No results found for 'Buiding'
|
|
1521
|
+
|
|
1522
|
+
Did you mean one of these?
|
|
1523
|
+
• Building
|
|
1524
|
+
• BuildingPart
|
|
1525
|
+
• BuildingInstallation
|
|
1526
|
+
----
|
|
1527
|
+
|
|
1528
|
+
Suggestions use Levenshtein distance algorithm to find close matches.
|
|
1529
|
+
====
|
|
1530
|
+
|
|
1531
|
+
.Combining advanced features
|
|
1532
|
+
[example]
|
|
1533
|
+
====
|
|
1534
|
+
[source,shell]
|
|
1535
|
+
----
|
|
1536
|
+
$ lutaml uml search plateau.lur "^Build" \
|
|
1537
|
+
--regex \
|
|
1538
|
+
--package "*CityGML*" \
|
|
1539
|
+
--element-type class \
|
|
1540
|
+
--sort name \
|
|
1541
|
+
--limit 10 \
|
|
1542
|
+
--export citygml_buildings.json
|
|
1543
|
+
----
|
|
1544
|
+
|
|
1545
|
+
This command:
|
|
1546
|
+
|
|
1547
|
+
* Uses regex to find names starting with "Build"
|
|
1548
|
+
* Filters to packages containing "CityGML"
|
|
1549
|
+
* Shows only classes
|
|
1550
|
+
* Sorts by name
|
|
1551
|
+
* Limits to 10 results
|
|
1552
|
+
* Exports to JSON file
|
|
1553
|
+
|
|
1554
|
+
Multiple filters work together seamlessly.
|
|
1555
|
+
====
|
|
1556
|
+
|
|
1557
|
+
.Filtering search results by element type
|
|
1558
|
+
[example]
|
|
1559
|
+
====
|
|
1560
|
+
[source,shell]
|
|
1561
|
+
----
|
|
1562
|
+
$ lutaml uml search plateau.lur "building" --element-type class
|
|
1563
|
+
----
|
|
1564
|
+
|
|
1565
|
+
Shows only classes matching "building", excluding attributes and associations.
|
|
1566
|
+
====
|
|
1567
|
+
|
|
1568
|
+
.Searching within a specific package
|
|
1569
|
+
[example]
|
|
1570
|
+
====
|
|
1571
|
+
[source,shell]
|
|
1572
|
+
----
|
|
1573
|
+
$ lutaml uml search plateau.lur "urban" --package "ModelRoot::Conceptual Models::i-UR"
|
|
1574
|
+
----
|
|
1575
|
+
|
|
1576
|
+
Searches for "urban" only within the i-UR package and its subpackages.
|
|
1577
|
+
====
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
*Pagination*::
|
|
1581
|
+
|
|
1582
|
+
For large result sets, use pagination to view results in manageable chunks.
|
|
1583
|
+
|
|
1584
|
+
`--per-page <NUMBER>`::
|
|
1585
|
+
Number of results per page.
|
|
1586
|
+
Default: `50`.
|
|
1587
|
+
|
|
1588
|
+
`--page <NUMBER>`::
|
|
1589
|
+
Page number to display (1-based).
|
|
1590
|
+
Default: `1`.
|
|
1591
|
+
|
|
1592
|
+
.Paginating through search results
|
|
1593
|
+
[example]
|
|
1594
|
+
====
|
|
1595
|
+
[source,shell]
|
|
1596
|
+
----
|
|
1597
|
+
$ lutaml uml search plateau.lur "class" --per-page 20 --page 1 # First page
|
|
1598
|
+
$ lutaml uml search plateau.lur "class" --per-page 20 --page 2 # Second page
|
|
1599
|
+
----
|
|
1600
|
+
|
|
1601
|
+
View results 20 at a time, navigating through pages.
|
|
1602
|
+
====
|
|
1603
|
+
|
|
1604
|
+
|
|
1605
|
+
// TODO: COMBINE SEARCH AND FIND
|
|
1606
|
+
[[find-command]]
|
|
1607
|
+
==== `find` - Find by criteria
|
|
1608
|
+
|
|
1609
|
+
Find elements matching specific criteria.
|
|
1610
|
+
|
|
1611
|
+
[source,shell]
|
|
1612
|
+
----
|
|
1613
|
+
lutaml uml find LUR [OPTIONS]
|
|
1614
|
+
----
|
|
1615
|
+
|
|
1616
|
+
Where,
|
|
1617
|
+
|
|
1618
|
+
`LUR`:: Path to LUR package file
|
|
1619
|
+
`--stereotype`:: Filter by stereotype
|
|
1620
|
+
`--package`:: Filter by package path
|
|
1621
|
+
`--pattern`:: Match name pattern (regex)
|
|
1622
|
+
`--format`:: Output format: text, yaml, or json (default: text)
|
|
1623
|
+
|
|
1624
|
+
.Find by stereotype
|
|
1625
|
+
[example]
|
|
1626
|
+
====
|
|
1627
|
+
[source,shell]
|
|
1628
|
+
----
|
|
1629
|
+
$ lutaml uml find model.lur --stereotype featureType
|
|
1630
|
+
----
|
|
1631
|
+
====
|
|
1632
|
+
|
|
1633
|
+
.Find by package
|
|
1634
|
+
[example]
|
|
1635
|
+
====
|
|
1636
|
+
[source,shell]
|
|
1637
|
+
----
|
|
1638
|
+
$ lutaml uml find model.lur --package ModelRoot::Core
|
|
1639
|
+
----
|
|
1640
|
+
====
|
|
1641
|
+
|
|
1642
|
+
.Find by pattern
|
|
1643
|
+
[example]
|
|
1644
|
+
====
|
|
1645
|
+
[source,shell]
|
|
1646
|
+
----
|
|
1647
|
+
$ lutaml uml find model.lur --pattern "^Building.*"
|
|
1648
|
+
----
|
|
1649
|
+
====
|
|
1650
|
+
|
|
1651
|
+
// TODO: REMOVE THIS COMMAND
|
|
1652
|
+
// [[export-command]]
|
|
1653
|
+
// ==== `export` - Export to formats
|
|
1654
|
+
|
|
1655
|
+
// Export repository data to various structured formats.
|
|
1656
|
+
|
|
1657
|
+
// [source,shell]
|
|
1658
|
+
// ----
|
|
1659
|
+
// lutaml uml export LUR --format FORMAT -o OUTPUT [OPTIONS]
|
|
1660
|
+
// ----
|
|
1661
|
+
|
|
1662
|
+
// Where,
|
|
1663
|
+
|
|
1664
|
+
// `LUR`:: Path to LUR package file
|
|
1665
|
+
// `--format`:: Export format: csv, json, or markdown (required)
|
|
1666
|
+
// `-o, --output`:: Output path (required)
|
|
1667
|
+
// `--package`:: Filter by package
|
|
1668
|
+
// `--recursive`:: Include nested packages (default: true)
|
|
1669
|
+
|
|
1670
|
+
// .Export to CSV
|
|
1671
|
+
// [example]
|
|
1672
|
+
// ====
|
|
1673
|
+
// [source,shell]
|
|
1674
|
+
// ----
|
|
1675
|
+
// $ lutaml uml export model.lur --format csv -o classes.csv
|
|
1676
|
+
// ----
|
|
1677
|
+
|
|
1678
|
+
// Exports all classes to CSV format.
|
|
1679
|
+
// ====
|
|
1680
|
+
|
|
1681
|
+
// .Export to JSON
|
|
1682
|
+
// [example]
|
|
1683
|
+
// ====
|
|
1684
|
+
// [source,shell]
|
|
1685
|
+
// ----
|
|
1686
|
+
// $ lutaml uml export model.lur --format json -o model.json
|
|
1687
|
+
// ----
|
|
1688
|
+
|
|
1689
|
+
// Exports full repository structure to JSON.
|
|
1690
|
+
// ====
|
|
1691
|
+
|
|
1692
|
+
// .Export to Markdown
|
|
1693
|
+
// [example]
|
|
1694
|
+
// ====
|
|
1695
|
+
// [source,shell]
|
|
1696
|
+
// ----
|
|
1697
|
+
// $ lutaml uml export model.lur --format markdown -o docs/
|
|
1698
|
+
// ----
|
|
1699
|
+
|
|
1700
|
+
// Generates Markdown documentation files.
|
|
1701
|
+
// ====
|
|
1702
|
+
|
|
1703
|
+
|
|
1704
|
+
|
|
1705
|
+
[[build-spa-command]]
|
|
1706
|
+
==== `build-spa` - Generate SPA documentation
|
|
1707
|
+
|
|
1708
|
+
A LUR package can be transformed into a Single Page Application (SPA) for
|
|
1709
|
+
interactive browsing of the UML model.
|
|
1710
|
+
|
|
1711
|
+
The SPA provides a user-friendly web interface with search, navigation, and
|
|
1712
|
+
detailed class views.
|
|
1713
|
+
|
|
1714
|
+
Features of the generated SPA:
|
|
1715
|
+
|
|
1716
|
+
* Vanilla JavaScript: No frameworks required, fast loading
|
|
1717
|
+
* Responsive design: Works on desktop and mobile
|
|
1718
|
+
* Offline capable: Single-file mode works without a server
|
|
1719
|
+
* Search: Full-text search with highlighting
|
|
1720
|
+
* Navigation: Package tree with counts, breadcrumbs
|
|
1721
|
+
|
|
1722
|
+
* Detailed view: Comprehensive class information with:
|
|
1723
|
+
** Direct attributes and inherited attributes (in separate tables)
|
|
1724
|
+
** Direct associations and inherited associations (in separate tables)
|
|
1725
|
+
** Operations
|
|
1726
|
+
** Inheritance hierarchy (generalizations and specializations)
|
|
1727
|
+
** Stereotypes and documentation
|
|
1728
|
+
|
|
1729
|
+
|
|
1730
|
+
Syntax:
|
|
1731
|
+
|
|
1732
|
+
[source,shell]
|
|
1733
|
+
----
|
|
1734
|
+
lutaml uml build-spa LUR -o OUTPUT [OPTIONS]
|
|
1735
|
+
----
|
|
1736
|
+
|
|
1737
|
+
Where,
|
|
1738
|
+
|
|
1739
|
+
`LUR`:: Path to LUR package file
|
|
1740
|
+
`-o, --output`:: Output file path (required)
|
|
1741
|
+
`--mode`:: Generation mode: `single_file` (default) or `multi_file`
|
|
1742
|
+
`--title`:: Documentation title (default: "UML Model Browser")
|
|
1743
|
+
`--theme`:: Color theme: `light` (default) or `dark`
|
|
1744
|
+
|
|
1745
|
+
The `build-spa` command generates an interactive documentation site with:
|
|
1746
|
+
|
|
1747
|
+
* **Search functionality**: Full-text search across all model elements
|
|
1748
|
+
* **Package navigation**: Tree-based browsing of the package hierarchy
|
|
1749
|
+
* **Class details**: Complete class information including attributes, associations, operations, and inheritance
|
|
1750
|
+
* **Inherited data**: Separate display of inherited attributes and associations
|
|
1751
|
+
* **Diagram integration**: Embedded diagram viewing (when available)
|
|
1752
|
+
|
|
1753
|
+
.Generate single-file SPA (default)
|
|
1754
|
+
[example]
|
|
1755
|
+
====
|
|
1756
|
+
[source,shell]
|
|
1757
|
+
----
|
|
1758
|
+
$ lutaml uml build-spa model.lur -o docs/index.html --title "My UML Model"
|
|
1759
|
+
----
|
|
1760
|
+
|
|
1761
|
+
Creates a single HTML file (3-4MB for large models) with all data, CSS, and JavaScript embedded. Perfect for easy distribution and offline viewing.
|
|
1762
|
+
====
|
|
1763
|
+
|
|
1764
|
+
.Generate multi-file SPA
|
|
1765
|
+
[example]
|
|
1766
|
+
====
|
|
1767
|
+
[source,shell]
|
|
1768
|
+
----
|
|
1769
|
+
$ lutaml uml build-spa model.lur -o docs/ --mode multi_file
|
|
1770
|
+
----
|
|
1771
|
+
|
|
1772
|
+
Creates a directory structure with separate HTML, CSS, and JavaScript files. Better for version control and incremental updates.
|
|
1773
|
+
====
|
|
1774
|
+
|
|
1775
|
+
|
|
1776
|
+
|
|
1777
|
+
[[serve-command]]
|
|
1778
|
+
==== `serve` - Start web UI
|
|
1779
|
+
|
|
1780
|
+
Start a web server with an interactive UI for browsing the model.
|
|
1781
|
+
|
|
1782
|
+
[source,shell]
|
|
1783
|
+
----
|
|
1784
|
+
lutaml uml serve LUR [OPTIONS]
|
|
1785
|
+
----
|
|
1786
|
+
|
|
1787
|
+
Where,
|
|
1788
|
+
|
|
1789
|
+
`LUR`:: Path to LUR package file
|
|
1790
|
+
`-p, --port`:: Port to listen on (default: 3000)
|
|
1791
|
+
`-h, --host`:: Host to bind to (default: localhost)
|
|
1792
|
+
|
|
1793
|
+
.Start web UI server
|
|
1794
|
+
[example]
|
|
1795
|
+
====
|
|
1796
|
+
[source,shell]
|
|
1797
|
+
----
|
|
1798
|
+
$ lutaml uml serve model.lur --port 8080
|
|
1799
|
+
----
|
|
1800
|
+
|
|
1801
|
+
Starts interactive web interface at http://localhost:8080.
|
|
1802
|
+
====
|
|
1803
|
+
|
|
1804
|
+
|
|
1805
|
+
|
|
1806
|
+
[[repl-command]]
|
|
1807
|
+
==== `repl` - Interactive shell
|
|
1808
|
+
|
|
1809
|
+
LutaML provides an interactive command-line shell (REPL) for exploring LUR
|
|
1810
|
+
packages.
|
|
1811
|
+
|
|
1812
|
+
Syntax:
|
|
1813
|
+
|
|
1814
|
+
[source,shell]
|
|
1815
|
+
----
|
|
1816
|
+
lutaml uml repl LUR [OPTIONS]
|
|
1817
|
+
----
|
|
1818
|
+
|
|
1819
|
+
Where,
|
|
1820
|
+
|
|
1821
|
+
`LUR`:: Path to LUR package file
|
|
1822
|
+
`--color`:: Enable colored output (default: true)
|
|
1823
|
+
`--icons`:: Enable icons in output (default: true)
|
|
1824
|
+
|
|
1825
|
+
.Start interactive shell
|
|
1826
|
+
[example]
|
|
1827
|
+
====
|
|
1828
|
+
[source,shell]
|
|
1829
|
+
----
|
|
1830
|
+
$ lutaml uml repl model.lur
|
|
1831
|
+
----
|
|
1832
|
+
|
|
1833
|
+
Opens an interactive shell with commands like `cd`, `ls`, `tree`, `find`,
|
|
1834
|
+
`search`, bookmarks, and more.
|
|
1835
|
+
====
|
|
1836
|
+
|
|
1837
|
+
The interactive shell provides a full-featured command-line interface for
|
|
1838
|
+
exploring UML repositories:
|
|
1839
|
+
|
|
1840
|
+
[source,shell]
|
|
1841
|
+
----
|
|
1842
|
+
# Start interactive shell
|
|
1843
|
+
lutaml uml shell model.lur
|
|
1844
|
+
|
|
1845
|
+
# Inside the shell:
|
|
1846
|
+
lutaml[/]> help # Show available commands
|
|
1847
|
+
lutaml[/]> ls # List packages in current location
|
|
1848
|
+
lutaml[/]> cd i-UR::urf # Navigate to package
|
|
1849
|
+
lutaml[/i-UR::urf]> pwd # Show current path
|
|
1850
|
+
lutaml[/i-UR::urf]> tree # Show tree from current location
|
|
1851
|
+
lutaml[/i-UR::urf]> find Building # Find classes
|
|
1852
|
+
lutaml[/i-UR::urf]> show 1 # Show first search result
|
|
1853
|
+
lutaml[/i-UR::urf]> bookmark add urf # Bookmark current location
|
|
1854
|
+
lutaml[/i-UR::urf]> bm urf # Jump to bookmark
|
|
1855
|
+
lutaml[/i-UR::urf]> stats # Show statistics
|
|
1856
|
+
lutaml[/i-UR::urf]> exit # Exit shell
|
|
1857
|
+
----
|
|
1858
|
+
|
|
1859
|
+
The shell provides a number of useful features:
|
|
1860
|
+
|
|
1861
|
+
* Tab completion for commands and paths
|
|
1862
|
+
* Command history persisted to `~/.lutaml-xmi-history`
|
|
1863
|
+
* Colorized output with Unicode icons
|
|
1864
|
+
* Contextual prompts showing current location
|
|
1865
|
+
* Error handling with helpful messages
|
|
1866
|
+
|
|
1867
|
+
|
|
1868
|
+
Navigation commands::
|
|
1869
|
+
|
|
1870
|
+
`cd PATH`::: Change to package path
|
|
1871
|
+
`pwd`::: Print current working path
|
|
1872
|
+
`ls [PATH]`::: List packages at path
|
|
1873
|
+
`tree [PATH]`::: Show tree from path
|
|
1874
|
+
`up`::: Go to parent package
|
|
1875
|
+
`root`::: Go to ModelRoot
|
|
1876
|
+
`back`::: Go to previous location
|
|
1877
|
+
|
|
1878
|
+
Query commands::
|
|
1879
|
+
|
|
1880
|
+
`find CLASS_NAME`::: Find class (fuzzy search)
|
|
1881
|
+
`show class QNAME`::: Show class details
|
|
1882
|
+
`show package PATH`::: Show package details
|
|
1883
|
+
`show NUMBER`::: Show numbered result from last search
|
|
1884
|
+
`search QUERY`::: Full-text search
|
|
1885
|
+
`? QUERY`::: Alias for search
|
|
1886
|
+
|
|
1887
|
+
Bookmark commands::
|
|
1888
|
+
|
|
1889
|
+
`bookmark add NAME`::: Bookmark current path or last result
|
|
1890
|
+
`bookmark list`::: List all bookmarks
|
|
1891
|
+
`bookmark go NAME`::: Jump to bookmark
|
|
1892
|
+
`bookmark rm NAME`::: Remove bookmark
|
|
1893
|
+
`bm NAME`::: Quick jump to bookmark
|
|
1894
|
+
|
|
1895
|
+
Utility commands::
|
|
1896
|
+
|
|
1897
|
+
`results`::: Show last search results
|
|
1898
|
+
`export last csv FILE`::: Export last results to CSV
|
|
1899
|
+
`export last json FILE`::: Export to JSON
|
|
1900
|
+
`export last yaml FILE`::: Export to YAML
|
|
1901
|
+
`help [COMMAND]`::: Show help
|
|
1902
|
+
`history`::: Show command history
|
|
1903
|
+
`clear`::: Clear screen
|
|
1904
|
+
`config`::: Show configuration
|
|
1905
|
+
`stats`::: Quick statistics
|
|
1906
|
+
`exit`, `quit`, `q`::: Exit shell
|
|
1907
|
+
|
|
1908
|
+
|
|
1909
|
+
// === Integration with lutaml-klin
|
|
1910
|
+
|
|
1911
|
+
// [source,ruby]
|
|
1912
|
+
// ----
|
|
1913
|
+
// # In lutaml-klin workflow
|
|
1914
|
+
// uml_repo = Lutaml::UmlRepository::Repository.from_package("model.lur")
|
|
1915
|
+
// xsd_repo = Lutaml::Xsd::SchemaRepository.from_package("schemas.lxr")
|
|
1916
|
+
|
|
1917
|
+
// # Map UML classes to XSD types
|
|
1918
|
+
// uml_repo.find_classes_by_stereotype("featureType").each do |uml_class|
|
|
1919
|
+
// xsd_type = xsd_repo.resolve_type("#{uml_class.name}Type")
|
|
1920
|
+
// # Create mapping...
|
|
1921
|
+
// end
|
|
1922
|
+
// ----
|
|
1923
|
+
|
|
1924
|
+
=== Examples
|
|
1925
|
+
|
|
1926
|
+
See the `examples/` directory for complete examples:
|
|
1927
|
+
|
|
1928
|
+
* `examples/lur_basic_usage.rb` - Basic repository operations
|
|
1929
|
+
* `examples/lur_cli_workflow.rb` - Command-line workflow
|
|
1930
|
+
* `examples/lur_statistics.rb` - Statistics and validation
|
|
1931
|
+
|
|
1932
|
+
== See Also
|
|
1933
|
+
|
|
1934
|
+
For detailed information on specific topics:
|
|
1935
|
+
|
|
1936
|
+
* link:docs/_guides/uml-modeling.adoc[UML Modeling Guide]
|
|
1937
|
+
* link:docs/_guides/parsing/express-parsing.adoc[EXPRESS Parsing Guide]
|
|
1938
|
+
* link:docs/_guides/parsing/xmi-parsing.adoc[XMI Parsing Guide]
|
|
1939
|
+
* link:docs/_guides/sysml-modeling.adoc[SysML Modeling Guide]
|
|
1940
|
+
* link:docs/_guides/diagram-generation.adoc[Diagram Generation Guide]
|
|
1941
|
+
* link:docs/_references/formats/qea-structure.adoc[QEA File Format Reference]
|
|
109
1942
|
|
|
110
1943
|
== Copyright and license
|
|
111
1944
|
|