2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
11 * Definition of normalized YANG DOM Model
13 * Normalized DOM Model brings more direct mapping between YANG Model, DOM
14 * representation of data
16 * <h2>Normalized DOM Model</h2>
20 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode} -
21 * Base type representing a node in a tree structure; all nodes are derived from
22 * it, it contains a leaf identifier and a value.
25 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode} -
26 * Node which contains multiple leafs; it does not have a direct representation
29 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.ContainerNode} -
30 * Node, which represents a leaf which can occur only once per parent node; it
31 * contains multiple child leaves and maps to the <i>container</i> statement in
33 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} -
34 * Node which represents a leaf, which can occur multiple times; a leave is
35 * uniquely identified by the value of its key. A MapEntryNode may contain
36 * multiple child leaves. MapEntryNode maps to the instance of <i>list</i> in
39 * {@link org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode}
40 * - Node which represents a leaf, which can occur multiple times; a leave is
41 * uniquely identified by the value of its key. A MapEntryNode may contain
42 * multiple child leaves. MapEntryNode maps to the instance of <i>list</i> in
44 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode} - Node
45 * which represents a leaf, which occurs mostly once per parent node, but
46 * possible values could have different types. Maps to <i>choice</i> statement.
47 * Types maps to the <i>case</i> statements for that <i>choice</i>.</li>
48 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode}
49 * - Node which represents a leaf, which occurs mostly once per parent node.</li>
52 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode} - Node
53 * which represents a leaf, which occurs mostly once per parent node. Contains
55 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode}
56 * - Node which represents a leaf, which type could occurs multiple times per
57 * parent node. Maps to to the instances of <i>leaf-list</i> in YANG.</li>
58 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode} -
59 * Special node, which can occur only once per parent node; its leaves are
60 * LeafSetEntryNode nodes of specified type. Maps into the <i>leaf-list</i> in
62 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode} - Special
63 * node, which can occur only once per parent node; its leaves are MapEntryNode
66 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode} -
67 * Special node, which can occur only once per parent node; its leaves are
68 * MapEntryNode nodes.</li>
71 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode} -
72 * Special node, which can occur only once per parent node; its leaves are
73 * MapEntryNode nodes.</li>
78 * <h3>Tree / subtree structure</h3> <h4>Grammar representation</h4>
81 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument}*
82 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}| {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates}| {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue} | {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier}
84 * TreeRoot = {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
85 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode} = ( {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode} | {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode} | {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode} | {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode} | {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode})*
86 * ContainerDataNode = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
88 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} SimpleValue
89 * {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier} {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
90 * {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode}
91 * {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates} {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
94 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode}*
95 * {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
96 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode} = {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue} SimpleValue
99 * The resulting tree organization is following:
102 * <li>(DataContainerNode)
104 * <li>(0..n) LeafNode</li>
105 * <li>(0..n) LeafSetNode
107 * <li>(0..n) LeafSetEntryNode</li>
110 * <li>(0..n) ContainerNode
112 * <li>(Same as DataContainerNode)</li>
115 * <li>(0..n) ContainerNode
117 * <li>(Same as DataContainerNode)</li>
122 * <li>(0..n) MapEntryNode
124 * <li>(Same as DataContainerNode)</li>
129 * <li>(0..n) AugmentationNode
131 * <li>(Same as DataContainerNode)</li>
138 * <h3>Ordering of child nodes</h3>
140 * Ordering of child nodes is not enforced by this API definition, unless
141 * explicitly stated by subclasses of
142 * {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer}
143 * which marks nodes with semantic constrain to preserve user-supplied ordering.
145 * Clients should not expect any specific ordering of child nodes for interfaces
146 * from this package which does not extend
147 * {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer},
148 * since implementations are not required to have well-defined order, which
149 * allows for more efficient implementations. If such ordering is required by
150 * clients for serialization / debugability it SHOULD be done externally in
151 * code using these interfaces.
154 package org.opendaylight.yangtools.yang.data.api.schema;