Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы XML-технологий. Учебное пособие
.pdf
Описание формы
XForms
с
остоит их двух частей. Первая часть
описывает данные, которые вводятся через данную форму, и представляет собой модель формы (см. раздел «
X
-м
одель»). Вторая
Forms
часть описывает способ отображения формы (см. раздел «Пользова-
Forms
тельский интерфейс
X
») и определяет независящий от устройства пользовательский интерфейс, используя множество независящих
от платформы элементов управления формы, пригодных для обобщенного использования.
В первой части описания описывается схема данных формы,
логические ограничения и связи между полями формы. Здесь допускается использование формул для:
– описания зависимостей значений полей друг от друга;
– проверки допустимости значений, вводимых в поля формы.
В схеме
XForms
оп
исываются следующие ограничения:
– фиксированные ограничения, которые обрабатываются
процессором
XForms
– вычислимые выражения. Это
т
олько один раз;
XPath
ыражения, результатом
в
которых является некоторое значение. Эти выражения описывают
динамические ограничения, такие как связи и зависимости между
различными элементами данных.
Также обратите внимание на то, что поскольку в настоящий
Forms
момент браузеры не располагают
X
-процессорами, изображения
всех примеров – это всего лишь иллюстрации, которые не являются
Forms
результатом реализации
X
.
В Листинге 2 приведена схема кода для формы заказа с выде-
ленными частями описания данных и их визуального представления:
Листинг 2. Скелет кода для формы заказа
<
HTML xmlns = "http://www.w3.org/1999/xhtml"
xmlns:Xforms = "http://www.w3.org /2002/01/xforms"
xmlns:ev = "http://www.w3.org/2001/xml-events"
xmlns:xlink = "http://www.w3.org/1999/xlink">
<head>
<title>XForms: Order Form</title>
16
1

<xforms:model>
<!-- Экземпляр XML-документа и Логические компоненты -->
</xforms:model>
</head>
<body>
<!-- Пользовательский интерфейс -->
</body>
</HTML>
В данном подразделе проанализируем этот код по частям:
в пунктах 5.2.2.1 - 5.2.2.3 подраздела – часть кода «
документа и Логические компоненты
кода «
О
льзовательский интерфейс
По
писания синтаксических конструкций языка
, а в пунктах 5.2.3.1 - 5.2.3.3 – часть
»
».
Э
кземпляр XML-
,
X
Forms
а также
примеры, иллюстрирующие их работу, основаны на материалах
статьи [37]. Общая структура экранной формы, генерируемой по
окументу, фрагменты которого описываются в данной главе
XForms
-д
пособия, изображена на Рис. 5.1.
Ри
с. 5.1 Изображение формы заказа
16
2

5.2.2
П
X
F
O
оскольку
RMS
X
Forms
-
М
ОД ЕЛЬ Д ОКУМЕНТ А
-м
одель представляет содержание формы, она
не изменяется от представления к представлению.
1. Модель состоит из данных формы и логических компонентов.
2. Данные формы находятся в пределах
i
nstance
подробнее о нем
(
ниже), включающего:
– все поля формы;
– временное хранилище.
3. Логические компоненты формы определяют ее поведение.
Эти логические компоненты описываются:
– связыванием данных (
– обработчиками событий (
d
ata
bi
vent
e
ndings
– информацией об инициализации (
.2.2.1 Оп ре де ле н и е э к з ем пл яр а да н н ы х фо рм ы
5
ha
;
)
ndlers
bmission
su
;
)
nformation
i
)
.
Данные экземпляра документа, вводимого с помощью формы,
X
определяются в пределах модели. Такие данные в
nstance
i
и
содержатся в пределах тега
<m
odel>
.
Forms
азываются
н
Именно эти данные
передаются в обработчик или во временное хранилище, используе-
i
U
RI
н
nstance
а
мое в пределах модели. Каждый
XML
одиночное дерево
д
окумент может содержать только один корневой узел.
Данные
nstance
i
-д
анных. Другими словами,
огут определяться локально в пределах модели
м
или указываться с помощью
удаленной машине. В Листинге 3 показан раздел
rderInfo
O
определенный локально в форме заказа.
,
X
м
ожет содержать только
ML
instance
нные, хранящиеся на
-да
nstance
i
к
э
XML
ак
лемента
Листинг 3. Определение локального instance
<x
forms:model>
<xforms:instance>
<OrderInfo>
-
<!-- Раздел персональных данных -->
<PersonalInfo>
<Name>
<First></First> <Middle></Middle> <Last></Last>
</Name>
16
3

