in reply to Re^5: Validating an XML file with multiple schemas
in thread Validating an XML file with multiple schemas

I think I suspected some limitation around libxml2 myself. It was hard to tell without enough experience with it. As for the schema examples, they were crafted to demonstrate the condition. So I could have defined the namespace either way - shared/unique, with consistent results. Having said that, when designing schemas with high reuse and extensibility, the shared namespace will start to make sense, given the right context and utilization. Very useful in larger, shared projects.

The external validator was java based. There are a few other commercial tools out there that would have worked just as well. The original schema from which I modeled the personal.xsd, is part of a larger set managed by a vendor. The set has been in use for several years, by us and other clients. So alteration was never in scope. And besides, clients using C++ and Java processors have no trouble consuming (and generating) XML based on these schemas. I don't think I would have, either. It's just that my particular effort required the use of Perl.

I believe I will take a different approach to validating the XML, at the expense of labor :-(. I will also attempt to get in touch with the xmlsoft, when time permits, to see if they'll view this as something to be solved (or have solved) in a future release. You appear to be very knowledgeable on this subject as well ! I thank you for your willingness and overall attitude.

  • Comment on Re^6: Validating an XML file with multiple schemas

Replies are listed 'Best First'.
Re^7: Validating an XML file with multiple schemas
by haukex (Archbishop) on Jan 10, 2019 at 11:19 UTC

    I've worked with XML a fair amount and written some Schemas myself, but it seems I hadn't come across something as (seemingly) complex as you're describing :-) Anyway, there are of course other modules you could try out and see if they work for you, I just don't have any experience with them. Other than that, if you do end up having to go the route of calling an external validator, then my module IPC::Run3::Shell might be of interest. Here's an example I adapted from one of my older projects where I call an external xmllint (this was before I had figured out the above solution using XML::LibXML):

    use IPC::Run3::Shell ':FATAL', [ xmllint => qw/ xmllint --noout --nonet --path /, $external_schemas_path, '--schema']; my $pass = eval { xmllint($schema, $file); $?==0 }; print $file, ": ", $pass ? "PASS" : "FAIL", "\n";

    The module also offers ways to capture STDOUT and STDERR if you want to suppress and/or inspect that.

    If the external validator is Java, then I've played around with Inline::Java, and it seems to work ok too.