Acest script exportă baza de date a DEX online sau
porțiuni ale ei. Dacă doriți să scrieți un client care să
transfere baza de date și să o folosească off-line, comunicați cu
acest script pentru a sincroniza periodic baza de date.
Acest script este învechit și va fi retras din folosință la 1 martie 2012. El a
fost înlocuit de versiunea următoare, update4.php.
Generalități
- Copierea, folosirea și redistribuirea definițiilor
din DEX online sunt permise
sub Licența Publică Generală
GNU.
- Este obligatoriu ca mecanismul pe care îl folosiți pentru transfer
să accepte date comprimate cu gzip. Mai exact, trebuie ca, la
stabilirea conexiunii HTTP, să setați antetul Accept-Encoding:
gzip (cel puțin). Datele pe care le primiți sunt comprimate cu
gzip; există biblioteci publice pentru cam orice limbaj pe care le
puteți folosi pentru a decomprima datele. Dacă nu vă conformați
acestei cerințe, veți primi un răspuns 403 (Forbidden). De
remarcat că orice browser modern folosește gzip, deci îl puteți
folosi pentru a inspecta vizual datele.
- Un timestamp semnifică numărul de secunde trecute de
la 1 ianuarie 1970 GMT. Limbajul în care dezvoltați aplicația ar
trebui să aibă funcții de conversie din data/ora calendaristică
în timestamp. Când clientul se conectează la server, trebuie
să-i comunice serverului timestamp-ul ultimei actualizări făcute
(sau 0 dacă este prima oară când clientul se conectează).
Scriptul va returna toate datele modificate începând cu acel
timestamp, precum și timestamp-ul curent, pe care îl puteți
păstra și folosi ca parametru la următoarea actualizare.
- Serverul își exportă datele în ordinea cronologică a
modificărilor. Dacă conexiunea se întrerupe prematur, clientul
poate reapela scriptul cu ultimul timestamp pe care l-a primit,
pentru a continua de unde a rămas.
- Puteți citi detalii despre formatarea definițiilor.
Versiuni
Opțional, puteți adăuga parametrul version la
URL. Versiunea implicită este 3.0 (din motive istorice), iar
versiunea curentă este 3.1. Pe parcursul documentului, diferențele
dintre versiuni sunt semnalate cu simbolul
.
Date exportate
Scriptul exportă separat diverse tipuri de date. Pentru a
transfera toate datele, trebuie să invocați de mai multe ori acest
script, folosind parametrul GET export=... pentru a
controla tipul de date. Nu este obligatoriu să transferați toate
tipurile de date la fiecare sincronizare a clientului, dar am
făcut această separare pentru ușurința implementării.
Surse
DEX online își preia definițiile din diferite "surse", care de
obicei se referă la un dicționar tipărit, identificat prin titlu,
autor, editură și an de apariție. Lista de surse este întotdeauna
exportată complet. Ea se modifică rar și vă recomandăm să o
resincronizați numai dacă observați că ați primit definiții care
folosesc surse necunoscute.
Parametri acceptați:
Formatul este:
<Sources>
<NumResults>număr</NumResults>
<Source>
<Id>număr</Id>
<ShortName>șir</ShortName>
<Name>șir</Name>
<Author>șir</Author>
<Publisher>șir</Publisher>
<Year>șir</Year>
</Source>
....
</Sources>
De exemplu:
<Sources>
<NumResults>22</NumResults>
<Source>
<Id>1</Id>
<ShortName>DEX '98</ShortName>
<Name>Dicționarul explicativ al limbii române</Name>
<Author>Academia Română, Institutul de Lingvistică "Iorgu Iordan"</Author>
<Publisher>Editura Univers Enciclopedic</Publisher>
<Year>1998</Year>
</Source>
....
</Sources>
Definiții
Parametri acceptați:
- export=definitions
- timestamp=număr
Formatul este:
<Definitions>
<NumResults>număr</NumResults>
<Definition> ;; Exemplu de definiție modificată
<Id>număr</Id>
<Timestamp>număr</Timestamp>
<UserName>șir</UserName>
<SourceId>număr</SourceId>
<Text>șir</Text>
<LexemId>număr</LexemId>
<LexemId>număr</LexemId>
<LexemId>număr</LexemId>
...
</Definition>
<Definition> ;; Exemplu de definiție ștearsă
<Id>număr</Id>
<Timestamp>număr</Timestamp>
<Deleted/>
</Definition>
....
</Definitions>
De exemplu:
<Definitions>
<NumResults>2</NumResults>
<Definition>
<Id>9432</Id>
<Timestamp>1189656131</Timestamp>
<UserName>ana_zecheru</UserName>
<SourceId>1</SourceId>
<Text>@FÁTA MORGÁNA@ s.f. Fenomen optic frecvent în regiunile calde, datorită căruia imaginile
obiectelor aflate la (sau dincolo de) orizont apar ca și cum s-ar reflecta într-o apă. ** Apariție
înșelătoare, iluzie trecătoare. - Cuv. it.</Text>
<LexemId>35579</LexemId>
<LexemId>90887</LexemId>
<LexemId>90889</LexemId>
</Definition>
<Definition>
<Id>293845</Id>
<Timestamp>1189680395</Timestamp>
<Deleted/>
</Definition>
</Definitions>
Precizări:
- Definițiile sunt listate în ordinea crescătoare a
timestamp-ului modificării. Pentru definițiile șterse este
listat doar câmpul
<Deleted/>. Pentru
definițiile modificate sau adăugate, sunt listați autorul,
sursa, textul propriu-zis și zero sau mai multe cuvinte (numite
lexeme) cu care definiția este asociată.
- Este posibil ca, în cazul unei definiții șterse, să vă fie
transmis un identificator pe care clientul dumneavoastră nu îl
are în baza de date. Acest lucru se întâmplă când o definiție
este ștearsă pe site fără să fi trecut vreodată prin starea
"activă" (inițial toate definițiile trimise pentru DEX
online intră în starea "temporară" până când sunt
moderate). În această situație, ignorați pur și simplu
înregistrarea.
- Când setul de lexeme asociate cu o definiție se schimbă,
întreaga definiție este resincronizată.
DEX online indică abrevierile între două semne „#”. De exemplu, #expr.# înseamnă „expresie”.
Din motive istorice, versiunea 3.0 nu exportă aceste caractere. Versiunile începând cu 3.1 le exportă. Vedeți și secțiunea specială despre abrevieri.
Flexiuni
Această categorie exportă tipurile distincte de flexiuni folosite de
DEX online, care reprezintă un subset al flexiunilor limbii
române (de exemplu, momentan DEX online nu folosește
vocativul substantivelor). Și această categorie este exportată
complet, întrucât se modifică foarte rar (vă recomandăm să o
transferați numai atunci când, la sincronizarea lexemelor,
întâlniți o valoare nouă pentru parametrul InflId).
Parametri acceptați:
Formatul este:
<Inflections>
<NumResults>număr</NumResults>
<Inflection>
<Id>număr</Id>
<Description>șir</Description>
</Inflection>
<Inflection>
...
</Inflection>
</Inflections>
De exemplu:
<Inflections>
<NumResults>86</NumResults>
<Inflection>
<Id>1</Id>
<Description>Substantiv masculin, Nominativ-Acuzativ, singular, nearticulat</Description>
</Inflection>
...
<Inflection>
<Id>58</Id>
<Description>Verb, Indicativ, prezent, persoana a II-a, plural</Description>
</Inflection>
...
</Inflections>
Lexeme
"Lexemul" este un termen lingvistic pentru cuvânt. Un lexem este
caracterizat printr-un identificator numeric unic, un nume, o
descriere opțională (folosită pentru diferențierea omonimelor) și
o listă de forme flexionare.
Parametri acceptați:
- export=lexems
- timestamp=număr
Formatul este:
<Lexems>
<NumResults>număr</NumResults>
<Lexem>
<Id>număr</Id>
<Timestamp>număr</Timestamp>
<Form>șir</Form> ;; Forma poate include un apostrof înainte de vocala accentuată
<Description>șir</Description> ;; Opțional
<Inflection> ;; Formele flexionare
<InflId>număr</InflId>
<Form>șir</Form>
</Inflection>
<Inflection>
<InflId>număr</InflId>
<Form>șir</Form>
</Inflection>
...
</Lexem>
....
</Lexems>
De exemplu:
<Lexems>
<NumResults>105</NumResults>
<Lexem>
<Id>57483</Id>
<Timestamp>1189683958</Timestamp>
<Form>cop'il</Form>
<Description>persoană</Description>
<Inflection>
<InflId>1</InflId>
<Form>cop'il</Form>
</Inflection>
...
<Inflection>
<InflId>3</InflId>
<Form>cop'ii</Form>
</Inflection>
...
<Inflection>
<InflId>5</InflId>
<Form>cop'ilul</Form>
</Inflection>
...
<Inflection>
<InflId>8</InflId>
<Form>cop'iilor</Form>
</Inflection>
</Lexem>
<Lexem>
<Id>57484</Id>
<Timestamp>1189683961</Timestamp>
<Form>cop'il</Form>
<Description>lăstar</Description>
<Inflection>
<InflId>1</InflId>
<Form>cop'il</Form>
</Inflection>
...
<Inflection>
<InflId>3</InflId>
<Form>cop'ili</Form>
</Inflection>
...
<Inflection>
<InflId>5</InflId>
<Form>cop'ilul</Form>
</Inflection>
...
<Inflection>
<InflId>8</InflId>
<Form>cop'ililor</Form>
</Inflection>
</Lexem>
....
</Lexems>
Precizări:
- Lexemele sunt listate în ordinea crescătoare a
timestamp-ului modificării.
- Scriptul nu trimite informații despre ștergerea unui
lexem. Când un lexem este șters în DEX online, el este în
mod automat disociat de toate definițiile cu care era
asociat. Clientul dumneavoastră va primi noile definiții (când
sincronizează secțiunea de definiții) și va face și el
disocierea. Nu este o problemă dacă clientul păstrează lexemul
pe termen nelimitat, deoarece el nu mai este folosit, iar
ștergerea unui lexem este o operație rară.
- Dacă cel puțin una din formele flexionare se modifică,
întreg lexemul va fi resincronizat.
- Lexemul are întoteauna cel puțin o formă flexionară. Echipa
DEX online nu a terminat încă de etichetat toate lexemele
și deci paradigmele unor lexeme sunt încă necunoscute. Chiar și
acele lexeme au o singură formă flexionară, corespunzătoare unei
flexiuni "temporare".
- Nu vă recomandăm să folosiți numele lexemului (cel din
câmpul form) pentru căutări. Folosiți formele flexionare pentru
aceasta. De cele mai multe ori, numele lexemului coincide cu
prima dintre formele flexionare, iar când nu este așa, există un
motiv.
Abrevieri
Această categorie exportă abrevierile folosite de DEX online, așa cum au fost ele moștenite din dicționarele originale. Această categorie este exportată complet.
Vă recomandăm să o transferați numai atunci când, la sincronizarea definițiilor, întâlniți o abreviere necunoscută. Nu toate dicționarele au fost prelucrate pentru
expandarea abrevierilor, dar le vom procesa pe toate, în timp.
Aceste informații sunt exportate pentru orice versiune le solicitați, dar vă vor fi de folos
în special începând cu versiunea 3.1, când abrevierile sunt delimitate în definiții prin semne „#”.
Parametri acceptați:
- export=abbrev
(Cuvântul „abbreviations” era prea lung, așa că l-am... abreviat...)
Formatul este:
<AbbrevList>
<Sources>
<Source id="număr" sections="secțiuni_CSV"/>
<Source id="număr" sections="secțiuni_CSV"/>
...
</Sources>
<Section name="nume_secțiune">
<Abbrev short="forma_scurtă" long="forma_completă"/>
<Abbrev short="forma_scurtă" long="forma_completă"/>
...
</Section>
....
</AbbrevList>
De exemplu:
<AbbrevList>
<Sources>
<Source id="0" sections="common"/>
<Source id="1" sections="common, dex"/>
<Source id="2" sections="common, dex"/>
...
</Sources>
<Section name="common">
<Abbrev short="adj." long="adjectiv"/>
<Abbrev short="pl." long="plural"/>
<Abbrev short="sg." long="singular"/>
<Abbrev short="mil." long="termen militar"/>
</Section>
<Section name="dex">
<Abbrev short="a. cr." long="înainte de Cristos"/>
<Abbrev short="abr." long="abreviat, abreviere"/>
<Abbrev short="mil." long="milion"/>
...
</Section>
....
</AbbrevList>
Precizări:
- Întrucât multe din dicționare folosesc sisteme asemănătoare sau chiar identice de abrevieri (de exemplu diversele ediții din DEX), am creat un sistem bazat pe secțiuni.
În exemplul de mai sus, sursele sunt 0, 1, 2..., iar sursele 1 și 2 folosesc un set identic de abrevieri, compus din secțiunile „common” și „dex”.
- Dacă o abreviere este definită în mai multe secțiuni, trebuie folosită valoarea din secțiunea definită mai târziu în eticheta <Source>.
De exemplu, DEX folosește secțiunile „common, dex” și ambele secțiuni definesc o abreviere pentru „mil.”. În acest caz, trebuie folosită valoarea „milion”.
În practică nu avem încă o astfel de situație, dar anticipăm apariția ei pe măsură ce procesăm noi dicționare.