next up previous
Next: Uso del linguaggio definito Up: Ricetta3.xml: commento Previous: Ricetta3.xml: commento

Definizione di un linguaggio

Questo documento è un commento ai file ``ricetta3.xml". Il prologo del file ``ricetta3.xml":

<?xml version="1.0" standalone="yes"?>
ci dice che questo documento è del tipo ``standalone", ovvero utilizza una DTD interna. La DTD è definita all'interno di DOCTYPE, nel seguente nodo:

<!DOCTYPE ricettario [
   <!NOTATION video SYSTEM "myvideoplayer.exe">
   <!NOTATION img SYSTEM "netscape.exe">

   <!ENTITY pri "PrimaVera!!">
   <!ENTITY ric_pasta SYSTEM "pasta.mpeg" NDATA video>

   <!ELEMENT ricettario (ricetta*)>
   <!ELEMENT ricetta (titolo,lista_ingredienti,preparazione)>
   <!ELEMENT titolo (#PCDATA)>
   <!ELEMENT lista_ingredienti (ingrediente+)>
   <!ELEMENT preparazione (passo+)>
   <!ELEMENT ingrediente (#PCDATA)>
   <!ATTLIST ingrediente 
         numero CDATA #REQUIRED
         misura (g | hg | cucchiaio | cucchiai) #IMPLIED>
   <!ELEMENT passo (#PCDATA)>
   <!ATTLIST passo
         genere NOTATION (video | img) #IMPLIED
         sorgente ENTITY #IMPLIED>
]>
Cominciamo con il commentare le entità definite. L'elemento radice è ``ricettario"; è definito dalla regola ``(ricetta*)", dove l'operatore asterisco indica ricorrenza. In altri termini un ``ricettario" è inteso essere una sequenza (eventualmente vuota) di un certo numero (imprecisato) di elementi di tipo ``ricetta". L'emento ``ricetta" è una sequenza di tre componenti (il cui ordine deve essre rispettato quando si utilizzerà tale elemento): ``titolo", ``lista_ingredienti", ``preparazione". A parte il titolo, definito dalla regola elementare ``($\sharp$PCDATA)", le altre due componenti sono liste non vuote (simbolo più anziché asterisco) rispettivamente di elementi di tipo ``ingrediente" e ``passo", entrambi definiti come ``($\sharp$PCDATA)".

Sia ``ingrediente" che ``passo" hanno degli attributi. Ingrediente ha un attributo necessario ($\sharp$REQUIRED) ``numero", che indica la quantità di ingrediente da utilizzare, e l'opzionale ``misura", che specifica l'unità di misura della quantità in questione. Le unità di misura consentite sono solo quelle elencate in alternativa nella definizione dell'attributo (``g", ``hg", ``cucchiaio" e ``cucchiai").

L'elemento ``passo" ha due attributi opzionali: ``genere" e ``video". Il primo è di tipo NOTATION, questo significa che può assumere come valori solo nomi di oggetti NOTATION definiti nella DTD medesima. Sui valori di ``genere" è posto un ulteriore vincolo: può assumere come valori solo ``video" oppure ``img". Come si può osservare la prima parte della DTD contiene la definizione di due notation, proprio le due menzionate:

<!NOTATION video SYSTEM "myvideoplayer.exe">
<!NOTATION img SYSTEM "netscape.exe">
La prima notation definisce un tipo ``video" ed associa ad esso un programma, ``myvideoplayer.exe". Il tipo definito può essere utilizzato nella definizione di entità esterne non analizzate, in altri termini file contenenti documenti non-XML (musica, video, immagini, ...) che vogliamo importare all'interno del documento XML (che di per sè è solo testuale). Identificare il tipo di un oggetto ci consente di indicare all'interprete del codice XML un applicativo in grado di gestire quel tipo di documento (nell'esempio ``myvideoplayer.exe"). La definizione della notation ``img" è concettualmente analoga alla precedente. Tornando all'elemento ``passo", questo ha associato un secondo attributo, di tipo ENTITY: ``sorgente". Gli attributi di tipo ENTITY possono assumere come valori i nomi di entità definite nella DTD medesima. La nostra DTD definisce due entità:
<!ENTITY pri "PrimaVera!!">
<!ENTITY ric_pasta SYSTEM "pasta.mpeg" NDATA video>
La prima è un'entità generale: un nome (``pri") attribuito a una sequenza di caratteri (``PrimaVera!!"). La seconda è un'entità esterna (SYSTEM) non analizzata (NDATA): viene specificato il nome del file contenente l'oggetto non XML che intendiamo importare (``pasta.mpeg") e il tipo di tale oggetto (``video": si noti che è una delle NOTATION definite prima).


next up previous
Next: Uso del linguaggio definito Up: Ricetta3.xml: commento Previous: Ricetta3.xml: commento
Baroglio Cristina 2003-01-15