Опубликован: 19.07.2010 | Доступ: свободный | Студентов: 1674 / 151 | Оценка: 4.07 / 3.43 | Длительность: 20:59:00
Лекция 8:

Объектная модель DOM XML

Свойства объекта Node

IE: Internet Explorer, F: Firefox, O: Opera, W3C: (Стандарт)

Свойство Описание IE F O W3C
baseURI Возвращает абсолютный URI узла Нет 1 Нет Да
childNodes Возвращает свойство NodeList (список доч.узлов) 5 1 9 Да
firstChild Возвращает первый дочерний узел 5 1 9 Да
lastChild Возвращает последний дочерний узел 5 1 9 Да
localName Возвращает локальную часть имени узла Нет 1 9 Да
namespaceURI Возвращает URI узла в пространстве имен Нет 1 9 Да
nextSibling Возвращает следующий дочерний узел 5 1 9 Да
nodeName Возвращает имя узла в зависимости от типа 5 1 9 Да
nodeType Возвращает тип узла 5 1 9 Да
nodeValue Устанавливает или возвращает значение узла в зависимости от типа 5 1 9 Да
ownerDocument Возвращает корневой элемент (объект document) для узла 5 1 9 Да
parentNode Возвращает родительский узел 5 1 9 Да
prefix Устанавливает или возвращает префикс пространства имен узла Нет 1 9 Да
previousSibling Возвращает непосредственно предшествующий узел 5 1 9 Да
textContent Устанавливает или возвращает текстовое содержимое узла Нет 1 Нет Да
xml Возвращает XML код узла 5 Нет Нет Нет
Методы объекта Node
Метод Описание IE F O W3C
appendChild() Добавить новый узел в конец списка дочерних узлов 5 1 9 Да
cloneNode() Клонирование узла 5 1 9 Да
compareDocumentPosition() Сравнение позиций двух узлов Нет 1 Нет Да
getFeature(feature,version) Возвращает объект DOM, реализующий специализированный API Нет Да
getUserData(key) Возвращает объект, ассоциирующийся с ключем текущего узла. Перед этим объект должен быть ассоциирован с текущим узлом путем вызова setUserData с тем же ключем Нет 1 9 Да
hasAttributes() Возвращает истинное значение, если узел имеет атрибуты 1 9
hasChildNodes() Возвращает истинное значение, если узел имеет дочерние узлы 5 1 9 Да
insertBefore() Вставляет новый узел перед существующим узлом 5 1 9 Да
isDefaultNamespace(URI) Определяет, является ли указанный namespaceURI значением по умолчанию Нет Да
isEqualNode() Проверяет равенство двух узлов Нет Нет Нет Да
isSameNode() Проверяет идентичность двух узлов Нет 1 Нет Да
isSupported(feature,version) Определяет - поддерживается ли указанная характеристика узлом 9 Да
removeChild() Удаляет дочерний узел 5 1 9 Да
replaceChild() Заменяет дочерний узел 5 1 9 Да
setUserData(key,data,handler) Ассоциирует объект с ключем в узле Нет Да
SAX парсер

Альтернативным интерфейсом для обработки XML документов является SAX.

SAX (Simple API for XML) - прикладной программный интерфейс для парсера с последовательным доступом к XML. Этот интерфейс предоставляет механизм чтения данных из XML документа.

SAX парсер является поточным и управляемым событиями. Задачей пользователя SAX API заключается в описании методов, вызываемых событиями, возникающими при анализе документа.

Такими событиями могут быть следующие:

  • текстовый узел;
  • узел элемента XML ;
  • инструкция обработки XML ;
  • комментарий XML.

События вызываются появлением как открывающего тэга, так и закрывающего тэга любого из этих элементов документа. Атрибут XML также рассматривается как событие.

Анализ документа является однонаправленным (т.е. без возвратов по дереву).

В отличие от DOM формальной спецификации для SAX не существует. В качестве нормативной рассматривается Java реализация SAX.

Следует отметить следующие достоинства и недостатки SAX.

Достоинства:

  • Затраты памяти существенно меньше (зависит от максимальной глубины дерева документа и количества атрибутов в узле элемента), чем в случае DOM (требуется хранить в памяти все дерево документа).
  • Скорость работы выше за счет сокращения затрат времени на выделение памяти для элементов дерева в случае DOM.
  • Потоковое чтение данных с диска в случае DOM невозможно. Если для размещения всего документа в памяти недостаточно места, то использование SAX является безальтернативным.

Недостатки:

  • Процедура проверки правильности предполагает доступ ко всему документу одновременно.
  • Это также требуется и в случае XSLT преобразования.
Структура и представление XML документа

Если загрузить "чистый" XML документ в веб-браузер, то можно будет увидеть древовидную структуру этого документа:

 Вид XML документа в веб-браузере

Рис. 10.1. Вид XML документа в веб-браузере

В этом как раз и заключается главное отличие между XML и HTML, а именно разделение структуры документа и его представления в браузере. Конкретный вид XML документа описывается отдельно с помощью CSS или XSL.

CSS и XSL - принципиально разные технологии, имеющие лишь частичное пересечение областей применения. CSS -форматирование применяется к HTML -документу браузером на клиентской стороне, а XSL -преобразование выполняется, как правило, на сервере, после чего результат отправляется браузеру клиента. XSL базируется на XML, благодаря чему XSL более гибок и универсален. У разработчиков имеется возможность использовать средства контроля за корректностью составления стилевых списков (используя схемы XML ).

С помощью XSL можно преобразовать XML -документ в формат HTML, WML, RTF, PDF, SQL, SWF, а так же в другой XML и XSL документ. XSL указывает как будет оформлен документ, где и каким образом должны размещаться данные.

Cпецификация XSL состоит из трех частей:

  • XSLT (XSL Transformations) , язык для преобразования XML ;
  • XPath - язык путей и выражений, используемый в XSLT для доступа к отдельным частям XML -документа;
  • XSL-FO (XSL Formatting Objects) , язык для верстки XML.

Наиболее распространенным механизмом XSLT преобразований для систем работающих на платформе Microsoft Windows является MSXML ; для систем на основе GNU - xsltproc.

Для того, чтобы обработать XML документ c помощью XSL, необходимо в XML документе написать следующую инструкцию:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="my-style.xsl"?> 
<root> 
	< !-- ... -- > 
</root>
Объявление XSL

Корневым элементом, указывающим на то, что документ является XSL таблицей стилей является следующий:

<xsl:stylesheet>

или полностью равноценный ему

<xsl:transform>

В соответствии с W3C XSLT Рекомендацией корректный способ объявления таблицы стилей XSL выглядит следующим образом:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

или

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Для того чтобы XSLT элементы, атрибуты и характеристики были доступны в начале документа необходимо объявить пространство имен XSLT:

xmlns:xsl=http://www.w3.org/1999/XSL/Transform

указывающее на официальное пространство имен W3C XSLT. При этом также следует указать атрибут version="1.0".

Реализация преобразования с помощью сценария.

XSLT преобразование из XML в XHTML выполняемое самими браузерами на основе таблицы стилей XSL является не всегда желательным, поскольку может поддерживаться не всеми браузерами.

Использование в качестве альтернативы JavaScript позволяет:

  • Выполнять проверку типа браузера
  • Использовать подходящие таблицы стилей в зависимости от типа браузера и потребностей пользователей.

Другим решением для браузеров, не поддерживающих XSLT является преобразование XML в XHTML на веб-сервере.