
- •Часть №1
- •Лабораторная работа №1 Структура xml документа
- •Лабораторная работа №2 Пространство имен и сущности
- •Лабораторная работа №3 Комментарии, разделы cdata,инструкции по обработке
- •Часть№2
- •Лабораторная работа №1 Синтаксис dtd
- •Лабораторная работа №2 Дочернее содержимое элемента, задание смешанного содержимого
- •Лабораторная работа №3 Атрибуты
- •Лабораторная работа №4 Подмножества dtd
- •Лабораторная работа №5 Валидность документа dtd
- •Валидность документа
- •Требования корректности формирования и валидности
- •Лабораторная работа №6 Общие внутренние и внешние примитивы dtd.
- •Xод работы:
- •Лабораторная работа №7 Параметрические внутренние и внешние примитивы
- •Xод работы:
- •Лабораторная работа №8 Ссылки на примитивы
- •Xод работы:
- •Использование предварительно определенных примитивов
- •Создайте xml-документ с использованием предварительно определенных примитивов и ссылками на примитивы на любую тематаку.
- •Отобразите документ в браузере Часть №3
- •Изучить встроенные простые типы данных xmlShema.
- •Xод работы:
- •Типы long, int, short и byte
- •Отобразите документ в браузере Лабораторная работа №2 Определение простых типов данных и пространство имен
- •Сужение
- •Не более чем из пяти целых чисел следующим образом:
- •Создайте xmlShema документ с простыми типами данных и пространством имен имен, для этого сделайте следующие:
- •Лабораторная работа №3 Объявление элементов и их атрибутов
- •Создание группы элементов и атрибутов в сложном типе
- •Лабораторная работа №5 Определение типа со сложным телом,
- •Лабораторная работа №6 Аннотирование схем, включение файлов схемы в другую схему
- •Часть №4
- •Лабораторная работа №1 Входной и выходной документы, инструкция обработки и корневой элемент
- •Лабораторная работа №2 Описание структуры с помощью шаблонов
- •Лабораторная работа №3 Встроенные шаблонные правила
- •Лабораторная работа №4 Модульная организация преобразования
- •Лабораторная работа №5 Инструкции управления
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Часть №5
- •Лабораторная работа №1 Интерфейс программы и создание xsd документа
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Xslt трансформация
- •Лабораторная работа №4 Создание документа dtd и его применение к xml.Конвертирование dtd в Shema.
- •Напечатайте следующий тест:
Лабораторная работа №3 Атрибуты
Цель работы:
Изучить атрибуты, используемые в DTD
Ход работы:
Объявление атрибутов
Объявление списка атрибутов имеет следующую общую форму:
<!ATTLIST Имя ОпрАтр>
Допустим, вы объявили тип элемента с именем FILM следующим образом:
<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR) )>
Вот пример объявления списка атрибутов, которое описывает два атрибута – Class и Year – для элемента FILM:
<!ATTLIST FILM Class CDATA "fictional" Year CDATA #REQUIRED>
На рисунке 2.4 представлены составные части этого объявления.
Рисунок 2.4
Вы можете присвоить атрибуту Class любую строку в кавычках (ключевое слово CDATA); если вы опускаете атрибут для определенного элемента, ему будет автоматически присвоено значение по умолчанию "fictional". Вы можете присвоить атрибуту Year любую строку в кавычках; этот атрибут, однако, должен быть обязательно присвоен для каждого элемента FILM (ключевое слово #REQUIRED), поэтому он не имеет значения по умолчанию.
Следующий полный XML-документ включает это объявление списка атрибутов, а также элемент FILM:
<?xml version="1.0" encoding="windows-1251" ?>
<!DOCTYPE FILM
[
<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR) )>
<!ATTLIST FILM Class CDATA "fictional" Year CDATA
#REQUIRED>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT STAR (#PCDATA)>
<!ELEMENT NARRATOR (#PCDATA)>
<!ELEMENT INSTRUCTOR (#PCDATA)>
]
>
<FILM Year="1948">
<TITLE>The Morning After</TITLE>
<STAR>Morgan Attenbury</STAR>
</FILM>
Создайте XML –документ, содержащий смешанные данные и атрибут, для этого сделайте следующее:
Откройте новый файл в вашем текстовом редакторе и введите текст XML-документа, листинг которого представлен ниже
Листинг 2.2
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE Musiclibrary
[
<!ELEMENT Musiclibrary (#PCDATA | Artist | Year | Genre)*>
<!ATTLIST Musiclibrary Country CDATA "fictional" City CDATA #REQUIRED>
<!ELEMENT Artist (#PCDATA)>
<!ELEMENT Year (#PCDATA)>
<!ELEMENT Genre (#PCDATA)>
]
>
<Musiclibrary Country="Germany" City="Bremen" >
Lore of Nen
<Artist>Elane</Artist>
<Genre>Folk-Rock</Genre>
<Year>2006</Year>
</Musiclibrary>
Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя AtrShmeshsod.xml.
Откройте файл в вашем браузере и вас ложно получится то что представлено на
рисунке 2.5
Рисунок 2.5
Типы атрибута
Тип атрибута является вторым необходимым компонентом в определении атрибута. Он задает вид значений, которые вы можете присваивать атрибуту внутри документа, как показано на рисунке 2.6
Рисунок 2.6
Вы можете задавать тип атрибута тремя различными способами.
Строковый тип. Строковый тип атрибута может быть назначен любой строке в кавычках (литералу), которая отвечает общим правилам. Вы должны объявить строковый тип атрибута с использованием ключевого слова CDATA, как это сделано для определения атрибута Class в следующем примере:
<!ATTLIST FILM Class CDATA "fictional">
Маркерный тип. Значения, которые вы можете присваивать атрибуту маркерного типа, имеют ряд ограничений
Как и любое значение атрибута, значение, которое вы присваиваете маркерному типу атрибута, должно представлять собой строку в кавычках.
<?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 The</ITEM>
</INVENTORY>
Ниже приведен полный список ключевых слов, которые вы можете использовать в определении маркерных типов атрибутов, и ограничения, которые они накладывают на значения атрибутов
ID. Для каждого элемента атрибут должен иметь уникальное значение. Значение должно начинаться с буквы или символа подчеркивания (_), за которыми могут идти или не идти другие буквы, цифры, символы точки (.), тире (–) или символы подчеркивания. Данный тип элемента может иметь только один атрибут типа ID, а в объявлении значения атрибута по умолчанию должно фигурировать #REQUIRED или #IMPLIED.
IDREF. Значение атрибута должно совпадать со значением атрибута элемента типа ID внутри документа. Другими словами, этот тип атрибута является ссылкой на уникальный идентификатор другого атрибута. Например, вы можете добавить атрибут IDREF с именем GoesWith к элементу ITEM:
<!ELEMENT ITEM (#PCDATA)>
<!ATTLIST ITEM
StockCode ID #REQUIRED GoesWith IDREF #IMPLIED>
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-данные.
ENTITIES. Этот тип атрибута похож на тип ENTITY, за исключением того, что значение может содержать имена нескольких не анализируемых примитивов – разделенных пробелами – внутри строки в кавычках. Например, если вы назначили атрибуту Source тип ENTITIES следующим образом:
<!ELEMENT IMAGE EMPTY>
<!ATTLIST IMAGE Source ENTITIES #REQUIRED>
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>
Например, в DTD вы объявляете элемент с именем IMAGE, представляющий графическое изображение, и атрибут типа ENTITY с именем Source, указывающий на источник графических данных:
<!ELEMENT IMAGE EMPTY>
<!ATTLIST IMAGE Source ENTITY #REQUIRED>
Нумерованный тип. Для нумерованного типа атрибута вы можете присваивать одно значение или список определенных значений.
Формы записи:
Открывающая скобка, вслед за которой идет список элементарных имен, разделенных символами | , после чего следует закрывающая скобка. Напомним, что элементарное имя – это имя, состоящее из одной или нескольких букв, цифр, точек (.), тире (–) или символов подчеркивания (_), а также может включать одно двоеточие (:), но не на первом месте. Например, если вы хотите ограничить значения атрибута Class словами "fictional", "instructional" или "documentary", то можете определить этот атрибут как нумерованный тип следующим образом:
<!ATTLIST FILM
Class (fictional | instructional | documentary)
"fictional">
Вот законченный XML-документ, демонстрирующий использование атрибута Class:
<?xml version="1.0" encoding="windows-1251" ?>
<!DOCTYPE FILM
[
<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR) )>
<!ATTLIST FILM
Class (fictional | instructional | documentary) "fictional">
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT STAR (#PCDATA)>
<!ELEMENT NARRATOR (#PCDATA)>
<!ELEMENT INSTRUCTOR (#PCDATA)>
]
>
<FILM Class="instructional">
<TITLE>The Use and Care of XML</TITLE>
<NARRATOR>Michael Young</NARRATOR>
</FILM>
Ключевое слово NOTATION, за которым идет пробел, затем открывающая скобка, затем список имен нотаций, разделяемых символами, после чего следует закрывающая скобка. Каждое из этих имен должно точно соответствовать имени нотации, объявленному в DTD. Нотация описывает формат данных или идентифицирует программу, применяемую для обработки определенного формата.
Например, в вашем DTD объявлены нотации HTML, SGML и RTF. Тогда вы можете ограничить значения атрибута Format одним из этих имен нотаций с помощью следующего объявления:
<!ELEMENT EXAMPLE_DOCUMENT (#PCDATA)>
<!ATTLIST EXAMPLE_DOCUMENT
Format NOTATION (HTML | SGML | RTF) #REQUIRED>
Создайте XML –документ с маркерным типом атрибута NMTOKEN, для этого сделайте следующее:
Откройте новый файл в вашем текстовом редакторе и введите текст XML-документа, листинг которого представлен ниже:
Листинг 2.3
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE Musiclibrary
[
<!ELEMENT Musiclibrary (CD*)>
<!ELEMENT CD (#PCDATA)>
<!ATTLIST CD Year NMTOKEN #REQUIRED>
]
>
<Musiclibrary>
<CD Year="2008"> "The Silver Falls"</CD>
<CD Year="2006"> " Lore of Nen"</CD>
<CD Year="2004"> " The Fire Of Glenvore"</CD>
</Musiclibrary>
Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя AtrType.xml.
Откройте файл в вашем браузере и вас ложно получится то что представлено на
рисунке 2.7
Рисунок 2.7
Объявление значения атрибута по умолчанию
Объявление обязательности атрибута и его значения по умолчанию – это третий и последний обязательный компонент в определении атрибута. Оно задает, является ли атрибут обязательным, и если нет, указывает, что должен предпринимать процессор в случае, когда атрибут опущен (см. рис. 2.8). Так, объявление должно обеспечить значение атрибута по умолчанию, которое будет использовать процессор в том случае, если атрибут отсутствует.
Рисунок 2.8
Объявление обязательности атрибута и его значения по умолчанию может иметь следующие четыре формы:
#REQUIRED. При этой форме вы должны задать значение атрибута для каждого элемента ассоциированного типа. Например, следующее объявление указывает, что вы должны присвоить значение атрибуту Class внутри начального тега каждого элемента FILM в документе:
<!ATTLIST FILM Class CDATA #REQUIRED>
#IMPLIED. Эта форма указывает, что вы можете либо включить, либо опустить атрибут для элемента ассоциированного типа, а также, что если вы опускаете атрибут, то никакое значение по умолчанию процессору не передается. (Например, следующее объявление указывает, что присвоение значения атрибуту Class внутри элемента FILM является не обязательным, и что в документе не представлено значение Class по умолчанию:
<!ATTLIST FILM Class CDATA #IMPLIED>
AttValue, где AttValue – значение атрибута по умолчанию. При такой форме вы можете либо включить, либо опустить атрибут для элемента ассоциированного типа. Если вы опускаете атрибут, процессор использует значение по умолчанию, как если бы вы включили атрибут и задали это значение.
Задаваемое значение по умолчанию, конечно, должно соответствовать заданному типу атрибута. Например, следующее объявление присваивает значение по умолчанию "fictional" атрибуту Class:
<!ATTLIST FILM Class CDATA "fictional">
Согласно этому объявлению следующие два элемента эквивалентны:
<FILM>The Graduate</FILM>
<FILM Class="fictional">The Graduate</FILM>
#FIXED AttValue, где AttValue – значение атрибута по умолчанию. При такой форме вы можете либо включать, либо опускать атрибут для элемента ассоциированного типа. Если вы опускаете атрибут, процессор будет использовать значение, заданное по умолчанию; если вы включаете атрибут, вы должны задать значение по умолчанию.
Например, следующее объявление присваивает фиксированное значение по умолчанию атрибуту Class:
<!ATTLIST FILM Class CDATA #FIXED "documentary">
В соответствии с этим объявлением следующие два эквивалентных элемента будут корректными:
<FILM>The Making of XML</FILM>
<FILM Class="documentary">The Making of XML</FILM>