7.11. “anyxml”声明

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

anyxml”语句用于表示未知的XML块。 XML没有限制。例如,在RPC回复中这可能很有用。 NETCONF中的<get-config>操作中的<filter>参数就是一个例子。

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

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

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

应该指出的是,在YANG版本1中,“anyxml”是唯一可以模拟未知数据层次的声明。在很多情况下,这个未知的数据层次实际上是在YANG中建模的,但具体的YANG数据模型在设计时并不知道。在这些情况下,建议使用“anydata”(第7.10节)而不是“anyxml”。

7.11.1. anyxml子语句

  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.11.2. XMl编码规则

一个anyxml节点被编码为一个XML元素。 元素的本地名称是anyxml的标识符,其名称空间是模块的XML名称空间(请参阅第7.1.3节)。 anyxml节点的值被编码为这个元素的XML内容。

请注意,编码中使用的任何XML前缀对于每个实例编码都是本地的。 这意味着相同的XML可能会被不同的实现编码。

7.11.3. NETCONF <edit-config>操作

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

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

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

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

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

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

7.11.4. 使用示例

鉴于以下“anyxml”声明:

  1. anyxml html-info;

以下是相同的anyxml值的两个有效的编码:

  1. <html-info>
  2. <p xmlns="http://www.w3.org/1999/xhtml">
  3. This is <em>very</em> cool.
  4. </p>
  5. </html-info>
  6. <html-info>
  7. <x:p xmlns:x="http://www.w3.org/1999/xhtml">
  8. This is <x:em>very</x:em> cool.
  9. </x:p>
  10. </html-info>