This page last changed on Mar 11, 2011 by barbosaa.
Legend

# comments
* new section or null/unknown value or delimiter between the attribute name and the data type
() optional

Preserved Key Words (case sensitive)
  • *Nodes
  • *DirectedEdges
  • *UndirectedEdges
  • id
  • source
  • target
  • weight
  • *int
  • *string
  • *float
NWB Format
# Comments
*Nodes (total numbers of nodes)
id*int      label*string            (nodeAttribute1*data_type)                (nodeAttribute2*data_type) ...
...
*DirectedEdges     (total numbers of edges)
source*int         target*int               (edgeAttribute1*data_type)                (edgeAttribute2*data_type)
...
*UndirectedEdges   (total numbers of edges)
source*int         target*int               (edgeAttribute1*data_type)                (edgeAttribute2*data_type)
...
Example
# This is a paper-author network.
# Author labels are author names.
# Paper labels are titles.
# Paper weights indicate # citations.
*Nodes   4
id*int      label*string                weight*int             node_type*string  
1           "Joe Ann"                   0                      "author"
2           "John Smith"                0                      "author"
3           "Bio Today"                 8                      "paper"
4           "Physics Tomorrow"          15                     "paper"
*DirectedEdges     2
source*int              target*int           weight*float          edge_type*string
1                       3                    0.66                  "wrote"
4                       3                    0.78                  "paper-citation"
Detailed Specification
  1. There are three types of section headers and they are case sensitive:
    • *Nodes
    • *DirectedEdges
    • *UndirectedEdges
  2. There are three data types, string, integer, and floating point.
  3. The *Nodes section header MUST NOT be omitted in the NWB file. The “total numbers of nodes” after *Nodes is optional, and should be separated only by arbitrary number of spaces and/or tabs.
  4. The list of nodes under the section of *Nodes MUST NOT be omitted and MUST provide a complete list including the node id and node label. The data type of node ids must be integer and the value must be bigger than 0; in another word, the minimum node id is 1). The data type of node labels must be string.
  5. One of *DirectedEdges section or *UndirectedEdges section is required. If desired, both may be used, but at least one must be. A graph with non-empty *DirectedEdges and *UndirectedEdges sections is a hybrid graph. “Total numbers of edges” is optional after *DirectedEdges or *UndirectEededges, and should be separated only by arbitrary number of spaces and/or tabs.
  6. All edges must be listed, none are inferred.
  7. All string values (not including the attribute names) must be surrounded by double quotation marks. " can not exist in the middle of a string surrounded by double quotation marks.
  8. * is a preserved key character
    • It is a pre-fix of node or edge section headers.
    • It is used as a delimiter between an attribute name and the corresponding data type.
    • It also represents any null/unknown value
    • * in strings surrounded by double quotation marks should be treated as a regular character.
  9. All integers must be represented by a positive or negative number with no decimal.
  10. All floating point numbers must include a decimal. -1.23e5 is acceptable notation, as are values such as 102.5
  11. id, source and target MUST be integers. label MUST be strings.
  12. Arbitrary number of spaces and/or tabs can exist between two columns.
  13. After each section header, the meaning of each column MUST be specified in the next line with the format of attribute_name*data_type. Any comment line or empty is not allowed between the line of section header and the attribute line.
  14. Attribute names CANNOT contain spaces and/or * in the middle and cannot be quoted. The values of data_type can ONLY be int, string, and float. attribute_name*data_type MUST be lower case.
    Example2.nwb
    *Nodes	4
    id*int	label*string		weight*float	node_type*string
    1	"Joe Ann"		0.66		“author”
    2	"John Smith"		0		"author"
    3	"Bio Today"		0.78		"paper"
    4	"Physics Tomorrow" 	1.0		"paper"
    *DirectedEdges 3
     source*int	target*int	weight*int	edge_type*string
    1		3		1		"wrote"
    4		3		15		"paper-citation"
    2		3		1	 	"wrote"
    
  15. All null/unknown values (data type could be string, or integer or floating point) are always represented by *. An empty string is “” (two double quotations marks)
  16. Each comment line must start with # and comment lines must start from the beginning of a line and can not append to any node/edge section headers, attribute lines or node/edge lists.
    Example3.nwb
    *Nodes	4
    id*int	label*string		weight*int	node_type*string
    #the following node has an unknown string value.
    1	*			0		"author"
    2	"John Smith"		0		"author"
    3	"Bio Today"		8		"paper"
    #the following node has an unknown integer value.
    4	"Physics Tomorrow"	*		"paper"
    *DirectedEdges	3
    source*int	target*int	weight*float	edge_type*string
    1		3		0.66		"wrote"
    4		3		0.78		"paper-citation"
    2		3		1.0		"wrote"
    
  17. Separate node and edge attribute sections will continue to NOT be supported.
Acknowledgements

NWB File Format is defined by the NWB Development Team

Document generated by Confluence on May 31, 2011 16:37