Essayer de créer un méta-modèle pour Mongoose et MondoDb, en utilisant les concepts de métamodélisation, eclipse et xtext.
J'essaie d'assigner un objet que j'ai créé dans mon fichier test.mydsl à un autre objet du même fichier, mais je reçois une erreur dans mon fichier test.mydsl
J'essaie d'assigner un objet de schéma créé (sc1) à un objet de collection (col), mais une erreur est en cours
Message d'erreur
la fonctionnalité "valider" de "paket.impl.NCollectionImpl @ 67d76e14 {platform: /resource/test/classes/test.mydsl # // @ collections0}} " contient un proxy non résolu "paket.impl.SchemaImpl@361d8284 {platform: /resource/test/classes/test.mydsl# | 0}"
ma grammaire pour Schema et 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)*)?
"}";
mon test.mydsl
Database<db1>{
Schema<sc1>{
var ja=lp
ime:{
type:String,
min:123.0
}
}
Collection<col, sc1>
{
}
}
J'ai tout essayé, mais sans succès.
Une idée de ce qu'on peut faire?
Merci
MODIFIER:
Peut-être que je n'étais pas assez clair. Le problème majeur concerne l'attribut "validate" dans la règle NCollection. Lorsque je crée mon objet Schema (sc1 dans test.mydsl), puis que je tente de le transmettre à Collection (col dans test.mydsl) en tant que "sc1", l'attribut "validate" ne peut pas l'accepter comme chaîne, et je ne "t savoir comment le passer comme objet Schema. J'espère que cette explication aide.
Réponses:
0 pour la réponse № 1Le code
validate=[Schema|EString]
dit: je veux une référence de schéma via une chaîne, c'est-à-dire "sc1"
au lieu du nom. Xtext ne sait pas comment convertir une chaîne en une référence. Utilisez ceci à la place:
validate=[Schema]
qui est court pour
validate=[Schema|ID]
Cela utilisera le nom du Schema
comme référence. Notez que vous devez écrire
("Schema" "<" name=EString) ">"
c'est-à-dire minuscule name
pour le faire fonctionner. Xtext a un traitement spécial pour les propriétés appelées name
.
0 pour la réponse № 2
S'il vous plaît essayez d'utiliser name=EString
au lieu de Name=EString
comme Xtext impose une sémantique par défaut spéciale pour l'attribut name
. Aussi, je recommande de regarder dans la documentation.