XML 1.0 обеспечивает различные типы сущностей,
называемые фрагментами содержания, которые могут использоваться как в
конструкциях DTD (параметрические сущности), так и в экземплярах документов. В Разделе 2.7, мы показали, как именованные группы
подражают параметричеким сущностям. В этом разделе мы покажем, как сущности могут
быть объявлены в экземплярах документов, и как функциональные эквиваленты сущностей могут
быть объявлены в схемах.
Предположим, мы хотим объявить и использовать сущность в экземпляре документа, и этот документ также ограничен схемой. Например:
Объявление и
ссылка на сущность в экземпляре документа.
<?xml version="1.0" ?> <!DOCTYPE PurchaseOrder [ <!ENTITY eacute "é"> ]> <purchaseOrder xmlns="http://www.example.com/PO1" orderDate="1999-10-20> <!-- etc. --> <city>Montréal</city> <!-- etc. --> </purchaseOrder>
Здесь, мы объявляем сущность с
именем eacute, как часть внутреннего подмножества (DTD), и ссылаемся на
эту сущност в содержании элемента city
. Обратите внимание, когда данный экземпляр документа
обрабатывается, сущность будет разименована прежде, чем будет проведена
проверка правильности схемы. Другими словами, обработчик схемы определит
правильность использования элемента
city
, использующего
Montréal как значение элемента.
Подобный, но не идентичный
результат, мы можем достигнуть, объявляя элемент в схеме, и устанавливая
содержание элемента следующим образом:
<xsd:element name="eacute"
type="xsd:token" fixed="é"/>
Теперь этот элемент может быть
использован в экземпляре документа:
Использование
элемента вместо объекта в документе.
<?xml version="1.0" ?> <purchaseOrder xmlns="http://www.example.com/PO1" xmlns:c="http://www.example.com/characterElements" orderDate="1999-10-20> <!-- etc. --> <city>Montr<c:eacute/>al</city> <!-- etc --> </purchaseOrder>
В этом
случае обработчик схемы обработает два элемента, элемент city
и элемент eacute, содержанием, которого является
единственный символ é. Обратите внимание, что дополнительный
элемент усложнит строковое
соответствие. Две формы
имени "Montréal", представленные выше в этих двух примерах не будут
соответствовать друг другу, используя обычные методы строкового сравнения.