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.
Files changed (583) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +63 -0
  3. data/.github/workflows/links.yml +99 -0
  4. data/.github/workflows/rake.yml +13 -2
  5. data/.github/workflows/release.yml +12 -6
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +11 -3
  8. data/.rubocop_todo.yml +336 -0
  9. data/Gemfile +18 -7
  10. data/README.adoc +1854 -21
  11. data/Rakefile +7 -1
  12. data/bin/plantuml2lutaml +3 -3
  13. data/bin/yaml2lutaml +2 -2
  14. data/config/diagram_styles.yml +200 -0
  15. data/config/model_transformations.yml +266 -0
  16. data/config/package_metadata.example.yml +58 -0
  17. data/config/qea_schema.yml +1024 -0
  18. data/config/static_site.yml +166 -0
  19. data/docs/.github/workflows/docs.yml +66 -0
  20. data/docs/.github/workflows/links.yml +78 -0
  21. data/docs/CONTINUATION_PLAN.md +168 -0
  22. data/docs/Gemfile +13 -0
  23. data/docs/MIGRATION_GUIDE.md +202 -0
  24. data/docs/README.md +252 -0
  25. data/docs/REFACTOR_PLAN.md +214 -0
  26. data/docs/_config.yml +144 -0
  27. data/docs/_guides/diagram-generation.adoc +316 -0
  28. data/docs/_guides/index.adoc +135 -0
  29. data/docs/{lutaml-express.adoc → _guides/parsing/express-parsing.adoc} +7 -0
  30. data/docs/_guides/parsing/index.adoc +77 -0
  31. data/docs/{lutaml-xmi.adoc → _guides/parsing/xmi-parsing.adoc} +7 -0
  32. data/docs/_guides/sysml-modeling.adoc +37 -0
  33. data/docs/{lutaml-uml.adoc → _guides/uml-modeling.adoc} +8 -2
  34. data/docs/_pages/concepts/diagram-generation.adoc +337 -0
  35. data/docs/_pages/concepts/lur-format.adoc +711 -0
  36. data/docs/_pages/concepts/qea-parsing.adoc +418 -0
  37. data/docs/_pages/core/architecture.adoc +329 -0
  38. data/docs/_pages/core/installation.adoc +321 -0
  39. data/docs/_pages/core/overview.adoc +197 -0
  40. data/docs/_pages/index.adoc +48 -0
  41. data/docs/_pages/uml-syntax.adoc +995 -0
  42. data/docs/_references/configuration/diagram-styles.adoc +716 -0
  43. data/docs/_references/configuration/index.adoc +52 -0
  44. data/docs/_references/configuration/package-metadata.adoc +416 -0
  45. data/docs/_references/formats/index.adoc +42 -0
  46. data/docs/{lutaml_syntax.adoc → _references/formats/lutaml-syntax.adoc} +7 -0
  47. data/docs/_references/formats/qea-structure.adoc +1364 -0
  48. data/docs/_references/index.adoc +197 -0
  49. data/docs/_tutorials/index.adoc +109 -0
  50. data/docs/index.adoc +64 -0
  51. data/docs/lychee.toml +83 -0
  52. data/examples/UML_EA.DTD +6856 -0
  53. data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
  54. data/examples/lur/basic.lur +0 -0
  55. data/examples/lur/test-output.lur +0 -0
  56. data/examples/lur/test.lur +0 -0
  57. data/examples/lur_basic_usage.rb +220 -0
  58. data/examples/lur_cli_workflow.rb +262 -0
  59. data/examples/lur_statistics.rb +325 -0
  60. data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
  61. data/examples/qea/ArcGISWorkspace_template.qea +0 -0
  62. data/examples/qea/README_qea_parser.adoc +230 -0
  63. data/examples/qea/UmlModel_template.qea +0 -0
  64. data/examples/qea/basic.qea +0 -0
  65. data/examples/qea/simple.qea +0 -0
  66. data/examples/qea/simple_example.qea +0 -0
  67. data/examples/qea/test.qea +0 -0
  68. data/examples/xmi/20251010_current_plateau_v5.1.xmi +118121 -0
  69. data/examples/xmi/ArcGISWorkspace_template.xmi +1467 -0
  70. data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +158 -0
  71. data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +659 -0
  72. data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +411 -0
  73. data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +102 -0
  74. data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +169 -0
  75. data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +403 -0
  76. data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +175 -0
  77. data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +360 -0
  78. data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +195 -0
  79. data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +218 -0
  80. data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +471 -0
  81. data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +56 -0
  82. data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +262 -0
  83. data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +286 -0
  84. data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +164 -0
  85. data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +66 -0
  86. data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +95 -0
  87. data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +63 -0
  88. data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +306 -0
  89. data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +45 -0
  90. data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +193 -0
  91. data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +444 -0
  92. data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +168 -0
  93. data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +10 -0
  94. data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +60 -0
  95. data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +188 -0
  96. data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +426 -0
  97. data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +169 -0
  98. data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +277 -0
  99. data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +575 -0
  100. data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +255 -0
  101. data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +183 -0
  102. data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +10 -0
  103. data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +310 -0
  104. data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +155 -0
  105. data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +81 -0
  106. data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +520 -0
  107. data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +173 -0
  108. data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +722 -0
  109. data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +181 -0
  110. data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +92 -0
  111. data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +187 -0
  112. data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +217 -0
  113. data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +157 -0
  114. data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +180 -0
  115. data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +31 -0
  116. data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +166 -0
  117. data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +361 -0
  118. data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +32 -0
  119. data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +234 -0
  120. data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +183 -0
  121. data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +42 -0
  122. data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +192 -0
  123. data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +124 -0
  124. data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +140 -0
  125. data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +266 -0
  126. data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +80 -0
  127. data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +584 -0
  128. data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +155 -0
  129. data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +17 -0
  130. data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +78 -0
  131. data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +454 -0
  132. data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +81 -0
  133. data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +379 -0
  134. data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +126 -0
  135. data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +199 -0
  136. data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +162 -0
  137. data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +136 -0
  138. data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +161 -0
  139. data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +71 -0
  140. data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +209 -0
  141. data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +123 -0
  142. data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +218 -0
  143. data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +236 -0
  144. data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +353 -0
  145. data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +242 -0
  146. data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +246 -0
  147. data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +290 -0
  148. data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +60 -0
  149. data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +318 -0
  150. data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +24 -0
  151. data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +127 -0
  152. data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +412 -0
  153. data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +130 -0
  154. data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +96 -0
  155. data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +10 -0
  156. data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +143 -0
  157. data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +114 -0
  158. data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +37 -0
  159. data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +254 -0
  160. data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +187 -0
  161. data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +145 -0
  162. data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +76 -0
  163. data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +196 -0
  164. data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +35 -0
  165. data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +348 -0
  166. data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +72 -0
  167. data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +187 -0
  168. data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +114 -0
  169. data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +181 -0
  170. data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +196 -0
  171. data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +55 -0
  172. data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +195 -0
  173. data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +90 -0
  174. data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +174 -0
  175. data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +142 -0
  176. data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +740 -0
  177. data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +105 -0
  178. data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +554 -0
  179. data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +228 -0
  180. data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +154 -0
  181. data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +273 -0
  182. data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +239 -0
  183. data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +10 -0
  184. data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +116 -0
  185. data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +200 -0
  186. data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +136 -0
  187. data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +181 -0
  188. data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +324 -0
  189. data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +342 -0
  190. data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +105 -0
  191. data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +681 -0
  192. data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +136 -0
  193. data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +718 -0
  194. data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +487 -0
  195. data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +292 -0
  196. data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +715 -0
  197. data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +116 -0
  198. data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +284 -0
  199. data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +159 -0
  200. data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +10 -0
  201. data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +172 -0
  202. data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +153 -0
  203. data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +290 -0
  204. data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +149 -0
  205. data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +194 -0
  206. data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +143 -0
  207. data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +357 -0
  208. data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +171 -0
  209. data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +218 -0
  210. data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +204 -0
  211. data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +263 -0
  212. data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +398 -0
  213. data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +174 -0
  214. data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +310 -0
  215. data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +144 -0
  216. data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +144 -0
  217. data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +198 -0
  218. data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +143 -0
  219. data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +114 -0
  220. data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +339 -0
  221. data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +429 -0
  222. data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +245 -0
  223. data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +173 -0
  224. data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +31 -0
  225. data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +256 -0
  226. data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +95 -0
  227. data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +176 -0
  228. data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +179 -0
  229. data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +207 -0
  230. data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +189 -0
  231. data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +165 -0
  232. data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +22 -0
  233. data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +266 -0
  234. data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +183 -0
  235. data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +303 -0
  236. data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +178 -0
  237. data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +158 -0
  238. data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +286 -0
  239. data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +305 -0
  240. data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +171 -0
  241. data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +174 -0
  242. data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +180 -0
  243. data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +656 -0
  244. data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +158 -0
  245. data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +409 -0
  246. data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +361 -0
  247. data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +96 -0
  248. data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +173 -0
  249. data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +97 -0
  250. data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +193 -0
  251. data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +32 -0
  252. data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +108 -0
  253. data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +49 -0
  254. data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +592 -0
  255. data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +42 -0
  256. data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +76 -0
  257. data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +147 -0
  258. data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +318 -0
  259. data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +45 -0
  260. data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +158 -0
  261. data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +200 -0
  262. data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +61 -0
  263. data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +78 -0
  264. data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +67 -0
  265. data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +79 -0
  266. data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +194 -0
  267. data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +96 -0
  268. data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +271 -0
  269. data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +332 -0
  270. data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +639 -0
  271. data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +134 -0
  272. data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +193 -0
  273. data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +58 -0
  274. data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +384 -0
  275. data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +590 -0
  276. data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +365 -0
  277. data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +165 -0
  278. data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +61 -0
  279. data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +76 -0
  280. data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +123 -0
  281. data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +202 -0
  282. data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +351 -0
  283. data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +189 -0
  284. data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +215 -0
  285. data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +124 -0
  286. data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +208 -0
  287. data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +302 -0
  288. data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +524 -0
  289. data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +730 -0
  290. data/examples/xmi/UML_EA.DTD +6856 -0
  291. data/examples/xmi/UmlModel_template.xmi +23 -0
  292. data/examples/xmi/basic.xmi +9086 -0
  293. data/examples/xmi/simple.xmi +655 -0
  294. data/examples/xmi/simple_example.xmi +23 -0
  295. data/examples/xmi/test.xmi +1703 -0
  296. data/exe/lutaml +2 -16
  297. data/exe/lutaml-wsd2uml +3 -3
  298. data/exe/lutaml-yaml2uml +2 -2
  299. data/lib/lutaml/cli/commands/base_command.rb +118 -0
  300. data/lib/lutaml/cli/element_identifier.rb +165 -0
  301. data/lib/lutaml/cli/enhanced_formatter.rb +502 -0
  302. data/lib/lutaml/cli/interactive_shell.rb +911 -0
  303. data/lib/lutaml/cli/lml_commands.rb +201 -0
  304. data/lib/lutaml/cli/output_formatter.rb +348 -0
  305. data/lib/lutaml/cli/resource_registry.rb +127 -0
  306. data/lib/lutaml/cli/tree_view_formatter.rb +308 -0
  307. data/lib/lutaml/cli/uml/build_command.rb +538 -0
  308. data/lib/lutaml/cli/uml/diagram_command.rb +421 -0
  309. data/lib/lutaml/cli/uml/export_command.rb +78 -0
  310. data/lib/lutaml/cli/uml/find_command.rb +122 -0
  311. data/lib/lutaml/cli/uml/info_command.rb +104 -0
  312. data/lib/lutaml/cli/uml/inspect_command.rb +88 -0
  313. data/lib/lutaml/cli/uml/ls_command.rb +105 -0
  314. data/lib/lutaml/cli/uml/repl_command.rb +50 -0
  315. data/lib/lutaml/cli/uml/search_command.rb +88 -0
  316. data/lib/lutaml/cli/uml/serve_command.rb +59 -0
  317. data/lib/lutaml/cli/uml/shared_helpers.rb +51 -0
  318. data/lib/lutaml/cli/uml/spa_command.rb +209 -0
  319. data/lib/lutaml/cli/uml/stats_command.rb +60 -0
  320. data/lib/lutaml/cli/uml/tree_command.rb +85 -0
  321. data/lib/lutaml/cli/uml/validate_command.rb +195 -0
  322. data/lib/lutaml/cli/uml/verify_command.rb +107 -0
  323. data/lib/lutaml/cli/uml_commands.rb +163 -0
  324. data/lib/lutaml/cli.rb +72 -0
  325. data/lib/lutaml/command_line.rb +8 -6
  326. data/lib/lutaml/converter/dsl_to_uml.rb +2 -0
  327. data/lib/lutaml/converter/xmi_to_uml.rb +40 -19
  328. data/lib/lutaml/ea/diagram/configuration.rb +379 -0
  329. data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +81 -0
  330. data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +330 -0
  331. data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +55 -0
  332. data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +69 -0
  333. data/lib/lutaml/ea/diagram/extractor.rb +559 -0
  334. data/lib/lutaml/ea/diagram/layout_engine.rb +251 -0
  335. data/lib/lutaml/ea/diagram/path_builder.rb +258 -0
  336. data/lib/lutaml/ea/diagram/style_parser.rb +315 -0
  337. data/lib/lutaml/ea/diagram/style_resolver.rb +291 -0
  338. data/lib/lutaml/ea/diagram/svg_renderer.rb +285 -0
  339. data/lib/lutaml/ea/diagram/util.rb +69 -0
  340. data/lib/lutaml/ea/diagram.rb +77 -0
  341. data/lib/lutaml/express/parsers/exp.rb +1 -1
  342. data/lib/lutaml/express.rb +4 -2
  343. data/lib/lutaml/formatter/base.rb +6 -6
  344. data/lib/lutaml/formatter/graphviz.rb +10 -8
  345. data/lib/lutaml/formatter.rb +3 -0
  346. data/lib/lutaml/layout/engine.rb +9 -7
  347. data/lib/lutaml/layout/graph_viz_engine.rb +2 -1
  348. data/lib/lutaml/layout.rb +8 -0
  349. data/lib/lutaml/model_transformations/configuration.rb +333 -0
  350. data/lib/lutaml/model_transformations/format_registry.rb +394 -0
  351. data/lib/lutaml/model_transformations/parsers/base_parser.rb +389 -0
  352. data/lib/lutaml/model_transformations/parsers/qea_parser.rb +455 -0
  353. data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +301 -0
  354. data/lib/lutaml/model_transformations/transformation_engine.rb +409 -0
  355. data/lib/lutaml/model_transformations.rb +143 -0
  356. data/lib/lutaml/parser.rb +15 -7
  357. data/lib/lutaml/qea/benchmark.rb +212 -0
  358. data/lib/lutaml/qea/database.rb +324 -0
  359. data/lib/lutaml/qea/factory/association_transformer.rb +115 -0
  360. data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +60 -0
  361. data/lib/lutaml/qea/factory/attribute_transformer.rb +103 -0
  362. data/lib/lutaml/qea/factory/base_transformer.rb +132 -0
  363. data/lib/lutaml/qea/factory/class_transformer.rb +734 -0
  364. data/lib/lutaml/qea/factory/constraint_transformer.rb +78 -0
  365. data/lib/lutaml/qea/factory/data_type_transformer.rb +162 -0
  366. data/lib/lutaml/qea/factory/diagram_transformer.rb +182 -0
  367. data/lib/lutaml/qea/factory/document_builder.rb +275 -0
  368. data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +260 -0
  369. data/lib/lutaml/qea/factory/enum_transformer.rb +87 -0
  370. data/lib/lutaml/qea/factory/generalization_transformer.rb +106 -0
  371. data/lib/lutaml/qea/factory/instance_transformer.rb +96 -0
  372. data/lib/lutaml/qea/factory/object_property_transformer.rb +61 -0
  373. data/lib/lutaml/qea/factory/operation_transformer.rb +75 -0
  374. data/lib/lutaml/qea/factory/package_transformer.rb +199 -0
  375. data/lib/lutaml/qea/factory/reference_resolver.rb +99 -0
  376. data/lib/lutaml/qea/factory/tagged_value_transformer.rb +41 -0
  377. data/lib/lutaml/qea/factory/transformer_registry.rb +85 -0
  378. data/lib/lutaml/qea/file_detector.rb +178 -0
  379. data/lib/lutaml/qea/infrastructure/database_connection.rb +100 -0
  380. data/lib/lutaml/qea/infrastructure/schema_reader.rb +136 -0
  381. data/lib/lutaml/qea/infrastructure/table_reader.rb +224 -0
  382. data/lib/lutaml/qea/models/base_model.rb +48 -0
  383. data/lib/lutaml/qea/models/ea_attribute.rb +135 -0
  384. data/lib/lutaml/qea/models/ea_attribute_tag.rb +109 -0
  385. data/lib/lutaml/qea/models/ea_complexity_type.rb +81 -0
  386. data/lib/lutaml/qea/models/ea_connector.rb +162 -0
  387. data/lib/lutaml/qea/models/ea_connector_type.rb +62 -0
  388. data/lib/lutaml/qea/models/ea_constraint_type.rb +65 -0
  389. data/lib/lutaml/qea/models/ea_datatype.rb +108 -0
  390. data/lib/lutaml/qea/models/ea_diagram.rb +117 -0
  391. data/lib/lutaml/qea/models/ea_diagram_link.rb +80 -0
  392. data/lib/lutaml/qea/models/ea_diagram_object.rb +86 -0
  393. data/lib/lutaml/qea/models/ea_diagram_type.rb +58 -0
  394. data/lib/lutaml/qea/models/ea_document.rb +68 -0
  395. data/lib/lutaml/qea/models/ea_object.rb +208 -0
  396. data/lib/lutaml/qea/models/ea_object_constraint.rb +62 -0
  397. data/lib/lutaml/qea/models/ea_object_property.rb +96 -0
  398. data/lib/lutaml/qea/models/ea_object_type.rb +75 -0
  399. data/lib/lutaml/qea/models/ea_operation.rb +153 -0
  400. data/lib/lutaml/qea/models/ea_operation_param.rb +73 -0
  401. data/lib/lutaml/qea/models/ea_package.rb +75 -0
  402. data/lib/lutaml/qea/models/ea_script.rb +69 -0
  403. data/lib/lutaml/qea/models/ea_status_type.rb +68 -0
  404. data/lib/lutaml/qea/models/ea_stereotype.rb +59 -0
  405. data/lib/lutaml/qea/models/ea_tagged_value.rb +105 -0
  406. data/lib/lutaml/qea/models/ea_xref.rb +174 -0
  407. data/lib/lutaml/qea/parser.rb +61 -0
  408. data/lib/lutaml/qea/repositories/base_repository.rb +215 -0
  409. data/lib/lutaml/qea/repositories/object_repository.rb +221 -0
  410. data/lib/lutaml/qea/services/configuration.rb +211 -0
  411. data/lib/lutaml/qea/services/database_loader.rb +215 -0
  412. data/lib/lutaml/qea/validation/association_validator.rb +75 -0
  413. data/lib/lutaml/qea/validation/attribute_validator.rb +103 -0
  414. data/lib/lutaml/qea/validation/base_validator.rb +305 -0
  415. data/lib/lutaml/qea/validation/class_validator.rb +123 -0
  416. data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +111 -0
  417. data/lib/lutaml/qea/validation/database/orphan_validator.rb +155 -0
  418. data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +130 -0
  419. data/lib/lutaml/qea/validation/diagram_validator.rb +114 -0
  420. data/lib/lutaml/qea/validation/formatters/json_formatter.rb +137 -0
  421. data/lib/lutaml/qea/validation/formatters/text_formatter.rb +235 -0
  422. data/lib/lutaml/qea/validation/operation_validator.rb +81 -0
  423. data/lib/lutaml/qea/validation/package_validator.rb +113 -0
  424. data/lib/lutaml/qea/validation/validation_engine.rb +497 -0
  425. data/lib/lutaml/qea/validation/validation_message.rb +144 -0
  426. data/lib/lutaml/qea/validation/validation_result.rb +212 -0
  427. data/lib/lutaml/qea/validation/validator_registry.rb +134 -0
  428. data/lib/lutaml/qea/verification/comparison_result.rb +264 -0
  429. data/lib/lutaml/qea/verification/document_normalizer.rb +177 -0
  430. data/lib/lutaml/qea/verification/document_verifier.rb +320 -0
  431. data/lib/lutaml/qea/verification/element_comparator.rb +306 -0
  432. data/lib/lutaml/qea/verification/structure_matcher.rb +287 -0
  433. data/lib/lutaml/qea.rb +226 -0
  434. data/lib/lutaml/sysml/allocate.rb +2 -0
  435. data/lib/lutaml/sysml/allocated.rb +2 -0
  436. data/lib/lutaml/sysml/binding_connector.rb +2 -0
  437. data/lib/lutaml/sysml/block.rb +2 -0
  438. data/lib/lutaml/sysml/constraint_block.rb +2 -0
  439. data/lib/lutaml/sysml/copy.rb +2 -0
  440. data/lib/lutaml/sysml/derive_requirement.rb +2 -0
  441. data/lib/lutaml/sysml/nested_connector_end.rb +2 -0
  442. data/lib/lutaml/sysml/refine.rb +2 -0
  443. data/lib/lutaml/sysml/requirement.rb +2 -0
  444. data/lib/lutaml/sysml/requirement_related.rb +2 -0
  445. data/lib/lutaml/sysml/satisfy.rb +2 -0
  446. data/lib/lutaml/sysml/test_case.rb +2 -0
  447. data/lib/lutaml/sysml/trace.rb +2 -0
  448. data/lib/lutaml/sysml/verify.rb +2 -0
  449. data/lib/lutaml/sysml/xmi_file.rb +2 -0
  450. data/lib/lutaml/sysml.rb +3 -1
  451. data/lib/lutaml/uml/association.rb +4 -0
  452. data/lib/lutaml/uml/class.rb +11 -9
  453. data/lib/lutaml/uml/classifier.rb +3 -0
  454. data/lib/lutaml/uml/comment.rb +13 -0
  455. data/lib/lutaml/uml/data_type.rb +7 -6
  456. data/lib/lutaml/uml/diagram.rb +12 -0
  457. data/lib/lutaml/uml/diagram_link.rb +26 -0
  458. data/lib/lutaml/uml/diagram_object.rb +30 -0
  459. data/lib/lutaml/uml/document.rb +18 -0
  460. data/lib/lutaml/uml/enum.rb +4 -3
  461. data/lib/lutaml/uml/fontname.rb +13 -0
  462. data/lib/lutaml/uml/generalization.rb +2 -0
  463. data/lib/lutaml/uml/group.rb +2 -0
  464. data/lib/lutaml/uml/namespace.rb +2 -2
  465. data/lib/lutaml/uml/node/{field.rb → attribute.rb} +4 -4
  466. data/lib/lutaml/uml/node/base.rb +1 -1
  467. data/lib/lutaml/uml/node/class_node.rb +12 -12
  468. data/lib/lutaml/uml/node/class_relationship.rb +2 -2
  469. data/lib/lutaml/uml/node/document.rb +2 -2
  470. data/lib/lutaml/uml/node/method_argument.rb +3 -3
  471. data/lib/lutaml/uml/node/{method.rb → operation.rb} +4 -4
  472. data/lib/lutaml/uml/node/relationship.rb +3 -3
  473. data/lib/lutaml/uml/package.rb +7 -4
  474. data/lib/lutaml/uml/package_path.rb +235 -0
  475. data/lib/lutaml/uml/parsers/attribute.rb +2 -2
  476. data/lib/lutaml/uml/parsers/dsl.rb +3 -4
  477. data/lib/lutaml/uml/parsers/yaml.rb +1 -1
  478. data/lib/lutaml/uml/qualified_name.rb +178 -0
  479. data/lib/lutaml/uml/tagged_value.rb +21 -0
  480. data/lib/lutaml/uml/top_element.rb +7 -1
  481. data/lib/lutaml/uml/top_element_attribute.rb +4 -0
  482. data/lib/lutaml/uml/validation/document_structure_validator.rb +389 -0
  483. data/lib/lutaml/uml.rb +89 -45
  484. data/lib/lutaml/uml_repository/error_handler.rb +203 -0
  485. data/lib/lutaml/uml_repository/exporters/base_exporter.rb +61 -0
  486. data/lib/lutaml/uml_repository/exporters/json_exporter.rb +344 -0
  487. data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +598 -0
  488. data/lib/lutaml/uml_repository/index_builder.rb +460 -0
  489. data/lib/lutaml/uml_repository/lazy_repository.rb +238 -0
  490. data/lib/lutaml/uml_repository/package_exporter.rb +336 -0
  491. data/lib/lutaml/uml_repository/package_loader.rb +220 -0
  492. data/lib/lutaml/uml_repository/package_metadata.rb +77 -0
  493. data/lib/lutaml/uml_repository/presenters/association_presenter.rb +86 -0
  494. data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +101 -0
  495. data/lib/lutaml/uml_repository/presenters/class_presenter.rb +75 -0
  496. data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +108 -0
  497. data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +508 -0
  498. data/lib/lutaml/uml_repository/presenters/element_presenter.rb +92 -0
  499. data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +83 -0
  500. data/lib/lutaml/uml_repository/presenters/package_presenter.rb +48 -0
  501. data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +76 -0
  502. data/lib/lutaml/uml_repository/queries/association_query.rb +187 -0
  503. data/lib/lutaml/uml_repository/queries/base_query.rb +45 -0
  504. data/lib/lutaml/uml_repository/queries/class_query.rb +117 -0
  505. data/lib/lutaml/uml_repository/queries/diagram_query.rb +111 -0
  506. data/lib/lutaml/uml_repository/queries/inheritance_query.rb +259 -0
  507. data/lib/lutaml/uml_repository/queries/package_query.rb +239 -0
  508. data/lib/lutaml/uml_repository/queries/search_query.rb +357 -0
  509. data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +28 -0
  510. data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +46 -0
  511. data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +84 -0
  512. data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +84 -0
  513. data/lib/lutaml/uml_repository/query_dsl/order.rb +90 -0
  514. data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +296 -0
  515. data/lib/lutaml/uml_repository/repository.rb +764 -0
  516. data/lib/lutaml/uml_repository/repository_enhanced.rb +439 -0
  517. data/lib/lutaml/uml_repository/search_result.rb +86 -0
  518. data/lib/lutaml/uml_repository/static_site/configuration.rb +270 -0
  519. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +967 -0
  520. data/lib/lutaml/uml_repository/static_site/generator.rb +401 -0
  521. data/lib/lutaml/uml_repository/static_site/id_generator.rb +115 -0
  522. data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +317 -0
  523. data/lib/lutaml/uml_repository/static_site.rb +88 -0
  524. data/lib/lutaml/uml_repository/statistics_calculator.rb +334 -0
  525. data/lib/lutaml/uml_repository/validators/repository_validator.rb +404 -0
  526. data/lib/lutaml/uml_repository/web_ui/app.rb +144 -0
  527. data/lib/lutaml/uml_repository/web_ui/public/app.js +452 -0
  528. data/lib/lutaml/uml_repository/web_ui/public/styles.css +381 -0
  529. data/lib/lutaml/uml_repository/web_ui/views/index.erb +40 -0
  530. data/lib/lutaml/uml_repository.rb +97 -0
  531. data/lib/lutaml/version.rb +3 -1
  532. data/lib/lutaml/xmi/liquid_drops/association_drop.rb +60 -58
  533. data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +55 -53
  534. data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +15 -13
  535. data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +50 -46
  536. data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +19 -17
  537. data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +93 -90
  538. data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +26 -24
  539. data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +26 -24
  540. data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +40 -37
  541. data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +20 -18
  542. data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +64 -62
  543. data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +142 -140
  544. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +174 -170
  545. data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +23 -21
  546. data/lib/lutaml/xmi/liquid_drops/package_drop.rb +95 -93
  547. data/lib/lutaml/xmi/liquid_drops/root_drop.rb +28 -25
  548. data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +39 -37
  549. data/lib/lutaml/xmi/parsers/xmi_base.rb +27 -17
  550. data/lib/lutaml/xmi/parsers/xml.rb +9 -9
  551. data/lib/lutaml/xmi.rb +37 -6
  552. data/lib/lutaml/xml/parsers/xml.rb +3 -1
  553. data/lib/lutaml/xml.rb +3 -1
  554. data/lib/lutaml.rb +14 -2
  555. data/lutaml.gemspec +16 -8
  556. data/plateau_all_packages.lur +0 -0
  557. data/templates/static_site/assets/scripts/app.js +45 -0
  558. data/templates/static_site/assets/scripts/core/state.js +419 -0
  559. data/templates/static_site/assets/scripts/core/utils.js +133 -0
  560. data/templates/static_site/assets/scripts/ui/details.js +74 -0
  561. data/templates/static_site/assets/scripts/ui/diagrams.js +345 -0
  562. data/templates/static_site/assets/scripts/ui/search.js +187 -0
  563. data/templates/static_site/assets/scripts/ui/sidebar.js +214 -0
  564. data/templates/static_site/assets/styles/00-variables.css +144 -0
  565. data/templates/static_site/assets/styles/01-reset.css +79 -0
  566. data/templates/static_site/assets/styles/02-base.css +149 -0
  567. data/templates/static_site/assets/styles/03-layout.css +171 -0
  568. data/templates/static_site/assets/styles/04-components.css +856 -0
  569. data/templates/static_site/assets/styles/05-utilities.css +89 -0
  570. data/templates/static_site/assets/styles/06-diagrams.css +277 -0
  571. data/templates/static_site/components/class_details.liquid +328 -0
  572. data/templates/static_site/components/content.liquid +508 -0
  573. data/templates/static_site/components/diagram_list.liquid +52 -0
  574. data/templates/static_site/components/diagram_viewer.liquid +71 -0
  575. data/templates/static_site/components/header.liquid +134 -0
  576. data/templates/static_site/components/package_details.liquid +119 -0
  577. data/templates/static_site/components/sidebar.liquid +46 -0
  578. data/templates/static_site/components/tree_node.liquid +81 -0
  579. data/templates/static_site/multi_file.liquid +46 -0
  580. data/templates/static_site/single_file.liquid +52 -0
  581. metadata +604 -31
  582. data/CODE_OF_CONDUCT.md +0 -74
  583. data/docs/lutaml-sysml.adoc +0 -10
