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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.