Министерство образования и науки Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ЯЗЫКИ ИНФОРМАЦИОННОГО ОБМЕНА
Методические указания к лабораторным работам для студентов III курса ФПМИ всех направлений
и специальностей
НОВОСИБИРСК
2008
Составитель: О.Н. Кищенко, ассистент кафедры ПСиБД.
Рецензент: Кобылянский В.Г., к.ф.-м.н., доцент кафедры ПСиБД.
Работа подготовлена на кафедре программных систем
и баз данных
Содержание
ВВодные замечания.. 4
Лабораторная работа №1. Правильно оформленный XML документ. 5
1. Методические указания. 5
2. Перечень вопросов к разработке. 11
3. Варианты заданий. 12
4. Контрольные вопросы.. 13
Лабораторная работа №2. Отображение XML документа с помощью каскадной таблицы стилей. 14
1. Методические указания. 14
2. Перечень вопросов к разработке. 18
3. Контрольные вопросы.. 18
Лабораторная работа №3. Отображение XML документа с помощью XSL. 19
1. Методические указания. 19
2. Перечень вопросов к разработке. 26
3. Контрольные вопросы.. 26
Лабораторная работа №4. Отображение XML документа с помощью связывания данных. 27
1. Методические указания. 27
2. Перечень вопросов к разработке. 30
3. Контрольные вопросы.. 31
Лабораторная работа №5. Отображение XML документа с помощью DOM.. 32
1. Методические указания. 32
2. Перечень вопросов к разработке. 34
3. Контрольные вопросы.. 35
Лабораторная работа № 6. Написание WEB-сервиса для обработки XML документа. 36
1. Методические указания. 36
2. Перечень вопросов к разработке. 39
3. Контрольные вопросы.. 40
Список литературы.. 41
ВВодные замечания
Лабораторный практикум состоит из 6 лабораторных работ, ориентированных на получение навыков создания оформления и обработки XML-документов.
Материал к каждой работе разделен на следующий разделы:
- методические указания к лабораторным работам,
- задание к выполнению,
- контрольные вопросы.
Защита работ предполагает демонстрацию выполненного задания и ответы на контрольные вопросы.
Для проведения лабораторных работ по данному курсу используется Microsoft Visual Studio .Net.
В результате прохождения данного курса студент должен приобрести следующие знания:
- что такое языки разметки и для чего они используются,
- принципы моделирования данных с использованием XML,
- Web службы. Построение Web служб: SOAP, UDDI, USDL, WSFL. Концепция .NET .
А также научиться:
использовать языки разметки,
разрабатывать, отображать содержимое и извлекать необходимую информацию из XML-документов,
разрабатывать и в дальнейшем использовать web-сервисы.
Лабораторная работа №1
правильно оформленный
XML
-документ
Цель работы:
Изучить конструкции языка XML. Научиться составлять валидные XML документы.
1. Методические указания
Любой XML-документ состоит из следующих частей [2-5,7-8]:
• Необязательный пролог.
• Тело документа.
• Необязательный эпилог, следующий за деревом элементов.
Пролог состоит из нескольких частей:
1. необязательное объявление XML (XML Declaration), которое заключено между символами <?...?>. Объявление содержит:
· пометку xml и номер версии (version) спецификации XML;
· указание на кодировку символов (encoding), в которой написан документ (по умолчанию encoding=”UTF-8”);
· параметр standalone, который может принимать значения “yes” или “no” (по умолчанию standalone=”yes”). Значение “yes” показывает, что в документе содержатся все требуемые декларации элементов, a “no” – что нужны внешние определения DTD.
Все это вместе может выглядеть следующим образом:
<?xml version ="1.0" encoding-"windows-1251" standalone="yes"?>.
Важно отметить, что в объявлении XML только атрибут version является обязательным, все остальные атрибуты могут быть опущены и, следовательно, принимать значения по умолчанию. Так же нужно помнить, что все эти атрибуты следует указывать только в приведенном выше порядке.
После объявления могут следовать комментарии, команды обработки, символы пустых пространств.
2. необязательное объявление типа документа DTD (Document Type Declaration), которое заключено между символами <!DOCTYPE...> и может занимать несколько строк. После объявления типа документа так же могут следовать комментарии, команды обработки и символы пустых пространств.
Тело документа, состоит из одного или нескольких элементов. В правильно оформленном XML-документе элементы формируют простое иерархическое дерево, в котором обязательно присутствует корневой элемент (root element), в который вложены все остальные элементы документа. Имя корневого элемента считается именем всего документа и указывается во второй части пролога после слова Doctype. Имена элементов должны быть уникальны в пределах документа, для выполнения этого требования можно воспользоваться пространством имен. В этом случае имя будет назваться расширенным или уточненным, и будет состоять из префикса, двоеточия и непосредственно самого имени тега (локальная часть имени), например:
<ns:city ns:type=”город”>Новосибирск</ns:city>.
Все имена тегов и атрибутов, префиксы которых связаны с одним и тем же идентификатором, образуют одно пространство имен, в котором имена должны быть уникальны. Пространство имен определяется следующим образом:
<ns:root_element_name xmlns:ns = “http://URI_namespace”>
Атрибут xmlns может появиться в любом элементе XML. Определенный им префикс можно применять в том элементе, в котором он записан, и во всех его вложенных элементах. В элементе можно определить несколько пространств имен. Во вложенных элементах пространство имен можно переопределить.
Элемент начинается открывающим тегом, затем идет необязательное содержимое элемента, после чего записывается закрывающий тег, исключением являются так называемые пустые элементы, которые могут быть записаны: <имя_элемента/>. В качестве содержимого элемента могут выступать:
1. другие элементы;
2. символьные данные;
3. ссылки на символы; они используются, чтобы вставить в текст документа некоторый символ, который, например, не присутствует в раскладке клавиатуры либо может быть неправильно истолкован анализатором. Ссылка на символ начинается со знака «амперсанта» и заканчивается точкой с запятой:
&# код_символа_в_Unicode; или &#xШестнадцатеричный_код_символа;.
4. ссылки на сущности, которые позволяют включать любые строковые константы в содержание элементов или значение атрибутов. Ссылки на сущности, как и ссылки на символы, начинаются с амперсанта, после которого идет имя сущности, и заканчиваются точкой с запятой:
&имя_сущности;.
Ссылки на сущности указывают программе-анализатору, что вместо них нужно подставить строку символов, заранее заданную в определении типа документа.
5. комментарии; используются для того, чтобы сделать какой-то фрагмент "невидимым" для программы-анализатора.
<!--…текст комментария…-->
6. разделы CDATA; используются для того, чтобы задать область документа, которую при разборе анализатор будет рассматривать как простой текст, игнорируя любые инструкции и специальные символы. Программа-анализатор не разбивает секцию CDATA на элементы, а считает ее просто набором символов. В отличие от комментариев, содержание данной секции не игнорируется, а передается без изменений на выход программы анализатора, благодаря чему его можно использовать в приложении. Секция CDATA начинается со строки <![cdata[ после которой записывается содержимое секции. Завершается секция двумя закрывающими квадратными скобками и знаком "больше":
<![CDATA[ содержание секции ]]>
7. инструкции по обработки. Инструкции по обработке содержат указания программе-анализатору документа XML. Инструкции по обработке заключаются между символами <? и ?>. Сразу за начальным вопросительным знаком записывается имя программного модуля, которому предназначена инструкция. Затем через пробел идет сама инструкция, передаваемая программному модулю. Сама инструкция – это обычная строка, которая не должна содержать набор символов «?>», означающий конец инструкции.
Открывающие теги либо теги пустых элементов в XML могут содержать атрибуты, представляющие собой пару имя=значение. Атрибуты могут содержать ссылки на объекты, ссылки на символы, текстовые символы. В отличие от языка HTML, в XML значения атрибутов обязательно надо заключать в апострофы (‘), либо в кавычки (“). Атрибут может быть записан в одном из двух форматов:
имя_атрибута=”значение_атрибута” или имя_атрибута= 'значение_атрибута’.
Описание структуры документа средствами
DTD
Для связывания декларации DTD с экземпляром документа в версии XML 1.0 предлагается специальная декларация DOCTYPE [2-5, 7-8].
Можно написать внешнее подмножество деклараций в отдельном файле DTD, включить внутреннее подмножество в тело декларации DOCTYPE или сделать то и другое. В последнем случае (смешение внутренних и внешних DTD) во внутренних DTD могут быть заданы новые декларации или переписаны те, что содержатся во внешних (по определению спецификации XML анализаторы сначала читают внутреннее подмножество, и потому содержащиеся там декларации пользуются приоритетом).
Блок внутренней декларации разметки тега DOCTYPE состоит из левой квадратной скобки, списка деклараций и правой квадратной скобки:
<! DOCTYPE root_element_name […здесь находятся декларации внутреннего подмножества ... ]>
Для внешних DTD декларация DOCTYPE состоит из обычного ключевого слова и имени корневого элемента, за которым следует еще одно ключевое слово SYSTEM либо PUBLIC, обозначающее источник внешнего определения DTD, а за ним — локализация этого определения.
Допустимое в документе XML содержание определяется с помощью четырех типов декларации разметки в DTD. В таблице 1 показаны связанные с этими декларациями ключевые слова и их значения. Первые два типа связаны с информацией, которую мы рассчитываем найти в документе XML, — элементами и атрибутами. Последние два типа используются для поддержки. Особенно облегчают жизнь разработчика словаря XML сущности. Как правило, они состоят из содержания, которое настолько часто используется в DTD или документе, что оправдывает создание специальной декларации. Нотации описывают содержание, разработанное не на языке XML. Используются они для того, чтобы объявить конкретный класс данных и связать его с внешней программой.
Таблица 1.
Конструкция DTD |
Значение |
ELEMENT |
Декларация типа элемента XML |
ATTLIST |
Декларация атрибутов, которые могут быть назначены конкретным типам элементов, а также разрешенных значений этих атрибутов |
ENTITY |
Декларация повторно используемого содержания |
NOTATION |
Декларация форматирования для внешнего содержания, которое не должно быть проанализировано (например, двоичные данные), а также для внешних приложений, обрабатывающих содержание |
Описание схемы документа на языке XSD
Связать XML-документ с его XSD-схемой можно разными способами[2-5,7-8]:
1. подать файлы со схемой на вход анализатора.
2. задать файлы со схемой как свойство анализатора.
3. указать прямо в документе XML.
Рассмотрим 3 способ более подробно.
Если элементы документа не принадлежат никакому пространству имен и записаны без префикса, то в корневом элементе документа записывается атрибут noNamespaceSchemaLocation, указывающий расположение файла со схемой в форме URI:
< root_element_name xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation="file_name.xsd">
В этом случае в схеме не должно быть целевого пространства имен.
Если же элементы документа относятся к некоторому пространству имен, то применяется атрибут schemaLocation, в котором через пробел перечисляются пространство имен и расположение файла со схемой, описывающей это пространство имен.
Элементы, из которых будет состоять документ XML, объявляются в схеме компонентом element:
<xsd:element name="имя элемента" tуре="тип элемента" minOccurs="Haменьшее число появлений элемента в документе" maxOccurs="наибольшее число появлений" />
Значение по умолчанию необязательных атрибутов minOccurs и maxOccurs равно 1. Это означает, что если эти атрибуты отсутствуют, то элемент должен появиться в документе XML ровно один раз.
Указание типа элемента в атрибуте type удобно, если это встроенный простой тип или тип, определенный заранее. Тогда в атрибуте type можно записать только имя типа.
Если же тип элемента определяется здесь же, то определение типа элемента лучше вынести:
<xsd:element name=”имя элемента”>
Определение типа элемента
</xsd:element>
Объявление атрибута элемента тоже несложно:
<xsd:attribute name=" имя атрибута" type="тип атрибута" use="обязательность атрибута" default="значение по умолчанию" />
Необязательный атрибут use принимает три значения:
-optional — описываемый атрибут необязателен (это значение по умолчанию);
-required — описываемый атрибут обязателен;
-prohibited — описываемый атрибут неприменим. Это значение полезно при определении подтипа, чтобы отменить некоторые атрибуты базового типа.
Определение типа атрибута, — а это должен быть простой тип, — можно вынести в содержимое элемента attribute:
<xsd:attribute name="имя атрибута">
Тип атрибута
</xsd:attribute>
Простой тип в схемах XML определяется компонентом схемы simpleType, имеющим вид:
<xsd:simpleType name="имя типа”> Определение типа </xsd:simpleType»
Кроме встроенных типов в схемах XML можно определить новые типы простых элементов. Они вводятся как:
1. сужение (restriction) встроенного или ранее определенного простого типа;
2. список (list) простых типов;
3. объединение (union) простых типов.
Кроме простых типов есть сложные типы. Тип элемента называется сложным, если в элемент вложены другие элементы и/или в открывающем теге элемента есть атрибуты.
Сложный тип определяется компонентом complexType, имеющим вид:
<xsd:complexType name="имя типа" >
Определение типа
</xsd:complexType>
Необязательный атрибут name задает имя типа, а в содержимом компонента complexType описываются элементы, входящие в сложный тип, и/или атрибуты открывающего тега.
2. Перечень вопросов к разработке
1. Изучить конструкции языка XML, способы описания структуры документа средствами DTD, описания схемы документа на языке XSD.
2. В соответствии с вариантом задания средствами DTD описать структуру документа.
3. Описать схему документа на языке XSD.
4. В соответствии с разработанной схемой написать валидный правильно оформленный XML-документ.
5. С помощью файла Validity_test.htm проверить XML-документ на валидность.
6. Оформить отчет, включающий постановку задачи, тексты XML, DTD, XSD документов, демонстрацию работы программ.
7. Защитить лабораторную работу.
3. Варианты заданий
1. Адресная книга. В адресной книге хранятся: имя, отчество, фамилия человека, его адрес проживания, место работы, должность, домашний и рабочие телефоны. Так же у некоторых может иметься фотография. Как домашних, так и рабочих телефонов может быть несколько или не быть вообще. Человек может работать в нескольких разных фирмах. Он может занимать в одной и той же фирме несколько должностей.
2. Книжный каталог. В книжном каталоге хранятся: название книги, ее авторы, ISBN номер, цена, краткое описание, фотография обложки, количество страниц, год и место издания, язык на котором она написана. У каждой книги может быть несколько авторов. Каждая книга может иметь несколько вариантов различных изданий. Например, одна и та же книга может быть издана на русском и английском языках, или различными изданиями и, следовательно, иметь различные обложки и цену.
3. Аптечная база. В аптечной базе хранятся: наименование товара, количество, краткое описание, дата поступления товара на базу, дата выпуска, срок хранения, цена, фирма-производитель с указанием контактной информации (телефоны и адрес). Причем информация о фирме-производителе товара должна храниться в отдельном файле. Товар с одним и тем же наименованием может поступать на базу в различные периоды времени различными партиями, при этом цена, дата выпуска, фирма-производитель так же может поменяться.
4. База студентов. В базе студентов хранятся: ФИО студента, фотография, факультет, группа, дата поступления, оценки за экзамены с датой их сдачи, ФИО, должностью и кафедрой преподавателя, принявшего экзамен. Студент может пересдавать экзамен несколько раз разным преподавателям или одному и тому же, но при этом должность преподавателя может к этому времени измениться. Так же студент может сдавать экзамены преподавателю из другого института: в этом случае кроме ФИО, должности и кафедры, так же должен храниться и университет, в котором работает преподаватель и контактная информация (телефон, который может быть не один).
5. Расписание занятий. Расписание занятий у каждой группы свое. Для каждого дня недели расписание свое. При этом некоторые дни недели могут быть свободны. Кроме этого расписание на четной и нечетной неделе может отличаться. В расписании указывается название предмета, тип (лекция, практика, лабораторные работы), аудитория (корпус и номер), в которой будет проходить занятие, ссылка на информацию о преподавателе, которая хранится в отдельном файле. В информацию о преподавателе входит ФИО, должность, кафедра, университет, контактная информация (телефон рабочий, домашний, E-mail). Необходимо учесть, что рабочий телефон может быть не один, домашнего телефона может не быть или быть несколько, e-mail может не быть или быть несколько.
4. Контрольные вопросы
1. Что такое языки разметки. Стилистическая, структурная и семантическая разметки.
2. История развития языков разметки: SGML, HTML, XML.
3. Структура XML-документа. Правильно оформленные и верные документы
.
4. Зачем нужно определение типа документа (DTD).
Общие принципы написания определений DTD
.
5. Недостатки и особенности определений DTD.
6. Примитивы. Определение. Типы примитивов и их краткая характеристика.
7. Пространство имен.
Лабораторная работа №2
Отображение
XML
-документа с помощью каскадной таблицы стилей
Цель работы:
Изучить основы CSS. Научиться отображать XML-документы с использованием каскадной таблицы стилей.
1. Методические указания
Для того, чтобы сообщить браузеру (в частности, Microsoft Internet Explorer 5), как обрабатывать и отображать каждый из созданных вами XML-элементов, можно воспользоваться таблицей стилей [5-6]. С помощью данного метода вы связываете таблицу стилей с XML-документом. Таблица стилей представляет собой отдельный файл, содержащий инструкции для форматирования индивидуальных XML-элементов. Вы можете использовать каскадную таблицу стилей (Cascading Style Sheet – CSS), которая также применяется для HTML-страниц.
Можно выделить два основных этапа при использовании таблицы каскадных стилей для отображения XML-документа:
1. Создание файла таблицы стилей.
2. Связывание таблицы стилей с XML-документом.
Таблица стилей состоит из одного или нескольких правил (иногда их называют набором правил). Правило содержит информацию по отображению определенного типа элемента в XML-документе. На рисунке 1 представлено правило для элементов BOOK с указанием его составных частей.
Рис. 1
Селектор представляет собой имя типа элемента, к которому относится информация по отображению.
За селектором следует блок объявлений, который ограничивается фигурными скобками ({}) и содержит одно или несколько объявлений, разделяемых точкой с запятой. Каждое объявление задает установку определенного свойства, такого как размер шрифта, который будет использован для отображения элемента. Объявление состоит из свойства, вслед за которым идет двоеточие, после которого следует значение для данного свойства.
Набор свойств, которые вы присвоили определенному элементу (например, BOOK), действует на все дочерние элементы, прямо или косвенно вложенные в него, если только они не переустанавливаются впоследствии для определенного дочернего элемента.
Следующие свойства, однако, являются исключениями и не наследуются дочерними элементами:
· свойство display;
· свойства, относящиеся к фону (background-color , background-image , background-repeat и background-position );
· свойство vertical-align;
· свойства размещения текста.
Можно применить одно правило к нескольким элементам, включив все имена элементов в селектор и отделив имена запятыми. Например, следующее правило применяется к типам элементов BOOK, TITLE, AUTHOR, BINDING, PAGES, PRICE:
BOOK, TITLE, AUTHOR, BINDING, PAGES, PRICE
{display:block;
margin-bottom:1em}
В селекторе вы можете предварить имя элемента именами одного или нескольких элементов-предков (родительский, родительский плюс родительский родителя и т.д.), и правило будет применено только к элементам с этим именем, которые являются вложенными подобным образом. Селектор, который включает один или несколько элементов-предков, называется контекстуальным (contextual) селектором. Селектор, который не включает имен элементов-предков, называется родовым (generic) селектором.
Если определенное свойство для одного и того же элемента имеет одну установку в правиле с контекстуальным селектором, и другую установку в правиле с родовым селектором, установка в правиле с контекстуальным селектором доминирует, поскольку является более конкретизированной.
Вы можете использовать специальный атрибут STYLE в вашем XML-документе вместо того, чтобы устанавливать одно или несколько определенных свойств отдельного элемента в таблице стилей. Если значение свойства, установленного с помощью атрибута STYLE, конфликтует со значением свойства, установленного в таблице стилей, установка с помощью атрибута STYLE имеет приоритет. Таким образом, атрибут STYLE является удобным средством, чтобы переустановить – для определенного элемента – значение свойства, присвоенное для типа элемента в присоединенной таблице стилей.
<TITLE STYLE='font-style:normal; font-size:14pt'> The Adventures of Huckleberry Finn</TITLE>Для валидных документов вам необходимо объявить атрибут STYLE в DTD перед тем, как вы сможете использовать атрибут. Вы можете сделать это, например, следующим образом:<!ATTLIST TITLE STYLE CDATA #IMPLIED>
Вы можете воспользоваться директивой @import в вашей таблице каскадных стилей, чтобы встроить в нее одну или несколько других таблиц стилей. Возможность импорта отдельных таблиц стилей позволяет хранить правила для связанных стилей в отдельных файлах, а затем объединять их при создании документов определенного типа:
@import url(URLТаблСтил);
Директива @import должна располагаться в начале таблицы стилей перед правилами. Можно поместить в начале таблицы стилей несколько директив @import.
Если вы импортируете одну или несколько таблиц стилей, браузер объединяет правила, содержащиеся в основной и импортируемых таблицах стилей. Однако в случае возникновения конфликта правил основная таблица стилей (из файла, в который осуществляется импорт) имеет приоритет над импортируемыми таблицами стилей. Если же вы импортируете несколько таблиц стилей, правила из таблицы стилей, импортированной последней, имеют приоритет над правилами из ранее импортированных таблиц стилей.
Чтобы связать таблицу каскадных стилей с XML-документом, вы должны вставить в документ зарезервированную инструкцию по обработке xml-stylesheet. Эта инструкция по обработке имеет следующую обобщенную форму записи, где CSSFilePath есть путь, задающий местонахождение файла таблицы стилей:
<?xml-stylesheet type="text/css" href=CSSFilePath?>
Возможность присоединять к XML-документу внешнюю таблицу стилей увеличивает гибкость форматирования документа. Вы можете полностью изменить вид документа, просто присоединив к нему другую таблицу стилей. Чтобы сделать это, достаточно всего лишь отредактировать URL в инструкции по обработке xml-stylesheet, не внося никаких других изменений в XML-документ.
Вы можете включить в XML-документ более одной таблицы стилей, вставив для каждой из них инструкцию по обработке xml-stylesheet в начале XML-документа.
Если вы устанавливаете связи с несколькими таблицами стилей, Internet Explorer 5 объединяет правила из различных таблиц. Если отдельные таблицы стилей содержат конфликтующие правила, правила из последней связываемой с документом таблицы стилей имеют приоритет над правилами, содержащимися в предшествующих таблицах стилей.
Если вы собираетесь отображать XML-документ в Internet Explorer 5.5, то можете создать правило, которое применяется только к первой букве элемента block с помощью добавления указателя :first-letter к имени элемента в селекторе. Аналогично, вы можете создать правило, которое применимо только к первой строке элемента block, добавив указатель :first-line к имени элемента в селекторе. Подобные выражения создают так называемый псевдо-элемент – "псевдо" здесь означает, что правило применяется к фрагменту текста, который не является отдельным элементом.
CSS представляет собой простой язык стилей, который легко запомнить и использовать. Его главное преимущество — простота. Если нужно только визуализировать документ XML, не выполняя никаких трансформаций, язык CSS подойдет для этого лучше всего. Его основными недостатками являются отсутствие более сложных моделей визуализации и зависимость от структуры обрабатываемых документов XML.
2. Перечень вопросов к разработке
1. Изучить основы CSS.
2. Написать таблицу стилей на CSS для отображения XML-документа из лабораторной работы №1.
3. Оформить отчет, включающий постановку задачи, тексты XML, DTD, XSD, CSS документов, демонстрацию работы программ.
4. Защитить лабораторную работу.
3. Контрольные вопросы
1. Статическая информационная модель.
2. Динамическая информационная модель.
3. Визуализация документа XML.
4. Преимущества и недостатки CSS.
5. Пространство имен. Определение. Использование.
6. Пространство имен. Использование и декларация пространства имен.
Лабораторная работа №3
Отображение
XML
-документ с помощью XSL
Цель работы:
Изучить конструкции языка XSL. Научиться отображать XML документы с использованием XSL.
1. Методические указания
Язык XSL [2-5,7-8] является приложением XML, так что фактически таблица стилей (т.е. таблица трансформаций) представляет собой документ XML. В связи с этим документ может начинаться с декларации XML, показывающей анализатору, какой версией языка документ закодирован.
Корневым элементом нашей таблицы стилей является элемент <xsl: stylesheet>:
<xsl: stylesheet version=="1.0"
xmlns:xsl=="http://www.w3.org/1999/XSL/Transform">.
Первым атрибутом этого элемента служит версия XSLT, вторым — атрибут xmlns:xsl, содержащий пространство имен для рекомендации трансформации XSL.
Этот атрибут декларирует пространство имен ХSLT. С данным пространством связан префикс xsl, так что корневым элементом фактически является элемент <stylesheet>, но он квалифицирован префиксом пространства имен xsl:. После объявления пространства имен любой элемент, начинающийся с префикса xsl:, входит в состав словаря XSL.
Элемент <stylesheet> содержит три шаблона,
каждый из которых вложен в элемент <template>. В таблице стилей этот элемент фактически называется <xsl:template>, так как мы включили пространство имен. У элемента <template> есть атрибут match, значением которого является образец (pattern) в форме выражения XPath. С ним сравнивается узел дерева, к которому применяется шаблон. Прежде всего, процессору XSL надо сообщить желаемую форму вывода. Узнав ожидаемый формат вывода, процессор начнет исследовать исходный документ с корневого узла.
Прежде чем сделать преобразование дерева документа XML, из него следует выбрать те узлы, которые подвергнутся тому или иному преобразованию. Их можно выбирать по имени, содержимому, атрибутам и другим признакам. Условия отбора узлов задаются образцом (pattern), записанным в виде одного или нескольких выражений языка XPath 2.0. Выражения, содержащиеся в образце, объединяются вертикальной чертой |, означающей, что выбираемый узел должен удовлетворять хотя бы одному выражению образца. Вместо вертикальной черты можно записывать слово union.
В образце можно записать не всякое выражение XPath, а только путь, каждый шаг которого определяется осью, причем допускаются только три оси: child (по умолчанию), // и attribute. Это означает, что, находясь в каком-то узле, мы можем "увидеть", кроме него самого, только его атрибуты и узлы-потомки. Обратите внимание на то, что явная запись оси descendant-or-self недопустима, применяется только сокращенная запись //. Запись оси attribute:: можно сократить до одной "собачки" @, а текущий узел очень часто обозначается точкой.
Хотя образец и строится как выражение языка XPath, но его цель — не отобрать последовательность узлов, а проверить соответствие узла данному образцу. Можно сказать, что некоторый узел Node соответствует некоторому образцу pattern тогда и только тогда, когда узел Node принадлежит последовательности узлов — результату вычисления выражения //Pattern. Например, образцу person//street будут соответствовать все узлы из последовательности //person//street, а именно все узлы street, вложенные в узлы-элементы person даже через несколько промежуточных узлов.
Надо сразу же отметить, что перечисленные ограничения касаются только образцов. В других конструкциях языка XSLT можно применять выражения XPath в полном объеме.
Язык XSLT объявляет около полусотни элементов. Из них 17 элементов верхнего уровня, которые могут быть непосредственно
Кроме элементов верхнего уровня вложенности, в языке XSLT объявлено более тридцати элементов, которые можно записывать в теле элементов верхнего уровня. Наиболее часто применяются элементы xsl:apply-templates, xsl:value-of, xsl:copy-of, xsl:sort, xsl:text.
Из всех элементов XSLT не верхнего уровня вложенности выделяются инструкции. Не путайте инструкции XSLT и инструкции по обработке XML. Формально инструкции XSLT определяются как элементы, которые можно вставлять в конструктор последовательности. К инструкциям, в частности, относятся элементы, создающие узлы всех семи видов и последовательности узлов. Это элементы xsl:element, xsl:attribute, xsl:text, xsl:comment, xsl:processing-instruction, xsl:namespace, xsl:result-document, xsl:sequence.
Кроме них, инструкциями считаются элементы xsl:apply-templates, xsl: value-of, xsl: variable и др., всего более двадцати элементов. К инструкциям относятся как элементы, управляющие выбором правил преобразовании xsl:if, xsl:for-each, xsl:choose, так и элементы, копирующие узлы xsl:copy, xsl:copy-of.
Все элементы необязательны и могут располагаться в любом порядке, за одним исключением: декларации xsl:import, если они есть, должны быть записаны первыми.
Рассмотрим некоторые наиболее часто применяемые элементы XSLT.
Декларация
xsl
:
variable
Элемент xsl:variable определяет имя объекта. Оно записывается обязательным атрибутом name. Имя объекта должно быть уточненным именем XML типа QName. Кроме того, атрибутом select переменной можно задать сам объект, а атрибутом as определить тип объекта. Например:
<xsl:variable name="var1" select="count(//person)" as="xs:integer" />
Имя var1 будет хранить число элементов person. Объект может быть получен из содержимого элемента xsl: variable:
<xsl: variable name="var2">10</xsl:variable>
или создан конструктором последовательности:
<xsl:variable name="var3">
<xsl:value-of select="count (//person) " />
<xsl:variable>
Если объект не получен из атрибута select или содержимого элемента xsl: variable, то по умолчанию имя связывается с пустой строкой.
Для того чтобы получить объект, связанный с именем, определенным элементом xsl: variable, перед именем надо поставить знак доллара: $varl, $var2. При этом следует учитывать область действия имени.
Область действия имени простирается на весь элемент, в котором оно определено, начиная с места определения и включая вложенные элементы, если только в них не определено то же самое имя.
Имена, определенные непосредственно в корневом элементе xsl:stylesheet, называются глобальными именами, остальные — локальными именами.
Хотя слово "variable" и переводится с английского языка как "переменная", имя, созданное элементом xsl: variable, — это не имя переменной, его значение нельзя изменить. Это только название некоторого объекта, которое удобно использовать в тех случаях, когда объект надо использовать во многих местах таблицы стилей, а его вычисление сложно или громоздко.
Декларация
xsl
:
param
Элемент xsl:param записывается или непосредственно в элементе xsl:stylesheet, чтобы задать параметр преобразования, или в элементе xsl:template, чтобы задать параметр правила, или в элементе xsl:function как аргумент функции. У него один обязательный атрибут name, определяющий имя параметра. Кроме него, часто присутствует необязательный атрибут select, в котором записывается выражение для получения значения параметра:
<xsl:param name="pl" select="10 + 20" />
Если атрибут select отсутствует, то значение параметра берется из содержимого элемента, которым может быть конструктор последовательности узлов и атомарных значений:
<xsl:param name="p2">10</xsl:param>
Если отсутствует и атрибут select, и содержимое элемента, то параметр получает значение пустой строки.
Для получения значения параметра надо записывать его имя со знаком доллара: &p1,&p2. Например:
<xsl:when test= "&p1=10 ">
Правила, определяющие область видимости параметров, такие же, как и у имен объектов, определенных декларацией xsl:variable.
Еще один необязательный атрибут as содержит желательный тип, к которому будет приведено значение параметра.
Наконец, последний атрибут required, принимающий значения yes или nо (по умолчанию), указывает обязательность параметра. Если параметр обязателен, required="yes", то элемент xsl:param должен быть пустым и не содержать атрибут select. В таком случае он получит определенное значение при вызове функции или элементом xsl:with-param при вызове шаблона.
Элемент
xsl
:
with
-
param
Элемент xsl:with-param ссылается на некоторый параметр, имя которого записано в обязательном атрибуте name. Необязательным атрибутом select можно задать выражение, результат вычисления которого будет новым значением параметра:
<xsl:with-param name="pl" select="100 * 20" />
Новое значение можно задать и в содержимом элемента:
<xsl:with-param name="pl">100</xsl:with-param>
Элемент xsl:with-param используется только в инструкциях xsl:apply-templates, xsl:apply-imports, xsl:call-template.
Инструкция xs
l
:value-of
Элемент xsl:value-of вычисляет выражение, записанное в его обязательном атрибуте select, и преобразует его в строку. Например, выше мы определили имя объекта var2. Чтобы получить значение объекта var2, надо записать:
<xsl:value-of select="$var2" />
Если в результате вычисления выражения получается последовательность, то процессор XSLT версии 1.0 выберет из нее только первый элемент, преобразованный в строку.
Инструкции управления
xsl
:
if
,
xsl
:
for
-
each
,
xsl
:
choose
Элемент xsl:if запускает конструктор последовательности, содержащийся в его теле, только если истинно выражение, записанное в обязательном и единственном атрибуте test:
<xsl:if test="$x > $у">
<xsl:value-of select="$x"/> больше <xsl:value-of select="$y" />
</xsl:if>
У элемента xsl:for-each в обязательном и единственном атрибуте select записывается выражение, дающее в результате последовательность. Для каждого члена этой последовательности выполняется конструктор, содержащийся в теле элемента xsl:for-each. В результате получается цикл, выполняющийся столько раз, сколько элементов у последовательности, полученной в результате вычисления выражения атрибута select.
У элемента xsl:choose нет ни одного атрибута, но в его теле записывается один или несколько элементов xsl: when и один необязательный элемент xsl:otherwise:
<xsl:choose>
<xsl when test="$day=l">Понедельник</xsl:when>
<xsl when test="$day=2">Bторник</xsl:when>
<xsl when test="$day=3">Cреда</xsl:when>
<xsl when test="$day=4">Четверг</xsl:when>
<xsl when test="$day=5">Пятница</xsl:when>
<xsl when test="$day=6">Cy66oтa</xsl:when>
<xsl when test="$day=7">Bocкpeceнье</xsl:when>
<xsl otherwise>Ошибка определения дня нeдeли</xsl:otherwise>
</xsl:choose>
У элемента xsl:when есть только один обязательный параметр test, содержащий логическое выражение, и тело, содержащее конструктор последовательности.
Элемент xsl: otherwise не имеет атрибутов, у него есть только тело, содержащее конструктор последовательности.
В инструкции xsl: choose всегда выполняется не больше одного варианта, Варианты xsl:when просматриваются в порядке их написания в инструкции xsl:choose. Как только будет найден вариант с истинным значением выражения test, он будет выполнен, и результат этого варианта будет результатом всей инструкции. Варианты, следующие за ним по порядку, не рассматриваются. Если ни один вариант не подойдет, то результатом инструкции будет результат конструктора, записанного в элементе xsl:otherwise. Если элемента xsl:otherwise в инструкции нет, то результатом будет пустая строка.
Инструкция
xsl
:
apply
-
templates
Элемент xsl:apply-templates, записываемый чаще всего внутри элемента xsl: template, в простейшем виде пуст:
<xsl:apply-templates />
Он предписывает обработать рекурсивно все узлы-потомки узлов, отобранных родительским элементом xsl:template.
У элемента xsl:apply-templates есть необязательные атрибуты select и mode.
Атрибут select, значением которого должно быть выражение, дающее последовательность узлов, ограничивает обработку только указанными в нем узлами.
Атрибут mode выбирает режим обработки из режимов, уже определенных в элементах xsl:template. Режим — это любое имя типа QName, но два режима предопределены. Это текущий режим, отмечаемый словом #current, и режим по умолчанию, принимаемый при отсутствии атрибута mode, или отмечаемый явно словом #default.
Содержимым элемента xsl: apply-templates могут служить элементы xsl:sort и xsl:with-param.
2. Перечень вопросов к разработке
1. Изучить конструкции языка XSL.
2. Написать таблицу стилей на XSL для отображения XML-документа из лабораторной работы №1.
3. Оформить отчет, включающий постановку задачи, тексты XML, XSL документов, демонстрацию работы программ.
4. Защитить лабораторную работу.
3. Контрольные вопросы
1. Адресация на языке XPath.
2. Язык трансформаций XSLT.
3. Каким образом процессор XSL трансформирует исходный документ.
4. Функции процессора XSL.
Лабораторная работа №4
Отображение
XML
-документА с помощью связывания данных
Цель работы:
Научиться отображать XML-документы с помощью связывания данных.
1. Методические указания
Метод связывания данных [5] требует создания HTML-страницы, связывания с ней XML-документа и установления взаимодействий стандартных HTML-элементов на странице, таких как SPAN или TABLE, с элементами XML. В дальнейшем HTML-элементы автоматически отображают информацию из связанных с ними XML-элементов.
Вот два основных этапа при связывании данных:
1. Установка связи XML-документа с HTML-страницей, на которой вы хотите отобразить данные XML. Этот шаг обычно реализуется включением HTML элемента с именем XML в HTML-страницу. Например, следующий элемент на HTML-странице связывает XML-документ Book.xml со страницей:
<XML ID="dsoBook" SRC="Book.xml"></XML>
2. Сцепление HTML-элементов с XML-элементами. Когда вы сцепляете HTML-элементы с XML-элементом, HTML-элемент автоматически отображает содержимое XML-элемента. Например, следующий элемент SPAN на HTML-странице сцеплен с элементом AUTHOR связанного XML-документа:
<SPAN DATASRC="#dsoBook" DATAFLD="AUTHOR"></SPAN>
В результате HTML-элемент SPAN отображает содержимое XML-элемента AUTHOR.
Чтобы отобразить XML-документ на HTML-странице, вы должны установить его связь со страницей. Самый простой путь сделать это в Microsoft Internet Explorer 5 – включить в страницу HTML-элемент с именем XML, так называемый фрагмент данных. Вы можете использовать одну из двух различных форм записи для фрагмента данных.
· В первой форме весь текст XML-документа помещается между начальным и конечным тегами XML.
· Во второй форме записи HTML-элемент с именем XML остается пустым и содержит только URL XML-документа.
Когда Internet Explorer 5 открывает HTML-страницу, его встроенный XML-процессор синтаксически анализирует XML-документ. Internet Explorer 5 также создает программный объект, который носит название Объект исходных данных (Data Source Object DSO), который хранит данные XML и обеспечивает доступ к этим данным. DSO хранит данные XML как набор записей, т.е. множество записей и их полей.
Когда вы сцепляете HTML-элемент с XML-элементом, DSO автоматически предоставляет значение XML-элемента и управляет всеми его свойствами. DSO также позволяет вам напрямую осуществлять доступ и манипулирование имеющимся набором записей посредством ряда методов, свойств и событий.
Если вы открываете XML-документ через фрагмент данных на HTML-странице, Internet Explorer 5 проверяет, является ли документ корректно сформированным, а также – если документ включает объявление типа документа – является ли он валидным. Однако в том случае, если документ содержит ошибку, Internet Explorer 5 просто не будет отображать данные XML, не выводя сообщение об ошибке.
Вы можете осуществлять сцепление HTML-элементов с XML-элементами двумя основными способами.
· Табличное сцепление
, что означает сцепление HTML-элемента TABLE с данными XML, так что в таблице автоматически отображается весь набор записей, принадлежащих XML-документу.
<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="2">
<THEAD> <TH>Title</TH> <TH>Author</TH> </THEAD> <TR ALIGN="center"> <TD><SPAN DATAFLD="TITLE" STYLE="font-style:italic"></SPAN></TD> <TD><SPAN DATAFLD="AUTHOR"></SPAN></TD> </TR> </TABLE>
Если XML-документ содержит много записей, можно воспользоваться постраничный вывод, для этого необходимо:
· Установите максимальное число записей, которое будет выводиться на странице с помощью атрибута DATAPAGESIZE элемента TABLE.
· Присвойте уникальный идентификатор атрибуту ID элемента TABLE.
<TABLE ID="InventoryTable" DATASRC="#dsoInventory" DATAPAGESIZE="5">
· Для перемещением между записями используются методы элемента TABLE такие как FirstPage, previousPage, nextPage, LastPage.
Для отображения иерархической структуры записей можно использовать вложенные таблицы. Например, разметка для вложенной таблицы может выглядеть следующим образом:
<TABLE DATASRC="#dsoInventory" DATAFLD="BOOK" BORDER=0 CELLSPACING=10>
· Сцепление по отдельным записям
, что означает сцепление не табличных элементов HTML (например, элементов SPAN) с XML-элементами таким образом, что за один раз отображается только одна запись.
<SPAN STYLE="font-weight:bold" DATASRC="#dsoBook" DATAFLD="TITLE"></SPAN>Нужно учитывать, что HTML-элемент может отобразить за раз только одну запись DSO (объект исходных данных), ассоциированную с XML-документом. Для доступа к другим записям нужно воспользоваться методами для перемещения между записями moveFirst, movePrevious, moveNext, moveLast, move, принадлежащими объекту recordset DSO.<BUTTON ONCLICK="dsoInventory.recordset.moveFirst()"> |< First </BUTTON>Кроме представленных существует еще ряд других способов для связывания не табличных HTML-элементов. Это могут быть как индивидуальные HTML-элементы, используемые для связывания данных по одной записи, так и HTML-элементы, содержащиеся в сцепленной таблице HTML. Например:<A DATASRC="dsoInventory" DATAFLD="REVIEWS"> reviews</A>
Если необходимо отобразить атрибут элемента XML-документа, то следует учитывать, что DSO и элемент, и атрибут будет хранить как вложенные записи. Следовательно, набор записей превратится в иерархический набор, и для отображения вложенных записей необходимо будет воспользоваться вложенной таблицей. Чтобы иметь возможность отобразить как символьные данные, так и атрибут как вложенную запись, следует иметь в виду то обстоятельство, что DSO использует специальное имя $TEXT для обращения ко всем символьным данным элемента, не включая при этом значений атрибута, имя поля для которого будет совпадать с именем атрибута. Вы можете использовать имя $TEXT в качестве имени поля, чтобы связать ячейку таблицы с символьными данными, содержащимися в записи элемента. Например:
<TABLE DATASRC="#dsoInventory" DATAFLD="AUTHOR"> <TR> <TD><SPAN DATAFLD="$TEXT"></SPAN></TD> <TD><SPAN DATAFLD="Born"></SPAN></TD> </TR></TABLE>
2. Перечень вопросов к разработке
1. Написать HTML-страницу, связать с ней XML-документ из лабораторной работы №1
2. Установить взаимодействие стандартных HTML-элементов на странице, таких как SPAN и TABLE, с элементами XML.
3. Оформить отчет, включающий постановку задачи, тексты XML, HTML документов, демонстрацию работы программ.
4. Защитить лабораторную работу.
3. Контрольные вопросы
1. Основные этапы при связывании данных.
2. DSO.
3. Проверка на наличие ошибок XML.
4. Табличное сцепление данных. Постраничное отображение. Использование вложенных таблиц для отображения иерархической структуры записей.
5. Связывание данных по одной записи. Перемещение между записями.
6. Связывание HTML-элементов с XML-атрибутами.
Лабораторная работа №5
Отображение
XML
-документА с помощью
DOM
Цель работы:
Изучить основы библиотеки DOM. Научиться отображать XML-документы с использованием DOM.
1. Методические указания
При написании сценария [2,5] вы создаете HTML-страницу, связываете ее с XML-документом и имеете доступ к индивидуальным XML-элементам с помощью специально написанного кода сценария (JavaScript или Microsoft Visual Basic Scripting Edition [VBScript]). Браузер воспринимает XML-документ как объектную модель документа (Document Object Model – DOM), состоящую из большого набора объектов, свойств и команд. Написанный код позволяет осуществлять доступ, отображение и манипулирование XML-элементами.
В браузерах Internet Explorer 5 и выше находятся встроенные библиотеки DOM [2,5]. Для сценариев на стороне клиента доступно множество объектов для работы с XML-документом, самые важные из них, объекты XMLDOMDocument, XMLDOMNode, XMLDOMNodeList, XMLDOMParseError, представляющие интерфейс для доступа ко всему документу, отдельным его узлам и поддеревьям, предоставляющие необходимую для отладки информацию о произошедших ошибках анализатора соответственно.
Объект XMLDOMNode [2], реализующий базовый DOM интерфейс Node, предназначен для манипулирования с отдельным узлом дерева документа. Его свойства и методы позволяют получать и изменять полную информацию о текущем узле – его тип (dataType, nodeType, nodeTypeString), название (baseName, prefix, nodeName ), его содержимое (attributes ,text, nodeValue, childNodes) и т.д.
При выполнении данной лабораторной работы могут быть полезны следующие свойства:
nodeName – Возвращает полное название (вместе с Namespace атрибутом) текущего узла в виде строки. Доступно только для чтения.
baseName – Возвращает название элемента без префикса Namespace. Только для чтения.
prefix – Возвращает Namespace префикс. Только для чтения.
dataType – Определяет тип содержимого текущего узла (описываемый схемами данных). Доступно для записи и чтения.
nodeType – Возвращает тип текущего узла. Только для чтения.
nodeTypeString – Возвращает тип узла в виде текста. Только для чтения.
attributes – Возвращает список атрибутов текущего узла в виде коллекции XMLDOMNamedNodeMap. Если атрибутов нет, то свойство length будет содержать нулевое значение. Для тех узлов, у которых не может быть атрибутов, возвращается null. Доступно только для чтения.
nodeValue – Возвращает содержимое текущего узла. Доступно для чтения и записи.
childNodes – Для тех узлов, которые имеют дочерние элементы, возвращает их список в виде XMLDOMNodeList. В том случае, если дочерних элементов нет, значение свойства length списка равно нулю. Только для чтения.
lastChild – Возвращает последний дочерний элемент или null, если таковых не имеется. Свойство доступно только для чтения.
firstChild – Возвращает первый дочерний элемент или null. Только для чтения.
nextSibling – Возвращает следующий дочерний элемент. Только для чтения.
previousSibling – Возвращает предыдущий дочерний элемент. Доступно только для чтения.
parentNode – Содержит ссылку на родительский элемент. В том случае, когда такого элемента нет, возвращает null. Доступно только для чтения.
Объект XMLDOMDocument [2] представляет верхний уровень объектной иерархии и содержит методы для работы с документом: его загрузки (readyState, load(url), loadXML(xmlString), save(objTarget), abort() и т.д.), создания в нем элементов (createElement(tagName)), атрибутов (createAttribute (name)), комментариев (createComment(data)) и т.д. Многие свойства и методы этого объекта реализованы также в рассмотренном выше классе Node, т.к. документ может быть рассмотрен как корневой узел с вложенными в него поддеревьями.
Объект XMLDOMNodeList [2] представляет собой список узлов - поддеревья и содержит методы, при помощи которых можно организовать процедуру обхода дерева. Например:
· length – число элементов списка узлов;
· item(i) – выбор i-того элемента из списка. Возвращает объект XMLDOMNode;
· nextNode() – выбор следующего элемента в списке, если такого элемента нет, то возвращает null. Первый вызов этого метода возвратит ссылку на первый элемент списка;
· reset() – сброс внутреннего указателя текущего элемента.
Объект XMLDOMParserError [2] позволяет получить всю необходимую информацию об ошибке, произошедшей в ходе разбора документа. Все свойства этого объекта доступны только для чтения. Основные свойства:
· errorCode – содержит код возникшей ошибки либо 0, если таковой не случилось;
· url – возвращает URL обрабатываемого документа;
· filepos – возвращает смещение относительно начала файла фрагмента, в котором обнаружена ошибка;
· line – содержит номер строки, содержащей ошибку;
· linepos – позицию ошибки в строке, в которой была обнаружена ошибка;
· reason – описание ошибки;
· srcText – содержит полный текст строки, в которой произошла ошибка;
2. Перечень вопросов к разработке
1. Создать HTML-страницу, связать ее с XML-документом из лабораторной работы №1.
2. Написать кода сценария (JavaScript или Microsoft Visual Basic Scripting Edition [VBScript]) для доступа к индивидуальным XML-элементам.
3. Оформить отчет, включающий постановку задачи, тексты XML-документа и скриптов, демонстрацию работы программ.
4. Защитить лабораторную работу.
3. Контрольные вопросы
1. Объектная модель документа.
2. Зачем нужна модель DOM.
3. Использование модели DOM на сервере.
4. Использование модели DOM у клиента.
Лабораторная работа № 6
Написание
web
-сервиса для обработки
XML
-документа
Цель работы:
Изучить основные принципы создания WEB- сервисов.
1. Методические указания
Сервис
Для того чтобы создать самый простой Web-сервис [1,8], который по запросу пользователя будет выдавать текущую дату или комбинацию даты и времени, в среде разработки Visual Studio .NET следует выполнить команду меню File | New | Project и в появившемся диалоговом окне New Project в наборе Templates выделить значок ASP.NET Web Service. В поле Name следует указать наименование создаваемого проекта. После того, как все необходимые приготовления средой разработки будут сделаны, на основном рабочем поле появятся две новые страницы. Одна будет предназначена для разработки визуального дизайна, а на второй будет располагаться код нашего сервиса. Естественно, у создаваемого сервиса не может быть внешнего вида как такового, ему нечего отображать, поэтому страницу для дизайна можно спокойно закрыть.
В состав одного проекта может входить несколько отдельных сервисов. Для нашего примера потребуется всего один Web-сервис, заготовка для которого создается средой разработки Visual Studio. NET автоматически, поэтому ничего изменять не потребуется, и мы можем сразу перейти на страницу с наименованием Service1.asmx.vb. На этой странице нужно разместим код нашего Web-сервиса:
<WebMethod()> Public Function MyDate(ByVal ShowTime As Boolean
) As String
Dim MD As DateTime
If ShowTime Then
MyDate = MD.Now
Else
MyDate = MD.Today
End If
End Function
После компиляции к созданному Web-сервису можно обратиться даже из браузера. При попытке обращения к Web-сервису Web-сервером генерируется Web-страницы. На этой Web-странице расположена ссылка на формальное описание структуры Web-сервиса, а также перечислены все функции, поддерживаемые Web-сервисом. В нашем случае, естественно, указана лишь одна функция MyDate. Наименование функции также является гиперссылкой, нажав на которую можно перейти к Web-странице, позволяющей воспользоваться этой функцией. После щелчка мышью на ссылке в браузере будет отображена Web-страница. На этой странице расположено поле ввода, в котором пользователь может указать значение параметра, передаваемого функции.
В результате работы функции сервиса получим:
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/">11.08.2006 23:03:54</string>
XML-документ в качестве источника данных
Создадим Web-сервис, который будет включать единственную функцию, возвращающую обычный набор данных (DataSet), содержащий информацию, взятую из XML-файла [8].
Для этого создадим новый проект Web-сервиса. На его страницу отбуксируем один компонент DataSet с вкладки Data. При этом будет актировано диалоговое окно AddDataset, в котором разработчику предлагается указать тип создаваемого набора данных. Так как в нашем случае XML-файл может содержать данные любой структуры, то для набора данных нельзя заранее указать структуру. Следовательно, в этом диалоговом окне разработчик должен выбрать переключатель Untyped dataset.
Фрагмент кода Web-сервиса приведен ниже.
<WebMethod()> Public Function XMLData(ByVal file As String) As DataSet
Dim FS As IO.FileStream
Dim Reader As IO.StreamReader
FS = New IO.FileStream(Server.MapPath(file), IO.FileMode.Open, IO.FileAccess.Read)
Reader = New IO.StreamReader(FS)
DataSet1.ReadXml(Reader)
FS.Close()
XMLData = DataSet1
End Function
Для создания клиентского приложения нужно для начала создать новый проект. Для этого следует выполнить команду меню File | New | Project. В появившемся диалоговом окне New Project в наборе Templates выбрать шаблон Windows Application и в поле Name указать наименование создаваемого приложения.
После этого Visual Studio .NET создаст форму с именем Form1, устанавливаемым по умолчанию. В окне этой формы нам потребуется разместить один элемент TextBox, одно текстовое поле Label, одну кнопку Button, один компонент DataGrid, и один компонент DataSet с вкладки Data. Пример формы приведен на рисунке 2.
Рис. 2.
После этого следует установить связь с искомым Web-сервисом. Для этого надо в окне Solution Explorer выбрать наименование создаваемого приложения и правым щелчком мыши вызвать для него контекстное меню. В этом контекстном меню необходимо выполнить команду Add Web Reference, после чего будет активизировано одноименное диалоговое окно, позволяющее установить ссылки на используемые сервисы.
Для того чтобы получить ссылки на функции Web-сервиса и перенести их в проект, нужно в текстовом поле Address указать URL необходимого сервиса и загрузить ресурс, располагающийся по этому адресу. После этого в левой части искомого окна Add Web Reference будет отображено содержимое стартовой Web-страницы.
После того как искомые ссылки на функции Web-сервиса будут найдены, при помощи кнопки Add Reference их необходимо добавить к разрабатываемому проекту. После чего можно обращаться к функциям Web-сервиса в приложении (функция Button_Click).
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim xml = New WindowsApplication2.localhost.Service1()
DataSet1.Merge(xml.XMLData(TextBox1.Text))
End Sub
2. Перечень вопросов к разработке
1. Изучить основные принципы создания Web-сервисов.
2. Создать web-сервис, который будет использовать XML-документ, созданный в лабораторной работе 1, в качестве источника данных. То есть создать Web- сервис, возвращающий обычный набор данных, содержащий информацию, взятую из XML-файла.
3. Дополнить созданный web- сервис процедурами позволяющими:
· сохранять данные в XML-документе;
· находить по заданной строке данные в XML-документе;
· заменять одну строку на другую;
· добавлять данные в XML-документ;
· удалять данные из XML документа.
4. Создать клиентское приложение, работающее с разработанным web-сервисом.
5. Оформить отчет, включающий постановку задачи, тексты программ, демонстрацию работы программ.
6. Защитить лабораторную работу.
3. Контрольные вопросы
5. Web-службы. Основные понятия. Назначение.
6. История развития Web-служб.
7. Модель COM/DCOM. .
8. Стандарт CORBA/IIOP.
9. Web-службы .Net. Достоинства. Архитектура.
10. Базовые технологии web-служб: SOAP.
11. Базовые технологии web-служб: UDDI.
12. Базовые технологии web-служб: WSDL.
Список литературы
1. Алекс Феррара, Мэтью Мак-Дональд Программирование web-сервисов для .NET.
2. А. Печерский. Язык XML - практическое введение. Часть 2. http://www.citforum.ru/internet/xml2/index.shtml
3. Бумфрей Ф., Дирецо О., Дакетт Й. и др. XML. Новые преспективы WWW. Пер. с англ. – М.:ДМК, 2000 – 688 с.
4. Марк Зайден XML для электронной коммерции. – Издательство: Бином. Лаборатория знаний , 2003 – 480 с.
5. Основы XML. http://www.intuit.ru
6. Основы работы с CSS. http://www.intuit.ru
7. Скотт Шорт. Разработка XML Web-сервисов средствами Microsoft. NET (+ CD-ROM) Building XML Web Services for the Microsoft .NET Platform 2003
8. Хабибуллин И.Ш. Самоучитель XML. – СПб.: БХВ-Петербург, 2003.-336 с.
9. Шапошников И.В. Web-сервисы Microsoft .Net. – СПб.: БХВ-Петербург, 2002. – 336 с.