4.2.2. 数据建模基础

YANG定义了数据建模的四种主要类型的数据节点。 在下面的每个小节中,这些示例都显示了YANG语法以及相应的XML编码。 YANG语句的语法在6.3节中定义。

4.2.2.1. 叶节点(Leaf Nodes)

叶子实例包含简单的数据,如整数或字符串。 它只有一个特定类型的值,没有子节点。

YANG例子:

  1. leaf host-name {
  2. type string;
  3. description
  4. "Hostname for this system.";
  5. }

XML编码示例:

  1. <host-name>my.example.com</host-name>

第7.6节详细介绍了“leaf”声明。

4.2.2.2. 叶列表节点(Leaf-List Nodes)

叶列表定义了特定类型的值序列。

YANG例如:

  1. leaf-list domain-search {
  2. type string;
  3. description
  4. "List of domain names to search.";
  5. }

XML编码示例:

  1. <domain-search>high.example.com</domain-search>
  2. <domain-search>low.example.com</domain-search>
  3. <domain-search>everywhere.example.com</domain-search>

第7.7节介绍了“leaf-list”声明。

4.2.2.3. 容器节点(Container Nodes)

一个容器用于分组子树中的相关节点。 一个容器只有子节点,没有值。 容器可以包含任何类型的任何数量的子节点(叶子,列表,容器,叶子列表,动作和通知)。

YANG例如:

  1. container system {
  2. container login {
  3. leaf message {
  4. type string;
  5. description
  6. "Message given at start of login session.";
  7. }
  8. }
  9. }

XML编码示例:

  1. <system>
  2. <login>
  3. <message>Good morning</message>
  4. </login>
  5. </system>

第7.5节介绍了“container”声明。

4.2.2.4. 列表节点(List Nodes)

列表定义了一系列列表条目。每个条目就像一个容器,如果它定义了任何关键的叶子,它就被其关键叶子的值唯一标识。列表可以定义多个关键叶子,并且可以包含任何类型的任何数量的子节点(包括树叶,列表,容器等)。

YANG例如:

  1. list user {
  2. key "name";
  3. leaf name {
  4. type string;
  5. }
  6. leaf full-name {
  7. type string;
  8. }
  9. leaf class {
  10. type string;
  11. }
  12. }

XML编码示例:

  1. <user>
  2. <name>glocks</name>
  3. <full-name>Goldie Locks</full-name>
  4. <class>intruder</class>
  5. </user>
  6. <user>
  7. <name>snowey</name>
  8. <full-name>Snow White</full-name>
  9. <class>free-loader</class>
  10. </user>
  11. <user>
  12. <name>rzell</name>
  13. <full-name>Rapun Zell</full-name>
  14. <class>tower</class>
  15. </user>

第7.8节介绍了“list”声明。

4.2.2.5. 示例模块

这些语句被组合来定义模块:

  1. // Contents of "example-system.yang"
  2. module example-system {
  3. yang-version 1.1;
  4. namespace "urn:example:system";
  5. prefix "sys";
  6. organization "Example Inc.";
  7. contact "joe@example.com";
  8. description
  9. "The module for entities implementing the Example system.";
  10. revision 2007-06-09 {
  11. description "Initial revision.";
  12. }
  13. container system {
  14. leaf host-name {
  15. type string;
  16. description
  17. "Hostname for this system.";
  18. }
  19. leaf-list domain-search {
  20. type string;
  21. description
  22. "List of domain names to search.";
  23. }
  24. container login {
  25. leaf message {
  26. type string;
  27. description
  28. "Message given at start of login session.";
  29. }
  30. list user {
  31. key "name";
  32. leaf name {
  33. type string;
  34. }
  35. leaf full-name {
  36. type string;
  37. }
  38. leaf class {
  39. type string;
  40. }
  41. }
  42. }
  43. }
  44. }