[Nodedb-interop] Let's start

Ramon Roca (spam-protected)
Mon Nov 30 22:59:09 CET 2009


Hi Mitar, thanks for your enthusiasm ;)

You can check our data in XML (we call it CNML as for Communities 
Network Markup Language) using the "CNML" link provided at the bottom 
page on each zone at our network. As en example, for a zone of about 
1,400 nodes:

    * http://guifi.net/en/planavic

At the bottom, the CNML link drives you to:

    * http://guifi.net/en/guifi/cnml/8349

 From there you can export all the information at several levels of depth.

We're now just delivering the XML. By looking into this you'll see very 
much which objects are decribed and with which attributes. To help 
documenting it, we can use some tools looking at a valid XML code like:

    * http://www.hitsw.com/xml_utilities/

With that, you can currently get the XML schema and DTD provided below 
at this email.

By looking into this you will see that there is an object hierarchy 
which migh be very much generalistic, basically and as a summary.

    * network
          o zones
                + child zones (up to n)
                      # locations
                            * devices
                                  o radios
                                        + interfaces
                                              # links

By looking into the schema you provided, I do see there that you are 
very much describing a location, a device and a radio (all at the same 
object). To split between objects might be usefull for allowing a much 
more flexible description (a location might have several devices, a 
device might have several radios, an interface might be from several 
types, etc...).

So you'll realize that the schema you provided, can be easily 
transformed to an XML like the one I'm providing, and therefore exported 
in a common format, regardless of how you do store it. Maybe we just 
have to adapt some tags/formats or add some attributes to be able to 
describe all cases.

Once all of us do export all the data in a common and understandable 
format regardless of the technology or application used, will be very 
much easier to reuse components and logic.

Let us know once you have the wiki ;)


CNML generated DTD:
--------------------------------------------------------------

<!ELEMENT class EMPTY>
<!ATTLIST class mapping NMTOKEN #REQUIRED>
<!ATTLIST class network_description NMTOKEN #REQUIRED>

<!ELEMENT cnml ( class, network )>
<!ATTLIST cnml generated CDATA #REQUIRED>
<!ATTLIST cnml server_id NMTOKEN #REQUIRED>
<!ATTLIST cnml server_url CDATA #REQUIRED>
<!ATTLIST cnml version NMTOKEN #REQUIRED>

