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

ЖАНРЫ

Технология XSLT

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

Шрифт:
Примеры

Декларация

<!ATTLIST product

 title CDATA #REQUIRED

 id ID #IMPLIED

 quantity CDATA "1"

 value CDATA #FIXED "дорого"

 color (серый|белый) "серый">

определяет в элементе

product
следующие атрибуты:

□ обязательный атрибут

title
, содержащий символьные данные;

□ необязательный атрибут

id
, который может содержать уникальный идентификатор элемента внутри документа;

□ атрибут

quantity
,
который может и не присутствовать в документе — в этом случае его значение будет равно
1
;

□ атрибут

value
, который всегда должен иметь значение
"дорого"
;

□ атрибут

color
, который может иметь одно из значений —
"серый"
или
"белый"
, по умолчанию
"серый"
.

Разберем синтаксис определения списка атрибутов более детально. Этому определению соответствует следующее правило:

[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'

В этом правиле

Name
задает имя элемента, a
AttDef*
— набор определяемых атрибутов. Каждый атрибут задается правилом
AttDef
:

[53] AttDef ::= S Name S AttType S DefaultDecl

Здесь

Name
— имя,
AttType
— тип, a
DefaultDecl
— значение атрибута по умолчанию.

[54] AttType ::= StringType | TokenizedType | EnumeratedType

В соответствии со спецификацией, значения атрибутов бывают трех видов — строки (

StringType
), токены (
TokenizedType
) и тип перечисления (
EnumeratedType
).

[55] StringType ::= 'CDATA'

[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY'

| 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'

Тип перечисления (

EnumeratedType
) может задаваться нотациями (
NotationType
) и собственно перечислениями (
Enumeration
):

[57] EnumeratedType ::= NotationType | Enumeration

[58] NotationType ::= 'NOTATION' S

'(' S? Name (S? '|' S? Name)* S? ')'

Перечисление — это один или несколько именных токенов, которые разделены пробелами и знаками "

|
". Перечисление задает несколько возможных вариантов значения атрибута, например
(серый | белый)
.

[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'

Значение атрибута описывается продукцией

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

[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'

| (('#FIXED' S)? AttValue)

Определение сущности

Для того чтобы обеспечить достаточно выразительную мощность документов, 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
"
двойные кавычки

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

<
(знак "меньше") и
&
(амперсант) вообще не могут появляться в тексте документа иначе, кроме как в виде сущностей.

Пример

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

<advert>

 <product title="слон">

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

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