Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Aplicatii ale XML
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
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
1.1 Introducere
MathML (Mathematical Markup Language) reprezinta o recomandare relativ recenta a Consortiului World Wide Web pentru descrierea notatiilor din matematica. Scopul acestei recomandari (totodata scopul pentru care a fost creat MathML) este acela de a realiza o metoda prin care elementele matematice sa fie procesate pe Web intr-un mod asemanator procesarii informatiilor textuale realizate cu HTML. MathML se adreseaza celor care dezvolta si implementeaza analizatoare sau editoare de informatii cu specific matematic, putind fi usor folosite in domenii stiintifice, ingineresti sau academice.

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
In MathML exista elemente de prezentare, elemente de continut si elemente de interfata.

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
Incepem printr-un exemplu de reprezentare a unei ecuatii de gradul doi, de forma: x2+4x+7=0. Codul de marcaje MathML va fi urmatorul:

<mrow>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mrow>
<mn>4</mn>
<mo>&InvisibleTimes;</mo>
<mi>x</mi>
</mrow>
<mo>+</mo>
<mn>7</mn>
</mrow>
<mo>=</mo>
<mn>0</mn>
</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:


Fragmentul de document MathML va fi:

<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>&PlusMinus;</mo>
<msqrt>
<mrow>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>&InvisibleTimes;</mo>
<mi>a</mi>
<mo>&InvisibleTimes;</mo>
<mi>c</mi>
</mrow>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>&InvisibleTimes;</mo>
<mi>a</mi>
</mrow>
</mfrac>
</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:


<mrow>
<mi>A</mi>
<mo>=</mo>
<mfenced open="a" close="i">
<mtable>
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mi>y</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>z</mi>
</mtd>
<mtd>
<mi>w</mi>
</mtd>
</mtr>
</mtable>
</mfenced>
</mrow>

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
Reluind exemplul cu ecuatia de gradul doi x2+4x+7=0, putem scrie in MathML urmatoarele:

<reln>
<eq />
<apply>
<plus />
<apply>
<power />
<ci>x</ci>
<cn>2</cn>
</apply>
<apply>
<times />
<cn>4</cn>
<ci>x</ci>
</apply>
<cn>4</cn>
</apply>
<cn>0</cn>
</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>
<eq />
<ci>x</ci>
<apply>
<over />
<apply>
<fn occurrence="infix">
<mo>&PlusMinus;</mo>
</fn>
<apply>
<minus />
<ci>b</ci>
</apply>
<apply>
<root />
<apply>
<minus />
<apply>
<power />
<ci>b</ci>
<cn>2</cn>
</apply>
<apply>
<times />
<cn>4</cn>
<ci>a</ci>
<ci>c</ci>
<apply>
</apply>
<cn>2</cn>
</apply>
</apply>
<apply>
<times />
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</apply>
</reln>

1.5 Inserarea de marcaje MathML in alte documente XML/HTML
Pentru ca documentele MathML sa fie utilizate corespunzator, ele trebuie sa fie compatibile cu procesoarele, editoarele sau translatoarele existente. Deoarece limbajul MathML a fost creat cu scopul de a insera expresii matematice in paginile Web, cel mai important aspect este includerea marcajelor MathML in documente 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.


Vizualizarea in navigatorul Amaya a unei pagini Web continind marcaje MathML
2. RDF - cadru de descriere a resurselor Internet
2.1 Prezentare generala
Spatiul cibernetic a fost initial conceput pentru a usura regasirea de catre calculator a oricarei date indiferent de localizarea ei, fara a se pune problema intelegerii semnificatiei acesteia de catre masina. Din cauza volumului tot mai mare de informatii prezent pe Web este dificil de a automatiza regasirea lor inteligenta, cu atit mai putin de catre operatorul uman.

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
Modelul de baza se construieste cu ajutorul urmatoarelor tipuri de obiecte:

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
Declaratiile se pot reprezenta astfel:

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

