@Override
    public final Object execute(final Context context) throws Exception {
        final ITemplate template = this.getTemplate().getTemplate();
        final Map arguments = this.expression2 == null ? null : (Map) this.expression2.execute(context);
        final String location = Operation.toString(expression1.execute(context));
        final String name = this.relative(template.getResource().getName(), location).substring(1);
        final int separator = name.indexOf('#');
        if (separator == -1) {
            final ITemplate include = template.getEngine().getTemplate(name);
            if (include == null) {
                throw new ExecuteException(this, "Template[" + include.getResource().getName() + "] was not found!");
            }
            try {
                include.execute(new Context(include.getDetection(), context.getPrinter(), arguments));
            } catch (Exception e) {
                throw new ExecuteException(this, "Include Template[" + include.getResource().getName() + "] Error!", e);
            }
        } else {
            final ITemplate include = template.getEngine().getTemplate(name.substring(0, separator));
            if (include == null) {
                throw new ExecuteException(this, "Template[" + include.getResource().getName() + "] was not found!");
            }
            final String fragName = name.substring(separator + 1);
            final Fragment fragment = include.getFragments().get(fragName);
            if (fragment == null) {
                throw new ExecuteException(this, "Fragment[" + fragName + "] was not found in Template[" + include.getResource().getName() + "]!");
            }
            final Context fragContext = new Context(fragment.getDetection(), context.getPrinter(), arguments);
            final IStatement[] statements = fragment.getFragDefine().getStatements();
            for (int i = statements.length - 1; i >= 0; i--) {
                statements[i].execute(fragContext);
            }
        }
        return null;
    }