Tento dokument je překladem článku «How to add style to XML».
Původní verze dokumentu se vyskytuje pouze na webových stránkách W3C http://www.w3.org/Style/styling-XML
Tento překlad není oficiální dokument W3C.
Veškerá autorská práva W3C.
Tento dokument může obsahovat překladatelské chyby a překlepy.
Podle: Peter Vrzak (Adsense ID Lookup, SeoSue)
Místní: http://picscrunch.com/manual/styling-XML
(tato stránka využívá CSS kaskádové styly)
Doporučení CSS2 obsahuje stručný návod na použití CSS s XML (viz § 2.2). V době, kdy byl napsán CSS2, oficiální specifikace stylu v XML ještě nebyla hotova. Zde naleznete to, co měl návod obsahovat. Všimněte si, že příklady používají CSS, ale ve většině případů mohou být pravidla stylů napsána také v XSL.
Tip: vyzkoušejte to ve svém prohlížeči
HTML má link
element
pro odkázání se na externí soubor stylů, ale ne každý formát založený na XML bude mít
takový element. Pokud neexistuje vhodný element, stále můžete připojit
externí soubor stylů pomocí xml-stylesheet
zpracování takto:
<?xml-stylesheet href="my-style.css" type="text/css"?> ... Zbytek dokumentu ...
Instrukce pro zpracování (PI) musí být prvním tagem
dokumentu. type="text/css"
není nutné, ale pomáhá
to prohlížeči: pokud nepodporuje CSS, ví, že tento soubor nemusí
stahovat
Stejně jako u link
elementu HTML, můžete využít více
xml-stylesheet
PI a ty budou moci mít atributy pro nastavení type,
medium a title.
Tady je větší ukázka. Předpokládejme, že máme tři soubory stylů, jeden, který nastaví základní zobrazení každého elementu (inline, block, list-item, atd.) a dva další, které nastavují barvu a okraje. Dva posledně jmenované jsou svými alternativami, a uživatel si může vybrat, který z nich zvolí. Jedinou vyjímkou je tisk dokumentu, kdy chceme, aby byl použit pouze poslední styl. Tady je první common style sheet:
/* common.css */ INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
Toto je první alternativní styl, pojmenovaný "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 tady je druhý, 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 dokument s těmito třemi soubory stylů vypadá takto:
<?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>Johann Nikolaus Forkel</AUTHOR> <PARA> One evening, just as he was getting his <INSTRUMENT>flute</INSTRUMENT> ready and his musicians were assembled, an officer brought him a list of the strangers who had arrived. </PARA> </ARTICLE>
Pro více informací, navštivte W3C Doporučení “Asociativní styly a XML dokument ”
Tip: vyzkoušejte to ve svém prohlížeči
HTML má style
element, který umožňuje soubory stylů
vložit přímo do HTML souboru bez potřeby externího souboru.
V některých případech je to jednodušší, především, je-li tento soubor stylů
jedinečný pro tento dokument.
Většina formátů založených na XML nebude mít takový element, ale stejné PI , které odkazuje na externí soubor stylů, může být i zde použito pro odkázání se na soubory stylů které jsou vloženy v samotném dokumentu. V únoru 2006, tu jsou stále jisté technické problémy s tímto spojené, a neexistuje žádná formální specifikace. Například:
<?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>Fredrick the Great meets Bach</HEADLINE> ... </ARTICLE>
V tomto případě type="text/css"
atribut musí být přítomen,
jinak prohlížeč (či jiný program) musí jazyk souboru stylů pouze hádat.
xml-stylesheet
PI nyní neodkazuje na externí soubor stylů,
ale na element dokumentu samotného. Tento element je identifikován
id
atribudem, který slouží jako cíl odkazu.
(V závislosti na konkrétním XML formátu může být id
atribut nazván jinak; v některých formátech vůbec vhodný atribut
být nemusí.)
W3C doporučení “Asociativní soubory stylů v XML documentech ” nedefinuje případy vložených souborů stylů, ačkoli to vypadá jako rozumné vyvození umožňující užití URL zlomků (začínajících “#”). Touto dobou, začátkem roku 2006, tu jsou stále nevyřešené problémy a chybí jakékoli tištěné specifikce. Problémy jsou následující:
type
atribut je vyžadován v tomto případě.
Není definováno, co se stane, je-li atribut vynechán:
je soubor stylů ignorován? předpokládá se CSS? je tu nějaký
algoritmus pro určení jazyka?
<ARTICLE>
není správným CSS, takže to
vypadá, že zde musí být speciální pravidlo které zlomkový identifikátor
odkazuje na obsah elementu, ne na samotný element.
type
atribut dokumentu dává typ pouze jednoho ze dvou,
takže prohlížeč nemůže vědět, je-li schopen soubor stylů použít.
Ani není definováno, jestli type
atributy udávají
typ externího dokumentu or nebo typ souboru stylů v něm vloženém.
xml:id
a pokud
obsahuje atributy tohoto názvu, je velmi pravděpodobné, že
URL zlomek odkazuje na jeden z nich. Ale pokud tu nejsou takové
atributy, prohlížeč musí zkusit jiné významy aby určil které atributy jsou
ID. Pokud má dokument DOCTYPE na začátku a prohlížeč je schopen
načíst DTD na který odkazuje, tento DTD bude specifikovat atribut.
Prohlížeč ale nemusí být schopen číst DTD nebo tam nemusí být DOCTYPE.
HTML také umožňuje aby byly styly přiřazeny přímo k individuálnímu elementu styles
použitím style
atributu. Většina formátů založených na XML nebude mít takový atribut, ačkoli některé mohou povolovat prvky (moduly) HTML použité uvnitř dokumentu.
Tip: vyzkoušejte to ve vašem prohlížeči
atribut class
který umožnuje vytvořit podtřídy elementů
HTML také pravděpodobně nebude dostupný ve většině formátů založených na XML.
Samozřejmě že CSS vám umožní označit elementy na základě jakéhokoli
atributu, nejen class
, ale syntax je méně vhodná.
Zde je příklad. Máme-li atribut class
a
formát dokumentu definuje, že funguje jako v HTML, můžeme použít tečkový zápis. (Takže tento konkrétní příklad nebude fungovat, protože <doc> není formát, který prohlížeče znají jako něco, co má atribut class
)
<?xml-stylesheet href="#s1" type="text/css"?> <doc> <s id="s1"> s { display: none } p { display: block } p.note { color: red } </s> <p>Nějaký text... </p> <p class="note">Poznámka... </p> </doc>
Pokud formát dokumentu nespecifikuje, že class
vytváří
podtřídy, pak budete muset použít delší selektory - "[ ]":
<?xml-stylesheet href="#s1" type="text/css"?> <doc> <s id="s1"> s { display: none } p { display: block } p[class~=note] { color: red } </s> <p>Nějaký text... </p> <p class="note">Poznámka... </p> </doc>
Pokud tu není žádný class
attribut, ale je tu něco jiného co můžeme
použít, atributové selektory "[ ]" se budou aplikovat i zde:
vyzkoušejte to ve vašem prohlížeči
<?xml-stylesheet href="#s1" type="text/css"?> <doc> <s id="s1"> s { display: none } p { display: block } p[warning="yes"] { color: red } </s> <p>Nějaký text... </p> <p warning="yes">Poznámka... </p> </doc>