- •Предназначение xml
- •Язык xml решает проблемы
- •Создание xml-документов
- •Отображение xml-документов
- •Некоторые базовые правила xml
- •Отображение xml-документа
- •Отобразите xml-документ без таблицы стиля
- •Основной критерий для валидного документа
- •Форма записи dtd
- •Создание dtd
- •Объявление типов элементов
- •Форма записи объявления типа элемента
- •Описание содержимого элемента
- •Задание дочернего содержимого элемента
- •Форма записи объявления списка атрибутов
- •Тип атрибута
- •Задание маркерного типа
- •Лабораторная работа 2 Пространства имен xml
- •Теоретическая часть Анатомия элемента
- •Вставка элементов html в xml-документы и использование пространства имен
- •Подготовка:
- •Ситуация:
- •Задание:
- •Примечание:
- •Решение:
- •Теория Вставка элементов html в xml-документы и использование пространства имен
- •Использование одного шаблона xsl
- •Предназначение xml
- •Язык xml решает проблемы
- •Создание xml-документов
- •Отображение xml-документов
- •Некоторые базовые правила xml
- •Отображение xml-документа
- •Отобразите xml-документ без таблицы стиля
- •Основной критерий для валидного документа
- •Форма записи dtd
- •Создание dtd
- •Объявление типов элементов
- •Форма записи объявления типа элемента
- •Описание содержимого элемента
- •Задание дочернего содержимого элемента
- •Форма записи объявления списка атрибутов
- •Тип атрибута
- •Задание маркерного типа
- •Лабораторная работа 2 Пространства имен xml
- •Теоретическая часть Анатомия элемента
- •Вставка элементов html в xml-документы и использование пространства имен
- •Подготовка:
- •Ситуация:
- •Задание:
- •Примечание:
- •Решение:
- •Теория Вставка элементов html в xml-документы и использование пространства имен
- •Использование одного шаблона xsl
- •Предназначение xml
- •Язык xml решает проблемы
- •Создание xml-документов
- •Отображение xml-документов
- •Некоторые базовые правила xml
- •Отображение xml-документа
- •Отобразите xml-документ без таблицы стиля
- •Основной критерий для валидного документа
- •Форма записи dtd
- •Создание dtd
- •Объявление типов элементов
- •Форма записи объявления типа элемента
- •Описание содержимого элемента
- •Задание дочернего содержимого элемента
- •Форма записи объявления списка атрибутов
- •Тип атрибута
- •Задание маркерного типа
- •Лабораторная работа 2 Пространства имен xml
- •Теоретическая часть Анатомия элемента
- •Вставка элементов html в xml-документы и использование пространства имен
- •Подготовка:
- •Ситуация:
- •Задание:
- •Примечание:
- •Решение:
- •Теория Вставка элементов html в xml-документы и использование пространства имен
- •Использование одного шаблона xsl
- •Лабораторная работа 5 Вывод документа xml в Internet Explorer с использованием dom xml
- •3.2. Реализация dom xml в Internet Explorer
- •3.3. Фундаментальные типы узлов dom для xml
- •3.3.1. Узлы NodeList и NamedNodeMap
- •3.3.2. Узел Node
- •3.3.3. Узел Document
- •3.3.4. Узел DocumentFragment
- •3.3.5. Узел Element
- •3.3.6. Узел Attr
- •3.3.7. Узел Comment
- •3.3.8. Узел Text
- •4. Порядок выполнения работы
- •Вариант 2-01
- •Вариант 2-02
- •Вариант 2-03
- •Вариант 2-04
- •Вариант 2-05
- •Вариант 2-06
- •Вариант 2-07
- •Вариант 2-08
- •Вариант 2-09
- •Вариант 2-10
- •Вариант 2-11
- •Вариант 2-12
- •Вариант 2-13
- •Вариант 2-14
- •Вариант 2-15
- •Вариант 2-16
- •Вариант 2-17
- •Вариант 2-18
- •Вариант 2-19
- •Вариант 2-20
- •Вариант 2-21
- •Вариант 2-22
- •Вариант 2-23
- •Вариант 2-24
- •Вариант 2-25
- •Вариант 2-26
- •Вариант 2-27
- •Вариант 2-28
- •Вариант 2-29
- •Вариант 2-30
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
Задание маркерного типа
Как и любое значение атрибута, значение, которое вы присваиваете маркерному типу атрибута, должно представлять собой строку в кавычках, отвечающую общим правилам.
Кроме того, значение должно отвечать определенному ограничению, которое вы задаете в описании атрибута с помощью соответствующего ключевого слова. Например, в приведенном ниже XML-документе для атрибута StockCode определен маркерный тип с использованием ключевого слова ID. ( ID – это только одно из ключевых слов, которые вы можете использовать для объявления маркерного типа.) Это ключевое слово означает, что для каждого элемента атрибуту должно быть присвоено уникальное значение. (Например, присвоение товарного кода "S021" двум элементам ITEM не допускается.)
<?xml version="1.0" encoding="windows-1251" ?>
<!DOCTYPE INVENTORY
[
<!ELEMENT INVENTORY (ITEM*)>
<!ELEMENT ITEM (#PCDATA)>
<!ATTLIST ITEM StockCode ID #REQUIRED>
]
>
<INVENTORY>
<!-- Каждый элемент ITEM должен иметь свое значение кода StockCode -->
<ITEM StockCode="S021">Peach Tea Pot</ITEM>
<ITEM StockCode="S034">Electric Coffee Grinder</ITEM>
<ITEM StockCode="S086">Candy Thermometer</ITEM>
</INVENTORY>
Ниже приведен полный список ключевых слов, которые вы можете использовать в определении маркерных типов атрибутов, и ограничения, которые они накладывают на значения атрибутов.
ID. Для каждого элемента атрибут должен иметь уникальное значение. Значение должно начинаться с буквы или символа подчеркивания (_), за которыми могут идти или не идти другие буквы, цифры, символы точки (.), тире (–) или символы подчеркивания. Данный тип элемента может иметь только один атрибут типа ID, а в объявлении значения атрибута по умолчанию должно фигурировать #REQUIRED или #IMPLIED (см. в разделе "Объявление значения по умолчанию" далее в этой лекции). Пример этого типа атрибута содержится в приведенном выше документе INVENTORY.
IDREF. Значение атрибута должно совпадать со значением атрибута элемента типа ID внутри документа. Другими словами, этот тип атрибута является ссылкой на уникальный идентификатор другого атрибута. Например, вы можете добавить атрибут IDREF с именем GoesWith к элементу ITEM:
<!ELEMENT ITEM (#PCDATA)>
<!ATTLIST ITEM
StockCode ID #REQUIRED GoesWith IDREF #IMPLIED>
Далее вы можете использовать этот атрибут для ссылки на другой элемент ITEM:
<ITEM StockCode="S034">Electric Coffee Grinder</ITEM>
<ITEM StockCode="S047" GoesWith="S034">
Coffee Grinder Brush
</ITEM>
IDREFS. Этот тип атрибута похож на тип IDREF, но при этом значение может включать ссылки на несколько идентификаторов – разделенных пробелами – внутри строки в кавычках. Например, если вы назначите атрибуту GoesWith тип IDREFS таким образом:
<!ATTLIST ITEM StockCode ID #REQUIRED GoesWith IDREFS #IMPLIED>
то можете использовать его на ссылки на несколько других элементов:
<ITEM StockCode="S034">Electric Coffee Grinder</ITEM>
<ITEM StockCode="S039">
1 pound Breakfast Blend Coffee Beans
</ITEM>
<ITEM StockCode="S047" GoesWith="S034 S039">
Coffee Grinder Brush
</ITEM>
ENTITY. Значение атрибута должно совпадать с именем примитива, объявленного в DTD. Этот примитив не обрабатывается синтаксическим анализатором и ссылается на внешний файл, обычно содержащий не XML-данные.
Например, в DTD вы объявляете элемент с именем IMAGE, представляющий графическое изображение, и атрибут типа ENTITY с именем Source, указывающий на источник графических данных:
<!ELEMENT IMAGE EMPTY>
<!ATTLIST IMAGE Source ENTITY #REQUIRED>
Если вы объявили не анализируемый примитив с именем Logo, который содержит графические данные для изображения, вы можете присвоить этот примитив атрибуту Source элемента IMAGE в документе следующим образом:
<IMAGE Source="Logo" />
ENTITIES. Этот тип атрибута похож на тип ENTITY, за исключением того, что значение может содержать имена нескольких не анализируемых примитивов – разделенных пробелами – внутри строки в кавычках. Например, если вы назначили атрибуту Source тип ENTITIES следующим образом:
<!ELEMENT IMAGE EMPTY>
<!ATTLIST IMAGE Source ENTITIES #REQUIRED>
то сможете использовать его для ссылки на несколько не анализируемых примитивов (допустим, примитивов, содержащих графические данные в альтернативных форматах), например, так:
<IMAGE Source="LogoGif LogoBmp" />
(Здесь подразумевается, что LogoGif и LogoBmp – имена не анализируемых примитивов, которые были объявлены в DTD с помощью приемов)
NMTOKEN. Это значение есть элементарное имя (name token), представляющее собой имя, состоящее из одной или более букв, цифр, точек (.), тире (–) или символов подчеркивания (_). Элементарное имя может также содержать двоеточие (:), но не на первом месте. Например, если вы назначите атрибуту ISBN тип NMTOKEN следующим образом:
<!ELEMENT BOOK (#PCDATA)>
<!ATTLIST BOOK ISBN NMTOKEN #REQUIRED>
то можете присвоить ему значение, начинающееся с цифры (цифры в качестве первых символов допустимы для типов NMTOKEN и NMTOKENS, но не для любых других маркерных типов):
<BOOK ISBN="9-99999-999-9">The Portrait of a Lady</BOOK>
NMTOKENS. Этот тип атрибута похож на тип NMTOKEN, но значение может содержать несколько элементарных имен – разделенных пробелами – внутри строки в кавычках. Например, если вы назначите атрибуту Codes тип NMTOKENS следующим образом:
<!ELEMENT SHIRT (#PCDATA)>
<!ATTLIST SHIRT Codes NMTOKENS #REQUIRED>
вы можете присвоить ему несколько значений в виде элементарных имен:
<SHIRT Codes="38 21 97">long sleeve Henley</SHIRT>
Ситуация:
Вам необходимо разработать стандарт хранения адресных книг в формате XML. В настоящее время информация хранится в виде, аналогичном представленном в трех таблицах ниже:
Номер |
1 |
Фамилия |
Иванов |
Имя |
Иван |
Отчество |
Иванович |
Телефон |
1111111 (гор.) 8-911-1111111 (моб.) |
Номер |
2 |
Фамилия |
Петров |
Имя |
Петр |
Отчество |
Петрович |
Телефон |
2222222 (гор.) 8-911-2222222 (моб.) |
Номер |
3 |
Фамилия |
Сидорова |
Имя |
Светлана |
Отчество |
Степановна |
Телефон |
3333333 (гор.) 8-911-3333333 (моб.) |
Задание:
1) создайте внешнее определение типа документа (файл pbml.dtd), которое определяло бы XML-совместимый формат для хранения данных, аналогичных представленных в таблицах. Затем на основе созданного вами DTD создайте файл PhoneBook.xml, который должен содержать в себе информацию из этих трех таблиц, При этом обеспечьте выполнение следующих условий:
корневым элементом телефонной книги должен быть элемент Phonebook
каждая запись должна быть представлена элементом Record;
у каждого элемента Record должен быть обязательный атрибут Number (с информацией о номере записи);
в каждый элемент Record должны быть вложены обязательные элементы LastName (с информацией о фамилии), FirstName (с информацией об имени) и может быть вложен необязательный элемент Initials (с информацией об отчестве). Каждый элемент LastName, FirstName, Initials может быть вложен в элемент Record только один раз;
в каждый элемент Record могут быть вложены необязательные элементы PhoneNumber. Эти элементы могут быть вложены в элемент Record неограниченное количество раз;
для каждого элемента PhoneNumber должен быть предусмотрен обязательный атрибут PhoneType с двумя допустимыми значениями: L - для городских телефонов и M - для мобильных телефонов.
2) проверьте синтаксическую и логическую правильность ваших документов при помощи Open XML Editor Version 1.4 (эту утилиту можно установить с компакт-диска);
3) создайте на диске C: каталог Lab1 и сохраните в нем окончательные варианты наших файлов pbml.dtd и Phonebook.xml (они потребуются нам на следующих лабораторных).
Примечание
Постарайтесь выполнить эту лабораторную работу самостоятельно, не заглядывая в ответ. В случае необходимости используйте справочную документацию.
Решение:
К пункту 1:
Итоговый код файла pbml.dtd может быть таким:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<!ELEMENT Phonebook (Record+)>
<!ELEMENT Record (LastName, FirstName, Initials?, Phonenumber*)>
<!ATTLIST Record
Number CDATA #REQUIRED>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT Initials (#PCDATA)>
<!ELEMENT Phonenumber (#PCDATA) >
<!ATTLIST Phonenumber
PhoneType (L|M) #REQUIRED>
Итоговый код файла Phonebook.xml может быть таким:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<!DOCTYPE Phonebook SYSTEM "pbml.dtd">
<Phonebook>
<Record Number="1">
<LastName>Иванов</LastName>
<FirstName>Иван</FirstName>
<Initials>Иванович</Initials>
<Phonenumber PhoneType="L">1111111</Phonenumber>
<Phonenumber PhoneType="M">8-911-1111111</Phonenumber>
</Record>
<Record Number="2">
<LastName>Петров</LastName>
<FirstName>Петр</FirstName>
<Initials>Петрович</Initials>
<Phonenumber PhoneType="L">2222222</Phonenumber>
<Phonenumber PhoneType="M">8-911-2222222</Phonenumber>
</Record>
<Record Number="3">
<LastName>Сидорова</LastName>
<FirstName>Светлана</FirstName>
<Initials>Степановна</Initials>
<Phonenumber PhoneType="L">3333333</Phonenumber>
<Phonenumber PhoneType="M">8-911-3333333</Phonenumber>
</Record>
</Phonebook>
К пункту 2: проверка правильности файлов в Open XML Editor.
1) Поместите файлы pbml.dtd и Phonebook.xml в один каталог (например, C:\Lab1).
2) После установки Open XML Editor откройте в нем файл Phonebook.xml (при помощи меню File -> Edit).
3) Выполните проверку при помощи команды Check Validity из контекстного меню или меню Tools.
