Un document XML valid trebuie sa declare explicit orice element utilizat, prin intermediul unei declaratii de element. Declaratia unui element poate indica numele elementului, lista elementelor incluse, ordinea elementelor incluse si continutul permis. Orice declaratie de acest fel defineste doar un singur element.
Declaratia unui element are urmatoarea sintaxa generala:
<!ELEMENT nume_element model_continut>
Intr-o declaratie a unui element, informatiile precizate dupa numele elementului reprezinta modelul de continut (specificatiile continutului). Modelul de continut poate include o serie de operatori care precizeaza ordinea si frecventa de aparitie a elementelor.
Operator | Semnificatie | Exemplu |
---|---|---|
? | element optional {0, 1} | elem? |
+ | element care apare cel putin odata {1, n} | elem+ |
* | element care poate sa nu apara sau sa apara de mai multe ori {0,n} | elem* |
, | secventa de elemente, in ordinea aparitiei | (elem1, elem2, elem3) |
| | set de elemente, din care doar unul poate sa apara | (elem1 | elem2) |
() | delimiteaza un grup de elemente | (elem1, elem2) |
Daca un element contine doar date, atunci modelul de continut din declaratia elementului va specifica si tipul datelor continute, astfel:
• ANY: include orice tip de continut (date caracter, elemente, chiar si elemente nedeclarate);
• #CDATA: include date caracter neparsate;
• #PCDATA: include date caracter parsate.
<!ELEMENT nume_element ANY> | |
<!ELEMENT nume_element (#CDATA)> | |
<!ELEMENT nume_element (#PCDATA) |
Pentru declaratia unui element vid (element fara continut) se utilizeaza cuvantul cheie EMPTY in modelul de continut.
<!ELEMENT nume_element EMPTY>
Daca un element contine elemente copil, acestea trebuie enumerate in modelul de continut in ordinea aparitiei lor in document. De asemenea, fiecare element copil trebuie introdus prin intermediul unei declaratii de element.
<!ELEMENT element_parinte (element_copil1, element_copil2, ...)> | |
<!ELEMENT element_copil1 model_continut1> | |
<!ELEMENT element_copil2 model_continut2> |
Unele elemente pot avea continut mixt (date caracter si elemente copil); in acest caz, declaratia unui element va avea urmatoarea sintaxa:
<!ELEMENT element_parinte (#PCDATA | element_copil1 | element_copil2)*> |
Operatorii pentru modelul de continut nu pot fi utilizati intre paranteze, intr-o declaratie a unui element care are continut mixt. Pentru un element cu continut mixt nu pot fi stabilite frecventa si ordinea de aparitie a elementelor copil.
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE email [ | |
<!ELEMENT email (to, from, subject, body)> | |
<!ELEMENT to (#PCDATA)> | |
<!ELEMENT from (#PCDATA)> | |
<!ELEMENT subject (#PCDATA)> | |
<!ELEMENT body (#PCDATA | signature)*> | |
<!ELEMENT signature (#PCDATA)> | |
<!ATTLIST email id1 CDATA #REQUIRED> | |
]> | |
<email id1="368"> | |
<to>webmaster@virtualcampus.ro</to> | |
<from>virgil.popescu@virtualcampus.ro</from> | |
<subject>Test</subject> | |
<body> | |
Test my email account. | |
<signature>Virgil Popescu</signature> | |
</body> | |
</email> |
Operatorii definiti pentru modelul de continut pot fi utilizati numai in declaratii de elemente care includ alte elemente. In urmatoarea secventa de declaratii pentru elemente pot fi observate cateva exemple de utilizare a operatorilor.
<!-- Elementul tutorial contine doua elemente copil: nume, url, in aceasta ordine --> | |
<!ELEMENT tutorial (nume, url)> | |
<!-- Elementul tutoriale nu contine elementul tutorial sau contine mai multe instante ale acestui element copil --> | |
<!ELEMENT tutoriale (tutorial*)> | |
<!-- Elementul tutoriale contine una sau mai multe instante ale elementului copil tutorial --> | |
<!ELEMENT tutoriale (tutorial+)> | |
<!-- Elementul tutoriale poate contine o instanta a elementului copil tutorial --> | |
<!ELEMENT tutoriale (tutorial?)> | |
<!-- Elementul tutorial contine unul din urmatoarele elemente: nume, titlu sau subiect --> | |
<!ELEMENT tutorial (nume | titlu | subiect)> | |
<!-- Elementul tutorial poate contine orice combinatie de date caracter parsate si instante ale elementelor nume, titlu, subiect --> | |
<!ELEMENT tutorial (#PCDATA | nume | titlu | subiect)*> | |
<!-- Elementul tutorial contine cel putin o instanta a elementului nume si poate contine o instanta a elementului url --> | |
<!ELEMENT tutorial (nume+, url?)> | |
<!-- Elementul tutorial contine unul sau mai multe grupuri formate cu elementele autor si rating, in care elementul rating este optional --> | |
<!-- Mai contine un element nume si poate contine mai multe elemente url --> | |
<!ELEMENT tutorial ((autor, rating?)+, nume, url*)> |