2009/5/4 Gian Paolo <gianpaolo.pall...@gmail.com>: > concordo anche io sul problema dell'ereditarietà ma non credi che possano > essere utili per la semplice attribuzione del "name" (escluso > dall'ereditarietà) evitando di inserire altri attributi? non dico di non > dare un nome agli "spezzoni" ma ripeterlo in una relazione mi sembra utile.
Secondo me le relazioni sono una "bomba atomica" da usare con cautela. Una relazione IMHO deve essere una entità a sé stante rispetto alle way/punti che contiene: non deve essere "un pezzo" di qualcosa altro. Cerco di spiegarmi: tutte le informazioni di un ente devono essere contenute nell'ente stesso, non in altri enti che si riferiscono ad esso. L'esempio delle relazioni di tipo route secondo me è chiaro: una route, che è una collezione di way, ha un nome: ma questo è il nome della route, non delle singole way di cui la route è composta. Se voglio sapere qualcosa su una way mi limito a controllare la way stessa; diverso è il discorso se voglio sapere le proprietà della route: in quel caso controllo la relazione. Finché sembra abbastanza innocua la ereditarietà delle proprietà da una relazione agli enti che essa contiene, la sua pericolosità diventa più chiara quando ti poni il problema inverso: dato un ente, quali sono le sue proprietà? In questo caso devi individuare tutte le relazioni di cui l'ente fa parte e controllare le loro proprietà. Se poi è permessa l'ereditarietà "a cascata" da A a B a C il discorso diventa ancora più complesso: dato l'ente C dapprima devi individuare tutte le relazioni B in cui è contenuto, e poi le relazioni A che contengono le relazioni B, ecc. Questo può diventare devastante ad esempio se l'oggetto C è contenuto nella relazione B che è contenuta nella relazione A che è a sua volta contenuta nella relazione B !! Questo esempio di contenimento circolare è pericolosissimo perché: a. non è possibile evitarlo con le API attuali: ciò nei linguaggi di programmazione è vietato con un sistema di tipi che regolamenta la stratificazione degli oggetti, ma in OSM tutte le relazioni sono dello stesso tipo b. a questo punto tutti i programmi che maneggiano oggetti OSM devono essere dotati di algoritmi per l'individuazione dei cicli: bisogna implementare l'algoritmo in Mapnik, Osmarender, josm, potlatch, tutti i router e i convertitori di dati OSM in altri formati. Insomma, visto che tanto bisognerebbe migliorare gli editor per gestire queste relazioni "fine di mondo", non è più semplice migliorare gli editor in modo che sia più semplice taggare gli oggetti di base? Un qualcosa tipo il comando "R" di Potlatch ma potenziato. Ciao _______________________________________________ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it