Package org.opendaylight.yangtools.yang.data.api.schema


package org.opendaylight.yangtools.yang.data.api.schema
Definition of normalized YANG DOM Model. Normalized DOM Model brings more direct mapping between YANG Model, DOM representation of data.

Normalized DOM Model

Node Types

  • NormalizedNode - Base type representing a node in a tree structure; all nodes are derived from it, it contains a leaf identifier and a value.
    • DataContainerNode - Node which contains multiple leafs; it does not have a direct representation in the YANG syntax.
      • ContainerNode - Node, which represents a leaf which can occur only once per parent node; it contains multiple child leaves and maps to the container statement in YANG.
      • MapEntryNode - Node which represents a leaf, which can occur multiple times; a leave is uniquely identified by the value of its key. A MapEntryNode may contain multiple child leaves. MapEntryNode maps to the instance of list in YANG.
      • UnkeyedListEntryNode - Node which represents a leaf, which can occur multiple times; a leave is uniquely identified by the value of its key. A MapEntryNode may contain multiple child leaves. MapEntryNode maps to the instance of list in YANG.
      • ChoiceNode - Node which represents a leaf, which occurs mostly once per parent node, but possible values could have different types. Maps to choice statement. Types maps to the case statements for that choice.
      • AugmentationNode - Node which represents a leaf, which occurs mostly once per parent node.
    • LeafNode - Node which represents a leaf, which occurs mostly once per parent node. Contains simple value.
    • LeafSetEntryNode - Node which represents a leaf, which type could occurs multiple times per parent node. Maps to to the instances of leaf-list in YANG.
    • LeafSetNode - Special node, which can occur only once per parent node; its leaves are LeafSetEntryNode nodes of specified type. Maps into the leaf-list in YANG.
    • MapNode - Special node, which can occur only once per parent node; its leaves are MapEntryNode nodes.
      • UserMapNode - Special node, which can occur only once per parent node; its leaves are MapEntryNode nodes.
    • UnkeyedListNode - Special node, which can occur only once per parent node; its leaves are MapEntryNode nodes.

Tree / subtree structure

Grammar representation

  YangInstanceIdentifier =
    YangInstanceIdentifier.PathArgument*
  YangInstanceIdentifier.PathArgument =
    YangInstanceIdentifier.NodeIdentifier
    | YangInstanceIdentifier.NodeIdentifierWithPredicates
    | YangInstanceIdentifier.NodeWithValue
    | YangInstanceIdentifier.AugmentationIdentifier

  TreeRoot = DataContainerNode
  DataContainerNode =
    ( LeafNode
     | ChoiceNode
     | AugmentationNode
     | MapNode
     | LeafSetNode)*
  ContainerDataNode =
    YangInstanceIdentifier.NodeIdentifier
    DataContainerNode

  LeafNode =
    YangInstanceIdentifier.NodeIdentifier SimpleValue
  AugmentationNode =
    YangInstanceIdentifier.AugmentationIdentifier
    DataContainerNode
  MapNode =
    YangInstanceIdentifier.NodeIdentifier
    MapEntryNode
  MapEntryNode =
    YangInstanceIdentifier.NodeIdentifierWithPredicates
    DataContainerNode

  // Special nodes
  LeafSetNode =
    YangInstanceIdentifier.NodeIdentifier
    LeafSetEntryNode*
  ChoiceNode =
    YangInstanceIdentifier.NodeIdentifier
    DataContainerNode
  LeafSetEntryNode =
    YangInstanceIdentifier.NodeWithValue SimpleValue
 

The resulting tree organization is following:

  • (DataContainerNode)
    • (0..n) LeafNode
    • (0..n) LeafSetNode
      • (0..n) LeafSetEntryNode
    • (0..n) ContainerNode
      • (Same as DataContainerNode)
    • (0..n) ContainerNode
      • (Same as DataContainerNode)
    • (0..n) MapNode
      • (0..n) MapEntryNode
        • (Same as DataContainerNode)
    • (0..n) AugmentationNode
      • (Same as DataContainerNode)

Ordering of child nodes

Ordering of child nodes is not enforced by this API definition, unless explicitly stated by subclasses of OrderedNodeContainer which marks nodes with semantic constrain to preserve user-supplied ordering.

Clients should not expect any specific ordering of child nodes for interfaces from this package which does not extend OrderedNodeContainer, since implementations are not required to have well-defined order, which allows for more efficient implementations. If such ordering is required by clients for serialization / debugability it SHOULD be done externally in code using these interfaces.