Работа с XML в клиентской веб-разработке
Презентацию к данной лекции Вы можете скачать здесь.
Язык расширенной разметки XML занимает промежуточное положение между языками SGML и HTML. XML проще SGML, но богаче HTML. В отличие от языка гипертекстовой разметки XML позволяет хранить данные со сложной, например, иерархической структурой. Стандарт языка определен консорциумом W3C. Данный стандарт гарантирует унификацию структурированных данных и их независимость от приложений и поставщиков. С его помощью можно организовать обмен данными между различными программами. Так как XML не описывает способ визуализации данных, он позволяет осуществлять разделение кода и представления. За визуализацию отвечают таблицы стилей или программы-обработчики - парсеры. Парсеры позволяют особым образом интерпретировать содержимое XML -тэгов, что делает возможным использовать XML для работы с нотами, математическими и химическими формулами и даже с голосовой почтой. Таблицы стилей позволяют визуализировать хранящуюся в XML -файлах информацию самым причудливым образом, при этом к одному и тому же xml -файлу можно по мере необходимости применять несколько таблиц стилей. Обычно Web-серверы, обрабатывая запросы пользователей, извлекают информацию из реляционных баз данных. Если объем такой информации не очень велик, его можно хранить в XML -файлах, переложив часть нагрузки по обработке информации на клиентские приложения.
Синтаксис XML
Документ обычно начинается с пролога. Пролог содержит сведения о кодировке символов, структуре документа, таблицах стилей. Например, если в xml -файле будут содержаться русские символы, нужно добавить пункт encoding="windows-1251". В прологе указывается версия документа. В настоящее время используется первая версия стандарта - xml version="1.0". В дальнейшем версия стандарта может измениться. Пролог также может содержать инструкции по обработке (ссылка на таблицу стилей ), например <?xml-stylesheet type="text/xsl" href="library.xsl"?>. Если параметр type принимает значение text/css, речь идет о ссылке на файл каскадной таблицы стилей, если - text/xsl, речь идет о ссылке на таблицу стилей, построенную на языке XSL. В прологе могут содержаться комментарии, заключенные между символами <!-- -->. Декларация DOCTYPE указывает на корневой элемент документа и определяет типа документа ( DTD ) по ссылке на внешний файл. Пример:
<?xml version="1.0" encoding="windows-1251"?> <?xml-stylesheet type="text/xsl" href="library.xsl"?> <!DOCTYPE catalog SYSTEM "catalog.dtd"> <!-- Последнее обновление 2010-11-02-->
Документ XML состоит из элементов. У каждого элемента должно быть имя. Элементы образуют структуры, которые можно обрабатывать с помощью парсеров или с помощью таблиц стилей. Элементы могут содержать также имена и значения атрибутов, которые предоставляют дополнительную информацию о содержимом. Теги устанавливают границы вокруг содержимого элемента. Открывающие теги показывают начало элемента следующим образом:
<elementName attr1Name="attr1Value" attr2Name="attr2Value"...>
Для элементов, не имеющих атрибутов, можно использовать сокращенный вариант открывающего тега:
<elementName>
Закрывающие теги указывают на окончание элемента:
</elementName>
Считается, что элемент включает в себя открывающий тег, закрывающий тег и все, что расположено между ними.
<Employee> <firstName>Иван</firstName > <lastName>Петров</lastName> </Employee >
В данном случае элемент <Employee> содержит два других элемента, <firstName> и <lastName>. Элемент <firstName> содержит текст Иван, а элемент <lastName> - текст Петров. При написании названия элементов нужно учитывать, что XML чувствителен к регистру, выражение <lastName>Петров</LastName> является ошибочным.
Элементы XML -документа образуют иерархическую (древовидную) структуру. При этом должен быть только один корневой элемент. В нашем примере корневым элементом является <Employee>.
Атрибуты
Атрибуты позволяют добавлять сведения об элементе с помощью пар "имя-значение". Атрибуты могут отображаться в открывающих или пустых тегах, но не в закрывающих тегах. Синтаксис выглядит следующим образом.
<elementName attr1Name="att1Value" att2Name="att2Value"...>
или
<elementName attr1Name="att1Value" att2Name="att2Value".../>
Атрибуты должны иметь и имя, и значение. Элемент не может иметь два атрибута с одинаковым именем.
Рассмотрим пример XML -файла, содержащего сведения о товарах ().
<?xml version="1.0" encoding="windows-1251" ?> <!-- File Name: Products.xml --> <STORE> <SHOP> Матрица <CATEGORY> Продовольственные товары <PRODUCT> <ProductName>Хлеб Бородинский</ProductName> <UnitPrice>16 р.</UnitPrice> <ExpireDate>20/02/2010</ExpireDate> </PRODUCT> <PRODUCT> <ProductName>Молоко топленое</ProductName> <UnitPrice>23 р.</UnitPrice> <ExpireDate>21/02/2010</ExpireDate> </PRODUCT> </CATEGORY> <CATEGORY> Бытовая химия <PRODUCT> <ProductName>Мыло</ProductName> <UnitPrice>30 р.</UnitPrice> <ExpireDate>21/02/2011</ExpireDate> </PRODUCT> <PRODUCT> <ProductName>Шампунь</ProductName> <UnitPrice>120 р.</UnitPrice> <ExpireDate>21/06/2010</ExpireDate> </PRODUCT> </CATEGORY> </SHOP> <SHOP> М-Видео <CATEGORY> Бытовая техника <PRODUCT> <ProductName>Пылесос</ProductName> <UnitPrice>2500 р.</UnitPrice> <ExpireDate>20/02/2011</ExpireDate> </PRODUCT> <PRODUCT> <ProductName>Холодильник</ProductName> <UnitPrice>14500 р.</UnitPrice> <ExpireDate>21/02/2012</ExpireDate> </PRODUCT> </CATEGORY> <CATEGORY> Электроника <PRODUCT> <ProductName>Телевизор</ProductName> <UnitPrice>20000 р.</UnitPrice> <ExpireDate>21/02/2012</ExpireDate> </PRODUCT> <PRODUCT> <ProductName>Blue Ray-Player</ProductName> <UnitPrice>12000 р.</UnitPrice> <ExpireDate>21/06/2012</ExpireDate> </PRODUCT> </CATEGORY> </SHOP> </STORE>
Корневым узлом документа является элемент <STORE>. Если запустить файл в браузере MS IE8, мы увидим следующий результат:
Для того, чтобы вывести на экран только данные без тэгов XML, можно связать документ с каскадной таблицей стилей . Для этого нужно в прологе документа добавить такую строчку:
<?xml-stylesheet type="text/css" href="Products.css"?>
Добавим каскадную таблицу стилей .
SHOP {display:block; margin-top:12pt; font-size:12pt; font-family:Comic Sans Ms} CATEGORY {display:block; font-size:12pt; font-weight:bold; font-style:italic} PRODUCT {display:block; margin-left:15pt; font-weight:bold} ProductName {display:block; margin-left:15pt} UnitPrice {font-family:Arial} ExpireDate {font-family:Courier; margin-left:15pt}
Запустим еще раз XML -документ . Получим такой результат:
Нужно сказать, что применение каскадных таблиц стилей к XML -документам считается сейчас устаревшей практикой. Гораздо большими возможностями обладают XSLT -таблицы. Таблицы XSLT применяются для преобразования содержимого исходного XML -документа в другой документ, отличный по формату или структуре (например, чтобы преобразовать XML в HTML для использования в web-узле или преобразовать его в документ, содержащий только поля, необходимые приложению) [14.2]. Пример использования XSLT -преобразования мы рассмотрим в "Отладка и профилирование JavaSсript с помощью инструментов разработчика в IE8" .
XML-схема
Как уже говорилось выше, XML -документы обычно обрабатываются специальными программами- парсерами. Для разработки таких программ был создан язык описания XML, который называется XML Schema. Этот язык определяет правила, которым должен соответствовать документ.
После проверки документа на соответствие XML Schema, читающая программа может создать модель данных документа, которая включает:
- словарь (названия элементов и атрибутов)
- модель содержания (отношения между элементами и атрибутами и их структура)
- типы данных
Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML -документа. Языкам Объектно-ориентированного программирования гораздо легче иметь дело с таким объектом, чем с текстовым файлом. Файл, содержащий XML Schema, обычно имеет расширение ".xsd" (XML-schema-definition) [14.3].
Далее мы проиллюстрируем применения XML Schema на примере файла "", описывающего данные о товаре:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="товар" type="товар"/> <xs:complexType name="товар"> <xs:sequence> <xs:element name="название" type="xs:string"/> <xs:element name="цена" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:schema>
Пример документа, отвечающего этой схеме (файл ):
<?xml version="1.0" encoding="windows-1251"?> <товар xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="product.xsd"> <название>Renault Megane II</название> <цена>$22000</цена> </товар>
Краткие итоги
Язык XML позволяет хранить данные со сложной структурой. Кроме того с его помощью можно осуществлять обмен информацией между различными программами. Структура XML -документа напоминает дерево с одной вершиной. Для отображения данных в XML -используются таблицы стилей ( CSS и XSLT ). С помощью языка XML Schema можно задать структуру документа, пригодную для дальнейшей обработки.
Набор для практики
Вопросы:
- Какими преимуществами обладает язык XML?
- Что вы знаете о структуре XML -документа?
- Что такое XML Schema?
Упражнения:
- Разработайте документ XML, описывающий кинофильм. Создайте для него каскадную таблицу стилей.
- Разработайте XML -схему, описывающую сведения о книгах.