Languages

User login


SNDX: Fent un XML-DTD per a l'intercanvi de bases de dades de xarxes sense fils entre servidors


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:

  1. Possibilitat de crear una base de dades global i consolidada entre servidors, xarxes i/o grups locals
  2. En el cas de que es faci servir una mateixa xarxa o grup, encara que hi hagi diferents servidors distriguits per la geografia gestionant àrees o zones, podent intercanviar-se informació entre ells i sincronitzar-se.
  3. Sense trencar la globalitat de la base de dades, que aplicacions diferents puguin coexistir i evolucionar de forma independent

(*) 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ó:

  • Els (...) representen que l'element es pot repetir "n" vegades.
  • Les diferents opcions van entre "[]" i separades per un "|".
  • Quan no hi surt res, s'entèn que elnom del tag ja és autodescriptiu.

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

Opcions de visualització de comentaris

Selecciona la vostra manera preferida de visualitzar els comentaris i feu clic en "Desa la configuració" per activar els canvis.

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:

  • Que es puguin intercanviar nodes dins d'una jerarquia de zones o xarxes (networks), identificant quin es el servidor que la gestiona
  • Identificar totes les dades genèriques que es necessiten, el phpwirelessmap n'és un subconjunt (mira les etiquetes que s'han definit). potser distingir les que són genériques. p.ex. crec que atributs com el pixel del mapa seria més apropiat que sigui "phpwirelessmap" que no pas anomenar-lo com a "network"...son atributs que no son relevants per a altres aplicacions

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:

  • Posa el header cortrectament per no liar al navegador
  • Funciona amb la web de proves (proves.guifi.net)
  • Es parseja bé amb php la sortida
  • Es dona detalls del node (a nivell de trasto, enllaços, connectors i serveis) afegint la opció ?detail al final de la url

é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:

<!-- services="<num>" --> 

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 :)

  • El DTD de nodedb ara recordo que en el seu dia en varem parlar. El problema que llavors vam tenir és la obligació de ser administrador de zona (cosa que en l'abast de guifi.net no teniem). Crec que només era d'importació i reservat per als admins.
  • El de personalteco, si no m'he perdut res, més que un dtd hi veig el seu propi model de dades i un xmlrpc per interactuar-hi.

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:

  • Amb aquests formats, com es posa un element superior, agrupant nodes, per a la zona (podria ser el "node source"?). No li veig clar el suport multizona.
  • El RSS pot estar bé per interactuar amb altres tipus de gestors, com p.ex. els "bloggers"/de news. Més universal. Proporcionaria p.ex. fàcilment un "darrers nodes afegits" i coses així. Extenent-lo fins a crear un format real d'intercanvi de dades no seria ja tibar massa la corda resultant una cosa que en realitat no s'hi assembla ja en res o ben poca cosa?

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.