域模型的文本语法

时间:2016-08-26 18:36:12

标签: groovy xtext mps

我们有一些以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中解释它们非常重要。
  5. 代表, 我可能有以下数据文件

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

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

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

    谢谢

1 个答案:

答案 0 :(得分:0)

  

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

我认为在您拥有(或可以创建)XML域模型的XML架构的情况下,Xtext可以满足您的要求。

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

如果我理解正确,那么您并不需要为每个XML数据模型提供特定的语法规则,而只需要交叉引用数据模型。

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

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

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

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

根据您的要求,您可以选择制作解释器,Xbase推理器或生成器(每个都可以使用Xtend实现)。

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