@@ -0,0 +1,1364 @@
1
+ ---
2
+ title: QEA File Format
3
+ parent: File Formats
4
+ grand_parent: Reference
5
+ nav_order: 1
6
+ ---
7
+
8
+ = Enterprise Architect QEA file format
9
+ :toc:
10
+ :toclevels: 3
11
+
12
+ == Purpose
13
+
14
+ This document describes the Enterprise Architect QEA file format and how LutaML parses and transforms it into UML models.
15
+
16
+ == General
17
+
18
+ === What is QEA?
19
+
20
+ QEA (Quantified EA) is Enterprise Architect's native database format based on SQLite 3. It stores complete UML models including:
21
+
22
+ * Packages, classes, interfaces, enumerations, data types
23
+ * Attributes, operations, and parameters
24
+ * Associations, generalizations, and other relationships
25
+ * Diagrams with visual layout information
26
+ * EA-specific metadata (stereotypes, tagged values, constraints)
27
+ * Cross-references and extended properties
28
+
29
+ === Why direct QEA parsing?
30
+
31
+ Direct QEA parsing offers significant advantages over XMI export:
32
+
33
+ Performance:: 10-20x faster than XMI parsing (1-2 seconds vs 20-40 seconds for a 20MB model)
34
+ No export step:: Parse directly from EA database without manual export
35
+ EA metadata:: Access to EA-specific information not available in standard XMI
36
+ Memory efficient:: Streams data from SQLite without loading entire file into memory
37
+
38
+ === File structure
39
+
40
+ QEA files are SQLite 3 databases with a specific table schema defined by Enterprise Architect.
41
+
42
+ .QEA file characteristics
43
+ [source]
44
+ ----
45
+ File Type: SQLite 3 database
46
+ Extension: .qea
47
+ Typical Size: 5-50MB for medium models
48
+ Tables: ~95 total tables (42 non-empty in typical models)
49
+ Encoding: UTF-8
50
+ ----
51
+
52
+ == Architecture
53
+
54
+ === Two-layer transformation pipeline
55
+
56
+ LutaML uses a strict two-layer architecture to transform QEA data into UML models:
57
+
58
+ [source]
59
+ ----
60
+ ┌────────────────────────────────────────────────────────────────┐
61
+ │ QEA DATABASE (SQLite) │
62
+ │ - Flat relational tables (t_object, t_connector, etc.) │
63
+ └────────────────────────────────────────────────────────────────┘
64
+
65
+ ┌────────────────────────────────────────────────────────────────┐
66
+ │ LAYER 1: QEA PARSE LAYER (Lutaml::Qea::Models) │
67
+ │ - EaObject, EaConnector, EaDiagram, etc. │
68
+ │ - Direct 1:1 mapping to database rows │
69
+ │ - Flat relational structure matching database schema │
70
+ └────────────────────────────────────────────────────────────────┘
71
+
72
+ ┌────────────────────────────────────────────────────────────────┐
73
+ │ TRANSFORMERS (Lutaml::Qea::Factory) │
74
+ │ - ClassTransformer, DiagramTransformer, etc. │
75
+ │ - Convert flat relational to tree-like structure │
76
+ │ - Resolve references and build relationships │
77
+ └────────────────────────────────────────────────────────────────┘
78
+
79
+ ┌────────────────────────────────────────────────────────────────┐
80
+ │ LAYER 2: UML DOMAIN LAYER (Lutaml::Uml) │
81
+ │ - Class (with nested Attribute[], Operation[], Constraint[]) │
82
+ │ - Package (with nested Package[], Class[]) │
83
+ │ - Diagram (with nested DiagramObject[], DiagramLink[]) │
84
+ │ - Tree-like structure with rich domain behavior │
85
+ └────────────────────────────────────────────────────────────────┘
86
+ ----
87
+
88
+ === Layer 1: QEA parse layer
89
+
90
+ ==== General
91
+
92
+ The QEA parse layer provides direct representation of database tables as Ruby model objects.
93
+
94
+ Location:: [`lib/lutaml/qea/models/`](../lib/lutaml/qea/models/)
95
+ Purpose:: 1:1 mapping of SQLite rows to Ruby objects
96
+ Structure:: Flat relational data matching database schema
97
+ Base class:: [`Lutaml::Qea::Models::BaseModel`](../lib/lutaml/qea/models/base_model.rb)
98
+
99
+ ==== Characteristics
100
+
101
+ * Each table maps to one model class
102
+ * Column names map directly to attributes
103
+ * No nested relationships (references stored as IDs)
104
+ * No business logic or domain behavior
105
+ * Serializable using `lutaml-model` gem
106
+
107
+ .Example QEA model class
108
+ [source,ruby]
109
+ ----
110
+ class EaObject < BaseModel
111
+ attribute :object_id, :integer
112
+ attribute :object_type, :string
113
+ attribute :name, :string
114
+ attribute :package_id, :integer # Foreign key, not resolved
115
+ attribute :stereotype, :string
116
+ # ... additional attributes matching database columns
117
+ end
118
+ ----
119
+
120
+ === Layer 2: UML domain layer
121
+
122
+ ==== General
123
+
124
+ The UML domain layer provides rich, hierarchical UML model objects.
125
+
126
+ Location:: [`lib/lutaml/uml/`](../lib/lutaml/uml/)
127
+ Purpose:: Tree-like domain model with nested object hierarchies
128
+ Structure:: Objects contain child objects (not just IDs)
129
+ Namespace:: ALL UML elements MUST be in `Lutaml::Uml` namespace
130
+
131
+ ==== Characteristics
132
+
133
+ * Hierarchical structure with parent-child relationships
134
+ * Resolved references (objects contain other objects, not IDs)
135
+ * Domain-specific behavior and methods
136
+ * Follows UML metamodel conventions
137
+ * Used by all LutaML consumers
138
+
139
+ .Example UML domain class
140
+ [source,ruby]
141
+ ----
142
+ class Class
143
+ attribute :name, :string
144
+ attribute :attributes, Attribute, collection: true # Nested objects
145
+ attribute :operations, Operation, collection: true # Nested objects
146
+ attribute :constraints, Constraint, collection: true # Nested objects
147
+ attribute :generalizations, Generalization, collection: true
148
+ # Rich domain behavior...
149
+ end
150
+ ----
151
+
152
+ === Transformation layer
153
+
154
+ ==== General
155
+
156
+ Transformers convert QEA models to UML domain objects.
157
+
158
+ Location:: [`lib/lutaml/qea/factory/`](../lib/lutaml/qea/factory/)
159
+ Purpose:: Convert flat relational data to tree-like domain model
160
+ Base class:: [`Lutaml::Qea::Factory::BaseTransformer`](../lib/lutaml/qea/factory/base_transformer.rb)
161
+
162
+ ==== Transformation responsibilities
163
+
164
+ Reference resolution:: Convert object IDs to actual object references
165
+ Hierarchy building:: Create parent-child relationships
166
+ Data mapping:: Map EA concepts to UML metamodel
167
+ Validation:: Ensure data integrity during transformation
168
+
169
+ .Example transformer
170
+ [source,ruby]
171
+ ----
172
+ class ClassTransformer < BaseTransformer
173
+ def transform(ea_object, database)
174
+ uml_class = Lutaml::Uml::Class.new
175
+ uml_class.name = ea_object.name
176
+
177
+ # Resolve attributes (nested objects, not IDs)
178
+ uml_class.attributes = load_attributes(ea_object.object_id, database)
179
+
180
+ # Resolve operations
181
+ uml_class.operations = load_operations(ea_object.object_id, database)
182
+
183
+ # Resolve constraints
184
+ uml_class.constraints = load_constraints(ea_object.object_id, database)
185
+
186
+ uml_class
187
+ end
188
+ end
189
+ ----
190
+
191
+ == Implemented tables
192
+
193
+ === Core UML tables
194
+
195
+ These tables are fully implemented and provide the essential UML model structure.
196
+
197
+ ==== t_object - UML objects
198
+
199
+ Primary key:: `Object_ID`
200
+ Purpose:: Classes, interfaces, enumerations, data types, and other UML objects
201
+ Row count:: Typically 500-1000+ in production models
202
+ UML mapping:: [`Lutaml::Uml::Class`](../lib/lutaml/uml/class.rb), [`Lutaml::Uml::Enum`](../lib/lutaml/uml/enum.rb), [`Lutaml::Uml::DataType`](../lib/lutaml/uml/data_type.rb)
203
+
204
+ .Key columns
205
+ [cols="1,2,3"]
206
+ |===
207
+ |Column |Type |Purpose
208
+
209
+ |`Object_ID`
210
+ |INTEGER
211
+ |Primary key
212
+
213
+ |`Object_Type`
214
+ |TEXT
215
+ |"Class", "Interface", "Enumeration", etc.
216
+
217
+ |`Name`
218
+ |TEXT
219
+ |Element name
220
+
221
+ |`Package_ID`
222
+ |INTEGER
223
+ |Parent package reference
224
+
225
+ |`Stereotype`
226
+ |TEXT
227
+ |UML stereotype (e.g., "featureType")
228
+
229
+ |`Abstract`
230
+ |TEXT
231
+ |"1" if abstract class
232
+
233
+ |`ea_guid`
234
+ |TEXT
235
+ |Enterprise Architect GUID
236
+
237
+ |`Classifier`
238
+ |INTEGER
239
+ |Type reference for typed elements
240
+ |===
241
+
242
+ ==== t_attribute - Class attributes
243
+
244
+ Primary key:: `ID`
245
+ Purpose:: Attributes (fields/properties) of UML classes
246
+ Row count:: Typically 1500-2500+ in production models
247
+ UML mapping:: [`Lutaml::Uml::Attribute`](../lib/lutaml/uml/attribute.rb)
248
+
249
+ .Key columns
250
+ [cols="1,2,3"]
251
+ |===
252
+ |Column |Type |Purpose
253
+
254
+ |`ID`
255
+ |INTEGER
256
+ |Primary key
257
+
258
+ |`Object_ID`
259
+ |INTEGER
260
+ |Owner class reference
261
+
262
+ |`Name`
263
+ |TEXT
264
+ |Attribute name
265
+
266
+ |`Type`
267
+ |TEXT
268
+ |Attribute type
269
+
270
+ |`Scope`
271
+ |TEXT
272
+ |Visibility ("Public", "Private", etc.)
273
+
274
+ |`Stereotype`
275
+ |TEXT
276
+ |Attribute stereotype
277
+
278
+ |`LowerBound`
279
+ |TEXT
280
+ |Minimum cardinality
281
+
282
+ |`UpperBound`
283
+ |TEXT
284
+ |Maximum cardinality
285
+
286
+ |`IsStatic`
287
+ |INTEGER
288
+ |1 if static attribute
289
+
290
+ |`Classifier`
291
+ |TEXT
292
+ |Type classifier reference
293
+ |===
294
+
295
+ ==== t_operation - Class operations
296
+
297
+ Primary key:: `OperationID`
298
+ Purpose:: Methods/operations of UML classes
299
+ Row count:: Varies (0-500+ depending on model)
300
+ UML mapping:: [`Lutaml::Uml::Operation`](../lib/lutaml/uml/operation.rb)
301
+
302
+ .Key columns
303
+ [cols="1,2,3"]
304
+ |===
305
+ |Column |Type |Purpose
306
+
307
+ |`OperationID`
308
+ |INTEGER
309
+ |Primary key
310
+
311
+ |`Object_ID`
312
+ |INTEGER
313
+ |Owner class reference
314
+
315
+ |`Name`
316
+ |TEXT
317
+ |Operation name
318
+
319
+ |`Type`
320
+ |TEXT
321
+ |Return type
322
+
323
+ |`Scope`
324
+ |TEXT
325
+ |Visibility
326
+
327
+ |`Stereotype`
328
+ |TEXT
329
+ |Operation stereotype
330
+
331
+ |`IsStatic`
332
+ |INTEGER
333
+ |1 if static method
334
+
335
+ |`Abstract`
336
+ |TEXT
337
+ |1 if abstract operation
338
+ |===
339
+
340
+ ==== t_operationparams - Operation parameters
341
+
342
+ Primary key:: `OperationID` + `Pos`
343
+ Purpose:: Parameters of operations/methods
344
+ Row count:: Varies based on operations
345
+ UML mapping:: [`Lutaml::Uml::Parameter`](../lib/lutaml/uml/parameter.rb)
346
+
347
+ .Key columns
348
+ [cols="1,2,3"]
349
+ |===
350
+ |Column |Type |Purpose
351
+
352
+ |`OperationID`
353
+ |INTEGER
354
+ |Parent operation reference
355
+
356
+ |`Name`
357
+ |TEXT
358
+ |Parameter name
359
+
360
+ |`Type`
361
+ |TEXT
362
+ |Parameter type
363
+
364
+ |`Default`
365
+ |TEXT
366
+ |Default value
367
+
368
+ |`Pos`
369
+ |INTEGER
370
+ |Parameter position
371
+
372
+ |`Kind`
373
+ |TEXT
374
+ |Parameter direction ("in", "out", etc.)
375
+ |===
376
+
377
+ ==== t_connector - Relationships
378
+
379
+ Primary key:: `Connector_ID`
380
+ Purpose:: Associations, generalizations, dependencies, and other relationships
381
+ Row count:: Typically 800-1200+ in production models
382
+ UML mapping:: [`Lutaml::Uml::Association`](../lib/lutaml/uml/association.rb), [`Lutaml::Uml::Generalization`](../lib/lutaml/uml/generalization.rb)
383
+
384
+ .Key columns
385
+ [cols="1,2,3"]
386
+ |===
387
+ |Column |Type |Purpose
388
+
389
+ |`Connector_ID`
390
+ |INTEGER
391
+ |Primary key
392
+
393
+ |`Connector_Type`
394
+ |TEXT
395
+ |"Association", "Generalization", "Aggregation", etc.
396
+
397
+ |`Start_Object_ID`
398
+ |INTEGER
399
+ |Source element
400
+
401
+ |`End_Object_ID`
402
+ |INTEGER
403
+ |Target element
404
+
405
+ |`SourceRole`
406
+ |TEXT
407
+ |Source role name
408
+
409
+ |`DestRole`
410
+ |TEXT
411
+ |Target role name
412
+
413
+ |`SourceCard`
414
+ |TEXT
415
+ |Source cardinality ("0..1", "1..*", etc.)
416
+
417
+ |`DestCard`
418
+ |TEXT
419
+ |Target cardinality
420
+
421
+ |`Direction`
422
+ |TEXT
423
+ |Association direction
424
+ |===
425
+
426
+ ==== t_package - Package hierarchy
427
+
428
+ Primary key:: `Package_ID`
429
+ Purpose:: Package organization and hierarchy
430
+ Row count:: Typically 50-100+ in production models
431
+ UML mapping:: [`Lutaml::Uml::Package`](../lib/lutaml/uml/package.rb)
432
+
433
+ .Key columns
434
+ [cols="1,2,3"]
435
+ |===
436
+ |Column |Type |Purpose
437
+
438
+ |`Package_ID`
439
+ |INTEGER
440
+ |Primary key
441
+
442
+ |`Name`
443
+ |TEXT
444
+ |Package name
445
+
446
+ |`Parent_ID`
447
+ |INTEGER
448
+ |Parent package reference (NULL for root)
449
+
450
+ |`ea_guid`
451
+ |TEXT
452
+ |Enterprise Architect GUID
453
+
454
+ |`Notes`
455
+ |TEXT
456
+ |Package documentation
457
+
458
+ |`TPos`
459
+ |INTEGER
460
+ |Tree position for ordering
461
+ |===
462
+
463
+ === Diagram tables
464
+
465
+ These tables store diagram definitions and visual layout information.
466
+
467
+ ==== t_diagram - Diagram definitions
468
+
469
+ Primary key:: `Diagram_ID`
470
+ Purpose:: UML diagram metadata
471
+ Row count:: Typically 100-300+ in production models
472
+ UML mapping:: [`Lutaml::Uml::Diagram`](../lib/lutaml/uml/diagram.rb)
473
+
474
+ .Key columns
475
+ [cols="1,2,3"]
476
+ |===
477
+ |Column |Type |Purpose
478
+
479
+ |`Diagram_ID`
480
+ |INTEGER
481
+ |Primary key
482
+
483
+ |`Package_ID`
484
+ |INTEGER
485
+ |Containing package
486
+
487
+ |`Name`
488
+ |TEXT
489
+ |Diagram name
490
+
491
+ |`Diagram_Type`
492
+ |TEXT
493
+ |"Logical", "Use Case", "Class", etc.
494
+
495
+ |`Notes`
496
+ |TEXT
497
+ |Diagram documentation
498
+
499
+ |`ea_guid`
500
+ |TEXT
501
+ |Enterprise Architect GUID
502
+ |===
503
+
504
+ ==== t_diagramobjects - Element placement
505
+
506
+ Primary key:: `Instance_ID`
507
+ Purpose:: Visual placement of elements on diagrams
508
+ Row count:: Typically 1500-2500+ in production models
509
+ UML mapping:: [`Lutaml::Uml::Diagram::DiagramObject`](../lib/lutaml/uml/diagram.rb) (nested class)
510
+
511
+ .Key columns
512
+ [cols="1,2,3"]
513
+ |===
514
+ |Column |Type |Purpose
515
+
516
+ |`Instance_ID`
517
+ |INTEGER
518
+ |Primary key
519
+
520
+ |`Diagram_ID`
521
+ |INTEGER
522
+ |Parent diagram
523
+
524
+ |`Object_ID`
525
+ |INTEGER
526
+ |Element being displayed
527
+
528
+ |`RectTop`
529
+ |INTEGER
530
+ |Y coordinate
531
+
532
+ |`RectLeft`
533
+ |INTEGER
534
+ |X coordinate
535
+
536
+ |`RectRight`
537
+ |INTEGER
538
+ |Right edge X
539
+
540
+ |`RectBottom`
541
+ |INTEGER
542
+ |Bottom edge Y
543
+
544
+ |`ObjectStyle`
545
+ |TEXT
546
+ |Visual styling properties
547
+ |===
548
+
549
+ ==== t_diagramlinks - Connector routing
550
+
551
+ Primary key:: `Instance_ID`
552
+ Purpose:: Visual routing of connectors on diagrams
553
+ Row count:: Typically 1500-2500+ in production models
554
+ UML mapping:: [`Lutaml::Uml::Diagram::DiagramLink`](../lib/lutaml/uml/diagram.rb) (nested class)
555
+
556
+ .Key columns
557
+ [cols="1,2,3"]
558
+ |===
559
+ |Column |Type |Purpose
560
+
561
+ |`Instance_ID`
562
+ |INTEGER
563
+ |Primary key
564
+
565
+ |`DiagramID`
566
+ |INTEGER
567
+ |Parent diagram
568
+
569
+ |`ConnectorID`
570
+ |INTEGER
571
+ |Connector being displayed
572
+
573
+ |`Geometry`
574
+ |TEXT
575
+ |Line routing coordinates
576
+
577
+ |`Path`
578
+ |TEXT
579
+ |Waypoint path
580
+
581
+ |`Hidden`
582
+ |INTEGER
583
+ |1 if hidden on diagram
584
+
585
+ |`Style`
586
+ |TEXT
587
+ |Visual styling
588
+ |===
589
+
590
+ === Metadata tables
591
+
592
+ These tables store additional semantic information beyond core UML.
593
+
594
+ ==== t_objectconstraint - OCL constraints
595
+
596
+ Primary key:: `ConstraintID`
597
+ Purpose:: OCL and other formal constraints on classes
598
+ Row count:: Typically 0-20 in models with constraints
599
+ UML mapping:: [`Lutaml::Uml::Constraint`](../lib/lutaml/uml/constraint.rb)
600
+
601
+ .Key columns
602
+ [cols="1,2,3"]
603
+ |===
604
+ |Column |Type |Purpose
605
+
606
+ |`ConstraintID`
607
+ |INTEGER
608
+ |Primary key
609
+
610
+ |`Object_ID`
611
+ |INTEGER
612
+ |Constrained element
613
+
614
+ |`Constraint`
615
+ |TEXT
616
+ |OCL expression or constraint text
617
+
618
+ |`ConstraintType`
619
+ |TEXT
620
+ |"Invariant", "Pre-condition", "Post-condition"
621
+
622
+ |`Weight`
623
+ |REAL
624
+ |Constraint priority/weight
625
+
626
+ |`Status`
627
+ |TEXT
628
+ |"Approved", "Proposed", etc.
629
+ |===
630
+
631
+ .Example OCL constraint
632
+ [source]
633
+ ----
634
+ count(self.legalConstraints.accessConstraints) >= 1
635
+ ----
636
+
637
+ ==== t_taggedvalue - Tagged values
638
+
639
+ Primary key:: `PropertyID`
640
+ Purpose:: Custom metadata on UML elements
641
+ Row count:: Typically 1000-1500+ in production models
642
+ UML mapping:: Embedded as metadata in UML elements
643
+
644
+ .Key columns
645
+ [cols="1,2,3"]
646
+ |===
647
+ |Column |Type |Purpose
648
+
649
+ |`PropertyID`
650
+ |TEXT
651
+ |Primary key
652
+
653
+ |`ElementID`
654
+ |TEXT
655
+ |Tagged element
656
+
657
+ |`BaseClass`
658
+ |TEXT
659
+ |Element type ("Class", "Attribute", etc.)
660
+
661
+ |`TagValue`
662
+ |TEXT
663
+ |Tag name
664
+
665
+ |`Notes`
666
+ |TEXT
667
+ |Tag value
668
+ |===
669
+
670
+ ==== t_objectproperties - Object properties
671
+
672
+ Primary key:: `PropertyID`
673
+ Purpose:: Object-level properties (GML/XML Schema metadata)
674
+ Row count:: Typically 1500-2000+ in ISO 19xxx models
675
+ UML mapping:: Embedded as properties in UML elements
676
+
677
+ .Key columns
678
+ [cols="1,2,3"]
679
+ |===
680
+ |Column |Type |Purpose
681
+
682
+ |`PropertyID`
683
+ |INTEGER
684
+ |Primary key
685
+
686
+ |`Object_ID`
687
+ |INTEGER
688
+ |Owner object
689
+
690
+ |`Property`
691
+ |TEXT
692
+ |Property name
693
+
694
+ |`Value`
695
+ |TEXT
696
+ |Property value
697
+
698
+ |`Notes`
699
+ |TEXT
700
+ |Property documentation
701
+ |===
702
+
703
+ ==== t_attributetag - Attribute tags
704
+
705
+ Primary key:: `PropertyID`
706
+ Purpose:: Attribute-level tags (GML/XML Schema metadata)
707
+ Row count:: Typically 100-200+ in ISO 19xxx models
708
+ UML mapping:: Embedded as metadata in [`Lutaml::Uml::Attribute`](../lib/lutaml/uml/attribute.rb)
709
+
710
+ .Key columns
711
+ [cols="1,2,3"]
712
+ |===
713
+ |Column |Type |Purpose
714
+
715
+ |`PropertyID`
716
+ |INTEGER
717
+ |Primary key
718
+
719
+ |`ElementID`
720
+ |INTEGER
721
+ |Owner attribute
722
+
723
+ |`Property`
724
+ |TEXT
725
+ |Tag name
726
+
727
+ |`VALUE`
728
+ |TEXT
729
+ |Tag value
730
+
731
+ |`NOTES`
732
+ |TEXT
733
+ |Tag documentation
734
+ |===
735
+
736
+ ==== t_xref - Cross-references
737
+
738
+ Primary key:: `XrefID`
739
+ Purpose:: Stereotypes, custom properties, diagram settings
740
+ Row count:: Typically 1000-1500+ in production models
741
+ UML mapping:: Used for stereotype resolution and metadata
742
+
743
+ .Key columns
744
+ [cols="1,2,3"]
745
+ |===
746
+ |Column |Type |Purpose
747
+
748
+ |`XrefID`
749
+ |TEXT
750
+ |Primary key
751
+
752
+ |`Name`
753
+ |TEXT
754
+ |Reference name
755
+
756
+ |`Type`
757
+ |TEXT
758
+ |Reference type
759
+
760
+ |`Client`
761
+ |TEXT
762
+ |Source element GUID
763
+
764
+ |`Supplier`
765
+ |TEXT
766
+ |Target element GUID
767
+
768
+ |`Description`
769
+ |TEXT
770
+ |Reference description
771
+ |===
772
+
773
+ === Lookup/reference tables
774
+
775
+ These tables define valid values and type information.
776
+
777
+ ==== t_stereotypes - Stereotype library
778
+
779
+ Primary key:: None (multi-column)
780
+ Purpose:: Stereotype definitions from UML profiles
781
+ Row count:: Typically 100-200+ in production models
782
+ Usage:: Referenced during stereotype resolution
783
+
784
+ .Key columns
785
+ [cols="1,2,3"]
786
+ |===
787
+ |Column |Type |Purpose
788
+
789
+ |`Stereotype`
790
+ |TEXT
791
+ |Stereotype name
792
+
793
+ |`AppliesTo`
794
+ |TEXT
795
+ |Applicable element types
796
+
797
+ |`Description`
798
+ |TEXT
799
+ |Stereotype documentation
800
+
801
+ |`ea_guid`
802
+ |TEXT
803
+ |Unique identifier
804
+ |===
805
+
806
+ ==== t_datatypes - Type definitions
807
+
808
+ Primary key:: `DatatypeID`
809
+ Purpose:: Database-specific type definitions and mappings
810
+ Row count:: Typically 500-800+ entries
811
+ Usage:: Type resolution and database mapping
812
+
813
+ .Key columns
814
+ [cols="1,2,3"]
815
+ |===
816
+ |Column |Type |Purpose
817
+
818
+ |`DatatypeID`
819
+ |INTEGER
820
+ |Primary key
821
+
822
+ |`Type`
823
+ |TEXT
824
+ |Type name
825
+
826
+ |`ProductName`
827
+ |TEXT
828
+ |Database product
829
+
830
+ |`DataType`
831
+ |TEXT
832
+ |Mapped database type
833
+
834
+ |`GenericType`
835
+ |TEXT
836
+ |Generic type category
837
+ |===
838
+
839
+ ==== t_constrainttypes - Constraint types
840
+
841
+ Primary key:: `Constraint`
842
+ Purpose:: Valid constraint type definitions
843
+ Row count:: 4 standard types
844
+ Usage:: Constraint type validation
845
+
846
+ .Standard constraint types
847
+ [cols="1,2"]
848
+ |===
849
+ |Constraint |Description
850
+
851
+ |Invariant
852
+ |Condition that must always hold
853
+
854
+ |Pre-condition
855
+ |Condition required before operation
856
+
857
+ |Post-condition
858
+ |Condition guaranteed after operation
859
+
860
+ |Definition
861
+ |Derived value or definition
862
+ |===
863
+
864
+ ==== t_connectortypes - Connector types
865
+
866
+ Primary key:: `Connector_Type`
867
+ Purpose:: Valid connector/relationship type definitions
868
+ Row count:: ~30 standard types
869
+ Usage:: Relationship type validation
870
+
871
+ .Common connector types
872
+ [cols="1,2"]
873
+ |===
874
+ |Connector_Type |UML Mapping
875
+
876
+ |Association
877
+ |[`Lutaml::Uml::Association`](../lib/lutaml/uml/association.rb)
878
+
879
+ |Generalization
880
+ |[`Lutaml::Uml::Generalization`](../lib/lutaml/uml/generalization.rb)
881
+
882
+ |Aggregation
883
+ |[`Lutaml::Uml::Association`](../lib/lutaml/uml/association.rb) (with aggregation property)
884
+
885
+ |Composition
886
+ |[`Lutaml::Uml::Association`](../lib/lutaml/uml/association.rb) (with composition property)
887
+
888
+ |Dependency
889
+ |[`Lutaml::Uml::Dependency`](../lib/lutaml/uml/dependency.rb)
890
+
891
+ |Realization
892
+ |[`Lutaml::Uml::Realization`](../lib/lutaml/uml/realization.rb)
893
+ |===
894
+
895
+ ==== t_diagramtypes - Diagram types
896
+
897
+ Primary key:: `Diagram_Type`
898
+ Purpose:: Valid diagram type definitions
899
+ Row count:: ~15 standard types
900
+ Usage:: Diagram type validation
901
+
902
+ .Common diagram types
903
+ [cols="1,2"]
904
+ |===
905
+ |Diagram_Type |Description
906
+
907
+ |Logical
908
+ |Class diagram
909
+
910
+ |Use Case
911
+ |Use case diagram
912
+
913
+ |Component
914
+ |Component diagram
915
+
916
+ |Deployment
917
+ |Deployment diagram
918
+
919
+ |Sequence
920
+ |Sequence diagram
921
+ |===
922
+
923
+ ==== t_objecttypes - Object types
924
+
925
+ Primary key:: `Object_Type`
926
+ Purpose:: Valid object/element type definitions
927
+ Row count:: ~80 types
928
+ Usage:: Object type validation and classification
929
+
930
+ .Common object types
931
+ [cols="1,2"]
932
+ |===
933
+ |Object_Type |UML Mapping
934
+
935
+ |Class
936
+ |[`Lutaml::Uml::Class`](../lib/lutaml/uml/class.rb)
937
+
938
+ |Interface
939
+ |[`Lutaml::Uml::Class`](../lib/lutaml/uml/class.rb) (with interface stereotype)
940
+
941
+ |Enumeration
942
+ |[`Lutaml::Uml::Enum`](../lib/lutaml/uml/enum.rb)
943
+
944
+ |DataType
945
+ |[`Lutaml::Uml::DataType`](../lib/lutaml/uml/data_type.rb)
946
+
947
+ |Package
948
+ |[`Lutaml::Uml::Package`](../lib/lutaml/uml/package.rb)
949
+ |===
950
+
951
+ ==== t_statustypes - Status values
952
+
953
+ Primary key:: `Status`
954
+ Purpose:: Valid status value definitions
955
+ Row count:: ~5 standard statuses
956
+ Usage:: Status field validation
957
+
958
+ .Standard status types
959
+ [cols="1,2"]
960
+ |===
961
+ |Status |Description
962
+
963
+ |Approved
964
+ |Approved for use
965
+
966
+ |Proposed
967
+ |Under review
968
+
969
+ |Validated
970
+ |Validated design
971
+
972
+ |Mandatory
973
+ |Mandatory element
974
+
975
+ |Implemen ted
976
+ |Implemented
977
+ |===
978
+
979
+ ==== t_complexitytypes - Complexity levels
980
+
981
+ Primary key:: `Complexity`
982
+ Purpose:: Complexity level definitions with numeric weights
983
+ Row count:: ~6 complexity levels
984
+ Usage:: Complexity assessment
985
+
986
+ .Standard complexity types
987
+ [cols="1,2"]
988
+ |===
989
+ |Complexity |NumericWeight
990
+
991
+ |Easy
992
+ |1
993
+
994
+ |Medium
995
+ |5
996
+
997
+ |Difficult
998
+ |10
999
+ |===
1000
+
1001
+ == Excluded tables
1002
+
1003
+ The following table categories are NOT implemented in LutaML as they are not relevant for UML model extraction:
1004
+
1005
+ === Project management tables
1006
+
1007
+ These tables manage EA project workflow and are not part of the UML model:
1008
+
1009
+ * `t_tasks` - Task tracking
1010
+ * `t_phase` - Project phases
1011
+ * `t_projectroles` - Project role assignments
1012
+ * `t_resources` - Resource allocation
1013
+ * `t_objectresource` - Object resource mapping
1014
+ * `t_objecteffort` - Effort tracking
1015
+ * `t_efforttypes` - Effort type definitions
1016
+
1017
+ === Problem/issue tracking
1018
+
1019
+ These tables track issues and risks, not UML semantics:
1020
+
1021
+ * `t_issues` - Issue tracking
1022
+ * `t_objectproblems` - Problem assignments
1023
+ * `t_problemtypes` - Problem type definitions
1024
+ * `t_objectrisks` - Risk assignments
1025
+ * `t_risktypes` - Risk type definitions
1026
+
1027
+ === Testing/quality
1028
+
1029
+ These tables manage test cases and scenarios:
1030
+
1031
+ * `t_tests` - Test definitions
1032
+ * `t_objecttests` - Test assignments
1033
+ * `t_testclass` - Test classifications
1034
+ * `t_testplans` - Test plans
1035
+ * `t_testtypes` - Test type definitions
1036
+ * `t_scenarios` - Test scenarios
1037
+ * `t_objectscenarios` - Scenario assignments
1038
+ * `t_scenariotypes` - Scenario type definitions
1039
+
1040
+ === Requirements/traceability
1041
+
1042
+ These tables manage requirements traceability:
1043
+
1044
+ * `t_objectrequires` - Requirement links
1045
+ * `t_requiretypes` - Requirement type definitions
1046
+ * `t_trxtypes` - Traceability type definitions
1047
+ * `t_objecttrx` - Traceability links
1048
+
1049
+ === Security
1050
+
1051
+ These tables manage EA repository security:
1052
+
1053
+ * `t_secgroup` - Security groups
1054
+ * `t_secgrouppermission` - Group permissions
1055
+ * `t_seclocks` - Element locks
1056
+ * `t_secpermission` - Permission definitions
1057
+ * `t_secpolicies` - Security policies
1058
+ * `t_secuser` - User accounts
1059
+ * `t_secusergroup` - User-group assignments
1060
+ * `t_secuserpermission` - User permissions
1061
+
1062
+ === System tables
1063
+
1064
+ SQLite system tables and EA internal tables:
1065
+
1066
+ * `sqlite_sequence` - SQLite auto-increment tracking
1067
+ * `usys_*` - EA system tables
1068
+
1069
+ === Content/media
1070
+
1071
+ These tables store rich content not relevant for UML extraction:
1072
+
1073
+ * `t_document` - Documentation artifacts
1074
+ * `t_script` - Behavioral scripts
1075
+ * `t_html` - HTML content
1076
+ * `t_image` - Image data
1077
+ * `t_rtf` - RTF documents
1078
+ * `t_rtfreport` - Report templates
1079
+ * `t_template` - Code templates
1080
+ * `t_snapshot` - Version snapshots
1081
+
1082
+ === Other excluded tables
1083
+
1084
+ Miscellaneous tables not relevant for UML models:
1085
+
1086
+ * `t_authors` - Author information
1087
+ * `t_category` - Element categories
1088
+ * `t_clients` - Client information
1089
+ * `t_constants` - System constants
1090
+ * `t_ecf` - Environmental complexity factors
1091
+ * `t_implement` - Implementation tracking
1092
+ * `t_lists` - List definitions
1093
+ * `t_method` - Method library
1094
+ * `t_objectmetrics` - Metrics data
1095
+ * `t_ocf` - Organizational complexity factors
1096
+ * `t_operationposts` - Post-conditions (use `t_objectconstraint` instead)
1097
+ * `t_operationpres` - Pre-conditions (use `t_objectconstraint` instead)
1098
+ * `t_operationtag` - Operation tags
1099
+ * `t_palette` - Toolbox palettes
1100
+ * `t_paletteitem` - Palette items
1101
+ * `t_roleconstraint` - Role constraints
1102
+ * `t_rules` - Validation rules
1103
+ * `t_tcf` - Technical complexity factors
1104
+ * `t_umlpattern` - Pattern library
1105
+ * `t_version` - Version history
1106
+ * `t_xrefuser` - Cross-reference user data
1107
+
1108
+ == Configuration
1109
+
1110
+ === Schema configuration file
1111
+
1112
+ QEA parsing is configured via [`config/qea_schema.yml`](../config/qea_schema.yml).
1113
+
1114
+ .Configuration structure
1115
+ [source,yaml]
1116
+ ----
1117
+ version: "1.0"
1118
+ description: "EA QEA database schema configuration"
1119
+
1120
+ model_classes:
1121
+ t_object: Lutaml::Qea::Models::EaObject
1122
+ t_attribute: Lutaml::Qea::Models::EaAttribute
1123
+ # ... other tables
1124
+
1125
+ tables:
1126
+ - table_name: t_object
1127
+ enabled: true
1128
+ primary_key: Object_ID
1129
+ collection_name: objects
1130
+ description: "UML objects (classes, interfaces, etc.)"
1131
+ columns:
1132
+ - name: Object_ID
1133
+ type: INTEGER
1134
+ primary: true
1135
+ # ... other columns
1136
+
1137
+ transformations:
1138
+ object_types:
1139
+ Class: Lutaml::Uml::Class
1140
+ Interface: Lutaml::Uml::Class
1141
+ # ... other mappings
1142
+
1143
+ transformers:
1144
+ class: Lutaml::Qea::Factory::ClassTransformer
1145
+ # ... other transformers
1146
+ ----
1147
+
1148
+ === Boolean field handling
1149
+
1150
+ EA stores boolean values as INTEGER (0/1). The configuration specifies which fields should be treated as boolean:
1151
+
1152
+ .Boolean fields
1153
+ [source,yaml]
1154
+ ----
1155
+ boolean_fields:
1156
+ - IsStatic
1157
+ - IsCollection
1158
+ - IsOrdered
1159
+ - AllowDuplicates
1160
+ - IsControlled
1161
+ - Protected
1162
+ - IsRoot
1163
+ - IsLeaf
1164
+ - IsSpec
1165
+ - IsActive
1166
+ - Const
1167
+ - Tagged
1168
+ ----
1169
+
1170
+ === Type mappings
1171
+
1172
+ SQLite types are mapped to Ruby types:
1173
+
1174
+ .Type mappings
1175
+ [cols="1,1"]
1176
+ |===
1177
+ |SQLite Type |Ruby Type
1178
+
1179
+ |INTEGER
1180
+ |integer
1181
+
1182
+ |TEXT
1183
+ |string
1184
+
1185
+ |REAL
1186
+ |float
1187
+
1188
+ |BLOB
1189
+ |binary
1190
+
1191
+ |NULL
1192
+ |null
1193
+ |===
1194
+
1195
+ == Usage
1196
+
1197
+ === Parsing a QEA file
1198
+
1199
+ .Basic parsing
1200
+ [source,ruby]
1201
+ ----
1202
+ require "lutaml/qea"
1203
+
1204
+ # Parse QEA file directly
1205
+ document = Lutaml::Qea.parse("model.qea")
1206
+ # => Returns Lutaml::Uml::Document
1207
+
1208
+ # With options
1209
+ document = Lutaml::Qea.parse("model.qea",
1210
+ include_diagrams: true,
1211
+ validate: true
1212
+ )
1213
+ ----
1214
+
1215
+ === Using with parser API
1216
+
1217
+ .Integration with Lutaml::Parser
1218
+ [source,ruby]
1219
+ ----
1220
+ require "lutaml"
1221
+
1222
+ # Auto-detect file type
1223
+ model = Lutaml::Parser.parse([File.new("model.qea")])
1224
+ # => Returns array with Lutaml::Uml::Document
1225
+
1226
+ document = model.first
1227
+ ----
1228
+
1229
+ === Database information
1230
+
1231
+ .Get quick statistics
1232
+ [source,ruby]
1233
+ ----
1234
+ require "lutaml/qea"
1235
+
1236
+ # Get database statistics
1237
+ info = Lutaml::Qea.database_info("model.qea")
1238
+ puts info
1239
+ # => {
1240
+ # "objects" => 693,
1241
+ # "attributes" => 1910,
1242
+ # "connectors" => 908,
1243
+ # "packages" => 58,
1244
+ # "diagrams" => 205
1245
+ # }
1246
+ ----
1247
+
1248
+ === Low-level database access
1249
+
1250
+ .Direct database loading
1251
+ [source,ruby]
1252
+ ----
1253
+ require "lutaml/qea"
1254
+
1255
+ # Load database with progress callback
1256
+ database = Lutaml::Qea.load_database("model.qea") do |table, current, total|
1257
+ puts "Loading #{table}: #{current}/#{total}"
1258
+ end
1259
+
1260
+ # Access raw data
1261
+ database.objects.each do |ea_object|
1262
+ puts "Class: #{ea_object.name}"
1263
+ end
1264
+ ----
1265
+
1266
+ === File validation
1267
+
1268
+ .Validate QEA file
1269
+ [source,ruby]
1270
+ ----
1271
+ require "lutaml/qea/file_detector"
1272
+
1273
+ # Check if file is valid QEA
1274
+ if Lutaml::Qea::FileDetector.qea_file?("model.qea")
1275
+ puts "Valid QEA file"
1276
+ end
1277
+
1278
+ # Validate structure
1279
+ result = Lutaml::Qea::FileDetector.validate_qea("model.qea")
1280
+ if result[:valid]
1281
+ puts "QEA file is valid"
1282
+ puts "Tables: #{result[:table_count]}"
1283
+ puts "Objects: #{result[:object_count]}"
1284
+ else
1285
+ result[:errors].each { |e| puts "ERROR: #{e}" }
1286
+ end
1287
+ ----
1288
+
1289
+ == Performance
1290
+
1291
+ === Benchmarks
1292
+
1293
+ Typical performance for a 20MB EA model with 693 objects:
1294
+
1295
+ .QEA vs XMI parsing
1296
+ [cols="1,1,1"]
1297
+ |===
1298
+ |Format |Parse Time |Memory
1299
+
1300
+ |QEA
1301
+ |1-2 seconds
1302
+ |Lower
1303
+
1304
+ |XMI
1305
+ |20-40 seconds
1306
+ |Higher
1307
+ |===
1308
+
1309
+ Speedup:: 10-20x faster than XMI
1310
+ Memory usage:: Lower memory footprint with streaming
1311
+
1312
+ === Optimization techniques
1313
+
1314
+ The QEA parser uses several optimization techniques:
1315
+
1316
+ Streaming:: Reads data from SQLite without loading entire file
1317
+ Lazy loading:: Loads only requested tables
1318
+ Indexed queries:: Uses database indexes for fast lookups
1319
+ Batch processing:: Processes related records together
1320
+ Connection pooling:: Reuses database connections
1321
+
1322
+ == Limitations
1323
+
1324
+ === File format requirements
1325
+
1326
+ * QEA files must be SQLite 3 format
1327
+ * Requires EA-specific table structure
1328
+ * Unicode (UTF-8) encoding required
1329
+
1330
+ === Feature support
1331
+
1332
+ * Read-only access (does not write back to EA database)
1333
+ * Some EA proprietary features may not be fully supported
1334
+ * Diagram layout is approximate (EA uses proprietary rendering)
1335
+ * Version control information not extracted
1336
+
1337
+ === Compatibility
1338
+
1339
+ * Tested with EA versions 13-16
1340
+ * May not support very old EA versions (< 10)
1341
+ * Custom EA schema modifications not supported
1342
+
1343
+ == References
1344
+
1345
+ === Documentation
1346
+
1347
+ * link:QEA_DATABASE_TABLE_ANALYSIS.md[Detailed table analysis]
1348
+ * link:../README[LutaML main documentation]
1349
+ * link:DIAGRAM_SUPPORT_IMPLEMENTATION.md[Diagram implementation details]
1350
+ * link:OBJECT_PROPERTIES_IMPLEMENTATION.md[Object properties implementation]
1351
+
1352
+ === Source code
1353
+
1354
+ * [`lib/lutaml/qea/`](../lib/lutaml/qea/) - QEA module
1355
+ * [`lib/lutaml/qea/models/`](../lib/lutaml/qea/models/) - EA model classes
1356
+ * [`lib/lutaml/qea/factory/`](../lib/lutaml/qea/factory/) - Transformers
1357
+ * [`lib/lutaml/uml/`](../lib/lutaml/uml/) - UML domain layer
1358
+ * [`config/qea_schema.yml`](../config/qea_schema.yml) - Schema configuration
1359
+
1360
+ === External resources
1361
+
1362
+ * https://sparxsystems.com/[Sparx Systems EA]
1363
+ * https://www.sqlite.org/[SQLite database]
1364
+ * https://www.omg.org/spec/UML/[UML specification]