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
10 * Definition of normalized YANG DOM Model. Normalized DOM Model brings more direct mapping between YANG Model, DOM
11 * representation of data.
13 * <h2>Normalized DOM Model</h2>
17 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode} -
18 * Base type representing a node in a tree structure; all nodes are derived from
19 * it, it contains a leaf identifier and a value.
22 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode} -
23 * Node which contains multiple leafs; it does not have a direct representation
26 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.ContainerNode} -
27 * Node, which represents a leaf which can occur only once per parent node; it
28 * contains multiple child leaves and maps to the <i>container</i> statement in
30 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} -
31 * Node which represents a leaf, which can occur multiple times; a leave is
32 * uniquely identified by the value of its key. A MapEntryNode may contain
33 * multiple child leaves. MapEntryNode maps to the instance of <i>list</i> in
36 * {@link org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode}
37 * - Node which represents a leaf, which can occur multiple times; a leave is
38 * uniquely identified by the value of its key. A MapEntryNode may contain
39 * multiple child leaves. MapEntryNode maps to the instance of <i>list</i> in
41 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode} - Node
42 * which represents a leaf, which occurs mostly once per parent node, but
43 * possible values could have different types. Maps to <i>choice</i> statement.
44 * Types maps to the <i>case</i> statements for that <i>choice</i>.</li>
45 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode}
46 * - Node which represents a leaf, which occurs mostly once per parent node.</li>
49 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode} - Node
50 * which represents a leaf, which occurs mostly once per parent node. Contains
52 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode}
53 * - Node which represents a leaf, which type could occurs multiple times per
54 * parent node. Maps to to the instances of <i>leaf-list</i> in YANG.</li>
55 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode} -
56 * Special node, which can occur only once per parent node; its leaves are
57 * LeafSetEntryNode nodes of specified type. Maps into the <i>leaf-list</i> in
59 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode} - Special
60 * node, which can occur only once per parent node; its leaves are MapEntryNode
63 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode} -
64 * Special node, which can occur only once per parent node; its leaves are
65 * MapEntryNode nodes.</li>
68 * <li> {@link org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode} -
69 * Special node, which can occur only once per parent node; its leaves are
70 * MapEntryNode nodes.</li>
75 * <h3>Tree / subtree structure</h3> <h4>Grammar representation</h4>
78 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier} =
79 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument}*
80 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument} =
81 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}
82 * | {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates}
83 * | {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue}
84 * | {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier}
86 * TreeRoot = {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
87 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode} =
88 * ( {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode}
89 * | {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode}
90 * | {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode}
91 * | {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode}
92 * | {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode})*
94 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}
95 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
97 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafNode} =
98 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} SimpleValue
99 * {@link org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode} =
100 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier}
101 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
102 * {@link org.opendaylight.yangtools.yang.data.api.schema.MapNode} =
103 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}
104 * {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode}
105 * {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} =
106 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates}
107 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
110 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode} =
111 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}
112 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode}*
113 * {@link org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode} =
114 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier}
115 * {@link org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode}
116 * {@link org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode} =
117 * {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue} SimpleValue
121 * The resulting tree organization is following:
124 * <li>(DataContainerNode)
126 * <li>(0..n) LeafNode</li>
127 * <li>(0..n) LeafSetNode
129 * <li>(0..n) LeafSetEntryNode</li>
132 * <li>(0..n) ContainerNode
134 * <li>(Same as DataContainerNode)</li>
137 * <li>(0..n) ContainerNode
139 * <li>(Same as DataContainerNode)</li>
144 * <li>(0..n) MapEntryNode
146 * <li>(Same as DataContainerNode)</li>
151 * <li>(0..n) AugmentationNode
153 * <li>(Same as DataContainerNode)</li>
160 * <h3>Ordering of child nodes</h3>
161 * Ordering of child nodes is not enforced by this API definition, unless
162 * explicitly stated by subclasses of
163 * {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer}
164 * which marks nodes with semantic constrain to preserve user-supplied ordering.
167 * Clients should not expect any specific ordering of child nodes for interfaces
168 * from this package which does not extend
169 * {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer},
170 * since implementations are not required to have well-defined order, which
171 * allows for more efficient implementations. If such ordering is required by
172 * clients for serialization / debugability it SHOULD be done externally in
173 * code using these interfaces.
176 package org.opendaylight.yangtools.yang.data.api.schema;