Seção 4: Desenvolvedores

Q 4.19: Eu já tenho SGML DTDs: como convertê-los para uso com XML?

Edite manualmente ou use softwares como Near+Far Designer.

Existem inúmeros projetos para converter DTD SGML comuns ou populares em formato XML (por exemplo, o TEI DTD (Lite e versões completas) e o DocBook DTD estão disponíveis em SGML e XML, nos formatos Schema e DTD).

Seán McGrath escreve:

Para converter DTDs SGML em XML:

  1. Não é equivalente à Declaração SGML. Então, as palavras-chave, o conjunto de caracteres etc. são essencialmente corrigidos;

  2. A minimização de tag não é permitida, então <!ELEMENT x - O (A,B)> se torna <!ELEMENT X (A,B)> e <!ELEMENT x - O EMPTY> se torna <!ELEMENT X EMPTY> ;

  3. #PCDATA só deve ocorrer na extrema esquerda (ou seja, primeiro) em um modelo OR, por exemplo, <!ELEMENT x - - (A|B|#PCDATA|C)> (no SGML) se torna <!ELEMENT x (#PCDATA|A|B|C)*> , e <!ELEMENT x (A,#PCDATA)> é ilegal;

  4. Nenhum elemento CDATA ou RCDATA [conteúdo declarado];

  5. Alguns tipos de atributo SGML não são permitidos em XML, por exemplo, NUTOKEN;

  6. Alguns padrões de atributo SGML não são permitidos em XML, por exemplo, CONREF e CURRENT;

  7. Os comentários não podem ser inline para declarações como

        <!ELEMENT x - - (A,B) -- an SGML comment in a declaration -->
          
  8. Um conjunto inteiro de funções opcionais do SGML não estão presentes em XML: todas as formas de minimização de tag (OMITTAG, DATATAG, SHORTREF, etc.); Definições do processo de ligação; Múltiplos DTDs por documento; E muitos mais: veja http://www.w3.org/TR/NOTE-sgml-xml-971215 para a lista de bits de SGML que foram removidos para XML;

  9. E [quase] por último, mas não menos importante, sem CONCUR!

  10. Existem algumas diferenças importantes entre a parte do subconjunto interno e externo de uma DTD em XML: as Seções Marcadas só podem ocorrer no subconjunto externo; E as entidades de parâmetros devem ser usadas para substituir declarações inteiras na parte do subconjunto interno de uma DTD, por exemplo, o seguinte é XML inválido:

    
    <!DOCTYPE x [ 
    <!ENTITY % modelx "(A|B)*"> 
    <!ELEMENT x %modelx;> 
    ]> 
    <x></x>
        

Para mais informações, veja McGrath (1998 ).