Introducere
În revizuirea celor patru probleme centrale în gestionarea datelor, (captare, stocare, extragere și schimb), utilizatorul tipic al XML întâlnește modele structurale fundamentale recurente care se aplică la tot felul de date pe parcursul fazelor de stocare și schimb. Aceste tipare se repetă în mod constant, deoarece utilizarea lor transcende contextele particulare în care sunt prelucrate datele de bază. Aceste tipare le numim „structuri de date” (sau tipuri de date).
Începem introducerea noastră cu un exemplu simplu. Luați în considerare o listă obișnuită de cumpărături pentru o gospodărie cu o singură persoană.
Exemplu introductiv de listă de cumpărături:
Lista de cumpărături a lui Andy
* ouă
* sirop de tuse (pentru bunică)
* suc de portocale
* pâine
* detergent pentru rufe ** a nu se uita acest lucru **
Când analizăm aspecte ale informațiilor conținute în această listă de cumpărături, putem face câteva generalizări de bază:
- Portabilitate: lista de cumpărături poate fi reprezentată și transferată cu ușurință. Dacă este necesar, ar putea fi stocată într-o bază de date și procesată de un software personalizat, dar ar putea fi la fel de ușor de scris pe o bucată de hârtie;
- Înțelegere: lista de cumpărături este ușor de înțeles de către publicul vizat (în acest caz, singura persoană care a scris lista) și, prin urmare, nu are nevoie de informații sau structuri suplimentare pentru a putea fi utilizată imediat;
- Adaptabilitate: dacă devin necesare modificări (cum ar fi adăugiri sau eliminări la listă) există o metodologie existentă și bine cunoscută pentru a realiza acest lucru (de exemplu, în cazul unei liste scrise de mână, pur și simplu scrieți intrări noi sau tăiați intrări nedorite ).
Conceptul fundamental al structurilor de date de bază
Având în vedere că avem exemplul anterior pentru fundal, putem introduce acum conceptul fundamental de „structuri de date de bază”.
Conceptul de „structuri de date de bază” descrie convențiile fundamentale pe care le folosim pentru a stoca datele noastre, astfel încât să ne putem schimba mai ușor datele. Când respectăm aceste convenții fundamentale, ajutăm la asigurarea portabilității, a înțelegerii și a adaptabilității informațiilor. |
Structuri de date de bază definite
Acum, că am introdus conceptul nostru de structuri de date, putem începe cu câteva definiții concrete și apoi să revedem acele definiții în contextul exemplului listei noastre de cumpărături.
Prezentare generală a structurilor de date „de bază”
Următorii termeni definesc câteva structuri de date „de bază” [1] pe care le folosim aici. Această listă este ordonată în grade crescătoare de complexitate:
- SimpleBoolean: Orice valoare care poate fi exprimată fie ca fie „Adevărat”, fie „Fals”.
- SimpleString: O secvență contiguă de caractere, incluzând atât alfanumerice, cât și non-alfanumerice.
- SimpleSequence: O enumerare a articolelor în general accesibile prin indexare numerică.
- Pereche nume-valoare: Un nume singular arbitrar atașat la o valoare singulară.
- SimpleDictionary: O enumerare a articolelor în general accesibile prin indexare alfanumerică.
- SimpleTable: Un aranjament ordonat de coloane și rânduri. SimpleTable poate fi clasificat ca o structură de date „compuse” (de exemplu, SimpleSequence în care fiecare element din secvență este un singur SimpleDictionary).
Un punct important de reținut în timpul revizuirii acestor structuri de date „de bază” este că acestea sunt elementare și complementare. Adică, structurile de bază, atunci când sunt utilizate în combinație, pot forma structuri și mai complexe. Odată ce cititorul va înțelege acest fapt, va deveni evident că nu există nicio aplicație sau specificație de date care să nu poată fi descrisă în întregime în XML folosind nimic mai mult decât aceste structuri de date „de bază”.
Odată ce înțelegem structurile de date „de bază”, le putem folosi în combinație pentru a reprezenta orice tip de informație structurată. |
Acum consultați „Exemplul introductiv de listă de cumpărături” de mai sus. Când îl comparăm cu structurile de date „de bază” pe care tocmai le-am definit, putem face câteva observații destul de simple:
- Întreaga listă de cumpărături nu poate fi reprezentată utilizând o structură de date SimpleBoolean, deoarece informațiile sunt mai complexe decât „Adevărat” sau „Fals”.
Întreaga listă de cumpărături poate fi reprezentată folosind un SimpleString.
Pot exista motive pentru care nu am vrea să folosim un SimpleString pentru a reprezenta întreaga listă de cumpărături. De exemplu, s-ar putea să dorim să transferăm lista într-o bază de date sau într-o altă aplicație software și apoi să putem să sortăm, să interogăm, să duplicăm sau să procesăm altfel elemente individuale din listă. Prin urmare, tratarea întregii liste ca un SimpleString ar complica cerințele noastre de procesare.
SimpleString
Diferite moduri de a reprezenta SimpleString în XML:
<Example>
<String note="This XML attribute contains a SimpleString.">
This XML Text Node represents a SimpleString.
</String>
<!-- This XML comment contains a SimpleString -->
<![CDATA[ This XML CDATA section contains a SimpleString. ]]>
</Example>
SimpleSequence
Diferite moduri de a reprezenta SimpleSequence în XML:
<Example>
<!-- use a single XML attribute with a space-delimited list of items -->
<ShoppingList items="bread eggs milk juice" />
<!-- use a single XML attribute with a semicolon-delimited list of items
(this allows us to add items with spaces in them) -->
<ShoppingList items="bread;cough syrup;milk;juice;laundry detergent" />
<!-- yet another way (but not necessarily a good way)
using multiple XML attributes -->
<ShoppingList item00="bread" item01="eggs" item02="cough syrup" />
<!-- yet another way
using XML child elements -->
<ShoppingList>
<item>eggs</item><item>milk</item><item>cough syrup</item>
</ShoppingList>
</Example>
SimpleTable
Exemple
SimpleTable (XML_Elem):
<table>
<tr><item>eggs</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>milk</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>laundry detergent</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>cough syrup</item><getfor>granny</getfor><notes>try to get grape flavor</notes></tr>
</table>
SimpleTable (XML_Attr):
<table>
<tr item="eggs" getfor="andy" notes="" />
<tr item="milk" getfor="andy" notes="" />
<tr item="laundry detergent" getfor="andy" notes="" />
<tr item="cough syrup" getfor="granny" notes="try to get grape flavor" />
</table>
SimpleTable (XML_Mixed):
<table>
<tr>
<item getfor="andy" >eggs</item><notes></notes>
</tr>
<tr>
<item getfor="andy" >milk</item><notes></notes>
</tr>
<tr>
<item getfor="andy" >laundry detergent</item><notes></notes>
</tr>
<tr>
<item getfor="granny">cough syrup</item><notes>try to get grape flavor</notes>
</tr>
</table>
Structuri de date de bază în programare
Pentru a ilustra în continuare modul în care se aplică structurile de date de bază în multe contexte diferite, unele dintre structurile de date de bază enumerate anterior sunt examinate și comparate aici în contextul programării computerizate.
Pentru prima parte a comparației, examinăm terminologia generică împotriva celei utilizate în mod obișnuit în limbaje de programare:
- SimpleBoolean: este denumit în mod obișnuit boolean și poate lua valorile adevărate sau false, 0 sau 1 sau alte valori, în funcție de limbă.
- SimpleString: numit în mod obișnuit
string
sau
.
stringBuffer - SimpleSequence: variabilele indexate numeric din programare sunt reprezentate în mod obișnuit cu o matrice.
- Pereche nume-valoare
- SimpleDictionary: acestea sunt reprezentate în mod obișnuit cu un dicționar sau cu o matrice asociativă.
- SimpleTable
Considerații tehnice
Acum că am introdus și am discutat exemple specifice ale structurilor de date de bază, există câteva considerații tehnice care se aplică tuturor structurilor de date și sunt deosebit de importante pentru cei care ar putea fi responsabili de implementarea și proiectarea schemelor XML pentru a face față scenariilor specifice de implementare.
- Terminologia exactă depinde de context: Deși structurile „de bază” descrise aici se aplică multor scenarii diferite, termenii folosiți pentru a le descrie se pot suprapune sau intra în conflict. De exemplu, termenul „SimpleSequence” așa cum este utilizat aici coincide îndeaproape cu ceea ce se numește „matrice” în multe limbaje de programare. În mod similar, termenul „SimpleDictionary” este o prescurtare pentru ceea ce unele limbaje de programare numesc o „matrice asociativă”. Deși această strânsă corelație este intenționată, trebuie să ne amintim întotdeauna că nuanțele specifice unei aplicații sau a unui limbaj de programare vor necesita o atenție suplimentară. Uneori, apar conflicte minore sau discrepanțe atunci când se detaliază orice structură de date specifică în orice proiect sau tehnologie dată.
- Structurile de bază sunt concepte flexibile: Structurile pot fi definite una în cealaltă, iar unele structuri pot fi aplicate recursiv. De exemplu, s-ar putea defini cu ușurință SimpleSequence folosind SimpleString împreună cu câteva ipoteze de bază. (de exemplu, SimpleSequence este un șir de caractere alfanumerice în care fiecare element din secvență este separat de unul sau mai multe caractere în spațiu alb: „ouă pâine unt lapte”).
- Structurile abstracte tind să ascundă detalii complicate: De exemplu, termenul „SimpleString” descrie noțiunea abstractă a unei secvențe de caractere (de exemplu, „ISBN 0-596-00327-7”). Noțiunea abstractă este destul de intuitivă și necomplicată. Cu toate acestea, notația precisă utilizată pentru a pune în aplicare acea noțiune abstractă și a o reprezenta în codul de lucru real live este cu totul alta. Limbaje de programare diferite și medii diferite pot utiliza convenții diferite pentru a reprezenta același „șir”. Datorită acestei variabilități, se poate recunoaște, de asemenea, că noțiunea abstractă de „SimpleString” în XML este, de asemenea, supusă unor reprezentări diferite, pe baza nevoilor oricărui proiect dat.
Note și referințe
[1] O notă importantă: termenii de bază folosiți aici sunt generalizări. Deși pot coincide cu termeni utilizați în anumite programe software, limbaje de programare specifice sau aplicații specifice, aceștia nu sunt concepuți ca definiții precis din punct de vedere tehnic. Conceptele descrise aici sunt prezentate pentru a ajuta la sublinierea principiului context-neutru al interoperabilității în XML.Include texte traduse și adaptate din Wikibooks de Nicolae Sfetcu
Lasă un răspuns