实例标识符可以是对系统中任何数据节点的引用。
把它想象成一个指针;它不包含数据本身,只是对它的引用(例如地址)
例如,表示对建模为 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)可以作为 type 语句的子语句添加,它允许控制是否只能引用现有实例,或者是否也可以接受不存在的实例。
关于值的格式,请注意实例标识符的表示方式取决于您使用的协议。 NETCONF 中的实例标识符与 RESTCONF 中的实例标识符不同(尽管它们非常相似)。
你可以想象一个 CLI 有一个自定义的方式来表示 YANG 对象,例如:
- 使用 xpath /a/b[x=5]/c[y=1] 定义数据节点
- 在 CLI 中,该节点地址被视为 c-5-1(只是一个示例)
- 如果您有一个指向该对象的实例标识符,它的值在 CLI 中将是字符串“c-5-1”,但在 NETCONF 中它仍然是 xpath。
简而言之,格式取决于您使用的协议。