Автор работы: Пользователь скрыл имя, 12 Мая 2013 в 20:28, реферат
XML (Extensible Markup Language) - это новый SGML-производный язык разметки документов, позволяющий структурировать информацию разного типа, используя для этого произвольный набор инструкций.
XML предназначен для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML), иногда называемых словарями. XML является упрощённым подмножеством языка SGML.
Четвертый шаг адресации: child::span . Теперь контекстом является набор из четырех элементов. И следующий набор узлов создается в четыре прохода (за четыре итерации). При первой итерации узлом контекста становится первый div. Согласно заданной оси child:: и правилу проверки span, в набор включаются непосредственные потомки div-а, имя которых равно span. При второй итерации в набор ничего добавлено не будет, т.к. у второго div нет потомков. Третья итерация добавить в набор сразу три элемента span, а четвертая ничего не добавит, т.к. у элемента img нет потомков. Итак, в ходе проверки получен набор узлов, состоящий из четырех элементов span. Это и будет контекстом для последующей обработки.
Следующего шага нет, поэтому будет производиться фильтрация отобранного набора. В этом и состоит отличие предикатов от шагов адресации. На каждом шаге адресации получаем новый набор, отталкиваясь от контекста, полученного на предыдущем шаге. В ходе же обработки предиката новый набор получается из текущего методом фильтрации, когда из набора исключаются узлы, не прошедшие условие проверки. В данном случае ось attribute:: говорит о необходимости проверить, если ли у узлов контекста атрибуты, а условие class требует оставить лишь те узлы, у которых задан атрибут с именем class. Фильтрация происходит за четыре итерации, но в окончательный набор попадают только два элемента span.
Оси это база языка XPath.
ancestor:: Возвращает множество предков.
ancestor-or-self:: Возвращает множество предков и текущий элемент.
attribute:: Возвращает множество атрибутов текущего элемента.
child:: Возвращает множество потомков на один уровень ниже.
descendant:: Возвращает полное множество потомков.
descendant-or-self:: Возвращает полное множество потомков и текущий элемент.
following:: Возвращает необработанное множество, ниже текущего элемента.
following-sibling:: Возвращает множество элементов на том же уровне, следующих за текущим.
namespace:: Возвращает множество имеющее пространство имён (т.е. присутствует атрибут xmlns).
parent:: Возвращает предка на один уровень назад.
preceding:: Возвращает множество обработанных элементов исключая множество предков.
preceding-sibling:: Возвращает множество элементов на том же уровне, предшествующих текущему.
self:: Возвращает текущий элемент.
Существуют сокращения для некоторых осей, например:
attribute:: можно заменить на @
child:: часто просто опускают
descendant:: можно заменить на //
parent:: можно заменить на ..
self:: можно заменить на .
Дополнением к базе является набор функций, которые делятся на 5 групп:
node-set document (objec!, node-set?) - Возвращает документ указанный в параметре objec!.
string format-number (number, string, string?) - Форматирует число согласно образцу указанному во втором параметре, третий параметр указывает именованный формат числа, который должен быть учтён.
string generate-id (node-set?) - Возвращает строку, являющуюся уникальным идентификатором.
node-set key (string, objec!) - Возвращает множество с указанным ключом, аналогично функции id для идентификаторов.
string unparsed-entity-uri (string) - Возвращает непроанализированный URI, если такового нет, возвращает пустую строку.
boolean element-available (string) - Проверяет доступен ли элемент или множество указанное в параметре. Параметр рассматривается как XPath.
boolean function-available (string) - Проверяет доступна ли функция указанная в параметре. Параметр рассматривается как XPath.
objec! system-property (string) - Возвращает системные переменные параметр может быть:
xsl:version - возвращает версию XSL-T процессора.
xsl:vendor - возвращает производителя XSL-T процессора.
xsl:vendor-url - возвращает URL идентифицирующий производителя.
Если используется неизвестный параметр, функция возвращает пустую строку
boolean lang (string) - Возвращает истину если у текущего тэга имеется атрибут xml:lang, либо родитель тэга имеет атрибут xml:lang и в нем указан совпадающий строке символ.
* - обозначает любое имя или набор символов, @* - любой атрибут.
$name - обращение к переменной, где name - имя переменной или параметра.
[] - дополнительные условия выборки.
{} - если применяется внутри тега другого языка (например HTML), то XSL-T процессор, то что написанно в фигурных скобках рассматривает как XPath.
/ - определяет уровень дерева.
node-set node() - Возвращает элемент (-ы). Для этой функции часто используют заменитель '*', но в отличии от звездочки - node() возвращает и текстовые элементы.
node-set current() - Возвращает множество из одного элемента, который является текущим. Если мы делаем обработку множества с условиями, то единственным способом дотянутся из этого условия до текущего элемента будет данная функция.
number position() - Возвращает позицию элемента в множестве. Корректно работает только в цикле <xsl:for-each/>.
number last() - Возвращает номер последнего элемента в множестве. Корректно работает только в цикле <xsl:for-each/>.
number count (node-set) - Возвращает количество элементов в node-set.
string name (node-set?) - Возвращает полное имя первого тэга в множестве.
string namespace-uri (node-set?) - Возвращает ссылку на uri определяющий пространство имён.
string local-name (node-set?) - Возвращает имя первого тэга в множестве, без пространства имён.
node-set id (objec!) - Находит элемент с уникальным идентификатором.
string text() - Возвращает текстовое содержимое элемента. По сути возвращает объединенное множество текстовых элементов на один уровень ниже.
string string (object?) - Конвертирует объект в строку.
string concat (string, string, string*) - Объеденяет две или более строк
number string-length (string?) - Возвращает длину строки.
boolean contains (string, string) - Возвращает истину, если первая строка содержит вторую, иначе возвращает ложь.
string substring (string, number, number?) - Возвращает строку вырезанную из строки начиная с указанного номера, и если указан второй номер - количество символов.
string substring-before (string, string) - Если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки.
string substring-after (string, string) - Если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки.
boolean starts-with (string, string) - Возвращает истину, если вторая строка входит в начало первой, иначе возвращает ложь.
string normalize-space (string?) - Убирает лишние и повторные пробелы, а так же управляющие символы, заменяя их пробелами.
string translate (string, string, string) - Заменяет символы первой строки, которые встречаются во второй строке, на соответствующие по позиции символам из второй строки символы из третьей строки.
translate("bar","abc","ABC") - вернет BAr.
or - логическое "или".
and - логическое "и".
= - логическое "равно".
< (<)- логическое "меньше".
> (>)- логическое "больше".
<= (<=)- логическое "меньше либо равно".
>= (>=)- логическое "больше либо равно".
boolean boolean (object) - приводит объект к логическому типу.
boolean true() - Возвращает истину.
boolean false() - Возвращает ложь.
boolean not (boolean) - Отрицание, возвращает истину, если аргумент ложь и наоборот.
+ - сложение.
- - вычитание.
* - умножение.
div – деление.
mod - остаток от деления.
number number (object?) - Переводит объект в число.
number sum (node-set) - Вернёт сумму множества, каждый тэг множества будет преобразован в строку и из него получено число.
number floor (number) - Возвращает наибольшее целое число, не большее, чем аргумент.
number ceiling (number) - Возвращает наименьшее целое число, не меньшее, чем аргумент.
number round (number) - Округляет число по математическим правилам.
XML никак не определяет способ отображения и использования описываемых с его помощью элементов документа, т.е. программе-анализатору предоставляется возможность самой выбирать нужное оформление. Этого требует принцип независимости определения внутренней структуры документа от способов представления этой информации. Например, задавая в документе элемент <flower>роза</flower>, мы лишь указываем, что rose в данном случае является цветком, но информации о том, как должен выглядеть данный элемент документа на экране клиента и должен ли он отображаться вообще, в таком определении нет.
Для того чтобы использовать данные, определяемые элементами XML, например, отображать их на экране пользователя, необходимо написать программу-анализатор, которая бы выполняла эти действия. Уже сегодня таких программ появилось достаточное количество и у разработчиков существует возможность выбора наиболее подходящей из них для решения конкретных проблем.
Как уже отмечалось ранее, в общем случае, программы- анализаторы можно разделить на две группы: верифицирующие (т.е. использующие DTD- описания для определения корректности документа) и не верифицирующие. Если создать свой язык и описывать его грамматику на основе DTD, то для анализа документов, написанных на этом языке, безусловно, потребуется программа, проверяющая корректность составления документа. Но так как использование DTD в XML не является обязательным, то любой правильно оформленный документ может быть распознан и разобран программой, предназначенной для анализа XML- документов. В любом случае, используя универсальные XML- анализаторы, можно быть уверенным в том, что если заданные в документе конструкции языка являются синтаксически правильными, то программа-анализатор сможет правильно извлечь определяемые ими элементы документа и передать их прикладной программе, выполняющей необходимые действия по отображению. Т.е. после разбора документа в большинстве случаев, предоставляется объектная модель, отображающая содержимое документа, и средства, необходимые для работы с ней (прохода по дереву элементов). При этом в некоторых анализаторах способ представления структуры документа основывается на спецификации DOM. Поэтому появляется также возможность использовать строгую иерархическую модель DOM для построения собственных документов.
Если речь идет о способах отображения информации, хранящейся в XML, то необходимо упомянуть разрабатываемый в настоящее время W3C стандарт стилевых таблиц для XML, которые предназначены для описания правил отображения элементов XML.
XSL является технологией,
Без использования CSS или XSL, XML-документ отображается как простой текст в большинстве web-браузеров. Некоторые браузеры, такие как Internet Explorer, Mozilla и Mozilla Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Для применения CSS при отображении в браузере, XML документ должен содержать специальную ссылку на таблицу стилей. Например:
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>
Это отличается от подхода HTML, где используется элемент <link>.
Для задания XSL трансформации (XSLT) на стороне клиента требуется наличие следующей инструкции в XML:
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
Для вывода элементов XML- документа на экран браузера предпочтительней использование специально предназначенного для этого средства - стилевых таблиц XSL (Extensible Stylesheet Language).
Стилевыми таблицами (стилевыми листами)
принято называть специальные инструкции,
управляющие процессом
Являясь очень мощным средством оформления HTML- страниц, CSS- таблицы, тем не менее, не могут применяться в XML-документах, т.к. набор тэгов в этом языке не ограничен и использование статических ссылок на форматируемые объекты документа в этом случае невозможно.
Поэтому для форматирования XML- элементов был разработан новый язык разметки, являющийся подмножеством XML, и специально был предназначен для форматирования XML- элементов.
Некоторые его отличия от CSS:
Во-первых, стилевые таблицы XSL позволяют определять оформление элемента в зависимости от его месторасположения внутри документа, т.е. к двум элементам с одинаковым названием могут применяться различные правила форматирования.
Во-вторых, языком, лежащем в основе XSL, является XML, а это означает, что XSL более гибок, универсален и у разработчиков появляется возможность использования средства для контроля за корректностью составления таких стилевых списков (используя DTD или схемы данных)
В-третьих, таблицы XSL не являются каскадными, подобно CSS, т.к. чрезвычайно сложно обеспечить "каскадируемость" стилевых описаний, или, другими словами, возможность объединения отдельных элементов форматирования путем вложенных описаний стиля, в ситуации, когда структура выходного документа заранее неизвестна и он создается в процессе самого разбора. Однако в XSL существует возможность задавать правила для стилей, при помощи которых можно изменять свойства стилевого оформления, что позволяет использовать довольно сложные приемы форматирования