Re: XML::LibXML::Schema will stop validation on first error
Petr Pajas <[email protected]>
| Newsgroups | gmane.comp.lang.perl.xml |
|---|---|
| Message-ID | <[email protected]> |
Hello Paulo, you can try using xmllint --schema to check if libxml2 supports multiple error reporting. If yes, then XML::LibXML::Schema should be able to support this too without much effort and you can file a bug at rt.cpan.org so that it's not forgotten (I cannot promise to address it any soon, though, but I have allocated sime time for XML::LibXML during the next two weekends; even better, I'll gladly accept a patch:-)). OTOH, if libxml2 does not support this, than you may ask how if this is hard to implement at [email protected], but note that AFAIK libxml2 development w.r.t. schema is in a "bug-fix-only mode" since the lead developer in this area left the project some time ago. -- Petr 2010/7/8 Paulo SantAnna <[email protected]>: > With the script inline this time: > xsd: > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <!-- channel --> > <xsd:element name="channel"> > <xsd:complexType> > <xsd:sequence> > <xsd:element name="username" type="xsd:string"/> > <xsd:element name="password" type="xsd:string"/> > </xsd:sequence> > <xsd:attribute name="name" use="required" type="xsd:string" /> > </xsd:complexType> > </xsd:element> > <!-- hotel --> > <xsd:element name="hotel"> > <xsd:complexType> > <xsd:sequence> > <xsd:element name="date"> > <xsd:complexType> > <xsd:attribute name="from" use="required" type="xsd:string" /> > <xsd:attribute name="to" use="required" type="xsd:string" /> > </xsd:complexType> > </xsd:element> > <xsd:element ref="room" minOccurs="1"/> > </xsd:sequence> > <xsd:attribute name="id" use="required" type="xsd:unsignedInt" /> > </xsd:complexType> > </xsd:element> > > <!-- room --> > <xsd:element name="room"> > <xsd:complexType> > <xsd:sequence> > <xsd:element name="allocation" type="xsd:unsignedInt"></xsd:element> > </xsd:sequence> > <xsd:attribute name="id" use="required" type="xsd:string" /> > </xsd:complexType> > </xsd:element> > <!-- building all together --> > <xsd:element name="request"> > <xsd:complexType> > <xsd:sequence> > <xsd:element ref="channel" maxOccurs="1"/> > <xsd:element ref="hotel" maxOccurs="1"/> > </xsd:sequence> > <xsd:attribute name="type" use="required" type="xsd:string" /> > </xsd:complexType> > </xsd:element> > </xsd:schema> > xml: > <?xml version="1.0" encoding="UTF-8"?> > <request type="test" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <channel name="channel"> > <username>user</username> > <password>pass</password> > </channel> > <hotel id="ten"> > <date from="2009-07-07" to="2009-07-17"/> > <room id="1"> > <allocation>ten</allocation> > </room> > </hotel> > </request> > perl script: > #!/usr/bin/perl > use strict; > use warnings; > use Data::Dumper; > #use Carp; > use vars qw( $xsd $xml $schema $parser $doc ); > use XML::LibXML; > > # > # MAIN > # > my $xsd = $ARGV[0]; > my $xml = $ARGV[1]; > > $schema = XML::LibXML::Schema->new(location => $xsd); > $parser = XML::LibXML->new; > $doc = $parser->parse_file($xml); > eval { $schema->validate($doc) }; > if ( $@ ) { > warn "xmlfile <$xml> failed validation: $@" if $@; exit(1); > } > else { print "No issues found\n"; } > > > On Thu, Jul 8, 2010 at 1:01 PM, Paulo SantAnna <[email protected]> wrote: >> >> Hello, >> I'm trying to use the XML::LibXML::Schema to validate a xml file against a >> xsd. The problem is if my xml has multiple semantic issues the validation >> will die on the first one and not report the others. >> # Find the first error, no reference to <foobar/> >> bash-3.2$ ./test.pl test.xsd test.xml >> xmlfile <test.xml> failed validation: test.xml:14: Schemas validity error >> : Element 'foobar': This element is not expected. >> # Removing the first error it finds another "ten" is not an unsigned int >> xmlfile <test.xml> failed validation: test.xml:11: Schemas validity error >> : Element 'allocation': 'ten' is not a valid value of the atomic type >> 'xs:unsignedInt'. >> # Changing "ten" to 10 fixes this issue >> bash-3.2$ ./test.pl test.xsd test.xml >> No issues found >> >> I would like to get a report of ALL the issues. Any ideas? Should I be >> using another module for this? I have attached my Perl script and my xsd and >> xml files. >> Thanks for your help, >> Paulo > > _______________________________________________ > Perl-XML mailing list > [email protected] > To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs > > _______________________________________________ Perl-XML mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs