Sunteți pe pagina 1din 10

smaranda.belciug@inf.ucv.

ro Laborator 6 Tehnologii Web si Programare Client Server

Transformare i procesarea XML XSL (eXtensible Stylesheet Language) este folosit mpreun cu XML. XSL este mai mult dect un tool folosit pentru a crea template-uri de afiare. XSL poate s converteasc un set de markup ntr-altul (XHTML PDF). Un document XSL este un document XML scris urmnd anumite reguli. Pentru a afia i a converti un document XML a fost nevoie de crearea a dou mecanisme diferite: XSL Transformations (XSLT) care se ocup de conversia dintr-un stil de markup ntr-altul XSL Formatting Object (XSL-FO) pentru afiarea XML-ului. XSLT Pentru a scrie un stylesheet XSLT trebuie identificat un element dintr-un document i specificat modul n care trebuie descris folosind alt element sau un set de elemente n nou document.

smaranda.belciug@inf.ucv.ro Exist posibilitatea c dou sau mai multe sisteme care fac schimb de date s nu foloseasc aceeai schem sau DTD. Ce e de fcut? Exemplu. 1. In momentul n care MyBusiness Inc. primete date de la Your Company Ltd., ele sunt descrise folosind markup ce se bazeaz pe schema sau DTD-ul lui Your Company Ltd. My Business Inc. transform pur i simplu acele date n formatul propriu (descris de schema sau DTD-ul lui MyBusiness Inc.) nainte de a le prelua. 2. O alt posibilitate ar fi, ca Your Company Ltd. s transforme datele sale n formatul XML a lui My Business Inc., nainte de a le trimite. Rolul XPath Fr XPath, XSLT nu ar merge. nainte de a transforma un element, un atribut sau o bucat de coninut folosint XSLT, trebuie s identifici locaia acestuia. De exemplu, dac dorim s folosim instanele din trei n trei dintr-o list, trebuie s specificm acest fapt cu XPath. XPath este o mulime de reguli foarte sofisticat. Se pot identifica elemente i atribute, dar se pot gsi i pri individuale de coninut string-uri- bazndu-se pe elementele i literele din jurul lor. XSL-FO XSL-FO este folosit pentru a specifica modul n care coninutului unui XML trebuie afiat. Obiectele de formatare XSL-FO sunt organizate n opt categorii: Declarare, paginare i layout Blocuri (paragrafe, citate etc.) Inline (bold, italic, culori specifice etc.) Tabele Liste Link-uri i multimedia Out-of-line (note de subsol) Alte obiecte de formatare care nu fac parte din categoriile de mai sus. Fiecare obiect de formatare are anumite proprietai. De exemplu, un obiect care creeaz un tabel (fo:table) poate s specifice grosimea marginilor, culoarea lor etc. !!! XSLT i XSL-FO sunt XML !!!

smaranda.belciug@inf.ucv.ro O simpl transformare folosind XSLT Un stylesheet XSLT conine instruciuni care spun computerului cum s converteasc fiecare element descris ntr-un document surs astfel nct s se potriveasc cu schema sau DTD din alt document. Exemplu. Transformarea fiierului books2.xml ntr-un document HTML. Listing books2.xml

Before

smaranda.belciug@inf.ucv.ro

After Listing books2.xsl

smaranda.belciug@inf.ucv.ro

Listing books2_xslt.css

smaranda.belciug@inf.ucv.ro

smaranda.belciug@inf.ucv.ro

Instruciunile dintr-un stylesheet XSLT care controleaz cum trebuie s fie convertit un element mpreun cu coninutul su se numesc template-uri. Elementul template are numele de: xsl:template. Un template ntr-un stylesheet XSLT se concentreaz asupra unui singur nod din document. Pentru a identifica acel nod, XSLT folosete atributul match cu elementul xsl:template. Valoarea lui match se numete pattern (model). Procesorul XSLT reine pattern-ul dup care l caut prin tot documentul aplicnd template-ul fiecarui nod care se potrivete cu patternul. Pe lng faptul c se folosesc pattern-uri pentru a identifica fiecare nod din sursa, template-urile specific i modul de transformare al lor. (value-of)

