Главная » Просмотр файлов » Учебное пособие

Учебное пособие (1075724), страница 35

Файл №1075724 Учебное пособие (Г.И. Ревунков, Ю.Е. Гапанюк - Введение в XML – технологии) 35 страницаУчебное пособие (1075724) страница 352018-01-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 35)

5.26. Результат выполнения примера 5.3. Файл «repeat_variant.xhtml».У элемента «xforms:repeat» существует важное ограничение. Он может бытьвложен не во все элементы XHTML, например, его нельзя использовать стабличными элементами. То есть из-за ограничений спецификации XHTMLнельзя сделать таблицу, в которой строки повторялись бы с помощью элемента«xforms:repeat».Для преодоления этого ограничения в спецификацию XForms были введеныатрибуты, которые аналогичны атрибутам элемента «xforms:repeat»: repeat-model repeat-bind repeat-nodeset repeat-startindex repeat-number334Эти атрибуты должны быть атрибутами XHTML-элементов.

То есть вместоиспользования конструкции (которая не соответствует стандарту XHTML):<table><repeat nodeset="...">используется конструкция (которая соответствует стандарту XHTML):<table xforms:repeat-nodeset="...">В следующем примере для создания повторяющихся строк в таблице вместоэлемента «xforms:repeat» используется атрибут «repeat-nodeset».Пример 5.3. Файл «repeat_table.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Пример таблицы и элемента repeat</title><!-- Пустой префикс пространства имен обязателен для корневогоэлемента xforms:instance --><xforms:model><xforms:instance><example xmlns=""><item><text>текст 1</text><int>1</int></item><item><text>текст 2</text><int>2</int></item><item><text>текст 3</text><int>3</int></item></example></xforms:instance>335<xforms:bind nodeset="int" type="xforms:integer"/></xforms:model></head><body><!-- Атрибут xforms:repeat-nodeset="item" выполняет функциюэлемента repeat.

Элемент repeat (из схемы xforms) не может бытьвложен в table (из схемы xhtml), так как спецификация xhtml этого недопускает --><table border="2" xforms:repeat-nodeset="item"><tr><td><xforms:input ref="text"/></td><td><xforms:input ref="int"/></td></tr></table></body></html>Результат выполнения примера:Рис. 5.27. Результат выполнения примера 5.3. Файл «repeat_table.xhtml».5.8 Элементы обработки событийЭлементы обработки событий позволяют обрабатывать события и менятьXML-данные в модели данных.336Эти элементы не используются в простых XForms-формах.

Они нужны длясоздания сложных интерактивных форм.Мы будем использовать только основные элементы обработки событий.5.8.1 Элемент actionПозволяет группировать другие элементы обработки событий.Этот элемент удобно использовать как операторные скобки для условия илицикла.Условие и цикл можно задавать с помощью атрибутов «if=XPath-выражение,возвращающее логическое значение» и «while=XPath-выражение, возвращающеелогическое значение».Если задан атрибут «if», то действие выполняется один раз, если логическоезначение истинно.Если задан атрибут «while», то действие выполняется многократно, покалогическое значение истинно.Также обязательно должен быть задан атрибут «ev:event=событие», которыйопределяет, обработчиком какого события является данный элемент.

Префикс«ev»соответствуетпространствуименсобытийXML(xmlns:ev="http://www.w3.org/2001/xml-events").Полный список событий приведен в спецификации XForms. Наиболее частоиспользуются следующие события: DOMActivate (событие по-умолчанию дляэлемента, например,нажатие на кнопку). DOMFocusIn xforms-focus (получение фокуса элементом управления). DOMFocusOut (потеря фокуса элементом управления). xforms-value-changed (изменение значения данных). xforms-valid (в результате изменения данных форма заполненаправильно). xforms-invalid (в результате изменения данных форма заполненанеправильно).337Эти атрибуты могут присутствовать у всех элементов обработки событий.5.8.2 Элемент setvalueПозволяет менять значение XML-элемента данных.Ссылка на элемент данных задается с помощью атрибутов группы «SingleNode Binding» (ref, model, bind).Новое значение задается в виде содержимого элемента «setvalue» или спомощью атрибута «value».Могут быть заданы атрибуты «if» и «while».Должен быть задан атрибут события «ev:event=событие».

