Основы XForms

Изучение основных элементов для создания нового поколения форм

XForms предоставляет множество новых возможностей для авторов и разработчиков веб-сайтов, которые хотят создавать веб формы, включающие богатые интерактивные возможности, и кроме того, поддерживать многие знакомые аспекты создания форм из HTML. Данная статья объясняет основы создания форм XForms, включая структуру собственно формы; основные элементы управления, или поля и наиболее общие опции представления.

Николас Чейз (Nicholas Chase), президент, Chase and Chase, Inc.

Николас Чейз (Nicholas Chase), автор Studio B , занимается разработкой Web-сайтов для таких компаний, как Lucent Technologies, Sun Microsystems, Oracle и Tampa Bay Buccaneers. Ник работал школьным преподавателем физики, управляющим предприятия по утилизации малоактивных радиоактивных отходов, редактором онлайнового журнала по научной фантастике, специалистом по мультимедиа и инструктором Oracle. Не так давно он занимал пост главного директора по технологиям компании Site Dynamics Interactive Communications в Клируотере, Флорида, США. Автор четырех книг по Web-разработке, включая XML Primer Plus (издательство Sams). Ник всегда рад получить комментарии от читателей, которые можно присылать по адресу nicholas@nicholaschase.com.



01.12.2006

Введение

Веб-формы используются уже давно, однако, вы можете сделать с ними еще множество вещей. XForms предоставляет гораздо больше возможностей, включая расширенную интерактивность и больше опций представления, однако прежде чем вдаваться в детали, вы должны узнать основы сборки формы XForms.

Начало работы

Первая вещь, которая вам понадобится - это браузер, способный отображать XForms. В данной статье, вы будете использовать Firefox с добавлением XForms, доступным на Mozilla.org. (Имейте в виду, что он обозначен как "не предназначенный для конечных пользователей," однако на время написания данной статьи он представляется вполне стабильным.) Если вы предпочитаете Microsoft® Internet Explorer, вы можете загрузить Formsplayer. Вам потребуется сделать некоторые минимальные изменения в заголовке файла, чтобы загрузить Formsplayer, и использовать расширение .htm вместо .xhtml, которое вы бы использовали для форм Firefox, но в остальном они должны работать прекрасно. Загрузите иллюстрационную программу, включенную в данную статью, чтобы увидеть различия.

Данная статья подразумевает, что вы знакомы с основными понятиями XML.


Создание базовой формы

Изучите пример формы, предназначенной для сбора информации о любимом композиторе пользователя. В HTML форме вы бы просто включили поля формы в страницу вместе с элементом form. Форма XForms выглядит также, однако структура немного другая. Вы можете видеть простую форму в листинге 1.

Листинг 1. базовая форма
<?xml version="1.0" encoding="ASCII"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xforms="http://www.w3.org/2002/XForms">
<head>
<title>Describe a composer</title>

<xforms:model id="model_composers">

    <xforms:instance xmlns="">
        <composers>
           <composer>
               <name></name>
               <genre></genre>
               <accessibility></accessibility>
               <difficulty></difficulty>
               <totalscore></totalscore>
               <examples>
                  <example></example>
                  <example></example>
                  <example></example>
               </examples>
            </composer>
        </composers>
    </xforms:instance>

    <xforms:submission id="submit_model_composers"
      action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>

</xforms:model>

</head>
<body>
...

Первая часть формы - это модель. Модель определяет данные, которые должны быть включены в форму и уточняет, что произойдет с этими данными, когда пользователь их представит. В данном случае, в качестве примера был создан простой XML документ для хранения данных, а элемент представления уточняет, что когда данные представлены, они должны быть отосланы на http://xformstest.org/cgi-bin/showinstance.sh. Как вы увидите через мгновение, адресат просто переправляет обратно представленные вами данные. Следующим шагом будет создание собственно элементов формы (см. листинг 2).

Листинг 2. Элементы форм
...
    </xforms:instance>
    <xforms:submission id="submit_model_composers"
      action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>
</xforms:model>

</head>
<body>

<xforms:input ref="/composers/composer/name">
    <xforms:label>Name: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/composers/composer/genre">
    <xforms:label>Genre: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/composers/composer/accessibility">
    <xforms:label>Accessibility: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/composers/composer/difficulty">
    <xforms:label>Difficulty: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/composers/composer/totalscore">
    <xforms:label>Totalscore: </xforms:label>
