/**
   * Disambiguates all arguments into ontological collections
   *
   * @param args The arguments to disambiguate.
   * @param caseSensitive
   * @return An array of arguments, 2 dimensional for when an argument disambiguates to multiple
   *     arguments. Non-disambiguatable terms are null.
   */
  private DAGNode[][] disambiguateArguments(Object[] args, boolean caseSensitive) {
    DAGNode[][] disams = new DAGNode[args.length][];
    for (int i = 0; i < args.length; i++) {
      if (args[i] instanceof DAGNode && isCollection((DAGNode) args[i]))
        disams[i] = new DAGNode[] {(DAGNode) args[i]};
      else {
        try {
          DAGNode resourceBound = disambiguateSpecialString(args[i].toString());
          if (isCollection(resourceBound)) disams[i] = new DAGNode[] {resourceBound};
        } catch (UnknownMarkupException ume) {
          // Disambiguate text
          Collection<DAGNode> collections = new ArrayList<>();
          Collection<DAGNode> results =
              nodeAliasModule_.findNodeByAlias(args[i].toString(), caseSensitive, true, true);
          for (DAGNode alias : results) {
            if (isCollection(alias)) collections.add(alias);
          }

          // Record each
          if (!collections.isEmpty())
            disams[i] = collections.toArray(new DAGNode[collections.size()]);
        }
      }
    }
    return disams;
  }