1

リスト内で葉を一意にする「必須」を作成する方法がわかりません。

これはリーフを含むリストです。このリーフは、このリスト内の他のリーフと同じ値を持たない場合があります。

コードの例:

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 にエラー メッセージをトリガーさせたいと考えています。

4

1 に答える 1

3

その目的のためにリストのuniqueキーワードを持っているので、式に対して頭をぶつける必要はありませんmust。引数には、スペースで区切られた 1 つ以上のスキーマ ノード識別子が必要です。

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

      leaf name {
        type uint32;
      }

      container myContainer {

        leaf myLeaf {
          type uint32;
        }

      }

    }

本当にこれを処理したい場合must(これはすべきではありません)、次のようにすることができます。

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

XPath 関数は、current()チェックされているリーフ (最初のコンテキスト ノード) を返しますが、選択したもの (現在の XPath コンテキスト ノード セット)を.表し、それに適用されます。self::node()

また、注意してください:must制約はアサーションを表します - それは に評価されなければなりませんtrue()> 1したがって、あなたの状態は、あなたが必要とするものとは逆になります。

于 2016-11-23T14:42:38.173 に答える