"Како додати стил XML-у" је Српски превод оригиналне и званичне верзије W3C документа "How to add style to XML" који се налази на адреси http://www.w3.org/Style/styling-XML.en.html. Текст је превео архитекта Данило, а превод проверио Лазар. Превод може садржати грешке. За додатне релевантне преводе W3C докумената, посетите овај линк. Ако вам је ова страница била од користи, посетите јединствен анониман интернет форум.
Ћирилица | Latinica

Како додати стил XML-у

(Ова страна користи CSS стилске фајлове)

Стил

Који бих требао да користим?

спољни

CSS

уграђени

XSL

CSS2 Препорука садржи кратак туторијал о коришћењу CSS-а са XML-ом (погледајте § 2.2). У време када је CSS2 писан, званична спецификација за стил XML-у није била спремна. Овде је материјал који је тај туторијал требао да садржи. Приметите да примери користе CSS, али у већини случајева стилска правила такође могу да се пишу у XSL-у.

Спољашњи стилски фајлови

Савет: пробајте ово у свом браузеру

HTML има link елеменат за линковање ка спољашњим стилским фајловима, али немају сви формати засновани на XML-у такав елеменат. Ако не постоји одговарајући елеменат, можете и даље да прикључите спољашњи стилски фајл помоћу xml-stylesheet инструкције за процесирање овако:

<?xml-stylesheet href="my-style.css" type="text/css"?>
... остатак документа овде...

Ова инструкција за процесирање (PI) мора доћи пре првог елемента документа. type="text/css" није обавезан, али помаже браузеру: ако не подржава CSS, зна да неће морати да учита тај фајл.

Као и са link елементом HTML-a, могу постојати вишеструке xml-stylesheet инструкције за процесирање и оне могу имати атрибуте за обележавање типа, медијума и наслова.

Ево већег примера. Претпоставимо да имамо три стилска фајла, један који поставља основни презентациони тип сваког елемента (линиски, блок, елеменат листе, итд.) и друга два који постављају боје и маргине. Два последња су алтернативе један другом, и читаоц документа може изабрати који оће да користи. Осим кад се докуменат штампа, у којем случају ми желимо да користимо само последњи стил. Овде је уобичајен стилски фајл:

/* common.css */
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR, PARA { display: block }

Ово је један од могућих стилова, у фајлу названом "modern.css":

/* modern.css */
ARTICLE { font-family: sans-serif; background: white; color: black }
AUTHOR { margin: 1em; color: red }
HEADLINE { text-align: right; margin-bottom: 2em }
PARA { line-height: 1.5; margin-left: 15% }
INSTRUMENT { color: blue }

А ово је други, назван "classic.css":

