4

我们有以某种 xml 格式描述的域模型。给定领域模型,我想生成工具来帮助测试人员/领域专家以文本形式表达数据(以及稍后的领域特定测试框架)。IDE 支持是强制性的(IDEA 或 Eclipse)。

说,我有这个伪模型

User
fn string 120 chars mandatory
ln string 120 chars mandatory
address not-mandatory

Address
street mandatory
city mandatory

一个典型的使用场景:

user opens the IDE
creates a new file
when content assist invoked, should give options 'user', 'address' etc

If I choose user, furthur ctrl-space should give 'fn', 'ln', 'address' as options. 

我知道这可以通过 xtext 或 jetbrains mps 等来完成。但是,我想了解哪种技术可以满足以下要求。

  1. 模型在运行时馈送到系统(新建、更新、删除等)。所以,我不能有静态的语法集。如何构建它以便在运行时解析模型/属性辅助或至少生成语法(可能是其中的一部分)
  2. 当我使用一组“语法”时,如果我将目标服务器指向不同的版本(可能有不同的模型集),我希望编辑器验证我现有的文件并标记错误。
  3. 我以 xml、文本或通过服务器查找获取数据文件。
  4. 将模型转换为其他格式或在 java/groovy 中解释它们对我来说非常重要。

例如,我可能有以下数据文件

user {
fn : Tom
ln : Jill 
hobby : movies
}

但是,当我针对不知道“爱好”属性的服务器验证此文件时,我希望编辑器在该属性上标记错误。

我计划向这个 dsl/toolkit 添加更多功能。任何提示哪种技术更合适?

谢谢

4

1 回答 1

0

我知道这可以通过 xtext 或 jetbrains mps 等来完成。但是,我想了解哪种技术可以满足以下要求。

我认为 Xtext 在您拥有(或可以创建)您的 XML 域模型的 XML 模式的条件下对您的要求有好处。

  1. 模型在运行时馈送到系统(新建、更新、删除等)。所以,我不能有静态的语法集。如何构建它以便在运行时解析模型/属性辅助或至少生成语法(可能是其中的一部分)

如果我理解正确,您实际上并不需要每个 XML 数据模型的特定语法规则,而只需要对数据模型的交叉引用。

EMF 支持从 XSD 文件生成 EMF Java 类,如果您使用自定义索引器(Xtext 接口 IDefaultResourceDescriptionStrategy)将符合 XSD 模式的 XML 文件添加到 Xtext 索引,则 Xtext 可以引用它们。因此,您可以为您的 DSL 创建一个带有语法等的普通 Xtext 项目,并使用引用您的 XML 域模型的交叉引用。

  1. 当我使用一组“语法”时,如果我将目标服务器指向不同的版本(可能有不同的模型集),我希望编辑器验证我现有的文件并标记错误。
  2. 我以 xml、文本或通过服务器查找获取数据文件。

EMF 使用 URI 来识别资源,因此如果您生成像我描述的那样的 Ecore 模型,应该可以使用 http:// 或 file://(或其他任何可扩展的)URI 或您自己的东西来导入 XML 域模型内部解析为 URI。

  1. 将模型转换为其他格式或在 java/groovy 中解释它们对我来说非常重要。

在这里,您可以选择制作解释器、Xbase 推断器或生成器(每个都可以使用 Xtend 很好地实现),具体取决于您的要求。

(免责声明:我是 itemis 的员工,它是 Xtext 的主要贡献者之一)

于 2016-09-27T14:23:28.667 回答