7.10. “anydata”声明

anydata”语句在模式树中定义一个内部节点。它需要一个参数,它是一个标识符,后面是一个包含详细anydata信息的子状态块。

anydata”语句用于表示可以用YANG建模的未知节点集合,但anyxml除外,但是在模块设计时不知道数据模型。对于任何数据内容的数据模型,虽然不是必需的,但是可以通过协议信令或本文档范围之外的其他手段来获知。

anydata可能有用的示例是在设计时不知道具体通知的收到通知的列表。

anydata节点不能被扩充(见7.17节)。

一个anydata节点存在于数据树的零个或一个实例中。

一个实现可能会或可能不知道用于建模anydata节点的特定实例的数据模型。

由于anydata的使用限制了内容的操作,所以不应该使用“anydata”语句来定义配置数据。

7.10.1. anydata的子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | config | 7.21.1 | 0..1 |
  5. | description | 7.21.3 | 0..1 |
  6. | if-feature | 7.20.2 | 0..n |
  7. | mandatory | 7.6.5 | 0..1 |
  8. | must | 7.5.3 | 0..n |
  9. | reference | 7.21.4 | 0..1 |
  10. | status | 7.21.2 | 0..1 |
  11. | when | 7.21.5 | 0..1 |
  12. +--------------+---------+-------------+

7.10.2. XML编码规则

一个anydata节点被编码为一个XML元素。 元素的本地名称是anydata的标识符,其名称空间是模块的XML名称空间(请参阅第7.1.3节)。 anydata节点的值是一组节点,它们被编码为anydata元素的XML子元素。

7.10.3. NETCONF <edit-config>操作

一个anydata节点被视为一个不透明的数据块。 这些数据只能被整体修改。

NETCONF服务器将忽略anydata节点子元素上的任何“operation”属性。

NETCONF服务器处理<edit-config>请求时,anydata节点的过程元素如下所示:

  • 如果操作是“merge”或“replace”,则创建该节点(如果该节点不存在),并将其值设置为XML RPC数据中找到的anydata节点的子元素。

  • 如果操作是“create”,则创建该节点(如果该节点不存在),并将其值设置为XML RPC数据中找到的anydata节点的子元素。 如果节点已经存在,则返回“data-exists”错误。

  • 如果操作是“delete”,则该节点将被删除(如果存在)。 如果节点不存在,则返回“data-missing”错误。

7.10.4. 使用示例

鉴于以下“anydata”声明:

  1. list logged-notification {
  2. key time;
  3. leaf time {
  4. type yang:date-and-time;
  5. }
  6. anydata data;
  7. }

以下是这种列表实例的有效编码:

  1. <time>2014-07-29T13:43:12Z</time>
  2. <data>
  3. <notification
  4. xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
  5. <eventTime>2014-07-29T13:43:01Z</eventTime>
  6. <event xmlns="urn:example:event">
  7. <event-class>fault</event-class>
  8. <reporting-entity>
  9. <card>Ethernet0</card>
  10. </reporting-entity>
  11. <severity>major</severity>
  12. </event>
  13. </notification>
  14. </data>
  15. </logged-notification>