Documente XML

1. Despre XML

XML vine de la Extensible Markup Language. XML e o forma de SGML (Standard Generalized Markup Language), pe scurt, acesta defineste o sintaxa pentru structurarea datelor (un limbaj) pe care si omul si calculatorul sa le poata citi.
Fiind un curs de PHP, explicatiile despre XML vor fi mai putine, scurte si simple, cat e necesar pentru a se intelege ce e si cum poate fi utilizat cu PHP.
Ca sa intelegeti cam ce este XML si ce se poate face cu el, ganditi-va ca e similar cu HTML-ul, dar fara aspect grafic, in sensul ca structura acestuia se formeaza pe baza unor tag-uri (elemente), precum <h1>, <div>, etc. in HTML, si care pot contine atribute (sau identificatori), iar in acelasi timp este o mini baza de date, deoarece scopul documentelor XML e acela de a aranja si stoca date intr-o anumita ordine si structura erarhica care sa poata fi citite si prelucrate de un alt limbaj, precum PHP.
Documentele XML pot fi create, scrise, folosind un editor simplu de texte (precum Notepad).
Dupa cum puteti vedea in modelul de mai jos, un document XML e asemanator cu unul HTML (daca stiti deja acest limbaj). Datele sunt incadrate in niste tag-uri. Spre deosebire de HTML, in XML denumirea tag-urilor (tehnic elemente) nu e stricta, putand fi folosite nume alese de fiecare in functie de optiunea fiecaruia pentru recunoasterea datelor ce vor fi scrise, care respecta cateva reguli minime.
Aceste reguli sunt:


- Exemplu de document XML:
<?xml version="1.0"?>
<book>
 <publisher>Editura</publisher>
 <title>Titlu carte</title>
 <chapter title="Capitol carte">
  <section title="Sub capitol">
   <paragraph>
    O fraza din sectiunea acestui sub-capitol.
   </paragraph>
   <paragraph>
    Alta fraza din acelasi sub-capitol.
   </paragraph>
  </section>
 </chapter>
</book>
- Acesta este o structura XML creata pentru stocarea ordonata a unor date despre carti.

