DTD

advertisement
XML
eXtensible Markup
Language
1. Определение типа
документов (DTD)
2. Язык навигации внутри
XML-документа (XPath)
Определение типа (DTD)
 DTD
— Document Type Definition
 Задаёт возможную структуру для
некоторого типа XML-документов
(т. е. задаёт один возможный язык)
– как могут называться элементы
– как они могут друг в друга
вкладываться
– какие у каждого элемента могут быть
атрибуты
Скачиваем XML-редактор
 www.firstobject.com
 (справа
— версия 2.2.5, exe в
архиве zip)
Простой XML-документ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE booklist SYSTEM "books-1.dtd">
<booklist>
<book>
<author>А.А. Зализняк</author>
<title>Древнерусские энклитики</title>
<city>Москва</city>
<year>2008</year>
</book>
<book>
<author>J.K. Rowling</author>
<title>Harry Potter and the Secret Chamber</title>
<city>New York</city>
<year>2005</year>
</book>
</booklist>
Определение типа (DTD)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT booklist (book)*>
<!ELEMENT book (author, title, city, year)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT year (#PCDATA)>
Определение типа (DTD)
Содержимое элементов
<!ELEMENT book (author, title, city, year)>
СПИСОК ДОЧЕРНИХ ЭЛЕМЕНТОВ
author, title — последовательность
author|title — выбор (или — или)
EMPTY — пустой элемент
ANY — любая комбинация допустимых типов
#PCDATA — Parsed Character Data
Определение типа (DTD)
Количество повторений элемента
<!ELEMENT booklist (book)*>
book — 1, обязательный
book? — 1, необязательный (0 или 1)
book+ — 1 или больше (сколько угодно)
book* — 0 или больше (сколько угодно)
Добавим в book необязательный
элемент publisher? (издательство)
Определение типа (DTD)
Добавляем атрибуты
В документ:
<book lang="rus" bookid="AAZ01">
<author>А.А. Зализняк</author>
…
</book>
имя атрибута
В DTD:
<!ATTLIST book
lang CDATA #IMPLIED
bookid ID #REQUIRED>
Определение типа (DTD)
Типы атрибутов
<!ATTLIST book
lang CDATA #IMPLIED
bookid ID #REQUIRED
genre (fiction|nonfiction) #IMPLIED>
CDATA — простой текст (Character data)
ID — идентификатор
(значение не может повторяться)
IDREF — ссылка на идентификатор другого
элемента
(..|..) — одно из перечисленных значений
Определение типа (DTD)
Значения атрибутов по умолчанию
<!ATTLIST book
lang CDATA "eng"
bookid ID #REQUIRED
genre (fiction|nonfiction) #IMPLIED>
либо заданное значение, либо:
#IMPLIED — атрибут необязателен
#REQUIRED — атрибут обязательный
#FIXED значение — значение неизменно
XPath — навигация внутри
документа

Основные понятия:
– набор узлов (nodeset)
Выражение на XPath (путь)
описывает набор узлов в документе
– элементы
– атрибуты
– корень документа (корневой элемент)
– абсолютный / относительный путь
– родитель-дети
– сиблинги (узлы одного уровня)
– предки-потомки
XPath — навигация внутри
документа

Простые выражения
 путь от корня (абсолютный) начинается с /
 фрагмент пути между двумя / — шаг по дереву
(по умолчанию — от корня к листьям)
 в результат входят все узлы, подходящие под
описанный путь

/booklist ; /booklist/book/author
 путь без / (относительный) считается не от корня, а
от текущей позиции


book/author
//

 @

любое количество шагов
//book ; //author ; /booklist//author
атрибут
//book/@lang
XPath — навигация внутри
документа
 Простые
выражения
 . (точка)
 .. (две точки)
../title
 *
Текущий узел
Родительский узел
(путь от book/author к book/title)
Любой узел без указания имени
/booklist/*
/booklist/*/*
//book/@*
все дети
все внуки
все атрибуты
XPath — навигация внутри
документа
 Выражения
с условием (предикатом)
 условие на порядковый номер узла в дереве
book[2] ; book[last()] ; book[position()<3]
 условие на значение элементов
(путь отсчитывается от текущей позиции)
book[city=“Москва”]
book[price>250]
 условие на значение атрибутов
//book[@lang=“rus”]/title
 Условие […] применяется к тому узлу, после
которого стоит
book[1]/author vs. book/author[1]
Download