2016-11-23 4 views
1

リスト内で一意にする葉のために "必須"を作成する方法を理解できません。YANG、葉はリスト内で一意でなければなりません

これは、その中に葉があるリストです。この葉は、このリスト内の他の葉と同じ値を持つことはできません。コードの

例:

list myList { 
    key name; 

    leaf name { 
    type uint32; 
    } 

    container myContainer { 

    leaf myLeaf { 
     type uint32; 
    } 
    must "count(/myList/myContainer/myLeaf = .) > 1" { //Dont know how to create this must function. 
     error-message "myLeaf needs to be unique in the myList list"; 
    } 

    } 

} 

だから私はすでに、現在の値ではmyListの要素が存在する場合myLeafは、エラー・メッセージをトリガします。

答えて

2

あなたはリストのuniqueというキーワードを持っています。mustの表現から頭を浮かべる必要はありません。その引数には、1つ以上のスペースで区切られたスキーマノード識別子が必要です。

list myList { 
     key name; 
     unique "myContainer/myLeaf"; 

     leaf name { 
     type uint32; 
     } 

     container myContainer { 

     leaf myLeaf { 
      type uint32; 
     } 

     } 

    } 

あなたが本当に好きな何かを行うことができます(これはあなたがいけない)mustはこれを処理したい場合:current() XPath関数がチェックされている葉(初期コンテキストノードを返し

leaf myLeaf { 
     must "count(/myList/myContainer/myLeaf[current()=.])=1"; 
     type uint32; 
    } 

)、.self::node()の略で、選択したもの(現在のXPathコンテキストノードセット)に適用されます。

注意:must制約はアサーションを表します - それはtrue()に評価されなければなりません。それ以外の場合、インスタンスは無効とみなされます。あなたの> 1状態は、あなたが必要とするものとは逆の結果になります。

関連する問題