<Address>
<Street></Street> <City></City> <State></State><Zip></Zip>
</Address>
</PersonalInfo>
<!—Раздел вычисления стоимости заказа -->
<PriceInfo>
<SubTotal></SubTotal>
<TaxTotal></TaxTotal>
<TaxRate></TaxRate>
<Total></Total>
</PriceInfo>
<!-- Информация о ставках налога -->
<TaxInfo>
<CT>.060</CT>
<NY>.085</NY>
<NJ>.083</NJ>
</TaxInfo>
<!-- Список товаров заказа -->
<ShoppingCart>
<ProductInfo name="itm1">
<Quantity>5</Quantity>
<Description>Wht. Chocolate Bars</Description>
<UnitPrice>1.45</UnitPrice>
<ItemTotal></ItemTotal>
</ProductInfo>
<ProductInfo name="itm2">
<Quantity>8</Quantity>
<Description>Blk. Chocolate Bars</Description>
<UnitPrice>1.45</UnitPrice>
<ItemTotal></ItemTotal>
</ProductInfo>
<ProductInfo name="itm3">
<Quantity>2</Quantity>
<Description>Car. Filled Choc</Description>
<UnitPrice>1.80</UnitPrice>
<ItemTotal></ItemTotal>
</ProductInfo>
</ShoppingCart>
16
4

</OrderInfo>
</xforms:instance>
. . . . . . . . . . . . . .
</xforms:model>
бъявление данных
О
OrderInfo
приведенное в Листинге 3, состоит
,
из четырех основных компонентов:
–
P
ersonalInfo
с
одержит все информацию, которую вы хотите
получить от пользователя;
–
riceInfo
P
в
ключает сведения, необходимые для вычисления
стоимости заказа;
T
–
axInfo
с
одержит информацию о ставках налога в некоторых
штатах (для простоты этот пример определяет ставку только для
штатов Нью-Йорк (
–
ShoppingCart
– сп
N
Y
),
Коннектикут (
исок товаров.
C
T
) и
Нью-Джерси (
N
J
))
;
Обычно под данными формы понимается информация, вводимая
stance>
пользователем в поля формы. Тег
<in
ожет определить только
м
структуру данных или может включить начальные значения.
Но в разделах
nstance
i
можно использовать и временную, и постоянную информа-
riceInfo
P
и
axInfo
T
оказывается, что в качестве данных
п
цию.
nstance
Данные, определенные
определены локально, они могут быть определены во внешних
В Листинге 4 показано, как можно реализовать
XML
нии к удаленному
-ре
i
сурсу.
, не обязательно должны быть
URI
ри обраще-
nstance
i
п
Листинг 4. Обращение к удаленному XML-ресурсу
xforms:model>
<
<xforms:instance href="http://www.example.com/OrderFormData.xml"/>
. . . . . . . . . . . . . .
</xforms:model>
5
.2.2.2 Св яз ыв ан ия , з ав и с им ос ти и о гр ан ич е н и я
В данном подразделе модели данных формы опишем, каким
образом осуществляются связывания, зависимости и ограничения
вводимых данных.
Существуют два способа присвоения значений данным instance
.
в
X
Forms
:
16
5

– данные могут зависеть от других данных и нужно каким-то
образом описать эту зависимость;
– данные могут быть связаны с входными данными, предоставляемыми пользователем.
В этом пункте рассмотрим первый способ; второй – связывание
входных данных пользователя – будет рассмотрен в следующем
Forms
пункте «Пользовательский интерфейс
X
».
Для описания зависимостей между данными в пределах тега
<m
odel>
определяется тег
<bi
nd>
, внутри которого задается выражение
зависимости между данными
в
Листинге 5 связывает
T
axTotal
nstance
i
с
.
Например, инструкция
вычисляемым налогом
S
nd
bi
ubTotal
В соответствии с этой инструкцией для определения значения
OrderInfo/ PriceInfo/TaxTotal
O
значение
rderInfo/PriceInfo/SubTotal
определения элементов
ния языка
А
трибут
истинг 5. Инструкция bind
Л
<
!-- Объявление инструкции bind -->
<xforms:bind ref="/OrderInfo/PriceInfo/TaxTotal"
calculate="/OrderInfo/PriceInfo/TaxRate * /OrderInfo/PriceInfo/SubTotal"/>
А
трибут
XPath
дением элементов
.
сылается на узел
с
ref
c
alculate
T
начение
з
TaxTotal
св
язывает значение элемента
и
axRate
S
Для определения условий, при которых тег
OrderInfo/PriceInfo/TaxRate
. О
братите внимание на то, что для
,
TaxRate
ubTotal
TaxTotal
.
и
SubTotal
.
множается на
у
рименены выраже-
п
.
с
произве-
b
ind
T
axTotal
я
вляется допус-
.
тимым, вы можете воспользоваться атрибутом
использования атрибута
r
elevant
п
риведен в Листинге 6:
Листинг 6. Инструкция bind с атрибутом
<!-- Объявление инструкции bind с атрибутом -->
<xforms:bind ref="/OrderInfo/PriceInfo/TaxRate"
calculate="/OrderInfo/TaxInfo/CT"
relevant="/OrderInfo/PersonalInfo/Address/State = 'CT'"/>
П
риведенная инструкция присваивает переменной
налога в штате Коннектикут (
CT
лько в том случае, если пользо-
) то
.
16
6
r
elevant
axRate
T
. Пример
с
тавку

