7.13. “使用”声明

uses”语句用于引用“grouping”定义。 它需要一个参数,这是分组的名称。

uses”引用对分组的作用是将分组定义的节点复制到当前模式树中,然后根据“精简(according)”和“增加(augment)”语句进行更新。

在分组中定义的标识符没有绑定到名称空间,直到分组的内容通过“uses”语句添加到模式树中,该语句不出现在“grouping”语句中,此时它们被绑定到名称空间的当前模块。

7.13.1. uses子语句

+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| augment      | 7.17    | 0..n        |
| description  | 7.21.3  | 0..1        |
| if-feature   | 7.20.2  | 0..n        |
| reference    | 7.21.4  | 0..1        |
| refine       | 7.13.2  | 0..n        |
| status       | 7.21.2  | 0..1        |
| when         | 7.21.5  | 0..1        |
+--------------+---------+-------------+

7.13.2. “refine”声明

分组中每个节点的一些属性可以通过“refine”语句来改进。参数是标识分组中的节点的字符串。这个节点被称为细化的目标节点。如果分组中的节点不存在作为“细化”语句的目标节点,则不会对其进行细化,因此可以完全按照在分组中定义的方式使用。

参数字符串是后代模式节点标识符(请参阅第6.5节)。

以下改进可以完成:

  • 叶节点或选择节点可能会得到一个默认值,或者一个新的默认值,如果它已经有一个。

  • 一个叶子列表节点可以获得一组默认值,或者一组新的默认值(如果它已经有了默认值)即精炼的默认值的集合取代了已经给出的默认值。

  • 任何节点都可能获得专门的“description”字符串。

  • 任何节点都可能获得专门的“reference”字符串。

  • 任何节点可能会得到不同的“config”语句。

  • leafanydataanyxmlchoice节点可能会得到不同的mandatory”语句。

  • 一个容器节点可能会得到一个“presence”语句。

  • 叶,叶列表,列表,容器,anydataanyxml节点可能会获得额外的“must”表达式。

  • 叶子列表或列表节点可能会得到不同的“最小元素(min-elements)”或“最大元素(max-elements)”语句。

  • 叶,叶列表,列表,容器,选项,大小写,anydataanyxml节点可能会获得额外的“if-feature”表达式。

  • 如果扩展允许细化,任何节点都可以得到细化的扩展。详情请参阅7.19节

7.13.3. XML编码规则

即使从另一个XML名称空间导入另一个模块,分组中的每个节点都被编码,就好像它是内联定义的一样。

7.13.4. 使用示例

要使用7.12.2节中定义的“endpoint”分组来定义某个其他模块中的HTTP服务器,我们可以这样做:

import example-system {
  prefix "sys";
}

container http-server {
  leaf name {
    type string;
  }
  uses sys:endpoint;
}

相应的XML实例示例:

<http-server>
  <name>extern-web</name>
  <ip>192.0.2.1</ip>
  <port>80</port>
</http-server>

如果端口80应该是HTTP服务器的默认端口,则可以添加一个默认值:

container http-server {
  leaf name {
    type string;
  }
  uses sys:endpoint {
    refine port {
      default 80;
    }
  }
}

如果我们要定义一个服务器列表,并且每个服务器都有“ip”和“port”作为键,我们可以这样做:

list server {
  key "ip port";
  leaf name {
    type string;
  }
  uses sys:endpoint;
}

以下是一个错误:

container http-server {
  uses sys:endpoint;
  leaf ip {          // 非法 - 相同的标识符“ip”
    type string;
  }
}

results matching ""

    No results matching ""