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>