Entitatile reprezinta unitati de stocare pentru datele parsate sau neparsate care alcatuiesc un document XML. Entitatile pot fi clasificate in entitati generale si entitati parametru. In timp ce entitatile generale sunt utilizate pentru a construi componente ale unui document XML, entitatile parametru sunt utilizate pentru a construi declaratii in DTD.
Entitatile generale pot fi la randul lor clasificate in entitati generale interne si entitati generale externe. Cele interne isi pastreaza valoare in declaratia de entitate, iar cele externe fac referire la un document extern. Entitatile generale (interne sau externe) sunt declarate prin intermediul urmatoarelor sintaxe:
<!ENTITY nume_entitate valoare_entitate>
<!ENTITY nume_entitate SYSTEM identificator_sistem> <!ENTITY nume_entitate SYSTEM identificator_sistem NDATA nume_notatie>
Semnificatia termenilor de la nivelul sintaxelor precedente este urmatoarea:
• identificator_sistem indica URI-ul (Uniform Resource Identifier) fisierului entitate; cea mai uzuala forma de URI este reprezentata de o adresa URL (Uniform Resource Locator);
• NDATA indica faptul ca fisierul entitate contine date neparsabile; acest cuvant cheie este mostenit din SGML (notation data);
• nume_notatie indica numele unei notatii, declarate in DTD, care specifica formatul datelor continute in fisierul entitate.
Daca o entitate generala este definita in acelasi document in care apare referinta la entitate, entitatea este de tip intern.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |
<!DOCTYPE curs [ | |
<!ELEMENT curs (#PCDATA)> | |
<!ENTITY bdi "Modele de date avansate"> | |
]> | |
<curs>&bdi;</curs> |
Daca o entitate generala este definita intr-un document separat de cel in care apare referinta la entitate, entitatea este de tip extern.
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE curs [ | |
<!ELEMENT curs (disciplina, facultate, tutor)> | |
<!ELEMENT disciplina (#PCDATA)> | |
<!ELEMENT facultate (#PCDATA)> | |
<!ENTITY facultate SYSTEM "facultate.xml"> | |
<!ELEMENT tutor (nume, imagine)> | |
<!ELEMENT nume (#PCDATA)> | |
<!ELEMENT imagine EMPTY> | |
<!ATTLIST imagine sursa ENTITY #REQUIRED> | |
<!ENTITY img SYSTEM "https://virtualcampus.ro/img/author/MarianBucos.jpg" NDATA jpg> | |
<!NOTATION jpg SYSTEM "image/jpeg"> | |
]> | |
<curs> | |
<disciplina>Modele de date avansate</disciplina> | |
&facultate; | |
<tutor> | |
<nume>Virgil Popescu</nume> | |
<imagine sursa="img" /> | |
</tutor> | |
</curs> |
Entitatile parametru sunt utilizate pentru a ajuta la scrierea declaratiilor dintr-un DTD. De exemplu, daca o parte a unui DTD se repeta de mai multe ori, ea poate fi inlocuita cu o entitate parametrica. Dupa declarare, entitatea parametrica poate fi referita in interiorul DTD.
Entitatile parametru sunt intotdeauna parsate; doar entitatile generale pot fi neparsate. Pentru declararea entitatilor parametru (interne sau externe) pot fi utilizate urmatoarele sintaxe:
<!ENTITY % nume_entitate valoare_entitate> <!ENTITY % nume_entitate SYSTEM identificator_sistem>
In declaratia unei entitati parametru, se introduce simbolul % intre cuvantul cheie ENTITY si numele entitatii. Dupa declarare, o entitate parametrica poate fi referita astfel: %nume_entitate;. Referinta la o entitate parametrica poate aparea doar in interiorul unui DTD, nu si in continutul unui document XML.
<!-- curs.dtd --> | |
<!ENTITY % tip "(#PCDATA)"> | |
<!ELEMENT disciplina %tip;> | |
<!ELEMENT facultate %tip;> | |
<!ELEMENT tutor (nume, email)> | |
<!ELEMENT nume %tip;> | |
<!ELEMENT email %tip;> |
Entitatile parametru externe sunt utilizate pentru a grupa declaratii in fisiere diferite, care pot fi combinate in functie de necesitati. Prin intermediul entitatilor parametru externe pot fi incluse mai multe astfel de fisiere ce contin declaratii.
<!-- carte.dtd --> | |
<!ELEMENT carte (titlu_carte, autor, pagini)> | |
<!ELEMENT titlu_carte (#PCDATA)> | |
<!ELEMENT autor (#PCDATA)> | |
<!ELEMENT pagini (#PCDATA)> |