In seguito alle risposte fornite per la mia ultima domanda How to inject elements into character content with Closure XML? ho implementato una sottoclasse di cxml: gestore di proxy sax (caso particolare di un gestore di trasmissione). Sfortunatamente, sembra un errore nella libreria, ma tenta di produrre l'XML con definizioni di tipo di documento interno, ma il documento è un XML non valido.output non valido del gestore di trasmissione nel pacchetto XML Common Lisp Closure
Cioè, in esecuzione il parser con il comando:
(with-open-file (out #P"teste.xml" :if-exists :supersede :direction :output)
(let ((h (make-instance 'preproc :chained-handler (cxml:make-character-stream-sink out))))
(cxml:parse #P"harem.xml" h :validate t)))
in cui il file harem.xml inizia con (vedi il doctype):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE colHAREM SYSTEM "harem.dtd">
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010">
<DOC DOCID="H2-dftre765">
<p>...
il comando produce nel teste.xml file di output:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE colHAREM SYSTEM "harem.dtd"<!ELEMENT EM #PCDATA>
<!ATTLIST EM ID CDATA #REQUIRED>
<!ATTLIST EM CATEG CDATA #IMPLIED>
<!ATTLIST EM TIPO CDATA #IMPLIED>
<!ATTLIST EM COMENT CDATA #IMPLIED>
<!ATTLIST EM SUBTIPO CDATA #IMPLIED>
<!ELEMENT ALT (#PCDATA|EM)*>
<!ELEMENT OMITIDO (#PCDATA|EM|ALT|p)*>
<!ELEMENT colHAREM (DOC)*>
<!ATTLIST colHAREM versao CDATA #REQUIRED>
<!ELEMENT p (#PCDATA|EM|OMITIDO|ALT)*>
<!ATTLIST p xml:space (default|preserve) "default">
<!ELEMENT DOC (#PCDATA|p|OMITIDO)*>
<!ATTLIST DOC DOCID CDATA #REQUIRED>
>
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010">
...
Cioè, il gestore scrive il DTD all'interno dell'output ma nel modo sbagliato, wi tutte le dichiarazioni all'interno di [
e ]
. È un bug nella libreria o nel mio codice?