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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top