Am inceput sa punem pe site laboratoarele si temele pentru interfete web. Momentan avem o problema cu upload-ul de fisiere deci rezolvarile vor fi temporar in format text.
Acum puteti gasi rezolvarile pentru:
- Javascript
- XSL
- XML Schema
- RDF, OWL
- Search cu highlight
Se afișează postările cu eticheta xml. Afișați toate postările
Se afișează postările cu eticheta xml. Afișați toate postările
Despre XSL
XSL este o prescurtare a eXtensible Stylesheet Language, si defineste un standard de descriere a fisierelor XML. Un fisier XSL ofera unui browser informatii despre modul de afisare al lui fisier XML, similar cum pentru HTML se foloseste CSS.
Cel mai simplu mod de utilizare pentru a vedea functionalitatea si utilitatea limbajului este crearea unui fisier XSL ce va contine informatii despre formatarea nuui fisier XML. Pentr a realiza legatura intre cele doua fisier, in fisierul xml ce se doreste formatat se va introduce linia:
, atributul href indicand fisierul de formatare folosit. Browserul se va ocupa in continuare, la deschiderea fisierului XML, de a aplica formatarea descrisa in foaia_de_formatare.xsl.
Cel mai important element din XSLT este templateul, avand sintaxa:
<xsl:template match="element_XPath">
<!--prelucrari-->
<xsl:template>
Elementul match specifica o expresie XPath dupa care se indentifica nodurile ce vor fi prelucrate. In interiorul XSL:template se vor prelua apoi datele dorite din nodul gasit si se va face formatarea lor. Un fisier xsl va avea urmatoarea structura:
<xsl:stylesheet version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
.......
</xsl:template>
</xsl:stylesheet>
In locul tagului “xsl:stylesheet” se poate folosi si:
<xsl:transform version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:transform>
Ca urmare a folosirii xsl:template, elementul indicat de match (in exemplul de mai sus fiind vorba de nodul radacina) va fi inlocuit cu continutul
Alte cateva elemente importante sunt:
-> <xsl:value-of> ce va extrage valoare unui nod extras folosind o expresie XPath
-> <xsl:for-each> ce permite extragerea unui set de noduri ce indeplinesc o conditie XPath, fiecare fiind apoi formatat.
-> <xsl:sort> ce va realiza sortarea elementelor, atributul select indicand campul dupa care se va face sortarea, iar atributul order, ordinea finala a elementelor.
Un mic exemplu ce permite afisarea xml-ului generat la exportarea cartilor din libraryul gmail intr-un tabel, sortate dupa titlu este urmatorul:
<xsl:stylesheet version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>ID</th>
<th>URL</th>
<th>Title</th>
<th>Authors</th>
<th>ISBN</th>
<th>Labels</th>
</tr>
<xsl:for-each select="//book">
<xsl:sort order="ascending" select="title"/>
<tr>
<td><xsl:value-of select="id"></xsl:value-of>
</td>
<td><xsl:value-of select="url"></xsl:value-of>
</td>
<td><xsl:value-of select="title"></xsl:value-of>
</td>
<td><xsl:value-of select="contributor"></xsl:value-of>
</td>
<td><xsl:value-of select="//identifier[.//type='ISBN']/value"></xsl:value-of>
</td>
<td>
<xsl:for-each select="labels/label">
<xsl:value-of select="."> ,
</xsl:value-of>
</xsl:for-each></td>
</tr>
</xsl:for-each >
</table>
</body >
</html >
</xsl:template>
</xsl:stylesheet>
Cel mai simplu mod de utilizare pentru a vedea functionalitatea si utilitatea limbajului este crearea unui fisier XSL ce va contine informatii despre formatarea nuui fisier XML. Pentr a realiza legatura intre cele doua fisier, in fisierul xml ce se doreste formatat se va introduce linia:
, atributul href indicand fisierul de formatare folosit. Browserul se va ocupa in continuare, la deschiderea fisierului XML, de a aplica formatarea descrisa in foaia_de_formatare.xsl.
Cel mai important element din XSLT este templateul, avand sintaxa:
<xsl:template match="element_XPath">
<!--prelucrari-->
<xsl:template>
Elementul match specifica o expresie XPath dupa care se indentifica nodurile ce vor fi prelucrate. In interiorul XSL:template se vor prelua apoi datele dorite din nodul gasit si se va face formatarea lor. Un fisier xsl va avea urmatoarea structura:
<xsl:stylesheet version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
.......
</xsl:template>
</xsl:stylesheet>
In locul tagului “xsl:stylesheet” se poate folosi si:
<xsl:transform version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:transform>
Ca urmare a folosirii xsl:template, elementul indicat de match (in exemplul de mai sus fiind vorba de nodul radacina) va fi inlocuit cu continutul
Alte cateva elemente importante sunt:
-> <xsl:value-of> ce va extrage valoare unui nod extras folosind o expresie XPath
-> <xsl:for-each> ce permite extragerea unui set de noduri ce indeplinesc o conditie XPath, fiecare fiind apoi formatat.
-> <xsl:sort> ce va realiza sortarea elementelor, atributul select indicand campul dupa care se va face sortarea, iar atributul order, ordinea finala a elementelor.
Un mic exemplu ce permite afisarea xml-ului generat la exportarea cartilor din libraryul gmail intr-un tabel, sortate dupa titlu este urmatorul:
<xsl:stylesheet version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>ID</th>
<th>URL</th>
<th>Title</th>
<th>Authors</th>
<th>ISBN</th>
<th>Labels</th>
</tr>
<xsl:for-each select="//book">
<xsl:sort order="ascending" select="title"/>
<tr>
<td><xsl:value-of select="id"></xsl:value-of>
</td>
<td><xsl:value-of select="url"></xsl:value-of>
</td>
<td><xsl:value-of select="title"></xsl:value-of>
</td>
<td><xsl:value-of select="contributor"></xsl:value-of>
</td>
<td><xsl:value-of select="//identifier[.//type='ISBN']/value"></xsl:value-of>
</td>
<td>
<xsl:for-each select="labels/label">
<xsl:value-of select="."> ,
</xsl:value-of>
</xsl:for-each></td>
</tr>
<
</xsl:stylesheet>
Despre retele sociale
Cred ca toata lumea a auzit de cel putin unul din numele: YouTube, hi5 , Facebook, Flikr, Yahoo360 , Twitter, LinkedIn.

Ce este o retea sociala de fapt? Este vorba de o structura formata din noduri ce pot reprezenta oameni sau organizatii si legaturile dintre ele. Legaturile pot avea diferite semnificatii. Se considera o legatura intre 2 astfel de noduri atat cand este vorba de 2 persoane ce au o relatie de prietenie, dar si cand o persoana primeste un comentariu (la videoclip, profil, poze), un raspuns (videoclip-youtube), un semn (signs-hi5), sau o recomandare(LinkedIn).
Considerand astfel un nod pentru fiecare persoana sau organizatie si un arc fiecare legatura intre 2 noduri, se obtine un graf.
Am avut de curand de redactat o tema ce dorea explorarea relatiilor dintr-o retea sociala si salvarea lor intr-un format structurat (xml). Ce am realizat facand aceasta tema, este pe de-o parte numarul mare al retelelor sociale existente dar si faptul ca datorita diferitelor tipuri de legaturi existente si numarului mare de persoane inscrise in aceste retele, grafurile sunt
extraordinar de complexe. Cum am putea atunci face o parcurgere in-un astfel de graf cat mai eficient? Well, depinde ce ne intereseaza. Pentru relatiile unei anumite persoane(ca in cerinta) se poate merge accesand prietenii si celelate tipuri de relatii oferite de reteaua sociala, printr-o parcurgere in latime pana la adancimea ceruta. Problema va creste insa semnificativ cu cat adancimea creste.
Ce se intampla insa daca se doreste toata baza de date existenta?
Inainte de a primi tema de retele sociala, am realizat o aplicatie de lua baza de date de utilizatori de pe un site, plecand de la id-ul acestora. Partea foarte neplacuta era ca pentru toate persoanele ce si-au sters contul, id-ul lor a ramas nefolosit. Ca urmare la fiecare pas se verifica intai ca id-ul este valid, rezultand un overhead in plus. (Numarul de id-uri mergea intre 1 si 250mii, relativ mic fata de retele sociale precum Hi5, Facebook sau LinkedIn si totusi extragerea intregii baze de date dura pana la 8 ore)
O solutie de optimizare ar fi fost sa se faca plecarea de la un anumit user si accesand prietenii lui, apoi prietenii acestora s.a.m.d. Insa solutia nu garanta obtinerea bazei de date complete.
O solutie de mijloc, a fost sa se faca la inceput o parcurgere pe id-uri, astfel stabilind id-urile valide, apoi urmatoarele sa foloseasca datele de la prima rulare. Cu fiecare noua parcurgere se si actualiza noua lista de id-uri, in vederea unor noi eliminari. In plus, folosind faptul ca id-urile pierdute nu erau refolosite (fapt total ineficent), periodic puteam verifica aparitia de noi id-uri valide pornind de la id-ul maxim valid.
O problema mai complexa insa: Cum ati extrage intreaga baza de date de pe o retea sociala precum Hi5 sau LinkedIn cat mai eficient?
Ce este o retea sociala de fapt? Este vorba de o structura formata din noduri ce pot reprezenta oameni sau organizatii si legaturile dintre ele. Legaturile pot avea diferite semnificatii. Se considera o legatura intre 2 astfel de noduri atat cand este vorba de 2 persoane ce au o relatie de prietenie, dar si cand o persoana primeste un comentariu (la videoclip, profil, poze), un raspuns (videoclip-youtube), un semn (signs-hi5), sau o recomandare(LinkedIn).
Considerand astfel un nod pentru fiecare persoana sau organizatie si un arc fiecare legatura intre 2 noduri, se obtine un graf.
Am avut de curand de redactat o tema ce dorea explorarea relatiilor dintr-o retea sociala si salvarea lor intr-un format structurat (xml). Ce am realizat facand aceasta tema, este pe de-o parte numarul mare al retelelor sociale existente dar si faptul ca datorita diferitelor tipuri de legaturi existente si numarului mare de persoane inscrise in aceste retele, grafurile sunt
extraordinar de complexe. Cum am putea atunci face o parcurgere in-un astfel de graf cat mai eficient? Well, depinde ce ne intereseaza. Pentru relatiile unei anumite persoane(ca in cerinta) se poate merge accesand prietenii si celelate tipuri de relatii oferite de reteaua sociala, printr-o parcurgere in latime pana la adancimea ceruta. Problema va creste insa semnificativ cu cat adancimea creste.
Ce se intampla insa daca se doreste toata baza de date existenta?
Inainte de a primi tema de retele sociala, am realizat o aplicatie de lua baza de date de utilizatori de pe un site, plecand de la id-ul acestora. Partea foarte neplacuta era ca pentru toate persoanele ce si-au sters contul, id-ul lor a ramas nefolosit. Ca urmare la fiecare pas se verifica intai ca id-ul este valid, rezultand un overhead in plus. (Numarul de id-uri mergea intre 1 si 250mii, relativ mic fata de retele sociale precum Hi5, Facebook sau LinkedIn si totusi extragerea intregii baze de date dura pana la 8 ore)
O solutie de optimizare ar fi fost sa se faca plecarea de la un anumit user si accesand prietenii lui, apoi prietenii acestora s.a.m.d. Insa solutia nu garanta obtinerea bazei de date complete.
O solutie de mijloc, a fost sa se faca la inceput o parcurgere pe id-uri, astfel stabilind id-urile valide, apoi urmatoarele sa foloseasca datele de la prima rulare. Cu fiecare noua parcurgere se si actualiza noua lista de id-uri, in vederea unor noi eliminari. In plus, folosind faptul ca id-urile pierdute nu erau refolosite (fapt total ineficent), periodic puteam verifica aparitia de noi id-uri valide pornind de la id-ul maxim valid.
O problema mai complexa insa: Cum ati extrage intreaga baza de date de pe o retea sociala precum Hi5 sau LinkedIn cat mai eficient?
Tags: programare, retele sociale
Abonați-vă la:
Postări (Atom)
