Для того чтобы обеспечить достаточно выразительную мощность документов, XML позволяет разбивать их на отдельные поименованные объекты, называемые сущностями. Сущности в XML не имеют ничего общего с сущностями в методологии "сущность-связь". Самый близкий аналог в традиционных языках программирования — это макроподстановка.
Существует два способа определения сущности — внутреннее и внешнее.
Первый способ используется для того, чтобы определить именованный текстовый объект в самом документе, а затем использовать его содержимое посредством ссылки.
Внутреннее определение сущности имеет вид:
<!ENTITY имя "значение">
Ссылка
на сущность записывается как
&имя;
(амперсант, затем имя сущности, затем точка с запятой).
Пример
В документе
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE advert [
<!ENTITY animal "слон">
]>
<advert>
<product title="&animal;">
Продается настоящий &animal;!
</product>
</advert>
сущность
animal
имеет значение
"слон"
. Ссылка на сущность используется дважды — в атрибуте
title
и в тексте элемента
product
. Этот документ эквивалентен документу
<?xml version="1.0" encoding="UTF-8"?>
<advert>
<product title="слон">
Продается настоящий слон!
</product>
</advert>
Если в будущем фирма переквалифицируется, и будет продавать, скажем, жирафов, можно будет, не изменяя всего документа, заменить только значение сущности:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE advert [
<!ENTITY animal "жираф">
]>
<advert>
<product title="&animal;">
Продается настоящий &animal;!
</product>
</advert>
Спецификация XML определяет несколько встроенных сущностей, которые перечислены в табл 1.1.
Таблица 1.1. Встроенные сущности XML
Имя сущности
Значение
Описание
lt
<
знак "меньше"
gt
>
знак "больше"
amp
&
амперсант
apos
'
апостроф или одинарные кавычки
quot
"
двойные кавычки
Встроенные сущности могут быть использованы для замены некоторых символов там, где они могут быть восприняты, как разметка. В частности, символы
<
(знак "меньше") и
&
(амперсант) вообще не могут появляться в тексте документа иначе, кроме как в виде сущностей.