docs: @Override
  	protected Object doExec(Element element, Object scope, String propertyPath, Object... arguments) throws TemplateException {
  		if (!propertyPath.equals(".") && ConverterRegistry.hasType(scope.getClass())) {
  			throw new TemplateException("Operand is property path but scope is not an object.");
  		}
  		Object value = content.getObject(scope, propertyPath);
  		if (value == null) {
  			return null;
  		}
  		if (Types.isNumber(value)) {
  			value = value.toString();
  		}
  		if (Types.isEnum(value)) {
  			value = ((Enum<?>) value).name();
  		}
  		if (!(value instanceof String)) {
  			throw new TemplateException("Invalid element |%s|. ID operand should be string, enumeration or numeric.", element);
  		}
  		return new AttrImpl("id", (String) value);
  	}