module Text.XML.HXT.DTDValidation.Validation
( getDTDSubset
, generalEntitiesDefined
, validate
, validateDTD
, validateDoc
, removeDoublicateDefs
, transform
)
where
import Text.XML.HXT.DTDValidation.TypeDefs
import qualified Text.XML.HXT.DTDValidation.DocTransformation as DocTransformation
import qualified Text.XML.HXT.DTDValidation.DocValidation as DocValidation
import qualified Text.XML.HXT.DTDValidation.DTDValidation as DTDValidation
import qualified Text.XML.HXT.DTDValidation.IdValidation as IdValidation
validate :: XmlArrow
validate :: XmlArrow
validate = XmlArrow
validateDTD forall (a :: * -> * -> *) b c.
ArrowPlus a =>
a b c -> a b c -> a b c
<+> XmlArrow
validateDoc
validateDTD :: XmlArrow
validateDTD :: XmlArrow
validateDTD = forall (a :: * -> * -> *) b c d.
ArrowIf a =>
[IfThen (a b c) (a b d)] -> a b d
choiceA
[ XmlArrow
getDTDSubset forall a b. a -> b -> IfThen a b
:-> XmlArrow
DTDValidation.validateDTD
, forall (a :: * -> * -> *) b. ArrowList a => a b b
this forall a b. a -> b -> IfThen a b
:-> forall (a :: * -> * -> *) n. ArrowXml a => String -> a n XmlTree
err String
"Can't validate DTD: There is no DOCTYPE declaration in the document."
]
validateDoc :: XmlArrow
validateDoc :: XmlArrow
validateDoc
= [XmlTree] -> XmlArrow
validateDoc' forall (a :: * -> * -> *) c b d.
ArrowList a =>
(c -> a b d) -> a b c -> a b d
$< XmlArrowS
getDTD
where
validateDoc' :: [XmlTree] -> XmlArrow
validateDoc' [] = forall (a :: * -> * -> *) n. ArrowXml a => String -> a n XmlTree
err String
"Can't validate document: There is no DOCTYPE declaration in the document."
validateDoc' (XmlTree
dtdPart:[XmlTree]
_) = XmlTree -> XmlArrow
DocValidation.validateDoc XmlTree
dtdPart
forall (a :: * -> * -> *) b c.
ArrowPlus a =>
a b c -> a b c -> a b c
<+>
XmlTree -> XmlArrow
IdValidation.validateIds XmlTree
dtdPart
getDTD :: XmlArrowS
getDTD :: XmlArrowS
getDTD = forall (a :: * -> * -> *) b c. ArrowList a => a b c -> a b [c]
listA ( XmlArrow
getDTDSubset
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>>
XmlArrow
removeDoublicateDefs
)
transform :: XmlArrow
transform :: XmlArrow
transform = forall (a :: * -> * -> *) b c d.
ArrowIf a =>
[IfThen (a b c) (a b d)] -> a b d
choiceA
[ forall (a :: * -> * -> *). ArrowXml a => a XmlTree XmlTree
isRoot forall a b. a -> b -> IfThen a b
:-> ([XmlTree] -> XmlArrow
transformDoc forall (a :: * -> * -> *) c b d.
ArrowList a =>
(c -> a b d) -> a b c -> a b d
$< XmlArrowS
getDTD)
, forall (a :: * -> * -> *) b. ArrowList a => a b b
this forall a b. a -> b -> IfThen a b
:-> forall (a :: * -> * -> *) n. ArrowXml a => String -> a n XmlTree
fatal String
"Can't transform document: No document root given"
]
where
transformDoc :: [XmlTree] -> XmlArrow
transformDoc [] = forall (a :: * -> * -> *) b. ArrowList a => a b b
this
transformDoc [XmlTree]
dtd = XmlTree -> XmlArrow
DocTransformation.transform (forall a. [a] -> a
head [XmlTree]
dtd)
removeDoublicateDefs :: XmlArrow
removeDoublicateDefs :: XmlArrow
removeDoublicateDefs = XmlArrow
DTDValidation.removeDoublicateDefs
getDTDSubset :: XmlArrow
getDTDSubset :: XmlArrow
getDTDSubset = forall (a :: * -> * -> *) (t :: * -> *) b.
(ArrowTree a, Tree t) =>
a (t b) (t b)
getChildren
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>>
( forall (a :: * -> * -> *) b c. ArrowIf a => a b c -> a b b
filterA forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *). ArrowDTD a => a XmlTree XmlTree
isDTDDoctype forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (a :: * -> * -> *). ArrowXml a => a XmlTree Attributes
getDTDAttrl forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (a :: * -> * -> *) b. ArrowList a => (b -> Bool) -> a b b
isA (forall k v. Eq k => k -> AssocList k v -> Bool
hasEntry String
a_name) )
generalEntitiesDefined :: XmlArrow
generalEntitiesDefined :: XmlArrow
generalEntitiesDefined = XmlArrow
getDTDSubset
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>>
forall (a :: * -> * -> *) (t :: * -> *) b c.
(ArrowTree a, Tree t) =>
a (t b) c -> a (t b) c
deep forall (a :: * -> * -> *). ArrowDTD a => a XmlTree XmlTree
isDTDEntity