公共Lisp闭包XML包中广播处理程序的输出无效

公共Lisp闭包XML包中广播处理程序的输出无效,xml,lisp,common-lisp,sax,Xml,Lisp,Common Lisp,Sax,根据上一个问题的答案,我实现了cxml的一个子类:sax代理处理程序(广播处理程序的一种特殊情况)。不幸的是,看起来像是库中的一个bug,但它试图生成具有内部文档类型定义的XML,但文档是无效的XML 也就是说,使用以下命令运行解析器: (打开文件(out#P“teste.xml”:如果存在:取代:方向:输出) (let((h(使实例的预处理程序:链式处理程序(cxml:make character stream sink out))) (cxml:parse#P“harem.xml”h:val

根据上一个问题的答案,我实现了cxml的一个子类:sax代理处理程序(广播处理程序的一种特殊情况)。不幸的是,看起来像是库中的一个bug,但它试图生成具有内部文档类型定义的XML,但文档是无效的XML

也就是说,使用以下命令运行解析器:

(打开文件(out#P“teste.xml”:如果存在:取代:方向:输出)
(let((h(使实例的预处理程序:链式处理程序(cxml:make character stream sink out)))
(cxml:parse#P“harem.xml”h:validate t)
文件harem.xml以开头的位置(请参见doctype):


。。。
该命令在teste.xml输出文件中生成:

<?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">
...

>
...

也就是说,处理程序在输出中写入DTD,但方式错误,在
[
]
中没有声明。它是库中的bug还是我的代码中的bug?

我通过CXML为您的示例和示例所采取的步骤进行了跟踪 (第一个文件,针对最后一个CXML提交, 991fac513dbd9b86628f99741a66d791552b1f02,适用于
git在签出的CXML的根目录中应用0001-..补丁
存储库)。在我看来,这里的代码路径似乎并不正确 触发DTD子集的SAX事件,因此在添加 输出中添加了必要的
“[”
/
“]”

你能确认这对你有效吗?我也不确定
SAX:START-INTERNAL-SUBSET
实际上是正确的,但它似乎做到了这一点 在这里工作

<?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">
...