Все узлы являются экземплярами подклассов класса 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).
Читать дальше
Конец ознакомительного отрывка
Купить книгу