Опубликован: 24.01.2007 | Уровень: для всех | Доступ: платный
Лекция 5:

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

Условия игнорирования разделов внешнего подмножества DTD

Вы можете заставить XML-процессор игнорировать часть внешнего подмножества DTD с помощью раздела IGNORE. Вы можете, например, использовать раздел IGNORE при разработке документа с целью временного отключения альтернативного или необязательного блока объявлений разметки. При этом вам не нужно удалять строки, а затем повторно их вставлять. (Если вы программист, то вам известно, что такой прием подобен "комментированию" фрагмента кода, который вы хотите временно игнорировать.) Раздел IGNORE начинается с символов <![IGNORE[ и заканчивается символами ]]>.

На рисунке 5.6 представлен пример полного описания внешнего подмножества DTD, включающего раздел IGNORE.


Рис. 5.6.

Если вы хотите временно восстановить блок объявлений разметки в разделе IGNORE, вам достаточно просто заменить ключевое слово IGNORE на INCLUDE, не удаляя при этом символы-ограничители ( <![, [ и ]]> ), как в следующем примере:

<![INCLUDE[
	<!-- необязательный блок объявлений разметки, 
		  который временно восстановлен -->
	<!ATTLIST BOOK  Category CDATA "fiction">
	<!ELEMENT TITLE (#PCDATA)>
	<!ELEMENT AUTHOR (#PCDATA)>
]]>

Впоследствии вы можете снова быстро отключить раздел, вернув заголовок IGNORE. Раздел INCLUDE, вложенный в раздел IGNORE, также игнорируется.

Примечание. Вы можете использовать разделы IGNORE и INCLUDE только во внешнем подмножестве DTD, либо во внешнем параметрическом примитиве. (Внешний параметрический примитив ссылается на отдельный файл, который – подобно внешнему подмножеству DTD – содержит объявления разметки, подробнее об этом вы узнаете в "Определение и использование примитивов" .)

Преобразование корректно сформированного документа в валидный

В этом разделе вы попытаетесь на практике применить полученные при изучении этой лекции знания, преобразовав корректно сформированный документ в валидный. Вы модифицируете документ Inventory.xml, созданный вами в "Создание и отображение вашего первого XML-документа" , чтобы сделать его валидным. Вы также добавите новый элемент и два атрибута, чтобы освоить описанные в этой лекции приемы.

Сделаем документ валидным

  1. В вашем текстовом редакторе откройте документ Inventory.xml, созданный вами в "Создание и отображение вашего первого XML-документа" .
  2. Непосредственно перед элементом Документ – с именем INVENTORY – введите следующее объявление типа документа:
    <![INCLUDE[
    	<!-- необязательный блок объявлений разметки, 
    		  который временно восстановлен -->
    	<!ATTLIST BOOK  Category CDATA "fiction">
    	<!ELEMENT TITLE (#PCDATA)>
    	<!ELEMENT AUTHOR (#PCDATA)>
    ]]>

    Совет.При выполнении модификации в ходе данного упражнения вы можете ориентироваться на полностью модифицированный документ, который приведен в Листинге 5.1 в конце этой лекции.

    Обратите внимание, что имя следующего за DOCTYPE ключевого слова совпадает с именем элемента Документ, INVENTORY. DTD состоит только из внутреннего подмножества, которое определяет элементы и атрибуты документа следующим образом:

    • элемент Документ, INVENTORY, имеет содержимое. Он может включать ни одного или несколько дочерних элементов BOOK ;
    • элемент BOOK также имеет содержимое. Оно должно включать строго по одному из следующих элементов, в порядке, перечисленном в объявлении документа: TITLE, AUTHOR, BINDING, PAGES и PRICE ;
    • элемент TITLE имеет смешанное содержимое. Он может включать символьные данные вместе с ни одним или с несколькими элементами SUBTITLE ;
    • элементы AUTHOR, BINDING, PAGES и PRICE также имеют смешанное содержимое. Эти элементы, однако, могут включать только символьные данные без дочерних элементов;
    • элемент BOOK имеет атрибут нумерованного типа с именем InStock, который является обязательным атрибутом и может принимать значения либо "yes", либо "no";
    • элемент AUTHOR имеет атрибут строкового типа с именем Born, который является не обязательным и не имеет значения по умолчанию.
  3. Добавьте следующий дочерний элемент SUBTITLE в элемент TITLE для книги Моби-Дик:
    <BOOK>
    	<TITLE>Moby-Dick
    		<SUBTITLE>Or, the Whale</SUBTITLE>
    	</TITLE>
  4. Добавьте обязательный атрибут InStock каждому элементу BOOK, присвоив ему значения "yes" или "no", как показано ниже:
    <BOOK InStock="yes">
    	<TITLE>The Adventures of Huckleberry Finn</TITLE>
    	<AUTHOR>Mark Twain</AUTHOR>
    	<BINDING>mass market paperback</BINDING>
    	<PAGES>298</PAGES>
    	<PRICE>$5.49</PRICE>
    </BOOK>
  5. Добавьте не обязательный атрибут Born к одному или нескольким элементам. Хотя вы можете присвоить этому атрибуту любую синтаксически правильную строку в кавычках, в данном случае он должен хранить дату рождения автора. Пример:
    <AUTHOR Born="1835">Mark Twain</AUTHOR>
  6. Чтобы отразить новое имя файла, которое вы собираетесь присвоить, измените комментарий в начале документа с:
    <!-- Имя файла: Inventory.xml -->

    на

    <!-- Имя файла: Inventory Valid.xml -->
  7. Воспользуйтесь командой Save As (Сохранить как) вашего текстового редактора, чтобы сохранить копию модифицированного документа под именем Inventory Valid.xml.

    Законченный документ представлен в Листинге 5.1.

    <?xml version="1.0" encoding="windows-1251" ?>
    <!-- File Name: Inventory Valid.xml -->
    <!DOCTYPE INVENTORY
    	[
    	<!ELEMENT INVENTORY (BOOK)*>
    	<!ELEMENT BOOK (TITLE, AUTHOR, BINDING, PAGES, PRICE)> 
       	<!ATTLIST BOOK   InStock (yes|no) #REQUIRED>
       	<!ELEMENT TITLE (#PCDATA | SUBTITLE)*>
       	<!ELEMENT SUBTITLE (#PCDATA)>
       	<!ELEMENT AUTHOR (#PCDATA)>
       	<!ATTLIST AUTHOR   Born CDATA #IMPLIED>
       	<!ELEMENT BINDING (#PCDATA)>
       	<!ELEMENT PAGES (#PCDATA)>
       	<!ELEMENT PRICE (#PCDATA)>
       	]
    >
    <INVENTORY>
       	<BOOK InStock="yes">
          		<TITLE>The Adventures of Huckleberry Finn</TITLE>
          		<AUTHOR Born="1835">Mark Twain</AUTHOR>
          		<BINDING>mass market paperback</BINDING>
          		<PAGES>298</PAGES>
          		<PRICE>$5.49</PRICE>
       	</BOOK>
       	<BOOK InStock="no">
          		<TITLE>Leaves of Grass</TITLE>
          		<AUTHOR Born="1819">Walt Whitman</AUTHOR>
          		<BINDING>hardcover</BINDING>
          		<PAGES>462</PAGES>
          		<PRICE>$7.75</PRICE>
       	</BOOK>
       	<BOOK InStock="yes">
          		<TITLE>The Legend of Sleepy Hollow</TITLE>
          		<AUTHOR>Washington Irving</AUTHOR>
         	 	<BINDING>mass market paperback</BINDING>
          		<PAGES>98</PAGES>
          		<PRICE>$2.95</PRICE>
       	</BOOK>
       	<BOOK InStock="yes">
          		<TITLE>The Marble Faun</TITLE>
          		<AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR>
          		<BINDING>trade paperback</BINDING>
          		<PAGES>473</PAGES>
          		<PRICE>$10.95</PRICE>
       	</BOOK>
       	<BOOK InStock="no">
          <TITLE>Moby-Dick
             		<SUBTITLE>Or, the Whale</SUBTITLE>
          		</TITLE>
          		<AUTHOR Born="1819">Herman Melville</AUTHOR>
          		<BINDING>hardcover</BINDING>
          		<PAGES>724</PAGES>
          		<PRICE>$9.95</PRICE>
       	</BOOK>
       	<BOOK InStock="yes">
          		<TITLE>The Portrait of a Lady</TITLE>
          		<AUTHOR>Henry James</AUTHOR>
          		<BINDING>mass market paperback</BINDING>
          		<PAGES>256</PAGES>
          		<PRICE>$4.95</PRICE>
       	</BOOK>
       	<BOOK InStock="yes">
          		<TITLE>The Scarlet Letter</TITLE>
          		<AUTHOR>Nathaniel Hawthorne</AUTHOR>
          		<BINDING>trade paperback</BINDING>
          		<PAGES>253</PAGES>
          		<PRICE>$4.25</PRICE>
       	</BOOK>
       	<BOOK InStock="no">
          		<TITLE>The Turn of the Screw</TITLE>
          		<AUTHOR>Henry James</AUTHOR>
          		<BINDING>trade paperback</BINDING>
          		<PAGES>384</PAGES>
          		<PRICE>$3.35</PRICE>
       	</BOOK>
    </INVENTORY>
    Листинг 5.1. Inventory Valid.xml
  8. Если вы хотите проверить валидность вашего документа, воспользуйтесь сценарием проверки XML-документа на валидность, приведенным в разделе "Проверка валидности XML-документа" в "Отображение XML-документов с использованием сценариев объектной модели документа" .
Максим Попов
Максим Попов

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

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

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

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

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

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

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

Спасибо!

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Akiyev Begench
Akiyev Begench
Беларусь, Полоцк, полоцкий государственный университет