|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Aplicatii ale XML | ||||||
|
||||||
MathML - limbaj de specificare a expresiilor matematice l7u3uk RDF - cadru de descriere a resurselor Internet XUL - limbaj de descriere a interfetelor cu utilizatorul -------------------------------------------------------------------------------- 1. MathML - limbaj de specificare a expresiilor matematice Problema codificarii elementelor matematice pentru procesarea pe calculator a aparut cu mult inainte de dezvoltarea Web-ului. O metoda de marcare oferita de TEX a fost elaborata de Donald Knuth in anul 1986 si era (si este) utilizata pe scara larga inainte ca Web-ul sa devina principalul beneficiar al metodelor de marcare. Motivul pentru care a devenit necesara o metoda de specificare pentru Web a expresiilor matematice este ca HTML-ul nu este suficient pentru a atinge acest deziderat si pune mari probleme la scrierea elementelor matematice. Pina la MathML, metoda utilizata pentru introducerea unei integrale intr-o pagina Web era folosirea unei imagini care reprezenta la nivel grafic acea integrala. Pentru a veni in intampinarea dorintelor comunitatii stiintifice, MathML a fost proiectat pentru urmatoarele scopuri: sa codifice elementele matematice intr-un mod usor de prezentat si invatat sa codifice atit notatia, cit si conotatia matematica sa fie usor de convertit in alte metode de prezentare sa poata fi utilizat prin intermediul sabloanelor sau altor metode de editare sa fie independent de platforma 1.2 Tipuri de elemente MathML Elementele de prezentare descriu structura notatiei matematice. Exemple tipice sunt elementele <mrow> care indica o linie orizontala si <msup> specificind o putere. Deoarece in multe notatii apar frecvent variabile, elementele de prezentare accepta un numar mare de atribute. Elementele de continut descriu obiectele matematice in mod direct. Din aceasta categorie fac parte elementul <plus> care denota operatorul uzual de adunare si elementul <vector> specificind un vector din algebra liniara. Toate elementele sunt de tip prezentare sau continut, exceptind elementul <math> jucind rol de element de cel mai inalt nivel (radacina), fiind element de interfata. Scopul acestuia este sa trimita catre procesorul MathML parametrii care vor afecta intreaga expresie si sa comunice vizualizatorului MathML cum sa afiseze expresia. 1.3 Exemple utilizind elementele de prezentare <mrow> Pentru acest exemplu se remarca utilizarea entitatii InvisibleTimes folosita pentru reprezentarea operatorului de inmultire care in mod normal este subinteles. In scrierea unui document MathML este necesara evidentierea tuturor operatorilor sau a altor elemente care apar intr-o notatie matematica, chiar daca acestia sunt subintelesi in scrierea uzuala, de mina. Se poate oberva ca ecuatia este descrisa exact cum apare in mod obisnuit, acesta fiind rolul elementelor de prezentare. In ceea ce urmeaza, vom descrie in MathML radacinile ecuatiei de gradul doi, adica: <mrow> Se observa ca s-a folosit o noua entitate, PlusMinus, care refera operatorul uzual din matematica. Urmatorul exemplu va specifica o matrice patratica de ordinul doi: In limbajul MathML exista numeroase elemente posedind atribute utile pentru a controla modul in care acestea apar pe ecran sau cum vor fi tiparite. Marcajul <mfenced> are rolul de a evidentia delimitatorii de la inceputul si de la sfarsitul unei expresii. Desigur, in loc de parantezele patrate puteau fi folositi alti delimitatori. 1.4 Exemple utilizand elemente de continut <reln> Acest mod de descriere este apropiat celui din limbajele de programare declarative (folosind notatia postfixata) si este mult mai usor de procesat si de analizat decit scrierea cu ajutorul elementelor de prezentare. Se observa ca nu este dificil de descris notatii matematice utilizand marcajele predefinite. Pentru specificarea radacinilor ecuatiei de gradul al doilea vom scrie urmatorul cod MathML: <reln> 1.5 Inserarea de marcaje MathML in alte documente XML/HTML In primul rand, documentele MathML trebuie sa se integreze semantic in documentele HMTL in sensul ca vizualizatoarele trebuie sa detina un mecanism de recunoastere si procesare a marcajelor MathML. Mai exact, marcajele MathML trebuiesc tratate ca marcaje XML, pentru care se face validare si se respecta modul de afisarea a spatiilor. Deoarece MathML se doreste a fi cit mai general si cit mai facil de utilizat, chiar si de catre nespecialisti, apare necesitatea dezvoltarii unor aplicatii care genereaza corect, in mod automatizat. documente MathML complexe asigurind faptul ca documentele sunt corecte (valide in sens XML). Asa cum am descris mai sus, in cadrul documentelor MathML va exista intotdeauna un element radacina denumit math. Atributele acestuia furnizeaza informatii importante despre intreg documentul care va fi tratat unitar sau dupa valorile atributelor sale. Folosind acest element, putem specifica introducerea de marcaje MathML in cadrul unui document HTML. Daca navigatoarele Web vor putea procesa HTML continind coduri MathML, atunci va deveni posibila si procesarea inversa. Desi acest lucru este mai dificil, el constituie unul dintre principalele subiecte de discutie in cadrul Consortiului World Wide Web. In prezent, exista un singur navigator disponibil pentru realizarea si vizualizarea de expresii matematice folosind marcaje MathML - Amaya, care se conformeaza recentului standard MathML 2.0. Una din solutii, pe care o vom prezenta in continuare ca studiu de caz, este de a utiliza metadate pentru descrierea datelor continute de Internet. Metadata reprezinta un set de date referitoare la date (resurse Web). RDF (Resource Description Framework) este un cadru menit sa proceseze metadatele, oferind interoperabilitatea intre diverse aplicatii care fac schimb inteligent de informatii, in sensul intelegerii de catre masina a semanticii acestora. RDF isi gaseste loc in utilizari ca: inspectarea resurselor, oferind noi capabilitati motoarelor de cautare; catalogarea datelor pentru descrierea si/sau evaluarea continutului si relatiilor intre diverse informatii stocate intr-o biblioteca electronica, site Web etc. agenti inteligenti, facilitind schimbul si partajarea cunostintelor; descrierea drepturilor de proprietate intelectuala a paginilor Web; securitate personala sau generala a datelor (oferind suport pentru semnaturi digitale utile in comertul electronic, tranzactii economice si juridice etc.) RDF foloseste limbajul XML pentru reprezentarea sintactica a metadatelor. Unul din scopurile cadrului este de a face posibila specificarea semantica a datelor, bazata pe XML, printr-o metoda standardizata, independenta de masina, extensibila. RDF si XML sint complementare in acest sens. In primul rind, RDF trebuie sa defineasca un mecanism de descriere a resurselor independent de domeniul de folosire a datelor, fara a specifica a priori vreo semantica. Definirea acestui mecanism trebuie sa ramina neutra, dar generala, dupa cum vom vedea mai jos. Pentru a facilita definirea datelor RDF, va fi necesar un sistem de clase similar celui din programarea orientata-obiect. O colectie de clase (dezvoltata pentru un anumit scop specific) se numeste schema. Clasele sint organizate ierarhic oferind extensibilitatea prin rafinarea subclaselor. Astfel, pentru crearea unei noi scheme putem sa ne bazam pe o schema de baza (un fel de clasa abstracta in termenii programarii orientate obiect). Se asigura in acest mod si reutilizarea definitiilor de metadate. Datorita caracterului extensibil, agentii care proceseaza metadatele vor fi capabili de versatilitate in manipularea schemelor. Mostenirea multipla permite exploatarea in mai multe metode a aceleasi informatii. E posibil sa cream instante de date RDF bazate pe multiple scheme din diverse surse. Influienta RDF se poate intrevedea in structurarea inteligenta a documentelor (realizata in SGML ori XML), in reprezentarea cunostintelor (KR - Knowledge Representation), in standardizarea Web-ului. Alte arii de interes ar fi limbajele orientate-obiect si de modelare a cunostintelor sau bazele de date distribuite. RDF ar putea fi solutia in dezvoltarea a ceea ce creatorul spatiului WWW, Tim Berners-Lee, numeste a fi Semantic Web (o pinza consistenta si logica a tuturor resurselor de pe Web). 2.2 Modelul de baza al RDF resurse Datele descrise de expresiile RDF sint denumite resurse. O resursa poate fi o pagina Web completa (de exemplu un document HTML desemnat printr-un URL: https://www.infoiasi.ro/circles/index.html), o parte a unei pagini Web (un element specific HTML sau XML prezent in sursa documentului, de pilda o imagine) sau un obiect care nu-i direct accesibil via Web (e.g. o carte tiparita). Resursele sint specificate de URI-uri plus un identificator de legatura, optional. Asa cum am vazut un URI poate specifica orice. proprietati O proprietate reprezinta un aspect specific, o caracteristica, un atribut sau o relatie pentru a descrie o resursa. Fiecare proprietate poseda o semantica, un set de valori permise, o multime de tipuri de resurse pe care le descrie si un set de relatii (interdependente) cu alte proprietati. declaratii O anumita resursa impreuna cu o proprietate a sa avind asignata o valoare formeaza o declaratie. Putem privi declaratia ca un 3-uplu: Asubiect, predicat, obiectS. Obiectul declaratiei (valoarea proprietatii) poate desemna o alta resursa (specificata de un URI) sau un literal (tip primitiv de data sau sir de caractere, conform specificatiilor XML). In modelul RDF, un literal poate contine marcaje XML care insa nu vor fi evaluate (analizate) de procesorul RDF. 2.3 Modul de reprezentare graf orientat: nodurile sint fie subiecte fie obiecte, iar arcele semnifica un predicat; marcaje: <subject> HAS <predicate> <object> RDF/XML (vezi mai jos) O proprietate poate avea drept valoare o entitate structurata: Individul Sabin Corneliu Buraga, avind adresa busaco@infoiasi.ro, este creatorul resursei https://www.infoiasi.ro/Ibusaco/odix. In acest caz, obiectul nu va fi un sir de caractere, ci o colectie formata din trei literali: "individ", "Sabin Corneliu Buraga", "busaco@infoiasi.ro". Vom vedea ulterior cum specificam acest lucru in RDF. 2.4 Sintaxa de baza RDF Mai multe definitii pentru o anumita resursa pot fi grupate in cadrul elementului Description (suport pentru incapsulare). Regulile sintactice sint urmatoarele: a1i RDF ::= a'<rdf:RDF>'i descript* a'</rdf:RDF>'i rdf reprezentat cu italice este utilizat pentru a reprezenta un prefix al spatiului de nume, util pentru imbricarea exacta a tag-urilor de inceput si de sfirsit. Pentru exemplul de mai sus, avem: <rdf:RDF> Aici prefixul 's' se refera la un prefix specific ales de autorul expresiei RDF si definit intr-o declaratie a spatiului de nume XML, conform unei scheme: xmlns:s="https://description.org/schema/". 2.5 Scheme si spatii de nume Intelesul unui termen (lingvistic sau nu) in RDF este exprimat printr-o referinta la o schema. Putem privi schema ca un fel de dictionar, definind termenii pe care ii vom utiliza in declaratiile RDF si asociindu-le o semantica precisa. Se pot folosi o varietate de scheme, specificate sau nu ca documente separate. O schema contine definitii si restrictii de utilizare a proprietatilor. Pentru evitarea confuziilor dintre defintiile independente a unui acelasi lucru, RDF se bazeaza pe facilitatea spatiilor de nume din XML. Spatiile de nume ofera o modalitate simpla de a folosi la un moment dat o unica definitie a unui termen. Fiecare predicat al unei declaratii RDF trebuie identificat de o unica schema. Un element Description poate insa contine declaratii avind predicate din mai multe scheme. 2.6 Schemele in detaliu O schema consta dintr-un set de clase si proprietati. Sint definite o serie de clase si de proprietati fundamentale. De asemeni, pentru schemele RDF se defineste un spatiu de nume XML denumit rdfs. rdf:Property reprezinta clasa proprietatilor resurselor. rdfs:Class corespunde conceptului general de tip sau categorie. Cind o schema defineste o noua clasa, resursa reprezentind acea clasa trebuie sa aiba o proprietate rdfs:type a carei valoare e resursa rdfs:Class. Clasele RDF pot specifica, de exemplu, pagini Web, tipuri de documente, baze de date, persoane etc. rdf:type indica faptul ca o resursa este membra a unei clase. Atunci cind o resursa are o proprietate rdf:type a carei valoare reprezinta o anumita clasa, vom spune ca resursa este o instanta a acelei clase. Valoarea lui rdf:type pentru o resursa este o alta resursa, instanta a lui rdfs:Class. Clasele individuale intotdeauna vor avea rdf:type asignata cu valoarea rdfs:Class (ori o sub-clasa a lui rdfs:Class). O resursa poate fi instanta a mai multor clase, desigur. rfds:subClassOf indica relatia de mostenire a claselor. Este o relatie tranzitiva. Doar instantele lui rdfs:Class pot avea proprietatea rfds:subClassOf si valoarea ei este intotdeauna rdf:type rdfs:Class. O clasa poate fi sub-clasa a mai multor clase. O clasa niciodata nu poate fi declarata ca sub-clasa a ei insasi sau drept sub-clasa a sub-claselor sale. rdfs:subPropertyOf - O proprietate poate avea zero, una sau mai multe proprietati, specializari ale ei. Daca o anumita proprietate P1 este o subproprietate a unei proprietati mai generale P2 si daca o resursa A are proprietatea P2 avind asignata valoarea B, atunci aceasta implica: resursa A are de asemeni proprietatea P1 cu valoarea B. Restrictii Exemple de restrictii: valoarea unei proprietati trebuie sa fie o resursa ori o clasa definita de proiectantul unei scheme. Aceasta restrictie este exprimata de proprietatea range (de exemplu, restrictia aplicata proprietatii "autor": valoarea ei trebuie sa fie o resursa, instanta a clasei "Persoana". o proprietate poate fi utilizata doar de resursele unei anumite clase (de exemplu, proprietatea "autor" poate fi folosita numai daca valoarea ei este o resursa a carei instanta este clasa "Tratat"). Acest lucru se exprima prin proprietatea domain. Restrictii fundamentale rdfs:ConstraintResource defineste o sub-clasa a lui rdfs:Resource ale carei instante sint constructii de scheme implicate in exprimarea restrictiilor (mecanism de verificare de catre procesoarele RDF a consistentei unui model). rdfs:Range este folosita pentru a restrictiona valorile unei proprietati. Valoarea lui range este intotdeauna o clasa. Valoarea unei proprietati a carei interval este A este constrinsa sa fie instanta a clasei A. Putem avea cel mult o proprietate range. rdfs:domain e utilizata sa specifice o clasa ce poate fi asignata ca valoare a unei proprietati. O proprietate poate avea valori din zero, una sau mai multe clase. Daca nu exista vreun domeniu, poate fi folosita oricare resursa. 2.7 Colectii de resurse bag - lista neordonata de resurse sau literali, valorile duplicate fiind permise; secventa - lista ordonata de resurse sau literali. Ca mai sus, valorile pot fi duplicate; alternativa - o lista de resurse/literali care reprezinta alternative pentru o singura valoare a unei proprietati. Tipul multime nu este inca definit de specificatiile RDF. Pentru a crea o colectie de resurse, RDF utilizeaza o resursa suplimentara ce reprezinta o colectie specifica (o instanta a colectiei), aceasta resursa declarindu-se ca instanta a unui tip din cele anterioare, prin proprietatea type. Relatia dintre colectia de resurse si resursele ce apartin acesteia este data de un set de proprietati denumite "_1", "_2", "_3" etc. Colectiile de resurse pot avea si alte proprietati, desigur. Sintaxa formala este urmatoarea: a16i contain ::= seq | bag | alt Colectiile pot apare oriunde este permis un element Description, deci regulile sintactice se modifica astfel: a1ai RDF ::= '<rdf:RDF>' obj* '</rdf:RDF>' Exemple: Studentii cursului de Limbaj Natural sint Cristina, Mihaela si Cosmin. este scris in RDF in modul urmator: <rdf:RDF> Modelul pentru propozitia: Codul sursa pentru GAEN poate fi gasit la ftp.infoiasi.ro, ftp.uaic.ro sau hal.cs.tuiasi.ro. in RDF/XML se scrie astfel: <rdf:RDF> 2.8 Referenti distributivi In urmatorul exemplu: <rdf:Bag ID="pages"> <rdf:Description about="#pages"> exprimam faptul ca 'Sabin Corneliu Buraga' este creatorul colectiei de pagini 'pages'. Referentul elementului Description este o colectie (de tip bag), nu membrii ei. Pentru a specifica faptul ca 'Sabin Corneliu Buraga' este creatorul fiecarei pagini, se foloseste un alt tip de referire, specificat de atributul aboutEach, acest tip de referent fiind numit referent distributiv. <rdf:Description aboutEach="#pages"> 2.9 Colectii referite de un URI a24i aboutEachAttr ::= 'aboutEach="' URI-ref '"' | 'aboutEachPrefix="' string '"' Atributul aboutEachPrefix declara o colectie ale carei membri sint toate resursele corespunzatoare identificatorilor ce incep cu sirul de caractere al valorii atributului. Un exemplu: <s:Copyright>©1997-2000, Sabin Corneliu Buraga</s:Copyright> </rdf:Description> Nu ne intereseaza cite documente exista pe disc si interdependenta lor. 2.10 Declaratii despre declaratii Modelarea declaratiilor Sabin Corneliu Buraga este creatorul resursei https://www.infoiasi.ro. o putem vedea ca un fapt (asemanator clauzelor Prolog). Daca insa avem enuntul: Dumitru Todoroi spune ca Sabin Corneliu Buraga este creatorul resursei https://www.infoiasi.ro. exprimam un fapt despre o afirmatie facuta de altcineva. Putem modela, dupa cum vom vedea mai jos, declaratia originala ca o resursa avind patru proprietati. Acest proces este denumit, in termenii reprezentarii cunostintelor, reificare (reification). Se definesc urmatoarele proprietati: subiect identifica resursa descrisa de declaratia modelata; valoarea subiectului este resursa specificata in declaratia initiala (in exemplul nostru https://www.infoiasi.ro); predicat identifica proprietatea originala (reprezentind in cazul nostru creatorul); obiect specifica valoarea proprietatii declaratiei modelate (aici Sabin Corneliu Buraga); tip descrie tipul noii resurse. Toate declaratiile reificate sint instante ale lui RDF:Statement. Astfel, ele au o proprietate type al carei obiect este RDF:Statement. Proprietatea type se poate folosi pentru declararea oricarui tip de resursa, cistigind in acest mod flexibilitate. 2.11 Modelul formal al RDF Formal, un model al datelor RDF se defineste astfel: Fie multimile denumite Resurse, Literali si Declaratii si o submultime numita Proprietati a multimii Resurse. Elementele multimii Declaratii sint 3-uple de forma Apred, sub, objS, in care fiecare pred este o proprietate apartinind multimii Proprietati, sub este o resursa (element al multimii Resurse) si obj este fie o resursa, fie un literal (un literal este element al multimii Literali). Fie 3-uplul Ap,s,oS apartinind multimii Declaratii. Atunci, il putem interpreta (lingvistic) in maniera urmatoare: o este valoarea lui p pentru s sau s are proprietatea p avind asignata valoarea o De exemplu, afirmatia: Sabin Corneliu Buraga este creatorul resursei https://www.infoiasi.ro are asociat 3-uplul (element al multimii Declaratii): d: Acreator, ahttps://www.infoiasi.roi, "Sabin Corneliu Buraga"S in care am notat aIi resursa identificata prin URI-ul I, iar ghilimelele incadreaza un literal. Utilizind 3-uple, putem specifica reificarea declaratiilor. Data declaratia (d) de mai sus, exprimam reificarea acesteia ca o noua resursa X dupa cum urmeaza: Atype, aXi, aRDF:StatementiS Cele patru 3-uple specifica proprietatile declaratiei reificate. Proprietatea type defineste tipuri primitive, astfel: Exista un element al multimii Proprietati cunoscut drept RDF:type, un 3-uplu ARDF:Type, sub, objS avind sub si obj elemente ale multimii Resurse. Exista un element al multimii Resurse, care nu apartine multimii Proprietati, notat RDF:Statement. Exista trei elemente ale multimii Proprietati denumite RDF:predicate, RDF:subject si RDF:object respectiv. Reificarea unui 3-uplu Apred, sub, objS din Declaratii consta dintr-un element r apartinind multimii Resurse si din elementele s1, s2, s3, s4 ale multimii Declaratii avind forma: s1: ARDF:predicate, r, predS s2: ARDF:subject, r, subS s3: ARDF:object, r, objS s4: ARDF:type, r, aRDF:StatementiS RDF defineste trei tipuri de colectii de resurse: liste ordonate (Sequences), liste neordonate (Bags) si liste reprezentind alternative pentru o (unica) valoare a unei proprietati (Alternatives). Formal, acestea se definesc prin: Exista trei elemente ale multimii Resurse care nu apartin multimii Proprietati, denumite RDF:Seq, RDF:Bag si RDF:Alt. Exista o submultime a multimii Proprietati corespunzatoare ordinalilor (1, 2, 3,...) numita Ord. Elementele lui Ord se specifica prin RDF:_i, cu i=1, 2, 3... Pentru a crea o colectie c, vom considera un 3-uplu ARDF:type, c, tS, unde t este unul din cele trei tipuri (RDF:Seq, RDF:Bag sau RDF:Alt). Fiecare membru rn al colectiei c este definit de ARDF:_i, c, riS, cu i=1,n. 2.12 Aplicatii Se specifica spatiile de nume: dc (Dublin Core) disponibil la adresa https://purl.org/metadata/dublin_core si dcq (Dublin Core Qualifiers) la adresa https://purl.org/metadata/dublin_core_qualifiers. In fapt, Dublin Core Metadata defineste o schema avind 15 proprietati de baza utile pentru descrierea oricarei resurse Web, in special pentru activitati de cautare si pentru constituirea bibliotecilor digitale. Prezentam un exemplu de descriere inteligenta a unei publicatii electronice disponibile pe Web. <rdf:RDF xmlns:rdf="https://www.w3.org/TR/1999/PR-rdf-syntax#" xmlns:dc="https://purl.org/metadata/dublin_core#" xmlns:dcq="https://purl.org/metadata/dublin_core_qualifiers#"> 2.13 RDF implementat in Mozilla Sursele de date in Mozilla sint manipulate via RDF prin intermediul unui manager de componente (Component Manager), utilizindu-se un URI special de forma component://netscape/rdf/datasource?name=valoare. Aceste surse de date pot fi lista de URI-uri stocate de bookmark-ul browserului, istoricul navigarii, lista serverelor interogate pentru obtinerea postei electronice (prin intermediul protocolului IMAP) etc. Astfel, Mozilla furnizeaza diverse servicii interne RDF instantiate si interogate prin intermediul metodelor JavaScript: var RDF = // se verifica daca a fost incarcat sau nu var remote = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); if (remote.loaded) A alert("Sursa de date a fost incarcata!"); Pentru accesarea datelor din bookmark-ul navigatorului putem utiliza urmatorul cod: // utilizeaza managerul de componente var bookmarks = // prelucreaza intrarile din bookmark if (bookmarks.HasAssertion( Fisierul de bookmark-uri este un document XML (in particular XUL) de forma urmatoare: <tree datasources="rdf:bookmarks"> Manipularea colectiilor de date RDF (e.g. <rdf:Seq>) se realizeaza prin intermediul URI-urilor speciale component://netscape/rdf/container-utils, functiile de interogare a existentei unei colectii fiind IsSeq(), IsBag() si IsAlt(). Pentru crearea unei colectii poate fi folosita una dintre functiile JavaScript MakeSeq(), MakeBag() ori MakeAlt(). Pentru verificarea validitatii unui document RDF/XML pot fi utilizate programele rdfcat si rdfpoll, incluse in distributia Mozilla. Componenta de interfata beneficiind de facilitatile de reprezentare a informatiilor in RDF poarta numele Aurora (cunoscuta si sub denumirea de NavCenter), folosita la afisarea, explorarea si integrarea datelor in cadrul navigatorului Mozilla (e.g. structuri de directoare de pe discul local, tabele de continut ale site-urilor Web, indici de cautare, servicii taxonomice precum Yahoo sau Open Directory, istoricul documentelor parcurse etc.). In acest ultim exemplu, putem remarca utilizarea unei secvente RDF continind descrierile componentelor de baza Mozilla: <?xml version="1.0"?> <!-- list all the packages being supplied by this jar --> <!-- package information --> 3. XUL - limbaj de descriere a interfetelor cu utilizatorul XUL aduce in prim-plan metaforele utilizate de proiectantii interfetelor utilizator clasice (boxe de dialog, butoane, ferestre), fiind un mijloc facil de specificare si de implementare a acestora pe diferite platforme, reducind constul de proiectare si programare a interfetelor grafice pentru Macintosh, Motif, Windows, GTK etc. Un alt avantaj il constituie faptul ca indiferent de platforma, interfetele construite cu XUL vor arata si vor reactiona similar la comenzile utilizatorului. 3.1 Structura unui document XUL <window title="O interfata XUL" id="main_win"> <box style="background-color:lightgreen;" id="main_box"> <browser /> </box> </window> Dupa cum se remarca, o interfata poate fi compusa din diferite tipuri de widget-uri grupate in urmatoarele categorii: ferestre (definesc locul si modul de afisare a informatiilor, plus evenimentele la care trebuie sa reactioneze) <window> cutii de vizualizare <box>, <titledbox>, <text>, <textfield> meniuri si bare de meniu <menubar>, <menu>, <menubutton>, <menulist>, <menupopup>, <menuitem> cutii si bare de unelte <toolbox>, <toolbar> tabulatoare <tabcontrol>, <tabbox>, <tabpanel>, <tab> butoane <radiogroup>, <radio>, <button>, <checkbox> bare de defilare <scrollbar>, <scrollbarbutton>, <slider> indicatoare de evolutie a unei actiuni <progressmeter> organizatoare (pentru afisarea altor informatii, intr-o forma structurata) <grid>, <tree>, <treehead>, <treecol>, <treerow>, <treeitem>, <deck>, <stack> complexe (utilizate pentru includerea de componente Mozilla, precum editorul HTML, navigatorul Web etc.) <editor>, <browser>, <iframe> In ansamblu, widget-urile formeaza asa-numitul XPToolkit. Un document XUL trebuie sa contina urmatoarele instructiuni de procesare care asociaza interfetei foile de stiluri utilizate pentru afisarea widget-urilor pe ecran si spatiile de nume ale elementelor XUL (optional HTML): <?xml-stylesheet href="chrome://global/skin/xul.css" type="text/css"?> 3.2 Exemple <!-- incarca un stil de afisare a interfetei (aici 'chrome') --> Acest document XUL va avea urmatoarea reprezentare grafica: <style> button.bookmarkbutton A margin: 0px; max-width: 8em; font: inherit; font-size: smaller; color: #99CCCC; border: none; padding: 1px; background-image: none; button.bookmarkbutton:hover A color: #CCFFFF; button.bookmarkbutton:active A color: #CCFFFF; padding-left: 2px; padding-top: 2px; padding-right: 0px; padding-bottom: 0px; Un exemplu de utilizare a tab-urilor: <tabcontrol align="vertical"> <textfield value="Fill in here" /> <html:script language="JavaScript"> function ChangeColor(cp) Remarcam utilizarea tag-urilor HTML, apartinind spatiului de nume definit de specificatia HTML 4.0, in cadrul unei interfete XUL. In acest exemplu, putem observa de asemeni folosirea unei functii JavaScript pentru modificarea in mod dinamic a proprietatilor unui element <div>. In exemplul urmator, chrome indica un fisier utilizat pentru reprezentarea grafica a unui control grafic, incarcat din cadrul ierarhiei de fisiere care compun un pachet dintr-o aplicatie Mozilla: <menuitem value="Help" oncommand="window.openDialog('chrome://help/content/help.xul', Un pachet reprezinta un chrome, care in contextul arhitecturii navigatorului Mozilla (altfel spus, un pachet este un chrome incorporat in cadrul aplicatiilor Mozilla). Astfel, un pachet poate fi vazut ca un fragment din codul unei interfete, fiind inglobat intr-un anumit loc in ierarhia de aplicatii Mozilla. Ca si un chrome, un pachet poate contine fisiere de stil CSS, definitii de interfete XUL, fisiere grafice si siruri de localizare, plus cod specific platformei particulare pe care ruleaza aplicatia. Pachetul navigator este un pachet definit in mozilla/bin/chrome/navigator, iar componenta mail/news apartine ierarhiei mozilla/bin/chrome/mailnews/. Ca si la sistemele de fisiere, ierarhia este una arborescenta: navigator/ content/ default/ navigator.xul Aceasta modularizare asigura flexibilitatea navigatorului Web (in acest caz, Mozilla care este varianta open-source a lui Netscape Communicator). Putem referi un fisier particular dintr-un pachet, prin intermediul unui URI de genul: chrome://help/content/help.xul. La crearea unui chrome diferit pentru un pachet, structura acestuia se schimba, inserind inca o intrare in ierarhia de componente ale pachetului. Pentru accesarea diferitelor elemente de interfata, se pot folosi modelele DOM (Document Object Model) sau extensia acestuia AOM (Application Object Model) destinat special pentru prelucrarea documentelor XUL. Astfel, prin intermediul AOM putem referi diferite widget-uri ca ierarhii de colectii de controale ale interfetelor. 3.4 Integrarea XUL in navigatorul Mozilla Arhitectii si implementatorii browserului Mozilla utilizeaza trei tehnologii independente de platforma pentru a conecta nucleul navigatorului (denumit Gecko) cu interfata modelata in XUL. Structura modulelor care intra in componenta navigatorului este ilustrata mai jos: Nucleul navigatorului, purtind numele de cod Gecko, reprezinta o componenta modulara, bazata pe clientii Netscape/Mozilla, care poate fi inclusa atit in aplicatii Web de mari dimensiuni cu propriile lor interfete-utilizator cit si in dispozitive miniaturizate. Filosofia dezvoltarii actuale si viitoare a nucleului tine cont de urmatoarele aspecte: Gecko nu reprezinta un browser Web, neavind propria sa interfata, si nu are integrate servicii auxiliare (de exemplu, clientul de posta electronica sau editorul HTML) si nu ofera facilitati suplimentare (e.g. bookmarks); se bazeaza numai pe standarde deschise redactate de Consortiul Web: HTML 4.0, CSS1, CSS2, DOM1, DOM2, XML, RDF etc., iar HTML dinamic este simulat prin DOM; este independent de platforma (prin tehnologia XPCOM), foarte compact (prima versiune putea fi stocata pe o singura discheta) si rapid; partea de comunicare in retea este ea insasi modulara, purtind numele de Necko; este extensibil, sursele fiind publice; ofera suport pentru navigatoarele mai vechi. In acest mod, nucleul poate fi folosit de mai multe navigatoare sau aplicatii, in diferite circumstante si rulind pe diverse platforme, interfata cu acesta putind fi aleasa de utilizator, beneficiind de flexibilitatea oferita de XUL. 3.5 Un exemplu complet <?xml version="1.0"?> <window xmlns:html="https://www.w3.org/TR/REC-html40" xmlns:xul ="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> Acest exemplu ilustreaza folosirea elementelor HTML si a script-urilor JavaScript in cadrul unui fisier XUL pentru afisarea unei ferestre de dialog care interogheaza utilizatorul in privinta suportului de retea a browserului. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|