Vom da descrierile sintactice in notatia EBNF. Toate facilitatile sintactice din XML (regulile spatiilor albe, diferentele dintre apostrof si ghilimele, senzitivitatea caracterelor, moduri de adnotare) sint suportate.

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
a2i descript ::= '<rdf:Description' idAboutAttr? '>' propElt*
'</rdf:Description>'
a3i idAboutAttr ::= idAttr | aboutAttr
a4i idAttr ::= 'ID="' Idsymbol '"'
a5i aboutAttr ::= 'about="' URI-ref '"'
a6i propElt ::= '<' propName '>' value '</' propName '>' |
'<' propName resAttr '/>'
a7i propName ::= Qname
a8i value ::= descript | string
a9i resAttr ::= 'resource="' URI-ref '"'
a10i Qname ::= a NSprefix ':' i name
a11i URI-ref ::= string
a12i IDsymbol ::= (orice simbol legal XML)
a13i name ::= (orice simbol legal XML)
a14i NSprefix ::= (orice prefix al spatiului de nume din XML)
a15i string ::= (orice text XML)

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>
<rdf:Description about="https://www.infoiasi.ro/Ibusaco/odix">
<s:Creator>Sabin Corneliu Buraga</s:Creator>
</rdf:Description>
</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
Atunci cind scriem o afirmatie in limbaj natural, utilizam cuvinte care au un anumit inteles pentru noi si pentru cel careia ii este adresata. Intelegerea semanticii propozitiei este cruciala in stabilirea cu exactitate a procesarii ce trebuie urmata. Este extrem de important ca atit scriitorul cit si cititorul enuntului sa recepteze acelasi inteles al termenilor utilizati, altfel s-ar crea confuzii. In mediul global reprezentat de WWW nu-i suficient a ne ghida dupa intelegerea culturala comuna a conceptelor.

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
Declararea proprietatilor (atributelor) unor resurse si semantica asociata lor se realizeaza prin intermediul schemelor. RDF poate fi vazut astfel si ca limbaj de specificare a schemelor, fiind mai facil de implementat decit limbajele mai complexe CycL (The CYC Representation Language) sau KIF (Knowledge Interchange Format). Schemele RDF au la baza idei preluate din reprezentarea cunostintelor (retele semantice, logica predicatelor) ori din limbajele de specificare a bazelor de date.

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.


Seturile de clase si proprietati
Clase fundamentale rdfs:Resource defineste clasa resurselor, corespunzind conceptului de obiect din limbajele de programare orientate-obiect.

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.


Ierarhiile de clase RDF
Proprietati fundamentale
Fiecare model RDF care utilizeaza un mecanism de scheme include, in mod implicit, proprietatile de mai jos, instante ale clasei rdf:Property, oferind o modalitate de a exprima relatiile dintre clase si instantele lor sau supraclase.

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
O schema poate declara anumite restrictii asociate claselor si proprietatilor. In jargonul RDF, vor fi folosite conceptele de domeniu (domain) si interval (range).


Restrictiile in RDF
Un model care violeaza o restrictie este un model inconsistent. Diverse aplicatii pot avea comportamente eronate in cadrul unui model inconsistent.

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
Este necesar deseori sa utilizam colectii de resurse, pentru aceasta in RDF definindu-se trei tipuri de obiecte:

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
a17i seq ::= '<rdf:Seq' idAttr? '>' member* '</rdf:Seq>'
a18i bag ::= '<rdf:Bag' idAttr? '>' member* '</rdf:Bag>'
a19i alt ::= '<rdf:Alt' idAttr? '>' member* '</rdf:Alt>'
a20i member ::= referItem | inlineItem
a21i referItem ::= '<rdf:li resourceAttr '/>'
a22i inlineItem::= '<rdf:li>' value '</rdf:li>'

Colectiile pot apare oriunde este permis un element Description, deci regulile sintactice se modifica astfel:

a1ai RDF ::= '<rdf:RDF>' obj* '</rdf:RDF>'
a8ai value ::= obj | string
a23i obj ::= descript | contain

Exemple:
Modelul pentru enuntul:

