4.1. 功能概述

YANG是最初设计用于为NETCONF协议​​建模的语言。 YANG模块定义了可用于基于NETCONF的操作(包括配置,状态数据,RPC和通知)的数据层次结构。这允许在NETCONF客户端和服务器之间发送的所有数据的完整描述。虽然不在本规范的范围之内,但是也可以使用除NETCONF以外的协议。

YANG将数据的分层组织模型化为一个树,其中每个节点都有一个名称,或者一个值或一组子节点。YANG提供了对节点的清晰简洁的描述,以及这些节点之间的交互。

YANG将数据模型组织成模块和子模块。模块可以从其他外部模块导入定义,并可以包含子模块的定义。可以增加层次结构,允许一个模块将数据节点添加到另一个模块中定义的层次结构中。这种增加可以是有条件的,只有在满足某些条件的情况下才会出现新的节点。

YANG数据模型可以描述对数据执行的约束,根据层次结构中其他节点的存在或值限制节点的存在或值。这些约束可以由客户端或服务器强制执行。

YANG定义了一组内置的类型,并且有一个类型机制,通过它可以定义附加的类型。派生类型可以使用像客户机或服务器强制执行的范围或模式限制等机制来限制其基本类型的有效值集合。他们还可以定义使用派生类型的用法约定,例如包含主机名的基于字符串的类型。

YANG允许定义可重复使用的节点组。这些分组的使用可以改进或增加节点,从而使节点适合其特定需求。派生类型和分组可以在一个模块中定义,并在相同的模块或导入它的其他模块中使用。

YANG数据层次结构包括定义列表,其中列表条目通过将它们彼此区分的键来标识。这样的列表可以被定义为由用户排序或由系统自动排序。对于用户排序列表,操作定义为操作列表条目的顺序。

YANG模块可以翻译成称为YANG Independent NotationYIN)(第13节)的等效XML语法,允许使用XML解析器的应用程序和可扩展样式表语言转换(XSLT)脚本在模型上运行。从YANGYIN的转换在语义上是无损的,所以YIN中的内容可以回到YANG中。

YANG是一个可扩展的语言,允许标准组织,供应商和个人定义扩展。语句语法允许这些扩展以自然的方式与标准的YANG语句共存,而在YANG模块中的扩展足以让读者注意到它们。

YANG拒绝解决所有可能的问题的倾向,限制了问题空间,允许表达网络管理协议(如NETCONF)的数据模型,而不是任意的XML文档或任意的数据模型。

YANG尽可能保持与简单网络管理协议(SNMPSMIv2(管理信息结构版本2 [RFC2578] [RFC2579])的兼容性。基于SMIv2MIB模块可以自动翻译成YANG模块进行只读访问[RFC6643]。然而,YANG不关心从YANGSMIv2的逆向翻译。