Ограничить проверку увеличения индекса в модели Ян

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


person J.K.Mahapatra    schedule 23.05.2018    source источник


Ответы (1)


Вы можете добавить ограничение must, которое гарантирует это.

module increasing-index {
    namespace "org:example:increasing-index";
    prefix "oeii";

    list item {    
        must "not(preceding-sibling::item) or preceding-sibling::item/index < index" {
            error-message "Items must be ordered by index value in increasing order.";
        }
        key index;
        leaf index {
            type uint32;             
        }
    }
}

Условие not(preceding-sibling::item) or preceding-sibling::item/index < index выше означает следующее: либо нет предшествующих элементов, либо нет предшествующих элементов, значение индекса которых меньше значения индекса текущего элемента. Условию должен удовлетворять каждый элемент в списке.

<?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <oeii:item xmlns:oeii="org:example:increasing-index">
    <oeii:index>12</oeii:index>
  </oeii:item>
  <oeii:item xmlns:oeii="org:example:increasing-index">
    <oeii:index>13</oeii:index>
  </oeii:item>
  <oeii:item xmlns:oeii="org:example:increasing-index">
    <oeii:index>10</oeii:index>
  </oeii:item>
</config>
Error at (9:3): failed assert at "/nc:config/oeii:item": Items must be ordered by index value in increasing order.

Примечание: если список равен ordered-by system (по умолчанию), устройство, реализующее модель, может упорядочивать записи списка любым способом - даже без такого ограничения оно может упорядочивать, увеличивая значения индекса, поэтому, возможно, такое ограничение является избыточным семантическим. сахар.

person predi    schedule 23.05.2018
comment
Я пробовал ваш модуль янь, но он выдает ошибку как неожиданный символ (символы) 'p' (предшествующий-sibli). Нужно ли мне импортировать какой-либо другой модуль для поддержки этого. Я пробовал использовать инструмент yanglint. - person J.K.Mahapatra; 23.05.2018
comment
@ J.K.Mahapatra, мой пример представляет собой чистый действительный код YANG и должен компилироваться / проверяться в любом инструменте, совместимом с RFC6020 / RFC7950. - person predi; 23.05.2018