Приведенные скрипты не проводят к описанному результату |
Определение и использование примитивов
Добавьте примитивы в документ
- В вашем текстовом редакторе откройте документ Inventory Valid.xml, созданный вами в разделе "Преобразование корректно сформированного документа в валидный" в "Создание валидных XML-документов" .
- В начало DTD документа (блок текста, ограниченный символами [] в верхней части документа) добавьте следующие объявления примитива и нотации:
<!-- примитивы для присвоения значений элементу BINDING: --> <!ENTITY mass "mass market paperback"> <!ENTITY trade "trade paperback"> <!ENTITY hard "hardcover"> <!-- внешние примитивы, содержащие обзоры --> <!-- они будут присвоены атрибуту Review элементов BOOK --> <!NOTATION DOC SYSTEM "Microsoft Word document"> <!NOTATION TXT SYSTEM "plain text file"> <!ENTITY rev_leaves SYSTEM "Review Leaves of Grass.doc" NDATA DOC> <!ENTITY rev_faun1 SYSTEM "Review 01 of The Marble Faun.doc" NDATA DOC> <!ENTITY rev_faun2 SYSTEM "Review 02 of The Marble Faun.txt" NDATA TXT> <!ENTITY rev_screw SYSTEM "Review of The Turn of the Screw.txt" NDATA TXT>
Первые три примитива представляют собой внутренние разбираемые примитивы, которые вы можете вставлять в элементы BINDING, вместо того, чтобы вводить описание типа переплета для каждого элемента. Использование примитивов дает возможность обеспечить однозначность ваших описаний типов переплета для различных книг. Кроме того, примитивы облегчают модификацию описания. (Например, вы можете заменить "hardcover" на "hardback" для каждого элемента BINDING, в котором встречается этот тип обложки, простым редактированием примитива hard.)
Следующие (и последние) четыре примитива представляют собой общие внешние неразбираемые примитивы, которые позволяют вам подключать внешние файлы, содержащие обзоры книг для элементов BOOK.
- Добавьте атрибут Reviews в объявление списка атрибутов для элемента BOOK далее в DTD следующим образом:
<!ATTLIST BOOK InStock (yes | no) #REQUIRED Reviews ENTITIES #IMPLIED>
Reviews представляет собой не обязательный атрибут ( #IMPLIED ), которому вы можете присвоить имена одного или нескольких общих внешних не разбираемых примитивов. ( Reviews имеет тип ENTITIES ).
- В каждом элементе BINDING замените описание переплета соответствующей ссылкой на примитив. Например, вы должны изменить элемент BINDING для книги The Adventures of Huckleberry Finn с
<BINDING>mass market paperback</BINDING>
на
<BINDING>&mass;</BINDING>
- Добавьте атрибуты Reviews элементам BOOK следующим образом:
- Чтобы отразить новое имя файла, которое вы собираетесь присвоить, измените комментарий в начале документа с
<!-- Имя файла: Inventory Valid.xml -->
на
<!-- Имя файла: Inventory Valid Entity.xml -->
- Воспользуйтесь командой Save As (Сохранить как) вашего текстового редактора, чтобы сохранить копию модифицированного документа под именем Inventory Valid Entity.xml.
Полный XML-документ представлен в Листинге 6.1.
<?xml version="1.0" encoding="windows-1251" ?> <!--Имя файла: Inventory Valid Entity.xml --> <!DOCTYPE INVENTORY [ <!-- примитивы для присвоения значений элементу BINDING: --> <!ENTITY mass "mass market paperback"> <!ENTITY trade "trade paperback"> <!ENTITY hard "hardcover"> <!-- внешние примитивы, содержащие обзоры --> <!-- они будут присвоены атрибуту Review элементов BOOK --> <!NOTATION DOC SYSTEM "Microsoft Word document"> <!NOTATION TXT SYSTEM "plain text file"> <!ENTITY rev_leaves SYSTEM "Review of Leaves of Grass.doc" NDATA DOC> <!ENTITY rev_faun1 SYSTEM "Review 01 of The Marble Faun.doc" NDATA DOC> <!ENTITY rev_faun2 SYSTEM "Review 02 of The Marble Faun.txt" NDATA TXT> <!ENTITY rev_screw SYSTEM "Review of The Turn of the Screw.txt" NDATA TXT> <!ELEMENT INVENTORY (BOOK)*> <!ELEMENT BOOK (TITLE, AUTHOR, BINDING, PAGES, PRICE)> <!ATTLIST BOOK InStock (yes|no) #REQUIRED Reviews ENTITIES #IMPLIED> <!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;</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK InStock="no" Reviews="rev_leaves"> <TITLE>Leaves of Grass</TITLE> <AUTHOR Born="1819">Walt Whitman</AUTHOR> <BINDING>&hard;</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;</BINDING> <PAGES>98</PAGES> <PRICE>$2.95</PRICE> </BOOK> <BOOK InStock="yes" Reviews="rev_faun1 rev_faun2"> <TITLE>The Marble Faun</TITLE> <AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR> <BINDING>™</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>&hard;</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;</BINDING> <PAGES>256</PAGES> <PRICE>$4.95</PRICE> </BOOK> <BOOK InStock="yes"> <TITLE>The Scarlet Letter</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>™</BINDING> <PAGES>253</PAGES> <PRICE>$4.25</PRICE> </BOOK> <BOOK InStock="no" Reviews="rev_screw"> <TITLE>The Turn of the Screw</TITLE> <AUTHOR>Henry James</AUTHOR> <BINDING>™</BINDING> <PAGES>384</PAGES> <PRICE>$3.35</PRICE> </BOOK> </INVENTORY>Листинг 6.1. Inventory Valid Entity.xml
8. Если вы хотите проверить валидность вашего документа, воспользуйтесь сценарием проверки на валидность, приведенным в разделе "Проверка валидности XML-документа" в "Отображение XML-документов с использованием сценариев объектной модели документа" .