XSL
XML-failist andmete eraldamiseks on mitmeid vahendeid. Üheks levinumaks
tekstiliste andmete eraldamise võimaluseks on XSL-i nimeline keel. Tegemist on
samuti XML-i reegleid järgiva dokumendiga, elementide kohta aga kirjas, mida
igaüks tähendab ning nende käskluste järgi on siis võimalik kõrvale antud XML-
failist sobivaid andmeid välja küsida.
Järgneva XSL-faili ülesandeks on inimeste andmetega failist välja küsida
esimene ning viimane eesnimi. Nagu aga näha, tuleb tulemuseni jõudmiseks
kirjutada õige mitu rida ning muudki toimetada. Kõigepealt XSL-faili analüüs.
Et XSL on tavaline XML-reeglite järgi kirjutatud fail, siis peab esimeseks
reaks paratamatult olema XMLi tüübideklaratsioon. See deklaratsioon peab hakkama
faili täiesti algusest, see tähendab, et isegi vaba rida ega tühikut ei
deklaratsioonirea ees olla. Muidu võib faili töötlev programm hätta jääda.
Järgnevalt tuleb element määramaks, et selle sees olevaid käske võib
käsitleda XSL-i programmeerimiskeele käskudena. Atribuut xmlns:xsl ja järgnev
URL teatavad, et kõik järgnevad xsl: algusega elemendid kuuluvad URLina näidatud
konstandi määratud nimeruumi ning ei saa sealtkaudu muude elementidega segamini
minna.
Kodeeringut määrav parameeter teatab, millisel kujul soovitakse tulemust
saada. Käsklus pole hädavajalik, kuid vaikimisi väljastatav kahebaidiste
tähtedega UTF-16 võib ühebaidiste tähtedega redaktorist lugedes keerukaks
osutuda. Kaldkriips elemendi lõpu juures tähistas, et elemendil enam eraldi
lõpukäsklust pole, kõik vajalik on siinsamas kirjas.
Edasine on juba rohkem andmetöötlusega seotud. Käsklust
võib võrrelda alustava alamprogrammiga programmeerimiskeeltes, nagu näiteks
main-meetodiga C-s või Javas. Kui soovida vaid lihtsat teksti väljastada, siis
kõik siinsesse elementi harilikult kirjutatu väljastatakse otse XML-i ja XSLi
ühendamisel tekkivasse väljundisse.
Et aga XSL on loodud XML-faili andmete põhjal sobiva väljundi
kokkupanekuks, siis saab siin vajalikust kohast andmeid küsida.
Element nimega xsl:value-of võimaldab oma select-atribuudis andmeid küsida
ning vajadusel ka nende põhjal miskit kokku arvutada. XMLi faili andmete poole
saab pöörduda elementide nime järgi. Kaldkriips algul tähendab, et alustatakse
juurelemendist; inimene[1] ütleb, et järjestikku paiknevatesti inimestest
küsitakse esimese andmeid, praegusel juhul tema eesnime väärtust. Ning jällegi
elemendi lõpus kaldkriips näitamaks, et xsl:value-of ei vaja eraldi
lõpukäsklust.
Nagu tõlkides aimata võib, annab last() loetelu elementide arvu, ehk
kokkuvõttes kätte viimase elemendi.
/inimesed/inimene[last()]/eesnimi
Ning edasi siis tuleb kõik lahti jäänud elemendid lõpetada.
Nüüd siis esimeseks näiteks toodud stiililehe kood tervikuna silma ette.
Esimene:;
Viimane:
Käivitamine Java abil
Valmis kirjutatud XSLi fail võib sama rahulikult kettal seista nagu iga
muu fail. Faili sisust saab kasu vaid juhul, kui miski programmi abil omavahel
ühendada XML- ning XSL-fail. Vastavad vahendid on olemas mitme
programmeerimiskeele juures. Samuti on loodud mitmeid käsurealt ja mujaltki
käivitatavaid vahendeid, mille ülesandeks XSL-i kujunduse ning XML-i andmete
põhjal soovitud tulemus välja küsida. Java keeles saab sellega hakkama objekt
tüübist Transformer, millele tuleb siis ette anda nii sisendandmed kui voog,
kuhu tulemused saata. Alates versioonist 1.4 on XMLi vahendid standardkomplekti
sisse paigutatud ning piisab vaid sobivate pakettide impordist.
Et edaspidi tarvidust mitmesuguste nimedega faile ühendada, siis ei
kirjutata failinimesid mitte koodi sisse, vaid palutakse need eraldi käsurealt
sisestada. Algusesse ka väikene seletus juhuks kui kasutajal pole programmikoodi
käepärast või tahab ta lihtsalt mugavamalt teada, mis parameetrid sisestada
tuleb. System.err'i erisuseks System.out'iga võrreldes on väljatrükk ka juhul,
kui tavaväljund toruga kusagile mujale suunatakse.
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;
public class XSLMuundur{
public static void main(String argumendid[]) throws Exception{
if(argumendid.length!=3){
System.err.println("Kasuta kujul java XSLMuundur andmefail.xml
muundefail.xsl tulemusfail.html");
System.exit(0);
}
Transformer tolkija=TransformerFactory.newInstance().
newTransformer(new StreamSource(argumendid[1]));
tolkija.transform(
new StreamSource(argumendid[0]),
new StreamResult(new FileOutputStream(argumendid[2]))
);
}
}
Kui kood kompileeritud, võib sella käima panna.
E:\kasutaja\jaagup\xml>java XSLMuundur inimesed.xml inimesed1.xsl tulemus.txt
Ning loodud tekstifaili sisu piiludes saab programmi töö tulemusi
imetleda.
E:\kasutaja\jaagup\xml>more tulemus.txt
Esimene:Juku;
Viimane:Oskar
Tahtes väljundit otse ekraanile suunata, piisab DOS-i keskkonna puhul
määramaks väljundfaili nimeks con.
E:\kasutaja\jaagup\xml>java XSLMuundur inimesed.xml inimesed1.xsl con
Esimene:Juku;
Viimane:Oskar
Käivitamine Visual Studio abil
Kui parajasti tuttav või käepärast .NET ja ASP.NET veebiserver näiteks Visual
Studio Web Developeri näol, siis ka seal saab suhteliselt vähese vaevaga panna
XSLi XMList andmeid võtma ja välja näitama. Töö alustamiseks pärast käivitamist
on soovitav luua uus veebilehestik (File -> New Web Site). Edasi tasuks sinna
panna XML-kujuline andmefail ning XSLT-muundefail. Ning et tulemust on mugav
vaadata genereeritaval veebilehel, siis on vaja ka veebivormi (.aspx-laiendiga).
XML- ja XSL-fail võivad eelmisega sarnased olla. Veebivormi sobivale kohale
tasuks panna aga asp:Xml-element, mis määrab, kust andmed võtta ning millise
muundamise teel nad lehele paigutada. Näiteks
Ja kogu aspx-fail siis kujul näiteks
<%@ Page Language="C#" %>
Andmete leht
Kui nüüd kõik komponendid üles leitakse, siis võib lehe käivitamise peale ilusti
tulemust näha, kus kaks nime veebilehele sobivatesse kohtadesse paigutatud.