Por que isso não é um XML DTD válido? (Entidade do parâmetro e #pcdata)
-
25-09-2019 - |
Pergunta
Usando o validador DTD aqui, Sou informado de que o seguinte DTD é inválido.
<!ENTITY % text "(#PCDATA|L)*">
<!ELEMENT H (%text;)+>
<!ELEMENT L (#PCDATA)>
A mensagem de erro é: "A '(' (', um tipo de elemento é necessário dentro da declaração do tipo de elemento" H "." Na linha 2, coluna 22.
Alguém pode apontar por que é inválido? E como posso torná -lo válido? A mensagem de erro não é exatamente muito amigável para mim. Obrigado.
Solução
Você não pode aplicar que um elemento com conteúdo misto deve ter pelo menos um nó filho. Seu DTD se torna
<!ELEMENT H ((#PCDATA|L)*)+>
Quando a entidade é expandida. O único formulário permitido para elementos com conteúdo misto é
(#PCDATA | A | B | C)*
onde A, B e C são possíveis elementos filhos. #PCDATA
devo Seja a primeira opção e o conjunto deve repetir os tempos de 0-infinidade, ou seja, o asterisco é necessário.