XForms

Última modificação por Saulo em 2010/09/10 14:27

Introdução

XForms é uma recomendação da w3c e representa a nova geração de formulários para a web. Ele foi projetado para se integrar à outras linguagens de marcação, como XHTML, ODF e SVG.

Um formulário XForm reúne e processa dados XML usando uma arquitetura que separa a apresentação do conteúdo.

Ele organiza os dados em instâncias, com isso há uma maior consistência nos dados e facilidade de manipulação.

Principais vantagens

  • Incrementa a experiência do usuário, trazendo a maioria das verificações de campos para o browser;
  • Usa tecnologias XML existentes, como XPath para endereçar e calcular valores e XML Schema para definir tipos de dados;
  • Independe do dispositivo usado;
  • Facilita o desenvolvimento de formulários complicados;
  • É acessível, pois foi projetado de modo a servir convenientemente às tecnologias assistivas (cegos por exemplo). 

O que se pode fazer com XForms?

XForms pode fazer tudo que formulários HTML fazem e mais. XForms permite:

  • Verificar entrada de dados tão logo sejam digitados pelo usuário.
  • Indicar obrigatoriedade de preenchimento de campos e ressaltar que o formulário não poderá ser enviado sem o devido preenchimento daqueles campos
  • Submeter os dados do formulário como XML.
  • Integrar os dados com serviços WEB, por exemplo, usando SOAP e XML RPC.
  • Submeter o mesmo formulário a diferentes servidores (por exemplo, uma string de busca para diferentes mecanismos de busca).
  • Salvar e recuperar valores de um arquivo.
  • Usar os resultados de uma submissão do formulário para preenchimento de futuros formulários.
  • Capturar em um documento externo os dados iniciais para um formulário.
  • Processar cálculos com valores alternativos aos de submissão.
  • Fixar condições de entrada de valores, tal como requerer que estejam em uma determinada faixa de valores.
  • Construir 'carrinhos de compras' e 'assistentes' de formulários que não tenham necessidade de scripts de reavalição.

Controles

Single-Line Text Input

<input type="text" name="teste"/>

Multi-Line Text Input

<textarea name="teste"></textarea>

Password Text Input

<input type="password" name="teste"/>

Submit, Reset e Button

<input type="submit" value="Enviar"/>
<input type="reset" value="Resetar"/>
<input type="button" value="teste"/> 

Radio Buttons

<input type="radio" name="car" value="0"/> None<br/>
<input type="radio" name="car" value="1"/> 1 car<br/>
<input type="radio" name="car" value="2"/> 2 cars<br/>
<input type="radio" name="car" value="many"/> 5 or more<br/>

Exemplos

Salvar e recuperar valores de um arquivo

Exemplo de instância, em um arquivo separado do formulário:

<exempItems  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <exempItem itemID="">

            <cor />

            <valor />

        </exempItem>

</exempItems>

Chamada no formulário:

<html xmlns="http://www.w3.org/1999/xhtml"

      xmlns:ev="http://www.w3.org/2001/xml-events"

      xmlns:xforms="http://www.w3.org/2002/xforms">

    <head>

       <title>Exemplo</title>

        <xforms:model id="exempItems">

            <xforms:instance id="itens" src="itens.xml"/>

            <xforms:submission id="submit_model_items" action="http://xformstest.org/cgi-bin/showinstance.sh"

                method="post" instance="itens"/>

        </xforms:model>

    </head>

Popular formulário

<xforms:repeat nodeset="instance('itens')/exempItem" id="repeatItems">

    <h2>Item</h2>

    <xforms:input ref="@itemID">

        <xforms:label>Item ID</xforms:label>

    </xforms:input>

    <br />

    <xforms:input ref="cor">

        <xforms:label>Cor</xforms:label>

    </xforms:input>

    <br />

    <xforms:input ref="valor">

        <xforms:label>Valor</xforms:label>

    </xforms:input>

    <br />

</xforms:repeat>

Inserir ou deletar itens

<xforms:group>

    <br />

    <xforms:trigger>

        <xforms:label>Inserir</xforms:label>

        <xforms:insert nodeset="instance('itens')/exempItem" at="index('repeatItems')" 

              position="after" ev:event="DOMActivate" />

    </xforms:trigger>

    <xforms:trigger>

        <xforms:label>Deletar</xforms:label>

        <xforms:delete nodeset="instance('itens')/exempItem" at="index('repeatItems')" 

              ev:event="DOMActivate" />

    </xforms:trigger>

</xforms:group>

Browsers

Atualmente, nenhum dos tradicionais browsers suporta, nativamente, o XForms. O que se tem são plugins.

Firefox: https://addons.mozilla.org/pt-BR/firefox/addon/824/

Geralmente quem mexe com XForms usa X-Smiles (http://www.x-smiles.org)

Referências

http://www.w3.org/MarkUp/Forms/

http://www.w3schools.com/xforms/

http://maujor.com/w3c/xformfaq.html

http://www.w3.org/TR/2009/REC-xforms-20091020/

http://www.w3.org/MarkUp/Forms/wiki/XForms_Implementations

http://publib.boulder.ibm.com/infocenter/wf/v2r7m0/index.jsp?topic=/com.ibm.help.wf.doc/Specification/i_xfdl_g_xforms_actions_xforms_insert.html

http://www.orbeon.com/orbeon/doc/reference-xforms-guide

http://www.xml.com/pub/a/2003/09/10/xforms.html

Failed to execute the [velocity] macro. Cause: [The execution of the [velocity] script macro is not allowed in [richapp:Panels.MyRecentModifications]. Check the rights of its last author or the parameters if it's rendered from another script.]. Click on this message for details.

Failed to execute the [velocity] macro. Cause: [The execution of the [velocity] script macro is not allowed in [richapp:Panels.OrphanedPages]. Check the rights of its last author or the parameters if it's rendered from another script.]. Click on this message for details.

Failed to execute the [velocity] macro. Cause: [The execution of the [velocity] script macro is not allowed in [richapp:Panels.Shortcuts]. Check the rights of its last author or the parameters if it's rendered from another script.]. Click on this message for details.