module ietf-yang-schema-mount {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount";
prefix yangmnt;
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-yang-library {
prefix yanglib;
reference
"RFC 7895: YANG Module Library";
}
organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web:
WG List:
Editor: Martin Bjorklund
Editor: Ladislav Lhotka
";
description
"This module defines a YANG extension statement that can be used
to incorporate data models defined in other YANG modules in a
module. It also defines operational state data that specify the
overall structure of the data model.
Copyright (c) 2017 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and
'OPTIONAL' in the module text are to be interpreted as described
in RFC 2119 (https://tools.ietf.org/html/rfc2119).
This version of this YANG module is part of RFC XXXX
(https://tools.ietf.org/html/rfcXXXX); see the RFC itself for
full legal notices.";
revision 2017-06-16 {
description
"Initial revision.";
reference
"RFC XXXX: YANG Schema Mount";
}
/*
* Extensions
*/
extension mount-point {
argument name;
description
"The argument 'name' is a YANG identifier, i.e., it is of the
type 'yang:yang-identifier'.
The 'mount-point' statement MUST NOT be used in a YANG
version 1 module, neither explicitly nor via a 'uses'
statement.
The 'mount-point' statement MAY be present as a substatement
of 'container' and 'list', and MUST NOT be present elsewhere.
If a mount point is defined in a grouping, its name is bound
to the module where the grouping is used.
A mount point defines a place in the node hierarchy where
other data models may be attached. A server that implements a
module with a mount point populates the
/schema-mounts/mount-point list with detailed information on
which data models are mounted at each mount point.";
}
/*
* Groupings
*/
grouping mount-point-list {
description
"This grouping is used inside the 'schema-mounts' container and
inside the 'schema' list.";
list mount-point {
key "module name";
description
"Each entry of this list specifies a schema for a particular
mount point.
Each mount point MUST be defined using the 'mount-point'
extension in one of the modules listed in the corresponding
YANG library instance with conformance type 'implement'. The
corresponding YANG library instance is:
- standard YANG library state data as defined in RFC 7895,
if the 'mount-point' list is a child of 'schema-mounts',
- the contents of the sibling 'yanglib:modules-state'
container, if the 'mount-point' list is a child of
'schema'.";
leaf module {
type yang:yang-identifier;
description
"Name of a module containing the mount point.";
}
leaf name {
type yang:yang-identifier;
description
"Name of the mount point defined using the 'mount-point'
extension.";
}
leaf config {
type boolean;
default "true";
description
"If this leaf is set to 'false', then all data nodes in the
mounted schema are read-only (config false), regardless of
their 'config' property.";
}
choice schema-ref {
description
"Alternatives for specifying the schema.";
leaf inline {
type empty;
description
"This leaf indicates that the server has mounted
'ietf-yang-library' and 'ietf-schema-mount' at the mount
point, and their instantiation (i.e., state data
containers 'yanglib:modules-state' and 'schema-mounts')
provides the information about the mounted schema.";
}
list use-schema {
key "name";
description
"Each entry of this list contains a reference to a schema
defined in the /schema-mounts/schema list.";
leaf name {
type leafref {
path "/schema-mounts/schema/name";
}
description
"Name of the referenced schema.";
}
leaf-list parent-reference {
type yang:xpath1.0;
description
"Entries of this leaf-list are XPath 1.0 expressions
that are evaluated in the following context:
- The context node is the root node of the parent data
tree.
- The accessible tree is the parent data tree
*without* any nodes defined in modules that are
mounted inside the parent schema.
- The context position and context size are both equal
to 1.
- The set of variable bindings is empty.
- The function library is the core function library
defined in [XPath] and the functions defined in
Section 10 of [RFC7950].
- The set of namespace declarations is defined by the
'namespace' list under 'schema-mounts'.
Each XPath expression MUST evaluate to a nodeset
(possibly empty). For the purposes of evaluating XPath
expressions whose context nodes are defined in the
mounted schema, the union of all these nodesets
together with ancestor nodes are added to the
accessible data tree.";
}
}
}
}
}
/*
* State data nodes
*/
container schema-mounts {
config false;
description
"Contains information about the structure of the overall
mounted data model implemented in the server.";
list namespace {
key "prefix";
description
"This list provides a mapping of namespace prefixes that are
used in XPath expressions of 'parent-reference' leafs to the
corresponding namespace URI references.";
leaf prefix {
type yang:yang-identifier;
description
"Namespace prefix.";
}
leaf uri {
type inet:uri;
description
"Namespace URI reference.";
}
}
uses mount-point-list;
list schema {
key "name";
description
"Each entry specifies a schema that can be mounted at a mount
point. The schema information consists of two parts:
- an instance of YANG library that defines YANG modules used
in the schema,
- mount-point list with content identical to the top-level
mount-point list (this makes the schema structure
recursive).";
leaf name {
type string;
description
"Arbitrary name of the schema entry.";
}
uses yanglib:module-list;
uses mount-point-list;
}
}
}