Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
submodels [2026/09/08 20:17]
hermann
submodels [2026/09/08 20:44] (current)
hermann
Line 179: Line 179:
 Turning a local submodel into a user submodel makes reusing the submodel easier — the submodel will always be available to be used in your next models — but it has some drawbacks as well. You are fully responsible for the consequences of updating a user submodel. Beware that, unlike local submodels, your models will not carry a copy of a user submodel as part of their definition. So, if you change a user submodel in a way that breaks compatibility with the models using its definition, those models will not work anymore. Turning a local submodel into a user submodel makes reusing the submodel easier — the submodel will always be available to be used in your next models — but it has some drawbacks as well. You are fully responsible for the consequences of updating a user submodel. Beware that, unlike local submodels, your models will not carry a copy of a user submodel as part of their definition. So, if you change a user submodel in a way that breaks compatibility with the models using its definition, those models will not work anymore.
  
-==== Dependencies ​When Publishing ====+==== Dependency Propagation ​When Publishing ​as a User Submodel ​====
  
-If the local submodel ​being published ​depends on other local submodelsthose dependencies ​are published together with it as local copies bundled inside ​the new user submodel ​— they do **not** become separatetop-level ​user submodels of their own.+When a local submodel ​is published ​as a user submodelits dependencies ​become ​local submodels of the published ​submodel, ​rather than independent ​user submodels of their own.
  
-For example, consider ​a local submodel **A** that depends on local submodels **B** and **C**, where **B** also depends on **C**. Publishing **A** produces a single ​new user submodel, **A**, ​which privately packages ​**B** and **C** inside it. **B** and **C** are not added to the user's submodel set as independent entries, and are not directly ​available ​on their own for use in other models.+Consider ​a local submodel **A** that depends on local submodels **B** and **C**, where **B** also depends on **C**. Publishing **A** as a user submodel ​produces a single user submodel, **A**, ​containing ​**B** and **C** as local submodels of **A**. **B** and **C** sit side by side inside ​**A**'​s own local submodel set, so **B** does not get a separate copy of **C** — it uses the single copy of **C** held by their common parent **A**, the same way one local submodel depends on another local submodel of the same model. **B** and **C** are not added to the user's submodel set as independent, top-level ​entries ​— only **A** is. 
 + 
 +This flat structure holds regardless of whether **A** uses **C** directly. Even if **C** is used only by **B**, and not by **A** itself, publishing **A** still places **B** and **C** side by side as local submodels of **A** — **C** is not nested inside **B**. 
 + 
 +==== Republishing and Naming Collisions ==== 
 + 
 +Publishing or sending a submodel again — whether because the local submodel changed, or because a user submodel of the same name already exists for some other reason — behaves differently depending on the target: 
 + 
 +  * **User submodels ​are overwritten by name.** Publishing a local submodel as a user submodel always replaces whatever user submodel currently holds that name, whether that is an earlier published version of the same submodel or an unrelated existing user submodel that happens to share the name. Since dependencies become local submodels of the published submodel rather than independent user submodels (see [[#​dependency_propagation_when_publishing_as_a_user_submodel|Dependency Propagation When Publishing as a User Submodel]] above), republishing **A** does not touch any independently named user submodels **B** or **C** — it simply replaces **A**'​s local submodels **B** and **C** with their current definitions. 
 + 
 +  * **Store submodels are versioned, not overwritten.** Sending a submodel to the Store again does not replace the previous submission; it creates a new version, tagged with the Dinamica EGO version in use at the time, following the same versioning behavior described in [[#​versioning_and_compatibility|Versioning and Compatibility]]. 
 + 
 +==== Sending a Submodel to the Store ==== 
 + 
 +A user submodel can be sent to the online [[#​the_submodel_store|Submodel Store]], becoming a store submodel. There are two ways to do this: 
 + 
 +  * From a local submodel ​directly, using the //Publish Submodel as a Store Submodel// option ​on the //Submodel Options// drop-down menu. This first turns the local submodel into a user submodel, then sends that user submodel to the Store. 
 +  * From an existing user submodel, using the corresponding button on the //Submodel Manager// dialog (//​Submodels//​ → //Submodel Manager//), which sends that user submodel to the Store directly. 
 + 
 +==== Dependency Propagation When Sending to the Store ==== 
 + 
 +When a submodel is sent to the Store, its dependencies are packaged with it rather than published as independent store submodels. 
 + 
 +Consider the same local submodel **A**, depending on **B** and **C**, with **B** also depending on **C**. Sending **A** to the Store as a store submodel produces the following structure:​ 
 + 
 +  * **A** receives its own local submodel copy of **B** and its own local submodel copy of **C**. 
 +  * **B**, ​in turn, receives its own local submodel copy of **C** — a separate copy from the one held directly by **A**. 
 + 
 +The store submodel package therefore ends up containing two independent copies of **C**: one local to **A**, and one local to **B**. Once packaged, these copies are independent of each other, the same as any other local submodels obtained through copying (see [[#​copying_importing_a_local_submodel_between_models|Copying (Importing) a Local Submodel Between Models]]). 
 + 
 +Unlike publishing to a user submodel, this nesting follows the actual dependency graph. If **C** is used only by **B**, and not by **A** itself, the store submodel package nests **C** inside **B** instead of placing it directly inside **A**: **C** becomes a local submodel of **B**, and **B** a local submodel of **A**. 
 + 
 +==== Dependencies Are Scoped to Their Store Submodel ==== 
 + 
 +The local submodel copies of **B** and **C** packaged inside store submodel **A** exist only because **A** depends on them — they have no independent identity of their own. A packaged dependency inside one store submodel is entirely independent of a same-named dependency packaged inside a different store submodel, and of any unrelated user or store submodel that might share the same name; each store submodel'​s packaged dependencies are private to it.
  
 ===== The Submodel Store ===== ===== The Submodel Store =====
Line 192: Line 226:
  
 To browse and install submodels from the Submodel Store, choose //​Submodels//​ → //Submodel Store// on the model toolbar. Select the desired submodel from the list and click //Install Selected// to download it; it then becomes available locally as a store submodel. To browse and install submodels from the Submodel Store, choose //​Submodels//​ → //Submodel Store// on the model toolbar. Select the desired submodel from the list and click //Install Selected// to download it; it then becomes available locally as a store submodel.
 +
 +> **Tip:** To publish your own submodel to the Store instead of installing one, see [[#​sending_a_submodel_to_the_store|Sending a Submodel to the Store]].
  
 ==== Versioning and Compatibility ==== ==== Versioning and Compatibility ====