如何在YANG中建模允许重复元素的有序数值数组?
解决YANG中有序重复值列表的建模问题
针对你需要构建包含非唯一数值的有序列表(示例:[0, 0, 0, 1, 0, 5, 17, 0, 0])的需求,结合YANG规范的约束,分两种场景给出可行方案:
场景1:列表为状态数据(无需用户配置)
如果该列表是设备上报的状态数据(而非用户配置项),可以使用无键列表,无需定义key,同时满足重复值和有序要求:
list items { config false; ordered-by system; leaf value { type uint8; } }
注意:无键列表仅允许用于config false的场景,且必须设置ordered-by system,顺序由系统逻辑维护。
场景2:列表为配置数据(需要用户配置)
若为用户可配置的列表,YANG规范强制要求列表必须有唯一key,此时推荐使用位置索引作为key——该索引并非冗余节点,而是用来明确标识元素在有序列表中的位置:
list item { key "index"; leaf index { type uint32; description "元素在有序列表中的位置索引(建议从0开始递增)"; } leaf value { type uint8; description "列表元素的数值"; } ordered-by user; }
通过index,用户可以精准控制列表顺序,同时允许value重复。虽然XPath路径会有所变化,但这是符合规范的最小侵入方案,避免了无意义的冗余节点。
为什么不能直接绕开key约束?
- YANG的
leaf-list硬性要求元素值唯一,无法支持重复场景; - 配置型
list必须定义key,这是规范强制要求,用于确保每个列表元素可被唯一标识,避免配置冲突。
内容的提问来源于stack exchange,提问作者nullromo
相关产品推荐
相关产品推荐

