- ]\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]HQDGDMHVL
SRG]ELyU;6/QD]ZDQ\
XSLT (XSL Transformations
5HIHUDW VWDQRZL NRQW\QXDFM SUH]HQWDFML SRZL FRQ\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]HJOGDUN PXVLE\ü
]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/RJyOQLGH
DOHMHJRVNáDGQLD]RVWDáDZSHáQL]GHILQLRZDQDZ;0/]X*\FLHP
przestrzeni nazw (namespaces).
;6/SRP\ODQ\SLHUZRWQLHMDNRURGHNGHILQLRZDQLDDUNXV]\VW\OLVW\F]Q\FKRND]DáVL WDN*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/
MHVWZL FSU]HWZRU]HQLHLFKQD+70/7DNWH*VNRQVWUXRZDQ\]RVWDáSU]\NáDGSRGDQ\SRQi*HM
2.1. Rzut oka na XSL
3RGDQRWXSURVW\SU]\NáDGNWyU\SR]ZDOD]RULHQWRZDüVL MDNZ\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]HGPLRWSRZL FRQ\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]MHGQDNE G]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>
,VWRW G]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\FKKLHUDUFKL HOHPHQWyZLDWU\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]HQWXMFHKLHUDUFKL HOHPHQWyZLDWU\EXWyZ
6NU\SWZM ]\NX;6/VWHUXMHSU]HNV]WDáFHQLHPWHJRGU]HZDZGU]HZRZ\QLNRZHNWyUHPR*H
PLHü]XSHáQLHLQQVWUXNWXU 1DVW SQLHGU]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-
JOGDUN SRGGaQLHGU]HZDZ\QLNRZHJRNROHMQ\PSU]HNV]WDáFHQLRPLWS
,VWRWG]LDáDQLD;6/MHVWZL FSU]HNV]WDáFDQLHGU]HZUHSUH]HQWXMF\FKVWUXNWXU GRNXPHQWyZ
3U]HNV]WDáFHQLHWDNLHQD]\ZDVL WUDQVIRUPDFM;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:HZQ
WU]XV]DEORQXRNUHODVL
FRPD]QDOH(üVL
ZGU]HZLH
wynikowym. Przetwarzanie ma charakter rekurencyjny.
-DNRX]XSHáQLHQLHSU]HWZDU]DQLDUHNXUHQF\MQHJRVWRVRZDQHMHVWWDN*HSU]HWZDU]DQLHSURFHGXUDl-
QHS WOHSU]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]QDMGVL RZHRELHNW\
WRSRZLQQ\RQHE\üLQWHUSUHWRZDQHSU]H]SU]HJOGDUN LVWHURZDüVSRVREHPSUH]HQWDFML
2.3.
&] FLLZHUVMHVSHF\ILNDFML;6/
3RQLHZD*F] üM ]\ND;6/VWHUXMFDSU]HNV]WDáFHQLDPLMHVWNOXF]RZDZWRNXSUDFQDGM ]y-
NLHPZ\G]LHORQRMZRVREQVSHF\ILNDFM QD]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*\ZDVL QLHNLHG\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 ]\NDWUZDMREHFQLHGRVW SQDMHVWMHG\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*HZL FUR]SRF]\QDüVL RG
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/URO DUNXV]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@'HILQLXMHRQDLQVWUXNFM SU]HWZDU]DQLDRQDVW SXMFHM
SRVWDFLSDWU]SU]\NáDG
<?xml-stylesheet type="text/xsl" href="
plik_arkusza_stylistycznego"?>
,QVWUXNFM
W
XPLHV]F]DVL
ZSURORJXIRUPDWRZDQHJRGRNXPHQWX;0/
3RQLHZD*GRNXPHQWPR*HZ\PDJDüUy*QHJRIRUPDWRZDQLDZ]DOH*QRFLRGVSRVREXSU]HSUo-
ZDG]DQLDSUH]HQWDFMLQSRGSURJUDPXGRWHJRVáX*FHJRZMHGQ\PGRNXPHQFLHPR*QDXPLHFLü
kilka instrukcji
<?xml-stylesheet?>
Uy*QLF\FKVL ZDUWRFLpseudoatrybutu
media
. W pliku
]SU]\NáDGXPR*QDE\QSXPLHFLüGRGDWNRZRLQVWUXNFM SRVWDFL
<?xml-stylesheet type="text/xsl" media="lynx" href="konspekty.lynx.xslt"?>
²LQVWUXNFMDWDE\áDE\XZ]JO GQLRQDMHOLGRSUH]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]DFML2NUHODVL ZQLHMWDNLHFHFK\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]DVL Z\á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]DEORQyZSRGDMHVL Z]RUFHVáX*FHGRZ\V]XNLZDQLDRGSRZLHGQLFKHOe-
PHQWyZZGU]HZLHZHMFLRZ\P:]RUFHWHV]DSLVDQHZM
]\NX;3DWKRNWyU\PZL
FHMQDSLVDQR
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\7UDQVIRUPDFMDSROHJDZL FQDZ\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
XGDVL DÄ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]E GQHMHVW
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] ZL F 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\PDJDVL MHJRSRGDZDQLD
3U]HWZDU]DQLHNROHMQ\FKHOHPHQWyZNRF]\VL QDSR]LRPLHOLFLGU]HZD/LFLHGU]HZDRGSo-
ZLDGDM ]DZDUWRFL HOHPHQWyZ QDMQL*V]HJR SR]LRPX ² D ZL F 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\PDJDVL MHJRSRGDZDQLD
:LPSOHPHQWDFMDFKQSZ06,(V]DEORQ\ZEXGRZDQHE\ZDMMHGQDNQLHXZ]JO GQLRQHQLe-
]E GQHMHVWZyZF]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]JO GHPELH*FHJRNRQWHNVWX
.RQWHNVWWHQ]DOH*\RGV\WXDFMLZNWyUHMZ\ZRáDQD]RVWDáDLQVWUXNFMDSRZRGXMFDGRSDVRZ\ZDQLH
wzorców.
1DMZD*QLHMV]\PNRQWHNVWHPMHVWWHQ]ZL]DQ\]ZQ WU]HPV]DEORQX3U]\M WR*HNRQWHNVWHP
LQVWUXNFMLG]LDáDMF\FKZÄFLHOH´V]DEORQXMHVWWHQHOHPHQWNWyU\MHVWZáDQLHSU]HWZDU]DQ\SU]H]
yZV]DEORQ:]RUFHX*\ZDQHZÄFLHOH´V]DEORQXVZL
FSRGDZDQHZ]JO
GHPELH*FHJRHOHPHQWX
dopasowanego do wzorca
match
szablonu.
5HNXUHQF\MQH SU]HWZDU]DQLH SRZRGXMH ZL F ÄZ GUyZN ´ NRQWHNVWX SR NROHMQ\FK SR]LRPDFK
GU]HZD ZHMFLRZHJR 8DNW\ZQLHQLH V]DEORQX QD VNXWHN G]LDáDQLD LQVWUXNFML
xsl:apply-
templates
SRZRGXMH]PLDQ NRQWHNVWXRMHGHQSR]LRPZNLHUXQNXOLFLGU]HZD
3
.
']L NLWHPXUR]ZL]DQLXZ]RUFH
match
V]DEORQyZQLHPXV]]DZLHUDüFLH*HNEH]Z]JO GQ\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]\üVL PR*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 S WOL
xsl:for-each
czy warunków
xsl:if
lub
xsl:choose
.
3 WOD
xsl:for-each
XPR*OLZLDLWHUDF\MQHSU]HJOGDQLHHOHPHQWyZGRSDVRZDQ\FKGRZ]RUFD
podanego w atrybucie
select
:SU]\NáDG]LHZ\NRU]\VWDQRS WO GRZ\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]HFWRZDUXQHNE G]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-HOLZL FSRWU]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]\LQVWUXNFM SU]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]\M WRWH*ZD*QLEDUG]RZ\JRGQ]DVDG L*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]QDMGXMHVL NRSLRZDQ\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]JO GHPZDUWRFLHOHPHQWXOXEDWU\EXWX:VWDUV]HMZHUVML;6/GR
RNUHOHQLDVSRVREXVRUWRZDQLDVáX*\áDWU\EXW
order-by
SDWU]SU]\NáDGZUHIHUDFLH>2]). W XSLT
ZSURZDG]RQR GRGDWNRZ LQVWUXNFM R ZL NV]\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/VWRVXMHVL Z]RUFHGRZ\V]XNLZDQLDRGSRZLHGQLFKHOHPHQWyZOXE
DWU\EXWyZZGU]HZLHZHMFLRZ\P3RQLHZD*WDNLHVDPHZ]RUFH]DSLVDQHZSRVWDFLFLH*HNpa-
ths
X*\ZDQHVWDN*HGRDGUHVRZDQLDIUDJPHQWyZGRNXPHQWyZZM ]\NX;3RLQWHUSDWU]>4]) i
]DSHZQHE
GSRGVWDZVSHF\ILNDFMLM
]\ND]DS\WD;0/Query (patrz [4@VSHF\ILNDFM
M
]\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]RURZDQRVL WX]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]XNLZDQHE GHOHPHQW\:VSyáU] GQHV]Z\NOHSo-
GDZDQHZ]JO GHPELH*FHJRNRQWHNVWXPR*QDWH*SRGDüZVSyáU] GQHEH]Z]JO GQHUR]SRF]\QDMF
FLH*N RGV\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 QDVW SXMF\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\Z NLONXWHVWyZRGG]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\NDWSRGDMHVL ZQDZLDVDFKNZDGUDWRZ\FKEH]SRUHGQLRSRWHNFLHWHVWX
Z ]áD
1DMSURVWV]\SUHG\NDW]DZLHUDOLF]E NWyUDRNUHODNROHMQ\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]JO GHPNRQWHNVWXWHJRZ ]á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(...)
8VXQL FLHZLRGF\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²SRGDMHVL GRQLFKFLH*N QS
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]HJOGDUN 06,(
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]ZLQL FLDSRGDQHJRZ]RUFD=PLHQQDPR*H]DZLHUDüZDUWRüWHNVWRZ]ELyUZ ]áyZ
OXEGU]HZRZ ]áyZ
=DVL J ]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üWHNVWRZD7DNFHFK PDMQSDWU\EXW\
name
instrukcji
xsl:element
i
xsl:attribute
:WDNLFKV\WXDFMDFKZ\UD*HQLHOXEQD]Z ]PLHQQHMSRSU]e-
- ]\N;6/
131
G]RQ]QDNLHP
$
XMPXMHVL GRGDWNRZRZQDZLDV\NODPURZH²R]QDF]DWRL*ZDUWRü]PLHQQHM
OXEZ\UD*HQLDE G]LH]DPLHQLRQDQDQDSLV.RQVWUXNFM W Z\NRU]\VWDQRZSU]\NáDG]LH
3.3.2. Tryby
(modes)
=GDU]DVL L*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áQLDVL RDWU\EXWRQD]ZLH
name
²VWDMHVL RQ
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]PLHQLDVL L²LQDF]HMQL*GODZ\ZRáDQLDQDVNXWHN
xsl:apply-templates
— pozo-
VWDMHWDNLVDPMDNLRERZL]\ZDáGODPLHMVFDVNGV]DEORQZ\ZRáDQR
6]DEORQQD]ZDQ\PR*HPLHüSDUDPHWU\3DUDPHWU\IRUPDOQHV]DEORQXGHILQLXMHVL XPLHV]F]a-
MFZMHJRZQ WU]XLQVWUXNFMH
xsl:param
1D]Z SDUDPHWUXSRGDMHDWU\EXW
name
DZDUWRüGo-
P\OQRNUHODVL WDNMDNGOD]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]DVL LQVWUXNFMH
xsl:with-param
=QRZXQD]Z SDUDPHWUXSo-
GDMHVL ZDWU\EXFLH
name
]DZDUWRüRNUHODVL WDNMDNGOD]PLHQQHM²SRGDMFZ\UD*HQLHZ
atrybucie
select
OXEZ]RU]HFZHZQ WU]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]DQHJRSOLNXSRGDMHVL ZDWU\EXFLH
href
. Instrukcja
xsl:include
SRZRGXMHZáF]HQLH]DZDUWRFLSOLNXZPLHMVFXZ\VWSLHQLDLn-
VWUXNFMLZáF]RQD]DZDUWRüMHVWZL FWUDNWRZDQDWDNVDPRMDNSR]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] FLHMVWRVXMHVL SU]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/VWDQRZLPQLHMZL FHMVXP PR*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]\M WRPRGHOSUH]HQWDFMLZNWyU\PGRNXPHQWPR*H]DZLHUDüQDVW SXMFHRELHNW\
•
page-sequence
²JáyZQHF] FLGRNXPHQWXUy*QLFHVL PL G]\VREUR]NáDGHPVWURQ\
•
flow
²F] FLGRNXPHQWXPDMFHFKDUDNWHUVHNFMLUR]G]LDá\SRGUR]G]LDá\LWS]DZDUWHZ
obiektach page-sequence;
•
block
²DNDSLW\LSRGREQHF] FLGRNXPHQWX
•
inline
²F] FLDNDSLWyZUy*QLFHVL QSF]FLRQN
•
wrapper
²ÄQLHZLG]LDOQH´RELHNW\E GFHF] FLDPLEORNXOXEinlineVáX*FHGRÄ]DF]HSLe-
QLD´GDMF\FKVL G]LHG]LF]\üZáDFLZRFL
•
graphic
²UHIHUHQFMHGR]HZQ WU]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]FHMXVWRZDQLDZFL FLDLWGQS
<fo:page-sequence font-family="serif" font-size="12pt">
RNUHODF]FLRQN X*\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/QDWRPLDVWZL NV]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áXJ ZL NV]HMF] FLLQVWUXNFML;6/GRW\F]F\FKWUDQs-
formacji, ale w wersji sprzed specyfikacji XSLT.
1LHZWSOLZ]DOHW06,(MHVWIDNW*HSURFHVRU;0/MHVWZEXGRZDQ\ZSU]HJOGDUN PR*QD
ZL FSU]HV\áDüGRQLHMEH]SRUHGQLRGRNXPHQW\Z;0/LDUNXV]HVW\OLVW\F]QHZ;6/3U]HJOGDr-
NDGRNRQXMHWUDQVIRUPDFMLQD+70/LSUH]HQWDFMLZ\QLNRZHJRGRNXPHQWX8*\WNRZQLNPDGRVW S
- ]\N;6/
133
GR(UyGáRZHJRGRNXPHQWXZ;0/PR*HJRX*\üQSGRGDOV]HJRSU]HWZDU]DQLD3R]DLQVWDOo-
ZDQLXGRVW
SQ\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\ZDQHZSDPL FLcacheSU]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-
VW
SQH 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-DYDXGRVW SQLDNODV\
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*QURO ZG]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 BeansE GF\]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/RZHJRDQDVW SQLH
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\ XGRVW SQLü
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-
PL WDQ\FKZED]LHGDQ\FKSUHIHUHQFMLX*\WNRZQLND:WHQVSRVyEPR*QDWZRU]\üSRUWDOH]XVáu-
JDPLSHUVRQDOL]RZDQ\PLQLHW\ONRFRGRWUHFLDOHWDN*HFRGRIRUP\
4.3.2.
:\PLDQDGDQ\FKPL G]\ED]DPL
;0/Z\GDMHVL LGHDOQ\PPHGLXPGRZ\PLDQ\GDQ\FKPL G]\ED]DPLGDQ\FK:SOLNX;0/
SU]HQRV]RQHVQLHW\ONRGDQHDOHWDN*HPHWDLQIRUPDFMD-HGQDNMHOLPRGHOHGDQ\FKZED]LHZ\j-
FLRZHMLGRFHORZHMUy*QLVL NRQLHF]QHMHVWGRNRQDQLHRGSRZLHGQLHMWUDQVIRUPDFML;6/PR*H
E\üX*\W\GRWHMWUDQVIRUPDFML]ZáDV]F]DMHOLUy*QLFHPL G]\PRGHODPLV]QDF]QHLQLH]E GQHMHVW
]á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]\GDMHVL ZHZF]HVQ\FKID]DFKSURMHNWXSODQRZDQLHDQDOL]DVWUDWHJLF]QD
JG\SU]HWZDU]DQDLQIRUPDFMDMHVWZGX*HMF] FLWHNVWRZDDQLHGRNRQDQRMHV]F]HZ\ERUXQDU] G]L
GODSURMHNWXQLHPR*QDZL FSRVáX*\üVL QSSDNLHWHP&$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]LHMHQDSRSUDZ SURFHVX
6WZRU]RQR VIRUPDOL]RZDQ\ VSRVyE RSLVX SURFHVyZ EL]QHVRZ\FK ]DOH*QRFL SRPL G]\ 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áZL
FWUDFLü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*QFHFKWDNLHJRSRGHMFLDMHVWXQLNQL FLHSUDFRFKáRQQ\FKF]\QQRFLUHGDNF\MQ\FK
'RNXPHQWSU]HNV]WDáFRQ\]DSRPRF;6/GR+70/GDMHVL
EH]WUXGQRFLSU]HNRQZHUWRZDüGR
formatu
.rtf
UR]XPLDQHJRSU]H]ZL NV]RüSURFHVRUyZWHNVWX0LáRQLF\EDUG]LHMZ\UDILQRZa-
Q\FKPHWRGVNáDGXPRJSRVáX*\üVL VSHFMDOQ\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.
1LHGDMFVL SRPLQü]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]JO GXQDPR*OLZRFL]DVWRVRZDQLDGR]áR*RQ\FKWUDQVIRUPDFMLGRNXPHn-
WyZ]DZLHUDMF\FKGDQH;6/Z\GDMHVL
E\ü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á\VL WH*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/E G]LHMHGQ\P]SRGVWDZRZ\FKURGNyZZ\PLDQ\
LQIRUPDFMLD]QDMRPRü]ZL]DQ\FK]QLPQDU]
G]LZW\P;6/E
G]LHQLH]E
GQDND*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/