» Xml для новичков
» Главная страница
»
К оглавлению
Корневое правило
Разбор любого 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>
Следующий
урок
|