Объявления сущностей
Объявления сущностей позволяют использовать ссылки на сущность. Ссылка на сущность (entity) — это последовательность символов, которая автоматически подставляется вместо другой последовательности символов. Обычно ссылки на сущность требуются для того, чтобы обозначить символы, которые иначе могут быть приняты за символы разметки. Если вы имели дело с HTML, то, вероятно, сталкивались со ссылками на сущность. Наиболее распространенный тип сущности — это общая сущность (general entity), то есть сущность, которую можно подставить вместо символов в документах XML Формат объявления общей сущности следующий:
lt;!ENTITY имя_сущности "заменяемые символы">
Ссылки на сущность имеют вид &имя_сущности; В XML имеется пять встроенных сущностей. Их не обязательно объявлять в DTD, хотя в спецификации XML это сделать рекомендуется, чтобы гарантировать возможность взаимодействия с HTML и SGML. Пять встроенных сущностей перечислены в приведенной ниже таблице:
Ссылка на сущность |
Числовой заменитель |
Символ | |||
& < > ' " |
& < > ' " |
& < > ' " |
Эти сущности можно объявить следующим образом:
<!ENTITY lt "&,#60,">
<!ENTITY gt ">,">
<!ENTITY amp "&,#38,">
<!ENTITY apos "',">
<!ENTITY quot "",">
ПРИМЕЧАНИЕ
Символы < и & в объявлениях It и amp дважды экранируются (escaped), чтобы обеспечить выполнение требований о хорошем оформлении документа XML. Другими словами, символы & и < — это два символа, которые сообщают процессору XML, что следующий текст — это фрагмент разметки. Если эти символы не экранировать дважды в объявлениях сущности, то процессор XML будет интерпретировать их как начало нового фрагмента разметки, не дойдя до конца объявления сущности, и сгенерирует ошибку.
Встроенные ссылки на сущности необходимы для создания документов XML, в которых любой из приведенных символов используется сам по себе, а не как фрагмент разметки Ссылки на общие сущности, которые вы определяете самостоятельно, удобны для присваивания имен последовательностям символов, которые вы часто используете. Например, чтобы объявить ссылку на сущность, представляющую символ торговой марки (™), можно включить следующее объявление:
<!ENTITY tm "™">
Символ торговой марки можно затем вставить в любой документ XML, в котором имеется DTD с этим объявлением. Например:
<product_name>
Super Dnnk&tm;
</product_name>
Хотя сущности можно использовать в определениях других сущностей, при этом следует постоянно учитывать основной принцип: ссылки не должны быть циклическими.
Ниже приведен пример некорректного определения сущностей:
<!ENTITY myentity "please see &myotherentity, ">
<!ENTITY myotherentity "please see &myentity; ">
А это — корректное определение:
<!ENTITY tm "™">
<!ENTITY myentity "I enjoy Super Dnnk&tm; ">
Объявление параметрических сущностей
Также можно объявлять ссылки на сущности, которые в DTD будут заменяться определениями сущности. Такой тип сущностей называется параметрическим. Ссылка на параметрическую сущность (parameter entity) начинается с символа * и не может присутствовать внутри документа XML — только в DTD, где она определяется. Ниже приведен пример использования параметрической сущности:
<!ENTITY % actors " (Joe, Mary, Todd, Bill, Jane)* ">
<!ELEMENT dialog %actors;>
Объявление внешних сущностей
Внешние сущности (external entities) — это способ включить внешние файлы в документ XML. Они объявляются следующим образом:
<!ENTITY latest_pnces SYSTEM
"http://www.getthepncesofthings.com/today.xml">
После объявления внешней сущности вы можете включить содержимое указанного документа XML в ваш документ, используя ссылку на сущность — в данном случае &latest_prices.
Объявление непроверенных сущностей
Непроверенные сущности (unparsed entities) можно использовать для включения в документ XML данных в формате, отличном от XML. Для определения такой сущности используется ключевое слово NOATA. Например:
<!ENTITY bookcover SYSTEM
"http://www.sybex.com/books/xml/javadevguide.gif" NDATA gif>
Непосредственно за ключевым словом NDATA следует ключевое слово нотации (notation data keyword). Это ключевое слово объявляется с помощью объявления нотации. Объявления нотации (notation declarations) предоставляют дополнительную информацию (например, для идентификации) или, как в данном случае, сведения о формате для непроверенных данных. Ключевое слово нотации определяется с помощью объявления <!NOTATION>. Например:
<!NOTATION gif SYSTEM
"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">