Можете ли вы иметь настраиваемый атрибут в схеме ян?

Я хотел знать, можем ли мы определить настраиваемое поле или атрибут в одном из элементов листа, списка и т. Д. Например: возможно ли это? Как мы можем определить такие поля, если это возможно.

model Animal{

  leaf amphibian{
      type String;
      custom "Frog";     // Custom field which has a value "Frog"
   }
}

person Shrenik Gala    schedule 18.06.2015    source источник


Ответы (1)


"Атрибут" как "новое ключевое слово YANG"

Если под «атрибутом» вы имеете в виду новое ключевое слово YANG, которое имеет для вас особое значение, тогда да. YANG поддерживает расширения. Из RFC6020:

Оператор «extension» позволяет определять новые операторы в языке YANG. Это новое определение оператора может быть импортировано и использовано другими модулями.

Аргумент оператора — это идентификатор, который является новым ключевым словом для расширения, за которым должен следовать блок подоператоров, содержащий подробную информацию о расширении. Назначение оператора «расширение» — определить ключевое слово, чтобы его можно было импортировать и использовать другими модулями.

Расширение можно использовать как обычный оператор YANG, с именем оператора, за которым следует аргумент, если он определен расширением, и необязательный блок подоператоров. Имя оператора создается путем объединения префикса модуля, в котором было определено расширение, двоеточия (":") и ключевого слова расширения без чередующихся пробелов.

extension custom {
  argument object;
  description "A new YANG keyword that carries special semantics.";
}

prefix:custom "Frog"; // usage of an extension

Ключевое слово argument в приведенном выше примере является необязательным подоператором ключевого слова extension и используется для указания того, что новое ключевое слово принимает (указывает) аргумент (строку, например "Frog").

Оператор «аргумент», который является необязательным, принимает в качестве аргумента строку, которая является именем аргумента ключевого слова. Если оператор аргумента отсутствует, ключевое слово не ожидает аргумента при его использовании. 7.17.2

Зачем вам нужен именованный аргумент для нового ключевого слова? YANG может быть отображен на YIN, альтернативный синтаксис, выраженный как XML, и именно здесь это имя становится важным.

Имя аргумента используется в отображении YIN, где оно используется в качестве XML-атрибута или имени элемента, в зависимости от оператора «yin-element» аргумента. 7.17.2

Вы не можете ограничить пространство значений этого аргумента как таковое — компилятор YANG всегда распознает его как строку. Но ничто не мешает вам требовать, чтобы реализации ожидали определенных значений — в конце концов, вы определяете значение нового ключевого слова.

extension custom {
  argument value;
  description 
    "The value of "custom" statement's argument MUST be an integer
    in the range from 1 to 5.";
}

prefix:custom 3;

Операторы описания содержат нормативный текст, поэтому, если ваше расширение содержит подоператор description, утверждающий, что «значение аргумента этого оператора ДОЛЖНО быть целым числом», тогда реализация должна будет учитывать этот текст.

«Атрибут» как в «XML-атрибуте» (или эквивалент JSON)

Если вы имели в виду «атрибут» в экземплярах документов (XML, JSON,...), смоделированных с помощью YANG, то ответ — нет, по большей части. Чистый YANG не поддерживает атрибуты моделирования.

Однако существует опубликованная спецификация расширения YANG, которая позволяет определять такие атрибуты. Подробнее об этом можно прочитать здесь (RFC7952). Расширение называется annotation и используется для определения метаданных YANG, дополнительной информации, которая дополняет данные, которые уже могут быть смоделированы с помощью YANG. Вот пример:

module using-annotation {
  namespace "org:example:using-annotation";
  prefix "ua";

  import ietf-yang-metadata {
    prefix "md";
  }

  md:annotation my-annotation {
    type string;
    description "This is my annotation.";
  }

  container top {
    leaf some-leaf {
      type string;
    }
  }  
}

Это будет действительный экземпляр XML в соответствии с приведенной выше моделью:

  <ua:top xmlns:ua="org:example:using-annotation">
    <ua:some-leaf ua:my-annotation="Yay!">foo</ua:some-leaf>
  </ua:top>

Это позволяет XML-атрибуту быть действительным практически в любом месте.

Чтение RFC7952 также может быть полезно для изучения того, как на самом деле работает оператор extension и как правильно определить расширение YANG.

person predi    schedule 27.11.2015