Атрибут событияможно не задавать, только если элемент «setvalue» вложен в элемент «action», укоторого задано событие.Примеры:<xforms:setvalue ev:event="DOMActivate" model="model1"ref="text2">фиксированное значение</xforms:setvalue><xforms:setvalue ev:event="DOMActivate" model="model1" ref="text2"value="concat(context()/text1,' !!!')" />5.8.3 Элемент deleteПозволяет удалять элемент данных из модели.Атрибут «context=XPath-выражение» задает контекст, в котором удаляетсяэлемент.Атрибут«nodeset=XPath-выражение»позволяетуказатьназваниеповторяющегося элемента для удаления. Это используется в случае удаленияповторяющихся элементов в «xforms:repeat».Атрибут «at=XPath-выражение» позволяет указать позицию удаляемогоэлемента.Пример:<xforms:delete ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"/>338Функцияindexвозвращаетномервыбранногоэлементаданныхв«xforms:repeat», что позволяет удалять текущий (выбранный) элемент из«xforms:repeat».5.8.4 Элемент insertПозволяет добавлять элемент данных.Атрибут «model» задает модель данных.Следующие атрибуты задают приемник данных.Атрибут «context» задает контекст, а атрибут «nodeset» указывает, на какойэлемент нужно ориентироваться при добавлении.Атрибут «at» указывает позицию добавления.Атрибут «position= before | after» предписывает добавлять до или послезаданной позиции.Источник данных задается атрибутом «origin».Пример:<xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"position="after" origin="instance('model2inst')/newvalue/num"/>5.8.5 Элемент setindexУстанавливает текущую позицию в элементе «xforms:repeat».Атрибут «repeat» содержит ссылку на элемент «xforms:repeat», а атрибут«index» содержит номер устанавливаемой позиции.Пример:<xforms:setindex repeat="repeat1" index="1" />5.8.6 Элемент setfocusУстанавливает фокус на нужный элемент управления.Уникальный id элемента управления задается в атрибуте «control» иливложенном элементе «control».Пример:339<xforms:setfocus ev:event="DOMActivate" control="input_1" /><xforms:setfocus ev:event="DOMActivate"><xforms:control value="concat('input_', '2')"/></xforms:setfocus>5.8.7 Элемент dispatchПозволяет направить событие элементу, id которого задается атрибутом«targetid».

Атрибут «name» определяет название события, атрибут «delay»определяет временную задержку перед отправкой события.С помощью этого элемента можно направлять как стандартные события, таки события, определяемые разработчиком.Пример:<xforms:dispatch name="xforms-refresh" targetid="model4" /><xforms:dispatch name="new-event" targetid="model4" delay="5000" />5.8.8 Элемент refreshОбновление данных, относящихся к заданной модели.

С помощью атрибута«model» можно задать модель данных.5.8.9 Элемент loadЗагрузка ресурса в окно браузера.Атрибут «resource» задает URI для загрузки, атрибут «show = new | replace»позволяет загружать ресурс в новое или текущее окно браузера.Пример:<xforms:load ev:event="DOMActivate" show="new"resource="input.xhtml"/>3405.8.10 Элемент sendОтправка данных формы на сервер из обработчика события.

Атрибут«submission» ссылается на элемент «submission», который определяет параметрыотправки формы на сервер.Отличие «submit» состоит в том, что «submit» является элементомуправления и отображается в виде кнопки или гиперссылки. Элемент «send»выполняет действие по отправке формы на сервер и не является элементомуправления.5.8.11 Элемент messageИспользуется для выдачи сообщения.Может содержать атрибут «level= ephemeral | modeless | modal», которыйзадаеттипсообщения:ephemeral(всплывающаяподсказка),modeless(немодальное окно), modal (модальное окно).5.8.12 Примеры обработки событийСледующий пример реализует основные возможности элементов обработкисобытий.Пример 5.4.

