docs: public Whitelist removeProtocols(String tag, String attribute, String... removeProtocols) {
          Validate.notEmpty(tag);
          Validate.notEmpty(attribute);
          Validate.notNull(removeProtocols);
  
          TagName tagName = TagName.valueOf(tag);
          AttributeKey attr = AttributeKey.valueOf(attribute);
  
          // make sure that what we're removing actually exists; otherwise can open the tag to any data and that can
          // be surprising
          Validate.isTrue(protocols.containsKey(tagName), "Cannot remove a protocol that is not set.");
          Map<AttributeKey, Set<Protocol>> tagProtocols = protocols.get(tagName);
          Validate.isTrue(tagProtocols.containsKey(attr), "Cannot remove a protocol that is not set.");
  
          Set<Protocol> attrProtocols = tagProtocols.get(attr);
          for (String protocol : removeProtocols) {
              Validate.notEmpty(protocol);
              attrProtocols.remove(Protocol.valueOf(protocol));
          }
  
          if (attrProtocols.isEmpty()) { // Remove protocol set if empty
              tagProtocols.remove(attr);
              if (tagProtocols.isEmpty()) // Remove entry for tag if empty
                  protocols.remove(tagName);
          }
          return this;
      }