Originariamente inviato da }gu|do[z]{®©
e al momento la stringa corrispondente è fatta così
I1.I2->D2; I1.I3.I4->D4; I1.I3.I5->D5;
In questo modo con qualche manipolazione lato client (PHP) resco a dare l'idea del "percorso" utilizzato per arrivare al dato... però ecco.. non mi convince molto e prima di impelagarmi in manipolazioni pesanti lato client per visualizzare i dati in modo comprensibile vorrei sapere da voi se avete qualche idea migliore su come costruirmi e trasmettere questa strutura dati per una più facile manipolazione lato client.
Un "albero" (n-ario, cioè con nodi con un numero arbitrario di figli) è semplicemente una struttura dati in cui, visto al livello più piccolo, c'è un nodo e una lista di suoi nodi "figli".
Quindi basterebbe trovare una sintassi che permetta di indicare, sempre al livello più piccolo, il nome del nodo e marcare l'inizio e poi la fine della lista dei figli.
Un esempio potrebbe essere:
codice:
I1{I2{D2},I3{I4{D4},I5{D5}}}
In pratica ID poi { ...lista dei nodi "figli" separati da virgola... }
E chiaramente puoi fare tutte le "varianti" che vuoi a livello di sintassi (cambiare separatore, deliminatori dei figli, ecc....)
Altra possibilità .... beh, ovviamente XML! Che è fatto apposta per rappresentare dati strutturati ad albero.
codice:
<?xml version="1.0"?>
<id name="I1">
<id name="I2">
<id name="D2"/>
</id>
<id name="I3">
<id name="I4">
<id name="D4"/>
</id>
<id name="I5">
<id name="D5"/>
</id>
</id>
</id>
Anche qui si possono fare tutte le varianti che vuoi. Io l'ho indentato e messo su più righe ... non sarebbe obbligatorio. E se il nome di ogni ID rispetta le regole sui nomi dei tag XML si potrebbe anche mettere come nomi dei tag direttamente i nomi dei tuoi ID. Io li ho messi come valori di un attributo 'name' per farlo a livello generale.
Quale scegliere? Nel primo caso la sintassi la "inventi" tu e quindi devi scrivere del codice per "parsare" le informazioni. Nel secondo caso si dovrebbe usare un parser XML (con approccio SAX o DOM).