</xforms:input>
<br />
<xforms:repeat
    id="repeat_example_model_composers"
    nodeset="/composers/composer/examples/example">
    <xforms:input ref=".">
        <xforms:label>Example: </xforms:label>
    </xforms:input>
</xforms:repeat>

<xforms:submit submission="submit_model_composers">
    <xforms:label>Submit</xforms:label>
</xforms:submit>

</body>
</html>

Первые несколько полей совершенно простые. Поля ввода текста созданы с использованием элемента input, а атрибут ref использовался для задания узла в иллюстрационном документе, которому соответствует этот "управляющий элемент". Другими словами, когда пользователь вводит имя, такое как Моцарт, в управляющий элемент name, эта информация автоматически становится содержанием элемента /composers/composer/name. Каждый управляющий элемент также имеет элемент label, который именно тем и занимается, что предоставляет метку в окне браузера, что позволяет пользователю знать, на что он или она смотрит.

В нижней части листинга 2 добавлен элемент repeat. Этот элемент выбирает особую группу узлов, в данном случае элементы example, и выполняет их содержание по разу для каждого. Имейте в виду, что элемент repeat имеет в своем содержании другой управляющий элемент ввода, но сейчас атрибут ref относится к текущему узлу в совокупности узлов.

Если вы загрузите эту форму в браузере, вы должны увидеть нечто знакомое, как на рисунке 1.

Рисунок 1. Базовая форма
Базовая форма

Обратите внимание, что метки прекрасно сами выравниваются перед каждым из полей. Убедитесь, что включили в метку все необходимые пробелы.

Теперь давайте посмотрим, что произойдет, когда вы действительно введете данные в форму.

Базовое представление

Как упоминалось ранее, атрибут ref привязывает управляющий элемент к узлу в иллюстрационном документе. Вы можете увидеть это действие, если заполните форму, как показано на рисунке 2, и нажмете кнопку Submit.

Рисунок 2. Заполнение формы
Заполнение формы

Затем вы можете подтвердить форму. В данном случае, вы ничего не сделали, чтобы задать какие-либо особенности представляемых данных. В случае HTML формы, данные проходят как пары имя-значение, но это не HTML форма. Значение по умолчанию для форм XForms должно представлять реальный пример XML в качестве содержания запроса POST. Указанный адресат берет эту информацию и просто отсылает ее обратно, поэтому вы можете видеть результат на рисунке 3.

Рисунок 3. Результаты
Результаты

Это что касается самых основ, однако прежде чем двигаться дальше, давайте слегка наведем порядок.

Перемещение примера в отдельный файл

Во многих примерах в ряде подсказок, которые сопровождают данную статью, вы увидите, что пример фактически не должен быть частью формы - по крайней мере, не прямо. Вы также можете отделить копию XML в отдельный документ и затем сделать ссылку на документ из отдельного элемента (см. листинг 3).

Листинг 3. Разделение данных
...
<xforms:model id="model_composers">
    <xforms:instance src="composer.xml">
    </xforms:instance>
    <xforms:submission id="submit_model_composers"
      action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>
</xforms:model>
...

Отделение делает обращение с формами намного проще, а также упрощает изменение копий данных при необходимости.


Дополнительные типы управляющих элементов

Теперь, после того как у вас есть самые начала, давайте посмотрим на некоторые другие типы управляющих элементов, которые вы можете добавить к форме.

Секрет

В HTML одним из часто используемых полей является поле "пароль", которое на самом деле небезопасно, но скрывает то, что пользователь печатает, так что никто не может этого увидеть из-за его плеча. Конечно, они могут быть использованы не только для паролей, поэтому в XForms этот управляющий элемент называется secret. Например, возможно вы хотите, чтобы люди угадали композитора на основе подсказок (см. листинг 4).

Листинг 4. Управляющий элемент secret
...
<body>

<xforms:secret ref="/composers/composer/name" 
                                 model="model_composers">
       <xforms:label>Name: </xforms:label>
</xforms:secret>
<br />
<xforms:input ref="/composers/composer/genre" model="model_composers">
...

