The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

WebService::Validator::CSS::W3C - Interface to the W3C CSS Validator

SYNOPSIS

  use WebService::Validator::CSS::W3C;

  my $css = "p { color: not-a-color }";
  my $val = WebService::Validator::CSS::W3C->new;
  my $ok = $val->validate(string => $css);

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

DESCRIPTION

This module is an experimental interface to the W3C CSS Validation online service http://jigsaw.w3.org/css-validator/, based on its experimental SOAP 1.2 support. It helps to find errors in Cascading Style Sheets.

The following methods are available:

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

Creates a new WebService::Validator::CSS::W3C object. A custom LWP::UserAgent object can be supplied which is then used for HTTP communication with the CSS Validator. $url is the URL of the CSS Validator, http://jigsaw.w3.org/css-validator/validator by default.

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

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

string => $css

A style sheet 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 => $uri

The location of a style sheet or a HTML/XHTML/SVG document containing or referencing style sheets.

medium => "print"

The medium for which the style sheet should apply, one of aural, braille, embossed, handheld, print, screen, tty, tv, and presentation. A special value all can also be specified. The default is undef in which case the CSS Validator determines a value; this would currently be as if all had been specified.

profile => "css3"

The CSS Version or profile to validate against, legal values are css1, css2, css3, svg, svgbasic, svgtiny, mobile, atsc-tv, and tv. A special value none can also be used. The default is undef in which case the CSS Validator determines a default. This would currently behave as if css2 had been specified.

warnings => 2

An integer 0 - 10 that determines how many warning messages you want to get back from the CSS Validator, 0 means no warnings, 10 would give most warnings, but is currently effectively the same as 1. The defaut is undef in which case the CSS Validator determines a default value; this is expected to be as if 2 had been specified.

language => "de"

The desired language of the supposedly human-readable messages. The string will passed as an Accept-Language header in the HTTP request. The CSS Validator currently supports en, de, fr, ja, nl, zh, and zh-cn.

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 style sheet.

my @errors = $val->errors

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

  ( {
    context    => 'p',
    property   => 'color',
    expression => { start => '', end => 'not-a-color' }
    errortype  => 'parse-error',
    message    => 'not-a-color is not a color value',
    line       => 0,
  } )
my @warnings = $val->warnings

Returns a list with information about the warnings found for the style sheet. This is currently of limited use as it is broken, see http://www.w3.org/Bugs/Public/show_bug.cgi?id=771 for details.

@@example

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
  $val->user_agent->timeout(30);
  

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://jigsaw.w3.org/css-validator/validator 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 => $css)) {
    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.

BUGS

The SOAP 1.2 interface is highly experimental and thus likely to change, same goes thus for this module. There are also numerous bugs in the SOAP interface, those are tracked via W3C's Bugzilla, http://www.w3.org/Bugs/Public/.

Please report bugs in the W3C CSS Validator to www-validator-css@w3.org or enter them directly in Bugzilla (see above). Please report bugs in this module via RT, http://rt.cpan.org/.

NOTE

This module is not in any way associated with the W3C and please remember that the CSS Validator is a shared resource so do not abuse it. You should sleep between requests and consider installing the Validator locally, see http://jigsaw.w3.org/css-validator/DOWNLOAD.html.

AUTHOR

Bjoern Hoehrmann <bjoern@hoehrmann.de>

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