7.18. “身份”声明

identity”声明用于定义新的全球唯一,抽象和无类型的身份。 身份的唯一目的是表示它的名字,语义和存在。 身份可以从头开始定义,也可以从一个或多个基本身份派生。 身份的参数是一个标识符,是身份的名称。 紧接着是一个包含详细身份信息的子状态块。

内置数据类型“identityref”(见第9.10节)可用于引用数据模型中的身份。

7.18.1. 身份的子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | base | 7.18.2 | 0..n |
  5. | description | 7.21.3 | 0..1 |
  6. | if-feature | 7.20.2 | 0..n |
  7. | reference | 7.21.4 | 0..1 |
  8. | status | 7.21.2 | 0..1 |
  9. +--------------+---------+-------------+

7.18.2. “base”声明

可选的“base”语句将一个字符串作为参数,该字符串是从中派生新身份的现有身份的名称。 如果不存在“base”语句,则从头开始定义标识。 如果存在多个“base”语句,则从所有这些语句中派生出身份。

如果基本名称上存在前缀,则表示在前缀导入的模块中定义的标识;如果前缀与本地模块的前缀匹配,则表示前缀为本地模块。 否则,必须在当前模块或包含的子模块中定义具有匹配名称的标识。

身份不得直接或间接通过其他身份链来引用自己。

身份的推导具有以下属性:

  • 这是不反射的,这意味着一个身份不是从它本身衍生出来的。

  • 它是传递性的,这意味着如果B的身份是从A派生的,C是从B派生的,那么C也是从A派生的。

7.18.3. 使用示例

  1. module example-crypto-base {
  2. yang-version 1.1;
  3. namespace "urn:example:crypto-base";
  4. prefix "crypto";
  5. identity crypto-alg {
  6. description
  7. "Base identity from which all crypto algorithms
  8. are derived.";
  9. }
  10. identity symmetric-key {
  11. description
  12. "Base identity used to identify symmetric-key crypto
  13. algorithms.";
  14. }
  15. identity public-key {
  16. description
  17. "Base identity used to identify public-key crypto
  18. algorithms.";
  19. }
  20. }
  21. module example-des {
  22. yang-version 1.1;
  23. namespace "urn:example:des";
  24. prefix "des";
  25. import "example-crypto-base" {
  26. prefix "crypto";
  27. }
  28. identity des {
  29. base "crypto:crypto-alg";
  30. base "crypto:symmetric-key";
  31. description "DES crypto algorithm.";
  32. }
  33. identity des3 {
  34. base "crypto:crypto-alg";
  35. base "crypto:symmetric-key";
  36. description "Triple DES crypto algorithm.";
  37. }
  38. }