1:- module(xsd, [
    2    xsd_validate/2,
    3    xsd_validate/3
    4  ]).    5
    6:- use_module(library(xsd/validate)).    7:- use_module(library(xsd/flatten)).    8
    9:- dynamic xml_loaded/2.   10
   11xsd_validate(Xsd, Xml) :-
   12  xsd_validate(Xsd, Xml, []).
   13
   14xsd_validate(Xsd, Xml, Options) :-
   15  ensure_flattened(Xsd, Xsd_),
   16  ensure_flattened(Xml, Xml_),
   17  validate:validate(Xsd_, Xml_, Options).
   18
   19ensure_flattened(A, Id) :-
   20  xml_loaded(A, Id).
   21
   22ensure_flattened(A, Id) :-
   23  \+ xml_loaded(A, _),
   24  flatten:xml_flatten(A, Id),
   25  assert(xml_loaded(A, Id))