Из того, что вы описываете, мне кажется, что вы хотите создать многократно используемое определение структуры с двумя полями: одно uri
и список addresses
. Лучшим инструментом для этой работы является группировка YANG. В RFC говорится, что «группировка похожа на «структуру» или «запись» в обычных языках программирования». Следующая группа должна быть тем, что вы ищете:
grouping mapping {
leaf uri {
type inet:uri;
}
list address {
type inet:IpAddress;
}
}
Затем вы можете сослаться на такой grouping
с помощью оператора uses
, как в следующих примерах:
container specific_mapping {
uses mapping;
}
а также
list my_mapping {
key "uri";
uses mapping;
}
Следующие экземпляры документов совместимы с указанными выше:
<specific_mapping>
<uri>some uri</uri>
<address>address 1</address>
<address>address 2</address>
</specific_mapping>
а также
<my_mapping>
<uri>some uri</uri>
<address>address 1</address>
<address>address 2</address>
</my_mapping>
<my_mapping>
<uri>other uri</uri>
<address>address 3</address>
<address>address 4</address>
</my_mapping>
Оператор typedef
объясняется в этом разделе YANG 1.1. RFC 7950. Он предназначен для указания типа одиночного листа, поэтому его нельзя использовать для создания желаемой структуры. Когда вы используете typedef
, вы определяете набор всех возможных значений для этого типа. Это называется пространство значений. union
встроенный тип, который вы пытались использовать, предназначен для объединения ценности пробелы типов, перечисленных внутри него. list
не является типом, поэтому его здесь нельзя использовать.
person
Piotr Babij
schedule
17.10.2017