Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

Компания "слон & Слон".

 </product>

</advert>

На самом же деле в элементе

product
заключен текст

Продается серый слон весом > 5 тонн!

Компания "Слон & Слон".

Довольно часто бывает необходимо использовать в документе символы набора Unicode, обращаясь к ним по десятичным или шестнадцатеричным кодам. В таких случаях можно использовать символьные сущности.

Символьная сущность (или, как ее еще называют, символьная ссылка) записывается в виде

&#код;
или
&#xкод;
, где
код
— десятеричный и шестнадцатеричный Unicode-код символа в первом и втором случае соответственно.

Пример

Фраза "

Миру-мир!
" может быть записана с использованием символьных сущностей следующим образом:

&#х41С;&#х438;&#х440;&#х443; - &#1084;&#1080;&#1088;!

Первое слово, "

Миру
" записано с использованием шестнадцатеричных unicode-кодов кириллицы, второе слово, "
мир
", записано с использованием десятичных кодов.

Внешние сущности содержатся во внешних файлах. Если ссылка на внешнюю сущность появляется в документе, то на ее место копируется содержимое внешнего файла.

Определение внешней сущности имеет следующий синтаксис:

<!ENTITY имя SYSTEM "URI">

В этом определении

имя
точно так же, как и во внутренней сущности определяет имя сущности, в то время как
URI
определяет абсолютное или относительное местоположение файла.

Пример

Предположим, что мы создали файл

animal.ent
со следующим содержанием:

огромное серое животное

Для того чтобы использовать содержимое этого файла в документе, мы должны объявить внешнюю сущность следующим образом:

<!ENTITY animal SYSTEM "ent/animal.ent">

где

ent/animal
есть относительный путь до файла
animal.ent
. Если бы мы расположили файл на сервере, скажем,
www.animalhost.com
, сущность могла бы быть объявлена как

<!ENTITY animal SYSTEM "http://www.animalhost.com/animal.ent">

В документе ссылаться на объявленную внешнюю сущность мы будем точно так же, как ссылались бы на внутреннюю сущность:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE advert [

 <!ENTITY animal SYSTEM "ent/animal.ent">

]>

<advert>

 <product title="слон">

Продается &animal; весом &gt; 5 тонн!

Рождественские скидки!

 </product>

</advert>

В этом случае элемент

product
будет иметь текст

Продается огромное серое животное весом > 5 тонн!

Рождественские скидки!

Внешняя сущность может быть также объявлена при помощи так называемого публичного идентификатора. В этом случае, при объявлении указывается не только местоположение сущности, но еще и идентификатор, который предоставляет программному

обеспечению, обрабатывающему документ, некоторую дополнительную информацию. Например, в некоторых случаях XML-процессор может уже включать в себя определение внешней сущности, и ему не нужно будет получать содержимое файла, находящегося на удаленном сервере.

Такой способ определения внешней сущности имеет следующий синтаксис:

<!ENTITY имя PUBLIC "идентификатор" "URL">

Например, сущность

animal
мы можем переопределить как

<!ENTITY animal PUBLIC "-//ZOO//Elephant//Description"

 "http://www.animalhost.com/animal.ent">

Специальный процессор зоологических XML-файлов, встретив публичный идентификатор

– //ZOO//Elephant//Description
поймет, что речь идет о слоне, и не станет загружать файл
animal.ent
с удаленного сервера, вставив собственное описание слона.

Подводя итог, можно выделить следующие случаи, когда следует использовать сущности:

□ замена часто повторяющихся частей документа;

□ разбивка одного XML-документа на отдельные модули;

□ замена некоторых символов, которые иначе были бы восприняты, как разметка;

□ использование символов с соответствующими кодами Unicode.

Синтаксис использования сущностей в тексте документа довольно прост. Символьная сущность определяется продукцией

CharRef
следующим образом:

[66] CharRef ::= '&#' [0-9]+ ';' | "&#x' [0-9a-fA-F]+ ';'

CharRef
— это либо десятичная, либо шестнадцатеричная символьная сущность. В первом случае вместо имени сущности стоит набор, цифр от
0
до
9
, во втором — к этому набору добавляются буквы
a
,
b
,
c
,
d
,
e
,
f
в любом регистре символов. Ведущие нули не имеют никакого значения,
&#х0020;
точно так же, как и
&#х20;
соответствует пробельному символу.

Обычной сущности, объявленной внутри или вне документа, соответствует продукция

EntityRef
:

[68] EntityRef ::= '&' Name

Символьная и обычная сущности объединяются в продукцию

Reference
:

[67] Reference ::= EntityRef | CharRef

Здесь следует сделать небольшое отступление и сказать о том, что конструкции вида

&имя;
или
&#xкод;
, о которых мы говорили как о сущностях, на самом деле являются не сущностями, а ссылками на сущности.
&#xкод;
— это ссылка на символьную, а
&имя;
— на обычную сущность. Сама сущность — это именованный объект, к которому обрабатывающая программа должна обращаться при обработке ссылки с соответствующим именем. Однако, поскольку связь между сущностью и ссылкой на нее однозначна (одно не существует без другого), сами ссылки очень часто называют сущностями. Название продукции
Reference
переводится с английского как "ссылка", но пониматься в данном контексте может, в том числе, и как сущность.

Поделиться с друзьями: