-]\N;6/
*
Tomasz Traczyk
Instytut Automatyki i Informatyki Stosowanej, Politechnika Warszawska
e-mail: ttraczyk@ia.pw.edu.pl
Abstrakt.
-]\N ;6/ eXtensible Stylesheet Language VWDQRZL X]XSHáQLHQLH ;0/ : ]DáR*HQLX PD RQ
VáX*\üGRIRUPDWRZDQLDGRNXPHQWyZZ;0/SRGREQLHMDN&66GOD+70/0R*HE\üWDN*HX*\ZDQ\GR
SU]HNV]WDáFDQLDGRNXPHQWyZ;0/RZ\FKGRWHJRV]F]HJyOQLHGREU]HQDGDMHVLSRG]ELyU;6/QD]ZDQ\
XSLT (XSL Transformations
5HIHUDW VWDQRZL NRQW\QXDFM SUH]HQWDFML SRZLFRQ\FK M]\NRZL ;0/ ]
dwóch poprzednich konferencji PLOUG [1, 2]. Przedstawiono w nim podstawy XSL i XSLT oraz zaprezen-
WRZDQRPR*OLZRFLX*\FLDW\FKM]\NyZZSRZL]DQLX]SRSXODUQ\PLSU]HJOGDUNDPL:::RUD]]'%06
Oracle.
1. Wprowadzenie
'RNXPHQWZ;0/SRZLQLHQE\ü]EXGRZDQ\QD]DVDG]LH]QDNRZDQLD]QDF]HQLRZHJRDQLHWy-
po
JUDILF]QHJR&DáDLQIRUPDFMDRVSRVRELHIRUPDWRZDQLDGRNXPHQWXSU]H]SU]HJOGDUNPXVLE\ü
]DWHPVIRUPXáRZDQDRVREQR
'R RNUHOHQLD VSRVREX SUH]HQWDFML GRNXPHQWyZ VáX* W]Z DUNXV]H VW\OLVW\F]QH stylesheets).
:áDQLH GR GHILQLRZDQLD DUNXV]\ VW\OLVW\F]Q\FK GOD GRNXPHQWyZ Z ;0/ VWZRU]RQR M]\N ;6/
(eXtensible Stylesheet Language).
3RP\VáVSRVREXSU]HWZDU]DQLDZ\NRU]\VWDQ\Z;6/SRFKRG]L]'666/Document Style Se-
mantics and Specification Language
²]ZL]DQHJR]6*0/M]\NDSRGREQHJRGRLISP-u. XSL
SU]HMáRG'666/RJyOQLGHDOHMHJRVNáDGQLD]RVWDáDZSHáQL]GHILQLRZDQDZ;0/]X*\FLHP
przestrzeni nazw (namespaces).
;6/SRP\ODQ\SLHUZRWQLHMDNRURGHNGHILQLRZDQLDDUNXV]\VW\OLVW\F]Q\FKRND]DáVLWDN*H
]QDNRPLW\PQDU]G]LHPGRSU]HNV]WDáFDQLDGRNXPHQWyZ;0/²WDNLH]DVWRVRZDQLHZ\GDMHVL
WH*V]F]HJyOQLHLQWHUHVXMFHGODSURMHNWDQWyZV\VWHPyZ]ED]DPLGDQ\FK
2. Podstawy XSL
3UH]HQWDFMDGRNXPHQWX]X*\FLHP;6/SROHJDQDWUDQVIRUPDFMLGU]HZDKLHUDUFKLL]QDF]QLNyZ
GRNXPHQWXZHMFLRZHJRQDGU]HZRW]Zformatting objects, NWyU\PSU]\SLVDQRRNUHORQHVSRVRE\
SUH]HQWDFML3U]HJOGDUNDVáX*FDGRSUH]HQWDFMLSRZLQQDUR]XPLHüM]\NRZ\FKRELHNWyZIRUPa-
tuj
cych.
2EHFQLHSU]HJOGDUNL]DSRPRFNWyU\FKSUH]HQWRZDQHVGRNXPHQW\;0/QLHPDMPR*OLZo-
FLLQWHUSUHWDFMLRSLVXIRUPDWRZDQLDZ\UD*RQHJRZSURVWZ;6/DOHVSU]\VWRVRZDQHGRSUH]HQWa-
FMLGRNXPHQWyZZ +70/ 3UDNW\F]Q\P VSRVREHP IRUPDWRZDQLD GRNXPHQWyZ ]D SRPRF ;6/
MHVWZLFSU]HWZRU]HQLHLFKQD+70/7DNWH*VNRQVWUXRZDQ\]RVWDáSU]\NáDGSRGDQ\SRQi*HM
2.1. Rzut oka na XSL
3RGDQRWXSURVW\SU]\NáDGNWyU\SR]ZDOD]RULHQWRZDüVLMDNZ\JOGDüPR*HDUNXV]VW\OLVW\Fz-
Q\Z;6/LMDNDMHVW]DVDGDMHJRG]LDáDQLD
*
Praca wspierana z
JUDQWX']LHNDQD:\G]LDáX(OHNWURQLNLL7HFKQLN,QIRUPDF\MQ\FK3ROLWHFKQLNL:Dr-
szawskiej.
120
Tomasz Traczyk
3U]\NáDG
3U]HGVWDZLRQ\SU]\NáDG
1
dokumentu w XML pochodzi z rzeczywistego systemu informacyjne-
JRZVSRPDJDMFHJR]DU]G]DQLHGX*\PZ\G]LDáHPZ\*V]HMXF]HOQL>1, 2].
2WRSU]\NáDGRZ\GRNXPHQW
<?xml version="1.0" encoding="ISO-8859-2"?>
<!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd">
<?xml-stylesheet type="text/xsl" href="konspekty.xslt"?>
.RPHQWDU]WRMHVWSU]\NáDGQU!
<eres_konspekty>
<przedmiot id=”KBD2” wersja=”1”>
<slowo_kluczowe>bazy danych</slowo_kluczowe>
<slowo_kluczowe>Oracle</slowo_kluczowe>
<konspekt>
<czesc_konspektu id=”Streszczenie”>
3!0RQRJUDILF]Q\SU]HGPLRWSRZLFRQ\ED]LHGDQ\FKLQDU]G]LRP
Oracle.
</P>
</czesc_konspektu>
F]HVFBNRQVSHNWXLG ´7UHü´!
3!2PDZLDQHVSRGVWDZRZH]DJDGQLHQLD]ZL]DQH]Z\NRU]\VWDQLHP
RDBMS Oracle7 i <I>Oracle8</I> oraz administrowaniem nimi.
</P>
3!3U]HGVWDZLDQHVWDN*HQDU]G]LDGREXGRZ\DSOLNDFML
</P>
<UL>
<LI> Oracle Forms, </LI>
<LI> Oracle Reports. </LI>
</UL>
</czesc_konspektu>
</konspekt>
</przedmiot>
</eres_konspekty>
3U]\NáDG
3RQL*V]\VNU\SWZ;6/VáX*\GRSUH]HQWDFMLNRQVSHNWXGRNXPHQWX]SU]\NáDGX
<?xml version="1.0" encoding="windows-1250"?>
7RMHVWSU]\NáDGQU!
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" encoding="windows-1250" />
<xsl:template match="eres_konspekty">
[VOFRPPHQW!:\JHQHURZDQR]DSRPRFVNU\SWXNRQVSHNW\[VOW[VOFRPPHQW!
<HTML>
<HEAD><TITLE>Konspekty</TITLE></HEAD>
<BODY>
<H1>Konspekty przedmiotów</H1>
<xsl:apply-templates select="przedmiot">
<xsl:sort select="@id" />
</xsl:apply-templates>
</BODY>
1
7HQ VDP SU]\NáDGRZ\ GRNXPHQW ;0/ E\á SUH]HQWRZDQ\ Z UHIHUDFLH QD SRSU]HGQLHM NRQIHUHQFML
PLOUG [2
@7HUD]MHGQDNEG]LHRQIRUPDWRZDQ\]DSRPRFLQQHJRVNU\SWX;6/]Z\NRU]\VWDQLHPQRw-
V]HMZHUVMLM]\ND
-]\N;6/
121
</HTML>
</xsl:template>
<xsl:template match="przedmiot">
<H2>
<xsl:value-of select="@id" />
(<xsl:value-of select="@wersja" />)
</H2>
<xsl:if test="slowo_kluczowe">
+!6áRZDNOXF]RZH+!
<TABLE BORDER="1">
<xsl:for-each select="slowo_kluczowe">
<xsl:sort select="text()"/>
<TR><TD><xsl:value-of select="."/></TD></TR>
</xsl:for-each>
</TABLE>
</xsl:if>
<xsl:apply-templates select="*[name() != 'slowo_kluczowe']"/>
<HR/>
</xsl:template>
<xsl:template match="konspekt">
<H3>Konspekt</H3>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="czesc_konspektu">
<H4>
<xsl:value-of select="@id"/>
</H4>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="P | I | UL | OL | LI">
<xsl:element name="{name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
,VWRWG]LDáDQLDSRZ\*V]HJRVNU\SWXVWDQRZLUHNXUHQF\MQHSU]HWZDU]DQLH]QDF]QLNyZ,QVWUXk-
cja
xsl:apply-templates
MHVWZ\ZRáDQLHPRZHMUHNXUHQFML$WU\EXW\
select
]DZ*DM]a-
NUHVG]LDáDQLDGRZ\EUDnych elementów dokumentu. Atrybuty
match
SRGDMZ]RU]HF]QDF]QLND
który jest przetwa
U]DQ\ ]D SRPRF GDQHJR V]DEORQX
template
:]RUFH PDM SRVWDü FLH*HN
(paths
RNUHODMF\FKPLHMVFHHOHPHQWXOXEDWU\EXWXZKLHUDUFKLF]QHMVWUXNWXU]HGRNXPHQWX
Instrukcje
value-of
SRZRGXMZáF]HQLHRGSRZLHGQLHMF]FLSU]HWZDU]DQHJRGRNXPHQWXGR
dokumentu wynikowego. Nazwy poprzedzone znakiem
@
R]QDF]DMRGZRáDQLHGRZDUWRFLDWUy-
butu.
(IHNW\ IRUPDWRZDQLD SU]\NáDGRZHJR GRNXPHQWX ]D SRPRF SRZ\*V]HJR VNU\SWX SU]HGVWDZLD
Rys. 1.
122
Tomasz Traczyk
<!--Wygenerowano za pomoc
VNU\SWX
konspekty.xslt-->
<HTML>
<HEAD>
<META http-equiv="Content-Type"
content="text/html;
charset=windows-1250">
<TITLE>Konspekty</TITLE>
</HEAD>
<BODY>
<H1>Konspekty przedmiotów</H1>
.........
</BODY>
</HTML>
Rys. 1
:\QLNIRUPDWRZDQLDGRNXPHQWX;0/]DSRPRF;6/
2.2.
=DVDGDG]LDáDQLD;6/
3U]HWZDU]DQLH]DSRPRF;6/GRW\F]\GU]HZUHSUH]HQWXMF\FKKLHUDUFKLHOHPHQWyZLDWU\Eu-
tów. Schemat przetwarzania przedstawiono na Rys. 2.
Dokument
XML
Rozbiór
gramatyczny
Transformacja
XSL
Serializacja
Drzewo
wej
FLRZH
Drzewo
wynikowe
Dokument
wyj
FLRZ\
Rys. 2. Fazy przetwarzania XSL
:HMFLRZ\GRNXPHQWMHVWSRGGDZDQ\UR]ELRURZLJUDPDW\F]QHPXSU]H]parser. W wyniku roz-
ELRUXSRZVWDMHGU]HZRUHSUH]HQWXMFHKLHUDUFKLHOHPHQWyZLDWU\EXWyZ
6NU\SWZM]\NX;6/VWHUXMHSU]HNV]WDáFHQLHPWHJRGU]HZDZGU]HZRZ\QLNRZHNWyUHPR*H
PLHü]XSHáQLHLQQVWUXNWXU1DVWSQLHGU]HZRZ\QLNRZHPR*HE\ü²ZZ\QLNXSURFHVXW]Z
VHULDOL]DFML²SU]HNV]WDáFRQHZGRNXPHQWZ\QLNRZ\QSZ;0/OXE+70/=DPLDVWserializacji
PR*HE\üZ\NRQDQHLQQHG]LDáDQLHQSEH]SRUHGQLDSUH]HQWDFMDGU]HZDZ\QLNRZHJRSU]H]SU]e-
JOGDUNSRGGaQLHGU]HZDZ\QLNRZHJRNROHMQ\PSU]HNV]WDáFHQLRPLWS
,VWRWG]LDáDQLD;6/MHVWZLFSU]HNV]WDáFDQLHGU]HZUHSUH]HQWXMF\FKVWUXNWXUGRNXPHQWyZ
3U]HNV]WDáFHQLHWDNLHQD]\ZDVLWUDQVIRUPDFM;6/XSL transformation).
$E\ SU]HNV]WDáFHQLH E\áR PR*OLZH GRNXPHQW ZHMFLRZ\ PXVL E\ü SRSUDZQ\ SU]\QDMPQLHM Z
sensie well-formed, by parser
;0/PyJáSU]HNV]WDáFLüJRGRSRVWDFLGU]HZD
3RSUDZQRüGRNXPHQWX;0/ZVHQVLHwell-formed (patrz [3, 4@R]QDF]DSU]HGHZV]\VWNLPL*
GRNXPHQWPDGRNáDGQLHMHGHQHOHPHQWJáyZQ\]QDF]QLNLSRF]WNRZHLNRFRZHHOHPHQWyZQLHV
ÄVNU]\*RZDQH´ ND*GD NRQVWUXNFMD ]DZDUWD Z LQQHM PXVL E\ü Z QLHM ]DZDUWD Z FDáRFL RUD]
ZV]\VWNLH]QDF]QLNLVMDZQLH]DNRF]RQH
-]\N;6/
123
3U]\NáDG
3RQL*HMSRGDQRGZDPDáHGRNXPHQW\Z+70/
•
lewy jest poprawnym dokumentem HTML, ale nie jest poprawnym w sensie well-formed do-
kumentem XML;
•
SUDZ\MHVWSRSUDZQ\WDN*HZVHQVLHwell-formedLPR*HE\üSU]HWZDU]DQ\]DSRPRFQDU]-
dzi dla XML.
Paragraf pierwszy.<P>
Paragraf drugi.
<UL>
<LI> Pozycja 1.
<LI> Pozycja 2.
</UL>
<HTML>
<P>Paragraf pierwszy.</P>
<P>Paragraf drugi.</P>
<UL>
<LI>Pozycja 1.</LI>
<LI>Pozycja 2.</LI>
</UL>
</HTML>
Proces
VHULDOL]DFMLQLHPXVLSURZDG]LüGRSRZVWDQLDGRNXPHQWXSRSUDZQHJR]SXQNWXZLG]HQLD
VSHF\ILNDFML;0/²QSZ\MFLRZ\GRNXPHQWZ+70/PR*HQLHVSHáQLDüZDUXQNyZ]DP\NDQLD
znaczników.
3U]HNV]WDáFHQLD V VWHURZDQH ]D SRPRF W]Z V]DEORQyZ template rules). Szablon zawiera
zwykle atrybut
match
SRGDMF\ Z]RU]HF pattern NWyU\ RNUHOD HOHPHQW\ GU]HZD ZHMFLRZHJR
SU]HWZDU]DQH]DSRPRFV]DEORQX:HZQWU]XV]DEORQXRNUHODVLFRPD]QDOH(üVLZGU]HZLH
wynikowym. Przetwarzanie ma charakter rekurencyjny.
-DNRX]XSHáQLHQLHSU]HWZDU]DQLDUHNXUHQF\MQHJRVWRVRZDQHMHVWWDN*HSU]HWZDU]DQLHSURFHGXUDl-
QHSWOHSU]HELHJDMFHSU]H]Z\EUDQHZ]á\GU]HZDZHMFLRZHJRZDUXQNLUR]JDá]LHQLD0R*Oi-
ZHMHVWWH*Z\ZRá\ZDQLHVNU\SWyZZM]\NXECMAScript
2
.
;6/PDVáX*\üGRGHILQLRZDQLDDUNXV]\VW\OLVW\F]Q\FK]DWHPRSUyF]GHILQLRZDQLDSU]HNV]WDá-
FH ZLQLHQ WDN*H XPR*OLZLDü RNUHODQLH VSRVREX SUH]HQWDFML 6áX* GR WHJR HOHPHQW\ ]ZDQH
RELHNWDPLIRUPDWXMF\PLformatting objects-HOLZGU]HZLHZ\QLNRZ\P]QDMGVLRZHRELHNW\
WRSRZLQQ\RQHE\üLQWHUSUHWRZDQHSU]H]SU]HJOGDUNLVWHURZDüVSRVREHPSUH]HQWDFML
2.3.
&]FLLZHUVMHVSHF\ILNDFML;6/
3RQLHZD*F]üM]\ND;6/VWHUXMFDSU]HNV]WDáFHQLDPLMHVWNOXF]RZDZWRNXSUDFQDGM]y-
NLHPZ\G]LHORQRMZRVREQVSHF\ILNDFMQD]ZDQ;6/7XSL Transformations) [9@SUDFHQDGW
F]FLVSHF\ILNaFMLZ]DVDG]LHXNRF]RQR
: WUDQVIRUPDFMDFK ;6/ GR ]QDOH]LHQLD HOHPHQWX Z GU]HZLH ZHMFLRZ\P X*\ZDQH V Z]RUFH
(patterns
]DSLV\ZDQHZSRVWDFLW]ZFLH*HNpaths6SHF\ILNDFMDRZ\FKFLH*HN²ZVSyOQDGOD
;6/M]\ND;3RLQWHUSDWU]>3, 4]) oraz XML Query²]RVWDáDZ\G]LHORQDSRGQD]Z;3DWK>10]
LWDN*HMHVWXNRF]RQD
3HáQDGHILQLFMDM]\ND;6/VNáDGDVL]DWHP]GHILQLFMLSU]HNV]WDáFH;6/7Z]RUFyZ;3DWK
RUD]VáRZQLNDRELHNWyZIRUPDWXMF\FK
1LHVWHW\SUDFQDGVSHF\ILNDFMRELHNWyZIRUPDWXMF\FKMHV]F]HQLHXNRF]RQRQLHPDWH*LFK
LPSOHPHQWDFML Z SRSXODUQ\FK SU]HJOGDUNDFK 'ODWHJR REHFQLH QDMEDUG]LHM W\SRZ\P VSRVREHP
Z\NRU]\VWDQLD;6/GRWZRU]HQLDDUNXV]\VW\OLVW\F]Q\FKMHVWSLVDQLHVNU\SWyZSU]HNV]WDáFDMF\FK
;0/QD+70/:\GDZDáRE\VL*HGRWHJRFHOXQDOH*\X*\üZHUVMLM]\ND]DZDUWHMZVSHF\ILNa-
FML;6/7OHF]QLHVWHW\LWDF]ü;6/QLHMHVWMHV]F]H]DLPSOHPHQWRZDQDZSRSXODUQ\FKSU]HJO-
2
ECMAScript jest to
XVWDQGDU\]RZDQDRGPLDQDM]\NDJavaScript.
124
Tomasz Traczyk
GDUNDFK'ODWHJRGRSLVDQLDDUNXV]\VW\OLVW\F]Q\FKX*\ZDVLQLHNLHG\VWDUV]HMZHUVML;6/NWyUHM
SURFHVRUMHVWF]FLSU]HJOGDUNLMicrosoft Internet Explorer 5 (MSIE 5) — i tak skonstruowano
SU]\NáDGSRGaQ\Z]HV]áRURF]Q\PUHIHUDFLH>2].
=QDF]QLH Z\JRGQLHMV]HM QRZV]HM ZHUVML M]\ND WUDQVIRUPDFML ZJ VSHF\ILNDFML ;6/7 PR*QD
QDWRPLDVW ] SRZRG]HQLHP X*\ZDü GR VDPHJR SU]HNV]WDáFDQLD GRNXPHQWyZ ;0/ Z LQQH GRNu-
PHQW\;0/OXE+70/LVWQLHMMX*ERZLHPSURFHVRU\;6/]JRGQH]QDMQRZV]VSHF\ILNDFM
3RQLHZD*SUDFHQDGSHáQGHILQLFMM]\NDWUZDMREHFQLHGRVWSQDMHVWMHG\QLHZHUVMDworking
draft
VSHF\ILNDFMLFDáRFL;6/>7].
2.4.
6NáDGQLDM]\ND
6NáDGQLD;6/]RVWDáDZSHáQL]GHILQLRZDQDZ;0/]X*\FLHPSU]HVWU]HQLQD]Znamespaces).
2.4.1.
3URORJLHOHPHQWJáyZQ\
6NU\SWF]\DUNXV]VW\OLVW\F]Q\Z;6/MHVWGRNXPHQWHP;0/PR*HZLFUR]SRF]\QDüVLRG
instrukcji przetwarzania
<?xml... ?>
-HOLVNU\SW;6/PD]DZLHUDü]QDNLQDURGRZHZNRGo-
ZDQLX LQQ\P RG 87) VWDQGDUGX GOD ;0/ WR WD LQVWUXNFMD SU]HWZDU]DQLD MHVW RERZL]NRZD L
PXVL]DZLHUDüDWU\EXW
encoding
SRGDMF\ZáDFLZHNRGRZDQLHSDWU]SU]\NáDG
-DN ND*G\ GRNXPHQW ;0/RZ\ VNU\SW Z ;6/ ]DZLHUD MHGHQ HOHPHQW JáyZQ\
xsl:stylesheet
: ]QDF]QLNX HOHPHQWX JáyZQHJR GHILQLXMH VL SU]HVWU]H QD]Z SDWU] >3, 4])
M]\ND;6/'ODZHUVML;6/]DLPSOHPHnWRZDQHMZ06,(]QDF]QLNSRF]WNRZ\Z\JOGDWDN
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
]DGOD;6/7WDN
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
przy czym atrybut
version
MHVW RERZL]NRZ\ 3URFHVRU\ ;6/ SRZLQQ\ DQDOL]RZDü DGUHV 85,
podany w atrybucie
xmlns
LZ]DOH*QRFLRGQLHJRRGSRZLHGQLRLQWHUSUHWRZDü]DZDUWRüVNU\SWX
2F]\ZLFLH Z VNU\SWDFK ;6/ PR*QD WDN*H XPLHV]F]Dü NRPHQWDU]H Z VSRVyE ZáDFLZ\ GOD
;0/SDWU]SU]\NáDG
2.4.2. Przypisanie arkusza stylistycznego do dokumentu
-HOLVNU\SW;6/PDSHáQLüGODGRNXPHQWX;0/URODUNXV]DVW\OLVW\F]QHJRWRSRWU]HEQHMHVW
SRZL]DQLH GRNXPHQWX ;0/ ] RZ\P VNU\SWHP 6SRVyE ZVND]DQLD GRP\OQHJR DUNXV]D VW\Oi-
VW\F]QHJRRNUHODRVREQDVSHF\ILNDFMD>11@'HILQLXMHRQDLQVWUXNFMSU]HWZDU]DQLDRQDVWSXMFHM
SRVWDFLSDWU]SU]\NáDG
<?xml-stylesheet type="text/xsl" href="
plik_arkusza_stylistycznego"?>
,QVWUXNFMWXPLHV]F]DVLZSURORJXIRUPDWRZDQHJRGRNXPHQWX;0/
3RQLHZD*GRNXPHQWPR*HZ\PDJDüUy*QHJRIRUPDWRZDQLDZ]DOH*QRFLRGVSRVREXSU]HSUo-
ZDG]DQLDSUH]HQWDFMLQSRGSURJUDPXGRWHJRVáX*FHJRZMHGQ\PGRNXPHQFLHPR*QDXPLHFLü
kilka instrukcji
<?xml-stylesheet?>
Uy*QLF\FKVLZDUWRFLpseudoatrybutu
media
. W pliku
]SU]\NáDGXPR*QDE\QSXPLHFLüGRGDWNRZRLQVWUXNFMSRVWDFL
<?xml-stylesheet type="text/xsl" media="lynx" href="konspekty.lynx.xslt"?>
²LQVWUXNFMDWDE\áDE\XZ]JOGQLRQDMHOLGRSUH]HQWDFMLX*\W\E\áE\SURJUDPlynx. Ta z instrukcji
<?xms-stylesheet?>
, która nie ma pseudoatrybutu
media
ZVND]XMH GRP\OQ\ DUNXV] VW\Oi-
styczny.
=Z\NOHMHVWPR*OLZHWDN*HWDNLHZ\ZRáDQLHSURFHVRUD;6/E\X*\W\]RVWDáDUNXV]VW\OLVW\F]Q\
Uy*Q\RGDrkuszy podanych w samym dokumencie.
-]\N;6/
125
2.4.3. Sterowanie
VHULDOL]DFM
:VNU\SWDFK]JRGQ\FK]HVSHF\ILNDFM;6/7PR*QDXPLHFLüLQVWUXNFM
xsl:output
, steruj
-
FSURFHVHPVHULDOL]DFML2NUHODVLZQLHMWDNLHFHFK\Z\MFLRZHJRSOLNXWHNVWRZHJRMDNVSRVyE
NRGRZDQLD]QDNyZQDURGRZ\FKWZRU]HQLHZFLüZWHNFLHXPLHV]F]DQLHZWHNFLHZ\MFLRZ\P
instrukcji przetwarzania
<?xml ...>
itp.
1DMZD*QLHMV]\PSDUDPHWUHPserializacji jest tzw. metoda. Przewidziano trzy metody standar-
dowe:
•
xml
— wyprowadzanie pliku w XML, poprawnego przynajmniej w sensie well-formed;
•
html
² Z\SURZDG]DQLH SOLNX Z +70/ QLH MHVW RQ SRSUDZQ\P SOLNLHP ;0/ JG\* QLH
prze
VWU]HJDVL;0/RZ\FKUHJXá]DP\NDQLD]QDF]QLNyZ
•
text
²Z\SURZDG]DVLZ\áF]QLHWHNVWRZ]DZDUWRüHOHPHQWyZDOHEH]VDP\FK]QDF]Qi-
ków.
3U]\NáDGRZDLQVWUXNFMDVWHUXMFDVHULDOL]DFMPR*HPLHüSRVWDü
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="iso-
8859-2" />
,QQ\SU]\SDGHNSRND]DQRZSU]\NáDG]LH
2.4.4.
Ä&LDáR´VNU\SWX
Ä&LDáR´VNU\SWX]DZLHUD]Z\NOHZLHOHV]DEORQyZtemplate rulesVáX*F\FKGRSU]HWZDU]DQLD
NROHMQ\FK ÄSR]LRPyZ´ GU]HZD ZHMFLRZHJR 0RJ WH* WX ]QDMGRZDü VL GHILQLFMH ]PLHQQ\FK L
parametrów globalnych.
2.4.5. Wzorce
W atrybutach
match
V]DEORQyZSRGDMHVLZ]RUFHVáX*FHGRZ\V]XNLZDQLDRGSRZLHGQLFKHOe-
PHQWyZZGU]HZLHZHMFLRZ\P:]RUFHWHV]DSLVDQHZM]\NX;3DWKRNWyU\PZLFHMQDSLVDQR
dalej.
3.
;6/EDUG]LHMV]F]HJyáRZR
W kolejnym rozdziale
RSLVDQREDUG]LHMV]F]HJyáRZRSRV]F]HJyOQHVNáDGQLNL;6/
3.1. Transformacje XSL
,VWRWG]LDáDQLD;6/MHVWWUDQVIRUPDFMDGU]HZDZHMFLRZHJRZLQQHGU]HZRUHSUH]HQWXMFHHOe-
PHQW\LDWU\EXW\7UDQVIRUPDFMDSROHJDZLFQDZ\V]XNLZDQLXZ]áyZZGU]HZLHZHMFLRZ\PL
WZRU]HQLXZ]áyZGU]HZDZ\MFLRZHJR
3.1.1. Szablony i przetwarzanie rekurencyjne
7UDQVIRUPDFM GU]HZD ZHMFLRZHJR VWHUXM V]DEORQ\ 'U]HZR MHVW SU]HJOGDQH RG NRU]HQLD L
wykonywana jest próba dopasowania wzorców
match
LVWQLHMF\FKV]DEORQyZ-HOLGRSDVRZDQLH
XGDVLDÄFLDáR´V]DEORQX]DZLHUDLQVWUXNFM
xsl:apply-templates
, to proces jest powtarzany
rekurencyjnie.
2F]\ZLFLHDE\GDQ\V]DEORQPyJáE\üZRJyOHZ\NRU]\VWDQ\ZSU]HWZDU]DQLXQLH]EGQHMHVW
E\ SURFHV UHNXUHQF\MQHJR SU]HWZDU]DQLD GU]HZD GRV]HGá GR SR]LRPX HOHPHQWyZ SU]HWZDU]DQ\FK
SU]H] yZ V]DEORQ 0XV] ZLF LVWQLHü V]DEORQ\ SU]HWZDU]DMFH QDGU]GQH SR]LRP\ Z GU]HZLH L
SU]HND]XMFHSU]HWZDU]DQLH]DSRPRFLQVWUXNFML
xsl:apply-templates
GRNROHMQ\FKQL*V]\FK
poziomów hierarchii.
126
Tomasz Traczyk
:VWDQGDUG]LHRNUHORQRL*V]DEORQLQLFMXMF\SU]HWZDU]DQLHGU]HZDWMSRZRGXMF\SU]HWZa-
U]DQLHHOHPHQWyZEH]SRUHGQLRSRGU]GQ\FKNRU]HQLDGU]HZDF]\OL
<xsl:template match="/">
<xsl:apply-templates/>
<xsl:template/>
jest szablonem wbudowanym (built-in template
LQLHZ\PDJDVLMHJRSRGDZDQLD
3U]HWZDU]DQLHNROHMQ\FKHOHPHQWyZNRF]\VLQDSR]LRPLHOLFLGU]HZD/LFLHGU]HZDRGSo-
ZLDGDM ]DZDUWRFL HOHPHQWyZ QDMQL*V]HJR SR]LRPX ² D ZLF WHNVWRZL QLH ]DZLHUDMFHPX MX*
]QDF]QLNyZ1DMF]FLHMWD]DZDUWRüPDE\üSU]HSLVDQDGRGU]HZDZ\MFLRZHJR6WDQGDUG;6/
RNUHODZáDQLHWDNLGoP\OQ\VSRVyESU]HWZDU]DQLDF]\OL
<xsl:template match="text()">
<xsl:value-of/>
</xsl:template>
MHVWWDN*HV]DEORQHPZEXGRZDQ\PLQLHZ\PDJDVLMHJRSRGDZDQLD
:LPSOHPHQWDFMDFKQSZ06,(V]DEORQ\ZEXGRZDQHE\ZDMMHGQDNQLHXZ]JOGQLRQHQLe-
]EGQHMHVWZyZF]DVMDZQHLFKSRGDQLHFRWH*XF]\QLRQRZSU]\NáDG]LHSRGDQ\PZUHIHUDFLH]e-
V]áorocznym [2].
3.1.2. Kontekst
Wzorce (patterns
VáX*FHGRZ\ELHUDQLDHOHPHQWyZSRGOHJDMF\FKSU]HWZDU]DQLXPDMSRVWDü
FLH*HNpathsSRGDMF\FKZVSyáU]GQHaxisV]XNDQHJRHOHPHQWXZ]JOGHPELH*FHJRNRQWHNVWX
.RQWHNVWWHQ]DOH*\RGV\WXDFMLZNWyUHMZ\ZRáDQD]RVWDáDLQVWUXNFMDSRZRGXMFDGRSDVRZ\ZDQLH
wzorców.
1DMZD*QLHMV]\PNRQWHNVWHPMHVWWHQ]ZL]DQ\]ZQWU]HPV]DEORQX3U]\MWR*HNRQWHNVWHP
LQVWUXNFMLG]LDáDMF\FKZÄFLHOH´V]DEORQXMHVWWHQHOHPHQWNWyU\MHVWZáDQLHSU]HWZDU]DQ\SU]H]
yZV]DEORQ:]RUFHX*\ZDQHZÄFLHOH´V]DEORQXVZLFSRGDZDQHZ]JOGHPELH*FHJRHOHPHQWX
dopasowanego do wzorca
match
szablonu.
5HNXUHQF\MQH SU]HWZDU]DQLH SRZRGXMH ZLF ÄZGUyZN´ NRQWHNVWX SR NROHMQ\FK SR]LRPDFK
GU]HZD ZHMFLRZHJR 8DNW\ZQLHQLH V]DEORQX QD VNXWHN G]LDáDQLD LQVWUXNFML
xsl:apply-
templates
SRZRGXMH]PLDQNRQWHNVWXRMHGHQSR]LRPZNLHUXQNXOLFLGU]HZD
3
.
']LNLWHPXUR]ZL]DQLXZ]RUFH
match
V]DEORQyZQLHPXV]]DZLHUDüFLH*HNEH]Z]JOGQ\FK
LWHQVDPV]DEORQPR*HE\üZ\NRU]\VWDQ\GRSU]HWZDU]DQLDWDNLFKVDP\FK]QDF]QLNyZXPLHV]F]o-
Q\FKQDUy*Q\FKSR]LRPDFKKLHUDUFKLLHOHPHQWyZ:SU]\NáDG]LHZWDNLVSRVyEVSU]HWZDU]DQH
np. znaczniki
<I>
.
3.1.3. Konflikty
wzorców
=GDU]\üVLPR*HL*GRGDQHJRHOHPHQWXZGU]HZLHZHMFLRZ\PSDVXMZ]RUFHNLONXV]DEOo-
QyZÏZNRQIOLNWMHVWUR]VWU]\JDQ\]SRPRFRNUHORQ\FKZVSHF\ILNDFMLSULRU\WHWyZ6WRVRZDQ\
MHVWW\ONRWHQ]V]DEORQyZNWyUHJRZ]RU]HFPDQDMZ\*V]\SULRU\WHW
-HOLSULRU\WHW\SDVXMF\FKZ]RUFyZVUyZQHWRGHF\GXMHNROHMQRüXPLHV]F]HQLDV]DEORQyZZ
skrypcie — stosowany jest ostatni z szablonów.
3
:;6/7LVWQLHMHZD*Q\Z\MWHNRGWHMUHJXá\GRW\F]F\V]DEORQyZQD]ZDQ\FK
-]\N;6/
127
3.1.4. Przetwarzanie
proceduralne
8]XSHáQLHQLHPSU]HWZDU]DQLDUHNXUHQF\MQHJR]DSRPRFV]DEORQyZMHVWSU]HWZDU]DQLHSURFHGu-
UDOQH : ÄFLHOH´ V]DEORQX PR*H ]QDMGRZDü VL SURJUDP ]DSLVDQ\ ]D SRPRF LQVWUXNFML SWOL
xsl:for-each
czy warunków
xsl:if
lub
xsl:choose
.
3WOD
xsl:for-each
XPR*OLZLDLWHUDF\MQHSU]HJOGDQLHHOHPHQWyZGRSDVRZDQ\FKGRZ]RUFD
podanego w atrybucie
select
:SU]\NáDG]LHZ\NRU]\VWDQRSWOGRZ\SHáQLDQLDWDEHOL
Instrukcja warunkowa
xsl:if
Z\NRU]\VW\ZDQD MHVW F]VWR GR WZRU]HQLD HOHPHQWyZ GU]HZD
Z\MFLRZHJRSRFKRG]F\FKRGRSFMRQDOQ\FKHOHPHQWyZZHMFLRZHJRGRNXPHQWX-HOLZDWU\Eu-
cie
test
SRGDP\Z]RU]HFWRZDUXQHNEG]LHVSHáQLRQ\JG\ZVND]\ZDQ\SU]H]yZZ]RU]HFHOe-
PHQWOXEDWU\EXWLVWQLHMH:]RUFHGHILQLRZDQHVZM]\NX;3DWKZNWyU\PPR*QDSRGDZDüZa-
runki logiczne w postaci tzw. predykatów.
Instrukcja
xsl:if
QLHPDF]FLelse-HOLZLFSRWU]HEQDMHVWWHJRW\SXNRQVWUXNFMDWRZ\No-
U]\VWDü QDOH*\ LQVWUXNFM ]ZURWQLF\
xsl:choose
0D RQD SRVWDü FLJX DOWHUQDW\ZQ\FK EORNyZ
ZDUXQNRZ\FK]PR*OLZRFLSRGDQLDEORNXGRP\OQHJR
<xsl:choose>
<xsl:when test="...">
...
</xsl:when>
...
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
3.1.5.
7ZRU]HQLHGU]HZDZ\MFLRZHJR
,QVWUXNFMHLWHNVW\]DZDUWHZÄFLHOH´V]DEORQXPDM]D]DGDQLHXWZRU]HQLHRGSRZLHGQLHMF]FL
GU]HZD Z\MFLRZHJR : W\P FHOX RNUHORQR V]HUHJ LQVWUXNFML VáX*F\FK GR WZRU]HQLD VWUXNWXU\
GU]HZDZ\MFLRZHJRQS
•
xsl:element
VáX*\GRWZRU]HQLDHOHPHQWyZZGU]HZLHZ\MFLRZ\PSDWU]SU]\NáDG
•
xsl:attribute
XPR*OLZLDGRGDQLHDWU\EXWXGRRVWDWQLRXWZRU]RQHJRHOHPHQWX
•
xsl:text
XPLHV]F]DZGU]HZLHZ\MFLRZ\PSRGDQ\ZLQVWUXNFMLWHNVW
•
xsl:comment
SR]ZDODXPLHV]F]DüZGU]HZLHZ\MFLRZ\PNRPHQWDU]HSDWU]SU]\NáDG
•
xsl:processing-instruction
WZRU]\LQVWUXNFMSU]HWZDU]DQLD
'RSU]HQRV]HQLDGRGU]HZDZ\MFLRZHJR]DZDUWRFLHOHPHQWyZOXEDWU\EXWyZVáX*\LQVWUXNFMD
xsl:value-of
SDWU]SU]\NáDG). Instrukcje
xsl:copy
i
xsl:copy-of
SR]ZDODMQDVNRSLRZa-
QLHFDá\FKIUDgPHQWyZGU]HZDZHMFLRZHJRGRGU]HZDZ\MFLRZHJR
3U]\MWRWH*ZD*QLEDUG]RZ\JRGQ]DVDGL*ZV]\VWNLHF]FLÄWHNVWRZH´VNU\SWX²WMWH
NWyUHQLHQDOH*GRSU]HVWU]HQLQD]Z
xsl
OXELQQHMSU]HVWU]HQLQD]Z]QDQHMSURFHVRURZL;6/²V
po prostu kopiowane „literalnie” (tzw. literal result elements
GR GU]HZD Z\MFLRZHJR -HOL Z
RZ\FKF]FLDFKV]QDF]QLNLQS+70/WRPXV]VSHáQLDüZDUXQNLSRSUDZQRFLZVHQVLHwell-
formed
.RQWHNVW GR NWyUHJR VNRSLRZDQH ]RVWDQ RGSRZLHGQLH F]FL VNU\SWX MHVW Z\]QDF]RQ\
SU]H]LQVWUXNFM;6/ZHZQWU]NWyUHM]QDMGXMHVLNRSLRZDQ\WHNVW-HVWWREDUG]RF]VWRZ\NRU]y-
VW\ZDQDFHFKDX*\WRMHMWH*ZSU]\NáDG]LH²ZWHQVSRVyEWZRU]RQHVQSZ\MFLRZH]QDF]QLNL
HTML.
3.1.6. Sortowanie
:W\FKLQVWUXNFMDFK;6/NWyUHSU]HWZDU]DM]ELRU\HOHPHQWyZQS
xsl:apply-templates
czy
xsl:for-each
PR*OLZHMHVWZ\NRQDQLHVRUWRZDQLDWMSU]HND]DQLHGRGU]HZDZ\MFLRZHJR
128
Tomasz Traczyk
HOHPHQWyZXSRU]GNRZDQ\FKZ]JOGHPZDUWRFLHOHPHQWXOXEDWU\EXWX:VWDUV]HMZHUVML;6/GR
RNUHOHQLDVSRVREXVRUWRZDQLDVáX*\áDWU\EXW
order-by
SDWU]SU]\NáDGZUHIHUDFLH>2]). W XSLT
ZSURZDG]RQR GRGDWNRZ LQVWUXNFM R ZLNV]\FK PR*OLZRFLDFK
xsl:sort
SDWU] SU]\NáDG
:DUWRüDWU\EXWX
select
GHF\GXMHRW\PZHGáXJ]DZDUWRFLNWyUHJRHOHPHQWXF]\DWU\EXWXZy-
NRQDQH PD E\ü VRUWRZDQLH 2NUHOLü PR*QD WDN*H LQQH FHFK\ VRUWRZDQLD QS M]\N RG NWyUHJR
]DOH*\NROHMQRü]QDNyZDOIDEeWXSRU]GHNURVQF\OXEPDOHMF\LWS
3.2. XPath
:ZLHOXLQVWUXNFMDFK;6/VWRVXMHVLZ]RUFHGRZ\V]XNLZDQLDRGSRZLHGQLFKHOHPHQWyZOXE
DWU\EXWyZZGU]HZLHZHMFLRZ\P3RQLHZD*WDNLHVDPHZ]RUFH]DSLVDQHZSRVWDFLFLH*HNpa-
ths
X*\ZDQHVWDN*HGRDGUHVRZDQLDIUDJPHQWyZGRNXPHQWyZZM]\NX;3RLQWHUSDWU]>4]) i
]DSHZQHEGSRGVWDZVSHF\ILNDFMLM]\ND]DS\WD;0/Query (patrz [4@VSHF\ILNDFMM]\ND
wzorców wydzielono i nazwano XPath [10].
:\V]XNLZDQLHRGE\ZDVL Z GU]HZLH ZHMFLRZ\P :]á\ nodes WHJR GU]HZD RGSRZLDGDM
HOHPHQWRPDWU\EXWRPRUD]WHNVWRPVWDQRZLF\P]DZDUWRüHOHPHQWyZ7DN*HNRPHQWDU]HLLn-
VWUXNFMHSU]HWZDU]DQLDSRZRGXMSRZVWDQLHRGSoZLHGQLFKZ]áyZZGU]HZLHZHMFLRZ\P
FLH*NL ]D SRPRF NWyU\FK ]DSLVXMH VL Z]RUFH PDM RG]ZLHUFLHGODü PLHMVFH SRV]XNLZDQHJR
HOHPHQWXZGU]HZLH²Z]RURZDQRVLWX]DSHZQHQDFLH*NDFK]QDQ\FK]V\VWHPX8QL[FLH*ND
RNUHOD SRáR*HQLH V]XNDQ\FK Z]áyZ Z GU]HZLH ZHMFLRZ\P RUD] ZDUXQNL NWyUH PXV] VSHáQLDü
V]XNDQHZ]á\
FLH*ND;3DWKVNáDGDVL]RGG]LHORQ\FKXNRQLNDPL
/
) kroków (steps
.D*G\]NURNyZPR*H
E\ü
•
VSHF\ILNDWRUHPZVSyáU]GQ\FKaxis specifier);
•
WHVWHPZ]áDnode testHZHQWXDOQLHX]XSHáQLRQ\PSUHG\NDWHP
:Z\QLNXZ\V]XNLZDQLD]DSRPRFZ]RUFD;3DWKRGQDMG\ZDQHVRGSRZLHGQLHZ]á\GU]HZD
ZHMFLRZHJR-HOLZ]RU]HFÄSDVXMH´GRZLHOXRELHNWyZWRZ\QLNZ\V]XNDQLD]DZLHUDMHZV]\Vt-
kie.
3.2.1.
:VSyáU]GQH
=DSLVR]QDF]DMF\W]ZZVSyáU]GQHaxisZ\V]XNLZDQHJRHOHPHQWXVáX*\GRRNUHOHQLDPLHj-
VFDZGU]HZLHZHMFLRZ\PZNWyU\PZ\V]XNLZDQHEGHOHPHQW\:VSyáU]GQHV]Z\NOHSo-
GDZDQHZ]JOGHPELH*FHJRNRQWHNVWXPR*QDWH*SRGDüZVSyáU]GQHEH]Z]JOGQHUR]SRF]\QDMF
FLH*NRGV\mbolu korzenia (podobnie jak w Unixie).
'R ]DSLVX ZVSyáU]GQ\FK VáX* RGSRZLHGQLH V\PEROH VáRZQH QDMZD*QLHMV]H ] QLFK PDM WH*
VNUyW\1DMF]FLHMX*\ZDQHVSHF\ILNDWRU\ZVSyáU]GQ\FKSRGDMHTabela 1.
Tabela 1
1DMF]FLHMX*\ZDQHVSHF\ILNDWRU\ZVSyáU]GQ\FKZ
XPath
Symbol
Skrót
Opis znaczenia
/
QDSRF]WNXFLH*NL
.RU]HGU]HZD
self
.
%LH*F\Z]Há
parent
..
:]HáEH]SRUHGQLRQDGU]GQ\
ancestor
:]á\QDGU]GQHQLHNRQLHF]QLHEH]SRUHGQLR
child
:]á\EH]SRUHGQLRSRGU]GQHZVSyáU]GQHGRP\OQH
descendant
:]á\SRGU]GQHQLHNRQLHF]QLHEH]SRUHGQLR
descendant-or-self
//
:]á\SRGU]GQHZUD]]ELH*F\P
attribute
@
$WU\EXW\ELH*FHJRHOHPHQWX
-]\N;6/
129
6áRZQH V\PEROH ZVSyáU]GQ\FK RGG]LHOD VL RG QDVWSXMF\FK SR QLFK NURNyZ ]QDNLHP So-
GZyMQHJR FXG]\VáRZX QS
descendant::przedmiot
oznacza wszystkie elementy typu
przedmiot
, pod
U]GQHQLHNRQLHF]QLHEH]SRUHGQLRZVWRVXQNXGRELH*FHJRZ]áD
3.2.2.
7HVW\Z]áyZ
7HVW Z]áD node test SRGDMH NWyUH HOHPHQW\ V Z\V]XNLZDQH Z RNUHORQ\P SU]H] SRGDQH
ZVSyáU]GQHREV]DU]HGU]HZD7HVWWHQPR*HZ\V]XNLZDüHOHPHQW\DWU\EXW\OXEZ]á\WHNVWRZH
=DSLV WHVWX Z]áD ]DZLHUD QD]Z Z\V]XNLZDQHJR HOHPHQWX
4
QD]Z DWU\EXWX OXE RNUHOHQLH W\SX
Z]áD6\PEROHW\SyZZ]áyZ]HVWDZLDTabela 2.
Tabela 2
6\PEROHW\SyZZ]áyZZ
XPath
Symbol
Opis znaczenia
node()
'RZROQ\Z]Há
*
Dowolny element
@*
Dowolny atrybut
text()
:]HáWHNVWRZ\
comment()
:]HáNRPHQWDU]D
processing-instruction()
:]HáLQVWUXNFMLSU]HWZDU]ania
.URNZFLH*FHPR*H]DZLHUDüDOWHUQDW\ZNLONXWHVWyZRGG]LHORQ\FKSLRQRZNUHVN
|
); wy-
ko
U]\VWDQRWRZSU]\NáDG]LH
3.2.3. Predykaty
7HVWZ]áDPR*HE\üRJUDQLF]DQ\SUHG\NDWHPNWyU\SRGDMHZDUXQHNMDNLPXV]VSHáQLDüZy-
V]XNLZDQHZ]á\3UHG\NDWSRGDMHVLZQDZLDVDFKNZDGUDWRZ\FKEH]SRUHGQLRSRWHNFLHWHVWX
Z]áD
1DMSURVWV]\SUHG\NDW]DZLHUDOLF]ENWyUDRNUHODNROHMQ\QXPHUHOHPHQWXQS
przedmiot[2]
R]QDF]DGUXJLHOHPHQWW\SXSU]HGPLRW=DPLDVWOLF]E\PR*HE\üX*\W\V\PEROIXQNFMLRNUHODMFHM
numer kolejny, np.
przedmiot[last()]
R]QDF]DRVWDWQLZNROHMQRFLHOHPHQWW\SX
przedmiot
.
3UHG\NDW]DZLHUDüPR*HZHZQWU]FLH*N]DSLVDQZ]JOGHPNRQWHNVWXWHJRZ]áDNWyUHJR
WHVWMHVWRJUDQLF]DQ\GDQ\PSUHG\NDWHP7DNLSUHG\NDWMHVWSUDZG]LZ\MHOLRZDFLH*NDSURZDG]L
GR LVWQLHMFHJR HOHPHQWX 1S ]DSLV
przedmiot[slowo_kluczowe]
oznacza elementy typu
przedmiot
SRVLDGDMFHSRGU]GQHHOHPHQW\W\SX
slowo_kluczowe
8*\ZDMFIXQNFML
not()
PR*HP\
]QDOH(ü
SU]HGPLRW\
QLH
PDMFH
VáyZ
NOXF]RZ\FK
przed-
miot[not(slowo_kluczowe)]
.
3UHG\NDWPR*H]DZLHUDüZDUXQHNORJLF]Q\PDMF\]UHJXá\SRVWDüSRUyZQDQLD:SRUyZQDQLX
X*\WDPR*HE\üZDUWRüHOHPHQWXOXEDWU\EXWXQS
przedmiot[@id='KBD2']
wyszuka element
typu
przedmiot
o identyfikatorze ‘KBD2’
5
8*\üWH*PR*QDVSHFMDOQ\FKIXQNFMLLRSHUDWRUyZQS
przedmiot[position() mod 2 = 0]
wyszuka przedmioty o parzystych pozycjach.
=HVWDZLHQLHZD*QLHMV]\FKIXQNFMLLRSHUDWRUyZSRGDMHTabela 3.
Tabela 3
:D*QLHMV]HRSHUDWRU\LIXQNFMHZSUHG\NDWDFK
XPath
Symbol
Opis znaczenia
=
,
!=
,
<
,
>
,
<=
,
>=
Porównania
4
1D]ZDHOHPHQWXPR*HE\üSRSU]HG]RQDQD]ZSU]HVWU]HQLQD]Znamespace) i dwukropkiem.
5
-HOLZZDUXQNXZ\VWSLüPDVWDáD]QDNRZDWRMHVWRQDXMPRZDQDZSRMHG\QF]HDSRVWURI\
130
Tomasz Traczyk
or
,
and
,
not(...)
Operacje logiczne
+
,
-
,
div
,
mod
Operacje arytmetyczne
position()
1XPHUNROHMQ\Z]áDZUyGZ]áyZWHJRVDPHJRW\SX
last()
1XPHUNROHMQ\RVWDWQLHJR]Z]áyZWHJRVDPHJRW\SX
count(...)
/LF]EDZ]áyZSDVXMF\FKGRZ]RUFDSRGDQHJRZDUJXPHQFLH
name()
Nazwa elementu/atrybutu
string(...)
Konwersja na napis
format-number(...)
Konwersja liczby na napis z formatowaniem
number(...)
.RQZHUVMDQDOLF]E
normalize-space(...)
8VXQLFLHZLRGF\FKLNRFRZ\FKVSDFML
starts-with(...)
7HVWSRF]WNXWHNVWX
contains(...)
7HVW]DZDUWRFLWHNVWX
3UHG\NDW\PRJE\üX*\WHZZLHOXPLHMVFDFKZMHGQHMFLH*FHZV]G]LHWDPJG]LHX*\WRWHVWX
Z]áD 1S
przedmiot[contains(@id,'2')]/slowo_kluczowe[. !='Oracle']
poda
Uy*QHRGµ2UDFOH¶VáRZDNOXF]RZHSU]HGPLRWyZNWyU\FKLGHQW\ILNDWRU]DZLHUDF\IU
: ZDUXQNDFK SRUyZQ\ZDü PR*QD ZDUWRFL HOHPHQWyZ OXE DWU\EXWyZ Uy*Q\FK RG ELH*FHJR
NRQWHNVWX²SRGDMHVLGRQLFKFLH*NQS
SU]HGPLRW>F]HVFBNRQVSHNWX#LG 7UHü@
oznacza elementy typu
przedmiot
PDMFHHOHPHQW\SRGU]GQHQLHNRQLHF]QLHEH]SRUHGQLRW\SX
czesc_konspektu
RLGHQW\ILNDWRU]Hµ7UHü¶
3.3. XSLT
3RF]WNRZRM]\NWUDQVIRUPDFMLQLHE\áZ\G]LHORQ\]HVSHF\ILNDFML;6/:URNXGRNRQa-
QRWDNLHJRZ\G]LHOHQLDLRSXEOLNRZDQRRVREQVSHF\ILNDFM;6/7XSL Transformations) [9]. W
VSHF\ILNDFMLWHMGRNRQDQRLVWRWQ\FK]PLDQLX]XSHáQLHM]\ND3RZRGXMHWRL*ZF]HQLHMV]HLm-
SOHPHQWDFMH;6/QLHG]LDáDM];6/7:V]F]HJyOQRFLGRW\F]\WRSURFHVRUD;6/ZEXGRZDQHJR
w popu
ODUQSU]HJOGDUN06,(
1DMZD*QLHMV]H]PLDQ\ZSURZDG]RQHZVSHF\ILNDFML;6/7RSLVDQRQL*HM
3.3.1. Zmienne
:VNU\SFLH;6/7PR*QDGHILQLRZDü]PLHQQH6áX*\GRWHJRLQVWUXNFMD
xsl:variable
, mo-
JFDSU]\EUDüGZLHSRVWDFLH
<xsl:variable name="
nazwa_zmiennej" select="
Z\UD*HQLH"/>
<xsl:variable name="
nazwa_zmiennej">wzorzec</xsl:variable>
3LHUZV]D]W\FKSRVWDFLSRGDMHZDUWRüMDNRZ\QLNZ\UD*HQLDGUXJDSRZRGXMHZ\OLF]HQLHZDr-
WRFLMDNRUR]ZLQLFLDSRGDQHJRZ]RUFD=PLHQQDPR*H]DZLHUDüZDUWRüWHNVWRZ]ELyUZ]áyZ
OXEGU]HZRZ]áyZ
=DVLJ ]PLHQQHM ]GHILQLRZDQHM Z RNUHORQ\P HOHPHQFLH VNU\SWX ;6/ REHMPXMH WHQ HOHPHQW
RUD]MHJRHOHPHQW\SRGU]GQH,QVWUXNFMD
xsl:variable
PR*HE\üX*\WDMDNRW]Ztop-level ele-
ment
WMHOHPHQWEH]SRUHGQLRSRGSRU]GNRZDQ\HOHPHQWRZLJáyZQHPX
xsl:stylesheet
. Tak
zdefiniowana zmienna jest globalna.
=GHILQLRZDQD]PLHQQDPR*HE\üX*\WDZDWU\EXWDFKLQVWUXNFML;6/ZV]G]LHWDPJG]LHRF]e-
NLZDQDMHVWZDUWRüZ\UD*HQLD1D]Z]PLHQQHMSRSU]HG]DVL]QDNLHP
$
.
=PLHQQHMDWDN*HSDUDPHWUXOXEZ\UD*HQLDPR*QDX*\üGRSRGVWDZLHQLDZDUWRFLWDNLHJRDWUy-
EXWXZNWyU\PRF]HNLZDQDMHVWZDUWRüWHNVWRZD7DNFHFKPDMQSDWU\EXW\
name
instrukcji
xsl:element
i
xsl:attribute
:WDNLFKV\WXDFMDFKZ\UD*HQLHOXEQD]Z]PLHQQHMSRSU]e-
-]\N;6/
131
G]RQ]QDNLHP
$
XMPXMHVLGRGDWNRZRZQDZLDV\NODPURZH²R]QDF]DWRL*ZDUWRü]PLHQQHM
OXEZ\UD*HQLDEG]LH]DPLHQLRQDQDQDSLV.RQVWUXNFMWZ\NRU]\VWDQRZSU]\NáDG]LH
3.3.2. Tryby
(modes)
=GDU]DVLL*WHQVDPHOHPHQWSRZLQLHQE\üSU]HWZDU]DQ\NLONXNURWQLHZUy*Q\FKNRQWHNVWDFK
6WRVXMFSURVW\PHFKDQL]PV]DEORQyZ]Z]RUFDPLQLHPR*QD]Uy*QLFRZDüVSRVREXSU]HWZDU]DQLD
Z]DOH*QRFLRGNRQWHNVWX'ODWHJRXPR*OLZLRQRGRGDQLHGRV]DEORQXDWU\EXWX
mode
, który umo
*-
OLZLD Z\EUDQLH NRQNUHWQHJR V]DEORQX VSRUyG NLONX PDMF\FK Z]RU]HF SDVXMF\ GR GDQHJR HOe-
PHQWX :\ZRáXMF SU]HWZDU]DQLH UHNXUHQF\MQH LQVWUXNFM
xsl:apply-templates
PR*HP\ M
WDN*H X]XSHáQLü R DWU\EXW
mode
:\ELHUDP\ Z WHQ VSRVyE WHQ VSRUyG V]DEORQyZ R SDVXMF\P
Z]RUFXNWyU\PDWDNVaPZDUWRüDWU\EXWX
mode
.
3.3.3. Szablony
nazwane
,QQ\PHFKDQL]PXPR*OLZLDZ\ZRá\ZDQLHSU]HWZDU]DQLD]DSRPRFNRQNUHWQHJRV]DEORQX²Z
WHQ VSRVyE PR*QD ]EXGRZDü V]DEORQ X*\ZDQ\ GR SU]HWZDU]DQLD Uy*Q\FK HOHPHQWyZ QLH SDVXM-
F\FKGRZVSyOQHJRZ]RUFD']LDáDWRZVSRVyE]EOL*RQ\GRZ\ZRáDQLDSURFHGXU\
6]DEORQNWyU\PDE\üZWHQVSRVyEX*\W\X]XSHáQLDVLRDWU\EXWRQD]ZLH
name
²VWDMHVLRQ
tzw. szablonem nazwanym (named template
6]DEORQWDNLPR*QDZ\ZRáDüLQVWUXNFM
<xsl:call-template name="
nazwa_szablonu"/>
:SU]\SDGNXWDNLHJRZ\ZRáDQLDNRQWHNVWZNWyU\PG]LDáDMLQVWUXNFMH]DZDUWHZÄFLHOH´V]a-
EORQXQLH]PLHQLDVLL²LQDF]HMQL*GODZ\ZRáDQLDQDVNXWHN
xsl:apply-templates
— pozo-
VWDMHWDNLVDPMDNLRERZL]\ZDáGODPLHMVFDVNGV]DEORQZ\ZRáDQR
6]DEORQQD]ZDQ\PR*HPLHüSDUDPHWU\3DUDPHWU\IRUPDOQHV]DEORQXGHILQLXMHVLXPLHV]F]a-
MFZMHJRZQWU]XLQVWUXNFMH
xsl:param
1D]ZSDUDPHWUXSRGDMHDWU\EXW
name
DZDUWRüGo-
P\OQRNUHODVLWDNMDNGOD]PLHQQHM
'R ZDUWRFL WDN ]GHILQLRZDQHJR SDUDPHWUX RGZRá\ZDü VL PR*QD ZHZQWU] V]DEORQX SU]H]
podanie jego nazwy poprzedzonej znakiem
$
— podobnie jak do zmiennych.
:FHOXSU]HND]DQLDSDUDPHWUyZDNWXDOQ\FKSU]\Z\ZRáDQLXV]DEORQXZ]DZDUWRFLHOHPHQWX
xsl:call-template
XPLHV]F]DVLLQVWUXNFMH
xsl:with-param
=QRZXQD]ZSDUDPHWUXSo-
GDMHVLZDWU\EXFLH
name
]DZDUWRüRNUHODVLWDNMDNGOD]PLHQQHM²SRGDMFZ\UD*HQLHZ
atrybucie
select
OXEZ]RU]HFZHZQWU]XHOHPHQWX
3.3.4.
:áF]DQLHSOLNyZ;6/
:;6/7LVWQLHMLQVWUXNFMH
xsl:include
i
xsl:import
XPR*OLZLDMFHZáF]DQLHGRELH*-
FHJRVNU\SWX]DZDUWRFLLQQHJRSOLNX;6/$GUHV85,ZáF]DQHJRSOLNXSRGDMHVLZDWU\EXFLH
href
. Instrukcja
xsl:include
SRZRGXMHZáF]HQLH]DZDUWRFLSOLNXZPLHMVFXZ\VWSLHQLDLn-
VWUXNFMLZáF]RQD]DZDUWRüMHVWZLFWUDNWRZDQDWDNVDPRMDNSR]RVWDáDWUHüVNU\SWX1DWRPLDVW
X*\FLHLQVWUXNFML
xsl:import
SRZRGXMH*H]DLPSRUWRZDQHV]DEORQ\VSU]HWZDU]DQH]QL*V]\P
priory
WHWHPQL*V]DEORQ\ORNDOQH
3.4. Formatowanie
&KRüREHFQLHGRIRUPDWRZDQLDGRNXPHQWyZZ;0/QDMF]FLHMVWRVXMHVLSU]HNV]WDáFDQLHLFK
QD +70/ Z SURSR]\FML VSHF\ILNDFML ;6/ SU]HZLG]LDQR GR WHJR FHOX VSHFMDOQ\ M]\N RELHNWyZ
forma
WXMF\FK
'RNXPHQW;0/PDE\ü]DSRPRF;6/7SU]HNV]WDáFDQ\GRSRVWDFLGU]HZDRZ\FKRELHNWyZ
IRUPDWXMF\FKNWyUHPDE\üLQWHUSUHWRZDQHSU]H]SU]HJOGDUNLLZ\ZLHWODQH0R*OLZRFLIRUPa-
WRZDQLDZ;6/VWDQRZLPQLHMZLFHMVXPPR*OLZRFLM]\NyZ+70/L&66
132
Tomasz Traczyk
:VSHF\ILNDFML;6/]GHILQLRZDQRVáRZQLNRELHNWyZIRUPDWXMF\FK3RZRáDQRGODQLFKRVREQ
SU]HVWU]HQD]Z
fo
.
3.4.1. Model
prezentacji
dokumentu
:;6/SU]\MWRPRGHOSUH]HQWDFMLZNWyU\PGRNXPHQWPR*H]DZLHUDüQDVWSXMFHRELHNW\
•
page-sequence
²JáyZQHF]FLGRNXPHQWXUy*QLFHVLPLG]\VREUR]NáDGHPVWURQ\
•
flow
²F]FLGRNXPHQWXPDMFHFKDUDNWHUVHNFMLUR]G]LDá\SRGUR]G]LDá\LWS]DZDUWHZ
obiektach page-sequence;
•
block
²DNDSLW\LSRGREQHF]FLGRNXPHQWX
•
inline
²F]FLDNDSLWyZUy*QLFHVLQSF]FLRQN
•
wrapper
²ÄQLHZLG]LDOQH´RELHNW\EGFHF]FLDPLEORNXOXEinlineVáX*FHGRÄ]DF]HSLe-
QLD´GDMF\FKVLG]LHG]LF]\üZáDFLZRFL
•
graphic
²UHIHUHQFMHGR]HZQWU]Q\FKRELHNWyZJUDILF]Q\FK
•
list
²OLVW\EORNOLVW\VNáDGDVL]HOHPHQWyZOLVW\ND*G\HOHPHQWPDZ\G]LHORQHW\NLHW
•
table — tabele (o budowie podobnej jak w HTML).
;6/]DZLHUDWDN*H]áR*RQ\PRGHOVWURQLFRZDQLDGRNXPHQWyZ
3.4.2.
:áDFLZRFLL]DZDUWRüRELHNWyZ
2ELHNW\IRUPDWXMFHPDMZáDFLZRFLSRGDZDQHMDNRDWU\EXW\NWyUHGHF\GXMRLFKVSRVRELH
SUH]HQWDFML'RW\SRZ\FKZáDFLZRFLQDOH*F]FLRQNDPDUJLQHVLZáDFLZRFLGRW\F]FHRGVW-
SyZZáDFLZRFLGRW\F]FHMXVWRZDQLDZFLFLDLWGQS
<fo:page-sequence font-family="serif" font-size="12pt">
RNUHODF]FLRQNX*\ZDQGRIRUPDWRZDQLDÄGX*HM´F]FLGRNXPHQWX
:áDFLZRFLPDMZDUWRFLGRP\OQH1LHNWyUHZáDFLZRFLSRGOHJDMG]LHG]LF]HQLX²RELHNW\
SRGU]dQHG]LHG]LF]MHRGQDGU]GQ\FK
7HNVWSRGOHJDMF\IRUPDWRZDQLXMHVWXPLHV]F]DQ\MDNR]DZDUWRüHOHPHQWyZIRUPDWXMcych.
4. Zastosowania XSL
3RGVWDZRZ\P]DVWRVRZDQLHP;6/MHVWRF]\ZLFLHIRUPDWRZDQLHGRNXPHQWyZZ;0/-Hd-
QDN*HRND]DáRVL*H;6/PR*HE\ü]SRZRG]HQLHPZ\NRU]\VW\ZDQ\GRLQQ\FKFHOyZZV]G]LH
WDPJG]LHSRWU]HEQHMHVWSU]HNV]WDáFDQLHGRNXPHQWyZ
4.1. Implementacje
2EHFQLHLVWQLHMHVSRURLPSOHPHQWDFML;6/DOHGRW\F]RQHQLHPDOZ\áF]QLHM]\NDWUDQVIRr-
PDFML)DGQD]SRSXODUQ\FKSU]HJOGDUHNQLHUR]XPLHM]\NDRELHNWyZIRUPDWXMF\FK
,VWQLHMFHLPSOHPHQWDFMH;6/]Z\NOH]ZL]DQHV]SDUVHUDPL;0/QDWRPLDVWZLNV]RüLVt-
QLHMF\FKSU]HJOGDUHNQLH]DZLHUDREVáXJL;6/
1DMSRSXODUQLHMV]\P QDU]G]LHP Z\SRVD*RQ\P Z SURFHVRU ;6/ MHVW QLHZWSOLZLH Microsoft
Internet Explorer 5
:EXGRZDQRZHREVáXJZLNV]HMF]FLLQVWUXNFML;6/GRW\F]F\FKWUDQs-
formacji, ale w wersji sprzed specyfikacji XSLT.
1LHZWSOLZ]DOHW06,(MHVWIDNW*HSURFHVRU;0/MHVWZEXGRZDQ\ZSU]HJOGDUNPR*QD
ZLFSU]HV\áDüGRQLHMEH]SRUHGQLRGRNXPHQW\Z;0/LDUNXV]HVW\OLVW\F]QHZ;6/3U]HJOGDr-
NDGRNRQXMHWUDQVIRUPDFMLQD+70/LSUH]HQWDFMLZ\QLNRZHJRGRNXPHQWX8*\WNRZQLNPDGRVWS
-]\N;6/
133
GR(UyGáRZHJRGRNXPHQWXZ;0/PR*HJRX*\üQSGRGDOV]HJRSU]HWZDU]DQLD3R]DLQVWDOo-
ZDQLXGRVWSQ\FKRGQLHGDZQDSRSUDZHNX*\WNRZQLNPR*HWDN*HREHMU]HüZ\QLNWUDQVIRUPDFML²
jest to bardzo przydatne w czasie uruchamiania skryptów XSL. Zarówno dokument XML jak ar-
kusz styli
VW\F]Q\PRJE\üSU]HFKRZ\ZDQHZSDPLFLcacheSU]HJOGDUNL
1LHVWHW\SRQLHZD*Z06,(ZEXGRZDQRVWDUZHUVM;6/QLHPR*QDX*\üQRZ\FKPR*OLZo-
FL;6/73UDFHQDGSURFHVRUHP;6/7VMHGQDN]DDZDQVRZDQHPR*QDJRQDZHWGRLQVWDORZDü
GR SU]HJOGDUNL :\ZRáDQLH QRZHJR SURFHVRUD MHVW MHGQDN PR*OLZH MHG\QLH SURJUDPRZR QS ]
programu
9%6FULSWLQLHPR*HRQE\üQRUPDOQLHX*\W\GRIRUPDWRZDQLDGRNXPHQWyZon-line.
Konkurencja — czyli firma
1HWVFDSH²WDN*HSUDFXMHQDGREVáXJ;0/ZVZRMHMSU]HJOGDUFH
Niestety, nawet w najnowszych wersjach próbnych programu nie ma wsparcia dla XSL, a arkusze
VW\OLVW\F]QHGRGRNXPHQWyZ;0/GHILQLRZDüPR*QDMHG\QLHZ&66
4.2. XSL a Oracle
2UDFOHRGGáX*V]HJRF]DVXSRSLHUDUR]ZyML]DVWRVRZDQLD;0/7RWH*MX*RGSRQDGURNXGo-
VWSQH V Uy*QRURGQH QDU]G]LD XPR*OLZLDMFH WZRU]HQLH DSOLNDFML ;0/ Z W\P WDN*H SURFHVRU
XSLT.
3URFHVRUWHQZFKRG]LZVNáDGSDNLHWXOracle XML Developer’s Kit (XDK). Pakiet ów, wspóá-
SUDFXMF\]'%062UDFOHi, zawiera m.in. SDUVHU\;0/Z\SRVD*RQHZSURFHVRU;6/7SU]H]Qa-
F]RQHGODM]\NyZ-DYD&&RUD]3/64/1S$3,SDUVHUDGODM]\ND-DYDXGRVWSQLDNODV\
XSLStylesheet
i
XSLProcessor
ZUD] ] RGSRZLHGQLPL PHWRGDPL NWyUH SU]HWZDU]DM GRNu-
PHQW\;0/]X*\FLHPDUNXV]\VW\OLVW\F]Q\FKZ;6/
3U]HWZDU]DQLH]DSRPRF;6/7PR*HE\üX*\WHGRIRUPDWRZDQLDZ\QLNyZG]LDáDQLDZFKRG]-
FHJRZVNáDG;'.QDU]G]LDOracle SQL Utility for Java1DU]G]LHWRQDSRGVWDZLHSRGDQHJR
]DS\WDQLDZ64/WZRU]\GRNXPHQW;0/]DZLHUDMF\Z\QLN]DS\WDQLDRVWDQGDUGRZ\Pgenerycz-
Q\P IRUPDFLH 'RNXPHQW WHQ PR*QD SURJUDPRZR SRGGDü WUDQVIRUPDFML ]D SRPRF ;6/7 X]y-
VNXMFSR*GDQ\IRUPDWZ\QLNRZ\1DU]G]LHPR*HWDN*HZF]\W\ZDüGDQH]SOLNyZ;0/GRED]\
GDQ\FK DOH ZyZF]DV GDQH PXV] E\ü SRGDQH Z SOLNX R XVWDORQHM VNáDGQL 8*\ZDMF SURFHVRUD
;6/7PR*QDSU]HNV]WDáFLüRU\JLQDOQ\GRNXPHQW;0/GRSRVWDFLZ\PDJDQHMSU]H]QDU]G]LH
3URFHVRU;6/7SHáQLZD*QUROZG]LDáDQLXNROHMQHJRVNáDGQLND;'.]ZDQHJRXSQL Servlet.
1DU]G]LH WR SU]HWZDU]D ]DS\WDQLD 64/ RSDNRZDQH Z VNáDGQL ;0/ D Z\QLNL ]DS\WDQLD WDN*H
formatuje w postaci dokumentu XML o standardowej
JHQHU\F]QHMEXGRZLH-HOLSRWU]HEQDMHVW
QSGRFHOyZSUH]HQWDFMLLQQDEXGRZDGRNXPHQWXZ\QLNRZHJRQDU]G]LHDXWRPDW\F]QLHZ\ZRáXMH
SURFHVRU;6/7NWyU\SU]HNV]WDáFDZ\QLNRZ\GRNXPHQWX*\ZDMFDUNXV]DVW\OLVW\F]QHJR:WHQ
VSRVyE]HVWDQGDUGRZ\FKZ\QLNyZ]DS\WDQLDX]\VNDüPR*QDQLHPDOGRZROQSRVWDüSUH]HQWacji.
:VNáDG;'.ZFKRG]LWDN*HFLHNDZ\SDNLHW]ZDQ\XML Transviewer Java BeansEGF\]ELo-
rem komponentów Java Beans. Jeden z tych komponentów, o nazwie XSL Transformer Bean
VáX*\
GRSU]HSURZDG]DQLDWUDQVIRUPDFMLGRNXPHQWyZ;0/]X*\FLHP;6/.RPSRQHQWWHQPR*HE\ü
X*\W\]DUyZQRSRVWURQLHVHUZHUDMDNRVNáDGQLNyZDSOLNDFMLserwerowych lub servletów), jak po
stronie klienta — np. w apletach.
0R*OLZRFLWUDQVIRUPDFML;6/VWDN*HZ\NRU]\VW\ZDQHSU]H]SURGXNWRQD]ZLHOracle Portal-
To-Go
3URGXNWWHQWUDQVIRUPXMHG\QDPLF]QLH]DZDUWRüVWURQLQWHUQHWRZ\FKQDIRUPDW\UR]XPLa-
QHSU]H]Uy*QRURGQHXU]G]HQLDZW\PQDM]\N:0/GODWHOHIRQyZNRPyUNRZ\FK]SURWRNRáHP
:$3,QIRUPDFMH],QWHUQHWXVSU]HNV]WDáFDQHGRgenerycznego formatu ;0/RZHJRDQDVWSQLH
SURFHVRU;6/SU]HNV]WDáFDZMHGRIRUPDWyZVSHF\ILF]Q\FKGODGDQHJRXU]G]enia.
4.3.
3U]\NáDG\]DVWRVRZD;6/
1DMEDUG]LHMW\SRZ\P]DVWRVRZDQLHP;6/MHVWRF]\ZLFLHSUH]HQWDFMDGRNXPHQWyZ;0/$OH
PR*OLZRFL]DVWRVRZDQLD;6/V]QDF]QLHV]HUV]HNLOND]QLFKV]F]HJyOQLH]ZL]DQ\FK]ED]DPL
danych, opi
VDQRSRQL*HM
134
Tomasz Traczyk
4.3.1. Przetwarzanie stron na serwerach WWW
=D SRPRF ;6/ PR*QD G\QDPLF]QLH SU]HWZDU]Dü VWURQ\ ::: QD VHUZHUDFK E\ XGRVWSQLü
X*\WNRZQLNRZL GDQH Z SR*GDQHM SU]H] QLHJR IRUPLH 3U]HWZDU]DQLH WDNLH PR*H GRW\F]\ü VWURQ
NUHRZDQ\FKG\QDPLF]QLHQSZZ\QLNXUHDOL]DFML]DS\WDGRED]\GDQ\FK²SU]\SDGHNWDNLRSi-
VDQRZ\*HMZRGQLHVLHQLXGRQDU]G]LDXSQL Servlet3U]HWZDU]DüZWHQVSRVyEPR*QDWDN*HVWa-
tyczne strony w HTML lub XML — tego typu zastosowanie XSL w produkcie Portal-To-Go
WDN*H
RSLVDQRZ\*HM
&LHNDZ\PSRP\VáHPMHVWG\QDPLF]QHJHQHURZDQLHDUNXV]\VW\OLVW\F]Q\FKQDSRGVWDZLH]DSa-
PLWDQ\FKZED]LHGDQ\FKSUHIHUHQFMLX*\WNRZQLND:WHQVSRVyEPR*QDWZRU]\üSRUWDOH]XVáu-
JDPLSHUVRQDOL]RZDQ\PLQLHW\ONRFRGRWUHFLDOHWDN*HFRGRIRUP\
4.3.2.
:\PLDQDGDQ\FKPLG]\ED]DPL
;0/Z\GDMHVLLGHDOQ\PPHGLXPGRZ\PLDQ\GDQ\FKPLG]\ED]DPLGDQ\FK:SOLNX;0/
SU]HQRV]RQHVQLHW\ONRGDQHDOHWDN*HPHWDLQIRUPDFMD-HGQDNMHOLPRGHOHGDQ\FKZED]LHZ\j-
FLRZHMLGRFHORZHMUy*QLVLNRQLHF]QHMHVWGRNRQDQLHRGSRZLHGQLHMWUDQVIRUPDFML;6/PR*H
E\üX*\W\GRWHMWUDQVIRUPDFML]ZáDV]F]DMHOLUy*QLFHPLG]\PRGHODPLV]QDF]QHLQLH]EGQHMHVW
]áo*RQHSU]HNV]WDáFHQLH
4.3.3. Zastosowanie XSL do tworzenia dokumentacji
$XWRUWHJRUHIHUDWXPDEDUG]RSR]\W\ZQHGRZLDGF]HQLDZQLHFRQLHW\SRZ\PVWRVRZDQLX;6/
2Wy*X*\ZDJRRVWDWQLRGRüLQWHQV\ZQLHGRSURGXNRZDQLDGRNXPHQWDFMLSURMHNWRZHMZ]áR*RQ\FK
projektach informatycznych.
;6/V]F]HJyOQLHSU]\GDMHVLZHZF]HVQ\FKID]DFKSURMHNWXSODQRZDQLHDQDOL]DVWUDWHJLF]QD
JG\SU]HWZDU]DQDLQIRUPDFMDMHVWZGX*HMF]FLWHNVWRZDDQLHGRNRQDQRMHV]F]HZ\ERUXQDU]G]L
GODSURMHNWXQLHPR*QDZLFSRVáX*\üVLQSSDNLHWHP&$6(
3U]\NáDG
:GX*HMNRUSRUDFMLSURZDG]RQRSURMHNWSLORWRZ\PDMF\QDFHOXSUyEQH]DVWRVRZDQLHWHFKQLN
data mining
GRXVSUDZQLHQLDSURFHVyZEL]QHVRZ\FK3LHUZV]\PHWDSHPSURMHNWXE\áRZ\W\SRZa-
QLHW\FKSURFHVyZZNWyU\FK]DVWRVRZDQLHHNVSORUDFMLGDQ\FKMHVWZRJyOHPR*OLZHQSLVWQLHM
WDPGDQHZRGSRZLHGQLHMLORFLLMDNRFLLGDMHMDNLHQDG]LHMHQDSRSUDZSURFHVX
6WZRU]RQR VIRUPDOL]RZDQ\ VSRVyE RSLVX SURFHVyZ EL]QHVRZ\FK ]DOH*QRFL SRPLG]\ QLPL
PDJD]\QyZ GDQ\FK L LFK X*\FLD Z SRV]F]HJyOQ\FK SURFHVDFK :SURZDG]RQR WH* RGSRZLHGQLH
kryteria oceny.
Wyniki tak prowadzonej analizy zapisano w postaci plików w XML, o specjalnie zaprojektowa-
QHMVWUXNWXU]H3U]HNV]WDáFDMFRZHSOLNL]DSRPRFVNU\SWyZZ;6/X]\VNDQRUy*QRURGQHRSLV\L
zestawienia, w tym finalny ranking procesów najbardziej odpowiednich do zastosowania eksplora-
cji danych.
:\WZRU]RQH Z WHQ VSRVyE ]HVWDZLHQLD L RSLV\ ]áR*\á\ VL QD JáyZQ F]ü VSUDZR]GDQLD ]
SLHUZV]HMID]\SURMHNWX&RZD*QHX]\VNDQHZ\QLNLE\á\RGUD]XVIRUPDWRZDQHZVSRVyERGSo-
ZLHGQLGR]DPLHV]F]HQLDZVSUDZR]GDQLXDXWRUQLHPXVLDáZLFWUDFLüF]DVXQDSUDFRFKáRQQHUHGa-
gowanie opracowania.
:D*Q]DOHWWHJRSRGHMFLDGRWZRU]HQLDGRNXPHQWDFMLMHVWXQLNDQLHZLHORNURWQHJR]DSLV\Za-
QLDWHMVDPHMLQIRUPDFMLFRRV]F]G]DF]DVL²FRZD*QLHMV]H²QLHGRSXV]F]DQLHVSyMQRFL,n-
formacja jest wprowadzana do pliku XML jednokrotnie, a wykorzystywana jest w wielu zestawie-
niach, produkowanych przez odpowiednie skrypty XSL.
-]\N;6/
135
.ROHMQZD*QFHFKWDNLHJRSRGHMFLDMHVWXQLNQLFLHSUDFRFKáRQQ\FKF]\QQRFLUHGDNF\MQ\FK
'RNXPHQWSU]HNV]WDáFRQ\]DSRPRF;6/GR+70/GDMHVLEH]WUXGQRFLSU]HNRQZHUWRZDüGR
formatu
.rtf
UR]XPLDQHJRSU]H]ZLNV]RüSURFHVRUyZWHNVWX0LáRQLF\EDUG]LHMZ\UDILQRZa-
Q\FKPHWRGVNáDGXPRJSRVáX*\üVLVSHFMDOQ\PLZHUVMDPLSURJUDPXTE;SRWUDILF\PLEH]So-
UHGQLRLQWHUSUHWRZDüSOLNLZ;0/
6NU\SW\;6/PRJRF]\ZLFLHSURGXNRZDü]DUyZQRVSUDZR]GDQLDSU]H]QDF]RQHGRGUXNXMDNL
]DZLHUDMFHáF]QLNLhipertekstowe dokumenty do prezentacji w WWW.
1LHGDMFVLSRPLQü]DOHWWHJR]DVWRVRZDQLD;6/MHVWX*\FLHGDUPRZ\FKQDU]G]L²ZLHOH
SURFHVRUyZ ;6/ PR*QD SR]\VNDü EH] RSáDW 1LH V ]DWHP Z\PDJDQH *DGQH LQZHVW\FMH FR ZH
wcze
VQ\FKVWDGLDFKSURMHNWyZMHVWQDRJyáEDUG]RNRU]\VWQH
5. Podsumowanie
;6/MHVWHODVW\F]Q\PLVLOQ\PQDU]G]LHPVáX*F\PGRSU]HNV]WDáFDQLDLIRUPDWRZDQLDGRNu-
PHQWyZZ;0/=HZ]JOGXQDPR*OLZRFL]DVWRVRZDQLDGR]áR*RQ\FKWUDQVIRUPDFMLGRNXPHn-
WyZ]DZLHUDMF\FKGDQH;6/Z\GDMHVLE\üLQWHUHVXMF\GODSURMHNWDQWyZV\VWHPyZLQIRUPDF\j-
nych z bazami danych.
6SHF\ILNDFMD;6/MHVWQDXNRF]HQLXDF]FLQDMEDUG]LHMLQWHUHVXMFH]SXQNWXZLG]HQLD]DVWo-
VRZD]ZL]DQ\FK]ED]DPLGDQ\FKVJRWRZH3RMDZLá\VLWH*SLHUZV]H]GDWQHGRSUDNW\F]QHJR
]DVWRVRZDQLD LPSOHPHQWDFMH MHGQD ] QLFK ]DZDUWD MHVW Z QDU]G]LDFK WRZDU]\V]F\FK '%06
Oracle8i.
:\GDMHVL*HZQDMEOL*V]\FKODWDFK;0/EG]LHMHGQ\P]SRGVWDZRZ\FKURGNyZZ\PLDQ\
LQIRUPDFMLD]QDMRPRü]ZL]DQ\FK]QLPQDU]G]LZW\P;6/EG]LHQLH]EGQDND*GHPXSUo-
jektantowi systemów informacyjnych.
Bibliografia
1. Traczyk
T.,
0DFHZLF]:-]\N;0/ZDSOLNDFMDFK]ED]DPLGDQ\FK²PR*OLZRFL]DVWRVR
wania, pierw-
V]HGRZLDGF]HQLD0DWHULDá\,9.RQIHUHQFML
Developerów
LX*\WNRZQLNyZ2UDFOH
Ewolucja systemów in-
IRUPDW\F]Q\FKGDQHVSU]WRSURJUDPRZDQLHLDSOLNDFMH
, Zakopane 1998, ss. 143-146.
2.
7UDF]\N7-]\N;0/ZDSOLNDFMDFK]ED]DPLGDQ\FK²SRURNX0DWHULDá\9.RQIHUHQFML
Developerów i
X*\WNRZQLNyZ2UDFOH
Integracja danych i systemów informatycznych, Zakopane 1999, ss. 45-58.
3.
7UDF]\N7:SURZDG]HQLHGRM]\ND;0/,QIRUPDW\ND,661VV
4.
7UDF]\N7;0/L;6/0DWHULDá\;,,*yUVNLHM6]NRá\37,6]F]\UNF]HUZLHF
5. Grosso P., Walsh N.: XSL Concepts and Practical Use. XML Europe 2000, Paris, June 2000.
http://www.arbortext.com/xsl/tutorial.html
6. Extensible Markup Language (XML) 1.0. W3C Recommendation.
7. Extensible Stylesheet Language (XSL) 1.0. W3C Working Draft.
8. Namespaces in XML. W3C Recommendation.
9. XSL Transformations (XSLT) 1.0. W3C Recommendation.
10. XML Path Language (XPath) 1.0. W3C Recommendation.
11. Associating Style Sheets with XML Documents. Version 1. W3C Recommendation.
12. XML Support in Oracle8i and Beyond.
http://technet.oracle.com/tech/xml/
13. Using XML in Oracle Database Applications.
http://technet.oracle.com/tech/xml/