Perché questo non è un DTD XML valido?(Entità del parametro e #PCDATA)
-
25-09-2019 - |
Domanda
Utilizzando il validatore DTD Qui, sono informato che il seguente DTD non è valido.
<!ENTITY % text "(#PCDATA|L)*">
<!ELEMENT H (%text;)+>
<!ELEMENT L (#PCDATA)>
Il messaggio di errore è:"Un carattere '(' o un tipo di elemento è richiesto nella dichiarazione del tipo di elemento "H"." alla riga 2, colonna 22.
Qualcuno può gentilmente indicare il motivo per cui non è valido?E come posso renderlo valido?Il messaggio di errore non è esattamente molto amichevole per me.Grazie.
Soluzione
Non è possibile imporre che un elemento con contenuto misto debba avere almeno un nodo figlio.Il tuo DTD diventa
<!ELEMENT H ((#PCDATA|L)*)+>
quando l'entità viene espansa.L'unica forma consentita per gli elementi con contenuto misto è
(#PCDATA | A | B | C)*
dove A, B e C sono possibili elementi figli. #PCDATA
dovere essere la prima scelta e al set deve essere consentito di ripetere 0-infinite volte, ovverol'asterisco è obbligatorio.