Definizioni fondamentali¶
Vediamo da un punto di vista più tecnico di cosa si costituisce una Bag
Bag: è una collezione (lista) di BagNode
>>> from gnr.core.gnrbag import Bag >>> mybag = Bag() >>> mybag['andrew']=1 >>> mybag['paul']=2 >>> mybag.nodes [BagNode : andrew at 4526314960, BagNode : paul at 4526315024] >>> mybag.getNodes() [BagNode : andrew at 4526314960, BagNode : paul at 4526315024]
BagNode: (da ora anche semplicemente node) è una classe Genropy che si compone di tre elementi fondamentali.
label
value
attributes
Data una bag si può prendere uno dei suoi nodi con il metodo
getNode
>>> andrew_node = mybag.getNode('andrew') >>> andrew_node BagNode : andrew at 4526314960 >>> mybag.nodes[0] == andrew_node True
label: E” la key che fa da indirizzo al BagNode nella Bag che lo contiene.
>>> andrew_node.label 'andrew' >>> mybag.keys() ['andrew', 'paul']
value: E” il valore che leggiamo/scriviamo quando accediamo alla Bag con la sintassi a parentisi quadre o con i metodi getItem setItem
>>> andrew_node.getValue() 1 >>> mybag.getItem('andrew') 1 >>> mybag['andrew'] 1
attributes: E” un dizionario nel quale possono essere inseriti dati integrativi riferiti al value al nodo stesso.
>>> andrew_node.attr {} >>> andrew_node.attr['birthday']='02/04/1978' >>> andrew_node.attr['birthday'] '02/04/1978'
Ma in genere gli attributi vengono inseriti con il nodo stesso utilizzando il metodo
setItem
oppuresetAttr
e letti congetAttr
>>> mybag.setItem('charles', 3, {'birthday':'05/12/1965'}) >>> mybag.getAttr('charles','birthday') '05/12/1965' >>> mybag.setAttr('paul', birtday='08/14/1989') >>> mybag.getAttr('paul','birthday') '08/14/1989' >>> mybag.setAttr('andrew', height=180, weight=82) >>> mybag.getAttr('andrew') {'birthday': '02/04/1978', 'weight': 82, 'height': 180} >>> andrew_node.attr {'birthday': '02/04/1978', 'weight': 82, 'height': 180}
Si chiamano attributes perché nella trasposizione XML della bag vengono rappresentati esattamente come attributi.
path: Quando il value di un BagNode è a sua volta una Bag, ci troviamo di fronte ad una Bag gerarchica e per path si intende un indirizzo costituito dalle label di tutti i nodes che devono essere attraversati per raggiungere un dato valore.
>>> mybag.setItem('andrew.children.michael', None, birthday='09/07/2004', weigth='30', height='130')
Autore della sezione: Giovanni Porcari