由HXT picklers构造的DTD

时间:2013-05-30 17:50:51

标签: xml haskell dtd hxt

我无法将包 hxt 哄骗到构建一个正确表示默认XML- 属性的DTD。

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

作为使用 ghci 的示例,我为属性创建 pickler &定义默认值,然后提取DTD,指定值 REQUIRED 。 如果定义默认值TWICE,那么奇怪的是DTD定义该值为 IMPLIED 。 如果有人将值定义为元素而不是属性,则DTD将值量化为“”,表明它是可选的;更好,但我想要一个属性

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)? >                                                                                                                                                              
]>                                       

1 个答案:

答案 0 :(得分:1)

我收到了该软件包的作者的回复,该回复阐明了该问题;

  

我怀疑,使用当前版本的 HXT ,无法在 pickler 模块中描述属性的默认值。从 picklers 中导出DTD的功能在某种程度上是实验性的,我们还没有实现DTD中可用的每个角落情况。在 picklers 中用于架构信息(DTD或其他架构)的数据类型中,没有包含默认属性值的字段。