Опубликован: 24.01.2007 | Доступ: свободный | Студентов: 9681 / 1718 | Оценка: 4.28 / 4.09 | Длительность: 20:51:00
Лекция 5:

Создание валидных XML-документов

Задание нумерованных типов

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

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

    Если вы опустили атрибут Class, ему будет по умолчанию присвоено значение "fictional". Присвоение атрибуту Class значения, отличного от "fictional", "instructional" или "documentary", приведет к ошибке.

  • Ключевое слово 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>Mike’s Home Page</TITLE>
    		</HEAD>
    		<BODY>
    		<P>Welcome!</P>
    		</BODY>
    		</HTML>
    	]]>
    </EXAMPLE_DOCUMENT>

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

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

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


Рис. 5.5.

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

  • #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>

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

    <!-- Некорректный элемент! -->
    <FILM Class="instructional">The Making of XML</FILM>
Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!