code: @Nonnull
      public static IRI create(@Nullable String prefix, @Nullable String suffix) {
          if (prefix == null && suffix == null) {
              throw new IllegalArgumentException("prefix and suffix cannot both be null");
          }
          if (prefix == null) {
              assert suffix != null;
              return create(suffix);
          }
          else if (suffix == null) {
              // suffix set deliberately to null is used only in blank node
              // management
              // this is not great but blank nodes should be changed to not refer
              // to IRIs at all
              // XXX address blank node issues with iris
              return create(prefix);
          }
          else {
              int index = XMLUtils.getNCNameSuffixIndex(prefix);
              int test = XMLUtils.getNCNameSuffixIndex(suffix);
              if (index == -1 && test == 0) {
                  // the prefix does not contain an ncname character and there is
                  // no illegal character in the suffix
                  // the split is therefore correct
                  return new IRI(prefix, suffix);
              }
              // otherwise the split is wrong; we could obtain the right split by
              // using index and test, but it's just as easy to use the other
              // constructor
              return create(prefix + suffix);
          }
      }
docs: Creates an IRI by concatenating two strings. The full IRI is an IRI that
  contains the characters in prefix + suffix.
  
  @param prefix The first string
  @param suffix The second string
  @return An IRI whose characters consist of prefix + suffix.
  @since 3.3