Почему при использовании скриптов, приведенных в курсе Основы XML лекция Лекция 8: Отображение XML-документов с использованием связывания данных не происходит связывания XLM документа с HTML? Отображаются пустые поля. Браузер IE11 |
Создание валидных XML-документов
Условия игнорирования разделов внешнего подмножества DTD
Вы можете заставить XML-процессор игнорировать часть внешнего подмножества DTD с помощью раздела IGNORE. Вы можете, например, использовать раздел IGNORE при разработке документа с целью временного отключения альтернативного или необязательного блока объявлений разметки. При этом вам не нужно удалять строки, а затем повторно их вставлять. (Если вы программист, то вам известно, что такой прием подобен "комментированию" фрагмента кода, который вы хотите временно игнорировать.) Раздел IGNORE начинается с символов <![IGNORE[ и заканчивается символами ]]>.
На рисунке 5.6 представлен пример полного описания внешнего подмножества DTD, включающего раздел IGNORE.
Если вы хотите временно восстановить блок объявлений разметки в разделе 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-документа" , чтобы сделать его валидным. Вы также добавите новый элемент и два атрибута, чтобы освоить описанные в этой лекции приемы.
Сделаем документ валидным
- В вашем текстовом редакторе откройте документ Inventory.xml, созданный вами в "Создание и отображение вашего первого XML-документа" .
- Непосредственно перед элементом Документ – с именем 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, который является не обязательным и не имеет значения по умолчанию.
- Добавьте следующий дочерний элемент SUBTITLE в элемент TITLE для книги Моби-Дик:
<BOOK> <TITLE>Moby-Dick <SUBTITLE>Or, the Whale</SUBTITLE> </TITLE>
- Добавьте обязательный атрибут 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>
- Добавьте не обязательный атрибут Born к одному или нескольким элементам. Хотя вы можете присвоить этому атрибуту любую синтаксически правильную строку в кавычках, в данном случае он должен хранить дату рождения автора. Пример:
<AUTHOR Born="1835">Mark Twain</AUTHOR>
- Чтобы отразить новое имя файла, которое вы собираетесь присвоить, измените комментарий в начале документа с:
<!-- Имя файла: Inventory.xml -->
на
<!-- Имя файла: Inventory Valid.xml -->
- Воспользуйтесь командой 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 - Если вы хотите проверить валидность вашего документа, воспользуйтесь сценарием проверки XML-документа на валидность, приведенным в разделе "Проверка валидности XML-документа" в "Отображение XML-документов с использованием сценариев объектной модели документа" .