В стандартном обобщенном языке разметки (SGML) сущность — это примитивный тип данных , который связывает строку либо с уникальным псевдонимом (например, указанным пользователем именем), либо с зарезервированным словом SGML (например, #DEFAULT
). Сущности являются основой организационной структуры и определения документов SGML. Спецификация SGML определяет многочисленные типы сущностей , которые различаются ключевыми словами-квалификаторами и контекстом. Строковое значение сущности может по-разному состоять из обычного текста , тегов SGML и/или ссылок на ранее определенные сущности. Некоторые типы сущностей также могут вызывать внешние документы. Сущности вызываются по ссылке .
Сущности классифицируются как общие или параметрические:
Сущности также классифицируются как проанализированные и непроанализированные:
Внутренняя сущность имеет значение, которое является либо строкой литерала , либо проанализированной строкой, содержащей разметку и сущности, определенные в том же документе (например, декларация типа документа или поддокумент). Напротив, внешняя сущность имеет декларацию , которая вызывает внешний документ, тем самым требуя вмешательства менеджера сущностей для разрешения ссылки на внешний документ.
Декларация сущности может иметь литеральное значение или может иметь некоторую комбинацию необязательного SYSTEM
идентификатора , который позволяет парсерам SGML обрабатывать строковый референт сущности как идентификатор ресурса, и необязательного PUBLIC
идентификатора, который идентифицирует сущность независимо от какого-либо конкретного представления. В XML , подмножестве SGML , декларация сущности не может иметь PUBLIC
идентификатор без SYSTEM
идентификатора.
Когда внешняя сущность ссылается на полный документ SGML, она известна в вызывающем документе как сущность документа SGML . Документ SGML — это текстовый документ с разметкой SGML, определенной в прологе SGML (т. е. DTD и вложенных документах). Полный документ SGML включает в себя не только сам экземпляр документа, но также пролог и, необязательно, декларацию SGML (которая определяет синтаксис разметки документа и объявляет кодировку символов ). [1]
Сущность определяется через декларацию сущности в определении типа документа (DTD). Например:
<!ENTITY greeting1 "Привет, мир" > <!ENTITY greeting2 SYSTEM "file:///hello.txt" > <!ENTITY % greeting3 "¡Hola!" > <!ENTITY greeting4 "%greeting3; означает Привет!" >
Эта разметка DTD объявляет следующее:
greeting1
существует и состоит из строки Hello world
.greeting2
существует и состоит из текста, найденного в ресурсе, идентифицированном URI file:///hello.txt
.greeting3
существует и состоит из строки ¡Hola!
.greeting4
существует и состоит из строки ¡Hola! means Hello!
.Имена сущностей должны соответствовать правилам для имен SGML , и существуют ограничения на то, где можно ссылаться на сущности.
Ссылка на параметрические сущности осуществляется путем помещения имени сущности между %
и ;
. Ссылка на проанализированные общие сущности осуществляется путем помещения имени сущности между " &
" и " ;
". Ссылка на непроанализированные сущности осуществляется путем помещения имени сущности в значение атрибута, объявленного как тип ENTITY.
Общие сущности из приведенного выше примера могут быть упомянуты в документе следующим образом:
<content> <info> ' &greeting1; ' — это обычная тестовая строка. </info> <info> Содержимое hello.txt : & greeting2 ; </info> <info> На испанском языке &greeting4; </info> </content>
При анализе этот документ будет передан нижестоящему приложению так же, как если бы он был написан следующим образом, при условии, что hello.txt
файл содержит текст Salutations
:
<content> <info> « Hello world» — это обычная тестовая строка . </info> <info> Содержимое hello.txt : Приветствия </info> <info> На испанском языке ¡Hola! означает « Привет!» </info> </content>
Ссылка на необъявленную сущность является ошибкой, если не определена сущность по умолчанию. Например:
<!ENTITY #DEFAULT "Эта сущность не определена" >
Дополнительные конструкции разметки и параметры процессора могут влиять на то, будут ли и как обрабатываться сущности. Например, процессор может опционально игнорировать внешние сущности.
Стандартные наборы сущностей для SGML и некоторых его производных были разработаны как мнемонические устройства, чтобы облегчить создание документов, когда есть необходимость использовать символы, которые нелегко набрать или которые не поддерживаются широко устаревшими кодировками символов. Каждая такая сущность состоит всего из одного символа из Универсального набора символов . Хотя на любой символ можно ссылаться с помощью числовой ссылки на символ , ссылка на сущность символа позволяет ссылаться на символы по имени, а не по кодовой точке .
Например, HTML 4 имеет 252 встроенных символьных сущности, которые не нужно явно объявлять, в то время как XML имеет пять. XHTML имеет те же пять, что и XML, но если его DTD используются явно, то он имеет 253 ( '
что является дополнительной сущностью сверх тех, что есть в HTML 4).