Все узлы являются экземплярами подклассов класса Node
. Они могут быть следующих типов:
Название |
Описание |
Метод для создания |
ELEMENT_NODE |
Элемент |
createElement(tagname) |
ATTRIBUTE_NODE |
Атрибут |
createAttribute(name) |
TEXT_NODE |
Текстовый узел |
createTextNode(data) |
CDATA_SECTION_NODE |
Раздел |
CDATA |
ENTITY_REFERENCE_NODE |
Ссылка на сущность |
|
ENTITY_NODE |
Сущность |
|
PROCESSING_INSTRUCTION_NODE |
Инструкция по обработке |
createProcessingInstruction(target, data) |
COMMENT_NODE |
Комментарий |
createComment(comment) |
DOCUMENT_NODE |
Документ |
|
DOCUMENT_TYPE_NODE |
Тип документа |
|
DOCUMENT_FRAGMENT_NODE |
Фрагмент документа |
|
NOTATION_NODE |
Нотация |
|
В DOM документ является деревом, в узлах которого стоят объекты нескольких возможных типов. Узлы могут иметь атрибуты или данные. Доступ к узлам можно осуществлять через атрибуты вроде childNodes
(дочерние узлы), firstChild
(первый дочерний узел), lastChild
(последний дочерний узел), parentNode
(родитель), nextSibling
(следующий брат), previousSibling
(предыдущий брат).
Выше уже говорилось о методе appendChild()
. К нему можно добавить методы insertBefore(newChild, refChild)
(вставить newChild
до refChild
), removeChild(oldChild)
(удалить дочерний узел), replaceChild(newChild, oldChild)
(заметить oldChild
на newChild
). Есть еще метод cloneNode(deep)
, который клонирует узел (вместе с дочерними узлами, если задан deep=1
).
Узел типа ELEMENT_NODE
, помимо перечисленных методов «просто» узла, имеет много других методов. Вот основные из них:
tagName
Имя типа элемента.
getElementsByTagName(tagname)
Получает элементы с указанным именем tagname
среди всех потомков данного элемента.
getAttribute(attname)
Получить значение атрибута с именем attname
.
getAttributeNode(attrname)
Возвращает атрибут с именем attrname
в виде объекта–узла.
removeAttribute(attname)
Удалить атрибут с именем attname
.
removeAttributeNode(oldAttr)
Удалить атрибут oldAttr
(задан в виде объекта–узла).
setAttribute(attname, value)
Устанавливает значение атрибута attname
равным строке value
.
setAttributeNode(newAttr)
Добавляет новый узел–атрибут к элементу. Старый атрибут заменяется, если имеет то же имя.
Здесь стоит заметить, что атрибуты в рамках элемента повторяться не должны. Их порядок также не важен с точки зрения информационной модели XML.
В качестве упражнения предлагается составить функцию, которая будет вычислять значение выражения, заданного в XML–представлении.
Еще одной интересной особенностью XML, о которой нельзя не упомянуть, являются пространства имен. Они позволяют составлять XML–документы из кусков различных схем. Например, таким образом в XML–документ можно включить кусок HTML, указав во всех элементах HTML принадлежность особому пространству имен.
Следующий пример XML–кода показывает синтаксис пространств имен (файл foaf.rdf
):
xmlns:dc="http://http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf–schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22–rdf–syntax–ns#">
donna
Donna Fales
Примечание:
Пример позаимствован из пакета cwm
, созданного командой разработчиков во главе с Тимом Бернерс–Ли, создателем технологии WWW. Кстати, cwm
тоже написан на Python. Пакет cwm
служит обработчиком данных общего назначения для семантической сети — новой идеи, продвигаемой Тимом Бернерс–Ли. Коротко суть идеи состоит в том, чтобы сделать современный «веб» много полезнее, формализовав знания в виде распределенной базы XML–документов, по аналогии с тем как WWW представляет собой распределенную базу документов. Отличие глобальной семантической сети от WWW в том, что она даст машинам возможность обрабатывать знания, делая логические выводы на основании заложенной в документах информации.
Названия пространств имен следуют в виде префиксов к названиям элементов. Эти названия — не просто имена. Они соответствуют идентификаторам, которые должны быть заданы в виде URI(Universal Resource Locator, универсальный указатель ресурса). В примере выше упоминаются пять пространств имен ( xmlns
, dc
, rdfs
, foaf
и rdf
), из которых только первое не требует объявления, так как является встроенным. Из них реально использованы только три: ( xmlns
, foaf
и rdf
).
Читать дальше
Конец ознакомительного отрывка
Купить книгу