YANG в значительной степени опирается на концепцию, известную как «пространства имен», которая вытекает из соглашений об именах XML. Каждое пространство имен имеет уникальный идентификатор ресурса и позволяет определениям (в разных пространствах имен) иметь одинаковые имена на одних и тех же уровнях определения, избегая при этом конфликтов имен. Когда вы определяете модуль YANG, вы фактически определяете пространство имен.
Оператор import
используется для доступа к определениям из стороннего пространства имен (другого модуля), а оператор include
вводит механизм, который позволяет логически разделить одно пространство имен (один модуль) на несколько файлов, удобно названных module
и submodules
. Для включений всегда существует только один файл модуля, который включает в себя все файлы подмодулей, которые ему принадлежат. Подмодуль может принадлежать только одному модулю и не может быть импортирован (напрямую). Для импортирующего модуля модуль, включающий в себя подмодули, выглядит как единый объект. Подмодули могут включать друг друга, но с версией YANG 1.1 в этом нет необходимости, поскольку подмодуль сразу же получает доступ ко всем определениям во всех подмодулях и модулем, к которому они все принадлежат. В версии YANG 1 вам нужно было явно включать подмодуль, чтобы использовать определения из него в другом подмодуле, при этом никогда не было возможности получить доступ к определениям в модуле, которому они принадлежали.
import
не "встраивает" определения в модуль импорта, в то время как include
делает именно это. Импорт модуля дает вам доступ к его определениям верхнего уровня (типам, группам, идентификаторам, функциям и расширениям) и позволяет вам использовать идентификаторы узлов схемы, которые идентифицируют узлы в импортированном модуле (например, с целью дополнения и отклонения). .
Доступ к определениям из чужого пространства имен всегда осуществляется через prefix
, которые являются частью определения оператора import
. Определения, полученные из include, не нуждаются в префиксе при использовании, а если да, то имеют префикс включающего модуля (или подмодуля).
«Компиляторы» YANG обычно обрабатывают эти файлы, когда они сталкиваются с оператором import
или include
. Они должны обрабатывать их, чтобы иметь возможность разрешать определения в операторах тела определяющего модуля. Вот почему эти операторы должны появляться в разделе заголовка модуля.
В спецификации YANG есть целый раздел, посвященный модулям и подмодулям, где вы можно почитать по теме.
person
predi
schedule
24.08.2018