code: function read (url, data, config, callback) {
    // Create a new JSON Schema and root file
    var schema = new Schema(config, this.plugins);
    var rootFile = new File(schema);
    schema.files.push(rootFile);
  
    if (url) {
      // Resolve the user-supplied URL to an absolute URL
      url = schema.plugins.resolveURL({ to: url });
  
      // Remove any hash from the URL, since this URL represents the WHOLE file, not a fragment of it
      rootFile.url = stripHash(url);
    }
  
    if (data) {
      // No need to read the file, because its data was passed-in
      rootFile.data = data;
      rootFile[__internal].state = STATE_READ;
      safeCall(parseFile, rootFile, callback);
    }
    else {
      // Read/download the file
      safeCall(readFile, rootFile, callback);
    }
  }
docs: Reads the given file, URL, or data, including any other files or URLs that are referneced
  by JSON References ($ref).
  
  @param {string} url
  @param {object|string|undefined} data
  @param {Config} config
  @param {function} callback
  
  @this JsonSchemaLib