/* classic.css */
ARTICLE { font-family: serif; background: white; color: #003 }
AUTHOR { font-size: large; margin: 1em 0 }
HEADLINE { font-size: x-large; margin-bottom: 1em }
PARA { text-indent: 1em; text-align: justify }
INSTRUMENT { font-style: italic }

XML докуменат са ова три стилска фајла линкована ка њему изгледа овако:

<?xml-stylesheet href="common.css" type="text/css"?>
<?xml-stylesheet href="modern.css" title="Modern" media="screen"
  type="text/css"?>
<?xml-stylesheet href="classic.css" alternate="yes"
  title="Classic" media="screen, print" type="text/css"?>
<ARTICLE>
  <HEADLINE>Fredrick the Great meets Bach</HEADLINE>
  <AUTHOR>Јохан Николаус Форкел</AUTHOR>
  <PARA>
    Једно вече, баш док је спреман узимао своју
    <INSTRUMENT>флауту</INSTRUMENT> и кад су његови музичари су били окупљени, 
официр му је донео листу непознатих лица која су била стигла.
  </PARA>
</ARTICLE>

За више детаља, погледајте W3C Препоруку “Прикључивање Стилских Фајлова XML документима.”

Уграђени стилски фајлови

Савет: пробајте у свом браузеру

HTML има style елеменат који дозвољава стилсим фајловима да буду уграђени директно у HTML фајл, без потребе за спољним фајлом. У неким случајевима то је лакше, нарочито када је стилски фајл веома специфичан датом документу.

Већина формата заснованих на XML-у неће имати такав елеменат, али исте PI које линкују ка спољним стилским фајловима могу да се искористе да линкују ка стилским фајловима који су уграђени у сам докуменат. Од Фебруара 2006, и даље постоје технички проблеми са овиме, и не постоји формална спецификација. На пример:

<?xml-stylesheet href="#style" type="text/css"?>
<ARTICLE>
  <EXTRAS id="style">
    INSTRUMENT { display: inline }
    ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
    EXTRAS { display: none }
  </EXTRAS>
  <HEADLINE>Фредерик Велики сусреће Баха</HEADLINE>
  ...
</ARTICLE>

У овом случају type="text/css" атрибут мора постојати, иначе браузер (или неки други програм) мора да погађа стилски језик. xml-stylesheet PI сада показује не ка спољашњем стилском фајлу, него ка елементу унутар самог документа. Тај елеменат је идентификован са id атрибутом који служи као мета линка. (У зависности од конкретног XML формата, id атрибут се може звати другачије; у неким форматима можда и неће постојати одговарајући атрибут.)

Нерешени проблеми

W3C Препорука “Прикључивање Стилских Фајлова XML документима” не дефинише случај уграђених стилских фајлова, мада то делује као разумно тумачење да се омогуће URL фрагменти (почевши од “#”). У овом моменту, почетком 2006-те, још увек постоје нерешени проблеми и не постоји објављена спецификација. Проблеми су следећи:

  1. Зато што уграђен стилски фајл није учитан посебно са сервера, сервер не може да каже браузеру којег је формата стилски фајл. Зато, type атрибут је неопходан у овом случају. Не дефинисано је шта се догађа ако је атрибут изостављен: дали је стилски фајл игнорисан? да ли се претпоставља да је у питању CSS? да ли постоји неки алгоритам који одређује језик?
  2. У већини формата заснованих на XML-у, идентификатор фрагмената идентификује комплетан елеменат, не само садржај елемента. Али стилски фајл који почиње са <ARTICLE> није исправан CSS, тако да се чини да треба да постоји додатно правило да идентификатор фрагмената који се користи у PI стилског елемента показује ка садржају елемента, не ка самом елементу.
  3. Слично, није дефинисано шта се дешава ако постоји под елеменат унутар елемента ка коме се показује. Да ли се стилски фајл садржи од свог садржаја у свим елементима који су укључени? Од садржаја само првог елемента? Или је ово грешка и цео елеменат се игнорише?
  4. У горњем примеру, URL је показивао ка самом документу. Чињеница да је браузер у стању да погледа тај URL указује да он зна како да парсира XML и вероватно је способан да нађе указани стилски елеменат. Али сада размотрите URL који показује ка фрагменту спољашњег документа. Да би успешно учитао стилски фајл, браузер мора прво да учита и парсира спољашњи докуменат и да издвоји и парсира стилски фајл. Али type атрибут само даје тип на једном од два, и стога браузер не може знати дали је у стању да користи стилски фајл. Није чак ни дефинисано дали type атрибут даје тип спољашњег документа или стилског фајла укљученог у њега.
  5. PI стилског фајла је најкориснији са “Генеричким XML-ом,” нпр., са XML-ом у формату који браузер не познају. Захваљујући стилским фајловима, барем ће бити у стаљу да покеже нешто. Добро познати формати, као што су SVG, SMIL или XHTML, имају своја правила за презентацију која иду даље од онога што су стилски фајлови у стању да специфицирају. Али постоје и друге ствари које браузер такође не зна када се докуменат третира као Генерички XML: конкретно, не зна који атрибути су ID атрибути. Постоји W3C Препорука за атрибут под називом xml:id и ако докуменат садржи атрибут са тим именом, веома је вероватно да ће URL фрагменат да показује ка једном од тих. Али ако не постоје такви атрибути, браузер мора покушати на друге начине да установи који атрибути су ID-ови. Ако докуменат има DOCTYPE на врху и браузер је у стању да учита DTD ка коме он показује, тај DTD ће специфицирати атрибут. Али браузер можда неће бити у стању да прочита DTD-ове или можда неће постојати DOCTYPE.
  6. ID фрагмента је само један начин да се покаже ка елементу у документу. Друга W3C Препорука дефинише XPointers за идентификацију елемената у документу без потребе за ID атрибутима. Али разумевање XPointers тренутно није обавезно за браузере који користе PI стилских фајлова, и самим тим није јасно дали браузер може да интерпретира XPointers, дали могу, или дали треба да их игноришу.

Линијски стилови

HTML такође дозвољава стиловима да вуду директно прикачени индивидуалним елементима уз помоћ style атрибута. Већина документ формата занованих на XML-у неће имати такав атрибут, мада неки дозвољавају карактеристике (modules) из HTML да се користе унутар документа.

Class атрибути

Савет: пробајте у свом браузеру

class атрибут који вам омогућава да креирате подкласе елемената у HTML такође није вероватно да ће те га наћи у већини докумената заснованих на XML формату. Наравно, CSS вам допушта да изаберете елементе засноване на било ком атрибуту, не само class, али синтакса није тако угодна.

Ево примера. Ако постоји class атрибут и формат документа дефинише да то ради као у HTML-у, ми можемо користити нотацију са тачком. (Стога, овај конкретан пример неће радити јер <doc> није формат који браузери знају као нешто што има class)

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p.note { color: red }
  </s>
  <p>Неки текст... </p>
  <p class="note">Порука... </p>
</doc>

Ако формат документа не специфицира да class ствара подкласу, онда ви треба да користите дуже селекторе са "[ ]":

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[class~=note] { color: red }
  </s>
  <p>Неки текст... </p>
  <p class="note">Порука... </p>
</doc>

Ако не постоји атрибут class, али има нешто друго што можемо да користимо, атрибут селектор "[ ]" и даље важи:

пробајте у свом браузеру

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[warning="yes"] { color: red }
  </s>
  <p>Неки текст... </p>
  <p warning="yes">Порука... </p>
</doc>
Берт Бос
Направљено 29. Фебруара 2000. (последња измена: $Date: 2007/09/07 11:52:10 $)