Как смоделировать список в YANG без общих дочерних элементов? - PullRequest
1 голос
/ 21 октября 2019

У меня есть XML, который выглядит следующим образом.

<c>
    <node>
       <id1>value</id1>
       <id2>value</id2>
    </node>
    <node>
       <id3>value</id3>
       <id4>value</id4>
    </node>
</c>

Как этот список можно смоделировать в YANG? Проблема здесь в том, что для каждого списка требуется ключ. Что я пытался сделать:

container c {
  list node {
    key ""; /* What is the key? */
    leaf id1 {
      type string;
    }
    leaf id2{
      type string;
    }
    leaf id3 {
      type string;
    }
    leaf id4 {
      type string;
    }
  }
}

1 Ответ

1 голос
/ 22 октября 2019

Нет хорошего способа смоделировать это в ЯНГ. Как вы говорите, для каждого (config true) списка требуется ключ. Обозначение листа в качестве ключа делает этот лист обязательным, поэтому вы не можете получить экземпляр документа, как в своем примере - если вы сделаете все четыре листа ключами (что можно сделать, поскольку может быть несколько ключей списка), каждый узел имеетчтобы все они были действительны, и сделать из них только пару из них ключами, это тоже не работает для вашего примера.

Обратите внимание, что в списке ложных настроек не должно быть никаких ключей. Если вы не моделируете конфигурацию (или данные, связанные с NETCONF / RESTCONF), это может быть вашим выходом.

list node {
  config false;
  // ...
}

В противном случае у вас нет выбора - вам нужно ввести еще один лист, который будет служить идентификатором длязапись.

В любом случае, вы могли бы использовать оператор unique (я полагаю, основываясь на именах ваших листьев), чтобы сделать записи в списке уникальными. Он работает аналогично key, но элементы не должны появляться в документе экземпляра, если вы его используете - для этого требуется только, чтобы комбинация узлов, которые появляются в экземпляре, была уникальной для всех записей списка.

list node {
  config false;
  unique "id1 id2 id3 id4";
  // ...
}

Примечание: есть похожий ответ на вопрос с некоторыми дополнительными подробностями.

...