Теперь, после того как сформировано изображение формы, вы можете видеть, что то, что вы печатаете в поле имя, теперь невидимо, как показано на рисунке 4.

Рисунок 4. Скрытие данных
Скрытие данных

Остальные управляющие элементы больше касаются функциональности, чем вида.

Диапазон

Одним из управляющих элементов, не имеющих двойника в HTML, является range. Это управляющий элемент, который представляется как "ползунок", который пользователь может двигать вперед и назад, чтобы выбрать значение. Вы можете контролировать значения start, end и величину интервалов (см. листинг 5).

Листинг 5. Управляющий элемент диапазон
...
<xforms:input ref="/composers/composer/genre">
    <xforms:label>Genre: </xforms:label>
</xforms:input>
<br /> <br />
<xforms:range start="-10" end="10" step="1" 
              ref="/composers/composer/accessibility">
   <xforms:label>Accessibility: <br /></xforms:label>
</xforms:range>
<br /> <br />
<xforms:range  start="-5.0" end="5.0" step="0.5" 
                 ref="/composers/composer/difficulty">
   <xforms:label>Difficulty: <br /></xforms:label>
</xforms:range>
<br /> <br />
<xforms:input ref="/composers/composer/totalscore"
   >
    <xforms:label>Totalscore: </xforms:label>
</xforms:input>
...

Учтите, что вам не обязательно делать диапазоны симметричными, как сделано здесь. Цифры, которые вы выберете, совершенно произвольны, так же как и размер шага. Если вы перезагрузите страницу, вы увидите, что ползунки находятся на своих местах, как показано на рисунке 5.

Рисунок 5. Управляющий элемент range
Управляющий элемент range

Данные, выбранные пользователем с использованием управляющего элемента range, представляют собой простое число и добавляются в иллюстрационный документ, как если бы пользователь ввел их напрямую. Вы можете проверить это, заполнив форму и посмотрев на иллюстрационный документ.

Выбор

HTML также включает возможность предоставлять некоторое количество пронумерованных опций. В HTML вы можете создать поле, которое предусматривает единственный или множественный выбор, но вы должны заранее решить, как это будет выглядеть. Например, вы можете добавить последовательность кнопок-флажков, или последовательность кнопок с зависимой фиксацией, или ниспадающее меню. В XForms вы просто определяете, что вы хотите, чтобы пользователь мог сделать выбор, а остальное доделывают средства визуализации (см. листинг 6).

Листинг 6. Управляющий элемент select
...
<xforms:input ref="/composers/composer/name">
    <xforms:label>Name: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/composers/composer/genre">
    <xforms:label>Genre: </xforms:label>
</xforms:input>
<xforms:select ref="/composers/composer/genre" appearance="full">
    <xforms:label>Genre: </xforms:label>
    <xforms:item>
        <xforms:label>Baroque</xforms:label>
        <xforms:value>B</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Classical</xforms:label>
        <xforms:value>C</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Neo-Classical</xforms:label>
        <xforms:value>NC</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Modern</xforms:label>
        <xforms:value>M</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Pop</xforms:label>
        <xforms:value>P</xforms:value>
    </xforms:item>
</xforms:select>
    
<xforms:range start="-10" end="10" step="1" 
              ref="/composers/composer/accessibility">
   <xforms:label>Accessibility: <br /></xforms:label>
</xforms:range>
...

В данном случае было добавлено некоторое количество различных пунктов, из которых можно сделать выбор, с указанием для каждого своего label (той части, которая видима для пользователя) и своего value (часть, фактически представляемая как часть данных). Вы можете увидеть это в действии, если перезагрузите форму (см. рисунок 6).

Рисунок 6. Список выбора
Список выбора

А теперь обратите внимание на пару вещей. Во-первых, заметьте, что и окно для ввода Жанр (Genre) и список для выбора ссылаются на один и тот же узел в иллюстрационном документе. Поэтому, когда вы выбираете один из флажков, значение для этого флажка добавляется к элементу genre и появляется в окне для ввода.

Во-вторых, обратите внимание, что кнопки-флажки не были заданы, но были отображены. Что было задано - так это вид (appearance) документа в целом (full). В большинстве случаев, это выдаст кнопки-флажки для списка на выбор. Вы также можете определить вид как компактный (compact) (см. листинг 7).

