home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 July / Chip_2000-07_cd.bin / obsahy / Chip_txt / TXT / 112-115.TXT < prev    next >
Text File  |  2000-06-06  |  13KB  |  188 lines

  1. XSL
  2. XSL = nßstroj pro prezentaci XML
  3. Nßstroj XSL slou₧φ pro prezentaci dokument∙ zapsan²ch v XML. Lze jej vÜak vyu₧φt i pro °adu jin²ch ·Φel∙à
  4.  
  5. ProΦ XML pot°ebuje XSL?
  6. Formßt XML (eXtensible Markup Language) byl nav₧en konsorciem W3C (World Wide Web Consortium) pro reprezentaci obecn²ch dokument∙. Je nav₧en tak, aby dokumenty zapsanΘ v XML byly jednoduÜe zpracovatelnΘ programem û elementy dokumentu musφ b²t snadno rozpoznatelnΘ. XML je znaΦkovacφ jazyk, a proto pou₧φvß pro vyznaΦenφ element∙ znaΦky (markups). ZnaΦky p°edstavujφ zobecn∞nΘ zßvorky, nap°.:
  7. <blok> à obsah elementu typu blok à </blok>
  8. kde <blok> je otevφracφ zßvorka (start tag) a </blok> je zavφracφ zßvorka (end tag). Pou₧itelnß sada zßvorek nenφ formßtem XML definovßna û je pouze definovßn zp∙sob zßpisu zßvorek. Uva₧me nap°. fragment XML-dokumentu typu faxovß zprßva:
  9. <fax> FAX Message
  10.   <odesilatel>Karel</odesilatel>
  11.   <adresat>Jana</adresat>
  12.   <text> ... </text>
  13. </fax>
  14. XML umo₧≥uje, aby popis pou₧itelnΘ sady zßvorek byl souΦßstφ dokumentu û k dokumentu lze p°ipojit tzv. definici typu dokumentu (DTD û Document Type Definition). Tato "metadata" stanovφ p°edepsan² obsah dokumentu. Nap°. DTD pro faxovΘ zprßvy by mohla vypadat nßsledovn∞:
  15. <?xml version="1.0" encoding="iso-8859-2" ?>
  16. <!DOCTYPE fax [
  17.     <!ELEMENT fax (odesilatel,adresat,text)> 
  18.     <!ELEMENT odesilatel #PCDATA >
  19.     <!ELEMENT adresat #PCDATA >
  20.     <!ELEMENT text #PCDATA >
  21. ]>
  22. <fax> à </fax>
  23. VyznaΦenφm zajφmav²ch polo₧ek v obsahu zprßvy jsme zφskali mo₧nost jednoduchΘ extrakce informacφ o odesilateli, adresßtovi a vlastnφm textu zprßvy. V XML vÜak nenφ nijak urΦeno, jak se majφ odesilatelΘ, adresßti a text zobrazovat. Nenφ tedy zcela z°ejmΘ, jak se mß dokument typu "fax" naformßtovat p°i prezentaci. To je problΘm, kter² se sna₧φ vy°eÜit XSL.
  24.  
  25. Co to je XSL?
  26. XSL (eXtensible Stylesheet Language) je doporuΦenφ vytvo°enΘ konsorciem W3C  jako nßstroj pro prezentaci dokument∙ zapsan²ch v XML. XSL je tedy sv²m p∙vodnφm urΦenφm nßstroj pro popis "stylesheets" û formßtovanΘ (zobrazenΘ nebo tiÜt∞nΘ) verze XML-dokument∙. Je ovÜem mo₧nΘ jej vyu₧φt i pro °adu jin²ch ·Φel∙. 
  27. Definice XSL mß dv∞ Φßsti:
  28. jazyk pro popis transformace XML-dokument∙, definici sv∞ta formßtovan²ch objekt∙ (flow objects), ve kterΘm se vyjßd°φ naformßtovan² dokument (flow object tree) û XML-slovnφk popisujφcφ sΘmantiku formßtovßnφ (v²stupu).
  29. Jeden XSL-dokument (XSL stylesheet) specifikuje prezentaci celΘ t°φdy XML-dokument∙ û  popisuje, jak se libovolnß instance tΘto t°φdy transformuje do v²stupnφho formßtovanΘho dokumentu. Naformßtovan² dokument pat°φ do sv∞ta formßtovan²ch objekt∙. Formßtovan² sv∞t mß svΘ typy objekt∙ û mß sv∙j slovnφk element∙. Pro jeho vyjßd°enφ je op∞t pou₧it formßt XML û formßtovanΘ dokumenty majφ svΘ DTD. XSL popisuje transformaci vstupnφho XML-dokumentu (nap°. libovolnΘ faxovΘ zprßvy) do v²stupnφho XML-dokumentu, kter² pou₧φvß urΦit² formßtovacφ slovnφk [nap°. do formßtovanΘ posloupnosti strßnek û pou₧φvß se XML "namespace" fo (flow objects), tj. standardn∞ se pou₧ije znaΦka <fo:page-sequence>]. 
  30. Transformace je v XSL popsßna pomocφ sady pravidel. Libovoln² vstupnφ XML-dokument danΘ t°φdy je podle t∞chto pravidel zpracovßn a prezentovßn. Proces prezentace mß dva kroky:
  31. zdrojov² XML-dokument (source tree) je transformovßn na v²sledn² document (result tree);
  32. v²sledn² dokument je interpretovßn a v²sledkem je formßtovan² v²stup (na obrazovce, papφru atd.).
  33. Nap°. pravidlo pro transformaci faxovΘ zprßvy na posloupnost strßnek by mohlo vypadat nßsledovn∞:
  34. <xsl:template match="fax">
  35.     <fo:page-sequence 
  36.         font-family="times new roman,serif"
  37.         font-size="12pt">
  38.         <xsl:process-children/>
  39.     </fo:page-sequence>
  40. </xsl:template>
  41.  
  42. Jak to °eÜφ HTML a SGML?
  43. XSL je navr₧en pro XML. Formßt XML vychßzφ ze starÜφho a obecn∞jÜφho standardu SGML (Standard Generalized Markup Language û ISO 8879). Pro definici zobrazenφ SGML-dokument∙ byl rovn∞₧ vytvo°en standard û DSSSL (Document Style Sematics and Specification Language). AvÜak podobn∞ jako je SGML slo₧it∞jÜφ ne₧ XML, je DSSSL slo₧it∞jÜφ a komplikovan∞jÜφ ne₧ XSL, co₧ je pravd∞podobn∞ p°φΦina, proΦ zatφm nedoÜlo k jeho ÜirÜφmu u₧itφ. 
  44. DSSSL, podobn∞ jako XSL, definuje sv∞t formßtovan²ch objekt∙ (flow objects), ve kterΘm se vyjßd°φ naformßtovan² dokument (flow object tree). SouΦasn∞ zavßdφ transformaΦnφ prost°edky pro p°evod SGML-dokumentu do tohoto vyjßd°enφ. Pro vyjßd°enφ formßtovanΘho dokumentu a pro popis transformace pou₧φvß DSSSL syntaxi podobnou jazyku Lisp. Naproti tomu XSL vyu₧φvß syntaxe XML. Pro ukßzku jenom fragment obdobnΘho stylu zapsanΘho v DSSSL:
  45. (element (FAX) 
  46.   (make page-sequence
  47.     font-size:    12pt
  48.     font-family:  'times new roman,serif
  49.     (process-children)))
  50. Podle standardu SGML byl navr₧en i formßt HTML (Hyper-Text Markup Language). HTML je jazyk pou₧φvajφcφ pevnou sadu znaΦek. Sada znaΦek HTML slou₧φ k vyjßd°enφ p°ibli₧nΘ prezentaΦnφ podoby dokumentu. Nap°. znaΦka <H1> à </H1> slou₧φ pro oznaΦenφ nadpisu na nejvyÜÜφ ·rovni. Tento nadpis pak vÜechny prohlφ₧eΦe HTML zobrazφ (a vytisknou se) p°ibli₧n∞ stejn²m zp∙sobem. P°esnß v²stupnφ forma dokumentu vÜak prost°ednictvφm HTML urΦena nenφ. 
  51. Pro mo₧nost p°esnΘho vyjßd°enφ stylistickΘ podoby dokumentu byl konsorciem W3C vytvo°en nßstroj CSS (Cascading Style Sheets) û nßstroj umo₧≥ujφcφ p°ipojit k HTML-dokumentu i p°esnou definici jeho podoby. Pokud bychom nap°. po₧adovali, aby elementy typu "H1" byly zobrazeny modr²m pφsmem "times new roman,serif" o velikosti 14 bod∙, definujeme pravidlo CSS:
  52. H1 { color: blue; font-size: 14pt; font-family: times new roman,serif }
  53. Takovß pravidla ulo₧φme do samostatnΘho souboru a p°ipojφme k HTML-dokumentu vazbou, nebo je p°φmo vlo₧φme do HTML-dokumentu. Nßsledujφcφ p°φklad ilustruje r∙znΘ mo₧nosti û vazbu na externφ soubor (element LINK), pomocφ elementu STYLE v hlaviΦce nebo jako atribut STYLE odstavce v t∞le HTML:
  54. <HTML>
  55.   <HEAD>
  56.     <TITLE>title</TITLE>
  57.     <LINK REL=STYLESHEET TYPE="text/css" 
  58.       HREF="http://style.com/cool" TITLE="Cool">
  59.     <STYLE TYPE="text/css">
  60.       H1 { color: blue }
  61.     </STYLE>
  62.   </HEAD>
  63.   <BODY>
  64.     <H1>Nadpis je modr²</H1>
  65.     <P STYLE="color: green">Paragraf je zobrazen zelen∞.</P>
  66.   </BODY>
  67. </HTML>
  68. Poznamenejme, ₧e definice XSL je z hlediska formßtovan²ch objekt∙ do znaΦnΘ mφry konformnφ s CSS a s DSSSL. 
  69.  
  70. Formßt XSL-dokumentu
  71. XSL-dokument se sklßdß ze sady pravidel, kterß popisujφ transformaci vstupnφho dokumentu na v²stupnφ. Pravidla obsahujφ vzorek (pattern) a akci (template). Vzorek se porovnßvß se zdrojov²m dokumentem, p°i srovnßnφ se modifikuje akce pravidla a aplikuje se na v²stupnφ strom (zdrojov² a v²stupnφ strom jsou dva r∙znΘ dokumenty). Struktura v²stupnφho dokumentu m∙₧e b²t zcela jinß ne₧ struktura zdrojovΘho dokumentu (lze p°idßvat elementy, p°euspo°ßdat po°adφ, opakovat atd.).
  72. Jak ji₧ bylo °eΦeno, XSL-dokument se reprezentuje jako XML-dokument. Lze jej tedy zpracovßvat pomocφ XML-procesoru. Pou₧φvajφ se p°itom nßsledujφcφ konvence: 
  73. XSL-znaΦky se pφÜφ mal²mi pφsmeny (nap°. <xsl> ).
  74. ZnaΦky pro v²stup v HTML (HTML "Flow Object") se pφÜφ VELK▌MI P═SMENY.
  75. XSL-dokument je dob°e vytvo°en² XML-dokument.
  76. Hodnoty atribut∙ se pφÜφ v uvozovkßch:
  77. <TABLE BORDER = "1"> 
  78. <OL COMPACT = "YES PLEASE"> 
  79. Syntaxe prßzdn²ch element∙ je <HR/>.
  80. Skripty se do dokumentu vklßdajφ pomocφ datovΘ sekce CDATA.
  81. Proto₧e je XSL-dokument dob°e vytvo°en² XML-dokument, musφ b²t ko°en uzav°en v zßvorkßch (pou₧φvß se dvojice  <xsl:stylesheet> a </xsl:stylesheet>) a vÜechny ostatnφ elementy musφ b²t do n∞j vno°eny a zßvorky musφ b²t sprßvn∞ spßrovßny.
  82. Specifikace XSL pln∞ vyu₧φvß tzv. prostor∙ jmen (name spaces). Pro seznßmenφ s XSL nenφ nutno porozum∞t tomuto mechanismu do vÜech podrobnostφ, postaΦφ nßm jednoduch² p°φklad. Podrobn² popis lze nalΘzt v literatu°e. VÜechny dokumenty odpovφdajφcφ specifikaci XSL jsou vlo₧eny do ko°ene XSL-dokumentu, kter² mß znaΦku:
  83. <xsl:stylesheet> à </xsl:stylesheet>
  84. P°φklad:
  85. <xsl:stylesheet
  86.     xmlns:xsl="http//www.w3.org/TR/WD-xsl"
  87.     xmlns:fo="http//www.w3.org/TR/WD-xsl/FO"
  88.     result-ns="fo">
  89.     àààààààà
  90. </xsl:stylesheet>
  91. Ko°en dokumentu mß v tomto p°φpad∞ atributy: xmlns:xsl (prostor jmen XSL-dokumentu jako XML-dokumentu), xmlns:fo (formßtovacφ slovnφk) a result-ns= "fo" (v²stupnφ prostor jmen). Prv² atribut je povinn² a jeho hodnota musφ b²t: 
  92. xmlns:xsl="http//www.w3.org/TR/WD-xsl". 
  93. Tento atribut slou₧φ pro procesor XSL, kter² tak poznß, ₧e vÜechny elementy s prefixem 'xsl:' majφ b²t interpretovßny dle specifikace XSL (jsou v prostoru 'xsl'). Druh² atribut je teoreticky voliteln², ale ve skuteΦnosti b²vß v∞tÜinou uveden v naznaΦenΘm tvaru. ╪φkß XSL-procesoru, ₧e elementy s prefixem 'fo:' (zkratka pro flow objects) jsou v prostoru 'fo' a ₧e formßtovßnφ vyu₧φvß formßtovacφ slovnφk dle specifikace XSL. 
  94. Narazφ-li pak procesor na  <fo:block font-size= "12pt">, °φdφ se syntaxφ specifikovanou v prostoru 'fo'. Je samoz°ejm∞ mo₧nΘ pou₧φvat jin² slovnφk (viz nap°. www.mystyle.org), je pak ale t°eba p°esv∞dΦit tv∙rce aplikacφ, aby tento formßt respektovali. T°etφ atribut result-ns="fo" °φkß XSL-procesoru, ₧e konstruovan² v²stupnφ strom (result tree) pou₧φvß slovnφk 'fo'.
  95.  
  96. Pravidla XSL-dokumentu
  97. Ka₧dΘ pravidlo XSL obsahuje vzorek a akci. Vzorek pravidla slou₧φ pro selekci uzlu (elementu) vstupnφho stromu. Selekci je mo₧no p°edepsat podle: jmΘna elementu, p°edch∙dce elementu, ID-elementu, lze vyu₧φt zßstupnΘ znaky, lze odkazovat na atributy elementu, relativnφ pozici elementu ve strom∞ nebo na unikßtnost elementu. P°esn∞jÜφ vysv∞tlenφ by vy₧adovalo popis jazyka XPath, ve kterΘm se dajφ zapisovat vzorky a akce pravidel.
  98. Akce pravidla obsahujφ p°edevÜφm elementy konstruovanΘho (formßtovanΘho) objektu, nap°. <fo:block></fo:block> vytvo°φ ve formßtovanΘm objektu blok. Lze nastavit i atributy formßtovanΘho objektu, nap°. <fo:block font-size= "16pt"> indikuje, ₧e ve v²stupnφm bloku mß b²t pou₧ito pφsmo velikosti 16 bod∙. Zp∙sob zpracovßnφ vstupnφho stromu je vyjßd°en formou specißlnφho prßzdnΘho elementu; nap°. <xsl:apply-templates/> zp∙sobφ, ₧e procesor XSL aplikuje v tomto mφst∞ vÜechna pravidla a zpracuje vÜechny potomky.
  99. Procesor XSL prochßzφ vstupnφ dokument (vstupnφ strom) a pokouÜφ se hledat vzorky  pravidel XSL-dokumentu. Pokud se poda°φ nalΘzt shodu, aplikuje akci pravidla na v²stupnφ dokument (v²stupnφ strom). Pokud je aplikovateln²ch pravidel vφce, vybere se pravidlo dle stanovenΘho postupu. Pravidla XSL majφ nßsledujφcφ obecn² formßt:
  100. <xsl:stylesheet>
  101.          <!-- zde je vzorek -->
  102.   <xsl:template ...
  103.          <!-- zde je akce -->
  104.     ...
  105.     </xsl:template>
  106. </xsl:stylesheet>
  107. P°φklad pravidla pro element typu "fax":
  108. <xsl:stylesheet>
  109.     <xsl:template match= "fax"> <!-- to je vzorek -->
  110.          <!-- a zde je akce -->
  111.        <fo:page-sequence color="red" font-size="16pt">
  112.             <apply-templates/>
  113.        </fo:page-sequence>    
  114.     </xsl:template>
  115. </xsl:stylesheet>
  116. Pokud podle tohoto pravidla zpracujeme d°φve uvedenou faxovou zprßvu, vznikne v²stupnφ dokument:
  117. <fo:page-squence color= "red" font-size="16pt">
  118.  FAX Message  
  119.  <!-- zde bude v²stup podle ostatnφch pravidel -->
  120. </fo:page-sequence>    
  121.  
  122. P°evod XML do HTML pomocφ XSL
  123. Jednou z mo₧nostφ, jak popsat zobrazenφ XML-dokument∙, je popsat pomocφ XSL jejich p°evod do HTML. P°edpoklßdejme, ₧e vstupnφ XML-dokument musφ mφt strukturu dle DTD pro faxovΘ zprßvy. P°edpis pro transformaci do HTML v XSL (XSL stylesheet) m∙₧e vypadat nßsledovn∞:
  124. <xsl:stylesheet version="1.0"
  125.                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  126.                 xmlns="http://www.w3.org/TR/xhtml1/strict">
  127. <xsl:strip-space elements="fax"/>
  128. <xsl:output method="xml" indent="yes" encoding="iso-8859-2" />
  129.  
  130. <xsl:template match="fax">
  131.  <html>
  132.    <head>
  133.      <title>
  134.        <xsl:text>FAX Message</xsl:text>
  135.      </title>
  136.    </head>
  137.    <body>
  138.      <b>FAX Message</b>
  139.      <xsl:apply-templates/>
  140.    </body>
  141.  </html>
  142. </xsl:template>
  143.  
  144. <xsl:template match="fax/odesilatel">
  145.   <h1> Od:
  146.     <xsl:apply-templates/>
  147.   </h1>
  148. </xsl:template>
  149.  
  150. <xsl:template match="fax/adresat">
  151.   <h1> Komu:
  152.     <xsl:apply-templates/>
  153.   </h1>
  154. </xsl:template>
  155.  
  156. <xsl:template match="fax/text">
  157.   <p>
  158.     <xsl:apply-templates/>
  159.   </p>
  160. </xsl:template>
  161.  
  162. </xsl:stylesheet>
  163. Pokud XSL-procesoru p°edlo₧φme nßsledujφcφ dokument:
  164. <!DOCTYPE fax SYSTEM "fax.dtd">
  165. <fax> FAX Message
  166.   <odesilatel>Karel</odesilatel>
  167.   <adresat>Jana</adresat>
  168.   <text> Nazdar </text>
  169. </fax>
  170. a XSL-dokument uveden² v²Üe, bude produkovßn nßsledujφcφ v²stup (v XHTML 1.0):
  171. <?xml version="1.0" encoding="iso-8859-2"?>
  172. <html xmlns="http://www.w3.org/TR/xhtml1/strict">
  173. <head>
  174. <title>FAX Message</title>
  175. </head>
  176. <body> 
  177. <b>FAX Message</b>
  178. <h1>Od: Karel</h1>
  179. <h1>Komu: Jana</h1>
  180. <p>Nazdar</p>
  181. </body>
  182. </html>
  183.  
  184. Karel Richta, richta@fel.cvut.cz
  185.  5/00: 533-xsl (Au.Karel Richta - 8.09 n.str., 3238.44 KΦ) Strana: 1
  186.  
  187.  
  188.