Datele astfel stocate (cum puteti vedea in exemplul de sus) pot fi relativ usor citite si intelese de om (putand fi modificate simplu daca e nevoie) dar si de un limbaj de programare (PHP, ASP) care le preia din fisierul .xml, le prelucreaza si le poate aranja, manipula si transmite catre o alta aplicatie, precum un navigator (browser) web.
In practica se folosesc de obicei pentru stocarea datelor baze de date SQL, iar acest format XML este de preferat cand se doreste utilizarea acestor date de catre mai mullti agenti, in general in scop de citire; transmiterea fiind mai rapida si economica, de exemplu: Stiri, Meteo, Clasamente, etc.
Aici apare rolul important al limbajului PHP, care, dupa ce a preluat aceste date din fisierul .xml (ce poate fi pe alt server) le poate include intr-o pagina HTML pentru a fi afisate in browser, sau introduce intro alta baza de date mai mare.
PHP are functii speciale pentru citirea, recunoasterea si manipularea datelor din format XML si chiar pentru crearea, scrierea de documente XML (daca are permisiuni de scriere pe server). Vor fi aratate in tutorialele (lectiile urmatoare.

2. Documente XML si DTD

Cerintele, criteriile, pentru scrierea unui document XML corect sunt simple si minime. Totusi, un document XML valid si usor de inteles are nevoie sa urmeze anumite reguli stabilite, cunoscute generic ca DTD (Document Type Definition).
Ca sa intelegeti ce este si la ce e nevoie DTD, studiati urmatorul exemplu in comparatie cu cel de sus.

<?xml version="1.0"?>
<book title="Nume carte">
 <publisher name="Nume Editura"/>
 <chapter number="8">
 <chapter_title>Titlu capitol</chapter_title>
  <p>
   <sentence>O fraza din sectiunea acestui sub-capitol.</sentence>
   <sentence>Alta fraza din acelasi sub-capitol.</sentence>
  </p>
 </chapter>
</book>
- La prima vedere pare similar, dar, desi datele esentiale transmise sunt aceleasi, structura poate fi diferita. Se observa elemente cu alte denumiri si adaugarea de atribute.

Pentru a folosi datele din documentele XML, trebuie sa le cunoasteti structura aranjarii lor si forma ierarhica, astfel puteti adauga noi date (de exemplu aici carti) care trebuie sa respecte acelasi format. Iar in cazul unor documente mai mari, cu ierarhii mai multe, intelegerea lor devine mai greoaie si va dura mai mult timp.
Aici intervine rolul DTD, o forma de explicare pe scurt a structurii aranjarii datelor si relatia dintre ele. Adica, scrierea sub forma unei liste a specificatiilor exacte despre cum sunt elementele legate intre ele, ce tip si nume au fiecare si ce atribute sunt necesare.
De exemplu, pentru modelul de sus, daca cineva doreste sa-l foloseasca si sa adauge noi carti, am putea scrie o descriere astfel: - Astfel, dand o copie a acestei liste oricui are nevoie de acest document XML, va ajuta la intelegerea mai rapida si usoara a structurii datelor pentru a le folosi sau adauga corect altele noi.
Se poate lucra in PHP cu datele din XML dupa ce a fost inteleasa structura lor.

Setul de reguli DTD (Document Type Definition) poate fi specificat (scris) direct in documentul XML (precum documentatiile in PHP), intr-un tag special !DOCTYPE (document type declaration) si cu o sintaxa specifica.
Exemplu listei de sus este pentru intelegerea de catre alte persoane, dar exista o sintaxa standard DTD care se adauga de obicei la inceputul fisierului XML. Pentru obiectul acestui curs nu e nevoie de cunostinte mai multe despre asta, vedeti totusi cum e in exemplul urmator.
Ca sa intelegeti cum se poate adauga setul de reguli standard DTD direct in XML, vedeti exemplul urmator (partea scrisa ingrosat).
<?xml version="1.0"?>

<!DOCTYPE recipe [
<!ELEMENT recipe (ingredients, directions, servings)>
<!ATTLIST recipe name CDATA #REQUIRED>
<!ELEMENT ingredients (#PCDATA)>
<!ELEMENT directions (#PCDATA)>
<!ELEMENT servings (#PCDATA)>
]>

<recipe name ="mancare">
 <ingredients>Legume</ingredients>
 <ingredients>Paine</ingredients>
 <directions>Adauga la pachet</directions>
 <servings>12</servings>
</recipe>
- Documentul XML e impartit in 3 sectiuni. Prima sectiune e linia standard XML. A doua sectiune e setul intern de reguli DTD, marcat cu linii care incep cu <!. A treia sectiune sunt datele XML.
Regulile interne DTD sunt scrise, incadrate de paranteze patrate in interiorul <!DOCTYPE recipe [...]> (document type declaration), 'recipe" fiint obiectul (elementul) radacina.
Daca aveti mai multe documente cu aceeasi structura, se poate folosi un singur DTD dintr-un fisier extern, decat in fiecare, mai usor de actualizat in urma unei modificari.
Si in cazul utilizarii unui DTD extern, trebuie folosit !DOCTYPE care sa precizeze locatia acestuia.
Iata 2 exemple, in primul, SYSTEM indica locatia pe server, iar in al doilea, PUBLIC specifica un DTD standardizat (intalnnit si in documente HTML sau XHTML):
<!DOCTYPE recipe SYSTEM "recipe.dtd">
si
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

In cazul aceluiasi DTD de mai sus, dar in fisier extern, "recipe.dtd" ar arata astfel:
<!ELEMENT recipe (ingredients, directions, servings)>
<!ATTLIST recipe name CDATA #REQUIRED>
<!ELEMENT ingredients (#PCDATA)>
<!ELEMENT directions (#PCDATA)>
<!ELEMENT servings (#PCDATA)>
- Fara !DOCTYPE si paranteze patrate.
- Prin urmare, un document XML valid este acela care are un format corect, respecta minimile reguli de sintaxa, dar contine si un DTD.

Aceasta a fost partea teoretica, de scurta introducere in formatul XML, in tutorialul urmatoar e prezentate aspectul practic si modul de lucru cu PHP.
Lucru cu atribute HTML ... <<-- Anterior --- Urmator -->> Lucru cu XML - ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag e folosit pentru a adauga liste cu definitii in element <dl>?
<dt> <dd> <li>
<dl>
 <dt>HTML</dt>
  <dd> - Hyper Text Markup Language</dd>
  <dd> - Limbaj de cod pentru pagini web</dd>
</dl>
Care proprietate CSS poate sa ascunda un element in pagina, lasand spatiu gol in locul lui?
display position visibility
#id {
  visibility: hidden;
}
Indicati evenimentul declansat cand se apasa clic pe un obiect in pagina.
onclick onmouseover onfocus
document.getElementById("id").onclick = function(){
  alert("http://www.MarPlo.net/");
}
Indicati variabila PHP ce contine datele din $_GET, $_POST si $_COOKIE.
$_SESSION $_GET $_REQUEST
if(isset($_REQUEST["id"])) {
  echo $_REQUEST["id"];
}
Care din urmatoarele cuvinte reprezinta un Verb?
lighting believe path
I believe in my path.
- Eu cred in calea mea.
Care din urmatoarele cuvinte reprezinta un Verb?
creer camino iluminaciĆ³n
creer = a crede; camino = cale /drum; iluminaciĆ³n = iluminare
Documente XML si utilizare - Tutoriale PHP