Xml 由HXT酸洗机构建的DTD

Xml 由HXT酸洗机构建的DTD,xml,haskell,dtd,hxt,Xml,Haskell,Dtd,Hxt,我很难说服包hxt构造正确表示默认XML属性的DTD 我的pickler中包含的DTD错误地要求为其定义默认值的属性使用显式值。pickler在解析未验证的输入时正确应用默认值,但在根据DTD验证输入时失败,因为DTD需要显式的属性值 作为使用ghci的示例,我为属性创建了一个pickler&定义一个默认值,然后提取DTD,它指定一个值是必需的。 如果一个人定义了两次默认值,那么奇怪的是DTD定义的值是隐含的。 如果可以将该值定义为元素而不是属性,则DTD通过“?”对该值进行量化,表明该值是可选

我很难说服包hxt构造正确表示默认XML属性的DTD

我的pickler中包含的DTD错误地要求为其定义默认值的属性使用显式值。pickler在解析未验证的输入时正确应用默认值,但在根据DTD验证输入时失败,因为DTD需要显式的属性值

作为使用ghci的示例,我为属性创建了一个pickler&定义一个默认值,然后提取DTD,它指定一个值是必需的。 如果一个人定义了两次默认值,那么奇怪的是DTD定义的值是隐含的。 如果可以将该值定义为元素而不是属性,则DTD通过“”对该值进行量化,表明该值是可选的;更好,但我想要一个属性

Prelude>:m+Text.XML.HXT.Core
Prelude Text.XML.HXT.Core>\u>>xpickleWriteDTD(xpElem“root”.xpDefault 0$xpAttr“attr”xpInt)[“-”--可能有一种更简单的方法来实现这一点。
]>
序言Text.XML.HXT.Core>\u>>xpickleWriteDTD(xpElem“root”.xpDefault 0.xpAttr“attr”$xpDefault未定义xpInt)[]“-”
]>
序言Text.XML.HXT.Core>\u>>xpickleWriteDTD(xpElem“root”.xpDefault 0$xpElem“elem”xpInt)[]“-”
]>                                       

我收到了这个软件包作者的回复,澄清了这个问题

我怀疑,在当前版本的HXT中,不可能描述pickler模块中属性的默认值。从pickler中导出DTD的特性有些实验性,我们还没有实现DTD中可用的每个角落情况。在模式信息(DTD或其他模式)的pickler中使用的数据类型中,没有包含默认属性值的字段


我删除了GHCi的
加载程序包…
垃圾邮件,因为它会把帖子弄得乱七八糟,而且程序包的版本号可能没有那么重要。如果结果是,则它们仍在修订历史记录中可用,并且可以在中重新编辑。
Prelude> :m + Text.XML.HXT.Core
Prelude Text.XML.HXT.Core> _ <- runX $ constA undefined >>> xpickleWriteDTD (xpElem "root" . xpDefault 0 $ xpAttr "attr" xpInt) [] "-" --There's probably an easier way of achieving this.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root EMPTY >
<!ATTLIST root attr CDATA #REQUIRED >
]>
Prelude Text.XML.HXT.Core> _ <- runX $ constA undefined >>> xpickleWriteDTD (xpElem "root" . xpDefault 0 . xpAttr "attr" $ xpDefault undefined xpInt) [] "-"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root EMPTY >
<!ATTLIST root attr CDATA #IMPLIED >
]>
Prelude Text.XML.HXT.Core> _ <- runX $ constA undefined >>> xpickleWriteDTD (xpElem "root" . xpDefault 0 $ xpElem "elem" xpInt) [] "-"
<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                
<!DOCTYPE root [                                                                                                                                                                      
<!ELEMENT elem (#PCDATA) >                                                                                                                                                            
<!ELEMENT root (elem)? >                                                                                                                                                              
]>