Este ano (que vai no fim) celebram-se os 10 anos da publicação do formato XML (10 de Janeiro de 2008) que o World Wide Web Consortium está a celebrar.

“There is essentially no computer in the world, desktop, handheld, or backroom, that doesn’t process XML sometimes…”
Tim Bray

Este lançamento mexeu com a forma de “fazer a web“: o HTML deu lugar ao XHTML (passou a recomendação do W3C em 26 de Janeiro de 2000), sendo este:

  • mais rigoroso e limpo que o HTML
  • e na sua essência, não mais do que HTML definido como XML application

A partir daqui outras tecnologias/formatos se seguiram, entre elas:

  • XML DOM
  • XSLT
  • XSL-FO
  • XPath
  • XQuery
  • XLink
  • XPointer
  • Schema
  • XForms

A natural evolução do HTML para o XHTML, leva a que se exija mais do que uma “linguagem de formatação”.
Relativamente ao tema deste artigo, as XForms são a nova geração de forms, indo de encontro às novas necessidades de quem desenvolve para a web.

As XForm assentam num (bom) princípio: separação entre a definição e a apresentação. Assim, usam XML como linguagem de definição, armazenamento e transporte de dados, e XHTML para apresentação.

Um princípio muito importante é nunca confiar no dados fornecidos pelo utilizador, o que implica validações constantes.
Com as XForms é possível definir especificamente qual o tipo de dados aceite em determinado campo sem qualquer processamento extra.

Embora sejam uma recomendação do W3C desde 2001, os browsers modernos ainda não as implementam, no entanto existe uma extensão para Firefox que implementa a quase totalidade das especificações XForm 1.0 e permite testar algumas destas funcionalidades.

Recém chegado à nova geração de forms, deixo um exemplo e duas referência1, 2.

O modeloa inclurir no <header>

<xforms:model>
	<xforms:instance xmlns="">
		<person>
			<fname/>
			<lname/>
		</person>
	</xforms:instance>
	<xforms:submission id="form1" action="http://lab.dev/xforms/submit.php" method="post" />
</xforms:model>

A descrição a incluir no <body>

<xforms:input ref="/person/fname">
	<xforms:label>First Name</xforms:label>
</xforms:input>
<br/>
<xforms:input ref="/person/lname">
	<xforms:label>Last Name</xforms:label>
</xforms:input>
<br/>
<xforms:output value="concat(/person/fname,' ',/person/lname)">
	<xforms:label>Your Name:</xforms:label>
</xforms:output>
<br/>
<xforms:submit submission="form1">
	<xforms:label>Submit</xforms:label>
</xforms:submit>

O ficheiro de processamento (submit.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
if(empty($GLOBALS['HTTP_RAW_POST_DATA']))
	return;
 
$data = $HTTP_RAW_POST_DATA;
 
function startElement($parser, $name, $attrib)
{
	echo "<strong>". $name .":</strong> ";
}
 
function endElement($parser, $name)
{
	echo "<br />";
}
 
function content($parser, $data)
{
 
	printf("<em>%s</em>",utf8_decode($data));
}
 
$xmlParser = xml_parser_create();									#create xml parser
xml_set_element_handler($xmlParser,"startElement","endElement");	#set elements handler
xml_set_character_data_handler($xmlParser,"content");				#set character data handler

xml_parse($xmlParser,$data);										#parser POST'ed data
xml_parser_free($xmlParser);										#free parser resources

1 http://w3schools.com/xforms/default.asp
2 http://www.ibm.com/developerworks/xml/library/x-xformsintro1/