# phpman > ri > Psych::Nodes

## [Psych::Nodes](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes/markdown)

(from gem psych-5.4.0)
------------------------------------------------------------------------
## Overview

When using Psych.load to deserialize a YAML document, the document is
translated to an intermediary AST.  That intermediary AST is then
translated in to a Ruby object graph.

In the opposite direction, when using Psych.dump, the Ruby object graph
is translated to an intermediary AST which is then converted to a YAML
document.

[Psych::Nodes](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes/markdown) contains all of the classes that make up the nodes of a
YAML AST.  You can manually build an AST and use one of the visitors
(see [Psych::Visitors](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3AVisitors/markdown)) to convert that AST to either a YAML document or
to a Ruby object graph.

Here is an example of building an AST that represents a list with one
scalar:

  # Create our nodes
  stream = [Psych::Nodes::Stream](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AStream/markdown).new
  doc    = [Psych::Nodes::Document](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ADocument/markdown).new
  seq    = [Psych::Nodes::Sequence](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ASequence/markdown).new
  scalar = [Psych::Nodes::Scalar](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AScalar/markdown).new('foo')

  # Build up our tree
  stream.children << doc
  doc.children    << seq
  seq.children    << scalar

The stream is the root of the tree.  We can then convert the tree to
YAML:

  stream.to_yaml => "---\n- foo\n"

Or convert it to Ruby:

  stream.to_ruby => [["foo"]]

### YAML AST Requirements

A valid YAML AST **must** have one [Psych::Nodes::Stream](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AStream/markdown) at the root.
 A [Psych::Nodes::Stream](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AStream/markdown) node must have 1 or more [Psych::Nodes::Document](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ADocument/markdown)
nodes as children.

[Psych::Nodes::Document](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ADocument/markdown) nodes must have one and **only** one child.
That child may be one of:

* [Psych::Nodes::Sequence](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ASequence/markdown)
* [Psych::Nodes::Mapping](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AMapping/markdown)
* [Psych::Nodes::Scalar](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AScalar/markdown)

[Psych::Nodes::Sequence](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ASequence/markdown) and [Psych::Nodes::Mapping](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AMapping/markdown) nodes may have many
children, but [Psych::Nodes::Mapping](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AMapping/markdown) nodes should have an even number of
children.

All of these are valid children for [Psych::Nodes::Sequence](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ASequence/markdown) and
[Psych::Nodes::Mapping](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AMapping/markdown) nodes:

* [Psych::Nodes::Sequence](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3ASequence/markdown)
* [Psych::Nodes::Mapping](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AMapping/markdown)
* [Psych::Nodes::Scalar](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AScalar/markdown)
* [Psych::Nodes::Alias](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AAlias/markdown)

[Psych::Nodes::Scalar](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AScalar/markdown) and [Psych::Nodes::Alias](https://www.chedong.com/phpMan.php/perldoc/Psych%3A%3ANodes%3A%3AAlias/markdown) are both terminal nodes and
should not have any children.







------------------------------------------------------------------------
