4.20

Sezione 4: Sviluppatori

Q 4.20: Ho già i DTD SGML: come li converto per usarli con XML?

Modificalo a mano o usa un software come Near+Far Designer.

 

Ci sono molti progetti per convertire DTD SGML comuni o famosi in formato XLS (per esempio, entrambi i TEI DTD (versione Lite e versione completa) e il DocBook DTD sono disponibili sia in SGML che in XML, in formato Schema o DTD).

Seán McGrath scrive:

Per convertire DTD SGML in XML:

  1. Nessun equivalente della Dichiarazione SGML. Quindi parole chiave, gruppi di carattere ecc. sono essenzialmente fissi;
  2. La minimizzazione dei tag non è permessa, quindi <!ELEMENT x – O (A,B)>diventa<!ELEMENT X (A,B)> e <!ELEMENT x – O EMPTY> diventa <!ELEMENT X EMPTY>;
  3. #PCDATAdeve verificarsi all’estrema sinistra (ovvero prima) in un modello OR, ad es. <!ELEMENT x – – (A|B|#PCDATA|C)> (in SGML) diventa <!ELEMENT x (#PCDATA|A|B|C)*>, è <!ELEMENT x (A,#PCDATA)> è illegale;
  4. Nessun elemento CDATA, RCDATA [contenuto dichiarato];
  5. Alcuni tipi di attributo SGML non sono permessi in XML ad es. NUTOKEN;
  6. Alcuni default degli attributi SGML non sono permessi in XML ad es. CONREF e CURRENT;
  7. I commenti non possono essere all’interno della riga di dichiarazione in questo modo
<!ELEMENT x - - (A,B) -- an SGML comment in a declaration ->

 

8. Molte caratteristiche opzionali di SGML non sono presenti in XML: tutte le forme di minimizzazione del tag (OMITTAG, DATATAG, SHORTREF, ecc); Definizioni del Processo di Link; DTD multipli per documento; e molto altro: vedi http://www.w3.org/TR/NOTE-sgml-xml-971215per una lista di parti di SGML che sono state rimosse per XML;

9. E [quasi] ultimo ma non meno importante, niente CONCUR!

10. Ci sono alcune differenze importanti fra la porzione di subset interno ed esterno di un DTD in XML: Le Sezioni Marcate possono verificarsi solo in subset esterni; e le Entità di Parametro devono essere usate per sostituire intere dichiarazioni in porzioni di subset interno di DTD, ad es. questo è XML non valido:

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

 

Per maggiori informazioni, vedi (McGrath (1998)).

Leave a Comment

Your email address will not be published. Required fields are marked *