7.10. “anydata
”声明
“anydata
”语句在模式树中定义一个内部节点。它需要一个参数,它是一个标识符,后面是一个包含详细anydata
信息的子状态块。
“anydata
”语句用于表示可以用YANG
建模的未知节点集合,但anyxml
除外,但是在模块设计时不知道数据模型。对于任何数据内容的数据模型,虽然不是必需的,但是可以通过协议信令或本文档范围之外的其他手段来获知。
anydata
可能有用的示例是在设计时不知道具体通知的收到通知的列表。
anydata
节点不能被扩充(见7.17节)。
一个anydata
节点存在于数据树的零个或一个实例中。
一个实现可能会或可能不知道用于建模anydata
节点的特定实例的数据模型。
由于anydata
的使用限制了内容的操作,所以不应该使用“anydata
”语句来定义配置数据。
7.10.1. anydata
的子语句
+--------------+---------+-------------+
| 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.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
”声明:
list logged-notification {
key time;
leaf time {
type yang:date-and-time;
}
anydata data;
}
以下是这种列表实例的有效编码:
<time>2014-07-29T13:43:12Z</time>
<data>
<notification
xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2014-07-29T13:43:01Z</eventTime>
<event xmlns="urn:example:event">
<event-class>fault</event-class>
<reporting-entity>
<card>Ethernet0</card>
</reporting-entity>
<severity>major</severity>
</event>
</notification>
</data>
</logged-notification>