Po udzieleniu odpowiedzi na moje ostatnie pytanie How to inject elements into character content with Closure XML? Zaimplementowałem podklasę cxml: sax-proxy handler (szczególny przypadek programu do obsługi wiadomości). Niestety, wygląda na błąd w bibliotece, ale próbuje utworzyć kod XML z wewnętrznymi definicjami typów dokumentów, ale dokument ten jest niepoprawny.Niepoprawne wyjście obsługi wiadomości w pakiecie Common Lisp Closure XML
Oznacza to, że działa parser za pomocą polecenia:
(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)))
gdzie harem.xml pliku zaczyna się (patrz 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>...
polecenie produkuje w teste.xml plik wyjściowy:
<?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">
...
Oznacza to, że program obsługi pisze DTD wewnątrz wyjścia, ale w niewłaściwy sposób, WI w przypadku deklaracji wewnątrz [
i ]
. Czy jest to błąd w bibliotece lub w moim kodzie?