docs: function(i, query) {
        var ch = query.charAt(i);
        var firstComponent = SpahQL.Token.PathComponent.parseAt(i, query);
        if(ch == this.ATOM_PATH_ROOT || firstComponent) {
           // Query as a whole may have: root flag, set of path fragments
           var pq = new this();
           var j = i;
  
           if(ch == this.ATOM_PATH_ROOT) {
             firstComponent = SpahQL.Token.PathComponent.parseAt(j+1, query);
             if(!firstComponent) {
               this.throwParseErrorAt(j+1, query, "Found unexpected character '"+query.charAt(j+1)+"', expected TOKEN_PATH_COMPONENT");
             }
             // Valid root path, wind ahead and start chunking queries
             pq.useRoot = true;
           }
           j = firstComponent[0];
           pq.pathComponents.push(firstComponent[1]);
           
           // Start chunking into path segments
           var pathComponent;
           while(pathComponent = SpahQL.Token.PathComponent.parseAt(j, query)) {
             pq.pathComponents.push(pathComponent[1]);
             j = pathComponent[0];
           }
          return [j, pq];
        }     
        return null;
      }