Обязательный выбор означает, что ровно одна ветвь дела (потомки узла данных дела) ДОЛЖНА существовать в действительном экземпляре документа - RFC ссылается на это с помощью термина "действительные данные".Второй маркер является исключением.
Второй маркер применяется к вложенным выборам - если предок выбора является узлом случая, вы имеете дело с выбором, вложенным в другой выбор.
module choice-case {
yang-version 1.1;
namespace "org:example:choice-case";
prefix "cc";
container top {
choice choice {
case mandatory-choice { // <-- case mentioned in 2nd bullet
choice choice {
mandatory true; // <-- constraint not enforced until f is instantiated
case a-b-c {
leaf a {type string;}
leaf b {type string;}
leaf c {type string;}
}
case d-e {
leaf d {type string;}
leaf e {type string;}
}
}
leaf f {
type string;
}
}
}
}
}
ВВ приведенном выше примере обязательное ограничение выбора не применяется до тех пор, пока лист f
также не будет присутствовать в экземпляре документа.Если будут созданы конечные узлы из ветви a-b-c
или d-e
, ограничение также будет принудительно выполнено, но условие всегда будет выполнено.
Он пытается сказать, что если сначала неКонтейнер присутствия ancestror является узлом дела, тогда ограничение должно применяться, если дело имеет более одного дочернего элемента?
Нет.Ограничение применяется, если в экземпляре документа есть экземпляры таких потомков.
По сути, это означает, что я должен применять обязательное, если в этом случае используются случаи?
Обязательные ограничения применяются к документам экземпляра, а не к схеме - схема диктует только ограничения.uses
никогда не будет существовать в контексте, где применяются обязательные ограничения.В этом контексте могут существовать только созданные экземпляры узлов данных, определенные ссылочной группировкой, и это может учитываться при применении ограничения.