Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы XML-технологий. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Описание формы
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]