1 基本概念
YANG是数据模块化语言,NETCONF、NETCONF RPCs和NERCONF通知(NETCONF notification)操纵它来模块化配置数据和状态数据。YANG是一种为NETCONG 协议模块化数据的语言,YANG模块定义了可被基于NETCONF操作使用的层次化结构的数据它提供了NETCONF客户端和服务器之间完全的数据描述。
一个模块可以从其他节点中导入(import)数据,也可以从子节点中包含(include)数据。
YANG采用与c、c++等编程语言类似的语法,以保证可读性。YANG模块采用的是UTF-8字符集编码。
YANG模型被解析成一系列的标记,这种标记化的语言既简单又强力。YANG中的标记(Tokens)可以是一个关键字,一个字符串,一个分号或是大括号。其中,字符串可以是引用字符串也可以是非引用字符串。关键词既是已定义的YANG关键词也是前缀的标识符,用冒号(:)隔开。再跟上语言扩展关键字。关键字大小写敏感。
关键词:MUST,MUST NOT,REQUIRED,SHALL,SHALL NOT,SHOULD,SHOULD NOT,
RECOMMENDED,NOT RECOMMENDED,MAY,OPERATIONS
1.1 术语
l anyxml:包含未知XML数据块的数据节点
l augment:向已存在的结构节点添加新的结构节点
l Base type:一种既可能是内置类型又可能是另一种派生类型的派生类型
l Built-in type:用YANG语言定义的YANG数据类型,如uint32和string
l Choice:仅有一个有效标志替换的结构节点(A schema node where only one of a number of identified alternatives is valid.)
l Configuration data:用来从初始默认的状态转换到当前状态的一组可写数据
l Conformance(一致性):衡量设备遵循数据模型准确度
l Container(容器):在数据树中至多存在一个实例的内部数据节点。容器没有值,但是包含一组子节点。(An interior data node that exists in at most one instance in the data tree. A container has no value, but rather a set of child nodes.)
l Data definition statement:定义新数据节点的语句。如:Container,leaf,leaf-list,list,choice,case,augment,uses,anyxml。
l Data model:描述数据如何表示和访问的数据模型
l Data node:结构树中的一个节点,能在数据树中实例化。如:container,leaf,leaf-list,list,anyxml。
l Data tree:设备中的配置和状态数据的实例化树
l Derived type:从内置类型派生出来的派生类型(如:uint32)或者其他派生类型。
l Device deviation(设备偏差):设备实现模块故障(A failure of the device to implement the module faithfully.)
l Extension:non-YANG语义语句扩展。扩展语句定了新的语句来表达新的语义。
l Feature:一种标记一部分模块作为可选的机制。可用特性名标记定义,但这只在支持这种特性的的设备上合法。
l Grouping:可复用的结构节点,可在本地模块、包含该节点的模块和其他从该节点导入的模块中使用。Grouping语句并不是数据定义语句,因此并没有在结构树中定义任何节点。
l Identifier(标识符):通过命名来区分和确定不同种类的YANG项目
l Instance identifier:在数据树中确定实际节点的机制。
l Interior node(内部节点):有层次结构的节点,但不是叶子节点。
l Leaf:在数据树中至多存在一个实例的数据节点。叶子节点有值,但是不包含子节点(区别于container)
l Leaf-list:类似于叶子节点,但leaf-list定义了一组唯一标志的节点而不是单一节点。每个节点都有值但没有子节点。
l List:可在数据树中存在多个实例的数据节点。List中没有值但是有一组子节点。
l Module:YANG模块中定义的具有层次化结构的节点,能进行基于NERCONF的操作。该节点定义的和由该节点导入或从任何地方包含进来的,模块是可以自包含和可编译的。(With its definitions and the definitions it imports or includes from elsewhere, a module is self-contained and "compilable".)
l RPC:远程过程调用,在NETCONF中使用。(A specific Remote Procedure Call, as used within the NETCONF protocol.)
l RPC operation:特定的RPC,也叫做一次协议操作。
l Schema node:结构树中的一个节点。如:container,leaf,leaf-list,list,choice,case,rpc,input,output,notification,anyxml。
l Schema node identifier:用于识别结构树中的特定的节点的机制。
l Schema tree:模块中特定的层次及结构定义。(The definition hierarchy specified within a module.)
l State data:系统中除配置数据以外的额外数据,如:只读状态信息和收集统计信息。
l Submodule:部分模块定义,由derived types,grouping,data nodes,RPCs,notifications组成的模块。YANG模块可以由多个子模块构成。
l Top-level data node:一种数据节点,在该节点和某个模块或子模块声明之间没有其他数据节点。
l Uses:uses语句被用来实例化一组在grouping语句中定义的结构节点,实例化的节点可以进一步的完善和扩充,以适应其他任何特定的需求。
1.2 XML的命名空间:
所有在模块中指定的YANG定义都会绑定到一个特定的XML namespace,这时全局唯一的URI。NETCONF客户端或者服务器在数据进行XML编码的时候使用namespace
”namespace”语句的argument(参数?)是XML namespace的URI(统一资源标识符)
Namespace语句
Namespace语句定义了XML的命名空间,所有模块定义的标识符都必须参照namespace,除了在grouping中定义的数据节点的标志符。“namespace”语句的参数是namespace的URI
强制性节点(Mandatory Nodes):
l 含有“mandatory”语句的Leaf,choice,anyxml节点的值为turue ;
l 含有“min-elements”语句的leaf-list节点的值远大于零 ;
l 还有“presence”语句的container节点至少含有一个强制子节点 。
YANG中允许可复用grouping节点的定义(YANG permints the definition of resuable groupings of node)这些groupings的实例可以改进和增加节点。
Tips:
1、在使用数据定义语句时会在结构树中定义相应的节点。
2、为什么要有派生类型,派生类型有什么作用?