ватель живет в этом штате. Именно это условие задано с помощью
атрибута
re
levant
.
Для выполнения этой процедуры для двух других штатов Нью-
Йорк и Нью-Джерси определите аналогичные инструкции, связав
axRate
T
и
O
данных
ype
t
со значением соответствующего штата, т. е.
rderInfo/TaxInfo/NJ
ы можете также учитывать в теге
В
instance
.
ind>
<b
например, указав тип данных с помощью атрибута
,
ограничения типов
. В Листинге 7 показано, как определить, чтобы в поле
rderInfo/TaxInfo/NY
O
ubTotal
S
должно быть введено десятичное число:
Листинг 7. Инструкция bind и ограничение типа
<
!-- Объявление инструкции bind с ограничением типа -->
<xforms:bind ref="/OrderInfo/PriceInfo/SubTotal" type="xs:decimal"/>
ри наличии таких ограничений
П
введенные данные
nstance
i
,
проверяя поле за полем на соответствие
X
Forms
роцессор сверяет
-п
.
этим ограничениям. Если пользователь вводит данные, которые
нарушают эти ограничения, браузер, поддерживающий
X
Forms
,
выдаст сообщение об этом пользователю. Благодаря этому снижается количество ошибок при кодировании, а обработчик получает
только правильно оформленные данные.
5.2.2.3 Ин иц иа ли за ци я
В рамках модели данных формы определяется также способ
связи с сервером обработчика. Это необходимо для вызова сервером обработчика, запускаемого при готовности пользователя
<s
к инициализации. Для этого вы можете использовать тег
трибут
и а
action
м. Листинг 8):
(с
ubmission>
Листинг 8. Инструкция инициализации
!-- Объявление инструкции submission -->
<
<xforms:submission id="submit1" action="http://www.example/" method="post"/>
В
рамках тега
<submission>
мож
но также задать
HTTP-
м
етод, указав
.
в качестве атрибута
-с
XML
одержания рекомендуется использовать метод
m
ethod
значения
16
g
et
или
po
st
. Для инкапсуляции
.
post
7

В пределах одной и той же модели можно определить множество блоков
<s
ubmission>
димо задать уникальный идентификатор с атрибутом
ном примере
i
d=" submit1"
эти теги будут связаны с кнопками
ubmit
)
5.2.3
О
ЛЬ ЗОВАТЕЛ ЬСКИЙ И НТ ЕРФЕЙ С
П
s
.
Пользовательский интерфейс определяет, как элементы
м
одели данных отображаются на форме. Он выражается с помощью
как элементарных (как, например,
<group>, <repeat>
(
<switch>
и
Поэтому каждому тегу
.
поскольку в пользовательском интерфейсе
),
ubmit
контролов.
)
s
<in
(см. описание инструкции
и
put>
<ou
XF
tput>
<s
ubmission>
d
i
(в
O
RM S
так и составных
),
еобхо-
н
приведен-
stance
in
Элементарные компоненты – это те элементы управления, которые используются для наполнения формы.
Составные компоненты пользовательского интерфейса применяются для организации и группировки элементарных объектов.
H
Как было указано выше, в отличие от
TML
и элементарные,
,
и составные контролы не связаны с отдельным представлением,
а соотносятся с отдельной абстрактной задачей.
Описание пользовательского интерфейса будет проведено не
в порядке следования его компонентов в коде, а в виде иллюстрации
примеров использования контролов языка
X
Forms
рассматриваемом
в
коде формы заказа.
.2.3.1 Эл ем ен та рн ы е к о нт ро лы ф ор мы
5
Элементарные контролы – это базовые компоненты, которые
используются для ввода и отображения данных в пользовательском
интерфейсе. Вы можете комбинировать эти контролы в составных
контролах, описанных ниже. В данном пункте рассмотрим основные
элементарные контролы.
Контрол input. Наиболее часто используемым контролом
формы является контрол для ввода данных
nput>
<i
используемого в форме для ввода индекса адреса приведен
,
в Листинге 9:
16
8
<in
put>
Пример контрола
.

Листинг 9. Инструкция input
<
!-- Объявление контрола input -->
<xforms:input class="ZipCode" id="zipcode"
ref="OrderInfo/PersonalInfo/Address/ZipCode">
<xforms:label class="label">Zip Code</xforms:label>
<xforms:hint>Enter The Zip Code</xforms:hint>
</xforms:input>
В данном листинге с помощью атрибута
re
f
определяется выра-
жение
X
,
локализующее входной элемент данных, значение
Path
которого вводится с помощью данного контрола. Поскольку атрибут
r
ef
и
спользует
X
Path
,
чтобы установить расположение
in
stance
,
в случае
совпадения множества узлов (например, многочисленных узлов
S
hoppingCart/ProductInfo/Quantity
)
, этот атрибут выбирает первое совпадение, если только разработчик не установил явно, какой конкретный элемент
uantity
в
ыбирать. В нашем примере значение, которое
Q
пользователь вводит в поле ввода, связано с единственным элемен-
OrderInfo/PersonalInfo/Address/ZipCode
том
/
, поэтому необходимости
в таком определении элемента нет.
nput>
abel>
<i
в
добавлен заго-
виде потомка тега
В данном примере в определении контрола
ловок поля ввода. Для этого введен тег
nput>
<i
. Тег
abel>
<l
является факультативным тегом, который может
<l
быть создан в пределах каждого контрола формы.
put>
В определении контрола
<in
можно ввести также подсказку
для пользователя, которую он сможет прочесть при установке
<h
мышки на поле ввода на форме. Для этого создается тег
потомка тега
К
онтрол output. Контрол
<input>
оператора, а просто отображает значения данных
В примере, приведенном в Листинге 10, контрол
.
<ou
tput>
е предполагает действий
н
i
nstance
o
utput
int>
виде
в
на форме.
спользуется
и
для отображения значения вычисленного налога:
Листинг 10. Инструкция output
- Объявление контрола output -->
<! <xforms:label class="label">Tax Amount $</xforms:label>
<xforms:output class="Amount" id="taxtotal" ref="OrderInfo/PriceInfo/TaxTotal"/>
.
16
9

Синтаксис определения этого контрола
таксисом контрола
utput>
<o
и
спользуется только для чтения.
.2.3.2 Со ст ав ны е к о н тр о л ы
5
<i
nput>
единственное различие состоит в том, что
;
в
о многом схож с син-
С помощью составных контролов вы можете распределить
элементарные объекты по разделам, например, раздел адреса, раздел
платежа и раздел товаров, и размещать их на площади формы
в соответствии со структурой, определенной в разделе
данных. Таким образом, с помощью составных тегов
и
<s
witch>
ожно организовать сложный пользовательский интер-
м
i
<g
roup>
м
одели
,
<re
peat>
nstance
фейс, на котором структурные взаимосвязи между отдельными
элементами модели данных определяются неявно путем их соответствующего размещения на форме.
Контрол group – это простейший составной контрол и представляет собой контейнер, который группирует другие контролы.
В Листинге 11 показано, как группировать различные контролы
формы, чтобы затем использовать эту группу в качестве отдельного
сложного объекта на форме.
Листинг 11. Фрагмент описания формы, содержащей поля ввода персональных данных клиента
<b
ody>
<xforms:group>
<div>
<!-- Здесь размещается формы контролов персональных данных -->
<xforms:input class="First" id="first"
ref="OrderInfo/PersonalInfo/Name/First">
<div>
<xforms:label>First Name</xforms:label>
</div>
<xforms:hint>Enter First Name</xforms:hint>
</xforms:input>
<xforms:input class="Middle" id="middle"
ref="OrderInfo/PersonalInfo/Name/Name/Middle">
<xforms:label class="label">Middle Initial</xforms:label>
<xforms:hint>Enter Middle Initial</xforms:hint>
</xforms:input>
17
0
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
