private void addSimpleInitializationSchema(ElementType instanceElement, ElementType itemElement) {

    ElementSchema instance = createElementSchema(instanceElement);
    ElementSchema item = createElementSchema(itemElement);
    instance.setContentModel(bounded(choice().add(item)));
    item.setContentModel(PCDATA);

    INSTANCE_CONTENT.add(instance);
  }
  public XFormsSchema(XHTML2Schema xhtml2) {

    // ====================================================================
    //             Core Module
    // ====================================================================

    // Add <model> to the XHTML 2 <head> content set.
    // See http://www.w3.org/TR/2006/WD-xhtml2-20060726/mod-xforms.html#XForms_Core
    // todo Should also add it to the structural and text content sets but
    // todo that doesn't seem quite right at the moment so we will leave
    // todo it so that it is only usable within the head for the moment.
    xhtml2.HEAD_CONTENT.add(model);

    // model: (instance|submission)*
    model.setContentModel(bounded(choice().add(instance).add(submission)));

    // instance: (ANY)*
    instance.setContentModel(INSTANCE_CONTENT);

    // submission: (EMPTY)
    submission.setContentModel(EMPTY);

    // ====================================================================
    //             Controls Module
    // ====================================================================

    // Define the form controls content set.
    // See http://www.w3.org/TR/2003/REC-xforms-20031014/slice8.html#id2625797
    FORM_CONTROLS.add(input).add(secret).add(textarea).add(submit).add(select).add(select1);

    CompositeModel UI_COMMON = choice();

    // Add the form controls to the XHTML 2 Structural and Text content
    // sets.
    // See http://www.w3.org/TR/2006/WD-xhtml2-20060726/mod-xforms.html#XForms_Form_Controls
    xhtml2.STRUCTURAL.add(FORM_CONTROLS);
    xhtml2.TEXT.add(FORM_CONTROLS);

    // todo this has been commented out because the code cannot deal with
    // todo this correctly. Once LabelStrategy has been changed to collect
    // todo not just text but an OutputBuffer containing text inline markup
    // todo then the following can be uncommented.
    //        // Add the XHTML 2 Text content set to UI_INLINE.
    //        // See
    // http://www.w3.org/TR/2006/WD-xhtml2-20060726/mod-xforms.html#XForms_Form_Controls
    //         UI_INLINE.add(xhtml2.TEXT);
    //
    //        // Exclude any form controls from appearing within other form elements
    //        // that can contain text.
    //         UI_INLINE.exclude(FORM_CONTROLS);

    // (PCDATA|UI_INLINE)*
    ContentModel MIXED_UI_INLINE = bounded(choice().add(PCDATA).add(UI_INLINE));

    label.setContentModel(MIXED_UI_INLINE);

    // label, (UI_COMMON)*
    CompositeModel CONTROL_MODEL = sequence().add(label).add(bounded(UI_COMMON));

    INPUT_CONTENT.add(UI_COMMON);

    input.setContentModel(sequence().add(label).add(bounded(INPUT_CONTENT)));
    secret.setContentModel(CONTROL_MODEL);
    CompositeModel SUBMIT_CONTENT = choice().add(setvalue).add(UI_COMMON);
    submit.setContentModel(sequence().add(label).add(bounded(SUBMIT_CONTENT)));
    textarea.setContentModel(CONTROL_MODEL);

    // (PCDATA)
    value.setContentModel(PCDATA);
    setvalue.setContentModel(PCDATA);

    // label, value, (UI_COMMON)*
    item.setContentModel(sequence().add(label).add(value).add(bounded(UI_COMMON)));

    CompositeModel LIST_UI_COMMON = choice().add(item);

    // label, (LIST_UI_COMMON)+, (UI_COMMON)*
    CompositeModel SELECT_MODEL =
        sequence().add(label).add(bounded(LIST_UI_COMMON).atLeastOne()).add(bounded(UI_COMMON));
    select.setContentModel(SELECT_MODEL);
    select1.setContentModel(SELECT_MODEL);

    // ====================================================================
    //             Group Module
    // ====================================================================

    // (FORM_CONTROLS|group|UI_COMMON)
    CompositeModel GROUP_CHOICE = choice().add(FORM_CONTROLS).add(group).add(UI_COMMON);
    group.setContentModel(
        sequence()
            // label?,
            .add(bounded(label).optional())
            // (GROUP_CHOICE)*
            .add(bounded(GROUP_CHOICE))
            .add(bounded(xhtml2.STRUCTURAL)));

    // Add group to the XHTML 2 Structural and Text content sets.
    // See http://www.w3.org/TR/2006/WD-xhtml2-20060726/mod-xforms.html#XForms_Group
    xhtml2.STRUCTURAL.add(group);
    xhtml2.TEXT.add(group);

    // todo See above todo
    //        // Exclude any form controls from appearing within other form elements
    //        // that can contain text.
    //         UI_INLINE.exclude(group);

    // ====================================================================
    //             Simple Initialization Module
    // ====================================================================

    addSimpleInitializationSchema(SIElements.INSTANCE, SIElements.ITEM);
    addSimpleInitializationSchema(XDIMECPSIElements.INSTANCE, XDIMECPSIElements.ITEM);
    addSimpleInitializationSchema(XDIMECPInterimSIElements.INSTANCE, XDIMECPInterimSIElements.ITEM);
  }