  |
Descritto mediante espressioni regolari |
Il contenuto di un tag viene descritto grazie ad un
elenco di tag e l'uso di una notazione speciale, simile a
quella delle espressioni regolari. Le espressioni
regolari, per chi non lo sapesse, sono delle speciali
espressioni, usate comunemente in molti programmi in
ambiente Unix e Linux, che servono a indicare insiemi di
stringhe. Per esempio, una espressione regolare può essere
utilizzata da un editore di testi per cercare tutte le
occorrenze della parola questo al plurale o al
singolare e indipendentemente dal fatto che abbia l'iniziale
mauiuscola o minuscola. Cioè si puoò usare una sola
espressione regolare, come (Q|q)est(o|i), per
cercare una tra le parole questo, Questo, questi e
Questi. Il significato della espressione regolare
dell'esempio significa di considerare una lettera q
maiuscola o minuscola, seguito da est, ed infine da
una lettera i oppure o.
La definizione del contenuto di un elemento è definita
in modo molto simile ad una espressione regolare. La sola
differenza di rilievo è che in una espressione regolare
gli elementi di una espressione regolare sono i caratteri di
una stringa, mentre in un !ELEMENT gli elementi del
contenuto sono tag. Un tag comprende anche i suoi sotto
elementi. Possiamo vedere un esempio, che descrive il
contenuto di un tag DOC:
<!ELEMENT DOC
(#PCDATA,TITLE?,#CDATA,PARA,(NOTE|CODE)*)>
  |
#CDATA: testo analizzato dal parser |
  |
#PCDATA: testo non analizzato dal parser |
  |
TITLE: tag |
Come si vede, la sintassi ricorda quella vista per le
espressioni regolari. Esaminiamo adesso per cominciare il
significato delle parole. Le parole che iniziano per
# possono essere solamente #CDATA e
#PCDATA. Nel primo caso (Character Data)
significa che il tag contiene testo che deve essere
considerato letteralmente, ovvero che non contiene
tag. Invece #PCDATA (Parsed Character Data)
indica che il tag può contenere tag. Sulla differenza tra
CDATA e PCDATA ci siamo già soffermati prima.
Tutti le altre parole che non comiciano per #,
eccettuate ANY ed EMPTY, il cui
significato lo abbiamo già visto, indicano i tag dello
stesso nome.
  |
(NOTE|#CDATA): espressione, che indica una
sequenza di tag e testo alternati |
Nella espressione di contenuto è possibile porre in
alternativa vari tipi di tag o altri elementi,
raggruppandoli tra parentesi e ponendoli in alternativa con
l'uso di |. Come si nota nell'esempio, con
(NOTE|#CDATA) si vuole indicare che (parte del)
contenuto del tag DOC può essere un tag NOTE
oppure un blocco di caratteri non contenenti altri tag.
|