"Kako dodati stil XML-u" je Srpski prevod originalne i zvanične verzije W3C dokumenta "How to add style to XML" koji se nalazi na adresi http://www.w3.org/Style/styling-XML.en.html. Tekst je preveo arhitekta Danilo, a prevod proverio Lazar. Prevod može sadržati greške. Za dodatne relevantne prevode W3C dokumenata, posetite ovaj link. Ako vam je ova stranica bila od koristi, posetite jedinstven anoniman internet forum.
Ћирилица | Latinica

Kako dodati stil XML-u

(Ova strana koristi CSS stilske fajlove)

Stil

Koji bih trebao da koristim?

spoljni

CSS

ugrađeni

XSL

CSS2 Preporuka sadrži kratak tutorijal o korišćenju CSS-a sa XML-om (pogledajte § 2.2). U vreme kada je CSS2 pisan, zvanična specifikacija za stil XML-u nije bila spremna. Ovde je materijal koji je taj tutorijal trebao da sadrži. Primetite da primeri koriste CSS, ali u većini slučajeva stilska pravila takođe mogu da se pišu u XSL-u.

Spoljašnji stilski fajlovi

Savet: probajte ovo u svom brauzeru

HTML ima link elemenat za linkovanje ka spoljašnjim stilskim fajlovima, ali nemaju svi formati zasnovani na XML-u takav elemenat. Ako ne postoji odgovarajući elemenat, možete i dalje da priključite spoljašnji stilski fajl pomoću xml-stylesheet instrukcije za procesiranje ovako:

<?xml-stylesheet href="my-style.css" type="text/css"?>
... ostatak dokumenta ovde...

Ova instrukcija za procesiranje (PI) mora doći pre prvog elementa dokumenta. type="text/css" nije obavezan, ali pomaže brauzeru: ako ne podržava CSS, zna da neće morati da učita taj fajl.

Kao i sa link elementom HTML-a, mogu postojati višestruke xml-stylesheet instrukcije za procesiranje i one mogu imati atribute za obeležavanje tipa, medijuma i naslova.

Evo većeg primera. Pretpostavimo da imamo tri stilska fajla, jedan koji postavlja osnovni prezentacioni tip svakog elementa (liniski, blok, elemenat liste, itd.) i druga dva koji postavljaju boje i margine. Dva poslednja su alternative jedan drugom, i čitaoc dokumenta može izabrati koji oće da koristi. Osim kad se dokumenat štampa, u kojem slučaju mi želimo da koristimo samo poslednji stil. Ovde je uobičajen stilski fajl:

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

Ovo je jedan od mogućih stilova, u fajlu nazvanom "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 }

A ovo je drugi, nazvan "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 dokumenat sa ova tri stilska fajla linkovana ka njemu izgleda ovako:

<?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>Johan Nikolaus Forkel</AUTHOR>

  <PARA>
    Jedno veče, baš dok je spreman uzimao svoju
    <INSTRUMENT>flautu</INSTRUMENT> i kad su njegovi muzičari su bili okupljeni, 
oficir mu je doneo listu nepoznatih lica koja su bila stigla.
  </PARA>
</ARTICLE>

Za više detalja, pogledajte W3C Preporuku “Priključivanje Stilskih Fajlova XML dokumentima.”

Ugrađeni stilski fajlovi

Savet: probajte u svom brauzeru

HTML ima style elemenat koji dozvoljava stilsim fajlovima da budu ugrađeni direktno u HTML fajl, bez potrebe za spoljnim fajlom. U nekim slučajevima to je lakše, naročito kada je stilski fajl veoma specifičan datom dokumentu.

Većina formata zasnovanih na XML-u neće imati takav elemenat, ali iste PI koje linkuju ka spoljnim stilskim fajlovima mogu da se iskoriste da linkuju ka stilskim fajlovima koji su ugrađeni u sam dokumenat. Od Februara 2006, i dalje postoje tehnički problemi sa ovime, i ne postoji formalna specifikacija. Na primer:

<?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>Frederik Veliki susreće Baha</HEADLINE>
  ...
</ARTICLE>

U ovom slučaju type="text/css" atribut mora postojati, inače brauzer (ili neki drugi program) mora da pogađa stilski jezik. xml-stylesheet PI sada pokazuje ne ka spoljašnjem stilskom fajlu, nego ka elementu unutar samog dokumenta. Taj elemenat je identifikovan sa id atributom koji služi kao meta linka. (U zavisnosti od konkretnog XML formata, id atribut se može zvati drugačije; u nekim formatima možda i neće postojati odgovarajući atribut.)

Nerešeni problemi

