marți, 13 ianuarie 2009

XML: Atribute versus Elemente

Lucrand la cel mai recent produs al nostru, un parser de arhive pentru diverse aplicatii de tip instant messenger, una din sarcinile pe care le-am avut de indeplinit a fost aceea de a construi o serie de fisiere XML, prin intermediul carora sa modelez informatia legata de tot ceea ce insemna o arhiva specifica unei astfel de aplicatii:

<?xml version="1.0" encoding="UTF-8" ?>

<log>

<auth>

<username value="user1">

<password value="pass1"/>

</auth>

Intrebare fireasca in aceasta situatie: user1 este valoare a elementului <username/> sau poate fi valoarea luata de un atribut al acestui element. Intrebare care se pare ca este pe buzele tuturor celor ce opteaza pentru modelarea datelor cu ajutorul XML.

Raspunsuri variate. Sigur este ca nu exista nici o regula, nici un standard in ceea ce priveste aceasta alegere.

 

Un articol interesant, scris de Uche Ogbuji, de la IBM, mi-a atras atentia. Acesta propune un set de 4 reguli pentru rezolvarea acestei dileme:

·         daca informatia poate fi marcata ea insasi cu elemente, atunci devine element.

·         daca este mai bine ca informatia sa devina atribut, dar exista posibilitatea ca elementul in cauza sa primeasca si alte atribute, atunci se recomanda folosirea unui nou etaj, de copii, informatiile devenind valori ale elementelor.

·         daca informatia trebuie sa se incadreze intr-un standard asemanator DTD, acesta cerand atribute specifice (ID, IDREF, ENTITY), se foloseste un atribut.

·         daca informatia nu trebuie normalizata, in vederea caracterelor whitespace, se folosesc elementele.

 

Cum bine remarca autorul articolului referit, lucrurile nu sunt atat de clare cand vine vorba de identificarea cazului in care te afli la un moment dat. Lasam asadar regulile la o parte si incercam cateva „sugestii”.

 

In primul rand, din categoria asa-NU:

·         „faceti totul un element”: argumentele folosite pentru a sprijini aceasta idee variaza de la „Atributele complica lucrurile” pana la „Atributele inhiba extensibilitatea”. Totusi, nefolosirea atributelor, anuleaza unul dintre cele mai importante aspecte ale XML-ului.

·         „daca este genul de continut ce trebuie afisat in browser, folositi valoarea unui element”. Problema cu aceasta sugestie este faptul ca incurajeaza utilizatorii sa gandeasca design-ul de continut al XML in termeni de prezentare, doua aspecte care este important sa nu fie amestecate.

 

Intr-un articol viitor, vom reveni si cu sugestiile de tip asa-DA.

 

Surse:

http://www.ibm.com/developerworks/xml/library/x-eleatt.html

http://xmleverywhere.com/newsletters/20000525.htm

 

Introducere in tehnologii XML -- Part 1 -- DOM

DOM este un standard World Wide Web Consortium pentru accesarea documentelor XML sau XHTML.

Din punc de vedere structural DOM - ul se imparte in trei niveluri :
  • Core DOM - modelul standard pentru orice fel de document structurat
  • XML DOM - modelul standard pentru fisere XML + obiecte si propietati ale elemetelor documentului
  • HTML DOM - modelul standard pentru fisere HTML + obiecte si propietati ale elemetelor documentului
Practic ,tot ce se afla intr-un fiser XML este un nod ,principiile fiind acestea:
  1. Intregul document este un nod de tip document
  2. Oricare element XML este un nod de tip element
  3. Textul dintr-un fisier XML este un nod de tip text
  4. Oricare atribut XML este un nod de tip atribut

De exemplu pentru urmatorul XML ,DOM-ul asociat ca avea structura:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

















Proprietati DOM

  • x.nodeName - numele lui x
  • x.nodeValue - valoarea lui x
  • x.parentNode -nodul parinte al lui x
  • x.childNodes - nodurile copii ale lui x
  • x.attributes - nodurile atribut ale lui x

Metodele utilizate in DOM

  • x.getElementsByTagName(name) - extrage un element cu numele "name"
  • x.appendChild(node) - se insereaza un nod copil sub nodul x
  • x.removeChild(node) - se sterge un copil din nodul x

Securitate site ReCaptcha

Zilele trecute am primit sarcina de a face o mica aplicatie care sa stopeze spamul nedorit facut de roboti automati pe un site (nu dau nume sa nu fac publicitate).

Dupa o studiere mai atenta a problemei ,am ajuns la solutie : CAPTCHA ,in traducere libera "Completely Automated Public Turing test to tell Computers and Humans Apart".Si da ,aceasta este baza imaginilor enervante care contin text si care trebuiesc studiate cand vrei sa te inscrii undeva sau sa postezi vreun comentariu.






Mai multe detalii depsre subiectul de baza CAPTCHA la http://en.wikipedia.org/wiki/CAPTCHA

Continuand cautarile am gasit o librarie gratuita pe www.recaptca.net ,tot ce trebuie sa faci este sa iti creezi un cont gratuit si sa obtii doua chei : una publica si una secreta pentru domeniul tau.

Am gasit pe code.google.com si libraria in java pentru aplicatie ,iar restul implementarii a fost floare la ureche.

Daca vreodata aveti nevoie de o asemenea aplicatie pentrul site-ul vostru ,va recomand ReCaptcha ,aceasta fiind bine documentata si foarte usor de implementat.

luni, 15 decembrie 2008

Highlight-uri

Am postat doua variante de highlight. Una foloseste javascript, cealalta foloseste exclusiv PHP. Le puteti testa aici In curand le vom detalia si veti putea accesa codurile sursa si pe site-urile noastre.

vineri, 5 decembrie 2008

Primii si cu site-ul secundar

Suntem pe prima pagina pe google, la cautarea interfete evoluate, si de data aceasta cu site-ul nostru secundar. Ca avem si de-asta. Cel principal il gasiti aici, deocamdata cazut pe pagina a doua a google. Da, da, ne laudam cat mai putem :D

luni, 1 decembrie 2008

Suntem pe prima pagina

Pe google, la cautarea interfete evoluate. Faceti acum print screen-urile, ca nu se stie.

Tema 3, Javascript si Ajax

A fost postata tema 3. Deadline 16 decembrie. Si enuntul....
Search cu highlight pe text

Se cere sa se realizeze un script care sa extraga termeni de cautare dintr-o pagina HTML si sa ii marcheze vizual (similar cu functionalitatea google http://www.googleguide.com/favorite_highlighting.html
- versiune simplificata, fara highlight diferentiat ca si culoare pe fiecare cuvant in cazul in care sunt mai multe cuvinte folosite ca termeni de cautare)

In acest scop, se va folosi o pagina HTML cu un formular in care se vor introduce termenii de cautare si numele fisierului HTML in care se va efectua cautarea (alt fisier HTML pe acelasi server). La apasarea unui buton de search, se afiseaza in aceeasi pagina cu formularul, intregul text din fisierul selectat anterior avand termenii de cautare highlighted.
Formularul va ramane vizibil, permitand o noua cautare.

Se vor trimite : fisierele HTML (atat cel care contine formularul de cautare cat si cele folosite pentru textul pe care se face search) si fisierele Javascript folosite.

Folosirea AJAX nu este obligatorie dar se va acorda un bonus de 10% pentru cei care folosesc.