Protocol de exportare a datelor v5

De la Dexonline wiki
Salt la: navigare, căutare

Dacă doriți să scrieți o aplicație care să transfere baza de date și să o folosească off-line, comunicați cu scriptul http://dexonline.ro/update5.php pentru a sincroniza periodic baza de date.

Generalități

  • Copierea, folosirea și redistribuirea definițiilor din dexonline sunt permise sub Licența Publică Generală GNU.
  • Puteți citi detalii despre formatarea definițiilor.
  • Acest protocol înlocuiește versiunile anterioare:
    • update3.php și update.php, care au fost retrase din folosință pe 4 aprilie 2012. Motivul este că protocoalele anterioare calculau un set de date particularizat pentru fiecare client, ceea ce încărca serverul. Noul protocol precalculează datele rezonabil de des (de obicei săptămânal).
    • update4.php, care rămâne disponibil după 2016, dar nu mai exportă date noi. Motivul este că schema bazei de date s-a modificat considerabil.

Date exportate

Surse

dexonline îș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 descărcați numai dacă observați că ați primit definiții care folosesc surse necunoscute.

<Sources>
  <Source id="1">
    <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>

Flexiuni

Această categorie exportă tipurile distincte de flexiuni folosite de dexonline, care reprezintă un subset al flexiunilor limbii române. Ș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 InflectionId).

<Inflections>
  <Inflection id="1">
    <Description>Substantiv masculin, Nominativ-Acuzativ, singular, nearticulat</Description>
  </Inflection>
  ...
  <Inflection id="58">
    <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.

<Lexems>
  <Lexem id="57483">
    <Timestamp>1189683958</Timestamp>
    <Form>cop'il</Form>                                      ;; Forma poate include un apostrof înainte de vocala accentuată
    <Description>persoană</Description>                      ;; Opțional
    <InflectedForm>                                          ;; Formele flexionare
      <InflectionId>1</InflectionId>
      <Form>cop'il</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>3</InflectionId>
      <Form>cop'ii</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>5</InflectionId>
      <Form>cop'ilul</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>8</InflectionId>
      <Form>cop'iilor</Form>
    </Inflection>
  </Lexem>
  <Lexem id="57484">
    <Timestamp>1189683961</Timestamp>
    <Form>cop'il</Form>
    <Description>lăstar</Description>
    <Inflection>
      <InflectionId>1</InflectionId>
      <Form>cop'il</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>3</InflectionId>
      <Form>cop'ili</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>5</InflectionId>
      <Form>cop'ilul</Form>
    </Inflection>
    ...
    <Inflection>
      <InflectionId>8</InflectionId>
      <Form>cop'ililor</Form>
    </Inflection>
  </Lexem>
  ...
</Lexems>

Precizări:

  • Scriptul nu trimite informații despre ștergerea unui lexem. Clientul dumneavoastră va primi noua tabelă de asocieri intrări-lexeme și poate observa că lexemul nu mai apare în nicio asociere. Nu este o problemă dacă clientul păstrează lexemul pe termen nelimitat, deoarece el nu mai este folosit.
  • Dacă cel puțin una din formele flexionare se modifică, întreg lexemul va fi resincronizat.
  • Lexemul are întotdeauna cel puțin o formă flexionară. Echipa dexonline nu a terminat încă de etichetat toate lexemele și deci paradigmele unor lexeme sunt încă necunoscute. Totuși, chiar și acele lexeme au o singură formă flexionară identică cu forma lexemului.
  • Dacă un cuvânt are mai multe modele de flexionare (cum ar fi monedă-monede și monedă-monezi), vor exista două lexeme separate.
  • 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.

Intrări

Intrările grupează lexeme cu forme sau flexiuni diferite, dar cu sensuri identice. Exemple: căpșună (pl. căpșuni) și căpșună (pl. căpșune), tr'afic și traf'ic etc. Intrările sunt asociate many-to-many cu definiții și cu lexeme. În rest, intrările sunt obiecte minimale. În afară de ID, ele conțin doar o descriere, de obicei egală cu forma unuia dintre lexeme (fără accent).

<Entries>
  <Entry id="12345">
    <Timestamp>1189683958</Timestamp>
    <Description>copil (persoană)</Description>     
  </Entry>
  ...
</Entries>

Definiții

<Definitions>
  <Definition id="9432">                                        ;; Exemplu de definiție adăugată sau modificată
    <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>
  </Definition>
  <Definition id="293845">                                      ;; Exemplu de definiție ștearsă -- numai în fișierele diff
    <Timestamp>1189680395</Timestamp>
    <Deleted/>
  </Definition>
</Definitions>

Precizări:

  • Este posibil ca, în cazul unei definiții șterse, să vă fie transmis un ID pe care clientul dumneavoastră să nu îl aibă în baza de date. Acest lucru se întâmplă când o definiție este ștearsă pe site fără să fi fost vreodată activă (inițial toate definițiile trimise pentru dexonline intră în starea temporară până când sunt moderate). În această situație, ignorați pur și simplu înregistrarea.
  • Dexonline indică abrevierile între două semne #. De exemplu, #expr.# înseamnă expresie. Vedeți și secțiunea despre abrevieri.

Asocieri intrări-definiții

Această categorie exportă asocierile între intrări și definiții, care sunt de tipul many-to-many (un cuvânt căutat poate produce mai multe definiții, iar o definiție poate fi afișată la căutarea mai multor cuvinte).

<EntryDefinition>
  <Map entryId="12345" definitionId="98723"/>      ;; Asociază intrarea 12345 cu definiția 98723
  <Map entryId="12345" definitionId="98724"/>
  <Unmap entryId="1234" definitionId="89071"/>     ;; Disociază intrarea 1234 de definiția 89071 -- numai în fișierele diff