Файл «actions.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Примеры действий</title><xforms:model id="model1"><xforms:instance><example xmlns=""><text1>333</text1><text2/>341</example></xforms:instance></xforms:model><xforms:model id="model2"><xforms:instance id="model2inst"><example xmlns=""><repeat><num>1</num><num>2</num><num>3</num><num>4</num><num>5</num></repeat><newvalue><num>1000</num></newvalue><newvalues><num>100</num><num>101</num><num>102</num></newvalues></example></xforms:instance></xforms:model><xforms:model id="model3"><xforms:instance><example xmlns=""><uri>input.xhtml</uri></example></xforms:instance></xforms:model><xforms:model id="model4"><xforms:instance>342<example xmlns=""><dt/></example></xforms:instance><xforms:bind nodeset="dt" type="xforms:date"/><!-- сообщения для реакции на события --><xforms:message level="modal" ev:event="xforms-ready">Формазагружена (сообщение появляется при загрузке формы)</xforms:message><xforms:message level="modal" ev:event="xforms-refresh">Формаобновлена</xforms:message><xforms:message level="modal" ev:event="newevent">Нестандартное событие</xforms:message></xforms:model></head><body><xforms:group><xforms:label>Использование setvalue и setfocus</xforms:label><xforms:input id="input_1" model="model1" ref="text1"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input id="input_2" model="model1" ref="text2"><xforms:label>Установленное значение:</xforms:label></xforms:input><xforms:trigger><xforms:label>Установить фиксированноезначение</xforms:label><xforms:setvalue ev:event="DOMActivate" model="model1"ref="text2">фиксированное значение</xforms:setvalue></xforms:trigger><xforms:trigger>343<xforms:label>Установить введенное значение</xforms:label><xforms:setvalue ev:event="DOMActivate" model="model1"ref="text2" value="concat(context()/text1,' !!!')" /></xforms:trigger><xforms:trigger><xforms:label>Установить фокус на первое полеввода</xforms:label><xforms:setfocus ev:event="DOMActivate" control="input_1" /></xforms:trigger><xforms:trigger><xforms:label>Установить фокус на второе полеввода</xforms:label><xforms:setfocus ev:event="DOMActivate"><!-- Используется вложенный элемент control --><xforms:control value="concat('input_', '2')"/></xforms:setfocus></xforms:trigger></xforms:group><hr/><xforms:group><xforms:label>Добавление элементов впоследовательность</xforms:label><!-- последовательность элементов --><xforms:repeat id="repeat1" model="model2"nodeset="repeat/num"><xforms:input model="model2" ref="."/><xforms:refresh /></xforms:repeat><xforms:output model="model2" value="count(repeat/num)"><xforms:label>Количество элементов:</xforms:label>344</xforms:output><xforms:input model="model2" ref="newvalue/num"><xforms:label>Добавляемый элемент:</xforms:label></xforms:input><xforms:trigger><xforms:label>Добавить перед выбранным</xforms:label><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"position="before" origin="instance('model2inst')/newvalue/num"/></xforms:trigger><xforms:trigger><xforms:label>Добавить после выбранного</xforms:label><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"position="after" origin="instance('model2inst')/newvalue/num"/></xforms:trigger><xforms:trigger><xforms:label>Добавить несколько элементов послевыбранного</xforms:label><!-- Добавлвются все элементы num, вложенные в newvalues --><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"position="after" origin="instance('model2inst')/newvalues/num"/></xforms:trigger><xforms:trigger><xforms:label>Добавить последний послевыбранного</xforms:label><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"/></xforms:trigger>345<xforms:trigger><xforms:label>Продублировать последний</xforms:label><!-- Если не указан исходный элемент для добавления, то вкачестве исходного используется последний элемент впоследовательности --><!-- Если не указано место для добавления, то добавлениепроизводится после последнего элемента --><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num"/></xforms:trigger><xforms:trigger><xforms:label>Добавить константу послевыбранного</xforms:label><!-- Элемент insert используется для вставки впоследовательность, а элемент setvalue для установки значения поумолчанию --><xforms:insert ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"position="after" origin="instance('model2inst')/newvalue/num"/><!-- После добавления добавленный элемент становится текущими функция index возвращает его номер --><xforms:setvalue ev:event="DOMActivate" model="model2"ref="repeat/num[index('repeat1')]">фиксированноезначение</xforms:setvalue></xforms:trigger><xforms:trigger><xforms:label>Добавить константу после выбранного2</xforms:label><!-- несколько действий могут быть сгруппированы в элементaction --><xforms:action ev:event="DOMActivate">346<!-- Если шаблон для добавления в атрибуте origin незадан,то шаблоном является последний элемент списка --><xforms:insertmodel="model2" context="repeat"nodeset="num" at="index('repeat1')" position="after" /><!-- После добавления добавленный элемент становитсятекущим и функция index возвращает его номер --><xforms:setvalue model="model2"ref="repeat/num[index('repeat1')]">фиксированноезначение</xforms:setvalue></xforms:action></xforms:trigger><xforms:trigger><xforms:label>Удалить выбранный</xforms:label><xforms:delete ev:event="DOMActivate" model="model2"context="repeat" nodeset="num" at="index('repeat1')"/></xforms:trigger><xforms:trigger><xforms:label>Очистить список</xforms:label><xforms:delete ev:event="DOMActivate" model="model2"context="repeat" nodeset="*"/></xforms:trigger><xforms:trigger><xforms:label>Пронумеровать элементы</xforms:label><!-- несколько действий могут быть сгруппированы в элементaction --><xforms:action ev:event="DOMActivate"><!-- Установка позиции по умолчанию в 1 --><xforms:setindex repeat="repeat1" index="1" /><!-- Элемент action выполняется с условием, пока номертекущего элемента в repeat <= 5 (вместо константы должна бытьпроверка количества элементов) -->347<!-- Должно быть XPath-выражение index('repeat1') <=count(instance('model2inst')/repeat/num)--><!-- но сравнение с количеством элементов в правой частине работает --><!--поэтому вместоcount(instance('model2inst')/repeat/num) используется константа 5 -><!-- index('repeat1') возвращает текущую позицию в repeat--><xforms:action while="index('repeat1') <= 5"><!-- Элемент setvalue присваивает текущему элементуrepeat/num (в квадратных скобках указывается индекс текущегоэлемента) позицию этого элемента в repeat --><xforms:setvalue model="model2"ref="repeat/num[index('repeat1')]" value="index('repeat1')"/><!-- Переход к следующему элементу repeat --><xforms:setindex repeat="repeat1"index="index('repeat1') + 1" /></xforms:action></xforms:action></xforms:trigger><xforms:trigger><xforms:label>Отмена изменений в форме</xforms:label><xforms:reset ev:event="DOMActivate" model="model2"/></xforms:trigger></xforms:group><hr/><xforms:group><xforms:label>Навигация между формами</xforms:label><xforms:trigger><xforms:label>Открытие формы 1</xforms:label>348<!-- Адрес читается из модели --><xforms:load ev:event="DOMActivate" model="model3" ref="uri"show="new"/></xforms:trigger><xforms:trigger><xforms:label>Открытие формы 2</xforms:label><!-- Адрес задан в виде константы с помощью атрибутаresource --><xforms:load ev:event="DOMActivate" show="new"resource="input.xhtml"/></xforms:trigger><xforms:trigger><xforms:label>Открытие формы в текущем окне</xforms:label><!-- Адрес задан в виде константы с помощью элементаresource --><xforms:load ev:event="DOMActivate" model="model3" ref="uri"show="replace"/></xforms:trigger></xforms:group><hr/><xforms:group><xforms:label>Обработка событий</xforms:label><xforms:input model="model4" ref="dt"><xforms:label>Введите неправильную дату:</xforms:label><xforms:message ev:event="xforms-invalid"><xforms:outputref="."/> - неправильное значение для даты</xforms:message></xforms:input><xforms:trigger><xforms:label>Отправка события refresh</xforms:label>349<!-- Адрес задан в виде константы с помощью атрибутаresource --><xforms:dispatch name="xforms-refresh" targetid="model4" /></xforms:trigger><xforms:trigger><xforms:label>Отправка собственного события с задержкой 5секунд</xforms:label><!-- Адрес задан в виде константы с помощью атрибутаresource --><xforms:dispatch name="new-event" targetid="model4"delay="5000" /></xforms:trigger></xforms:group></body></html>Результат выполнения примера:Рис.

Характеристики

Тип файла
PDF-файл
Размер
6,59 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Ревунков Г.И., Гапанюк Ю.Е
Примеры
1_примеры
1_01
Example.xml
1_02
Array.xml
Graph_1.xml
Graph_2.xml
Set.xml
Table_1.xml
Table_2.xml
Table_3.xml
Tree.xml
2_примеры
2_01
Example_XPath.xml
2_02
Example_css.xml
style.css
2_03
Example_1.xsl
Example_XSL_1.xml
2_04
Example_1_ns.xsl
Example_XSL_1_ns.xml
2_05
Example_2.xsl
Example_XSL_2.xml
MET.CSS
2_06
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7038
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее