YANG

YANG（ヤン、）は、データモデル言語の一種である。NETCONF や RESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。

 特徴 
 モジュール構造 
モジュールは YANGモデルの単位である。

YANGでは、ネットワーク機器などのモデル化対象の一つを単一のモジュールでモデル化することもできるし、機能ごとに別々のモジュールでモデル化し、それを一つの親モジュールに含めてまとめあげることでモデル化することも可能である。複数のモジュールを包含関係で結びつける場合、他のモデルに含められるほうをサブモジュールという。サブモジュールはまたさらにそのサブモジュールを含むことができる。

通常は、モジュールまたはサブモジュール単位で個別のファイルに記述することとされている。親モジュールがサブモジュールを含むときは、includeステートメントを用いる。

 データを木構造として定義 
YANGには、データ構造をモデルするために四種類のステートメントを定義している。これらを組み合わせることで、木構造を持つデータ構造を定義できる。

leaf
ある型を持つ単一のスカラー値ノードを定義するためのステートメントである。leafで定義されたデータノードは下位構造を持つことができない。
leaf-list
同じ型を持つ値の配列ノードを定義するためのステートメントである。leaf-listに格納されるノード値は、一意でなくてはならない。
container
下位のノードをまとめるためのステートメントである。木構造における枝の役割を果たす。containerノード自身は値を持たない。
list
同種の下位構造を複数個保持するためのステートメントである。listにはその直下に keyステートメントを持ち、これによりそのリストにおける主キーを格納するためのノードを定義する。この主キーに格納されるノード値は、そのlist内で一意でなくてはならない。

 状態のモデル化 
YANGモデルでは、機器の設定を保持するノードの他に、機器の状態値を保持するノードを定義することができる。これはNETCONFのget操作で機器から取得した状態値を格納する、といった使われ方を想定している。状態ノードはconfigステートメントをfalseとしてモデル化する。

 組み込まれたデータ型 
いくつかのデータ型があらかじめ定義されている。
型名意味 int8  -128から127までの整数値を表す型 int16  -2147483648から2147483647までの整数値を表す型 int32  -9223372036854775808から9223372036854775807までの整数値を表す型 int64  -128から127までの整数値を表す型 uint8  0から255までの整数値を表す型 uint16  0から65535までの整数値を表す型 uint32  0から4294967295までの整数値を表す型 uint64  0から18446744073709551615 までの整数値を表す型 decimal64  小数値型 string  文字列型 boolean  真偽値型 enumeration  列挙型 bits  ビット値（0 or 1）を並べた値を表す型 leafref  他のleaf値を参照するための型 identityref  他のidentity値を参照するための型 empty  値ではなく、ノードの有無を表現するための型 union  その下位で定義された型のいずれかを持つ型

 データ型の導出されたデータ型 
組み込まれたデータ型や他の導出されたデータ型を組み合わせたり、数値の範囲などを制限することにより、YANGモデル内で新たな型を定義し、ノード値の型として用いることができる。この型の定義にはtypedefステートメントを用いる。

 グループ化されたノードの再利用 
groupingステートメントを用いてノードのまとまりをグループ化することで、モデル内で再利用することができる。これにより、モデルのいくつかの部分が共通するデータ構造を持つ場合に、定義を共有できる。

 モデルの拡張 
あるモデルを拡張するため、augmentステートメントを使って別のモジュールを追加することができる。ある機器の設定が、全体的にはある標準規格に従っているが、一部にそのベンダー固有の設定が追加されているような場合をモデル化するときに用いることができる。

 RPCのモデル化 
rpcステートメントを用いることで、NETCONFなどRPCに対するインターフェイスをモデル化できる。入力パラメタと出力情報の型をそれぞれinputステートメントとoutputステートメントで定義する。

 通知のモデル化 
機器から何らかの通知が行われる場合に、その通知情報の型を定義することができる。

 他のデータ形式への変換 
 XMLまたはYIN 
XMLの解析ができるアプリケーションやネットワーク機器での利用を想定し、YANGモデルはそれと等価な内容をXML形式で表現できる。この形式は YIN（YANG Independent Notation）と呼ばれる。

 DSDL 
NETCONFはネットワーク設定の管理をXMLメッセージで行うものであるため、その内容を規定するYANGモデルをDSDLで表現することを考えるのは自然なことである。そのYANGモデルからDSDLへのマッピングについては、  で規定されている。

 JSON 
JSON形式への変換方法が  で規定されている。

 仕様 
YANGは、以下のRFCで仕様が規定されている。
  ：YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)
  ：The YANG 1.1 Data Modeling Language

 実装 
 pyangpyang：Pythonで書かれたYANGツール。モデルの検証、他形式への変換。
 YangExplorerYangExplorerFlashで書かれたモデルビューア。モデルの木構造表示やRPCの実行。

 脚注 

 公式サイト 

 出典 

 外部リンク 
 YANG central - ツールやチュートリアルなど

Category:コンピュータ言語
Category:データモデリング
6020