Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

3.11. Задание атрибута нумерованного типа

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

  • Открывающая скобка, вслед за которой идет список элементарных имен, разделенных символами, после чего следует закрывающая скобка. Напомним, что элементарное имя — это имя, состоящее из одной или нескольких букв, цифр, точек (.), тире (-) или символов подчеркивания (_), а также может включать одно двоеточие (:), но не на первом месте. Например, для ограничения значения атрибута Class словами “вымысел”, “учебный” или “документальный”, данному атрибуту можно присвоить нумерованный тип следующим образом:

<!ATTLIST FILM Class (вымысел | учебный | документальный)

"вымысел"

Вот законченный XML-документ, демонстрирующий использование атрибута Class:

<?xml version="1.0"?>

<!DOCTYPE FILM

[

<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR))>

<!ATTLIST FILM Class (вымысел | учебный | документальный) " вымысел ">

<!ELEMENT TITLE (#PCDATA)

<!ELEMENT STAR(#PCDATA)

<!ELEMENT NARRATOR(#PCDATA)

<!ELEMENT INSTRUCTOR (#PCDATA)

]

>

<FILM Class="учебный">

<TITLE>Использование XML</TITLE>

<NARRATOR>Пётр Иванов</NARRATOR>

</FILM>

Если опустить атрибут Class, ему будет по умолчанию присвоено значение “вымысел”. Присвоение атрибуту Class значения, отличного от “вымысел”, “учебный” или “документальный”, приведет к ошибке.

  • Ключевое слово NOTATION, за которым идет пробел, затем открывающая скобка, затем список имен нотаций, разделяемых символами, после чего следует закрывающая скобка. Каждое из этих имен должно точно соответствовать имени нотации, объявленному в DTD. Нотация описывает формат данных или идентифицирует программу, применяемую для обработки определенного формата (подробнее о нотациях будет рассказано далее).

Например, в DTD объявлены нотации HTML, SGML и RTF. Тогда можно ограничить значения атрибута Format одним из этих имен нотаций с помощью следующего объявления:

<!ELEMENT EXAMPLE_DOCUMENT (#PCDATA)>

<!ATTLIST EXAMPLE_DOCUMENT

Format NOTATION (HTML | SGML | RTF) #REQUIRED>

В дальнейшем можно использовать атрибут Format для указания формата определенного элемента EXAMPLE_DOCUMENT, как в следующем примере:

<EXAMPLE_DOCUMENT Format="HTML">

<![CDATA[

<HTML>

<HEAD>

<TITLE>Моя домашняя страничка</TITLE>

</HEAD>

<BODY>

<P>Добро пожаловать!</P>

</BODY>

</HTML>

]]>

</EXAMPLE_DOCUMENT>

Присвоение атрибуту Format значения, отличного от “HTML”, “SGML” или “RTF”, приведет к ошибке. (Обратите внимание на использование здесь раздела CDATA — здесь можно свободно использовать символ левой угловой скобки (<) внутри символьных данных элемента.)

3.12. Объявление значения по умолчанию

Объявление значения по умолчанию - это третий и последний обязательный компонент в определении атрибута. Оно задает, является ли атрибут обязательным, и если нет, указывает, что должен предпринимать процессор в случае, когда атрибут опущен (см. рисунок ниже). Так, объявление должно обеспечить значение атрибута по умолчанию, которое будет использовать процессор в том случае, если атрибут отсутствует.

Объявление значения по умолчанию может иметь следующие четыре формы:

  • #REQUIRED. При этой форме нужно задать значение атрибута для каждого элемента ассоциированного типа. Например, следующее объявление указывает, что необходимо присвоить значение атрибуту Class внутри начального тега каждого элемента FILM в документе:

<!ATTLIST FILM Class CDATA #REQUIRED>

  • #IMPLIED. Эта форма указывает, что можно либо включить, либо опустить атрибут для элемента ассоциированного типа, а также, что если вы опускаете атрибут, то никакое значение по умолчанию процессору не передается. (Эта форма «подразумевает», а не «устанавливает» значение, позволяя приложению использовать свое собственное значение по умолчанию - т.е. имя.) Например, следующее объявление указывает, что присвоение значения атрибуту Class внутри элемента FILM является не обязательным, и что в документе не представлено значение Class по умолчанию:

<!ATTLIST FILM Class CDATA #IMPLIED>

  • AttValue, где AttValue - значение атрибута по умолчанию. При такой форме можно либо включить, либо опустить атрибут для элемента ассоциированного типа. Если вы опускаете атрибут, процессор использует значение по умолчанию, как если бы вы включили атрибут и задали это значение.

Задаваемое значение по умолчанию, конечно, должно соответствовать заданному типу атрибута. Например, следующее объявление присваивает значение по умолчанию “вымысел” атрибуту Class:

<!ATTLIST FILM Class CDATA "вымысел">

Согласно этому объявлению следующие два элемента эквивалентны:

<FILM></FILM>

<FILM Class="вымысел">Инопланетяне</FILM>

  • #FIXED AttValue, где AttValue - значение атрибута по умолчанию. При такой форме можно либо включать, либо опускать атрибут для элемента ассоциированного типа. Если вы опускаете атрибут, процессор будет использовать значение, заданное по умолчанию; если вы включаете атрибут, вы должны задать значение по умолчанию. (Поскольку можно задать только значение по умолчанию, нет смысла включать в элемент описание атрибута, за исключением желания сделать документ более понятным для восприятия.) Например, следующее объявление присваивает фиксированное значение по умолчанию атрибуту Class:

<!ATTLIST FILM Class CDATA #FIXED "документальный">

В соответствии с этим объявлением следующие два эквивалентных элемента будут корректными:

<FILM>Появление языка XML</FILM>

<FILM Class="документальный"> Появление языка XML </FILM>

в то время как следующий элемент будет некорректным:

<!-- Некорректный элемент! -->

<FILM Class="учебный"> Появление языка XML </FILM>