<!ELEMENT device ( #PCDATA | interface | radio | service )*>
<!ATTLIST device created CDATA #REQUIRED>
<!ATTLIST device firmware CDATA #IMPLIED>
<!ATTLIST device graph_server NMTOKEN #IMPLIED>
<!ATTLIST device id NMTOKEN #REQUIRED>
<!ATTLIST device name CDATA #IMPLIED>
<!ATTLIST device snmp_index ( 2 | 3 | 4 | 5 | 9 | v ) #IMPLIED>
<!ATTLIST device status ( Building | Dropped | Planned | Reserved | Testing | Working ) #REQUIRED>
<!ATTLIST device title ID #REQUIRED>
<!ATTLIST device type ( ADSL | cam | generic | nat | phone | radio | server ) #REQUIRED>
<!ATTLIST device updated CDATA #IMPLIED>

<!ELEMENT interface ( link* )>
<!ATTLIST interface id NMTOKEN #REQUIRED>
<!ATTLIST interface ipv4 NMTOKEN #IMPLIED>
<!ATTLIST interface mac NMTOKEN #IMPLIED>
<!ATTLIST interface mask ( 255.255.255.0 | 255.255.255.192 | 255.255.255.224 | 255.255.255.240 | 255.255.255.248 | 255.255.255.252 ) #REQUIRED>
<!ATTLIST interface type CDATA #REQUIRED>

<!ELEMENT link EMPTY>
<!ATTLIST link id NMTOKEN #REQUIRED>
<!ATTLIST link link_status ( Building | Planned | Reserved | Testing | Working ) #REQUIRED>
<!ATTLIST link link_type CDATA #REQUIRED>
<!ATTLIST link linked_device_id NMTOKEN #REQUIRED>
<!ATTLIST link linked_interface_id NMTOKEN #REQUIRED>
<!ATTLIST link linked_node_id NMTOKEN #REQUIRED>

<!ELEMENT network ( zone )>
<!ATTLIST network ap NMTOKEN #REQUIRED>
<!ATTLIST network client NMTOKEN #REQUIRED>
<!ATTLIST network devices NMTOKEN #REQUIRED>
<!ATTLIST network links NMTOKEN #REQUIRED>
<!ATTLIST network nodes NMTOKEN #REQUIRED>
<!ATTLIST network services NMTOKEN #REQUIRED>

<!ELEMENT node ( #PCDATA | device )*>
<!ATTLIST node access_points NMTOKEN #IMPLIED>
<!ATTLIST node antenna_elevation NMTOKEN #IMPLIED>
<!ATTLIST node clients ( 1 | 2 | 3 | 4 ) #IMPLIED>
<!ATTLIST node created CDATA #REQUIRED>
<!ATTLIST node devices ( 1 | 10 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ) #IMPLIED>
<!ATTLIST node graph_server ( 11747 | 15618 | 6558 | 6572 | 6673 | 6833 | 6836 | 8444 ) #IMPLIED>
<!ATTLIST node id NMTOKEN #REQUIRED>
<!ATTLIST node lat NMTOKEN #REQUIRED>
<!ATTLIST node links NMTOKEN #IMPLIED>
<!ATTLIST node lon NMTOKEN #REQUIRED>
<!ATTLIST node services NMTOKEN #IMPLIED>
<!ATTLIST node status ( Building | Planned | Reserved | Testing | Working ) #REQUIRED>
<!ATTLIST node title ID #REQUIRED>
<!ATTLIST node updated CDATA #IMPLIED>

<!ELEMENT radio ( interface* )>
<!ATTLIST radio antenna_angle ( 120 | 30 | 360 | 6 | 60 | 90 ) #IMPLIED>
<!ATTLIST radio antenna_azimuth NMTOKEN #IMPLIED>
<!ATTLIST radio antenna_gain ( 12 | 14 | 18 | 2 | 21 | 24 | 8 ) #IMPLIED>
<!ATTLIST radio channel NMTOKEN #IMPLIED>
<!ATTLIST radio device_id NMTOKEN #REQUIRED>
<!ATTLIST radio id NMTOKEN #REQUIRED>
<!ATTLIST radio mode ( ap | client ) #REQUIRED>
<!ATTLIST radio protocol ( 802.11a | 802.11b | 802.11g | legacy ) #IMPLIED>
<!ATTLIST radio snmp_index ( 6 ) #IMPLIED>
<!ATTLIST radio snmp_name ( wifi0 | wlan1 | wlan2 | wlan3 | wlan4 | wlan5 | wlan6 | wlan7 | wlan8 ) #IMPLIED>
<!ATTLIST radio ssid NMTOKEN #IMPLIED>

<!ELEMENT service EMPTY>
<!ATTLIST service created CDATA #REQUIRED>
<!ATTLIST service id NMTOKEN #REQUIRED>
<!ATTLIST service status ( Building | Planned | Testing | Working ) #REQUIRED>
<!ATTLIST service title ID #REQUIRED>
<!ATTLIST service type NMTOKEN #REQUIRED>
<!ATTLIST service updated CDATA #IMPLIED>

<!ELEMENT zone ( #PCDATA | node | zone )*>
<!ATTLIST zone access_points NMTOKEN #REQUIRED>
<!ATTLIST zone box CDATA #REQUIRED>
<!ATTLIST zone clients NMTOKEN #REQUIRED>
<!ATTLIST zone created CDATA #REQUIRED>
<!ATTLIST zone devices NMTOKEN #IMPLIED>
<!ATTLIST zone dns_servers CDATA #IMPLIED>
<!ATTLIST zone graph_server NMTOKEN #IMPLIED>
<!ATTLIST zone id NMTOKEN #REQUIRED>
<!ATTLIST zone links NMTOKEN #REQUIRED>
<!ATTLIST zone ntp_servers CDATA #IMPLIED>
<!ATTLIST zone parent_id ( 15231 | 2444 | 8349 ) #REQUIRED>
<!ATTLIST zone services NMTOKEN #IMPLIED>
<!ATTLIST zone time_zone CDATA #FIXED "+01 2 2">
<!ATTLIST zone title CDATA #REQUIRED>
<!ATTLIST zone updated CDATA #REQUIRED>
<!ATTLIST zone zone_nodes NMTOKEN #REQUIRED>



CNML generated schema:
--------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="class">
     <xs:complexType>
       <xs:attribute name="network_description" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="mapping" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="cnml">
     <xs:complexType>
       <xs:sequence>
         <xs:element ref="class" />
         <xs:element ref="network" />
       </xs:sequence>
       <xs:attribute name="version" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="generated" type="xs:string" use="required" />
       <xs:attribute name="server_url" type="xs:string" use="required" />
       <xs:attribute name="server_id" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="device">
     <xs:complexType mixed="true">
       <xs:choice>
         <xs:element ref="interface" />
         <xs:element ref="radio" />
         <xs:element ref="service" />
       </xs:choice>
       <xs:attribute name="firmware" type="xs:string" use="optional" />
       <xs:attribute name="name" type="xs:string" use="optional" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="created" type="xs:string" use="required" />
       <xs:attribute name="status" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="Building" />
             <xs:enumeration value="Dropped" />
             <xs:enumeration value="Planned" />
             <xs:enumeration value="Reserved" />
             <xs:enumeration value="Testing" />
             <xs:enumeration value="Working" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="updated" type="xs:string" use="optional" />
       <xs:attribute name="snmp_index" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="2" />
             <xs:enumeration value="3" />
             <xs:enumeration value="4" />
             <xs:enumeration value="5" />
             <xs:enumeration value="9" />
             <xs:enumeration value="v" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="type" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="ADSL" />
             <xs:enumeration value="cam" />
             <xs:enumeration value="generic" />
             <xs:enumeration value="nat" />
             <xs:enumeration value="phone" />
             <xs:enumeration value="radio" />
             <xs:enumeration value="server" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="graph_server" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="title" type="xs:ID" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="interface">
     <xs:complexType>
       <xs:sequence>
         <xs:element ref="link" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
       <xs:attribute name="mask" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="255.255.255.0" />
             <xs:enumeration value="255.255.255.192" />
             <xs:enumeration value="255.255.255.224" />
             <xs:enumeration value="255.255.255.240" />
             <xs:enumeration value="255.255.255.248" />
             <xs:enumeration value="255.255.255.252" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="ipv4" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="type" type="xs:string" use="required" />
       <xs:attribute name="mac" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="link">
     <xs:complexType>
       <xs:attribute name="linked_device_id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="link_status" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="Building" />
             <xs:enumeration value="Planned" />
             <xs:enumeration value="Reserved" />
             <xs:enumeration value="Testing" />
             <xs:enumeration value="Working" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="linked_interface_id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="link_type" type="xs:string" use="required" />
       <xs:attribute name="linked_node_id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="network">
     <xs:complexType>
       <xs:sequence>
         <xs:element ref="zone" />
       </xs:sequence>
       <xs:attribute name="client" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="nodes" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="links" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="devices" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="services" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="ap" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="node">
     <xs:complexType mixed="true">
       <xs:choice>
         <xs:element ref="device" />
       </xs:choice>
       <xs:attribute name="lon" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="antenna_elevation" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="created" type="xs:string" use="required" />
       <xs:attribute name="status" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="Building" />
             <xs:enumeration value="Planned" />
             <xs:enumeration value="Reserved" />
             <xs:enumeration value="Testing" />
             <xs:enumeration value="Working" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="updated" type="xs:string" use="optional" />
       <xs:attribute name="access_points" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="lat" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="graph_server" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="11747" />
             <xs:enumeration value="15618" />
             <xs:enumeration value="6558" />
             <xs:enumeration value="6572" />
             <xs:enumeration value="6673" />
             <xs:enumeration value="6833" />
             <xs:enumeration value="6836" />
             <xs:enumeration value="8444" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="title" type="xs:ID" use="required" />
       <xs:attribute name="services" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="links" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="devices" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="1" />
             <xs:enumeration value="10" />
             <xs:enumeration value="2" />
             <xs:enumeration value="3" />
             <xs:enumeration value="4" />
             <xs:enumeration value="5" />
             <xs:enumeration value="6" />
             <xs:enumeration value="7" />
             <xs:enumeration value="8" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="clients" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="1" />
             <xs:enumeration value="2" />
             <xs:enumeration value="3" />
             <xs:enumeration value="4" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
     </xs:complexType>
   </xs:element>

   <xs:element name="radio">
     <xs:complexType>
       <xs:sequence>
         <xs:element ref="interface" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
       <xs:attribute name="antenna_azimuth" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="ssid" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="device_id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="snmp_name" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="wifi0" />
             <xs:enumeration value="wlan1" />
             <xs:enumeration value="wlan2" />
             <xs:enumeration value="wlan3" />
             <xs:enumeration value="wlan4" />
             <xs:enumeration value="wlan5" />
             <xs:enumeration value="wlan6" />
             <xs:enumeration value="wlan7" />
             <xs:enumeration value="wlan8" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="antenna_angle" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="120" />
             <xs:enumeration value="30" />
             <xs:enumeration value="360" />
             <xs:enumeration value="6" />
             <xs:enumeration value="60" />
             <xs:enumeration value="90" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="mode" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="ap" />
             <xs:enumeration value="client" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="snmp_index" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="6" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="channel" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="antenna_gain" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="12" />
             <xs:enumeration value="14" />
             <xs:enumeration value="18" />
             <xs:enumeration value="2" />
             <xs:enumeration value="21" />
             <xs:enumeration value="24" />
             <xs:enumeration value="8" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="protocol" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="802.11a" />
             <xs:enumeration value="802.11b" />
             <xs:enumeration value="802.11g" />
             <xs:enumeration value="legacy" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
     </xs:complexType>
   </xs:element>

   <xs:element name="service">
     <xs:complexType>
       <xs:attribute name="updated" type="xs:string" use="optional" />
       <xs:attribute name="status" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="Building" />
             <xs:enumeration value="Planned" />
             <xs:enumeration value="Testing" />
             <xs:enumeration value="Working" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="type" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="title" type="xs:ID" use="required" />
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="created" type="xs:string" use="required" />
     </xs:complexType>
   </xs:element>

   <xs:element name="zone">
     <xs:complexType mixed="true">
       <xs:choice>
         <xs:element ref="node" />
         <xs:element ref="zone" />
       </xs:choice>
       <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="zone_nodes" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="ntp_servers" type="xs:string" use="optional" />
       <xs:attribute name="created" type="xs:string" use="required" />
       <xs:attribute name="updated" type="xs:string" use="required" />
       <xs:attribute name="box" type="xs:string" use="required" />
       <xs:attribute name="access_points" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="parent_id" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="15231" />
             <xs:enumeration value="2444" />
             <xs:enumeration value="8349" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="dns_servers" type="xs:string" use="optional" />
       <xs:attribute name="graph_server" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="title" type="xs:string" use="required" />
       <xs:attribute name="services" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="links" type="xs:NMTOKEN" use="required" />
       <xs:attribute name="devices" type="xs:NMTOKEN" use="optional" />
       <xs:attribute name="time_zone" type="xs:string" use="required" fixed="+01 2 2" />
       <xs:attribute name="clients" type="xs:NMTOKEN" use="required" />
     </xs:complexType>
   </xs:element>

</xs:schema>





Al 30/11/09 20:46, En/na Mitar ha escrit:
> Hi!
>
> We have prepared documentation for our schema. It is available here:
>
> http://wlan-lj.net/wiki/Podrobnosti/NodeWatcher/Schema
>
> I think the important thing is to define globally unique IDs for all
> nodes in all systems which would not change during a lifetime of a node.
> We are using UUIDs to achieve this.
>
> In this way it is not just possible to interchange code/modules but also
> data about nodes. So there could be someday also aggregating system for
> all our systems (for example a global map of all nodes).
>
> I could fork our schema documentation and it could start as a schema
> draft where everybody would start adding your fields and discuss names
> of common fields. We can use our wiki for that if you wish.
>
> I think it would be also useful to invite also other wireless networking
> groups to this. Especially overseas ones. What do you think?
>
>
> Mitar
>
> _______________________________________________
> Nodedb-interop mailing list
> (spam-protected)
> http://lists.funkfeuer.at/mailman/listinfo/nodedb-interop
>    

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.funkfeuer.at/pipermail/nodedb-interop/attachments/20091130/1afc44a1/attachment.html>


More information about the Nodedb-interop mailing list