code: public void registerProvider(DataResourceProvider<? extends DataResource> provider, String schemaPrefix) {
  
      getInitializationState().requireNotInitilized();
      Objects.requireNonNull(provider, "provider");
      Objects.requireNonNull(provider.getResourceType(), "provider.resourceType");
      String[] schemaPrefixes;
      if (schemaPrefix == null) {
        schemaPrefixes = provider.getSchemePrefixes();
      } else {
        schemaPrefixes = new String[] { schemaPrefix };
      }
      Objects.requireNonNull(provider.getResourceType(), "provider.schemaPrefixes");
      if (schemaPrefixes.length == 0) {
        throw new IllegalArgumentException(provider.getClass().getName() + ".getSchemaPrefix().length == 0");
      }
      for (String prefix : schemaPrefixes) {
        if (this.schema2providerMap.containsKey(prefix)) {
          throw new IllegalStateException("Duplicate provider (" + provider + ") for prefix: " + prefix);
        }
        this.schema2providerMap.put(prefix, provider);
      }
    }
docs: This method registers the given {@code provider} for the given {@code schemaPrefix}.
  
  @param provider is the {@link DataResourceProvider} to register.
  @param schemaPrefix is the {@link ResourceUriImpl#getSchemePrefix() scheme-prefix} for which the provider
  shall be registered.