Studentii cursului de Limbaj Natural sint Cristina, Mihaela si Cosmin.

este scris in RDF in modul urmator:

<rdf:RDF>
<rdf:Description about="https://www.infoiasi.ro/courses/nlp">
<s:Students>
<rdf:Bag>
<rdf:li resource="https://www3.infoiasi.ro/ICristina" />
<rdf:li resource="https://www3.infoiasi.ro/IMihaela" />
<rdf:li resource="https://www3.infoiasi.ro/ICosmin" />
</rdf:Bag>
</s:Students>
</rdf:Description>
</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>
<rdf:Description about="https://www.infoiasi.ro/Ibusaco/gaen">
<s:DistributionSite>
<rdf:Alt>
<rdf:li resource="ftp://ftp.infoiasi.ro" />
<rdf:li resource="ftp://ftp.uaic.ro/pub/misc/gaen" />
<rdf:li resource="ftp://hal.cs.tuiasi.ro/pub/sources/Unix" />
</rdf:Alt>
</s:DistributionSite>
</rdf:Description>
</rdf:RDF>

2.8 Referenti distributivi
Obiectul descris de o declaratie RDF (indicat de atributul about) este numit referent.

In urmatorul exemplu:

<rdf:Bag ID="pages">
<rdf:li resource="https://www.infoiasi.ro/circles/1/index.html">
<rdf:li resource="https://www.infoiasi.ro/circles/2/index.html">
<rdf:li resource="https://www.infoiasi.ro/circles/3/index.html">
</rdf:Bag>

<rdf:Description about="#pages">
<s:Creator>Sabin Corneliu Buraga</s:Creator>
</rdf:Description>

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">
<s:Creator>Sabin Corneliu Buraga</s:Creator>
</rdf:Description>

2.9 Colectii referite de un URI
Una din utilizarile metadatelor este de a face declaratii despre "toate paginile Web disponibile pe un anumit server" sau "toate paginile Web descriind un anumit aspect, aflate la o adresa specifica". In multe cazuri este dificil ori neimportant sa incercam sa enumeram fiecare resursa in mod explicit si s-o identificam ca membru al unei colectii. Folosind o a doua forma de referenti distributivi putem crea o colectie de tip Bag pentru a defini toate resursele ce ne intereseaza in aplicatiile noastre:

a3ai idAboutAttr ::= idAttr | aboutAttr | aboutEachAttr
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:
Pentru toate paginile Web prezente pe serverul Facultatii de Informatica putem seta o proprietate de copyright scriind:

<rdf:Description aboutEachPrefix="https://www.infoiasi.ro">
<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
In cadrul RDF se pot crea declaratii privitoare la alte declaratii. Vom numi acest tip de declaratii: declaratii de nivel inalt.

Modelarea declaratiilor
Considerind afirmatia:

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