W3C Preporuka “Priključivanje Stilskih Fajlova XML dokumentima” ne definiše slučaj ugrađenih stilskih fajlova, mada to deluje kao razumno tumačenje da se omoguće URL fragmenti (počevši od “#”). U ovom momentu, početkom 2006-te, još uvek postoje nerešeni problemi i ne postoji objavljena specifikacija. Problemi su sledeći:

  1. Zato što ugrađen stilski fajl nije učitan posebno sa servera, server ne može da kaže brauzeru kojeg je formata stilski fajl. Zato, type atribut je neophodan u ovom slučaju. Ne definisano je šta se događa ako je atribut izostavljen: dali je stilski fajl ignorisan? da li se pretpostavlja da je u pitanju CSS? da li postoji neki algoritam koji određuje jezik?
  2. U većini formata zasnovanih na XML-u, identifikator fragmenata identifikuje kompletan elemenat, ne samo sadržaj elementa. Ali stilski fajl koji počinje sa <ARTICLE> nije ispravan CSS, tako da se čini da treba da postoji dodatno pravilo da identifikator fragmenata koji se koristi u PI stilskog elementa pokazuje ka sadržaju elementa, ne ka samom elementu.
  3. Slično, nije definisano šta se dešava ako postoji pod elemenat unutar elementa ka kome se pokazuje. Da li se stilski fajl sadrži od svog sadržaja u svim elementima koji su uključeni? Od sadržaja samo prvog elementa? Ili je ovo greška i ceo elemenat se ignoriše?
  4. U gornjem primeru, URL je pokazivao ka samom dokumentu. Činjenica da je brauzer u stanju da pogleda taj URL ukazuje da on zna kako da parsira XML i verovatno je sposoban da nađe ukazani stilski elemenat. Ali sada razmotrite URL koji pokazuje ka fragmentu spoljašnjeg dokumenta. Da bi uspešno učitao stilski fajl, brauzer mora prvo da učita i parsira spoljašnji dokumenat i da izdvoji i parsira stilski fajl. Ali type atribut samo daje tip na jednom od dva, i stoga brauzer ne može znati dali je u stanju da koristi stilski fajl. Nije čak ni definisano dali type atribut daje tip spoljašnjeg dokumenta ili stilskog fajla uključenog u njega.
  5. PI stilskog fajla je najkorisniji sa “Generičkim XML-om,” npr., sa XML-om u formatu koji brauzer ne poznaju. Zahvaljujući stilskim fajlovima, barem će biti u stalju da pokeže nešto. Dobro poznati formati, kao što su SVG, SMIL ili XHTML, imaju svoja pravila za prezentaciju koja idu dalje od onoga što su stilski fajlovi u stanju da specificiraju. Ali postoje i druge stvari koje brauzer takođe ne zna kada se dokumenat tretira kao Generički XML: konkretno, ne zna koji atributi su ID atributi. Postoji W3C Preporuka za atribut pod nazivom xml:id i ako dokumenat sadrži atribut sa tim imenom, veoma je verovatno da će URL fragmenat da pokazuje ka jednom od tih. Ali ako ne postoje takvi atributi, brauzer mora pokušati na druge načine da ustanovi koji atributi su ID-ovi. Ako dokumenat ima DOCTYPE na vrhu i brauzer je u stanju da učita DTD ka kome on pokazuje, taj DTD će specificirati atribut. Ali brauzer možda neće biti u stanju da pročita DTD-ove ili možda neće postojati DOCTYPE.
  6. ID fragmenta je samo jedan način da se pokaže ka elementu u dokumentu. Druga W3C Preporuka definiše XPointers za identifikaciju elemenata u dokumentu bez potrebe za ID atributima. Ali razumevanje XPointers trenutno nije obavezno za brauzere koji koriste PI stilskih fajlova, i samim tim nije jasno dali brauzer može da interpretira XPointers, dali mogu, ili dali treba da ih ignorišu.

Linijski stilovi

HTML takođe dozvoljava stilovima da vudu direktno prikačeni individualnim elementima uz pomoć style atributa. Većina dokument formata zanovanih na XML-u neće imati takav atribut, mada neki dozvoljavaju karakteristike (modules) iz HTML da se koriste unutar dokumenta.

Class atributi

Savet: probajte u svom brauzeru

class atribut koji vam omogućava da kreirate podklase elemenata u HTML takođe nije verovatno da će te ga naći u većini dokumenata zasnovanih na XML formatu. Naravno, CSS vam dopušta da izaberete elemente zasnovane na bilo kom atributu, ne samo class, ali sintaksa nije tako ugodna.

Evo primera. Ako postoji class atribut i format dokumenta definiše da to radi kao u HTML-u, mi možemo koristiti notaciju sa tačkom. (Stoga, ovaj konkretan primer neće raditi jer <doc> nije format koji brauzeri znaju kao nešto što ima class)

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p.note { color: red }
  </s>
  <p>Neki tekst... </p>

  <p class="note">Poruka... </p>
</doc>

Ako format dokumenta ne specificira da class stvara podklasu, onda vi treba da koristite duže selektore sa "[ ]":

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>

  <s id="s1">
    s { display: none }
    p { display: block }
    p[class~=note] { color: red }
  </s>
  <p>Neki tekst... </p>
  <p class="note">Poruka... </p>

</doc>

Ako ne postoji atribut class, ali ima nešto drugo što možemo da koristimo, atribut selektor "[ ]" i dalje važi:

probajte u svom brauzeru

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>

  <s id="s1">
    s { display: none }
    p { display: block }
    p[warning="yes"] { color: red }
  </s>
  <p>Neki tekst... </p>
  <p warning="yes">Poruka... </p>

</doc>
Bert Bos
Napravljeno 29. Februara 2000. (poslednja izmena: $Date: 2007/09/07 11:52:10 $)