Alors voila, je planche actuellement sur un problème de transformations ATL pour passer d’un arbre à un autre. Les arbres sont des Octrees utilisés (de ce que dis le prof) dans les représentations en 3D. Mais ça on s’y intéresse pas, nous on cherche juste à réaliser des transformations d’un arbre vers un autre. Par exemple on doit réaliser l’opération inverse.
Pour cela on utilise Eclipse et le plugin ATL qui va bien et les fichiers d’exemple nous ont été fournis par le prof. J’ai écris mon modèle KM3 définissant les arbres et une transformation basique pour passer d’un arbre à juste un objet contenant la dimension de l’arbre d’origine. Le soucis c’est que je n’arrive pas à exécuter ma transformation. Je me retrouve toujours avec un NullPointerException et la cause semble être :
org.xml.sax.SAXParseException: The prefix "xsi" for attribute "xsi:type" associated with an element type "root" is not bound.
J’ai tourné et retourné mais n’ai rien trouvé. Alors j’en viens à vous poser la question des fois qu’il y ait dans l’assemblée un expert incollable sur ATL, XMI et tous leurs amis (qui sont pas les miens sur le coup ).
Je vous colle mon modèle :
package Octree {
class Octree {
attribute dimension : Integer;
reference root : Voxel;
}
class Voxel {
reference divisible[0-1] : Divisible oppositeOf voxels;
}
class Divisible extends Voxel {
reference voxels[8-8] container : Voxel oppositeOf divisible;
}
class Full extends Voxel {
}
class Empty extends Voxel {
}
}
Et ma transformation :
[code]module Inverse; – Module Template
create OUT : Octree from IN : Octree;
uses libOctree; – defines helpers
rule Inverse {
from
arbre : Octree!Octree
to
inverse : Octree!Octree (
dimension <- arbre.dimension
)
}
[/code]
Et le meilleur pour la fin, un exemple d’arbre :
<?xml version="1.0" encoding="ASCII"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns="Octree">
<Octree dimension="8">
<root xsi:type="Divisible">
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Divisible">
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Empty"/>
<voxels xsi:type="Full"/>
<voxels xsi:type="Empty"/>
</voxels>
<voxels xsi:type="Empty"/>
</root>
</Octree>
</xmi:XMI>
Et si quelqu’un a une quelconque idée de la choucroute de pourquoi j’ai cette erreur, je le remercie bien beaucoup
Et moi je passe à mon cours sur les communication, RMI, sockets et compagnie… (mais pourquoi je me suis inscrit en master à distance cette année ??? )