Putem reprezenta modelul metadatelor prin trei metode: ca 3-uple, ca graf orientat, ca marcaje XML, aceste reprezentari fiind echivalente.

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
Apredicate, aXi, acreatoriS
Asubject, aXi, ahttps://www.infoiasi.roiS
Aobject, aXi, "Sabin Corneliu Buraga"S

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
Regulile de mai sus formalizeaza procesul de reificare, iar resursa r se numeste declaratie reificata.

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
Exista deja definite, avind ca suport cadrul de descriere a resurselor Internet prezentat aici, diverse metadate utilizate in aplicatiile Web. In continuare ne vom ocupa numai de o modalitate de a descoperi resursele electronice intr-o maniera similara celei de consultare a unui catalog de biblioteca: Dublin Core Metadata, folosind vocabulare definite de Dublin Core Initiative.

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#">
<rdf:Description about="https://www.infoiasi.ro/circles">
<dc:Title>Circles - an electronic magazine</dc:Title>
<dc:Description>Circles este o revista electronica independenta care a aparut regulat in perioada februarie 1997 - mai 2000, imbinind stiri din lumea informaticii cu aspecte culturale si artistice.
</dc:Description>
<dc:Contributor rdf:parseType="Resource">
<dcq:AgentType rdf:resource=
"https://purl.org/metadata/dublin_core_qualifiers#Editor" />
<rdf:value>Sabin Corneliu Buraga</rdf:value>
</dc:Contributor>
<dc:Publisher>Faculty of Computer Science</dc:Publisher>
<dc:Date>1997-17-02</dc:Date>
<dc:Type>electronic magazine</dc:Type>
<dc:Subject> <!-- subiectul abordat (colectie) -->
<rdf:Bag>
<rdf:li>computer science</rdf:li>
<rdf:li>literature and art</rdf:li>
<rdf:li>other different topics</rdf:li>
</rdf:Bag>
</dc:Subject>
<dc:Format> <!-- formatul revistei: cimpuri MIME -->
<rdf:Bag>
<rdf:li>text/html</rdf:li>
<rdf:li>image/jpeg</rdf:li>
<rdf:li>image/gif</rdf:li>
</rdf:Bag>
</dc:Bag>
<dc:Relation rdf:parseType="Resource">
<dcq:RelationType <!-- relatia cu serverul infoiasi.ro --> rdf:resource=
"https://purl.org/metadata/dublin_core_qualifiers#IsPartOf" />
<rdf:value resource="https://www.infoiasi.ro" />
</dcf:RelationType>
</dc:Relation>
</rdf:Description>
</rdf:RDF>

2.13 RDF implementat in Mozilla
Navigatorul Mozilla (varianta "open-source" a Netscape-ului) este unicul browser care, in prezent, implementeaza (intr-un stadiu preliminar) RDF, scopul fiind mentinerea unei baze de date de mici dimensiuni continind anumite informatii interne si, mai important, utilizarea modelului RDF impreuna cu sabloanele XUL ca interfata abstracta de programare pentru afisarea informatiilor. Despre Mozilla si XUL vom discuta in detaliu in sub-capitolul urmator.

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 =
Components
.classesa"component://netscape/rdf/rdf-service"i
.getService(Components.interfaces.nsIRDFService);

// preia in mod asincron un fisier RDF var ds = RDF.GetDataSource("https://www.mozilla.org/rdf_file.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!");
S else A alert("Sursa de date inca n-a fost incarcata complet...");
S

Pentru accesarea datelor din bookmark-ul navigatorului putem utiliza urmatorul cod:

// utilizeaza managerul de componente var bookmarks =
Components. classesa"component://netscape/rdf/datasource?name=bookmarks"i. getService(Components.interfaces.nsIRDFDataSource);

// prelucreaza intrarile din bookmark if (bookmarks.HasAssertion(
RDF.GetResource("https://home.netscape.com/NC-rdf#BookmarksRoot"),
RDF.GetResource("https://home.netscape.com/NC-rdf#child"),
RDF.GetResource("https://home.netscape.com/NC-rdf#PersonalToolbarFolder"), true) A
/* prelucreaza datele */
S

Fisierul de bookmark-uri este un document XML (in particular XUL) de forma urmatoare:

<tree datasources="rdf:bookmarks">
...
</tree>

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"?>
<RDF:RDF xmlns:RDF="https://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="https://www.mozilla.org/rdf/chrome#">

<!-- list all the packages being supplied by this jar -->
<RDF:Seq about="urn:mozilla:package:root">
<RDF:li resource="urn:mozilla:package:editor"/>
<RDF:li resource="urn:mozilla:package:communicator"/>
<RDF:li resource="urn:mozilla:package:navigator"/>
</RDF:Seq>

<!-- package information -->
<RDF:Description about="urn:mozilla:package:editor" chrome:displayName="Editor" chrome:author="mozilla.org" chrome:name="editor">
</RDF:Description>
<RDF:Description about="urn:mozilla:package:communicator" chrome:displayName="Mozilla Core" chrome:author="mozilla.org" chrome:name="communicator">
</RDF:Description>
<RDF:Description about="urn:mozilla:package:navigator" chrome:displayName="Navigator" chrome:author="mozilla.org" chrome:name="navigator">
</RDF:Description>
</RDF:RDF>

