MPS多对多模型转换
MPS Many to Many model transformation
我打算将我之前构建的工具迁移到 Jetbrains Mps,我正在评估它但有一些疑问。
主要问题是 Mps 中的模型转换是否只是 1 个模型到 1 个模型。或者我可以组合几个模型来生成其他模型。
我想我有一种叫做 "Page language" 的语言来表示页面结构。它允许您定义一种页面的总体布局。
例如,我定义了两个模型 "List page"(给定实体的列表记录)和 "Instance Page"("crud" 操作的页面)。
还有另一种语言叫做 "Entities language",这种语言可以让您定义实体。在一个解决方案中,我创建了这种语言的 3 个模型:Person、City 和 Country 来表示 3 个实体。
我需要构建的生成过程必须结合 3 个实体的模型和 2 个页面的模型来生成 6 个其他语言的模型,这将代表每个页面完整,具有页面模型和实体字段的去结构来自实体模型。
Mps 可以吗?
例如,我可以遍历实体模型并为每个模型执行嵌套迭代页面模型,然后触发一个模型转换,将当前实体与当前页面模型组合起来吗?
非常感谢。
在 MPS 术语中,我们称这些实体不是模型,而是 "root nodes"。您当然可以生成这样的节点组合 - 我可能会使用预处理脚本生成六个组合作为引用原始实体的新根节点。它的概念可能看起来像这样:
concept TemporaryCombination extends BaseConcept
...
references:
page:Page[1]
entity:Entity[1]
...
然后 TemporaryCombination 概念的根映射规则可以驱动目标节点的生成。
我打算将我之前构建的工具迁移到 Jetbrains Mps,我正在评估它但有一些疑问。
主要问题是 Mps 中的模型转换是否只是 1 个模型到 1 个模型。或者我可以组合几个模型来生成其他模型。
我想我有一种叫做 "Page language" 的语言来表示页面结构。它允许您定义一种页面的总体布局。 例如,我定义了两个模型 "List page"(给定实体的列表记录)和 "Instance Page"("crud" 操作的页面)。
还有另一种语言叫做 "Entities language",这种语言可以让您定义实体。在一个解决方案中,我创建了这种语言的 3 个模型:Person、City 和 Country 来表示 3 个实体。
我需要构建的生成过程必须结合 3 个实体的模型和 2 个页面的模型来生成 6 个其他语言的模型,这将代表每个页面完整,具有页面模型和实体字段的去结构来自实体模型。
Mps 可以吗?
例如,我可以遍历实体模型并为每个模型执行嵌套迭代页面模型,然后触发一个模型转换,将当前实体与当前页面模型组合起来吗?
非常感谢。
在 MPS 术语中,我们称这些实体不是模型,而是 "root nodes"。您当然可以生成这样的节点组合 - 我可能会使用预处理脚本生成六个组合作为引用原始实体的新根节点。它的概念可能看起来像这样:
concept TemporaryCombination extends BaseConcept
...
references:
page:Page[1]
entity:Entity[1]
...
然后 TemporaryCombination 概念的根映射规则可以驱动目标节点的生成。