/**
   * Node-Name operation.
   *
   * @param args Result from the expressions evaluation.
   * @throws DynamicError Dynamic error.
   * @return Result of fn:node-name operation.
   */
  public static ResultSequence node_name(Collection args) throws DynamicError {
    Collection cargs = Function.convert_arguments(args, expected_args());

    ResultSequence arg1 = (ResultSequence) cargs.iterator().next();
    if (arg1.empty()) return ResultBuffer.EMPTY;

    NodeType nt = (NodeType) arg1.first();

    QName nodename = nt.node_name();
    if (nodename == null) return ResultBuffer.EMPTY;

    return nodename;
  }
  public ResultSequence constructor(ResultSequence arg) throws DynamicError {
    if (arg.empty()) return ResultBuffer.EMPTY;

    AnyAtomicType aat = (AnyAtomicType) arg.first();
    String strValue = aat.getStringValue();

    if (!isConstraintSatisfied(strValue)) {
      // invalid input
      DynamicError.throw_type_error();
    }

    return new XSIDREF(strValue);
  }