3. XUL - limbaj de descriere a interfetelor cu utilizatorul
Vom prezenta in continuare un limbaj bazat pe XML utilizat pentru specificarea elementelor de interfata cu utilizatorul in cadrul navigatoarelor Netscape din generatia a patra (Netscape Navigator), a cincea (Mozilla) si a sasea (Gecko). In fapt, XUL (Extensible User Interface Language) reprezinta o aplicatie independenta de platforma bazate pe standarde precum HTML 4, XML 1.0, spatiile de nume XML, CSS - nivele 1 si 2, DOM - nivele 1 si 2, destinata reprezentarii interfetelor cu utilizatorul in cadrul navigatoarelor produse de Netscape Communications.

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
Elementul radacina al unui fisier XUL este <window>, fiecare document trebuind sa contina macar un element de tip window. O interfata XUL este definita de elementul radacina. Acest element poate contine diferite widget-uri (controale) facilitind interactiunea cu utilizatorul:

<window title="O interfata XUL" id="main_win">
<menubar id="main_menu">
<menu value="File" id="file_menu"/>
<popup>
<menuitem value="New" onclick="CreateNewDoc()" />
<menuitem value="Open" onclick="OpenDoc()" />
<menuitem value="Close" onclick="CloseDoc()" />
</popup>
<menu value="Edit" />
<menu value="Help" />

</menubar>
<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"?>
<window xmlns:html="https://www.w3.org/TR/REC-html40" xmlns="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
...
</window>

3.2 Exemple
Generarea unei cutii de vizualizare avind titlu, grupind in interiorul ei doua butoane:

<!-- incarca un stil de afisare a interfetei (aici 'chrome') -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!-- defineste fereastra de afisare -->
<window id="new-menu" xmlns:html="https://www.w3.org/1999/xhtml" xmlns="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<titledbox style="background-color: lightblue;" orient="vertical">
<title>Nice Buttons</title>
<button value="Click Me" />
<button value="Push Me" />
</titledbox>
</window>

Acest document XUL va avea urmatoarea reprezentare grafica:


O cutie de vizualizare cu doua butoane
Pentru fiecare buton, se pot preciza proprietati si actiuni pentru diferite pseudo-clase de stiluri CSS (hover si active) si evenimente (e.g. onCommand), utile pentru exploatarea interfetei. Astfel, putem avea:

<style> button.bookmarkbutton A margin: 0px; max-width: 8em; font: inherit; font-size: smaller; color: #99CCCC; border: none; padding: 1px; background-image: none;
S

button.bookmarkbutton:hover A color: #CCFFFF;
S

button.bookmarkbutton:active A color: #CCFFFF; padding-left: 2px; padding-top: 2px; padding-right: 0px; padding-bottom: 0px;
S
</style>
<button class="bookmarkbuttom" value="&TOC.label;" onCommand="GetDoc('bookmarks.html')" />

Un exemplu de utilizare a tab-urilor:

<tabcontrol align="vertical">
<tabbox align="horizontal">
<tab value="Tab One" />
<tab value="Tab Two" />
<tab value="Tab Three" />
</tabbox>

<tabpanel flex="100%">
<button value="View One" />
<button value="View Two" />
<button value="View Three" />
</tabpanel>
</tabcontrol>


Definirea tab-urilor in XUL
Un cimp de dialog de tip text poate fi introdus prin intermediul tag-ului <textfield>:

<textfield value="Fill in here" />
<textfield value="I am a textarea now" multiline="true" />


Cimpuri de introducere a datelor
Folosirea unui control de alegere a culorii pentru modificarea continutului unui document HTML:

<html:script language="JavaScript"> function ChangeColor(cp)
A var color = cp.getAttribute('color'); document.getElementById("input").value = color; document.getElementById("coldiv").style.backgroundColor = color;
S
</html:script>
<colorpicker id="cp" onclick="ChangeColor(this);"/>
<html:p />
<html:input id="input" />
<html:p />
<html:div id="coldiv" style="width:100px; height:100px; background-color:white" />
<html:hr />

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>.


