В чем разница между оператором include и import в NETCONF (файлы .Yin/Yang)

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

«Импортирует» ли он весь файл в файл, который включает его, и если да, то будет ли он прочитан до файла, включающего его ...?

Пожалуйста помоги :)


person Spdollaz    schedule 23.08.2018    source источник


Ответы (1)


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