.. _bag_book/structures/structures: Le Structures in Genropy ======================== La classe GnrStructData eredita da `Bag `_ e permette di definire attraverso appositi metodi descrittori realtà complesse composte da collezioni di entità innestate (es: HTML, XML, DB model, GUI). Il metodo più importante di GnrStructData è ``child``, che di fatto è un altro modo di fare una `setItem `_ su una *Bag*. :: from gnr.core.gnrstructures import GnrStructData mystruct = GnrStructData() mystruct.child(tag='ingrediente',nome='Spaghetti', peso='200g') mystruct.child(tag='ingrediente',nome='Salsa', peso='100g') f = mystruct.child(tag='fase', nome='Preparare sugo', t=’10 min.') f.child(tag='fase', nome='Tagliare cipolla') f.child(tag='fase', nome='Soffriggere cipolla') f.child(tag='fase', nome='Aggiungere salsa') La *child* equivale ad una ``setItem`` ad un path prefissato basato sull’attributo ``tag``. Inoltre restituisce l’oggetto appena aggiunto. :: from gnr.core.gnrstructures import GnrStructData class Ricetta(GnrStructData): def ingrediente(self, nome, peso): return self.child(tag='ingrediente', nome=nome, peso=peso) def fase(self, nome, descrizione=None, tempo=None): return self.child(tag='fase', nome=nome, tempo=tempo, descrizione=descrizione) def sezione(self, nome): return self.child(tag='sezione', nome=nome) Definire questi metodi serve anche a scopo documentativo e permette un controllo dei parametri rispetto, rispetto all’uso di una Bag "libera". :: def main(): myricetta = Ricetta() ingr = myricetta.sezione('Ingredienti') ingr.ingrediente('Spaghetti', '100g') ingr.ingrediente('Salsa pomodoro', '80g') procedimento = myricetta.sezione('Procedimento') sughetto = procedimento.fase(nome='Preparare sugo', tempo='15 min') sughetto.fase(nome='Tagliare cipolla') sughetto.fase(nome='Soffriggere cipolla', tempo='3 min') sughetto.fase(nome='Aggiungere salsa') Infine esporto in xml per controllare il risultato:: myricetta.toXml('spaghetti.xml') .. hint:: Notate l’annidamento sezione > fase > fase Utilizzi reali delle structures in Genropy ------------------------------------------ Le structures sono utilizzate in Genropy: - per descrivere le pagine servite - per descrivere il :ref:`model` del database - per descrivere l’HTML delle `stampe `_ Poi ogni tipo di entità descritta avrà il suo costruttore, che la struttura descritta produrrà: oggetti Python, tabelle SQL o elementi di DOM. .. raw:: html
**Allegati:** - `bag_structures `_ .. sectionauthor:: Saverio Porcari e Giovanni Porcari