There are several technologies you should learn about if your going to understand how HAX is built (and how to extend it)

## JSON Schema

Learn more about JSON Schema on the official website for that standard. JSON Schema provides a way of describing the data contained in a JSON blob so that a form can be built to modify those values. HAX uses this extensively via a tag called eco-json-schema-object and related tags, to turn any json schema definition into a fully two-way data binded form.

### Example

HAX schema is an abstraction that sits on top of JSON Schema in order to provide forms for updating values in your HAX wired elements. If you wanted to extend the types of input fields that HAX has access to then learning JSON Schema would be the best place to start!

## JSON Outline Schema

JSON Outline Schema is a standard way of expressing and storing the relation between objects. It gives you a simple way of linking data together to form an outline of related concepts / entities. Here is an example of a JSON Outline schema entity:

This gives you enough data to visually represent this information in an outline form. Let's look at a larger example of 3 items related together which would express nested hierarchy in a consistent way:

Let's break down these properties and why we have them in the schema:

## Higher order schema

- `title ` - name of the work as a whole
- `author ` - who created this work
- `description ` - short description of the work to explain it
- `license ` - a valid license short hard for the work as a whole
- `metadata ` - area to storing any additional details about the work. This has no standard structure but could be used for relating work if needed.
- `id ` - a unique identifier for this work in the universe of all works
- `items ` - an array of schema elements which contain the pages / leaves of the structure of this outline

## Leaf / page element within the structure

- `id ` - the UUID / unique ID of the element
- `indent ` - How far to visually position the item inward. You could have something be the parent as a page but visually only be indented 2 levels
- `location ` - a file or resource that references the related data to display here
- `order ` - a weighting as to the order relative to other items that match this parent level
- `parent ` - a UUID / unique ID of the element this is a child of
- `title ` - title of this item to display
- `description ` - short description of the item to explain it
- `metadata ` - a container for any additional details of information you need to ship. This has no standard structure