ietf-netmod-yang - yang 模型中的实例标识符如何?
问题描述
据我了解,实例标识符类型有一个指向某个节点的 XPath 语句是一棵树。下一步是什么?instance-identifier 如何识别这个节点?如何将实例标识符应用于它指向的节点?还是我完全弄错了......除了在谷歌中找到的例子之外,我也没有任何例子
leaf instance-identifier-leaf {
type instance-identifier;
}
解决方案
实例标识符可以是对系统中任何数据节点的引用。把它想象成一个指针;它不包含数据本身,只是对它的引用(例如地址) 例如,表示对建模为 YANG 容器或列表实例的对象的引用很有用。
鉴于 YANG 数据可以表示为 XML 文档,因此您“指向”其中特定元素的方式类似于“指向”特定 XML 元素。在 XML 中执行此操作的方式是使用 XPath,它允许使用
这是一个例子:
container a {
list b {
key x;
leaf x { type int8; }
list c {
key y;
leaf y { type int8; }
}
}
}
leaf ref {
type instance-identifier;
}
因此,想象一个真实系统的数据存储区包含这些数据(为简化起见,我使用 XML 格式并忽略命名空间;真实系统不需要将其数据存储区保持为 XML 格式):
<a>
<b>
<x>1</x>
</b>
<b>
<x>5</x>
<c>
<y>1</y>
</c>
<c>
<y>2</y>
</c>
</b>
<b>
<x>10</x>
<c>
<y>5</y>
</c>
</b>
</a>
所以基本上我们有一堆列表条目,其中一些是级联的。如果你在 xpath 中表示所有这些节点,你会得到一个列表:
/a
/a/b[x=1]
/a/b[x=5]
/a/b[x=5]/c[y=1]
/a/b[x=5]/c[y=2]
/a/b[x=10]
/a/b[x=10]/c[y=5]
如果您在此层次结构之外有一个名为ref的实例标识符,它可以将这些 xpath 中的任何一个作为可能的值,作为字符串值。所以它包含对这些节点之一的引用;它不会包含节点本身,只是对它的引用。
最后一点是,instance-identifier 所引用的节点并不一定要实际存在于数据存储中。你可以有一个实例标识符指向一个不存在的节点。有一个 yang 语句(requires-instance)可以作为类型语句的子语句添加,它允许控制是否只能引用现有实例,或者是否也可以接受不存在的实例。
关于值的格式,请注意实例标识符的表示方式取决于您使用的协议。NETCONF 中的实例标识符与 RESTCONF 中的实例标识符不同(尽管它们非常相似)。你可以想象一个 CLI 有一个自定义的方式来表示 YANG 对象,例如:
- 使用 xpath /a/b[x=5]/c[y=1]定义数据节点
- 在 CLI 中,该节点地址被视为c-5-1(只是一个示例)
- 如果您有一个指向该对象的实例标识符,它的值将是 CLI 中的字符串“c-5-1”,但在 NETCONF 中它仍然是 xpath。
简而言之,格式取决于您使用的协议。
推荐阅读
- java - 消除数组中的重复项
- kotlin - Kotlin 编译器找不到 import kotlin.test
- c# - 模拟问题:无法实例化类的代理。找不到无参数构造函数
- java - 使用两个在 Pop 条件下失败的堆栈实现 minstack
- python - 如何开发一个可以识别作曲家歌曲的神经网络
- javascript - 当构造函数作为对象调用时,如何使构造函数具有可访问的成员
- ruby-on-rails - Datetimepicker 不显示日期与茧的嵌套形式 - Rails
- amazon-web-services - DynamoDB QuerySpec {MaxResultSize + 过滤表达式}
- python - 教师词典
- android - 在 GoogleSignInOptions、requestIdToken 或 requestServerAuthCode 上使用什么来实现授权代码流(又名 OAuth2 Explicit)?