0

デフォルトの XML属性を正しく表す DTD を構築するようにパッケージhxtを誘導するのに問題があります。

私のpicklerに含まれる DTD は、デフォルト値が定義されている属性に明示的な値を誤って要求します。picklerは、検証されていない入力を解析するときにデフォルト値を正しく適用しますが、明示的な属性値を必要とする DTD に対して入力を検証するときに失敗します。

ghciを使用した例として、属性のピックラーを作成し、デフォルト値を定義してから、値がREQUIREDであることを指定する DTD を抽出します。デフォルト値 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)? >                                                                                                                                                              
]>                                       
4

1 に答える 1