# GEL Data Structures

GEL provides four basic data primitives *string*, *int*, *float*, and *double* as well as aggregate data types *node*, *link* and *graph*. Understanding these basic data types and their behaviors has helped standardize the way we work with heterogeneous graphs.

# Graphs

* The terms *network* and *graph* will be used interchanably.

From **graph theory**, a graph is defined as a set of nodes and links.

**Nodes:**represent entities that are identified by unique strings or numbers**Links:**represent relationships between a pair of entities and are identified by the pair of nodes it connects.

For example, the following graph is represented by the set of nodes **{a, b, c, d}** and the set of links **{ab, bc, ac, ad}**

Since the graph is defined as the set of nodes and edges, the graph can have multiple visualizations.

Nodes and links on a graph can have annotations. In the following graph, nodes have an an annotation "count" and links have an annotation "weight". In order to define a node and its annotation we have a structure called a node type. In order to define a link and its annotation we have a structure called a link type. The following defines a graph in Gel with a nodetype **a** and a linktype **b**.

The following subsections will first describe basic attribute types (int, float, double, string) and their behaviors during type conversion. The last subsection will describe node, link, and graph types and methods to combine and subset.