Avui dia ja tenim diverses formes de representar les bases de dades de nodes de les xarxes lliures, des de simples taules html amb llistats de nodes, a aplicacions més sofisticades (guifi.net n'és un exemple, però també tenim el nodedb, la base de dades que s'hagi definit cadascú... etc).
La idea és fer un format d'intercanvi estandaritzat amb aquells factors comuns d'aquesta informació per així poder sincronitzar servidors diferents, que eventualment poden fins i tot fer servir models de dades diferents (típicament en funció de cada aplicació). D'aquesta manera es pretèn aconseguir que inpendentment de l'aplicació que ho gestioni, es pugui bescanviar i consolidar la informació de diferents aplicacions i servidors.
Beneficis:
(*) La definició final del DTD la podeu veure anant a cada zona i clicant a l'enllaç "nodeXchange". Per exemple cliqueu aqui.
Una primera aproximació podria ser un DTD com aquest:
<network nodes="<num>">
<network_id></network_id>
<network_name></network_name>
<network_url></network_url>
<network_base_url>[common prefix for url if they are not complete]</network_base_url>
<zone child_zones="<num>" zone_nodes="<num>" total_nodes="<num>">
<zone_id></zone_id>
<zone_title></zone_title>
<zone_parent_id></zone_parent_id>
<zone_description></zone_description>
<zone_url></zone_url>
<zone_map_url></zone_map_url>
<node devices="<num>">
<node_id></node_id>
<node_title></node_title>
<node_type> [backbone|AP|Client] </node_title>
<node_description></node_description>
<node_lat></node_lat>
<node_lon></node_lon>
<node_status></node_status>
<node_url></node_url>
<node_created>YY/MM/DD HH:MI</node_created>
<node_updated>YY/MM/DD HH:MI</node_updated>
<device interfaces="<num>" links="<num>" services="<num>">
<device_id></device_id>
<device_title></device_title>
<device_type> [LinuxAP|Linksys WRT54GL| (...)] </device_type>
<device_ssid></device_ssid>
<device_mode></device_mode>
<device_status></device_status>
<device_url></device_url>
<device_description></device_description>
<device_created>YY/MM/DD HH:MI</device_created>
<device_updated>YY/MM/DD HH:MI</device_updated>
<interface>
<interface_type> [ethernet|wLAN] </interface_type>
<ip_address> [ip address|dhcp] </ip_address>
<ip_netmask></ip_netmask>
</interface>
(...)
<link>
<linked_network> [empty = current network]</linked_network>
<linked_device_id></linked_device_id>
</link>
(...)
<service>
<service_id></service_id>
<service_type> [DNS|email|NTP|Proxy|(...)</service_type>
<service_url></service_url>
</service>
(...)
<graphs>
<graph>
<graph_type> [latency|bandwidth|(...)]</graph_type>
<graph_url></graph_url>
</graph>
(...)
</graphs>
(...>
</device>
(...)
</node>
(...)
</zone>
(...)
</network>
(...)
Explicació:
De moment el batejo com a "SNDX" (Simple Node Database eXchange)... fins que s'ens acudeixi un nom millor ;)
En aquest DTD hi estic posant tota aquella informació "imprescindible" per aconseguir el nivell funcional equivalent al de guifi.net i pensant en un intercanvi de dades, entenent però que tots els tags són opcionals (és a dir, no cal informar de tot el DTD si hi ha informació que no existeix en determinades aplicacions), també pot ser que hi observeu que hi falta informació que seria necessària per a altres aplicacions... o sigui que "comments welcome", i l'anem editant, s'inicia a partir d'una primera impressió més o menys ràpida i convé de reflexionar-hi.
Llavors cadascú posa les condicions que vulgui alhora de permetre fer sindicació o no. Per exemple, en el cas de guifi.net, jo només ho deixaria sindicar amb aquelles organitzacions que s'acullin al Comuns Sensefils, o en el cas d'altres, amb autorització expressa (per evitar que algú en faci un ús indegut).
Comentaris
Jo ho simplificaria
Només hi deixaria això:
- Comunitat: (nom, url )
- Zones: (nom, url, xarxes )
- Nodes: (nom, url, coord, stat )
No crec que a altres comunitats els hi interessi saber quins aparells hi ha a cada node. Ni quines ip's tenen aquests.
La idea, és que algun servidor per sobre pugui tenir controlades les xarxes utilitzades (consistència), i el nombre i localització dels nodes que hi ha.
Salut !
ui, tot just ho estava explicant...
Efectivament no hauria de ser obligatori suportar-ho tot, i un primer intercanvi es pot fer simplement a nivell de zona/node, i potser encara no tot.
Si però que està bé tenir-ne una visió de DTD extensiva, de forma que si s'implementa al 100% puguin coexistir servidors amb el 100% de la funcionalitat.
SAX
potser seria una bona idea parlar-ne al SAX de tot això oi?
si... al sax
... i potser també ho hauriem de comentar a freenetworks, wsfii, etc...
em queda el dubte de saber si algu ja ha fet o implementat algun DTD similar
phpwirelessmap
Jo vai fer el format del rss de phpwirelessmap. El tema era crear un format compatible amb RSS i simplement usar extencions per complementar la resta. El fet de usar RSS permet que usuaris es puguin subcriure i que les aplicacions també puguin treure tot el profit.
Estic d'acord que els namespaces usats en el rss de phpwirelessmap son el propi nom de la aplicacació. I crec que es podria canviar. Pero el fet de integrar-ho en un rss ho vai trobar una bona idea.
Si voleu crear un format (jo l'implementare a phpwirelesmap) pero el format ha de usar els estandars ja existents tal com ho vai fer jo amb el RSS. el format de lon i lat son estandars i esta en el principi del rss el dtd corresponent. Per altre banda es molt important desde el meu punt de vista exportar els enllaços fins hi tot entre xarxes. Cosa que el format del rss de phpwirelessmap també suporta.
M'agradiaria col·lavorar en la elaboració del format ja que l'objectiu de fer el RSS per phpwirelessmap era poder integrar xarxes. D'aki afegir la lat i lon.
proposta meva
La meva proposta es usar aquest format: http://wifisj.no-ip.org/nodes.xml
pero mofificant el espai de noms phpwirelessmap per wirelessmap i afegir més informació si la necesiteu i la podeu tenir disponible.
molt interessant tot això
molt interessant tot això que has fet del rss pel phpwirelessmap, i a més ho ha fet un català :D
que hi posem phpwirelesmap o sense el php és igual, com si hi posem botifarres_amb_seques la qüestió és el contingut associat
veient ara la capçalera del rss que és version="2.0" es podria fer un sistema de versionat semblant però que amb un només s'exportin els nodes i la posició, un altre amb els enllaços entre ells, un altre amb a més a més els serveis, o diferents rss, un per serveis, un per nodes, un per zones .... tot i que s'interralacionarien es podrien agafar per separat i .... seria útil que tots els rss petits (nodes, zones, serveis ... ) s'englobessin en un rss?
idees que surten mentres escric
per altre banda, senyor plue ( :P ) potser t'interessaria saber que de cara al febrer tenim pensat fer el SAX2006 seria interessant que si hi discutim tot això i siguis tu també ;)
l'rss el podem extendre?
Perdoneu la meva ignorància, pero l'RSS sempre l'havia ubicat per a sindicació de notícies/blogs, etc...
De fet no sé no ni on és el dtd del RSS, he buscat una mica i em surt molta (massa) cosa. Sabeu d'una bona url on s'hi fa descripció?
Tot i que el concepte és similar, jo pensava més en desenvolupat un DTD comú per a la sindicació, peró també la descripció de xarxes i els seus continguts, per a les notícies el RSS ja ho fa molt bé, pero per a aquesta part entenia que caldira extendre el DTD, a l'estil p.ex. del que en el seu dia es va fer amb l'xmltv.
En qualsevol cas el concepte és molt similar, i seria bó fer-ho amb el màxim de similituds als estàndars als quals la gent ja hi està acostumat...
Més o menys el plantejament del dtd és aqui. Qui vulgui suggerir canvis concrets... També podem seguir el fil de les discusions a la llista de desenvolupament (guifi-rd_a_guifi.net). Jo tan aviat com pugui m'agradaria fer una implementació del feed de la bd de guifi.net, i a veure si amb això en Carles pot desenvolupar el seu MediaWiki amb tranquilitat de que està sempre al dia ;)
P.D.: Si l'RSS no es pogués extendre, tampoc ha de ser excloent una cosa amb l'altre. Mentre es pugui combinar una cosa amb l'altre... ;)
això es pel phpwirelessmap no?
tinc la impressió de que estas pensant només amb els atributs/model de dades del phpwirelessmap. això està bé sobretot pel phpwirelessmap.
fixa't que el que més ens convé per sindicar servidors entre ells és a dir:
no sé, m'ho haig de mirar... al final es tracta d'implementar un format d'intercanvi de descripció de xarxes i continguts... la sintaxi del RSS no deixa de ser força rebuscada per a aquesta funció (tot i que bona per a sindicació en plan "news"). com més m'ho rumio, més m'ho sembla: complementari però diferent
si si, només he fet lectures ràpides i en diagonal...
Jo encara no he provat res. M'havia agoitat l'exemple abans d'anar a pendre vistes pel supernode de St. Julià. M'ho miraré amb + calma d'aqui uns dies si puc, quan trobi temps per fer exportacions del que hi ha aqui. Bona idea fer servir les categories per les zones.
Molt bon exmeple el d'exportació al googlemaps ;)
THX! :)
OK, 1a. versio de proves
He fet ja una versió de proves. De moment agafo el DTD simple/original, per RSS es liava bastant i la prioritat és fer l'intercanvi de entre servidors. Com bé dius, un cop en XML ja es podrà convertir al que es vulgui ;)
A la web de proves ja surt una pestanya "nodeXchange" en les zones, si es clica genera l'XML (view source per veure'l en el navegador pot veures coses extranyes). p.e. per la zona d'Osona:
Per veure el source (provisional)
Tot provisional, cal fer retocs al DTD, avui ja és tard :)
no n'estic segur...
ei plue,
he començat per fer una cosa que jo mateix entengui :) i per prioritats, que ara més que l'rss genèric és l'intercanvi de servidors amb el que fa en Carles i entre iguals.
el que si sé és que ja conté l'estructura per obtenir les dades amb jerarquia, i surten poques linies (unes 200)... de manera que si es té clar com hauria de sortir per l'rss o altres coses, no hauria de ser gaire difícil afegir-lo o convertir.lo ;)
p.d.: si vols contribuir en el desenvolupament, benvingut i tu mateix! el codi és en subversion, i la llista de correu de desenvolupament, guifi-rd_arroba_guifi.net (guifi-rd-subscribe per apuntar-s'hi). potser és més còmode que a base de comentaris aqui.
versió de proves "potable"
Crec que ara ja surt una versió que més o menys es pot donar per mig bona:
és 100% XML, el que no és es RSS
A veure: Es 100%, XML, el php el parseja i valida bé, etc etc. Que no sigui RSS no vol dir que no sigui XML. Hi han altres dtd xml: p.ex. el XMLTV, on hi vaig estar de developer durant un temps fa uns anys i no s'hem ha pas acudit ficar-lo allà fins (per posar-te un exemple que no tindria sentit).
Segueixo els exemples de manual de php i xml. La idea és parsejart simplement això, deixar-ho en variables d'un array i posar-se a fer inserts/updates del que trobi en un foreach: Simple.
Evidentment pots ficar això dins d'altres formats o "embedded" an altres estructures XML. Jo no hi estic familiaritzat en aquestes altres, ni ho trovo mala idea, però tampoc és la meva prioritat immediata ni el temps em sobra per fer coses que a curt no aplicaria quan n'hi han d'altres que si que s'han de fer. Prioritats de cadascú.
Com t'he dit, ni ho trovo malament, ni mala idea, si ho vols fer tens el subversion amb el codi que descriu les dades amb jerarquia, i una llista de desenvolupament on plantejar aquestes questions. Tú mateix.
comentaris
ah, els comptadors son més aviat comentaris, potser faria menys mal d'ulls en format:
La resta ja es més un tema estètic de noms de tags no? els de l'exemple que acabes de posar no son els de nodedb?
No tinc clar com s'han de deixar, com més "human readable", millor, tot i que estaria bé que en coincidissin els possibles.
Veig també que faltaria afegir-ne alguns, alçada, antena... altres però haurien d'anar forçosament diferent, o aplicar-hi estructures noves per les zones o altra informació que no s'hi representa... En tot cas pot ser molt simple escollir el nom del tag en funció del format d'exportació fins i tot des de la mateixa rutina.
També veig això de les dates, és bona idea posar-hi el fus horari.
compatdors com a comentaris
he posat els comptadors com a comentaris... tot i que ara m'ha quedat un dubte... la funció era validar de forma fàcil, i si ara el parsejador no ho carrega... em penso que tururut.
no està pas fet el parsejador...
Si hi fos ja seria al SVN. L'has vist potser?
Jo no n'he fet mai cap amb php encara.
Potser si hi tens ja molta pràctica ens voldràs obsequiar amb un que ens faràs tu i així m'estalvio d'estrenar-me? Ja saps on és l'SVN. :P
Sobre si és expandible o no... no coments. L'XML és sempre expandible per definició.
Mira, com sempre i tothom es va de cul fent coses, i t'ho he dit com a minim un parell de cops en altres comentaris, si de veritat hi vols contribuir, i seras bevningut: El lloc adequat és la llista de desenvolupament, l'svn i, per damunt de tot, proporcionant codi i pegats. Els comentaris també estan bé, però fins a un cert punt. Per dir-me que en saps molt, que n'haig d'apendre, i comentaris sobre l'estètica això no aporta gaire res. No sé si m'explico.
Ara m'agafaré un parell de dies de descans }:)
P.D.: També seria genial que facis exports per als formats de nodedb i RSS, o scripts/conversions pel googlemaps ;)
thx, primeres impressions...
Interessant :)
La idea però és la mateixa però amb un DTD format "universal", precisament per independitzar-ho de les aplicacions, tot i que evidentment, com més s'acosti als existents, millor (coincidint el nom dels elements/atributs, etc...), per així facilitar la programació (bidireccional i multi-zona). Això també podria aplicar al format rss.
Així a primer cop d'ull, algun dubte que tinc:
P.D.: AMb el plugin pel phpwirelessmap poses en pràctica una cosa que en el seu dia comentàvem quan ens preguntaen que perquè no feiem servir el nodedb en lloc del phpwirelessmap: Que abans que cosa nostra, si l'administrador volia pujar-los, ho tenia ben fàcil si es currava la càrrega. És un bon exemple del que es busca, que sigui l'aplicació que sigui, les dades es puguin intercanviar, ja sigui amb aquests, o els que es vulguin.