let validate_xml (path_to_dtd : string) (path_to_xml : string) : string = let print_tokens = false in try let dtd:Dtd.dtd=Dtd.parse_file path_to_dtd in let checked_dtd:Dtd.checked=Dtd.check dtd in let xml:Xml.xml= match path_to_xml with |"-" -> Xml_right.parse_stdin print_tokens |path -> Xml_right.parse_file print_tokens path in match xml with |Xml.Element (entry_point, _, _) -> let _=Dtd.prove checked_dtd entry_point xml in String.concat " " [path_to_xml;"is an instance of";path_to_dtd;"with entry-point";entry_point] | _ -> raise (Error (path_to_xml ^ " has no entry_point")) with |Xml_light_errors.Dtd_parse_error e -> raise (Error (String.concat " " [path_to_dtd;"->";"Xml_light_errors.Dtd_parse_error:";Dtd.parse_error e])) |Xml_light_errors.Dtd_check_error e -> raise (Error (String.concat " " [path_to_dtd;"->";"Xml_light_errors.Dtd_check_error:";Dtd.check_error e])) |Xml_light_errors.Dtd_prove_error e -> raise (Error (String.concat " " [path_to_dtd;path_to_xml;"->";"Xml_light_errors.Dtd_prove_error:";Dtd.prove_error e])) |Xml_light_errors.Xml_error e -> raise (Error (String.concat " " [path_to_xml;"->";"Xml_light_errors.Xml_error:";Xml.error e])) |Xml_light_errors.File_not_found e -> raise (Error (String.concat " " ["Xml_light_errors.File_not_found:";e])) |Xml_right.Error e -> raise (Error (String.concat " " [path_to_xml;"->";"Xml_right.Error:";e]))