sig
  type dtd_child =
      DTDTag of string
    | DTDPCData
    | DTDOptional of Dtd.dtd_child
    | DTDZeroOrMore of Dtd.dtd_child
    | DTDOneOrMore of Dtd.dtd_child
    | DTDChoice of Dtd.dtd_child list
    | DTDChildren of Dtd.dtd_child list
  type dtd_element_type = DTDEmpty | DTDAny | DTDChild of Dtd.dtd_child
  type dtd_attr_default =
      DTDDefault of string
    | DTDRequired
    | DTDImplied
    | DTDFixed of string
  type dtd_attr_type = DTDCData | DTDNMToken | DTDEnum of string list
  type dtd_item =
      DTDAttribute of string * string * Dtd.dtd_attr_type *
        Dtd.dtd_attr_default
    | DTDElement of string * Dtd.dtd_element_type
  type dtd = Dtd.dtd_item list
  type checked
  val parse_file : string -> Dtd.dtd
  val parse_in : Pervasives.in_channel -> Dtd.dtd
  val parse_string : string -> Dtd.dtd
  val check : Dtd.dtd -> Dtd.checked
  val prove : Dtd.checked -> string -> Xml.xml -> Xml.xml
  val to_string : Dtd.dtd_item -> string
  type parse_error_msg =
      InvalidDTDDecl
    | InvalidDTDElement
    | InvalidDTDAttribute
    | InvalidDTDTag
    | DTDItemExpected
  type check_error =
      ElementDefinedTwice of string
    | AttributeDefinedTwice of string * string
    | ElementEmptyContructor of string
    | ElementReferenced of string * string
    | ElementNotDeclared of string
  type prove_error =
      UnexpectedPCData
    | UnexpectedTag of string
    | UnexpectedAttribute of string
    | InvalidAttributeValue of string
    | RequiredAttribute of string
    | ChildExpected of string
    | EmptyExpected
  type parse_error = Dtd.parse_error_msg * Xml.error_pos
  exception Parse_error of Dtd.parse_error
  exception Check_error of Dtd.check_error
  exception Prove_error of Dtd.prove_error
  val parse_error : Dtd.parse_error -> string
  val check_error : Dtd.check_error -> string
  val prove_error : Dtd.prove_error -> string
  val _raises : (string -> exn) -> unit
end