Листинг 7. Изменение вида списка выбора
...
<xforms:input ref="/composers/composer/genre">
    <xforms:label>Genre: </xforms:label>
</xforms:input>
<xforms:select ref="/composers/composer/genre" appearance="compact">
    <xforms:label>Genre: </xforms:label>
    <xforms:item>
        <xforms:label>Baroque</xforms:label>
        <xforms:value>B</xforms:value>
...

Это изменит вид списка выбора, как вы можете видеть на рисунке 7.

Рисунок 7. Изменение списка выбора
Изменение списка выбора

Обратите внимание, что элемент управления больше не отображается как "блочный" элемент, автоматически выравниваемый. Функционально он ведет себя так же, как и список множественного выбора в HTML.

Спецификация XForms также предоставляет "минимальный" вид, но в Firefox он выглядит так же как compact.

Как браузер визуализует это - остается на полное усмотрение браузера. Это одна из сильных сторон XForms, потому что она позволяет устройствам делать то, что нужно, чтобы четко изложить дело. Например, сотовый телефон может отображать список выбора совершенно по-другому. Это одно из преимуществ отделения данных от представления.

Все это прекрасно, но что если вы не хотите, чтобы пользователь мог сделать больше, чем один выбор? Например, что если вы хотите кнопки с зависимой фиксацией вместо кнопок-флажков? Вы можете достичь этого, используя элемент управления select1, вместо элемента select (см. листинг 8).

Листинг 8. Элемент управления select1
...
<xforms:input ref="/composers/composer/genre">
    <xforms:label>Genre: </xforms:label>
</xforms:input>
<xforms:select1 ref="/composers/composer/genre" appearance="full">
    <xforms:label>Genre: </xforms:label>
    <xforms:item>
        <xforms:label>Baroque</xforms:label>
        <xforms:value>B</xforms:value>
    </xforms:item>
...
</xforms:select1>

<xforms:range start="-10" end="10" step="1" 
ref="/composers/composer/accessibility">
    <xforms:label>Accessibility: <br /></xforms:label>
</xforms:range>
...

Данные те же, но вы можете видеть различия, когда вы формируете изображение формы (см. рисунок 8).

Рисунок 8. Элемент управления select1
Элемент управления select

Спецификация XForms включает дополнительные элементы управления, такие как элемент управления file upload, но они используются на обычной основе.


Установка значений элементов управления

Еще один набор функциональных возможностей, общий для форм, - это установка значений, обычно, когда форма впервые загружается, но иногда в процессе использования формы. Давайте взглянем на то, как это сделать в форме XForms.

Использование исходных значений

Вы уже увидели, как добавление информации в управляющие элементы формы добавляет ее в копию. Но фактически, этот обмен действует в обоих направлениях. Информация, которую вы добавляете к копии, добавляется к управляющим элементам на форме (см. листинг 9).

Листинг 9. Информация в копии
...
<xforms:model id="model_composers">

<xforms:instance xmlns="">
<composers>
   <composer>
      <name>Wolfgang Amadeus Mozart</name>
      <genre>C</genre>
      <accessibility>9</accessibility>
      <difficulty>9</difficulty>
      <totalscore>18</totalscore>
      <examples>
         <example>A little night music</example>
         <example>Twinkle, twinkle, little star</example>
         <example>Don Giovanni</example>
      </examples>
   </composer>
</composers>
</xforms:instance>

<xforms:submission id="submit_model_composers"
     action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>

</xforms:model>
...

Здесь вы видите информацию, которая немного отличается от того, что ранее содержалось в форме, но если вы загрузите форму, вы увидите ее на странице (см. рисунок 9).

Рисунок 9. Данные из копии
Данные из копии

Таким образом, все, что вы добавляете в копию, отражается в управляющих элементах, и наоборот. Но XForms также предоставляет вам другую опцию для создания этой связи.

Значения связок

До сих пор вы видели только способность ссылаться на определенный узел в копии. XForms также предоставляет вам возможность однозначно "привязаться" к определенному набору узлов. Например, вы можете создать идентификатор, по которому можно будет ссылаться на отдельный узел (см. листинг 10).

