RE: XML::LibXML::Schema will stop validation on first error
"Paulo SantAnna" <[email protected]>
| Newsgroups | gmane.comp.lang.perl.xml |
|---|---|
| Message-ID | <003f01cb287f$616e5750$244b05f0$@com> |
Hi Petr, I was getting ready to submit a patch for this and decided to check whether my MacOSX box was running the latest XML:LibXML code... turns out it was not. After updating to XML:LibXML 1.70 I don't this issue anymore. You can close out ticket Id: 59230 then. I apologize for the confusion. Thanks, Paulo -----Original Message----- From: Paulo SantAnna [mailto:[email protected]] Sent: Friday, July 09, 2010 3:17 PM To: 'Petr Pajas' Cc: '[email protected]' Subject: RE: XML::LibXML::Schema will stop validation on first error Hi Petr, Thanks for this response. It works! $ xmllint --schema test.xsd test.xml <?xml version="1.0" encoding="UTF-8"?> <request xmlns:xsd="http://www.w3.org/2001/XMLSchema" type="test"> <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>10</allocation> </room> </hotel> <foobar/> </request> test.xml:8: element hotel: Schemas validity error : Element 'hotel', attribute 'id': 'ten' is not a valid value of the atomic type 'xs:unsignedInt'. test.xml:14: element foobar: Schemas validity error : Element 'foobar': This element is not expected. test.xml fails to validate I will file in the bug report and look into the code to see if I can provide a patch as well. :-) Thanks for your help! Paulo -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Petr Pajas Sent: Thursday, July 08, 2010 6:26 PM To: Paulo SantAnna Cc: [email protected] Subject: Re: XML::LibXML::Schema will stop validation on first error 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 > > No virus found in this incoming message. Checked by AVG - www.avg.com Version: 9.0.830 / Virus Database: 271.1.1/2988 - Release Date: 07/08/10 14:36:00 _______________________________________________ Perl-XML mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs