diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-event-notifications.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-event-notifications.yang
new file mode 100644
index 0000000..a6a20b3
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-event-notifications.yang
@@ -0,0 +1,932 @@
+module yrt-ietf-event-notifications {
+     namespace
+       "urn:ietf:params:xml:ns:yang:yrt-ietf-event-notifications";
+
+     prefix notif-bis;
+
+     import yrt-ietf-yang-types {
+       prefix yang;
+     }
+     import yrt-ietf-inet-types {
+       prefix inet;
+     }
+     import yrt-ietf-interfaces {
+       prefix if;
+     }
+
+     organization "IETF";
+     contact
+       "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+        WG List:  &lt;mailto:netconf@ietf.org&gt;
+        WG Chair: Mahesh Jethanandani
+                  &lt;mailto:mjethanandani@gmail.com&gt;
+        WG Chair: Mehmet Ersue
+                  &lt;mailto:mehmet.ersue@nokia.com&gt;
+        Editor:   Alexander Clemm
+                  &lt;mailto:alex@sympotech.com&gt;
+        Editor:   Alberto Gonzalez Prieto
+                  &lt;mailto:albertgo@cisco.com&gt;
+        Editor:   Eric Voit
+                  &lt;mailto:evoit@cisco.com&gt;
+        Editor:   Einar Nilsen-Nygaard
+                  &lt;mailto:einarnn@cisco.com&gt;
+        Editor:   Ambika Prasad Tripathy
+                  &lt;mailto:ambtripa@cisco.com&gt;
+        Editor:   Sharon Chisholm
+                  &lt;mailto:schishol@ciena.com&gt;
+        Editor:   Hector Trevino
+                  &lt;mailto:htrevino@cisco.com";
+
+     description
+       "This module contains conceptual YANG specifications
+        for NETCONF Event Notifications.";
+
+     revision 2016-10-27 {
+       description
+         "Tweaks to remove two notifications,
+             RPC for create subscription refined with stream default,
+             new grouping to eliminate some dymanically modifiable
+             parameters in modifiy subscription RPC";
+       reference
+         "draft-ietf-netconf-rfc5277bis-01";
+     }
+
+     /*
+      * FEATURES
+      */
+
+     feature json {
+       description
+         "This feature indicates that JSON encoding of notifications
+          is supported.";
+     }
+
+     feature configured-subscriptions {
+       description
+         "This feature indicates that management plane configuration
+          of subscription is supported.";
+     }
+
+     /*
+      * EXTENSIONS
+      */
+
+     extension control-plane-notif {
+       description
+         "This statement applies only to notifications.
+          It indicates that the notification is a control-plane
+          notification (aka OAM notification). Therefore it does
+          not participate in a regular event stream and does not
+          need to be specifically subscribed to.";
+     }
+
+     /*
+      * IDENTITIES
+      */
+
+      /* Identities for streams */
+      identity stream {
+       description
+         "Base identity to represent a generic stream of event
+          notifications.";
+     }
+
+     identity NETCONF1 {
+       base stream;
+       description
+         "Default NETCONF event stream, containing events based on
+          notifications defined as YANG modules that are supported
+          by the system.";
+     }
+
+     /* Identities for subscription results */
+     identity subscription-result {
+       description
+         "Base identity for RPC responses to requests surrounding
+          management (e.g. creation, modification, deletion) of
+          subscriptions.";
+     }
+
+     identity ok {
+       base subscription-result;
+       description
+         "OK - RPC was successful and was performed as requested.";
+     }
+
+     identity error {
+       base subscription-result;
+       description
+         "RPC was not successful.
+          Base identity for error return codes.";
+     }
+
+     identity error-no-such-subscription {
+       base error;
+       description
+         "A subscription with the requested subscription ID
+          does not exist.";
+     }
+
+     identity error-no-such-option {
+       base error;
+       description
+         "A requested parameter setting is not supported.";
+     }
+
+     identity error-insufficient-resources {
+       base error;
+       description
+         "The publisher has insufficient resources to support the
+          subscription as requested.";
+     }
+
+     identity error-configured-subscription {
+       base error;
+       description
+         "Cannot apply RPC to a configured subscription, i.e.
+          to a subscription that was not established via RPC.";
+     }
+
+     identity error-other {
+       base error;
+       description
+         "An unspecified error has occurred (catch all).";
+     }
+
+     /* Identities for subscription stream status */
+     identity subscription-stream-status {
+       description
+         "Base identity for the status of subscriptions and
+          datastreams.";
+     }
+     identity active {
+       base subscription-stream-status;
+       description
+         "Status is active and healthy.";
+     }
+
+     identity inactive {
+       base subscription-stream-status;
+       description
+         "Status is inactive, for example outside the
+          interval between start time and stop time.";
+     }
+
+     identity suspended {
+       base subscription-stream-status;
+       description
+         "The status is suspended, meaning that the publisher
+          is currently unable to provide the negotiated updates
+          for the subscription.";
+     }
+
+     identity in-error {
+       base subscription-stream-status;
+       description
+         "The status is in error or degraded, meaning that
+          stream and/or subscription is currently unable to provide
+          the negotiated notifications.";
+     }
+
+     /* Identities for subscription errors */
+     identity subscription-errors {
+       description
+         "Base identity for subscription error status.
+          This identity is not to be confused with error return
+          codes for RPCs";
+     }
+
+     identity internal-error {
+       base subscription-errors;
+       description
+         "Subscription failures caused by server internal error.";
+     }
+
+     identity no-resources {
+       base subscription-errors;
+       description
+         "Lack of resources, e.g. CPU, memory, bandwidth";
+     }
+     identity subscription-deleted {
+       base subscription-errors;
+       description
+         "The subscription was terminated because the subscription
+          was deleted.";
+     }
+
+     identity other {
+       base subscription-errors;
+       description
+         "Fallback reason - any other reason";
+     }
+
+     /* Identities for encodings */
+     identity encodings {
+       description
+         "Base identity to represent data encodings";
+     }
+
+     identity encode-xml {
+       base encodings;
+       description
+         "Encode data using XML";
+     }
+
+     identity encode-json {
+       base encodings;
+       description
+         "Encode data using JSON";
+     }
+
+     /* Identities for transports */
+     identity transport {
+       description
+         "An identity that represents a transport protocol for
+          event notifications";
+     }
+
+     identity netconf {
+       base transport;
+       description
+         "Netconf notifications as a transport.";
+     }
+
+     /*
+      * TYPEDEFs
+      */
+     typedef subscription-id {
+       type uint32;
+       description
+         "A type for subscription identifiers.";
+     }
+
+     typedef filter-id {
+       type uint32;
+       description
+         "A type to identify filters which can be associated with a
+          subscription.";
+     }
+
+     typedef subscription-result {
+       type identityref {
+         base subscription-result;
+       }
+       description
+         "The result of a subscription operation";
+     }
+
+     typedef subscription-term-reason {
+       type identityref {
+         base subscription-errors;
+       }
+       description
+         "Reason for a publisher to terminate a subscription.";
+     }
+
+     typedef subscription-susp-reason {
+       type identityref {
+         base subscription-errors;
+       }
+       description
+         "Reason for a publisher to suspend a subscription.";
+     }
+
+     typedef encoding {
+       type identityref {
+         base encodings;
+       }
+       description
+         "Specifies a data encoding, e.g. for a data subscription.";
+     }
+
+     typedef subscription-status {
+       type identityref {
+         base subscription-stream-status;
+       }
+       description
+         "Specifies the status of a subscription or datastream.";
+     }
+
+     typedef transport-protocol {
+       type identityref {
+         base transport;
+       }
+       description
+         "Specifies transport protocol used to send notifications to a
+          receiver.";
+     }
+
+     typedef push-source {
+       type enumeration {
+         enum "interface-originated" {
+           description
+             "Notifications will be sent from a specific interface on
+              a publisher";
+         }
+         enum "address-originated" {
+           description
+             "Notifications will be sent from a specific address on a
+              publisher";
+         }
+       }
+       description
+         "Specifies from where notifications will be sourced when
+          being sent by the publisher.";
+     }
+
+     typedef stream {
+       type identityref {
+         base stream;
+       }
+       description
+         "Specifies a system-provided datastream.";
+     }
+
+     typedef filter-ref {
+       type leafref {
+         path "/notif-bis:filters/notif-bis:filter/notif-bis:filter-id";
+       }
+       description
+         "This type is used to reference a filter.";
+     }
+     /*
+      * GROUPINGS
+      */
+
+     grouping base-filter {
+       description
+         "This grouping defines the base for filters for
+          notification events.
+          It includes the filter defined in 5277 and
+          it enables extending filtering to other
+          types of filters";
+       choice filter-type {
+         description
+           "A filter needs to be a single filter of a given type.
+            Mixing and matching of multiple filters does not occur
+            at the level of this grouping.";
+         case rfc5277 {
+           anyxml filter {
+             description
+               "Filter per RFC 5277. Notification filter.
+               If a filter element is specified to look for data of a
+               particular value, and the data item is not present
+               within a particular event notification for its value to
+               be checked against, the notification will be filtered
+               out. For example, if one were to check for
+               'severity=critical' in a configuration event
+               notification where this field was not supported, then
+               the notification would be filtered out. For subtree
+               filtering, a non-empty node set means that the filter
+               matches.  For XPath filtering, the mechanisms defined
+               in [XPATH] should be used to convert the returned
+               value to boolean.";
+           }
+         }
+       }
+     }
+
+     grouping subscription-info-basic-non-modifiable {
+       description
+         "This grouping describes the information in a basic
+          subscription request.";
+       leaf stream {
+         type stream;
+         description
+           "Indicates which stream of events is of interest.
+            If not present, events in the default NETCONF stream
+            will be sent.";
+       }
+           leaf encoding {
+         type encoding;
+         default "encode-xml";
+         description
+           "The type of encoding for the subscribed data.
+            Default is XML";
+       }
+     }
+
+     grouping subscription-info-basic-modifiable {
+       description
+         "This grouping describes some objects which may be changed
+             in a subscription via an RPC.";
+       uses base-filter;
+       leaf startTime {
+         type yang:date-and-time;
+         description
+           "Used to trigger the replay feature
+            and indicate that the replay should start at the time
+            specified.  If <startTime> is not present, this is not a
+            replay subscription.  It is not valid to specify start
+            times that are later than the current time.  If the
+            <startTime> specified is earlier than the log can support,
+            the replay will begin with the earliest available
+            notification.  This parameter is of type dateTime and
+            compliant to [RFC3339].  Implementations must
+            support time zones.";
+       }
+       leaf stopTime {
+         type yang:date-and-time;
+         must "current()  > ../startTime" {
+           description
+             "stopTime must be used with and be later than <startTime>";
+         }
+         description
+           "Used with the optional replay feature to indicate the
+            newest notifications of interest.  If <stopTime> is
+            not present, the notifications will continue until the
+            subscription is terminated.  Must be used with and be
+            later than <startTime>.  Values of <stopTime> in the
+            future are valid.  This parameter is of type dateTime and
+            compliant to [RFC3339].  Implementations must support time
+            zones.";
+       }
+     }
+
+     grouping subscription-info-all-modifiable {
+       description
+         "This grouping describes all rpc modifiable objects in a
+          subscription.";
+       uses subscription-info-basic-modifiable {
+         augment "filter-type" {
+           description
+             "Post-5277 subscriptions allow references to existing
+              filters";
+           case by-reference {
+             description
+               "Incorporate a filter that has been configured
+                separately.";
+             leaf filter-ref {
+               type filter-ref;
+               description
+                 "References filter which is associated with the
+                  subscription.";
+             }
+           }
+         }
+       }
+     }
+
+     grouping subscription-info {
+       description
+         "This grouping describes information concerning a
+          subscription.";
+           uses subscription-info-basic-non-modifiable;
+           uses subscription-info-all-modifiable;
+     }
+
+     grouping push-source-info {
+       description
+         "Defines the sender source from which notifications
+          for a configured subscription are sent.";
+       choice push-source {
+         description
+           "Identifies the egress interface on the Publisher from
+            which notifications will or are being sent.";
+         case interface-originated {
+           description
+             "When the push source is out of an interface on the
+              Publisher established via static configuration.";
+           leaf source-interface {
+             type if:interface-ref;
+             description
+               "References the interface for notifications.";
+           }
+         }
+         case address-originated {
+           description
+             "When the push source is out of an IP address on the
+              Publisher established via static configuration.";
+           leaf source-vrf {
+             type uint32 {
+               range "16..1048574";
+             }
+             description
+               "Label of the vrf.";
+           }
+           leaf source-address {
+             type inet:ip-address-no-zone;
+             mandatory true;
+             description
+               "The source address for the notifications.";
+           }
+         }
+       }
+     }
+
+     grouping receiver-info {
+       description
+         "Defines where and how to deliver notifications for a
+          configured subscription.  This includes
+          specifying the receiver, as well as defining
+          any network and transport aspects when sending of
+          notifications occurs outside of Netconf.";
+       container receivers {
+         notif-bis1:control-plane-notif;
+         description
+           "Set of receivers in a subscription.";
+         list receiver {
+           key "address";
+           min-elements 1;
+           description
+             "A single host or multipoint address intended as a target
+              for the notifications for a subscription.";
+           leaf address {
+             type inet:host;
+             mandatory true;
+             description
+               "Specifies the address for the traffic to reach a
+                remote host. One of the following must be
+                specified: an ipv4 address, an ipv6 address,
+                or a host name.";
+           }
+           leaf port {
+             type inet:port-number;
+             mandatory true;
+             description
+               "This leaf specifies the port number to use for
+                messages destined for a receiver.";
+           }
+           leaf protocol {
+             type transport-protocol;
+             default "netconf";
+             description
+               "This leaf specifies the transport protocol used
+                to deliver messages destined for the receiver.";
+           }
+         }
+       }
+     }
+
+     grouping subscription-response {
+       description
+         "Defines the output to the rpc's establish-subscription
+          and modify-subscription.";
+       leaf subscription-result {
+         type subscription-result;
+         mandatory true;
+         description
+           "Indicates whether subscription is operational,
+            or if a problem was encountered.";
+       }
+       choice result {
+         description
+           "Depending on the subscription result, different
+            data is returned.";
+         case success {
+           description
+             "This case is used when the subscription request
+              was successful and a subscription was created/modified
+              as a result";
+           leaf subscription-id {
+             type subscription-id;
+             mandatory true;
+             description
+               "Identifier used for this subscription.";
+           }
+         }
+         case no-success {
+           description
+             "This case applies when a subscription request
+              was not successful and no subscription was
+              created (or modified) as a result.  In this case,
+              information MAY be returned that indicates
+              suggested parameter settings that would have a
+              high likelihood of succeeding in a subsequent
+              establish-subscription or modify-subscription
+              request.";
+           uses subscription-info;
+         }
+       }
+     }
+
+     /*
+      * RPCs
+      */
+
+     rpc establish-subscription {
+       description
+         "This RPC allows a subscriber to create
+          (and possibly negotiate) a subscription on its own behalf.
+          If successful, the subscription
+          remains in effect for the duration of the subscriber's
+          association with the publisher, or until the subscription
+          is terminated by virtue of a delete-subscription request.
+          In case an error (as indicated by subscription-result)
+          is returned, the subscription is
+          not created.  In that case, the RPC output
+          MAY include suggested parameter settings
+          that would have a high likelihood of succeeding in a
+          subsequent establish-subscription request.";
+       input {
+         uses subscription-info;
+       }
+       output {
+         uses subscription-response;
+       }
+     }
+
+     rpc create-subscription {
+       description
+         "This operation initiates an event notification subscription
+          that will send asynchronous event notifications to the
+          initiator of the command until the association terminates.
+          It is not possible to modify or delete a subscription
+          that was created using this operation.  It is included for
+          reasons of backward compatibility with RFC 5277
+          implementations.";
+       input {
+         uses subscription-info-basic-non-modifiable{
+               refine "stream" {
+                      default "NETCONF1";
+                   }
+             }
+             uses subscription-info-basic-modifiable;
+           }
+     }
+
+     rpc modify-subscription {
+       description
+         "This RPC allows a subscriber to modify a subscription
+          that was previously created using establish-subscription.
+          If successful, the subscription
+          remains in effect for the duration of the subscriber's
+          association with the publisher, or until the subscription
+          is terminated by virtue of a delete-subscription request.
+          In case an error is returned (as indicated by
+          subscription-result), the subscription is
+          not modified and the original subscription parameters
+          remain in effect.  In that case, the rpc error response
+          MAY include suggested parameter settings
+          that would have a high likelihood of succeeding in a
+          subsequent modify-subscription request.";
+       input {
+         leaf subscription-id {
+           type subscription-id;
+           description
+             "Identifier to use for this subscription.";
+         }
+         uses subscription-info-all-modifiable;
+       }
+       output {
+         uses subscription-response;
+       }
+     }
+
+     rpc delete-subscription {
+       description
+         "This RPC allows a subscriber to delete a subscription that
+          was previously created using establish-subscription.";
+       input {
+         leaf subscription-id {
+           type subscription-id;
+           mandatory true;
+           description
+             "Identifier of the subscription that is to be deleted.
+              Only subscriptions that were created using
+              establish-subscription can be deleted via this RPC.";
+         }
+       }
+       output {
+         leaf subscription-result {
+           type subscription-result;
+           mandatory true;
+           description
+             "Indicates whether subscription is operational,
+              or if a problem was encountered.";
+         }
+       }
+     }
+
+     /*
+      * NOTIFICATIONS
+      */
+
+     notification replay-complete {
+       notif-bis:control-plane-notif;
+       description
+         "This notification is sent to indicate that all of the
+          replay notifications have been sent. It must not be
+          sent for any other reason.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+     }
+
+     notification notification-complete {
+       notif-bis:control-plane-notif;
+       description
+         "This notification is sent to indicate that a
+          subscription, which includes a stop time, has
+          finished passing events.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+     }
+
+     notification subscription-started {
+       notif-bis:control-plane-notif;
+       description
+         "This notification indicates that a subscription has
+          started and notifications are beginning to be sent.
+          This notification shall only be sent to receivers
+          of a subscription; it does not constitute a general-purpose
+          notification.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+       uses subscription-info;
+     }
+
+     notification subscription-suspended {
+       notif-bis:control-plane-notif;
+       description
+         "This notification indicates that a suspension of the
+          subscription by the publisher has occurred.  No further
+          notifications will be sent until subscription
+          resumes.
+          This notification shall only be sent to receivers
+          of a subscription; it does not constitute a general-purpose
+          notification.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+       leaf reason {
+         type subscription-susp-reason;
+         description
+           "Provides a reason for why the subscription was
+            suspended.";
+       }
+     }
+
+     notification subscription-resumed {
+       notif-bis:control-plane-notif;
+       description
+         "This notification indicates that a subscription that had
+          previously been suspended has resumed. Notifications
+          will once again be sent.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+     }
+
+     notification subscription-modified {
+       notif-bis:control-plane-notif;
+       description
+         "This notification indicates that a subscription has
+          been modified.  Notifications sent from this point
+          on will conform to the modified terms of the
+          subscription.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+       uses subscription-info;
+     }
+
+     notification subscription-terminated {
+       notif-bis:control-plane-notif;
+       description
+         "This notification indicates that a subscription has been
+          terminated.";
+       leaf subscription-id {
+         type subscription-id;
+         mandatory true;
+         description
+           "This references the affected subscription.";
+       }
+       leaf reason {
+         type subscription-term-reason;
+         description
+           "Provides a reason for why the subscription was
+            terminated.";
+       }
+     }
+
+     /*
+      * DATA NODES
+      */
+
+     container streams {
+       config false;
+       description
+         "This container contains a leaf list of built-in
+          streams that are provided by the system.";
+       leaf-list stream {
+         type stream;
+         description
+           "Identifies the built-in streams that are supported by the
+            system.  Built-in streams are associated with their own
+            identities, each of which carries a special semantics.
+            In case configurable custom streams are supported,
+            as indicated by the custom-stream identity, the
+            configuration of those custom streams is provided
+                    separately.";
+       }
+     }
+     container filters {
+       description
+         "This container contains a list of configurable filters
+          that can be applied to subscriptions.  This facilitates
+          the reuse of complex filters once defined.";
+       list filter {
+         key "filter-id";
+         description
+           "A list of configurable filters that can be applied to
+            subscriptions.";
+         leaf filter-id {
+           type filter-id;
+           description
+             "An identifier to differentiate between filters.";
+         }
+         uses base-filter;
+       }
+     }
+     container subscription-config {
+       if-feature "configured-subscriptions";
+       description
+         "Contains the list of subscriptions that are configured,
+          as opposed to established via RPC or other means.";
+       list subscription {
+         key "subscription-id";
+         description
+           "Content of a subscription.";
+         leaf subscription-id {
+           type subscription-id;
+           description
+             "Identifier to use for this subscription.";
+         }
+         uses subscription-info;
+         uses receiver-info {
+           if-feature "configured-subscriptions";
+         }
+         uses push-source-info {
+           if-feature "configured-subscriptions";
+         }
+       }
+     }
+     container subscriptions {
+       config false;
+       description
+         "Contains the list of currently active subscriptions,
+          i.e. subscriptions that are currently in effect,
+          used for subscription management and monitoring purposes.
+          This includes subscriptions that have been setup via RPC
+          primitives, e.g. create-subscription, establish-
+          subscription, and modify-subscription, as well as
+          subscriptions that have been established via
+              configuration.";
+       list subscription {
+         key "subscription-id";
+         config false;
+         description
+           "Content of a subscription.
+            Subscriptions can be created using a control channel
+            or RPC, or be established through configuration.";
+         leaf subscription-id {
+           type subscription-id;
+           description
+             "Identifier of this subscription.";
+         }
+
+         leaf configured-subscription {
+          if-feature "configured-subscriptions";
+          type empty;
+          description
+            "The presence of this leaf indicates that the
+             subscription originated from configuration, not
+             through a control channel or RPC.";
+         }
+
+         leaf subscription-status {
+           type subscription-status;
+           description
+             "The status of the subscription.";
+         }
+         uses subscription-info;
+         uses receiver-info {
+           if-feature "configured-subscriptions";
+         }
+         uses push-source-info {
+           if-feature "configured-subscriptions";
+         }
+       }
+     }
+   }
\ No newline at end of file
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-interfaces.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-interfaces.yang
new file mode 100644
index 0000000..082a304
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-interfaces.yang
@@ -0,0 +1,680 @@
+module yrt-ietf-interfaces {
+
+  namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-interfaces";
+  prefix if;
+
+  import yrt-ietf-yang-types {
+    prefix yang;
+    revision-date "2013-07-15";
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+     WG Chair: Thomas Nadeau
+               <mailto:tnadeau@lucidvision.com>
+     WG Chair: Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "This module contains a collection of YANG definitions for
+     managing network interfaces.
+     Copyright (c) 2014 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 7223; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7223: A YANG Data Model for Interface Management";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef interface-ref {
+    type leafref {
+      path "/if:interfaces/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       configured interfaces.";
+  }
+
+  typedef interface-state-ref {
+    type leafref {
+      path "/if:interfaces-state/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       the operationally present interfaces.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity interface-type {
+    description
+      "Base identity from which specific interface types are
+       derived.";
+  }
+
+  /*
+   * Features
+   */
+
+  feature arbitrary-names {
+    description
+      "This feature indicates that the device allows user-controlled
+       interfaces to be named arbitrarily.";
+  }
+  feature pre-provisioning {
+    description
+      "This feature indicates that the device supports
+       pre-provisioning of interface configuration, i.e., it is
+       possible to configure an interface whose physical interface
+       hardware is not present on the device.";
+  }
+
+  feature if-mib {
+    description
+      "This feature indicates that the device implements
+       the IF-MIB.";
+    reference
+      "RFC 2863: The Interfaces Group MIB";
+  }
+
+  /*
+   * Configuration data nodes
+   */
+
+  container interfaces {
+    description
+      "Interface configuration parameters.";
+
+    list interface {
+      key "name";
+
+      description
+        "The list of configured interfaces on the device.
+         The operational state of an interface is available in the
+         /interfaces-state/interface list.  If the configuration of a
+         system-controlled interface cannot be used by the system
+         (e.g., the interface hardware present does not match the
+         interface type), then the configuration is not applied to
+         the system-controlled interface shown in the
+         /interfaces-state/interface list.  If the configuration
+         of a user-controlled interface cannot be used by the system,
+         the configured interface is not instantiated in the
+         /interfaces-state/interface list.";
+
+     leaf name {
+        type string;
+        description
+          "The name of the interface.
+           A device MAY restrict the allowed values for this leaf,
+           possibly depending on the type of the interface.
+           For system-controlled interfaces, this leaf is the
+           device-specific name of the interface.  The 'config false'
+           list /interfaces-state/interface contains the currently
+           existing interfaces on the device.
+           If a client tries to create configuration for a
+           system-controlled interface that is not present in the
+           /interfaces-state/interface list, the server MAY reject
+           the request if the implementation does not support
+           pre-provisioning of interfaces or if the name refers to
+           an interface that can never exist in the system.  A
+           NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.
+           If the device supports pre-provisioning of interface
+           configuration, the 'pre-provisioning' feature is
+           advertised.
+           If the device allows arbitrarily named user-controlled
+           interfaces, the 'arbitrary-names' feature is advertised.
+           When a configured user-controlled interface is created by
+           the system, it is instantiated with the same name in the
+           /interface-state/interface list.";
+      }
+
+      leaf description {
+        type string;
+        description
+          "A textual description of the interface.
+           A server implementation MAY map this leaf to the ifAlias
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifAlias.  The definition of
+           such a mechanism is outside the scope of this document.
+           Since ifAlias is defined to be stored in non-volatile
+           storage, the MIB implementation MUST map ifAlias to the
+           value of 'description' in the persistently stored
+           datastore.
+           Specifically, if the device supports ':startup', when
+           ifAlias is read the device MUST return the value of
+           'description' in the 'startup' datastore, and when it is
+           written, it MUST be written to the 'running' and 'startup'
+           datastores.  Note that it is up to the implementation to
+           decide whether to modify this single leaf in 'startup' or
+           perform an implicit copy-config from 'running' to
+           'startup'.
+           If the device does not support ':startup', ifAlias MUST
+           be mapped to the 'description' leaf in the 'running'
+           datastore.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAlias";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.
+           When an interface entry is created, a server MAY
+           initialize the type leaf with a valid value, e.g., if it
+           is possible to derive the type from the name of the
+           interface.
+           If a client tries to set the type of an interface to a
+           value that can never be used by the system, e.g., if the
+           type is not supported or if the type does not match the
+           name of the interface, the server MUST reject the request.
+           A NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "This leaf contains the configured, desired state of the
+           interface.
+           Systems that implement the IF-MIB use the value of this
+           leaf in the 'running' datastore to set
+           IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+           has been initialized, as described in RFC 2863.
+           Changes in this leaf in the 'running' datastore are
+           reflected in ifAdminStatus, but if ifAdminStatus is
+           changed over SNMP, this leaf is not affected.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf link-up-down-trap-enable {
+        if-feature if-mib;
+        type enumeration {
+          enum enabled {
+            value 1;
+          }
+          enum disabled {
+            value 2;
+          }
+        }
+        description
+          "Controls whether linkUp/linkDown SNMP notifications
+           should be generated for this interface.
+           If this node is not configured, the value 'enabled' is
+           operationally used by the server for interfaces that do
+           not operate on top of any other interface (i.e., there are
+           no 'lower-layer-if' entries), and 'disabled' otherwise.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifLinkUpDownTrapEnable";
+      }
+    }
+  }
+
+  /*
+   * Operational state data nodes
+   */
+
+  container interfaces-state {
+    config false;
+    description
+      "Data nodes for the operational state of interfaces.";
+
+    list interface {
+      key "name";
+
+
+
+
+
+      description
+        "The list of interfaces on the device.
+         System-controlled interfaces created by the system are
+         always present in this list, whether they are configured or
+         not.";
+
+      leaf name {
+        type string;
+        description
+          "The name of the interface.
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf admin-status {
+        if-feature if-mib;
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+
+
+
+          enum testing {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        mandatory true;
+        description
+          "The desired state of the interface.
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "The interface does not pass any packets.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum unknown {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum dormant {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum not-present {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum lower-layer-down {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        mandatory true;
+        description
+          "The current operational state of the interface.
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature if-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        mandatory true;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-state-ref;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-state-ref;
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        description
+            "An estimate of the interface's current bandwidth in bits
+             per second.  For interfaces that do not vary in
+             bandwidth or for those where no accurate estimation can
+             be made, this node should contain the nominal bandwidth.
+             For interfaces that have no concept of bandwidth, this
+             node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifSpeed, ifHighSpeed";
+      }
+
+
+
+
+
+
+
+
+
+      container statistics {
+        description
+          "A collection of interface-related statistics objects.";
+
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+
+
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+
+
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+
+
+
+
+        leaf out-octets {
+          type yang:counter64;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutBroadcastPkts";
+        }
+
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-restconf.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-restconf.yang
new file mode 100644
index 0000000..96df901
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-restconf.yang
@@ -0,0 +1,253 @@
+module yrt-ietf-restconf {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-restconf";
+  prefix "rc";
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.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:   Kent Watsen
+               <mailto:kwatsen@juniper.net>";
+
+  description
+    "This module contains conceptual YANG specifications
+     for basic RESTCONF media type definitions used in
+     RESTCONF protocol messages.
+     Note that the YANG definitions within this module do not
+     represent configuration data of any kind.
+     The 'restconf-media-type' YANG extension statement
+     provides a normative syntax for XML and JSON
+     message-encoding purposes.
+     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
+     (http://trustee.ietf.org/license-info).
+     This version of this YANG module is part of RFC 8040; see
+     the RFC itself for full legal notices.";
+
+  revision 2017-01-26 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8040: RESTCONF Protocol.";
+  }
+
+  extension yang-data {
+    argument name {
+      yin-element true;
+    }
+    description
+      "This extension is used to specify a YANG data template that
+       represents conceptual data defined in YANG.  It is
+       intended to describe hierarchical data independent of
+       protocol context or specific message-encoding format.
+       Data definition statements within a yang-data extension
+       specify the generic syntax for the specific YANG data
+       template, whose name is the argument of the 'yang-data'
+       extension statement.
+       Note that this extension does not define a media type.
+       A specification using this extension MUST specify the
+       message-encoding rules, including the content media type.
+       The mandatory 'name' parameter value identifies the YANG
+       data template that is being defined.  It contains the
+       template name.
+       This extension is ignored unless it appears as a top-level
+       statement.  It MUST contain data definition statements
+       that result in exactly one container data node definition.
+       An instance of a YANG data template can thus be translated
+       into an XML instance document, whose top-level element
+       corresponds to the top-level container.
+       The module name and namespace values for the YANG module using
+       the extension statement are assigned to instance document data
+       conforming to the data definition statements within
+       this extension.
+       The substatements of this extension MUST follow the
+       'data-def-stmt' rule in the YANG ABNF.
+       The XPath document root is the extension statement itself,
+       such that the child nodes of the document root are
+       represented by the data-def-stmt substatements within
+       this extension.  This conceptual document is the context
+       for the following YANG statements:
+         - must-stmt
+         - when-stmt
+         - path-stmt
+         - min-elements-stmt
+         - max-elements-stmt
+         - mandatory-stmt
+         - unique-stmt
+         - ordered-by
+         - instance-identifier data type
+       The following data-def-stmt substatements are constrained
+       when used within a 'yang-data' extension statement.
+         - The list-stmt is not required to have a key-stmt defined.
+         - The if-feature-stmt is ignored if present.
+         - The config-stmt is ignored if present.
+         - The available identity values for any 'identityref'
+           leaf or leaf-list nodes are limited to the module
+           containing this extension statement and the modules
+           imported into that module.
+      ";
+  }
+
+  /* rc:yang-data yang-errors {
+    uses errors;
+  }
+
+  rc:yang-data yang-api {
+    uses restconf;
+  } */
+
+  grouping errors {
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of a
+       YANG Patch error report within a response message.";
+
+    container errors {
+      description
+        "Represents an error report returned by the server if
+         a request results in an error.";
+
+      list error {
+        description
+          "An entry containing information about one
+           specific error that occurred while processing
+           a RESTCONF request.";
+        reference
+          "RFC 6241, Section 4.3.";
+
+        leaf error-type {
+          type enumeration {
+            enum transport {
+              description
+                "The transport layer.";
+            }
+            enum rpc {
+              description
+                "The rpc or notification layer.";
+            }
+            enum protocol {
+              description
+                "The protocol operation layer.";
+            }
+            enum application {
+              description
+                "The server application layer.";
+            }
+          }
+          mandatory true;
+          description
+            "The protocol layer where the error occurred.";
+        }
+
+        leaf error-tag {
+          type string;
+          mandatory true;
+          description
+            "The enumerated error-tag.";
+        }
+
+        leaf error-app-tag {
+          type string;
+          description
+            "The application-specific error-tag.";
+        }
+
+        leaf error-path {
+          type instance-identifier;
+          description
+            "The YANG instance identifier associated
+             with the error node.";
+        }
+
+        leaf error-message {
+          type string;
+          description
+            "A message describing the error.";
+        }
+
+        anydata error-info {
+           description
+             "This anydata value MUST represent a container with
+              zero or more data nodes representing additional
+              error information.";
+        }
+      }
+    }
+  }
+
+  grouping restconf {
+    description
+      "Conceptual grouping representing the RESTCONF
+       root resource.";
+
+    container restconf {
+      description
+        "Conceptual container representing the RESTCONF
+         root resource.";
+
+      container data {
+        description
+          "Container representing the datastore resource.
+           Represents the conceptual root of all state data
+           and configuration data supported by the server.
+           The child nodes of this container can be any data
+           resources that are defined as top-level data nodes
+           from the YANG modules advertised by the server in
+           the 'ietf-yang-library' module.";
+      }
+
+      container operations {
+        description
+          "Container for all operation resources.
+           Each resource is represented as an empty leaf with the
+           name of the RPC operation from the YANG 'rpc' statement.
+           For example, the 'system-restart' RPC operation defined
+           in the 'ietf-system' module would be represented as
+           an empty leaf in the 'ietf-system' namespace.  This is
+           a conceptual leaf and will not actually be found in
+           the module:
+              module ietf-system {
+                leaf system-reset {
+                  type empty;
+                }
+              }
+           To invoke the 'system-restart' RPC operation:
+              POST /restconf/operations/ietf-system:system-restart
+           To discover the RPC operations supported by the server:
+              GET /restconf/operations
+           In XML, the YANG module namespace identifies the module:
+             <system-restart
+                xmlns='urn:ietf:params:xml:ns:yang:ietf-system'/>
+           In JSON, the YANG module name identifies the module:
+             { 'ietf-system:system-restart' : [null] }
+          ";
+      }
+
+      leaf yang-library-version {
+        type string {
+          pattern '\d{4}-\d{2}-\d{2}';
+        }
+        config false;
+        mandatory true;
+        description
+          "Identifies the revision date of the 'ietf-yang-library'
+           module that is implemented by this RESTCONF server.
+           Indicates the year, month, and day in YYYY-MM-DD
+           numeric format.";
+      }
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang
new file mode 100644
index 0000000..210b95e
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang
@@ -0,0 +1,376 @@
+module yrt-ietf-yang-patch {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-yang-patch";
+  prefix "ypatch";
+
+  import yrt-ietf-restconf { prefix rc; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.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:   Kent Watsen
+               <mailto:kwatsen@juniper.net>";
+
+  description
+    "This module contains conceptual YANG specifications
+     for the YANG Patch and YANG Patch Status data structures.
+     Note that the YANG definitions within this module do not
+     represent configuration data of any kind.
+     The YANG grouping statements provide a normative syntax
+     for XML and JSON message-encoding purposes.
+     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
+     (http://trustee.ietf.org/license-info).
+     This version of this YANG module is part of RFC 8072; see
+     the RFC itself for full legal notices.";
+
+  revision 2017-02-22 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8072: YANG Patch Media Type.";
+  }
+
+  typedef target-resource-offset {
+    type string;
+    description
+      "Contains a data resource identifier string representing
+       a sub-resource within the target resource.
+       The document root for this expression is the
+       target resource that is specified in the
+       protocol operation (e.g., the URI for the PATCH request).
+       This string is encoded according to the same rules as those
+       for a data resource identifier in a RESTCONF request URI.";
+    reference
+       "RFC 8040, Section 3.5.3.";
+  }
+/*
+  rc:yang-data "yang-patch" {
+    uses yang-patch;
+  }
+
+  rc:yang-data "yang-patch-status" {
+    uses yang-patch-status;
+  }
+*/
+  grouping yang-patch {
+
+    description
+      "A grouping that contains a YANG container representing the
+       syntax and semantics of a YANG Patch edit request message.";
+
+    container yang-patch {
+      description
+        "Represents a conceptual sequence of datastore edits,
+         called a patch.  Each patch is given a client-assigned
+         patch identifier.  Each edit MUST be applied
+         in ascending order, and all edits MUST be applied.
+         If any errors occur, then the target datastore MUST NOT
+         be changed by the YANG Patch operation.
+         It is possible for a datastore constraint violation to occur
+         due to any node in the datastore, including nodes not
+         included in the 'edit' list.  Any validation errors MUST
+         be reported in the reply message.";
+
+      reference
+        "RFC 7950, Section 8.3.";
+
+      leaf patch-id {
+        type string;
+        mandatory true;
+        description
+          "An arbitrary string provided by the client to identify
+           the entire patch.  Error messages returned by the server
+           that pertain to this patch will be identified by this
+           'patch-id' value.  A client SHOULD attempt to generate
+           unique 'patch-id' values to distinguish between
+           transactions from multiple clients in any audit logs
+           maintained by the server.";
+      }
+
+      leaf comment {
+        type string;
+        description
+          "An arbitrary string provided by the client to describe
+           the entire patch.  This value SHOULD be present in any
+           audit logging records generated by the server for the
+           patch.";
+      }
+
+      list edit {
+        key edit-id;
+        ordered-by user;
+
+        description
+          "Represents one edit within the YANG Patch request message.
+           The 'edit' list is applied in the following manner:
+             - The first edit is conceptually applied to a copy
+               of the existing target datastore, e.g., the
+               running configuration datastore.
+             - Each ascending edit is conceptually applied to
+               the result of the previous edit(s).
+             - After all edits have been successfully processed,
+               the result is validated according to YANG constraints.
+             - If successful, the server will attempt to apply
+               the result to the target datastore.";
+
+        leaf edit-id {
+          type string;
+          description
+            "Arbitrary string index for the edit.
+             Error messages returned by the server that pertain
+             to a specific edit will be identified by this value.";
+        }
+
+        leaf operation {
+          type enumeration {
+            enum create {
+              description
+                "The target data node is created using the supplied
+                 value, only if it does not already exist.  The
+                 'target' leaf identifies the data node to be
+                 created, not the parent data node.";
+            }
+            enum delete {
+              description
+                "Delete the target node, only if the data resource
+                 currently exists; otherwise, return an error.";
+            }
+
+            enum insert {
+              description
+                "Insert the supplied value into a user-ordered
+                 list or leaf-list entry.  The target node must
+                 represent a new data resource.  If the 'where'
+                 parameter is set to 'before' or 'after', then
+                 the 'point' parameter identifies the insertion
+                 point for the target node.";
+            }
+            enum merge {
+              description
+                "The supplied value is merged with the target data
+                 node.";
+            }
+            enum move {
+              description
+                "Move the target node.  Reorder a user-ordered
+                 list or leaf-list.  The target node must represent
+                 an existing data resource.  If the 'where' parameter
+                 is set to 'before' or 'after', then the 'point'
+                 parameter identifies the insertion point to move
+                 the target node.";
+            }
+            enum replace {
+              description
+                "The supplied value is used to replace the target
+                 data node.";
+            }
+            enum remove {
+              description
+                "Delete the target node if it currently exists.";
+            }
+          }
+          mandatory true;
+          description
+            "The datastore operation requested for the associated
+             'edit' entry.";
+        }
+
+        leaf target {
+          type target-resource-offset;
+          mandatory true;
+          description
+            "Identifies the target data node for the edit
+             operation.  If the target has the value '/', then
+             the target data node is the target resource.
+             The target node MUST identify a data resource,
+             not the datastore resource.";
+        }
+
+        leaf point {
+          when "(../operation = 'insert' or ../operation = 'move')"
+             + "and (../where = 'before' or ../where = 'after')" {
+            description
+              "This leaf only applies for 'insert' or 'move'
+               operations, before or after an existing entry.";
+          }
+          type target-resource-offset;
+          description
+            "The absolute URL path for the data node that is being
+             used as the insertion point or move point for the
+             target of this 'edit' entry.";
+        }
+
+        leaf where {
+          when "../operation = 'insert' or ../operation = 'move'" {
+            description
+              "This leaf only applies for 'insert' or 'move'
+               operations.";
+          }
+          type enumeration {
+            enum before {
+              description
+                "Insert or move a data node before the data resource
+                 identified by the 'point' parameter.";
+            }
+            enum after {
+              description
+                "Insert or move a data node after the data resource
+                 identified by the 'point' parameter.";
+            }
+
+            enum first {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the first entry.";
+            }
+            enum last {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the last entry.";
+            }
+          }
+          default last;
+          description
+            "Identifies where a data resource will be inserted
+             or moved.  YANG only allows these operations for
+             list and leaf-list data nodes that are
+             'ordered-by user'.";
+        }
+
+        anydata value {
+          when "../operation = 'create' "
+             + "or ../operation = 'merge' "
+             + "or ../operation = 'replace' "
+             + "or ../operation = 'insert'" {
+            description
+              "The anydata 'value' is only used for 'create',
+               'merge', 'replace', and 'insert' operations.";
+          }
+          description
+            "Value used for this edit operation.  The anydata 'value'
+             contains the target resource associated with the
+             'target' leaf.
+             For example, suppose the target node is a YANG container
+             named foo:
+                 container foo {
+                   leaf a { type string; }
+                   leaf b { type int32; }
+                 }
+             The 'value' node contains one instance of foo:
+                 <value>
+                    <foo xmlns='example-foo-namespace'>
+                       <a>some value</a>
+                       <b>42</b>
+                    </foo>
+                 </value>
+              ";
+        }
+      }
+    }
+
+  } // grouping yang-patch
+
+  grouping yang-patch-status {
+
+    description
+      "A grouping that contains a YANG container representing the
+       syntax and semantics of a YANG Patch Status response
+       message.";
+
+    container yang-patch-status {
+      description
+        "A container representing the response message sent by the
+         server after a YANG Patch edit request message has been
+         processed.";
+
+      leaf patch-id {
+        type string;
+        mandatory true;
+        description
+          "The 'patch-id' value used in the request.";
+      }
+
+      choice global-status {
+        description
+          "Report global errors or complete success.
+           If there is no case selected, then errors
+           are reported in the 'edit-status' container.";
+
+        case global-errors {
+          uses rc:errors;
+          description
+            "This container will be present if global errors that
+             are unrelated to a specific edit occurred.";
+        }
+        leaf ok {
+          type empty;
+          description
+            "This leaf will be present if the request succeeded
+             and there are no errors reported in the 'edit-status'
+             container.";
+        }
+      }
+
+      container edit-status {
+        description
+          "This container will be present if there are
+           edit-specific status responses to report.
+           If all edits succeeded and the 'global-status'
+           returned is 'ok', then a server MAY omit this
+           container.";
+
+        list edit {
+          key edit-id;
+
+          description
+            "Represents a list of status responses,
+             corresponding to edits in the YANG Patch
+             request message.  If an 'edit' entry was
+             skipped or not reached by the server,
+             then this list will not contain a corresponding
+             entry for that edit.";
+
+          leaf edit-id {
+            type string;
+             description
+               "Response status is for the 'edit' list entry
+                with this 'edit-id' value.";
+          }
+
+          choice edit-status-choice {
+            description
+              "A choice between different types of status
+               responses for each 'edit' entry.";
+            leaf ok {
+              type empty;
+              description
+                "This 'edit' entry was invoked without any
+                 errors detected by the server associated
+                 with this edit.";
+            }
+            case errors {
+              uses rc:errors;
+              description
+                "The server detected errors associated with the
+                 edit identified by the same 'edit-id' value.";
+            }
+          }
+        }
+      }
+    }
+  }  // grouping yang-patch-status
+
+}
\ No newline at end of file
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-push.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-push.yang
new file mode 100644
index 0000000..9df4bde
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-push.yang
@@ -0,0 +1,565 @@
+ module yrt-ietf-yang-push {
+    /*
+     * ---------------------------------------------------
+     * Not Supported
+    yang-version 1.1;
+     * ---------------------------------------------------
+     */
+    namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-yang-push";
+    prefix yp;
+
+    import yrt-ietf-inet-types {
+      prefix inet;
+    }
+    import yrt-ietf-yang-types {
+      prefix yang;
+    }
+    import yrt-ietf-event-notifications {
+      prefix notif-bis;
+    }
+
+    organization "IETF";
+    contact
+      "WG Web:   <http://tools.ietf.org/wg/netconf/>
+       WG List:  <mailto:netconf@ietf.org>
+       WG Chair: Mahesh Jethanandani
+                 <mailto:mjethanandani@gmail.com>
+       WG Chair: Mehmet Ersue
+                 <mailto:mehmet.ersue@nokia.com>
+       Editor:   Alexander Clemm
+                 <mailto:alex@sympotech.com>
+       Editor:   Eric Voit
+                 <mailto:evoit@cisco.com>
+       Editor:   Alberto Gonzalez Prieto
+                 <mailto:albertgo@cisco.com>
+       Editor:   Ambika Prasad Tripathy
+                 <mailto:ambtripa@cisco.com>
+       Editor:   Einar Nilsen-Nygaard
+                 <mailto:einarnn@cisco.com>
+       Editor:   Andy Bierman
+                 <mailto:andy@yumaworks.com>
+       Editor:   Balazs Lengyel
+                 <mailto:balazs.lengyel@ericsson.com>";
+
+    description
+      "This module contains conceptual YANG specifications
+       for YANG push.";
+
+    revision 2016-10-28 {
+      description
+        "Updates to simplify modify-subscription, add anchor-time";
+      reference "YANG Datastore Push, draft-ietf-netconf-yang-push-04";
+    }
+
+    feature on-change {
+      description
+        "This feature indicates that on-change updates are
+         supported.";
+    }
+
+   /*
+    * IDENTITIES
+    */
+
+    /* Additional errors for subscription operations */
+    identity error-data-not-authorized {
+      base notif-bis:error;
+      description
+        "No read authorization for a requested data node.";
+    }
+
+    /* Additional types of streams */
+
+    identity yang-push {
+      base notif-bis:stream;
+      description
+        "A conceptual datastream consisting of all datastore
+         updates, including operational and configuration data.";
+    }
+
+    identity custom-stream {
+      base notif-bis:stream;
+      description
+        "A conceptual datastream for datastore
+         updates with custom updates as defined by a user.";
+    }
+
+    /* Additional transport option */
+    identity http2 {
+      base notif-bis:transport;
+      description
+        "HTTP2 notifications as a transport";
+    }
+
+    /*
+     * TYPE DEFINITIONS
+     */
+
+    typedef filter-id {
+      type uint32;
+      description
+        "A type to identify filters which can be associated with a
+         subscription.";
+    }
+
+    typedef change-type {
+      type enumeration {
+        enum "create" {
+          description
+            "A new data node was created";
+        }
+        enum "delete" {
+          description
+            "A data node was deleted";
+        }
+        enum "modify" {
+          description
+            "The value of a data node has changed";
+        }
+      }
+      description
+        "Specifies different types of changes that may occur
+         to a datastore.";
+    }
+
+
+    grouping update-filter {
+      description
+        "This groupings defines filters for push updates for a
+        datastore tree.  The filters define which updates are of
+        interest in a push update subscription.  Mixing and matching
+        of multiple filters does not occur at the level of this
+        grouping. When a push-update subscription is created, the
+        filter can be a regular subscription filter, or one of the
+        additional filters that are defined in this grouping.";
+      choice update-filter {
+        description
+          "Define filters regarding which data nodes to include
+           in push updates";
+        case subtree {
+          description
+            "Subtree filter.";
+          anyxml subtree-filter {
+            description
+              "Subtree-filter used to specify the data nodes targeted
+              for subscription within a subtree, or subtrees, of a
+              conceptual YANG datastore.  Objects matching the filter
+              criteria will traverse the filter. The syntax follows
+              the subtree filter syntax specified in RFC 6241,
+              section 6.";
+            reference "RFC 6241 section 6";
+          }
+        }
+        case xpath {
+          description
+            "XPath filter";
+          leaf xpath-filter {
+            type yang:xpath1.0;
+            description
+              "Xpath defining the data items of interest.";
+          }
+        }
+      }
+    }
+
+    grouping update-policy {
+      description
+        "This grouping describes the conditions under which an
+         update will be sent as part of an update stream.";
+      choice update-trigger {
+        description
+          "Defines necessary conditions for sending an event to
+           the subscriber.";
+        case periodic {
+          description
+            "The agent is requested to notify periodically the
+             current values of the datastore or the subset
+             defined by the filter.";
+          leaf period {
+            type yang:timeticks;
+            mandatory true;
+            description
+              "Duration of time which should occur between periodic
+               push updates.  Where the anchor of a start-time is
+               available, the push will include the objects and their
+               values which exist at an exact multiple of timeticks
+               aligning to this start-time anchor.";
+          }
+          leaf anchor-time {
+            type yang:date-and-time;
+            description
+              "Designates a timestamp from which the series of
+              periodic push updates are computed. The next update
+              will take place at the next period interval from the
+              anchor time.  For example, for an anchor time at the
+              top of a minute and a period interval of a minute,
+              the next update will be sent at the top of the next
+              minute.";
+          }
+        }
+        case on-change {
+          if-feature "on-change";
+          description
+            "The agent is requested to notify changes in
+             values in the datastore or a subset of it defined
+             by a filter.";
+          leaf no-synch-on-start {
+            type empty;
+            description
+              "This leaf acts as a flag that determines behavior at the
+               start of the subscription.  When present,
+               synchronization of state at the beginning of the
+               subscription is outside the scope of the subscription.
+               Only updates about changes that are observed from the
+               start time, i.e. only push-change-update notifications
+               are sent.
+               When absent (default behavior), in order to facilitate
+               a receiver's synchronization, a full update is sent
+               when the subscription starts using a push-update
+               notification, just like in the case of a periodic
+               subscription.  After that, push-change-update
+               notifications only are sent unless the Publisher chooses
+               to resynch the subscription again.";
+          }
+          leaf dampening-period {
+            type yang:timeticks;
+            mandatory true;
+            description
+              "Minimum amount of time that needs to have
+               passed since the last time an update was
+               provided.";
+          }
+          leaf-list excluded-change {
+            type change-type;
+            description
+              "Use to restrict which changes trigger an update.
+               For example, if modify is excluded, only creation and
+               deletion of objects is reported.";
+          }
+        }
+      }
+    }
+
+    grouping subscription-qos {
+      description
+        "This grouping describes Quality of Service information
+         concerning a subscription.  This information is passed to lower
+         layers for transport priortization and treatment";
+      leaf dscp {
+        if-feature "notif-bis:configured-subscriptions";
+        type inet:dscp;
+        default "0";
+        description
+          "The push update's IP packet transport priority.
+           This is made visible across network hops to receiver.
+           The transport priority is shared for all receivers of
+           a given subscription.";
+      }
+      leaf subscription-priority {
+        type uint8;
+        description
+          "Relative priority for a subscription.   Allows an
+           underlying transport layer perform informed load
+           balance allocations between various subscriptions";
+      }
+      leaf subscription-dependency {
+        type string;
+        description
+          "Provides the Subscription ID of a parent subscription
+           without which this subscription should not exist. In
+           other words, there is no reason to stream these objects
+           if another subscription is missing.";
+      }
+    }
+
+    augment "/notif-bis:establish-subscription/notif-bis:input" {
+      description
+        "Define additional subscription parameters that apply
+         specifically to push updates";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:establish-subscription/notif-bis:input/"+
+            "notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:establish-subscription/notif-bis:output" {
+      description
+        "Allow to return additional subscription parameters that apply
+         specifically to push updates.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:establish-subscription/notif-bis:output/"+
+      "notif-bis:result/notif-bis:no-success/notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:modify-subscription/notif-bis:input" {
+      description
+        "Define additional subscription parameters that apply
+         specifically to push updates.";
+      uses update-policy;
+    }
+    augment "/notif-bis:modify-subscription/notif-bis:input/"+
+            "notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:modify-subscription/notif-bis:output" {
+      description
+        "Allow to retun additional subscription parameters that apply
+         specifically to push updates.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:modify-subscription/notif-bis:output/"+
+        "notif-bis:result/notif-bis:no-success/notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    notification push-update {
+      description
+        "This notification contains a push update, containing
+         data subscribed to via a subscription.
+         This notification is sent for periodic updates, for a
+         periodic subscription.  It can also be used for
+         synchronization updates of an on-change subscription.
+         This notification shall only be sent to receivers
+         of a subscription; it does not constitute a general-purpose
+         notification.";
+      leaf subscription-id {
+        type notif-bis:subscription-id;
+        mandatory true;
+        description
+          "This references the subscription because of which the
+           notification is sent.";
+      }
+      leaf time-of-update {
+        type yang:date-and-time;
+        description
+          "This leaf contains the time of the update.";
+      }
+      leaf updates-not-sent {
+        type empty;
+        description
+          "This is a flag which indicates that not all data nodes
+           subscribed to are included included with this
+           update.  In other words, the publisher has failed to
+           fulfill its full subscription obligations.
+           This may lead to intermittent loss of synchronization
+           of data at the client.  Synchronization at the client
+           can occur when the next push-update is received.";
+      }
+      /*
+       * --------------------------------------------------------------------
+       * datastore-contents not currently supported.
+       * Will replace datastore-contents-string in a future release.
+      anydata datastore-contents {
+        description
+          "This contains the updated data.  It constitutes a snapshot
+           at the time-of-update of the set of data that has been
+           subscribed to.  The format and syntax of the data
+           corresponds to the format and syntax of data that would be
+           returned in a corresponding get operation with the same
+           filter parameters applied.";
+      }
+       * --------------------------------------------------------------------
+       */
+      leaf datastore-contents-string {
+        type string;
+        description
+          "This contains the updated data.  It constitutes a snapshot
+           at the time-of-update of the set of data that has been
+           subscribed to.  The format and syntax of the data
+           corresponds to the format and syntax of data that would be
+           returned in a corresponding get operation with the same
+           filter parameters applied.";
+      }
+      /*
+       * --------------------------------------------------------------------
+       */
+
+    }
+    notification push-change-update {
+      if-feature "on-change";
+      description
+        "This notification contains an on-change push update.
+         This notification shall only be sent to the receivers
+         of a subscription; it does not constitute a general-purpose
+         notification.";
+      leaf subscription-id {
+        type notif-bis:subscription-id;
+        mandatory true;
+        description
+          "This references the subscription because of which the
+           notification is sent.";
+      }
+      leaf time-of-update {
+        type yang:date-and-time;
+        description
+          "This leaf contains the time of the update, i.e. the
+           time at which the change was observed.";
+      }
+      leaf updates-not-sent {
+        type empty;
+        description
+          "This is a flag which indicates that not all changes which
+           have occured since the last update are included with this
+           update.  In other words, the publisher has failed to
+           fulfill its full subscription obligations, for example in
+           cases where it was not able to keep up with a change burst.
+           To facilitate synchronization, a publisher MAY subsequently
+           send a push-update containing a full snapshot of subscribed
+           data. Such a push-update might also be triggered by a
+           subscriber requesting an on-demand synchronization.";
+      }
+      /*
+       * --------------------------------------------------------------------
+       * datastore-changes not currently supported.
+       * Will replace datastore-change-string in a future release.
+      anydata datastore-changes {
+        description
+          "This contains datastore contents that has changed
+           since the previous update, per the terms of the
+           subscription.  Changes are encoded analogous to
+           the syntax of a corresponding yang-patch operation,
+           i.e. a yang-patch operation applied to the YANG datastore
+           implied by the previous update to result in the current
+           state (and assuming yang-patch could also be applied to
+           operational data).";
+      }
+       *
+       * --------------------------------------------------------------------
+       */
+      leaf datastore-changes-string {
+        type string;
+        description
+          "This contains datastore contents that has changed
+           since the previous update, per the terms of the
+           subscription.  Changes are encoded analogous to
+           the syntax of a corresponding yang-patch operation,
+           i.e. a yang-patch operation applied to the YANG datastore
+           implied by the previous update to result in the current
+           state (and assuming yang-patch could also be applied to
+           operational data).";
+      }
+      /*
+       * --------------------------------------------------------------------
+       */
+
+    }
+    augment "/notif-bis:subscription-started" {
+      description
+        "This augmentation adds push subscription parameters
+         to the notification that a subscription has
+         started and data updates are beginning to be sent.
+         This notification shall only be sent to receivers
+         of a subscription; it does not constitute a general-purpose
+         notification.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:subscription-started/notif-bis:filter-type" {
+      description
+        "This augmentation allows to include additional update filters
+         options to be included as part of the notification that a
+         subscription has started.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:subscription-modified" {
+      description
+        "This augmentation adds push subscription parameters
+         to the notification that a subscription has
+         been modified.
+         This notification shall only be sent to receivers
+         of a subscription; it does not constitute a general-purpose
+         notification.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:subscription-modified/notif-bis:filter-type" {
+      description
+        "This augmentation allows to include additional update
+         filters options to be included as part of the notification
+         that a subscription has been modified.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:filters/notif-bis:filter/"+
+            "notif-bis:filter-type" {
+      description
+        "This container adds additional update filter options
+         to the list of configurable filters
+         that can be applied to subscriptions.  This facilitates
+         the reuse of complex filters once defined.";
+      case update-filter {
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:subscription-config/notif-bis:subscription" {
+      description
+        "Contains the list of subscriptions that are configured,
+         as opposed to established via RPC or other means.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:subscription-config/notif-bis:subscription/"+
+            "notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        uses update-filter;
+      }
+    }
+    augment "/notif-bis:subscriptions/notif-bis:subscription" {
+      description
+        "Contains the list of currently active subscriptions,
+         i.e. subscriptions that are currently in effect,
+         used for subscription management and monitoring purposes.
+         This includes subscriptions that have been setup via RPC
+         primitives, e.g. establish-subscription, delete-subscription,
+         and modify-subscription, as well as subscriptions that
+         have been established via configuration.";
+      uses update-policy;
+      uses subscription-qos;
+    }
+    augment "/notif-bis:subscriptions/notif-bis:subscription/"+
+            "notif-bis:filter-type" {
+      description
+        "Add push filters to selection of filter types.";
+      case update-filter {
+        description
+          "Additional filter options for push subscription.";
+        uses update-filter;
+      }
+    }
+  }