Ce spune codul de fapt? Pentru fiecare nod atribut (@) contentType, ia textul coninut n acel nod (. specific nodul curect) i transform-l n coninutul unei celule de tabel HTML. xsl:apply-templates o folosim atunci cnd dorim s returnm coninutul i textul nodurilor elementului curent + cele ale copiilor lui dar nu cel al tag-urilor din jurul lui. De exemplu, s punem coninutul cuprins ntre etichetele <price></price> ale elementului price, fr a pune i etichetele.

smaranda.belciug@inf.ucv.ro

XML i bazele de date XML i MySQL S presupunem c vrem s extragem datele dintr-un tabel numit, care are dou coloane, i s crem un fiier XML. Date 09/10/2011 10/10/2011 11/10/2011 Script PHP
<?php header("Content-type: text/xml"); $host = "localhost"; $user = "root"; $pass = ""; $database = "test"; $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); mysql_select_db($database, $linkID) or die("Could not find database."); $query = "SELECT * FROM blog ORDER BY date DESC"; $resultID = mysql_query($query, $linkID) or die("Data not found."); $xml_output = "<?xml version=\"1.0\"?>\n"; $xml_output .= "<entries>\n"; for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ $row = mysql_fetch_assoc($resultID); $xml_output .= "\t<entry>\n"; $xml_output .= "\t\t<date>" . $row['date'] . "</date>\n"; // scapam de caracterele ilegale $row['text'] = str_replace("&", "&", $row['text']); $row['text'] = str_replace("<", "<", $row['text']); $row['text'] = str_replace(">", "&gt;", $row['text']); $row['text'] = str_replace("\"", "&quot;", $row['text']); $xml_output .= "\t\t<text>" . $row['text'] . "</text>\n"; $xml_output .= "\t</entry>\n"; } $xml_output .= "</entries>"; echo $xml_output;

Text Bla bla bla 1 Bla bla bla 2 Bla bla bla 3

smaranda.belciug@inf.ucv.ro
?>

n codul de mai sus am executat trei pai importani. Primul pas este conectarea la baza de date. Prima linie spune browser-ului sau oricrui alt program care va folosi acest fiier s-l interpreteze c fiind XML i nu PHP.
header("Content-type: text/xml");

n urmtoarele linii avem variabilele care pstreaz valorile conectrii la baza de date.
$host = "localhost"; $user = "root"; $pass = ""; $database = "test";

Apoi ne conectm la serverul MySQL i selectm baza de date pe care o vom folosi.
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); mysql_select_db($database, $linkID) or die("Could not find database.");

Urmtoarele dou linii conin query-ul pe care vrem s-l executm. Apoi folosim fucia mysql_query pentru a executa query-ul i pentru a salva rezultatele n variabila $resultID.
$query = "SELECT * FROM blog ORDER BY date DESC"; $resultID = mysql_query($query, $linkID) or die("Data not found.");

In continuare vom folosi variabila pentru output-ul XML.


$xml_output = "<?xml version=\"1.0\"?>\n"; $xml_output .= "<entries>\n";

Urmtoarele linii reprezint un ciclu for care preia datele rezultate din query i le pune n output, atta timp ct avem linii n baza de date. mysql_fetch_assoc() ia linia curent din baza de date i o pune ntr-un array asociat. Este o metoda foarte bun de reinere a informaiilor, deoarece n cazul n care dorim s le folosim ca i output vom folosi $arrayName[fieldName]. Cele trei linii care folosesc str_replace ne ajut s scpm de caracterele XML ilegale care ar putea s ne strice output-ul. (In cazul de fa se folosete doar pentru text, deoarece acolo pot s apar erori.
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ $row = mysql_fetch_assoc($resultID); $xml_output .= "\t<entry>\n"; $xml_output .= "\t\t<date>" . $row['date'] . "</date>\n"; // Escaping illegal characters

smaranda.belciug@inf.ucv.ro
$row['text'] = str_replace("&", "&amp;", $row['text']); $row['text'] = str_replace("<", "&lt;", $row['text']); $row['text'] = str_replace(">", "&gt;", $row['text']); $xml_output .= "\t\t<text>" . $row['text'] . "</text>\n"; $xml_output .= "\t</entry>\n"; }

Se nchide XML cu tag-ul final.


$xml_output .= "</entries>";

Dup care afiam string-ul XML:


echo $xml_output;

10