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子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| config | 7.21.1 | 0..1 |
| description | 7.21.3 | 0..1 |
| if-feature | 7.20.2 | 0..n |
| mandatory | 7.6.5 | 0..1 |
| must | 7.5.3 | 0..n |
| reference | 7.21.4 | 0..1 |
| status | 7.21.2 | 0..1 |
| when | 7.21.5 | 0..1 |
+--------------+---------+-------------+
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”声明:
anyxml html-info;
以下是相同的anyxml值的两个有效的编码:
<html-info>
<p xmlns="http://www.w3.org/1999/xhtml">
This is <em>very</em> cool.
</p>
</html-info>
<html-info>
<x:p xmlns:x="http://www.w3.org/1999/xhtml">
This is <x:em>very</x:em> cool.
</x:p>
</html-info>