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