YANG,叶子在列表中必须是唯一的

YANG, leaf must be unique in a list

我不知道如何为叶子创建一个 "must" 使其在列表中独一无二。

这是一个包含叶子的列表,此叶子的值可能与列表中任何其他叶子的值不同。

代码示例:

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 触发错误消息。

您有列表的 unique 关键字用于此目的,无需 bash 您反对 must 表达式。它在其参数中使用一个或多个 space 分隔的模式节点标识符。

    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;
    }

current() XPath 函数 returns 正在检查的叶子(初始上下文节点),而 . 代表 self::node() 并应用于您选择的任何内容(当前XPath 上下文节点集)。

另请注意:must 约束代表一个断言 - 它必须评估为 true(),否则实例将被视为无效。因此,您的 > 1 条件将达到您所要求的相反。