Листинг 10. Создание связки
<?xml version="1.0" encoding="ASCII"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xforms="http://www.w3.org/2002/XForms">
<head>
<title>Describe a composer</title>

<xforms:model id="model_composers">
    <xforms:instance xmlns="">
...
    </xforms:instance>
    <xforms:submission id="submit_model_composers"
      action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>
        <xforms:bind id="total" nodeset="/composers/composer/totalscore"/>

</xforms:model>

</head>
<body>

<xforms:input ref="/composers/composer/name">
    <xforms:label>Name: </xforms:label>
</xforms:input>
...
<xforms:range  start="-10.0" end="10.0" step="0.5" 
                   ref="/composers/composer/difficulty">
   <xforms:label>Difficulty: <br /></xforms:label>
</xforms:range>

<br /> <br />

<xforms:input bind="total">
    <xforms:label>Totalscore: </xforms:label>
</xforms:input>

<br />
<xforms:repeat
...

Обратите внимание, что элемент управления Totalscore относится не к конкретному узлу, а к конкретному отысканию, как определено значением его идентификатора. Форма определяет саму связку в модели. Таким образом, когда вы загружаете форму, XForms кроме того знает где взять значение Totalscore (см. рисунок 10).

Рисунок 10. Использование значения связки
Использование значения связки

Эта возможность полезна для абстрагирования формы; например, в крупной форме, вы можете создавать связки для каждого элемента данных, а затем вы можете изменять структуру копии без необходимости изменения всей формы; просто измените наборы узлов в каждой связке.

Использование расчетных значений

Но возможно наиболее полезной функцией связки является создание расчетных значений. Например, вы можете создать ситуацию, в которой значения доступность и сложность автоматически складываются для создания Totalscore (см. листинг 11).

Листинг 11. Создание расчетного значения
...
</xforms:instance>
    <xforms:submission id="submit_model_composers"
      action="http://XFormstest.org/cgi-bin/showinstance.sh" method="post"/>
        
    <xforms:bind id="total" nodeset="/composers/composer/totalscore" 
       calculate="/composers/composer/accessibility + 
                                  /composers/composer/difficulty"/>

</xforms:model>
...

Теперь, если вы загрузите форму, вы увидите, что изменение значений доступности или сложности автоматически изменит значение Totalscore (см. рисунок 11).

Рисунок 11. Сложение значений
Сложение значений

Представление формы

Вы уже увидели, что типичное представление формы XForms включает в себя отсылку целого примера к серверу. Но это случается не всегда.


Представление части формы

Одной из вариаций представления XForms является отсылка только небольшой части копии. Например, вы можете задать, чтобы форма представила только иллюстрационный элемент (см. листинг 12).

Листинг 12. Представление только примеров
...
            </examples>
         </composer>
      </composers>

   </xforms:instance>
    
   <xforms:submission id="submit_model_composers" 
                         ref="/composers/composer/examples"
                         action="http://localhost/XForms.php"
                         method="post"/>
                         
   <xforms:bind id="total" nodeset="/composers/composer/totalscore" 
        calculate="/composers/composer/accessibility + 
                              /composers/composer/difficulty" />
</xforms:model>
...

Теперь, если вы представите форму, вы увидите, что представляется только часть копии определенная в атрибуте ref (см. рисунок 12).

Рисунок 12. Представление только части копии
Представление только части копии

Другой вариацией является представление копии без замещения целой страницы.


Замещение части копии

Одним из крупных преимуществ XForms по сравнению с обычным HTML является способность отсылать представление и получать назад данные в виде XML, который может быть добавлен к копии и, как вы уже видели, к существующим элементам управления на странице. Имейте в виду, что до тех пор, пока вы не настроите безопасность вашего браузера, ответ должен приходить с того же имени домена, с которого была изначально загружена форма. Например, если вы загрузили страницу http://www.nicholaschase.com/composers.xhtml и хотите чтобы ответное представление заполнило копию этой формой, лучше если представление будет иметь URL, начинающийся с http://www.nicholaschase. Это означает, что вы не можете просто загрузить форму локально. Формы, включенные с примером для этой статьи, написаны на языке PHP и просто возвращают данные. Вы можете использовать его, чтобы протестировать следующую секцию.

