Olivier Thereaux


WebService::Validator::Feed::W3C - Interface to the W3C Feed Validation service


  use WebService::Validator::Feed::W3C;

  my $feed_url = "http://www.example.com";
  my $val = WebService::Validator::Feed::W3C->new;
  my $ok = $val->validate(uri => $feed_url);

  if ($ok and !$val->is_valid) {
      print "Errors:\n";
      printf "  * %s\n", $_->{message}
        foreach $val->errors


This module is an interface to the W3C Feed Validation online service http://validator.w3.org/feed/, based on its SOAP 1.2 support. It helps to find errors in RSS or Atom feeds.

The following methods are available:

my $val = WebService::Validator::Feed::W3C->new
my $val = WebService::Validator::Feed::W3C->new($ua)
my $val = WebService::Validator::Feed::W3C->new($ua, $url)

Creates a new WebService::Validator::Feed::W3C object. A custom LWP::UserAgent object can be supplied which is then used for HTTP communication with the W3C Feed Validation service. $url is the URL of the Feed Validator, http://validator.w3.org/feed/check.cgi by default.

my $success = $val->validate(%params)

Validate a feed takes %params as defined below. Either string or uri must be supplied. Returns a true value if the validation succeeded (regardless of whether the feed contains errors).

string => $feed_string

An atom or RSS feed, as a string. It is currently unlikely that validation will work if the string is not a legal UTF-8 string. If a string is specified, the uri parameter will be ignored. Note that GET will be used to pass the string to the Validator, it might not work with overly long strings.

uri => $feed_uri

The location of an RSS/Atom feed

my $success = $val->success

Same as the return value of validate().

my $is_valid = $val->is_valid

Returns a true value if the last attempt to validate() succeeded and the validator reported no errors in the feed.

my @errors = $val->errors

Returns a list with information about the errors found for the feed. An error is a hash reference; the example in the synopsis would currently return something like

  ( {
          type -> 'MissingDescription',
          line => '23',
          column => '0',
          text => 'Missing channel element: description',
          element =>description,
          parent =>channel,
  } )
my @warnings = $val->warnings

Returns a list with information about the warnings found for the feed


my $ua = $val->user_agent
my $ua = $val->user_agent($new_ua)

The LWP::UserAgent object you supplied to the constructor or a custom object created at construction time you can manipulate.

  # set timeout to 30 seconds

You can also supply a new object to replace the old one.

my $uri = $val->validator_uri
my $uri = $val->validator_uri($validator_uri)

Gets or sets the URI of the validator. If you did not specify a custom URI, http://validator.w3.org/feed/check.cgi by default.

my $response = $val->response

The HTTP::Response object returned from the last request. This is useful to determine why validation might have failed.

  if (!$val->validate(string => $feed_string)) {
    if (!$val->response->is_success) {
      print $val->response->message, "\n"
my $uri = $val->request_uri

The URI object used for the last request.

my $som = $val->som

The SOAP::SOM object for the last successful deserialization, check the return value of validate() or success() before using the object.


Please remember that the Feed Validation service is a shared resource, so do not abuse it: you should make your scripts sleep between requests.


olivier Thereaux <ot@w3.org>

Based on the WebService::Validator::CSS::W3C module by Bjoern Hoehrmann <bjoern@hoehrmann.de> et.al.

This module is licensed under the same terms as Perl itself.