HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

XML dokumentumhoz XSL készítése


XML 5. rész

Példaprogram letöltése

17340 bájt

Ez előző részben egy lekérdezés adatait tároltuk el XML dokumentumban. Most egy kicsit továbbfejlesztjük ezt a programot, és az XML dokumentumhoz létrehozunk egy DTD-t, valamint egy XSL stíluslapot, melynek használatával elérjük, hogy egy böngészővel is meg tudjuk jeleníteni az adatokat, méghozzá egy formázott HTML oldal formájában.
A DTD az XML dokumentum elemeinek definícióját tartalmazza. Ez a mellékelt példában a következőképpen néz ki:
<!ELEMENT customers (hiv?, customer+)>
A deklaráció szerint a customers elem (ami az összes többi elemet is tartalmazza) tartalmazhat hiv elemeket és legalább egy customer elemet, ami akár több is lehet. A "?" azt jelenti, hogy nem kell kötelezően léteznie ilyen elemnek, míg a "+" jel azt mondja meg, hogy az adott elemből legalább egy, de adott esetben akár több is előfordulhat.
<!ELEMENT customer (company, city, country, order+)>
A customer elem kötelezően tartalmaz egy darab company, city és country elemet, valamint legalább egy, vagy akár több order elemet.
<!ELEMENT order (employee+)>
Az order elem employee elemeket tartalmazhat csak, de legalább egy darabot.
<!ELEMENT hiv (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT city (#PCDATA)>
A hiv, company, country és city elemek szöveges adatot tartalmaznak, ezt jelzi a #PCDATA deklaráció. Ezek további elemeket nem tartalmazhatnak.
<!ELEMENT employee (empno, firstname, lastname, phone, hiredate, salary)>
Az employee elemnek a következő elemeket kell tartalmaznia, de mindegyikből csak egyet: empno, firstname, lastname, phone, hiredate, salary. Ezek az elemek szintén csak szöveges adatot tartalmazhatnak, és más elemeket nem.
<!ELEMENT empno (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT hiredate (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
A customer, order és hiv elemeknek attribútuma is van, ezeket adhatjuk meg az !ATTLIST definícióban. A customer és az order elemek azon attribútuma (jellemzője) az azonosításra szolgál, ezt jelzi az ID, ami a HTML name megfelelője. Ez egy kötelezően megadandó attribútum, amit a #REQUIRED mutat. A hiv elem cel attribútuma, mint a neve is mutatja egy hivatkozás (IDREF), amit szintén kötelezően meg kell adni. Ez ugyanaz, mint a HTML-ben a href.
<!ATTLIST customer azon ID #REQUIRED>
<!ATTLIST order azon ID #REQUIRED>
<!ATTLIST hiv cel IDREF #REQUIRED>
Maga az XML dokumentum az előző példához képest annyiban változik, hogy a dokumentum elején hivatkozunk a DTD-re és a stíluslapra:
<!DOCTYPE customers SYSTEM "test.dtd">
<?xml:stylesheet type="text/xsl" href="test.xsl"?>
A !DOCTYPE után a dokumentum típusát kell megadni, ami megegyezik a gyökér elem nevével. A SYSTEM kulcsszó arra utal, hogy egy külső fájlra hivatkozunk, amit az adott ponttól kell beszúrni a dokumentumba. Ez a fájl nem más, mint a fent ismertetett DTD-t tartalmazó "test.dtd" állomány.
A következő sorban a stíluslapra hivatkozunk.

Más változás is van a dokumentumban. A customers elem hiv elemeket tartalmaz, melyek hivatkozások a dokumentumban szereplő customer elemekre. Ennek elsősorban a böngészőben való megjelenítésnél vesszük hasznát, ahol az oldal tetején fel lesznek sorolva ezek a hivatkozások.

A dokumentum átalakítása egy XSL állomány tartalma szerint történik, ezért létrehozzuk ezt a fájlt is. Ezt nem adatbázisból állítjuk elő, hanem előre megszerkesztjük. Egy ilyen XSL állomány ugyanúgy megnyitható Internet Explorer-rel, mint egy XML fájl, így a szerkezetét könnyebb áttekinteni. Ha az Explorer-rel megnyitunk egy XML állományt, amihez tartozik egy XSL állomány is, akkor nem a dokumentum szerkezetét fogja megjeleníteni, hanem az XSL tartalma szerint feldolgozza azt, és az így megformázott dokumentumot látjuk.

Az XSL fájl eleje így néz ki:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template match="/">
Az első sor tulajdonképpen megegyezik az XML fájl elejével. Az encoding attribútum megadására azért van szükség, hogy ékezetes karaktereket is tudjunk használni.
A következő sor az XSL verziószámát, és a névteret azonosítja. A névtér használatára szükség lesz az XSL-specifikus parancsok használatánál, ezzel különböztetve meg azokat a többi elemtől.
A harmadik sorban egy minta deklaráció található. Minden XSL fájlban legalább egy ilyennek kell szerepelnie. A match attribútum értéke egy "/" karakter, amely a gyökeret azonosítja. Ezzel azt érjük el, hogy a template elemben megadott mintát az egész dokumentumra érvényesíteni akarjuk. Ettől kezdve már vegyesen használunk HTML és XSL elemeket a feldolgozáshoz.
Az XML dokumentumban előfordulnak ismétlődő elemek, melyeket ugyanúgy kell megformázni. Erre használható az XSL for-each utasítása:
        <xsl:for-each select="customers/hiv">
          <A><xsl:attribute name="href"><xsl:value-of select="@cel"/></xsl:attribute><xsl:value-of/></A>
        </xsl:for-each>
A fenti példa az összes hiv elemre - amely a customers elemen belül található - vonatkozó átalakítási szabályt ír le. Az <A> elem egy egyszerű HTML elem, amely egy hivatkozást zár közre. Ennek kell, hogy legyen egy href attribútuma, aminek az értéke a hivatkozott elem azonosítója (name). Az attribute paranccsal létrehozzuk ezt. Az attribute parancs name jellemzője megadja az elem attribútumának nevét. Ezután ennek értéket is kell adni, ami a value-of paranccsal történik. Ennek select jellemzőjén keresztül adhatjuk meg ezt az értéket. A "@" karakter azt jelzi, hogy ezt egy attribútumból vesszük, méghozzá a hiv elem cel attribútumából. Ha a "@" karaktert nem adjuk meg, akkor a hiv elem cel elemének tartalmát adná meg, ami nem is létezik, hiszen cel nevű elem nincs. Ha megvan az érték is, akkor lezárjuk az attribute elemet, majd szintén a value-of paranccsal beszúrjuk a hiv elem tartalmát. Ha nem adunk meg a value-of parancs után select-et, akkor az éppen feldolgozott elem tartalma lesz az adott helyre beszúrva, mint ebben az esetben. Be kell még szúrnunk egy </A> HTML elemet, amivel lezárjuk a hivatkozást. Ha elvégeztünk minden szükséges műveletet, akkor a for-each elemet is le kell zárni. Ezzel a fenti kódrészlettel azt értük el, hogy az összes hivatkozás a dokumentum elején fel lesz sorolva egymás mellett úgy, hogy mindegyik a dokumentum megfelelő részére hivatkozik.

A következő feladat a customer elemek feldolgozása. Ebből szintén több található a dokumentumban, tehát megint a for-each parancsot használjuk. Elsőként szintén beszúrunk egy <A> HTML elemet, de most ennek a name attribútumát állítjuk be, majd le is zárjuk az elemet. A fenti hivatkozások ezekre a célpontokra fognak mutatni.
<xsl:for-each select="customers/customer">
          <A><xsl:attribute name="NAME"><xsl:value-of select="@azon"/></xsl:attribute></A>
A következő rész elsőre talán bonyolultnak tűnhet, de csak a HTML elemek használata miatt. A lényeg
    a kódrészletben a value-of parancsok. A select attribútumoknak most nem egy attribútumot adunk
        értékül, hanem a company, country és city elemek tartalmát.
<P><H2 STYLE="margin-bottom: 0px;"><xsl:value-of select="company"/></H2>
<H3 STYLE="margin-top: 0px;"><xsl:value-of select="country"/>, <xsl:value-of select="city"/></H3></P>
A többi kódrészlet már értelmezhető a fentiek ismeretében. A fájl végén nem szabad elfeledkezni a
    template és a stylesheet elemek lezárásáról:
</xsl:template>
</xsl:stylesheet>


      

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 409. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |