Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabKompl1_XML.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.8 Mб
Скачать

Лабораторная работа №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 –документ, содержащий смешанные данные и атрибут, для этого сделайте следующее:

  1. Откройте новый файл в вашем текстовом редакторе и введите текст 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>

  1. Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя AtrShmeshsod.xml.

  2. Откройте файл в вашем браузере и вас ложно получится то что представлено на

рисунке 2.5

Рисунок 2.5

Типы атрибута

Тип атрибута является вторым необходимым компонентом в определении атрибута. Он задает вид значений, которые вы можете присваивать атрибуту внутри документа, как показано на рисунке 2.6

Рисунок 2.6

Вы можете задавать тип атрибута тремя различными способами.

  1. Строковый тип. Строковый тип атрибута может быть назначен любой строке в кавычках (литералу), которая отвечает общим правилам. Вы должны объявить строковый тип атрибута с использованием ключевого слова CDATA, как это сделано для определения атрибута Class в следующем примере:

<!ATTLIST FILM Class CDATA "fictional">

  1. Маркерный тип. Значения, которые вы можете присваивать атрибуту маркерного типа, имеют ряд ограничений

Как и любое значение атрибута, значение, которое вы присваиваете маркерному типу атрибута, должно представлять собой строку в кавычках.

<?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>

  1. Нумерованный тип. Для нумерованного типа атрибута вы можете присваивать одно значение или список определенных значений.

Формы записи:

  • Открывающая скобка, вслед за которой идет список элементарных имен, разделенных символами | , после чего следует закрывающая скобка. Напомним, что элементарное имя – это имя, состоящее из одной или нескольких букв, цифр, точек (.), тире (–) или символов подчеркивания (_), а также может включать одно двоеточие (:), но не на первом месте. Например, если вы хотите ограничить значения атрибута 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, для этого сделайте следующее:

  1. Откройте новый файл в вашем текстовом редакторе и введите текст 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>

  1. Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя AtrType.xml.

  2. Откройте файл в вашем браузере и вас ложно получится то что представлено на

рисунке 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>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]