</EntryDefinition>

Asocieri intrări-lexeme

Această categorie exportă asocierile între intrări și lexeme, care sunt de tipul many-to-many (o intrare ca monedă poate conține mai multe lexeme ca monedă-monede și monedă-monezi, iar un lexem ca broască poate fi parte din mai multe intrări omonime: animalul și mecanismul).

<EntryLexem>
  <Map entryId="12345" lexemId="98723"/>      ;; Asociază intrarea 12345 cu lexemul 98723
  <Map entryId="12345" lexemId="98724"/>
  <Unmap entryId="1234" lexemId="89071"/>     ;; Disociază intrarea 1234 de lexemul 89071 -- numai în fișierele diff
</EntryLexem>

Abrevieri

Această categorie exportă abrevierile folosite de dexonline, 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.

<AbbrevList>
  <Sources>
    <Source id="0">
      <Section>"common"</Section>
    </Source>
    <Source id="1">
      <Section>"common"</Section>
      <Section>"dex"</Section>
    </Source>
    <Source id="2">
      <Section>"common"</Section>
      <Section>"dex"</Section>
    </Source>
    ...
  </Sources>
  <Section name="common">
    <Abbrev short="adj.">adjectiv</Abbrev>
    <Abbrev short="loc." ambiguous="1">locuțiune</Abbrev>
    <Abbrev short="bot." ambiguous="1">botanică</Abbrev>
    <Abbrev short="pl.">plural</Abbrev>
    <Abbrev short="sg.">singular</Abbrev>
    <Abbrev short="mil.">termen militar</Abbrev>
    ...
  </Section>
  <Section name="dex">
    <Abbrev short="a. cr.">înainte de Cristos</Abbrev>
    <Abbrev short="abr.">abreviat, abreviere</Abbrev>
    <Abbrev short="mil.">milion</Abbrev>
    ...
  </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 și dex și ambele definesc o abreviere pentru mil. În acest caz, trebuie folosită valoarea milion, nu termen militar. Î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.
  • Când abrevierea are atributul ambiguous="1", înseamnă că varianta scurtă are și sens de sine stătător. De exemplu, loc. înseamnă locuțiune, dar poate fi și cuvântul loc (punct, poziție) la sfârșitul unei fraze. Similar, bot. înseamnă botanică, dar poate fi și cuvântul bot (gură de animal) la sfârșitul unei fraze.

Setul inițial de date

Când utilizatorul deschide pentru prima dată aplicația, sau dacă dumneavoastră doriți să obțineți un set complet de date pentru a-l livra împreună cu aplicația, accesați adresa http://dexonline.ro/update5.php?last=0. Veți primi un fișier XML cu legături către șase fișiere, în formatul:

<Files>
  <Full date="2017-04-22">
    <Abbrevs>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-abbrevs.xml.gz</Abbrevs>
    <Inflections>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-inflections.xml.gz</Inflections>
    <Sources>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-sources.xml.gz</Sources>
    <Definitions>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-definitions.xml.gz</Definitions>
    <Entries>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-entries.xml.gz</Entries>
    <Lexems>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-lexems.xml.gz</Lexems>
    <EntryDefinitionMap>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-edm.xml.gz</EntryDefinitionMap>
    <EntryLexemMap>https://dexonline.ro/static/download/xmldump/v5/2017-04-22-elm.xml.gz</EntryLexemMap>
  </Full>
  <Diffs></Diffs>
</Files>

Aplicația trebuie să păstreze valoarea 2017-04-22 a atributului date. Aceasta este data setului de date care îi este servit. Dacă clientul solicită din nou actualizarea peste câtva timp, trebuie să apeleze scriptul http://dexonline.ro/update5.php?last=2017-04-22 pentru a primi noutățile survenite de la ultima sincronizare:

<Files>
  <Full date="2017-05-06">
    <Abbrevs>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-abbrevs.xml.gz</Abbrevs>
    <Inflections>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-inflections.xml.gz</Inflections>
    <Sources>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-sources.xml.gz</Sources>
  </Full>
  <Diffs>
    <Diff date="2017-04-29">
      <Definitions>https://dexonline.ro/static/download/xmldump/v5/2017-04-29-definitions-diff.xml.gz</Definitions>
      <Entries>https://dexonline.ro/static/download/xmldump/v5/2017-04-29-entries-diff.xml.gz</Entries>
      <Lexems>https://dexonline.ro/static/download/xmldump/v5/2017-04-29-lexems-diff.xml.gz</Lexems>
      <EntryDefinitionMap>https://dexonline.ro/static/download/xmldump/v5/2017-04-29-edm-diff.xml.gz</EntryDefinitionMap>
      <EntryLexemMap>https://dexonline.ro/static/download/xmldump/v5/2017-04-29-elm-diff.xml.gz</EntryLexemMap>
    </Diff>
    <Diff date="2017-05-06">
      <Definitions>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-definitions-diff.xml.gz</Definitions>
      <Entries>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-entries-diff.xml.gz</Entries>
      <Lexems>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-lexems-diff.xml.gz</Lexems>
      <EntryDefinitionMap>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-edm-diff.xml.gz</EntryDefinitionMap>
      <EntryLexemMap>https://dexonline.ro/static/download/xmldump/v5/2017-05-06-elm-diff.xml.gz</EntryLexemMap>
    </Diff>
  </Diffs>
</Files>

Datele din secțiunea Full (abrevieri, flexiuni și surse) sunt întotdeauna servite integral. Datele din secțiunea Diffs (definiții, intrări, lexeme și asocieri) sunt servite în diferențe incrementale, generate de regulă săptămânal. Diff-urile din secțiunile Diff sunt servite în ordine cronologică.