7.21. 通用声明
本节定义了几个其他语句通用的子语句。
7.21.1. “config
”声明
“config
”语句将字符串“true
”或“false
”作为参数。 如果“config
”是“true
”,则定义代表配置。 表示配置的数据节点是配置数据存储的一部分。
如果“config
”是“false
”,则定义表示状态数据。 表示状态数据的数据节点不是配置数据存储的一部分。
如果未指定“config
”,则缺省值与父架构节点的“config
”值相同。 如果父节点是一个case
节点,则该值与case
节点的父节点选择节点相同。
如果顶层节点没有指定“config
”语句,则默认值为“true
”。
如果一个节点的“config
”设置为“false
”,那么它下面的任何节点都不能将“config
”设置为“true
”。
7.21.2. “status
”声明
“status
”语句将字符串“current
”,“deprecated
”或“obsolete
”作为参数之一。
“
current
”是指定义是当前和有效的。“
deprecated
”表示一个陈旧的定义,但它允许new/continued
的实现,以促进与older/existing
的实现的互操作性。“
obsolete
”意味着该定义已经过时,并且不应该被实现and/or
可以从实现中去除。
如果未指定状态,则默认为“current
”。
如果定义为“current
”,则不得在同一模块中引用“deprecated
”或“obsolete
”的定义。
如果定义为“deprecated
”,则不得在同一模块中引用“obsolete
”定义。
例如,以下是非法的:
typedef my-type {
status deprecated;
type int32;
}
leaf my-leaf {
status current;
type my-type; // 非法的,因为 my-type 已被弃用
}
7.21.3. “description
”声明
“description
”语句将一个字符串作为参数,该字符串包含对此定义的可读文本描述。 文本以模块开发人员选择的语言(或多种语言)提供; 为了互操作性,建议选择一种在将使用该模块的网络管理员社区中广泛理解的语言。
7.21.4. “reference
”声明
“reference
”语句将一个字符串作为参数,这个字符串是一个可读的交叉引用的外部文档 - 定义相关管理信息的另一个模块或提供与此定义有关的附加信息的文档。
例如,“uri
”数据类型的typedef
可能如下所示:
typedef uri {
type string;
reference
"RFC 3986: Uniform Resource Identifier (URI): Generic Syntax";
...
}
7.21.5. “when
”声明
“when
”语句使其父数据定义语句有条件。父数据定义语句定义的节点只有在满足“when
”语句指定的条件时才有效。该语句的参数是一个XPath表达式(请参阅第6.4节),用于正式指定此条件。如果XPath
表达式在概念上对于特定实例的计算结果为“true
”,则由父数据定义语句定义的节点是有效的;否则,它不是。
作为列表键的叶子不能有“when
”语句。
如果在列表中使用的分组中定义了键叶,那么“uses
”语句不能有“when
”语句。
有关更多信息,请参阅第8.3.2节。
除了第6.4.1节中的定义之外,XPath
表达式在以下上下文中概念性地评估:
如果“
when
”语句是“augment
”语句的孩子,那么如果目标节点是数据节点,则上下文节点是数据树中扩充的目标节点。否则,上下文节点是与也是数据节点的目标节点最接近的祖先节点。如果不存在这样的节点,则上下文节点是根节点。在处理XPath
表达式的过程中,通过删除由“augment
”语句添加的节点的所有实例(如果有的话),可访问树暂时被改变。如果“
when
”语句是“uses
”,“choice
”或“case
”语句的子语,那么上下文节点是与节点最接近的祖先节点,“when
”语句也是数据节点。如果不存在这样的节点,则上下文节点是根节点。在处理XPath
表达式的过程中,通过删除由“uses
”,“choice
”或“case
”语句添加的节点的所有实例(如果有的话),可访问树暂时被改变。如果“
when
”语句是任何其他数据定义语句的孩子,则在处理XPath
表达式时,可访问的树会被暂时更改,方法是将所有定义了“when
”语句的数据节点的实例替换为单个具有相同名称的虚拟节点,但没有值和没有子节点。如果不存在这样的实例,则暂时创建虚拟节点。上下文节点是这个虚拟节点。
使用标准的XPath
规则将XPath
表达式的结果转换为布尔值。
如果XPath
表达式引用任何也有关联“when
”语句的节点,则必须首先计算这些“when
”表达式。在“when
”表达式之间不能有循环依赖关系。
请注意,XPath
表达式是在概念上评估的。这意味着实现不必在服务器中使用XPath
评估程序。 “when
”语句可以很好地用专门编写的代码来实现。