YANG

YANG（ヤン、）は、データモデル言語の一種である。NETCONF や RESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。
特徴.
モジュール構造.
モジュールは YANGモデルの単位である。
YANGでは、ネットワーク機器などのモデル化対象の一つを単一のモジュールでモデル化することもできるし、機能ごとに別々のモジュールでモデル化し、それを一つの親モジュールに含めてまとめあげることでモデル化することも可能である。複数のモジュールを包含関係で結びつける場合、他のモデルに含められるほうをサブモジュールという。サブモジュールはまたさらにそのサブモジュールを含むことができる。
通常は、モジュールまたはサブモジュール単位で個別のファイルに記述することとされている。親モジュールがサブモジュールを含むときは、includeステートメントを用いる。
データを木構造として定義.
YANGには、データ構造をモデルするために四種類のステートメントを定義している。これらを組み合わせることで、木構造を持つデータ構造を定義できる。
状態のモデル化.
YANGモデルでは、機器の設定を保持するノードの他に、機器の状態値を保持するノードを定義することができる。これはNETCONFのget操作で機器から取得した状態値を格納する、といった使われ方を想定している。状態ノードはconfigステートメントをfalseとしてモデル化する。
組み込まれたデータ型.
いくつかのデータ型があらかじめ定義されている。
データ型の導出されたデータ型.
組み込まれたデータ型や他の導出されたデータ型を組み合わせたり、数値の範囲などを制限することにより、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へのマッピングについては、 RFC 6110 で規定されている。
JSON.
JSON形式への変換方法が RFC 7951 で規定されている。
仕様.
YANGは、以下のRFCで仕様が規定されている。