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
- There are three types of section headers and they are case sensitive:
- *Nodes
- *DirectedEdges
- *UndirectedEdges
- There are three data types, string, integer, and floating point.
- 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.
- 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.
- 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.
- All edges must be listed, none are inferred.
- 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.
- * 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.
- All integers must be represented by a positive or negative number with no decimal.
- All floating point numbers must include a decimal. -1.23e5 is acceptable notation, as are values such as 102.5
- id, source and target MUST be integers. label MUST be strings.
- Arbitrary number of spaces and/or tabs can exist between two columns.
- 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.
- 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"
- 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)
- 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"
- Separate node and edge attribute sections will continue to NOT be supported.
Acknowledgements
NWB File Format is defined by the NWB Development Team
|