尝试使用元模型概念,eclipse和xtext为Mongoose和MondoDb创建元模型。
我正在尝试将我在test.mydsl文件中创建的对象分配给同一文件中的另一个对象,但我在test.mydsl文件中出错。
我正在尝试将创建的Schema(sc1)对象分配给Collection(col)对象,但当前收到错误
错误消息
功能'验证'的 ' {paket.impl.NCollectionImpl@67d76e14平台:/resource/test/classes/test.mydsl#// @ collections.0}' 包含一个未解析的代理 ' {paket.impl.SchemaImpl@361d8284平台:/resource/test/classes/test.mydsl# | 0}'
我对Schema和Collection的语法
Schema returns Schema:
{Schema}
('Schema' '<' Name=EString) '>'
'{'
(schemaExpression+=Expression ( "," schemaExpression+=Expression)*)?
(verificationDocumentElement+=VerDocElement ( "," verificationDocumentElement+=VerDocElement)*)?
'}';
NCollection returns NCollection:
{NCollection}
('Collection' '<' Name=EString) ',' (validate=[Schema|EString])? '>'
'{'
(document+=Document ( "," document+=Document)*)?
'}';
my test.mydsl
Database<db1>{
Schema<sc1>{
var ja=lp
ime:{
type:String,
min:123.0
}
}
Collection<col, sc1>
{
}
}
我尝试了所有,但没有成功。
任何想法该怎么办?
谢谢
编辑:
也许我不够清楚。主要问题是&#34;验证&#34; NCollection规则中的属性。 当我创建我的Schema对象(test.mydsl中的sc1),然后尝试将它作为&#34; sc1&#34;传递给Collection(col.in test.mydsl)时,&#34;验证&#34;属性不能像字符串一样接受它,我不知道如何像Schema对象一样传递它。 我希望这个解释有所帮助。
答案 0 :(得分:0)
请尝试使用name=EString
代替Name=EString
,因为Xtext会为属性name
强制使用特殊的默认语义。另外,我建议查看文档。
答案 1 :(得分:0)
代码
validate=[Schema|EString]
说:我想通过字符串引用模式引用,即"sc1"
而不是名称。 Xtext不知道如何将字符串转换为引用。请改用:
validate=[Schema]
是
的缩写validate=[Schema|ID]
这将使用Schema
的名称作为参考。请注意,您必须写
('Schema' '<' name=EString) '>'
即。小写name
使其有效。 Xtext对名为name
的属性进行了特殊处理。