diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang
index 210b95e..25a5a16 100644
--- a/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-patch.yang
@@ -1,121 +1,133 @@
 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; }
+    yang-version 1.1;
 
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
+    namespace
+      "urn:ietf:params:xml:ns:yang:yrt-ietf-yang-patch";
 
-  contact
-    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
+    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
+    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.";
-  }
+    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
+    }
+
+    rc:yang-data "yang-patch";
+    rc:yang-data "yang-patch-status";
+
+    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" {
+      reference
+        "RFC 8040, Section 3.5.3.";
+
+    }
+
     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 {
+    grouping yang-patch {
       description
-        "Represents a conceptual sequence of datastore edits,
+        "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.";
 
-      reference
-        "RFC 7950, Section 8.3.";
-
-      leaf patch-id {
-        type string;
-        mandatory true;
-        description
-          "An arbitrary string provided by the client to identify
+        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
+        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.
+        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.
@@ -125,151 +137,166 @@
                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.
+          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
+          leaf operation {
+            type enumeration {
+              enum "create" {
+                value 0;
+                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
+              }
+              enum "delete" {
+                value 1;
+                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
+              }
+              enum "insert" {
+                value 2;
+                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
+              }
+              enum "merge" {
+                value 3;
+                description
+                  "The supplied value is merged with the target data
                  node.";
-            }
-            enum move {
-              description
-                "Move the target node.  Reorder a user-ordered
+              }
+              enum "move" {
+                value 4;
+                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
+              }
+              enum "replace" {
+                value 5;
+                description
+                  "The supplied value is used to replace the target
                  data node.";
+              }
+              enum "remove" {
+                value 6;
+                description
+                  "Delete the target node if it currently exists.";
+              }
             }
-            enum remove {
-              description
-                "Delete the target node if it currently exists.";
-            }
-          }
-          mandatory true;
-          description
-            "The datastore operation requested for the associated
+            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
+          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
+
+          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'
+          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
+            type enumeration {
+              enum "before" {
+                value 0;
+                description
+                  "Insert or move a data node before the data resource
                  identified by the 'point' parameter.";
-            }
-
-            enum first {
-              description
-                "Insert or move a data node so it becomes ordered
+              }
+              enum "after" {
+                value 1;
+                description
+                  "Insert or move a data node after the data resource
+                 identified by the 'point' parameter.";
+              }
+              enum "first" {
+                value 2;
+                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
+              }
+              enum "last" {
+                value 3;
+                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
+            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'
+
+          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>
@@ -277,100 +304,92 @@
                     </foo>
                  </value>
               ";
-        }
-      }
-    }
+          }
+        }  // list edit
+      }  // container yang-patch
+    }  // grouping yang-patch
 
-  } // grouping yang-patch
-
-  grouping yang-patch-status {
-
-    description
-      "A grouping that contains a YANG container representing the
+    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
+      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.";
+        }
 
-      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.
+        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
+          case global-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
+            uses rc:errors;
+          }  // case global-errors
+          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.";
-        }
-      }
+          }
+        }  // choice global-status
 
-      container edit-status {
-        description
-          "This container will be present if there are
+        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,
+          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;
+            leaf edit-id {
+              type string;
               description
-                "This 'edit' entry was invoked without any
+                "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
+              case errors {
+                description
+                  "The server detected errors associated with the
+                 edit identified by the same 'edit-id' value.";
+                uses rc:errors;
+              }  // case errors
+            }  // choice edit-status-choice
+          }  // list edit
+        }  // container edit-status
+      }  // container yang-patch-status
+    }  // grouping yang-patch-status
+  }  // module ietf-yang-patch
\ No newline at end of file
