Почему при использовании скриптов, приведенных в курсе Основы XML лекция Лекция 8: Отображение XML-документов с использованием связывания данных не происходит связывания XLM документа с HTML? Отображаются пустые поля. Браузер IE11 |
Определение и использование примитивов
Объявление параметрического внутреннего разбираемого примитива
Объявление для параметрического внутреннего разбираемого примитива имеет следующую общую форму записи:
<!ENTITY % ИмяПримитива ЗначениеПримитива>
Здесь ИмяПримитива есть имя примитива. Вы можете выбрать любое имя, соблюдая следующие правила:
- имя должно начинаться с буквы или символа подчеркивания (_), вслед за которым могут идти или не идти буквы, цифры, точки (.), тире (–) или символы подчеркивания;
- примитив может иметь такое же имя, что и общий примитив в документе. (Параметрические и общие примитивы занимают различные пространства имен.) Имя примитива также может совпадать с именем элемента или атрибута;
- помните, что для всего текста разметки, в том числе и для имен примитивов, имеет значение регистр, в котором набраны символы. Так, примитив под именем Spot будет отличаться от примитива под именем spot.
ЗначениеПримитива есть значение примитива. Значение, присваиваемое параметрическому примитиву, представляет собой группу символов, заключенных в кавычки (литерал). Вы можете присвоить параметрическому примитиву любое значение типа литерал, при условии соблюдения следующих правил:
- строка должна быть ограничена одинарными (') или двойными (") кавычками;
- строка не может содержать символов кавычек, которые используются в качестве ограничителей;
- строка не может содержать символа процентов (%) и символа амперсанда (&), если это не начальный символ в ссылке на символ или общий примитив;
- вы можете поместить параметрический примитив в DTD только как объявление разметки, но не внутри объявления разметки. Следовательно, строка ЗначениеПримитива должна содержать один или несколько типов объявлений разметки, которые разрешено использовать в DTD. Эти типы объявлений разметки описаны в разделе "Создание DTD" в "Создание валидных XML-документов" . В частности, параметрический примитив может содержать объявления типа элемента, объявления списка атрибутов, объявления общих примитивов, объявления нотаций, инструкции по обработке, или комментарии. (Объявления параметрических примитивов и ссылки не допускаются.)
Примечание. Приведенные здесь правила использования значений примитивов, которые вы можете без опасения применять в любых ситуациях, являются несколько упрощенными в отличие от правил, содержащихся в спецификации XML. Спецификация, в определенных обстоятельствах, разрешает вам включать в значение примитива дополнительные составляющие, а также помещать ссылку на примитив внутри разметки и между объявлениями разметки. Подробности приведены в разделе 4 спецификации XML, которую вы можете найти по адресу http://www.w3.org/TR/REC-xml.
Например, следующее DTD объявляет параметрический внутренний разбираемый примитив с именем author, который содержит три объявления разметки: комментарий, объявление типа элемента и объявление списка атрибутов. Содержимое примитива (т.е. замещающий его текст) помещается в конец DTD посредством ссылки на параметрический примитив ( %author; );
<!DOCTYPE BOOK [ <!ENTITY % author "<!-- информация об авторе --> <!ELEMENT AUTHOR (#PCDATA)> <!ATTLIST AUTHOR Nationality CDATA 'American'>" > <!ELEMENT BOOK (TITLE, AUTHOR)> <!ELEMENT TITLE (#PCDATA)> %author; ] >
Обратите внимание, что значение атрибута по умолчанию, которое содержится в объявлении примитива ('American'), ограничено одинарными кавычками, чтобы избежать использования такого же символа, который применяется для ограничения всего значения примитива. Приведенное выше DTD эквивалентено следующему:
<!DOCTYPE BOOK [ <!ELEMENT BOOK (TITLE, AUTHOR)> <!ELEMENT TITLE (#PCDATA)> <! -- информация об авторе --> <!ELEMENT AUTHOR (#PCDATA)> <!ATTLIST AUTHOR Nationality CDATA 'American'> ] >
Объявление параметрического внешнего разбираемого примитива
Объявление для параметрического внешнего разбираемого примитива имеет следующую форму записи:
<!ENTITY % ИмяПримитива SYSTEM СистемЛитерал>
Здесь ИмяПримитива есть имя примитива. Вы можете выбрать любое имя, следуя правилам задания имен для параметрических примитивов, приведенных в предыдущем разделе.
СистемЛитерал есть системный литерал, который описывает местонахождение файла, содержащего данные примитива. Системный литерал может быть заключен в одинарные (') или двойные (") кавычки и содержать любые символы, за исключением символа кавычек, который используется в качестве ограничителя.
Системный литерал задает URI файла, содержащего данные параметрического примитива. В настоящее время URI практически аналогичен стандартному унифицированному указателю ресурса Internet (URL). Вы можете использовать как полностью заданный URI, например:
<!ENTITY % declarations SYSTEM "http://bogus.com/documents/Declarations.dtd">
Либо вы можете использовать частичный URI, задающий местонахождение относительно местонахождения XML-документа, содержащего URI, например:
<!ENTITY % declarations SYSTEM "Declarations.dtd">
Относительные URI в XML-документах работают подобно относительным URL для HTML-страниц. Для более подробной информации об URI обратитесь к разделу "Использование только внешнего подмножества DTD" в "Создание валидных XML-документов" .
Файл параметрического внешнего примитива должен содержать законченные объявления разметки любых типов, допустимых в DTD. В частности, он может содержать объявления типа элемента, объявления списка атрибутов, объявления примитивов, объявления нотаций, инструкции по обработке, или комментарии. (Эти типы объявлений разметки описаны в разделе "Создание DTD" в "Создание валидных XML-документов" .) Вы также можете включать ссылки на параметрические примитивы и разделы INCLUDE и IGNORE. (См. раздел "Условное игнорирование разделов внешнего подмножества DTD" в "Создание валидных XML-документов" .)
Вы можете использовать параметрические внешние разбираемые примитивы для хранения группы взаимосвязанных объявлений. Допустим, вы занимаетесь продажей книг, CD-ROM, плакатов и другой продукции. Вы можете поместить объявления для каждого вида продукции в отдельный файл. Это позволит вам объединять эти группы объявлений различными способами. Например, вы хотели бы создать XML-документ, который описывает только имеющиеся у вас в наличии книги и CD-ROM. Для этого вы можете поместить объявления для книг и CD-ROM в DTD документа с помощью параметрических внешних разбираемых примитивов, как показано в следующем примере XML-документа:
<?xml version="1.0" encoding="windows-1251" ?> <!DOCTYPE INVENTORY [ <!ELEMENT INVENTORY (BOOK | CD)*> <!ENTITY % book_decls SYSTEM "Book.dtd"> <!ENTITY % cd_decls SYSTEM "CD.dtd"> %book_decls; %cd_decls; ] > <INVENTORY> <BOOK> <BOOKTITLE>The Marble Faun</BOOKTITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <PAGES>473</PAGES> </BOOK> <CD> <CDTITLE>Concerti Grossi Opus 3</CDTITLE> <COMPOSER>Handel</COMPOSER> <LENGTH>72 minutes</LENGTH> </CD> <BOOK> <BOOKTITLE>Leaves of Grass</BOOKTITLE> <AUTHOR>Walt Whitman</AUTHOR> <PAGES>462</PAGES> </BOOK> <!-- дополнительные виды продукции… --> </INVENTORY>
Вот содержимое файла примитива Book.dtd:
<!ELEMENT BOOK (BOOKTITLE, AUTHOR, PAGES)> <!ELEMENT BOOKTITLE (#PCDATA)> <!ELEMENT AUTHOR (#PCDATA)> <!ELEMENT PAGES (#PCDATA)>
А вот содержимое файла примитива CD.dtd:
<!ELEMENT CD (CDTITLE, COMPOSER, LENGTH)> <!ELEMENT CDTITLE (#PCDATA)> <!ELEMENT COMPOSER (#PCDATA)> <!ELEMENT LENGTH (#PCDATA)>
Заметим, что параметрический внешний разбираемый примитив работает во многом аналогично внешнему подмножеству DTD. Параметрические внешние примитивы, однако, обеспечивают большую гибкость – они разрешают вам включать несколько файлов внешних объявлений, причем в любом порядке. (Напомним, что внешнее подмножество DTD всегда обрабатывается после того, как полностью будет обработано подмножество внутреннего DTD.)