Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распред-ые СОИ.doc
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
591.87 Кб
Скачать

Корневое правило

Разбор любого XSL- документа всегда начинается с правила для корневого элемента, в котором определяется область всего разбираемого XML документа и поэтому тэги форматирования, помещенные сюда, будут действовать на весь документ в целом. Для обозначения корневого правила необходимо включить в него элемент <root/>;. Например, для того, чтобы задать тэг <body> для формируемой нами выходной HTML- страницы, мы можем использовать следующий фрагмент:

<xsl>

<rule>

<root/>

<html><head><title> Flowers</title></head>

<body bgcolor="white" link="blue" alink="darkblue" vlink="darckblue">

<children/>

</body>

</html>

</rule>

</xsl>

В этом примере при помощи инструкций <root/> и <children/> мы определили ряд начальных и конечных HTML-тэгов для нашей страницы, между которыми затем в процессе рекурсивного обхода XSL- анализатора будут помещены остальные элемента документа.

В том случае, если мы не определяем правило для корневого элемента, разбор документа начнется с первого правила с инструкцией <target-element>(для оформления же заголовка документа будет использован образец форматирования, применяющийся по умолчанию).

Отношения между элементами

Дочерние элементы в XML-документе всегда находятся внутри области, определяемой тэгами родительского по отношению к ним элемента. Для того, чтобы точно указать месторасположение обрабатываемого элемента в дереве XML, в XSL используется дополнительный тэг <element>;. При помощи него можно указать, какие элементы должны предшествовать текущему, а какие - следовать после него. Например, в следующем фрагменте определяется, что форматирование элемента <title> будет зависеть от его месторасположения внутри XML-документа:

<xsl>

<rule>

<element type="journal">

<target-element type="title"/>

</element>

<center>

<hr width=80%>

<children/>

<hr width=80%>

</center>

</rule>

<rule>

<element type="article">

<target-element type="title"/>

</element>

<td align="center"><p color="blue" font-size="14" font-style="italic"><children/>

</td>

</rule>

</xsl>

Как видно из примера, если в XML- документе будет найден элемент <title>, являющийся дочерним по отношению к элементу <article> (название статьи), то его форматирование будет несколько отличаться от элемента <title>, расположенного внутри тэгов <journal>

Приоритеты правил

В том случае, если внутри XSL- документа встречается несколько правил для одного и того же элемента, то msxsl будет использовать то из них, которое более точно определяет позицию данного элемента. Т.е. если XSL- документ содержит следующие правила:

<rule>

<element type="journal">

<target-element type="title"/>

</element>

<center>

<hr width=80%>

<children/>

<hr width=80%>

</center>

</rule>

<rule>

<target-element type="title"/>

<b>

<children/>

</b>

</rule>

, то при использовании этой стилевой таблицы в случае, когда элемент <title> является потомком <journal>, к нему будет применено первое правило. Для любых же других элементов будет действовать правило без тэга <element>

В общем случае приоритет правил определяется следующим образом (в порядке убывания приоритета):

  • правила, помеченные специальным тэгом <importance>

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

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

  • правила, имеющие наибольшую вложенность, определяемую тэгом <element>

  • правила, использующие атрибут type совместно с <target-element>

  • правила, в которых отсутствует атрибут type в <target-element> или <element>

  • правила с более высоким приоритетом, задаваемым атрибутом priority тэга <rule>

  • правила с наибольшим значением квалификаторов <only>, <position>, <attribute>