XML. Основные понятия и конструкции языка
XML (eXtensible Markup Language — расширяемый язык разметки) — рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML), иногда называемых словарями. XML является упрощённым подмножеством языка SGML.
Целью создания XML было обеспечение совместимости при передаче структурированных данных между разными системами обработки информации, особенно при передаче таких данных через Интернет. Словари, основанные на XML (например, RDF, RSS, MathML, XHTML, SVG), сами по себе формально описаны, что позволяет программно изменять и проверять документы на основе этих словарей, не зная их семантики, то есть не зная смыслового значения элементов. Важной особенностью XML также является применение так называемых пространств имён (namespace).
XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое. Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, «<step>»; закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, «</step>». Содержимым элемента называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы.
|
|
Кроме содержания у элемента могут быть атрибуты — пары имя-значение, добавляемые в открывающий тег после названия элемента. Значения атрибутов всегда заключаются в кавычки (одинарные или двойные).
Каждый XML-документ должен содержать в точности один корневой элемент. В отличие от HTML, теги в XML чувствительны к регистру.
XML элементы должны именоваться в соответствии со следующими правилами:
· Имена могут состоять из букв цифр и других символов
· Имена не могут начинаться с цифры или знака препинания
· Имена не должны начинаться со последовательности xml (или XML, или Xml и т. д.)
· Имена не могут содержать пробелов
<?xml version="1.0" encoding="Windows-1251"?>
<note>
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь про наши планы на эти выходные!</body>
</note>
<root
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
|
|
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
XSL. Основные понятия и конструкции языка. XSLT преобразование
Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML документов. XSLT(XSL Transformations) - это язык преобразований XSL и является его частью. Стиль XSLT предназначен для преобразования иерархической структуры и формата документа XML. Результатами преобразования могут стать XML-файл, текстовый файл, программный код, HTML-файл, файл в формате PDF, и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде.
А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4.
XSLT был разработан консорциумом W3C (World Wide Web Consortium). Первая версия языка XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии.
|
|
Как работает XSLT
Модель XSLT включает в себя такие части как:
· документы XML,
· стили XSLT,
· процессор XSLT,
· выходные документы.
Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном.
Процессор XSLT является приложением, которое принимает в качестве входных данных документы XML и стили XSLT. Он выполняет трансформацию, то есть применение набора правил в стилях XSLT к документам XML. Результатом этой работы являются выходные документы.
Применение XSLT
Язык XSLT состоит из множества инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl. Для выполнения трансформации документ стиля XSLT должен являться корректным документом XML.
Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей:
<?xml-stylesheet type="text/xsl" href="MyStyle.xsl"?>XSL-файл стилей обычно содержит множество элементов, самым главным из которых является элемент xsl:stylesheet. Именно он указывает, что данный XML-файл является файлом стилей. Кроме него могут содержаться другие элементы, например xsl:template, xsl:value-of. Документ XML и файл стиля передается в XSLT-процессор, который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации.
|
|
Ниже представлен документ XML, содержащий список языков программирования.
<?xml-stylesheet type="text/xsl" href="languages.xsl"?><languages><language>C#</language><language>Visual Basic</language><language>Delphi</language><language>Prolog</language></languages>Пример 5.1. Файл languages.xml
Необходимо вывести этот список в формате HTML. Для этой цели используем инструкцию xsl:for-each, которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select. В нашем случае укажем select="languages/language".
Файл стилей будет применяться следующий:
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><H4>Мои любимые языки:</H4><xsl:for-each select="languages/language"> - <xsl:value-of select="."/><BR/></xsl:for-each><BR/></xsl:template></xsl:stylesheet>Пример 5.2. Файл languages.xsl
Шаблон внутри xsl:for-each выводит содержимое каждого элемента language из languages. Для этой цели используется инструкция xsl:value-of и задаваемый атрибут select=".". Это означает, что процессор должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее.
Откроем XML файл через Internet Explorer или другой браузер. Будет выведен такой текст:
Мои любимые языки:
· C#
· Visual Basic
· Delphi
· Prolog
Одним из самых главных элементов в стиле является xsl:template. Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML. В атрибуте match содержится выражение для отбора узлов, к которым будет применен шаблон. Также может присутствовать атрибут name. В этом случае есть возможность вызывать шаблон по имени инструкцией xsl:apply-templates.
Для повторения вывода шаблона для каждого элемента документа применяется инструкция xsl:for-each. Шаблон выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select.
Инструкция xsl:value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент.
Фильтрация
Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации.
Один из них - это применение атрибута select инструкции xsl:for-each, а второй - применение атрибута match элемента xsl:template. Применение match мы рассмотрим позже, а сейчас рассмотрим select.
Изменим немного файл с данными: добавим атрибут high, обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список языков.
<?xml-stylesheet type="text/xsl" href="languages4.xsl"?><languages><language high="true">C#</language><language high="true">Visual Basic</language><language high="true">Delphi</language><language high="true">Prolog</language><language high="false">Assembler</language><language high="true">Java</language><language high="true">Perl</language></languages>Пример 5.3. Файл languages4.xml
Заметим, что значение false дляатрибута high стоиттолькодлязначения "Assembler". Изменим немного файл таблицы стилей:
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><H4>Языки высокого уровня:</H4><xsl:for-each select="languages/language[@high='true']"> - <xsl:value-of select="."/><BR/></xsl:for-each></xsl:template></xsl:stylesheet>Пример 5.4. Файл languages4.xsl
В секции [@high='true'] мы указываем, что выбирать следует только те узлы документа, у которых атрибут high имеет значение'true'. Знак @ является символом, указывающим на то, что после него стоит имя атрибута.
Посмотрим на результат:
Языки высокого уровня:
· C#
· Visual Basic
· Delphi
· Prolog
· Java
· Perl
Как видим, значение "Assembler" не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям.
Сортировка
Кроме фильтрации другой часто применяемой операцией при генерации кода является сортировка. Атрибут order-by инструкции xsl:for-each служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки "+" или "-", означающие сортировку по возрастанию или убыванию.
Рассмотрим немного измененный вариант документа - вместо атрибута high будем использовать элемент level, принимающий значения high или low. А имя языка запишем в элемент name.
<?xml-stylesheet type="text/xsl" href="languages6.xsl"?><languages><language><name>C#</name><level>high</level></language><language><name>Visual Basic</name><level>high</level></language><language><name>Delphi</name><level>high</level></language><language><name>Prolog</name><level>high</level></language><language><name>Assembler</name><level>low</level></language><language><name>Java</name><level>high</level></language><language><name>Perl</name><level>high</level></language></languages>Пример 5.5. Файл languages6.xml
В следующей таблице стилей для инструкции xsl:for-each применим атрибут order-by со значением +name, где знак плюса означает, что надо отсортировать по возрастанию.
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><H4>Языки высокого уровня:</H4><xsl:for-each select="languages/language[level='high']" order-by="+name"> -<xsl:value-of select="name"/><BR/></xsl:for-each></xsl:template></xsl:stylesheet>Пример 5.6. Файл languages6.xsl
В атрибуте select мы фильтруем по значению элемента level. Также в атрибуте select инструкции xsl:value-of указываем непосредственно имя элемента.
Получается такой результат.
Языки высокого уровня:
· C#
· Delphi
· Java
· Perl
· Prolog
· Visual Basic
Названия языков отсортированы в алфавитном порядке и значение "Assembler" не отображается в списке.
Другим способом сортировки является применение элемента xsl:sort путем вложения в xsl:for-each или в xsl:apply-templates. Элемент xsl:sort имеет атрибуты select и order, которые указывают на элементы, по которым должна осуществляться сортировка и на порядок сортировки соответственно.
Вложенные шаблоны
В сложных случаях возникает необходимость применения вложенных друг в друга шаблонов. Рассмотрим документ, в котором содержатся таблицы и их поля вместе с названиями.
<?xml-stylesheet type="text/xsl" href="multiple.xsl"?><database><table name="book"><field>id</field><field>title</field><field>author_id</field></table><table name="author"><field>id</field><field>first_name</field><field>last_name</field></table></database>Пример 5.7. Файл multiple.xml
В данном примере у нас будут два шаблона. Один будет основной, для таблиц, а другой будет вызываемым из него, для полей таблиц. Для вызова шаблона используется инструкция xsl:apply-templates.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><H4>Таблицы базы данных</H4><xsl:for-each select="database/table"><table border="1" select="@name"/></b></td></tr><xsl:apply-templates select="field"/></table><br/></xsl:for-each></xsl:template> <xsl:template match="field"><tr><td><xsl:value-of select="."/></td></tr></xsl:template></xsl:stylesheet>Пример 5.8. Файл multiple.xsl
XSLT-процессором будет сформирован следующий HTML-код:
<H4>Таблицы базы данных</H4><table border="1" border="1"Пример 5.9.
При открытии сгенерированного результата в браузере будет показано следующее:
Дата добавления: 2018-02-28; просмотров: 683; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!