【问题标题】:Use Alloy as an abstract modeling language?使用 Alloy 作为抽象建模语言?
【发布时间】:2018-09-20 16:25:07
【问题描述】:

我想创建一个抽象模型,然后从中自动生成各种特定于数据格式的模型,例如 XML 模型(即自动生成从抽象模型生成一个 XML 模式)、一个 JSON 模型(即从抽象模型自动生成一个 JSON 模式)等等。

如果使用 Alloy 作为表达抽象模型的语言会很棒

但我不确定是否能够从合金模型自动生成所需的特定数据格式模型。请允许我解释一下。

考虑这个简单的合金模型:

sig Test {
   A: Int,
   B: Int
} {
    A > B
}

该模型包含两种类型的东西:(1) 它包含有关数据结构的信息,以及 (2) 它包含相互依赖的信息(“A”必须大于“B”)。

从合金模型中,我可以自动生成各种表达结构信息的特定于数据格式的模型;方法如下:

我可以做Execute > Show Metamodel,它会生成一个显示结构的实例。在这种情况下,我可以做File > Export As XML。然后我可以将 XML 转换为 XML 模式或 JSON 模式或其他任何东西。

Alloy 似乎适合作为一种抽象语言,从中可以自动生成各种表达结构信息的特定于数据格式的模型。

请注意,在上述模型中,“A”必须大于“B”。 Alloy 实例中未描述该约束。但是该约束需要在特定格式的模型中表达(例如,对于 XML 格式,约束将在 Schematron 规则中表达)。

如何提取合金模型中表达的约束,并将其转换为特定于数据格式的规则?

我想我可以尝试直接从 .als 文件中提取约束。但这似乎极具挑战性。

我寻求您的建议。

【问题讨论】:

    标签: alloy


    【解决方案1】:

    是的,我也有同样的想法。我也知道如何实现它。寻找一些资金的小细节:-(

    我认为这可能是合金的一个很好的用途。

    更新

    这个答案有点搞笑。你完全可以在合金中做一些事情。您可以将模型导出为 XML,然后可以通过 XSLT 或其他工具翻译 XML。然而,这并不容易且难以自动化。理想的情况是,Alloy 可以处理一些脚本,以便您可以转换为您需要的格式。

    【讨论】:

    • 嗨@Peter Kriens。是的,您可以将模型导出为 XML,然后将 XSLT 应用于 XML(我已经这样做以生成测试用例)。但是,XML 不包含诸如“A”的值必须小于“B”的值等约束。这就是挑战——如何提取和表示约束。
    • 嗨罗杰。我认为您所说的 XML 导出是实例。我假设您正在为元模型创建一个实例,然后将其导出,正如您所说,这将接近您想要的,但不包括约束。正如彼得指出的那样,这样做需要一些新的实现,并且非常简单,因为它不需要分析。
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多