4.1. 功能概述
YANG
是最初设计用于为NETCONF
协议建模的语言。 YANG
模块定义了可用于基于NETCONF
的操作(包括配置,状态数据,RPC
和通知)的数据层次结构。这允许在NETCONF
客户端和服务器之间发送的所有数据的完整描述。虽然不在本规范的范围之内,但是也可以使用除NETCONF
以外的协议。
YANG
将数据的分层组织模型化为一个树,其中每个节点都有一个名称,或者一个值或一组子节点。YANG
提供了对节点的清晰简洁的描述,以及这些节点之间的交互。
YANG
将数据模型组织成模块和子模块。模块可以从其他外部模块导入定义,并可以包含子模块的定义。可以增加层次结构,允许一个模块将数据节点添加到另一个模块中定义的层次结构中。这种增加可以是有条件的,只有在满足某些条件的情况下才会出现新的节点。
YANG
数据模型可以描述对数据执行的约束,根据层次结构中其他节点的存在或值限制节点的存在或值。这些约束可以由客户端或服务器强制执行。
YANG
定义了一组内置的类型,并且有一个类型机制,通过它可以定义附加的类型。派生类型可以使用像客户机或服务器强制执行的范围或模式限制等机制来限制其基本类型的有效值集合。他们还可以定义使用派生类型的用法约定,例如包含主机名的基于字符串的类型。
YANG
允许定义可重复使用的节点组。这些分组的使用可以改进或增加节点,从而使节点适合其特定需求。派生类型和分组可以在一个模块中定义,并在相同的模块或导入它的其他模块中使用。
YANG
数据层次结构包括定义列表,其中列表条目通过将它们彼此区分的键来标识。这样的列表可以被定义为由用户排序或由系统自动排序。对于用户排序列表,操作定义为操作列表条目的顺序。
YANG
模块可以翻译成称为YANG Independent Notation
(YIN
)(第13节)的等效XML
语法,允许使用XML
解析器的应用程序和可扩展样式表语言转换(XSLT
)脚本在模型上运行。从YANG
到YIN
的转换在语义上是无损的,所以YIN
中的内容可以回到YANG
中。
YANG
是一个可扩展的语言,允许标准组织,供应商和个人定义扩展。语句语法允许这些扩展以自然的方式与标准的YANG
语句共存,而在YANG
模块中的扩展足以让读者注意到它们。
YANG
拒绝解决所有可能的问题的倾向,限制了问题空间,允许表达网络管理协议(如NETCONF
)的数据模型,而不是任意的XML
文档或任意的数据模型。
YANG
尽可能保持与简单网络管理协议(SNMP
)SMIv2
(管理信息结构版本2 [RFC2578] [RFC2579])的兼容性。基于SMIv2
的MIB
模块可以自动翻译成YANG
模块进行只读访问[RFC6643]。然而,YANG
不关心从YANG
到SMIv2
的逆向翻译。