7.18. “身份”声明
“identity
”声明用于定义新的全球唯一,抽象和无类型的身份。 身份的唯一目的是表示它的名字,语义和存在。 身份可以从头开始定义,也可以从一个或多个基本身份派生。 身份的参数是一个标识符,是身份的名称。 紧接着是一个包含详细身份信息的子状态块。
内置数据类型“identityref
”(见第9.10节)可用于引用数据模型中的身份。
7.18.1. 身份的子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| base | 7.18.2 | 0..n |
| description | 7.21.3 | 0..1 |
| if-feature | 7.20.2 | 0..n |
| reference | 7.21.4 | 0..1 |
| status | 7.21.2 | 0..1 |
+--------------+---------+-------------+
7.18.2. “base
”声明
可选的“base
”语句将一个字符串作为参数,该字符串是从中派生新身份的现有身份的名称。 如果不存在“base
”语句,则从头开始定义标识。 如果存在多个“base
”语句,则从所有这些语句中派生出身份。
如果基本名称上存在前缀,则表示在前缀导入的模块中定义的标识;如果前缀与本地模块的前缀匹配,则表示前缀为本地模块。 否则,必须在当前模块或包含的子模块中定义具有匹配名称的标识。
身份不得直接或间接通过其他身份链来引用自己。
身份的推导具有以下属性:
这是不反射的,这意味着一个身份不是从它本身衍生出来的。
它是传递性的,这意味着如果
B
的身份是从A
派生的,C
是从B
派生的,那么C
也是从A
派生的。
7.18.3. 使用示例
module example-crypto-base {
yang-version 1.1;
namespace "urn:example:crypto-base";
prefix "crypto";
identity crypto-alg {
description
"Base identity from which all crypto algorithms
are derived.";
}
identity symmetric-key {
description
"Base identity used to identify symmetric-key crypto
algorithms.";
}
identity public-key {
description
"Base identity used to identify public-key crypto
algorithms.";
}
}
module example-des {
yang-version 1.1;
namespace "urn:example:des";
prefix "des";
import "example-crypto-base" {
prefix "crypto";
}
identity des {
base "crypto:crypto-alg";
base "crypto:symmetric-key";
description "DES crypto algorithm.";
}
identity des3 {
base "crypto:crypto-alg";
base "crypto:symmetric-key";
description "Triple DES crypto algorithm.";
}
}