Чтобы форма заместила копию вместо замещения страницы нужно просто добавить атрибут в замещение (см. листинг 13).

Листинг 13. Замещение копии
...
    </xforms:instance>
    
           <xforms:submission id="submit_model_composers" 
                         ref="/composers/composer/examples"
                         replace="instance"
                         action="http://localhost/XForms.php"
                         method="post"/>
                         
    <xforms:bind id="total" nodeset="/composers/composer/totalscore" 
        calculate="/composers/composer/accessibility + 
                                    /composers/composer/difficulty" />
</xforms:model>

</head>
<body>
...
<br />
<xforms:repeat
    id="repeat_example_model_composers"
    nodeset="/composers/composer/examples/example">
    <xforms:input ref=".">
        <xforms:label>Example: </xforms:label>
    </xforms:input>
</xforms:repeat>

<xforms:repeat
    id="repeat_example_model_composers"
    nodeset="/examples/example">
    <xforms:input ref=".">
        <xforms:label>Submitted Example: </xforms:label>
    </xforms:input>
</xforms:repeat>

<xforms:submit submission="submit_model_composers">
    <xforms:label>Submit</xforms:label>
</xforms:submit>

</body>
</html>

Обратите внимание, что был добавлен второй элемент повторения, который появится, только если в документе есть узлы /examples/example. По этой причине, они не появятся, когда вы впервые загрузите документ, но после подтверждения, вы их увидите (см. рисунок 13).

Рисунок 13. Представленная копия
Представленная копия

Прежде чем закончить, есть еще одна вещь, которую вам следует знать.


Назад к началам: Традиционная веб-форма

До сих пор рассматривалось множество вещей, которые отличают XForms от HTML, но что если вы хотите использовать форму XForms, но при этом использовать скрипт старого стиля? К счастью, XForms с легкостью можно заставить принять данные в старом стиле имя-значение (см. листинг 14).

Листинг 14. Представление традиционных данных
...
<xforms:model id="model_composers">
  <xforms:instance id="instance_model_composers" src="composer.xml"/>
                       
  <xforms:submission id="submit_model_composers" 
                         action="http://localhost/XForms.php"
                         method="get"
                         encoding="application/x-www-form-urlencoded"/>
                         
    <xforms:bind id="total" nodeset="/composers/composer/totalscore" 
        calculate="/composers/composer/accessibility + 
                                      /composers/composer/difficulty" />
</xforms:model>
...

Заметьте, что мы используем метод GET вместо метода POST, так как таким образом XForms знает, что нужно поместить данные в сам URL, а не в запрос. Также, атрибут кодирования указывает программе создать пары имя-значение. Таким образом, если вы представляете форму, вы увидите, что на странице нет информации - был добавлен простой оператор вывода для предотвращения ошибок - но теперь эта информация в URL (см. рисунок 14).

Рисунок 14. Представление запроса GET
Представление запроса GET

Если вы посмотрите на реальные данные, вы увидите, что они все на месте, но в "плоской" (неструктурированной) форме; нет механизма, дублирующего иерархию оригинального XML (см. листинг 15).

Листинг 15. Запрос URL
http://localhost/XForms.php?name=Wolfgang+Amadeus+Mozart;genre=C;
accessibility=9;difficulty=9;totalscore=18;example=A+little+night
+music;example=Twinkle%2C+twinkle%2C+little+star;example=Don+Giovanni

Заметьте, что каждая пара имя-значение разделяется точкой с запятой (;). Вы можете заменить этот разделитель на амперсанд (&) используя атрибут separator.


Заключение

К настоящему моменту вы должны быть способны создавать и простые и достаточно сложные формы XForms. Эти формы зависят от структуры "копии" XML для получения и хранения данных, но они также могут быть созданы для эмуляции многих более знакомых возможностей форм HTML. Они предусматривают расширенную интерактивность, так же как разделение данных и отображения, что делает возможным использовать одну и ту же форму на многих устройствах. Отсюда вы должны были изучить, что необходимо надстроить на эти возможности, чтобы создать более полезные формы.


Загрузка

ОписаниеИмяРазмер
Пример кодаxformsbasicsfiles.zip3KB

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML
ArticleID=180918
ArticleTitle=Основы XForms
publish-date=12012006