Utilizarea elementului XUL <colorpicker> in cadrul unui document HTML
3.3 XUL Chrome
O serie dintre facilitatile puternice ale browser-ului Mozilla provin din utilizarea unui chrome, acest termen avind diferite semantici in functie de contextul in care apare. In general, termenul se refera la o interfata XUL si toate fisierele ei aditionale. De asemeni, chrome reprezinta structura si continutul unui document XUL, inclusiv definitiile de proprietati de stiluri CSS si localizarea interfetei pe o anumita platforma particulara. Un chrome este specificat in cadrul interfetei XUL printr-o instructiune de procesare <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>, lucru care semnaleaza motorului de procesare Gecko sa incarce toate fisierele asociate acestui chrome.

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',
'_blank', 'chrome,all,dialog=no')" />


Interfata navigatorului Mozilla utilizind un chrome construit in XUL
Dar ce inseamna un pachet? Vom raspunde la aceasta intrebare in cele ce urmeaza.

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
... skin/ default/ navigator.css nav-icon.gif
... locale/
US-en/ navigator.dtd

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
Desigur, un navigator Web reprezinta mai mult decit o interfata. Orice browser trebuie sa fie independent de platforma, bazat pe standarde WWW, usor de configurat si de exploatat si rapid. Mai mult, fiecare navigator Web actual ofera mai mult decit posibilitatea explorarii structurii hipermedia a spatiului WWW, integrind clienti pentru posta electronica si grupuri de stiri, transferul de fisiere si altele (managementul cookie-urilor). Orice navigator evoluat da posibilitatea programatorilor sa includa in cadrul paginilor scripturi concepute in limbaje standardizate (e.g. JavaScript).

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:


Interactiunea componentelor interne ale navigatorului Mozilla
XPCOM reprezinta o metodologie de programare a aplicatiilor distribuite, inspirata de COM (Component Object Model), independenta de platforma hardware si software: fragmente de cod ofera interfete independente de limbaj si platforma spre alte obiecte care pot sa acceseze diferite servicii. Astfel, proiectarea si compilarea aplicatiei se pot realiza indiferent de implementarea obiectelor, programatorii trebuind sa cunoasca numai interfetele oferite de obiecte. Aceste interfete vor fi descrise intr-un limbaj special denumit XPIDL, extensie a limbajului de definire a interfetelor IDL (Interface Definition Language) folosit de aplicatiile CORBA si COM. XPConnect este tehnologia prin intermediul careia interfetele descrise de XPIDL sint conectate la partile de cod care implementeaza obiectele in JavaScript, limbajul utilizat de XUL.

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
In continuare vom da sursa fisierului NetSupportConfirmYN.xul din distributia Mozilla:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://navigator/skin/navigator.css" type="text/css"?>

<window xmlns:html="https://www.w3.org/TR/REC-html40" xmlns:xul ="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<data>
<broadcaster id="NetDialog:Message"/>
</data>
<dialog>
<observes element="NetDialog:Message" attribute="text" onbroadcast="onUpdate()"/>
</dialog>
<html:script> function onUpdate()
A dump("onUpate \n"); var msg = document.getElementById("NetDialog:Message"); if (msg)
A var text = msg.getAttribute("text"); dump(text +"\n" ); var prompt = (document.getElementById("message")); if (prompt)
A dump(" setting message \n" ); prompt.childNodesa0i.nodeValue = text;
S
S
S
</html:script>

<html:table>
<html:tr >
<html:td>
<html:img html:src="chrome://navigator/skin/questionl.gif"/>
</html:td>
<html:td>
<html:span id="message">m</html:span>
</html:td>
</html:tr>
<html:tr>
<html:td></html:td>
<html:td html:align="justify">
<html:button id="OKButton"> Yes </html:button>
<html:button id ="CancelButton"> No </html:button>
</html:td>
</html:tr>
</html:table>
</window>

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.


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta