ПБД (9) - Лекция №4 - XML
Содержание
Модель полуструктурированных данных
Полуструктурированные данные используются для:
- информация о документе (XML);
- интеграция информации:
- нет фиксированной схемы;
- данные хранят информацию о своей структуре;
- структура изменчива, меняется со временем или по необходимости.
Полуструктурированный граф:
- корень - вся БД;
- конечные вершины - хранимые атомарные атрибуты;
- промежуточные вершины - объекты (структура данных);
- дуги - смысл, назначение, связь данных.
Граф по нашему примеру можно построить такой:
Для упрощения показаны лишь некоторые сущности, атрибуты и связи.
XML
XML (Extensible Markup Language) - расширяемый язык данных, используется для линейной записи полуструктурированных данных. И ещё для разметки текста. Чтобы не рисовать тот граф, можно описать всё в XML.
XML бывает двух видов:
- формально-правильный (well-formed);
- действительный (valid).
Оба чувствительны к регистру.
Формально-правильный XML
Например:
<?xml version="1.0" encoding="UTF8" standalone="yes"?> <sometag></sometag> <!-- парный тег --> <sometag /> <!-- тоже парный, но не требует закрытия>
Требования к XML:
- только один корневой элемент;
- строгая иерархия вложенности;
- все теги (которые парные) должны быть закрыты.
Наш пример:
<?xml version="1.0" encoding="UTF8" standalone="yes"?> <db> <film idf="f1" toact="a1" tos="s1"> <name>Bridge to Terabithia</name> <year>2007</year> <len>96</len> <type>must see</type> </film> <film idf="f2" toact="a2"> <name>The Matrix</name> <year>1999</year> <len>136</len> <type>bloody have to see dat</type> </film> <actor ida="a1" tof="f1"> <fio> <family>Robb</family> <fname>Anna</fname> <secname>Sophia</secname> </fio> </actor> <actor ida="a2" tof="f2"> <fio> <family>Reeves</family> <fname>Keanu</fname> <secname>Charles</secname> </fio> </actor> <studio ids="s1" tof="f1"> <name>Walden Media</name> </studio> </db>
Действительный XML
DTD (Document Type Definition) - определение типов документов. Содержит определённый набор допустимых тегов, атрибутов, правил вложения.
<!ELEMENT название содержимое>
Элементы:
- $+$ - должен быть хотя бы один или больше;
- $*$ - может быть ни одного или сколько угодно;
- $?$ - строго один или ни одного.
А если ничего нет, то строго один.
Наш пример:
<!ELEMENT db (film*, actor*, stud+)> <!ELEMENT film (name, year, len?, type?)> <!ELEMENT name (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT len (#PCDATA)> <!ELEMENT type (#PCDATA)>
Атрибуты:
<!ATLIST элемент атрибут1 тип параметры атрибут2 тип параметры атрибут3 тип параметры >
Типы атрибутов:
- CDATA - текст;
- ID - идентификатор;
- IDREF - ссылка;
- IDREFS - ссылки (через пробел);
- NMTOKEN - лексема;
- NMTOKENS - лексемы.
Параметры:
- #REQUIRED - обязательный;
- #IMPLIED - необязательной;
- #FIXED - фиксированный.
Пример:
<!ATTLIST film idf ID #REQUIRED toact IDREFS tos IDREF> <!ATTLIST actor ida ID tof IDREFS> <!ATTLIST studio ias ID tof IDREFS>
Также можно указать значение по умолчанию и перечень допустимых значений:
<!ATTLIST p align (left|center|right) "left">
Сочетание обоих видов
Они могут сочетаться.
Первый вариант
С непосредственной вставкой:
<?xml version="1.0" encoding="UTF8" standalone="yes"?> <!DOCTYPE db [ <!ELEMENT ...> <!ATTLIST ...> ]> <db> ... </db>
Второй вариант
С включением внешнего файла:
<?xml version="1.0" encoding="UTF8" standalone="no"?> <!DOCTYPE db SYSTEM "file.dtd"> <db> </db>
И сам этот file.dtd:
<!ELEMENT ...> <!ATTLIST ...>
XSD
XSD (XML Schema Definition) - это схемы XML.
Их свойства:
- добавлена работа с нормальными типами данных (int, bool, string и остальные);
- позволяют накладывать ограничения (год не может быть меньше 1500);
- сами являются XML-документами;
- позволяют использовать пространства имён.