Что такое XForms и с чем его едят
🕛 27.10.2006, 12:06
Обмен данными между Web-приложением и пользователем всегда был не тривиальной задачей для неопытных пользователей. От регистрации до приобретений, мы постоянно запрашиваем данные используя типичные формы HTML. Теперь появились XForms, новое поколение форм разработанных под неизменным началом W3C. Одним из самых больших недостатков использования стандартных форм HTML является подтверждение данных. Хотя мы не можем гарантировать, что данные переданные конечным пользователем - являются достоверными и корректыми. Как разработчики мы обычно заходим очень далеко чтобы гарантировать, что эти данные хотя бы минимально синтаксически корректны. Мы проверяем корректность ввода email адреса по его структуре, проверяем корректность ввода телефонных номеров, почтовых индексов и т.д.
Для простого набора данных, создав группу функций проверки с использованием JavaScript обычно можно достичь цели. Для более сложных данных, Вам обычно нужно проверять данные на сервере, с которого идет отправка данных, плюс код на сервере который эти данные принимает.
Даже если в передовых платформах разработки WEB приложений существуют способы обойти этот геморрой то они в большей степени представляют из себя наборы функций проверки (валидации) которые выполняются на стороне сервера. XForms - клиент-сайд решение, выполняющееся на клиентской стороне. Это - стандарт разработанный W3c, который гарантирует интеграцию XForms в основные броузеры.
Также как и многие другие технологии, XForms в своем текущем состоянии может выполняться только через сторонние плагины к броузерам или через отдельные приложения (примером может послужить технология Macromedia Flash). Это означает что широкое-масштабное использование XForms в реальном сайте может быть проблематичным для ваших конечных пользователей, но Вы можете разрабатывать прототипы и использовать их на ваше усмотрение.
Среди движков для работы с XForm есть такие как - XForms Explorer от Novell, и X-Smiles разработанный Университетом города Хельсинки. Оба движка являются Linux-дружественными поскольку они основаны на Java. Для пользователей Internet Explorer есть плагин formsPlayer, и IBM alphaWorks XML Forms package. К несчастью, для других броузеров из семейств Mozilla и Опера, ситуация с XForms пока не ясна. Есть множество реализаций XForms, разрабатываемых кроме перечисленых, но они ещё далеки от финальной стадии разработки.
Давайте проиллюстрируем довольно простой XForm:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xform="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <head> <title> One way reservation system </title> <xform:model> <xform:submission action="/xformsprocessor.jsp" id="submit" method="post"/> <xform:instance src="flightmodel.xml"/> <xform:bind ref="/flight/departure" type="xsd:date"/> <xform:bind constraint=". > 0" ref="/flight/adults/number" type="xsd:integer"/> <xform:bind constraint=". > 0" ref="/flight/children/number" type="xsd:integer"/> <xform:bind calculate="(/flight/adults/number * /flight/adults/price) + (/flight/children/number * /flight/children/price)" ref="/flight/total"/> </xform:model> </head> <body> <h4 align="center"> One way reservation system </h4> <table align="center" border="5"> <tr> <td> From : Anywhere </td> <td> To : Anywhere </td> </tr> <tr> <td> <xform:output ref="/flight/adults/price"> <xform:label style="font-weight:bold;"> Adults </xform:label> </xform:output> </td> <td> <xform:output ref="/flight/children/price"> <xform:label style="font-weight:bold;"> Children </xform:label> </xform:output> </td> </tr> <tr> <th> <xform:input ref="/flight/adults/number"> <xform:label style="font-weight:bold;"> No.of Adults </xform:label> </xform:input> </th> </tr> <tr> <th> <xform:input ref="/flight/children/number"> <xform:label style="font-weight:bold;"> No. of Children </xform:label> </xform:input> </th> </tr> <tr> <th> <xform:input ref="/flight/departure"> <xform:label style="font-weight:bold;"> Departure date </xform:label> </xform:input> </th> </tr> <tr> <th> <xform:output ref="/flight/total"> <xform:label style="font-weight:bold;"> Total </xform:label> </xform:output> </th> </tr> <tr> <td> <xform:submit name="Submit" submission="submit"> <xform:label>Reserve</xform:label> </xform:submit> <xform:trigger> <xform:label>Reset</xform:label> <xform:reset ev:event="DOMActivate"/> </xform:trigger> </td> </tr> </table> </body> </html>
Мы начинаем с объявлкния типичных элементов документа XHTML: <html>, <head>, и <title>, с небольшим отличием выражающимся в добавлении трех дополнительных параметров xmlns.
Первая часть нашего XForm вложена внутрь тега <head> и включает несколько логических структур, которые соответственно вложены в тег <xform:model>. Элемент xform:submission объявляет сервер-стороннюю страницу, которая обработает XForm, тогда как xform:instance определяет модель данных XML, которая будет использована для всей формы. В нашем случае, файл flightmodel.xml должен иметь следующую структуру:
<?xml version="1.0" encoding="ISO-8859-1"?> <flight> <departure>2004-05-24</departure> <adults> <number>0</number> <price>120</price> </adults> <children> <number>0</number> <price>60</price> </children> <total>0</total> </flight>
Как только мы оформили заголовок документа, мы можем начинать определять константы логического процесса используя xform:bind элементы. Первое объявление ограничиваетатрибут "departure" стандартной датой схемы. Фактический синтаксис использованный в "ref" атрибуте основан на XPath. Затем мы определяем оба атрибута "number" целочисленнымии имеющими значения больше нуля. Наконец, мы объявляем математическую операцию через атрибут "calculate" и устанавливаем результат в атрибут "total" следующий за закрытием <xform:model> тега.
С оформленой моделью XForm определенний, мы - теперь можем открывать тег <body> и определять элементы XForm, которые будут отображены на экране.
Первые два объявления используют xform:output элемент, чтобы отображать фактическую часть модели данных. Используя "ref" атрибут мы вызываем два элемента "price" присутстующие в модели. Затем мы определяем два xform:input элемента с помощью которых пользователи будут вводить информацию. Обратите внимание что для каждого из этих элементов также определен атрибут "ref". Заканчивая XForm, мы определяем xform:submit элемент, который используется для тогочтобы сгенерировать кнопку подтверждения (отправки), и специальную кнопку сброса xform:reset, чтобы инициализировать модель данных в начальное состояние.
Среди световых выполняющего предшествующего XForm - следующее: * Каждое изменение на вводе автоматически инициирует модификацию в модели данных. * Если Вы пытаетесь вводить данные, которые выходят из определеной области модели данных, броузер отмечает ошибки. * На сервер приходит уде модифицированная модель данных.
Хотя отметили передовые логические возможности доступные в XForms, спецификация в целом имеет значительно более широкую область чем эта характеристика.
XForms предназначен для использования в handheld устройствах, а также для обеспечения полной интеграции с другими технологиями XML.
Автор: Daniel Rubio is the principal consultant at Osmosis Latina, a firm specializing in enterprise software development, training, and consulting based in Mexico.