   module ietf-yang-library {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
     prefix "yanglib";

     import ietf-yang-types {
       prefix yang;
       reference "RFC 6991: Common YANG Data Types.";
     }
     import ietf-inet-types {
       prefix inet;
       reference "RFC 6991: Common YANG Data Types.";
     }
     import ietf-datastores {
       prefix ds;
       reference "I-D.ietf-revised-datastores:
                  Network Management Datastore Architecture.";
     }

     organization
       "IETF NETCONF (Network Configuration) Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/netconf/>
        WG List:  <mailto:netconf@ietf.org>

        Author:   Andy Bierman
                  <mailto:andy@yumaworks.com>

        Author:   Martin Bjorklund
                  <mailto:mbj@tail-f.com>

        Author:   Juergen Schoenwaelder
                  <mailto:j.schoenwaelder@jacobs-university.de>

        Author:   Kent Watsen
                  <mailto:kwatsen@juniper.net>

        Author:   Rob Wilton
                  <rwilton@cisco.com>";

     description
       "This module contains information about the YANG server instance,
        including the modules and datastores the server supports, and
        which modules are present in which datastores.

        Copyright (c) 2018 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
        (http://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX; see
        the RFC itself for full legal notices.";

     // RFC Ed.: update the date below with the date of RFC publication
     // and remove this note.
     // RFC Ed.: replace XXXX with actual RFC number and remove this
     // note.
     revision 2018-01-17 {
       description
         "Added support for multiple datastores.";
       reference
         "RFC XXXX: YANG Library.";
     }
     revision 2016-04-09 {
       description
         "Initial revision.";
       reference
         "RFC 7895: YANG Module Library.";
     }

     /*
      * Typedefs
      */

     typedef revision-identifier {
       type string {
         pattern '\d{4}-\d{2}-\d{2}';
       }
       description
         "Represents a specific date in YYYY-MM-DD format.";
     }

     /*
      * Groupings
      */

     grouping module-identification-leafs {
       description
         "Parameters for identifying YANG modules and submodules.";

       leaf name {
         type yang:yang-identifier;
         mandatory true;
         description
           "The YANG module or submodule name.";
       }
       leaf revision {
         type revision-identifier;
         description
           "The YANG module or submodule revision date.  If no revision
            statement is present in the YANG module or submodule, this
            leaf is not instantiated.";
       }
     }

     grouping location-leaf-list {
       description
         "Common location leaf list parameter for modules and
          submodules.";

       leaf-list location {
         type inet:uri;
         description
           "Contains a URL that represents the YANG schema
            resource for this module or submodule.

            This leaf will only be present if there is a URL
            available for retrieval of the schema for this entry.";
       }
     }

     grouping implementation-parameters {
       description
         "Parameters for describing the implementation of a module.";

       list feature {
         key "name";
         description
           "List of YANG feature names from this module that are
            supported by the server, regardless whether they are defined
            in the module or any included submodule.";
         leaf name {
           type yang:yang-identifier;
           description
             "A feature supported by the server.";
         }
       }
       list deviation {
         key "module";
         description
           "List of YANG deviation modules used by this server to modify
            the conformance of the module associated with this entry.
            Note that the same module can be used for deviations for
            multiple modules, so the same entry MAY appear within
            multiple 'module' entries.";

         leaf module {
           type leafref {
             path "../../../module/name";
           }
           description
             "A module that deviates the module associated with this
              entry.";
         }
       }
     }

     grouping module-set-parameters {
       description
         "A set of parameters that describe a module set.";

       leaf name {
         type string;
         description
           "An arbitrary name of the module set.";
       }
       leaf checksum {
         type string;
         config false;
         mandatory true;
         description
           "A server-generated checksum of the contents of the module
            set.  The server MUST change the value of this leaf if the
            information represented by the module set, except
            'checksum', has changed.";
       }
       list module {
         key "name";
         description
           "An entry in this list represents a module implemented by the
            server with a particular set of supported features and
            deviations.

            The server implements one or more protocol-accessible
            objects defined in the YANG module identified in this entry.
            This includes deviation statements defined in the module.";

         uses module-identification-leafs;

         leaf namespace {
           type inet:uri;
           mandatory true;
           description
             "The XML namespace identifier for this module.";
         }

         uses location-leaf-list;

         list submodule {
           key "name";
           description
             "Each entry represents one submodule within the
              parent module.";
           uses module-identification-leafs;
           uses location-leaf-list;
         }

         uses implementation-parameters;
       }
       list import-only-module {
         key "name revision";
         description
           "An entry in this list indicates that the server imports
            reusable definitions from the specified revision of the
            module, but does not implement any protocol accessible
            objects from this revision.

            Multiple entries for the same module name MAY exist.  This
            can occur if multiple modules import the same module, but
            specify different revision-dates in the import statements.";

         leaf name {
           type yang:yang-identifier;
           description
             "The YANG module name.";
         }
         leaf revision {
           type union {
             type revision-identifier;
             type string {
               length 0;
             }
           }
           description
             "The YANG module or revision date.
              A zero-length string is used if no revision statement
              is present in the YANG module.";
         }
         leaf namespace {
           type inet:uri;
           mandatory true;
           description
             "The XML namespace identifier for this module.";
         }

         uses location-leaf-list;

         list submodule {
           key "name";
           description
             "Each entry represents one submodule within the
              parent module.";

           uses module-identification-leafs;
           uses location-leaf-list;
         }
       }
     }

     grouping yang-library-parameters {
       description
         "The YANG library data structure is represented as a grouping
          so it can be reused in configuration or another monitoring
          data structure.";

       list module-set {
         key name;
         description
           "A set of modules that may be used by one or more schemas.";

         uses module-set-parameters;
       }

       list schema {
         key "name";
         description
           "A datastore schema that may be used by one or more
            datastores.";

         leaf name {
           type string;
           description
             "An arbitrary name of the schema.";
         }
         leaf checksum {
           type string;
           config false;
           mandatory true;
           description
             "A server-generated checksum of the contents of the schema.
              The server MUST change the value of this leaf if the
              information represented by the schema, except 'checksum',
              has changed.";
         }
         leaf-list module-set {
           type leafref {
             path "../../module-set/name";
           }
           description
             "A set of module-sets that are included in this schema.";
         }
       }

       list datastore {
         key "name";
         description
           "A datastore supported by this server.

            Each datastore indicates which schema it supports.

            The server MUST instantiate one entry in this list per
            specific datastore it supports.

            Each datstore entry with the same datastore schema SHOULD
            reference the same schema.";

         leaf name {
           type identityref {
             base ds:datastore;
           }
           description
             "The identity of the datastore.";
         }
         leaf schema {
           type leafref {
             path "../../schema/name";
           }
           mandatory true;

           description
             "A reference to the schema supported by this datastore.";
         }
       }
     }

     /*
      * Top-level container
      */

     container yang-library {
       config false;
       description
         "Container providing all the YANG meta information the
          server possesses.";

       uses yang-library-parameters;

       leaf checksum {
         type string;
         mandatory true;
         description
           "A server-generated checksum of the contents of the
            'yang-library' tree.  The server MUST change the value of
            this leaf if the information represented by the
            'yang-library' tree, except 'yang-library/checksum', has
            changed.";
       }
     }

     /*
      * Notifications
      */

     notification yang-library-update {
       description
         "Generated when any YANG library information on the
          server has changed.";
     }

     /*
      * Legacy groupings
      */

     grouping module-list {
       status deprecated;
       description
         "The module data structure is represented as a grouping
          so it can be reused in configuration or another monitoring
          data structure.";

       grouping common-leafs {
         status deprecated;
         description
           "Common parameters for YANG modules and submodules.";

         leaf name {
           type yang:yang-identifier;
           status deprecated;
           description
             "The YANG module or submodule name.";
         }
         leaf revision {
           type union {
             type revision-identifier;
             type string {
               length 0;
             }
           }
           status deprecated;
           description
             "The YANG module or submodule revision date.
              A zero-length string is used if no revision statement
              is present in the YANG module or submodule.";
         }
       }
       grouping schema-leaf {
         status deprecated;
         description
           "Common schema leaf parameter for modules and submodules.";
         leaf schema {
           type inet:uri;
           status deprecated;
           description
             "Contains a URL that represents the YANG schema
              resource for this module or submodule.

              This leaf will only be present if there is a URL
              available for retrieval of the schema for this entry.";
         }
       }

       list module {
         key "name revision";
         status deprecated;
         description
           "Each entry represents one revision of one module
            currently supported by the server.";

         uses common-leafs {
           status deprecated;
         }
         uses schema-leaf {
           status deprecated;
         }

         leaf namespace {
           type inet:uri;
           mandatory true;
           status deprecated;
           description
             "The XML namespace identifier for this module.";
         }
         leaf-list feature {
           type yang:yang-identifier;
           status deprecated;
           description
             "List of YANG feature names from this module that are
              supported by the server, regardless whether they are
              defined in the module or any included submodule.";
         }
         list deviation {
           key "name revision";
           status deprecated;
           description
             "List of YANG deviation module names and revisions
              used by this server to modify the conformance of
              the module associated with this entry.  Note that
              the same module can be used for deviations for
              multiple modules, so the same entry MAY appear
              within multiple 'module' entries.

              The deviation module MUST be present in the 'module'
              list, with the same name and revision values.
              The 'conformance-type' value will be 'implement' for
              the deviation module.";
           uses common-leafs {
             status deprecated;
           }
         }
         leaf conformance-type {
           type enumeration {
             enum implement {
               description
                 "Indicates that the server implements one or more
                  protocol-accessible objects defined in the YANG module
                  identified in this entry.  This includes deviation
                  statements defined in the module.

                  For YANG version 1.1 modules, there is at most one
                  module entry with conformance type 'implement' for a
                  particular module name, since YANG 1.1 requires that
                  at most one revision of a module is implemented.

                  For YANG version 1 modules, there SHOULD NOT be more
                  than one module entry for a particular module name.";
             }
             enum import {
               description
                 "Indicates that the server imports reusable definitions
                  from the specified revision of the module, but does
                  not implement any protocol accessible objects from
                  this revision.

                  Multiple module entries for the same module name MAY
                  exist. This can occur if multiple modules import the
                  same module, but specify different revision-dates in
                  the import statements.";
             }
           }
           mandatory true;
           status deprecated;
           description
             "Indicates the type of conformance the server is claiming
              for the YANG module identified by this entry.";
         }
         list submodule {
           key "name revision";
           status deprecated;
           description
             "Each entry represents one submodule within the
              parent module.";
           uses common-leafs {
             status deprecated;
           }
           uses schema-leaf {
             status deprecated;
           }
         }
       }
     }

     /*
      * Legacy operational state data nodes
      */

     container modules-state {
       config false;
       status deprecated;
       description
         "Contains YANG module monitoring information.";

       leaf module-set-id {
         type string;
         mandatory true;
         status deprecated;
         description
           "Contains a server-specific identifier representing
            the current set of modules and submodules.  The
            server MUST change the value of this leaf if the
            information represented by the 'module' list instances
            has changed.";
       }

       uses module-list {
         status deprecated;
       }
     }

     /*
      * Legacy notifications
      */

     notification yang-library-change {
       status deprecated;
       description
         "Generated when the set of modules and submodules supported
          by the server has changed.";
       leaf module-set-id {
         type leafref {
           path "/yanglib:modules-state/yanglib:module-set-id";
         }
         mandatory true;
         status deprecated;
         description
           "Contains the module-set-id value representing the
            set of modules and submodules supported at the server
            at the time the notification is generated.";
       }
     }

   }
